-
Notifications
You must be signed in to change notification settings - Fork 3
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.
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.
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)
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.
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.
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.
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.
tinyhivemind is GPL-3.0-only. Built by @senamakel.
Start here
The algebra
- Shared medium
- Desks and rosters
- Mentions
- Cross-desk referral
- Transcript projection
- Threads
- Recall
- Private asides
- Responder ladder
Hive mechanics
- Hive episodes
- Trace grammar
- Transactive memory
- Episode policy
- Benchmarks
- Benchmarks: live rooms
- Benchmarks: delegation
- Benchmarks: private exchange
Working on it
Reference