Skip to content

Transactive memory

Steven Enamakel edited this page Sep 5, 2026 · 3 revisions

Transactive memory

A room can say who is here and who spoke. Saying who knows is a different question, and until P10 the library had no way to answer it.

Wegner (1986) put the answer in a place that is easy to miss: a group's memory is not the union of what its members remember. It is the directory — the index of who holds what — plus the habits of updating it, routing new information to the right holder, and retrieving from them rather than re-deriving. Lose the directory and a group with all the same knowledge performs much worse.

tinyhivemind-hive folds that directory out of the transcript.

Why it matters here

A hidden profile is the case that makes the gap visible. One member holds the fact that overturns the option everybody else likes; the room discusses what everyone already knows and decides wrongly. The live run found exactly that shape: the holder had already deposited the fact, nobody cited it, and the attention market never pointed at that member again.

Nothing in the library could see the difference between the member who stated the measurement and the member who agreed with a graph. The only expertise-shaped field, AgentThreshold.affinity, was supplied by a host and never written by anything.

The two estimators

Lewis (2003) validates transactive memory as three factors. Two of them can be estimated from an attributed transcript, and the library estimates exactly those two.

Specialisation is what a member deposited. A stated fact weighs 1000, a grounded position weighs 600, and anything ungrounded weighs nothing — including a proposal or a support with no citation. Deposits decay by sequence distance on the same half-life the salience field uses.

Credibility is what the room did with those deposits. Every other member's trace that cites one adds credit, on the topic that citer named; an objection aimed at one debits, and the result is clamped at zero. Citing yourself earns nothing at all. Credibility is a judgement other members made, which is the whole reason it is a separate term.

A refutation counts as a citer. Killing a topic with somebody's fact is the room using that fact, on the topic it was used against.

The two are combined with a third term:

weight = clamp((specialisation·30 + credibility·20 + prior·10) / 10, 0, 1_000_000)

The host's affinity is a prior, not an authority

Hollingshead (2000) separates a diffuse cue — a role label, a job title, a configured affinity — from a specific cue, meaning observed contributions. Teams lean on diffuse cues early and on specific ones as shared history accumulates, and the diffuse cue's influence falls with experience.

So AgentThreshold.affinity enters the fold as one term among three, at a third of the credibility weight, and only where a host actually declared a topic. An undeclared topic contributes nothing rather than the neutral 50 the salience multiplier substitutes: "unknown" and "moderately expert" are different claims.

What it changes

Nothing, unless a host asks. With directory: None in the episode policy, no directory is folded and the attention market behaves exactly as it did before.

With one, the member the directory names on the contested topic — and who has taken no position on it — bids BidReason::Knows, between Dissent and Quiet in precedence. The contested topic is the most recent live !defer's topic, or the uncarried standing with the most support. The bonus buys an unheard fact its hearing and stops the moment its holder argues the topic, so it cannot compound.

Directory::lines() renders the whole thing for a prompt:

#pool: archivist 1420 (spec 900, cred 520) · critic 300 (spec 300, cred 0)

Nothing in the library renders it. Stasser's work on expert role assignment found that announcing who knows what raises unique-item sampling in a hidden profile, though modestly — roughly 29% to 34% in the meta-analysis. A host that pastes those lines into a prompt should know it is also announcing the host's own prior as if the room had earned it.

The circularity, stated plainly

Who spoke becomes who is thought to know. DyLAN's agent importance score, a subagent router matching a task against a description, and any transcript-folded affinity share this defect: the estimator's input is the output of the policy it feeds. Left alone it is an information cascade with a routing table attached.

Three things bound it, and none removes it. Speech is not the estimator — only grounds and stated facts deposit, and credibility accrues only from other members. The bonus stops once its holder takes a position. And nothing persists: the directory is refolded on every step and dies with the episode.

Two things are not bounded. Two members that cite each other raise each other for free, and nothing detects a citation ring. A member that wins more turns has more chances to deposit.

So the benchmark carries an obligation written before any numbers: report the rank correlation between directory weight and speech share next to accuracy. A directory that tracks who talked has learned nothing, and should be reported as having failed even if accuracy rose. Directory::entries() is public so that check can be run from outside the crate.

Why it is off by default

EpisodePolicy::DEFAULT carries directory: None and defer_cap: None, because the benchmark scored the arm and it did not win.

The predicted effect on a room of uniform expertise was zero — there is nothing to route on — and it was exactly zero: hive+dir is hive+ to the digit on 5000 uniform rooms, and BidReason::Knows never fires there at all. On the shape it was built for, a hidden profile with an evidence-first opening, it scores 65.8% against 66.3% for the same policy without it, with Knows winning the floor in 77.5% of episodes. !defer is neutral by the same measure. The one arm that moves is the opening: members depositing before they argue takes a hidden profile from 15% to 66%, and that is a fact about when a member speaks rather than about anything in this fold.

Live rooms agree and add one thing the simulation could not. The directory rendered into every deliberation prompt of twenty-four live rounds — one #topic: agent weight (spec N, cred N) line per contested topic — and no turn in any of those 240 was awarded on BidReason::Knows, for the structural reason above: by the time a topic is contested, its top holder has taken a position on it. !defer, the move that would clear that position, was used zero times although it sat in every move list. See Benchmarks: delegation.

Three other reasons stand behind that number. An episode of six or seven turns is a short window for any estimator. A directed router earns its weight by grounding a topic, so it converges on the member who argued hardest rather than the one who reads best — and it gets worse with shared history. And the published taxonomy of multi-agent failures puts role violation at 1.5% of observed failures against 15.7% for step repetition, so an expertise layer buys little against that distribution and adds surface for the failure that dominates it.

It ships opt-in, and it is allowed to lose in public: two mechanisms in this crate were measured, lost, and were left opt-in before it.

See docs/specs/expert-delegation.md, ADR 0007, and the reading in docs/research/delegation.md.

Clone this wiki locally