# ICCC — Individual Conversation Characteristics Curves

## What it is

ICCC models each participant's changing characteristics within a multi-person or
multi-agent discussion. Its input structure is

```
Sₜ = (pₜ, vₜ, lₜ, gₜ, t)
```

where `pₜ` is the contributing participant, `vₜ` the speech act, `lₜ` the
natural-language contribution, `gₜ` the set of target participants, and `t` the
timestamp or ordered index.

## What it is not

ICCC is **not** LCC applied to several people. There is no instructional
reference model, no notion of correctness, and no expectation coverage. Every
ICCC measure is referenced to the other participants and the evolving
discussion.

## Target resolution

Targets are resolved in strict priority order, and the method and confidence are
always recorded:

1. explicitly submitted targets — confidence 1.0
2. reply / parent-turn structure — 0.9
3. direct address (`@name`, vocative) — 0.85
4. speech-act and discourse inference — 0.7 in a dyad, 0.45 otherwise
5. group-level default — 0.3, flagged `ICCC_LOW_TARGET_CONFIDENCE`
6. unknown — 0

**A contribution is never assumed to target the immediately preceding
participant.** The resolution method sets the adjacency weight `a_tj` used by
Overall Responsivity and Social Impact. The distinction between a weighted mean
and a weighted sum matters: Overall Responsivity is a **conditional similarity
mean**, so a common positive adjacency weight cancels from its numerator and
denominator. With one target, a group default can have the same responsivity as
an explicit target; this does not imply equal evidence strength.

The metric's detail fields report `adjacencyEvidenceStrength = Σ(w·a)/Σw` and
`adjacencyWeightedSimilarity = Σ(w·a·S)/Σw`, alongside target confidence and the
conditional `targetingAdjusted` value. These additions preserve the original
responsivity curve and show the weight magnitude separately; none is a calibrated
probability of a correct target. If no positive adjacency weight is available,
the existing all-other-contributions similarity fallback is retained and marked
`usedUntargetedFallback: true`, with its actual evidence IDs and sample size.

## Calculation contexts

| Mode | Weight |
|---|---|
| `cumulative` | 1 for every prior contribution |
| `rolling_window` | 1 inside the window, 0 outside |
| `exponential_decay` | `w_tj = e^(−λ·d(t,j))` |

Distance is measured in contributions, seconds or minutes. The unit and λ are
persisted with every result, because a curve is meaningless without them.

## The six measures

| Measure | Question it answers | Range |
|---|---|---|
| **Participation** | How large a share of the window did this participant hold, relative to an equal share? | ≥ 0, 1 = equal |
| **Overall Responsivity** | How strongly does this contribution respond to recent contributions by others? | 0–1 |
| **Internal Cohesion** | How similar is this contribution to the participant's own recent contributions? | 0–1 |
| **Social Impact** | How much did this contribution trigger later responses from others? | ≥ 0 |
| **Newness** | How unlike everything before it is this contribution? | 0–1 |
| **Communication Density** | How many semantic units per 100 visible tokens? | ≥ 0 |

Formulas are in [`metric-dictionary.md`](metric-dictionary.md).

Every metric returns raw and normalised values, sample size, status, evidence
identifiers, confidence where meaningful, and quality flags. Status is one of
`available`, `provisional`, `insufficient_history`, `not_applicable`, `failed`.

As of `iccc-1.1.0`, exactly zero similarity to an existing own/other history is
reported as newness 1, not missing. Invalid or zero-norm embeddings raise an
explicit semantic-vector error instead of being treated as neutral similarity.
When valid opposing embeddings have a zero centroid, centroid-based detail
variants are `null` with `ZERO_DENOMINATOR`; other pairwise metrics remain available. These numerical
guards do not constitute empirical validation of the semantic measures.

## Social Impact is provisional by construction

Social Impact depends on contributions that have not happened yet. A point near
the end of the known thread cannot be final. Its state progresses

```
provisional → stabilizing → final
```

as later contributions arrive (3 for stabilizing, 8 for final). When new
contributions land, every still-open window is recalculated and published as a
**new versioned revision**. Historical statements and stored revisions are never
mutated.

The interface draws provisional points as hollow markers with dashed segments,
and keeps a revision ledger showing every published change.

## Smoothing and normalisation

Raw points are always retained. Smoothed and normalised series are additional
views in separate fields.

Thread-local normalisation (`within_thread_minmax`,
`within_participant_zscore`) makes values incomparable across threads and raises
`ICCC_NORMALIZATION_NOT_COMPARABLE`. Cohort z-scores require supplied cohort
statistics and return `null` without them rather than inventing a reference.

Curves computed under different semantic models, algorithm versions, task
definitions or normalisation schemes are never compared without an explicit
incompatibility warning. `GET /threads/:threadId/iccc/comparability?a=&b=`
answers the question directly.

## Prohibited interpretations

- **Participation** is not engagement, effort or leadership.
- **Overall Responsivity is not agreement.** A rebuttal is highly responsive.
- **Internal Cohesion** carries no value: high can be continuity or repetition,
  low can be exploration or incoherence.
- **Social Impact is not benefit.** Confusing and controversial contributions
  reliably trigger the most responses.
- **Newness is not usefulness.** Off-topic noise scores maximally new.
- **Communication Density is not lexical density**, and is `null` — never
  substituted — when unit extraction is unavailable.

## Reading the six together

The measures are designed to be read as a set. A participant with high
Participation and low Social Impact is talking without being taken up. One with
low Participation and high Social Impact is saying little that lands hard. High
Internal Cohesion with low Newness is someone restating a position. None of
these are verdicts; they are places to look at the transcript.
