Prompt Duplicate Closeout Repair
This reference records the process used to prevent duplicate prompt corruption and unsafe full-document IPC closeout. It focuses on the failure mode where a template session document has already passed through IPC/write handling, but the working tree still contains an adjacent normalized/raw copy of the same prompt before commit closeout.
Process
flowchart TD
userEdit["User edits agent:exchange"]
preflight["preflight captures stable baseline"]
response["Agent response parsed as component patch"]
ipcScope{"Template or agent:* component document?"}
componentPatch["Use component patch or synthesized exchange patch"]
fullContentReject["Reject fullContent IPC for template/component scope"]
sourceProof{"Would caller need fullContent IPC?"}
fullContentDisabled["Return false; fullContent IPC disabled"]
receiverDisabled["Editor plugins reject/delete any fullContent payload"]
guardedDisk["Guarded disk/snapshot fallback"]
editorApply["Editor/socket/file IPC applies patch"]
sidecar["ACK sidecar provides materialized content"]
writeRepair["Write path duplicate-prompt repair"]
snapshot["Save repaired snapshot"]
commitStart["commit closeout reloads snapshot and working tree"]
responseDedupe["Deduplicate adjacent assistant response blocks"]
promptRepair["Commit pre-stage prompt repair against snapshot"]
prefixVariant{"Adjacent prompt-prefix variant?"}
collapse["Keep normalized prompt, remove raw duplicate"]
equivalent{"Repaired file prompt-prefix-equivalent to snapshot?"}
updateSnapshot["Update snapshot to repaired clean content"]
preserveSnapshot["Keep snapshot; do not absorb arbitrary drift"]
driftMeasure["Measure drift from repaired file length"]
stage["Stage snapshot blob"]
commit["git commit plus session-check"]
failClosed["Fail closed on unresolved prompt residue or unsafe drift"]
userEdit --> preflight --> response --> ipcScope
ipcScope -- "yes" --> componentPatch --> fullContentReject --> editorApply
ipcScope -- "no" --> sourceProof
sourceProof -- "yes" --> fullContentDisabled --> receiverDisabled --> guardedDisk --> writeRepair
sourceProof -- "no" --> guardedDisk
editorApply --> sidecar --> writeRepair --> snapshot --> commitStart
commitStart --> responseDedupe --> promptRepair --> prefixVariant
prefixVariant -- "yes" --> collapse --> equivalent
prefixVariant -- "no" --> equivalent
equivalent -- "yes" --> updateSnapshot --> driftMeasure
equivalent -- "no" --> preserveSnapshot --> driftMeasure
driftMeasure --> stage --> commit
promptRepair --> failClosed
Key Invariants
- Template documents and documents with
agent:*components must use component patches or fail closed for retry when editor repair cannot be proven. They must not use full-document IPC for normal response writes. - Whole-document IPC is disabled in the first-party binary. Any normal response
path that would emit
fullContentlogsfull_content_ipc_disabled, returnsfalse, and cannot authorize a direct disk/snapshot repair without separate editor-owned proof. - Editor plugins also reject or delete legacy/foreign
fullContentpayloads without applying them. Source-buffer proof is diagnostic-only. - Write paths that touch
agent:exchangerun duplicate-prompt repair before snapshot trust. - Commit closeout repeats the safe prompt repair subset before staging. This closes failures that appear after IPC has already consumed the response.
- The commit repair is snapshot-bounded: it can remove prompt duplicates already represented by the snapshot and adjacent normalized/raw prompt variants, but it cannot absorb arbitrary user edits into the snapshot.
- Drift diagnostics use the repaired working-tree length so a fixed duplicate is not reported as unresolved out-of-band drift.
Covered Failure
The named regression shape is:
snapshot:
prompt
working tree:
agent prompt prefix + prompt
prompt
Before the fix, closeout could leave this as positive drift and still stage the
snapshot path. The repaired path keeps one normalized prompt, repairs the
working tree, updates the snapshot only when prompt-prefix-equivalent, and logs
commit_pre_stage_prompt_duplicate_repaired.
Regression Tests
write::tests::commit_prompt_repair_dedupes_exact_prefixed_raw_prompt_copygit::tests::commit_repairs_prompt_prefix_duplicate_drift_before_staging
The wider guard surface remains covered by the duplicate prompt suite plus
regressions that assert no fullContent payload is emitted.