Skip to content

2.9.14: split agent/non-agent history recall (candidate 10/3) — battery gate first, then the turn 2-n degradation read on h3ere-ciris #20

Description

@emooreatx

PRE-REGISTRATION — characterize the multi-turn reasoning collapse before testing any mitigation

Filed for RATCHET. Frozen before any run below. The phenomenon is measured (pipeline_effect sign flip, response length 137→9 chars over ten turns, CIRISOntology#4); this turns it into a fitted constant mitigations can be scored against. It also corrects two diagnoses that looked right and were not.

0. What the code does, checked in the source rather than assumed

CIRIS refreshes properly. build_thought_context rebuilds a SystemSnapshot every thought — the accord is re-emitted each turn. Instruction-recency drift is NOT the mechanism, and any mitigation aimed at it is wasted.

Task history carries no prose. batch_context.py fills each TaskSummary from get_recent_completed_tasks("default", 10) — a window exactly one arc long, which looks damning — but populates only task_id, channel_id, created_at, status, priority, retry_count, parent_task_id. The schema's result field is never set. The agent does not see its prior verdicts through this channel.

The harness does NOT double the transcript, and this is the load-bearing correction. withdraw_arc.py::ask_agent posts {"message": text, "context": {"channel_id", "session_id"}} to /v1/agent/interactone message, no history. The agent holds conversational state server-side. The growing transcript in withdraw_post.py exists ONLY for the bare-provider half, where nothing else can hold it.

Consequence: transcript maintenance and pipeline context are disjoint. The harness cannot be the pipeline arm's self-conditioning channel, and --history intact|scrubbed — which only affects the bare half — diagnoses the reversion confound and cannot diagnose the pipeline decay at all. Any run plan built on that flag for this purpose is measuring the wrong arm.

1. RUN ZERO, and nothing may precede it: instrument what the agent actually sees

The pipeline arm's decay must be caused by something inside CIRIS's own context, and we have not established what. The adapters expose channel history (get_correlations_by_channel in the API/Discord/CLI adapters) but whether — and how much of — it reaches the DMA prompt is unverified. Guessing here is how the last two diagnoses died.

RUN 0 — CONTEXT CENSUS. Using the existing compose_dump instrument, dump the composed DMA prompt at turn 1 and turn 10 of the same arc, same channel, and diff them. Report, per turn: total composed bytes; bytes attributable to the accord; bytes attributable to the agent's own prior speech, by block; and the count of prior-turn artifacts present.

This is the gate. No mitigation is designed, and no further run is funded, until the census names the channel through which prior output reaches the prompt — or shows that none does, which would falsify self-conditioning outright and redirect to context pressure.

2. The observable, and the fit that makes mitigations comparable

Per arm, per turn t = 1…10: response length L(t) (tokens preferred) and concordance C(t). Fit per arm:

L(t) = L_inf + (L_1 - L_inf) * exp(-(t - 1) / tau)

L_1 the undegraded state · L_inf the attractor (measured ≈ 9 chars, the shortest valid verdict token) · tau the decay constant in turns — the score.

Pre-registered success bar for any mitigation: tau at least doubled, or L_inf at least half of L_1. Bootstrap CIs over arcs; report all three parameters always.

3. The mediation test — the highest-information analysis here

Mixed model, arc as random effect: regress C on arm + turn + length.

  • arm × turn interaction vanishes when length enters → length mediates; restoring length restores concordance.
  • interaction survives → something degrades alongside length; no length-restoring fix is licensed, and the campaign learns that before paying for one.

Costs one regression on data Run 0/1 already produce.

4. The runs, after the census

RUN 1 — BASELINE. Full ten-turn arcs, live agent, pipeline and direct arms, ≥20 arcs. Yields L(t), C(t), the fit, the mediation.

RUN 2 — THE CONTROL THAT MATTERS MOST. Seed a direct arm with a long, reasoned turn-1 response, then run normally. Stake: if the direct arm now degrades too, the collapse is entrainment on one's own prior form and is NOT a pipeline property — the pipeline arm falls only because it starts far from the attractor. Run this before any mitigation; it is the strongest single test of mechanism, and it is cheap.

RUN 3 — BYTES vs POSITION. Pad the turn-1 context to turn-10 byte length. If length collapses at turn 1 under padding, the driver is context pressure (54 KB accord + accumulation), not position, and consolidation is the fix rather than anything about self-output.

RUN 4 — THE MITIGATION, and only if the census + Run 2 identify self-output as the channel. Replace whatever the census found carrying prior prose with a fixed-shape structured summary (verdict + ≤2 reason clauses) in the same slot. Stake: tau clears the §2 bar AND the agent's answers remain responsive to what it previously committed to.

Why structured and not elided. Eliding prior turns obscures what the agent said in reply and breaks conversational continuity in practice — it is an acceptable diagnostic and an unacceptable product. Continuity is knowing what you committed to; entrainment is imitating how you phrased it. A structured summary keeps the first and drops the second. Note the symmetry the census will likely confirm: CIRIS already does exactly this for its own task history — metadata, no verbatim result — and whatever channel is leaking prose is the one place that pattern was not applied.

5. Outcome meanings, pinned now

result reading
census finds no prior-prose channel self-conditioning falsified; go to Run 3, context pressure
Run 2 direct arm degrades entrainment, general — not a pipeline defect, and the finding generalizes past CIRIS
Run 2 direct arm stable, census finds a prose channel pipeline-specific onset: it falls because it starts high; Run 4 is licensed
Run 3 collapses at turn 1 context pressure — consolidate (ERGO-style), do not elide
mediation interaction survives everywhere length is a symptom; no length-restoring fix is licensed
census + Runs 2,3 all null mechanism unidentified — report open, ship nothing

6. Two cautions that ride with this

This is not unpaid_decays. The rent clause describes decay when payment stops; here the pipeline is applied every turn — payment never stops. If self-conditioning is the mechanism the dynamics are autocatalytic, a different equation with a different fixed point. The tau fit distinguishes them. Reading it as rent-clause confirmation would be substance-survives-warrant-fails with our own theorem as the false warrant.

This does not restore pipeline_effect. That contrast stays withdrawn whatever happens here — a mitigation found after the confound cannot un-confound a design staked before it. If a mitigation works, the contrast is re-registered as a new design with the mitigation named in it.

Refs: CIRISOntology#4; GATES.md position-in-sequence confound; Laban et al. 2505.06120; self-conditioning, 2509.09677; ERGO 2510.14077; terseness suppresses epistemic verbalization, 2603.24472.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions