Context
Writing #16055 from a live incident, I encoded the root cause as a quotation from a document rather than as the operation that caused it. The body said the redeploy runbook "goes straight to docker compose down -v and states 'this step deletes the stored AI data (approved)'".
That one authoring choice produced a measurable correction cycle:
- Pre-implementation, I grepped this repo for the quoted phrase, got zero hits, and published "Gap 2 — FALSIFIED" to the ticket.
- The conclusion was wrong. The wipe happened; I had observed it directly on the deployment. Only the attribution was wrong — the instruction lived in a tenant-authored checklist, not ours.
- @tobiu caught it: "you mean wiping klarso MC data with a docker command does not count?!? you KNEW this when creating the ticket. do not downplay facts."
- Cost: a false falsification on a public ticket, a full body rewrite, two correction comments, and operator time.
@tobiu's root-cause on the whole chain: "the ticket body should have contained the info => using docker -v is the potential culprit. then it would have been clear right away."
The Problem
Quoting a document makes the DOCUMENT the subject. Once the root cause is phrased as "runbook X says Y", the natural verification is a text search for Y — and a text search cannot answer "did this event occur". It answers "is this string in these files". When those two are conflated, a narrow negative result silently overturns a direct observation, and it does so in the exculpatory direction: "we ship a data-destroying update path" degrades into "I cited the wrong document."
Had the body opened with "the culprit is docker compose down -v removing the named volumes", the subject is system behaviour, there is nothing to mis-grep, and the mechanism is legible in one line.
This is not covered today, and the near-miss is why. ticket-create-workflow.md §5 requires "Context — …What observational evidence supports the premise." A quotation satisfies that wording while being second-hand. The rule reads as met, so nothing fires.
Two independent instances in the same body, which is what makes this structural rather than one slip:
- the runbook quotation above, and
- "the only copies of a bundle live in the same Docker named volumes the update removes" — a derived claim (I inferred it from the volume list) stated in the same register as an observed one. The data was in a destroyed named volume; bundles bind-mount to the host. Nothing in the body marked which claims were watched and which were reasoned.
Incident-derived tickets are a recurring category — the entire cloud-deployment lane is built from them — so the exposure is ongoing, not historical.
The Architectural Reality
Two substrate surfaces, one failure chain, both currently silent on it:
.agents/skills/ticket-create/references/ticket-create-workflow.md — §5 (Fat Ticket Body Structure) defines the Context bullet; §8 (Anti-Patterns) is the table an author scans.
learn/agentos/process/correction-culture.md (73 lines) — owns how a claim gets re-examined. grep for falsif|narrow|direction|observation returns only two unrelated hits, so the "narrow negative vs direct observation" asymmetry is absent.
The fix must be mechanical, not exhortative. ADR 0019 §Group D/E records that "be more careful" was falsified 4/4 on a doc-prepared config review; a rule an author can satisfy by feeling diligent is worth nothing.
The Fix
One PR, two files.
ticket-create-workflow.md §5, Context bullet — add a checkable clause: the Context's opening sentence names the operation, command, or call that produced the failure, in backticks. If the root cause can only be stated as a quotation from a document, the mechanism has not been identified yet — the quotation is a lead, not a cause.
ticket-create-workflow.md §8 — one anti-pattern row: Root cause stated as a quotation from a document → "Makes the document the subject; verification degenerates into a text search, which cannot decide whether the event occurred."
correction-culture.md — the retraction asymmetry, in two clauses: (a) a negative result from a narrow instrument never overturns a direct observation — state what the tool can decide and confirm the claim is inside that set before writing "falsified"; (b) when a correction lands on not our fault / not real / smaller than stated, that is the moment for the extra check, not for publishing. Corollary: FALSIFIED on a multi-clause gap is almost always wrong — give each clause its own verdict.
Total addition is roughly 6 lines across two files.
Decision Record impact
none. This adds authoring discipline within existing skill/process substrate; it neither amends nor challenges an accepted ADR. It cites ADR 0019's Group D/E finding as the reason for choosing a mechanical rule over an exhortative one.
Substrate Accretion Defense
Does not net-reduce loaded bytes (~6 lines added), so the decay-mitigation rationale is stated explicitly:
- Sunset condition: retire clauses 1–2 when a mechanical ticket-body lint exists that can assert "the Context's first sentence contains a backticked operation". The repo already runs body-shaped gates (
check-ticket-archaeology, lint-pr-body), so that home is plausible rather than hypothetical.
- Retirement trigger: the first PR that adds ticket-body linting must drop the prose clauses it mechanizes.
- Slot disposition: §8 is a scannable table whose per-row cost is one line; clause 3 lands in a 73-line process doc with no competing content.
Acceptance Criteria
Out of Scope
- Building the ticket-body lint. Named as the sunset condition, deliberately not built here — that is its own ticket with its own AC set, and shipping prose now does not depend on it.
- Retrofitting existing ticket bodies. #16055 is already corrected; a sweep of the backlog is
#15000's territory.
- Any change to the PR-review template, which has its own budget gates.
Related
- #16055 — the incident that produced this friction; carries the full correction trail.
- #15000 — aged-backlog triage, the owner of any retrospective body sweep.
- ADR 0019 — the "be more careful is falsified" empirical anchor this fix is shaped by.
Origin Session ID: 997bcd2e-7327-4cad-9ac6-3378193c046b
Retrieval Hint: query_raw_memories("incident ticket root cause quotation document grep falsified narrow negative direct observation")
Context
Writing #16055 from a live incident, I encoded the root cause as a quotation from a document rather than as the operation that caused it. The body said the redeploy runbook "goes straight to
docker compose down -vand states 'this step deletes the stored AI data (approved)'".That one authoring choice produced a measurable correction cycle:
@tobiu's root-cause on the whole chain: "the ticket body should have contained the info => using docker -v is the potential culprit. then it would have been clear right away."
The Problem
Quoting a document makes the DOCUMENT the subject. Once the root cause is phrased as "runbook X says Y", the natural verification is a text search for Y — and a text search cannot answer "did this event occur". It answers "is this string in these files". When those two are conflated, a narrow negative result silently overturns a direct observation, and it does so in the exculpatory direction: "we ship a data-destroying update path" degrades into "I cited the wrong document."
Had the body opened with "the culprit is
docker compose down -vremoving the named volumes", the subject is system behaviour, there is nothing to mis-grep, and the mechanism is legible in one line.This is not covered today, and the near-miss is why.
ticket-create-workflow.md§5 requires "Context — …What observational evidence supports the premise." A quotation satisfies that wording while being second-hand. The rule reads as met, so nothing fires.Two independent instances in the same body, which is what makes this structural rather than one slip:
Incident-derived tickets are a recurring category — the entire cloud-deployment lane is built from them — so the exposure is ongoing, not historical.
The Architectural Reality
Two substrate surfaces, one failure chain, both currently silent on it:
.agents/skills/ticket-create/references/ticket-create-workflow.md— §5 (Fat Ticket Body Structure) defines theContextbullet; §8 (Anti-Patterns) is the table an author scans.learn/agentos/process/correction-culture.md(73 lines) — owns how a claim gets re-examined.grepforfalsif|narrow|direction|observationreturns only two unrelated hits, so the "narrow negative vs direct observation" asymmetry is absent.The fix must be mechanical, not exhortative. ADR 0019 §Group D/E records that "be more careful" was falsified 4/4 on a doc-prepared config review; a rule an author can satisfy by feeling diligent is worth nothing.
The Fix
One PR, two files.
ticket-create-workflow.md§5,Contextbullet — add a checkable clause: the Context's opening sentence names the operation, command, or call that produced the failure, in backticks. If the root cause can only be stated as a quotation from a document, the mechanism has not been identified yet — the quotation is a lead, not a cause.ticket-create-workflow.md§8 — one anti-pattern row:Root cause stated as a quotation from a document→ "Makes the document the subject; verification degenerates into a text search, which cannot decide whether the event occurred."correction-culture.md— the retraction asymmetry, in two clauses: (a) a negative result from a narrow instrument never overturns a direct observation — state what the tool can decide and confirm the claim is inside that set before writing "falsified"; (b) when a correction lands on not our fault / not real / smaller than stated, that is the moment for the extra check, not for publishing. Corollary:FALSIFIEDon a multi-clause gap is almost always wrong — give each clause its own verdict.Total addition is roughly 6 lines across two files.
Decision Record impact
none. This adds authoring discipline within existing skill/process substrate; it neither amends nor challenges an accepted ADR. It cites ADR 0019's Group D/E finding as the reason for choosing a mechanical rule over an exhortative one.Substrate Accretion Defense
Does not net-reduce loaded bytes (~6 lines added), so the decay-mitigation rationale is stated explicitly:
check-ticket-archaeology,lint-pr-body), so that home is plausible rather than hypothetical.Acceptance Criteria
ticket-create-workflow.md§5'sContextbullet requires the opening sentence to name the causing operation/command/call in backticks, and states that a root cause expressible only as a document quotation is an unidentified mechanism.ticket-create-workflow.md§8 gains theRoot cause stated as a quotation from a documentanti-pattern row with its harm stated.correction-culture.mdcarries both retraction clauses: narrow-instrument negatives never overturn a direct observation, and exculpatory-direction corrections take extra scrutiny before publication.Out of Scope
#15000's territory.Related
Origin Session ID:
997bcd2e-7327-4cad-9ac6-3378193c046bRetrieval Hint:
query_raw_memories("incident ticket root cause quotation document grep falsified narrow negative direct observation")