PTV-SCF-0001 P3 — verification round (G-02)
rank: decision outranks: [] doc_id: PTV-DEC-0021 title: PTV-SCF-0001 P3 verification round — one gate passes, nine fail, twelve friction items date: 2026-08-25 status: open — awaiting human countersign owner: petrova-codes scaffold: PTV-SCF-0001 phase: P3 supersedes: none depends_on: docs/decisions/2026-08-14-ptv-scf-0001-p3-open.md
Section titled “rank: decision outranks: [] doc_id: PTV-DEC-0021 title: PTV-SCF-0001 P3 verification round — one gate passes, nine fail, twelve friction items date: 2026-08-25 status: open — awaiting human countersign owner: petrova-codes scaffold: PTV-SCF-0001 phase: P3 supersedes: none depends_on: docs/decisions/2026-08-14-ptv-scf-0001-p3-open.md”PTV-SCF-0001 P3 — verification round (G-02)
Section titled “PTV-SCF-0001 P3 — verification round (G-02)”Date: 2026-08-25
Status: open — awaiting human countersign
Shape: G-02 (docs/PETROVA-GOLDEN-PROMPTS.md §2), run through skills/petrova-verify-round/SKILL.md
Terminal state of this record: ten gate verdicts, twelve classified friction
items, and a dry-run verify_round invocation. It closes no phase, discharges
no gate, and applies nothing. G-03 is a separate session against this record
once merged.
What was loaded
Section titled “What was loaded”https://petrova.blog/llms-preamble.txt— 8,230 bytes, fetched withcurl, not with a summarising fetch tool. Law fingerprint139ba74609b4, source commit8ae9613a3af1. Operating underL1–L7andW1–W4as written in those bytes.- The deviation is recorded rather than glossed. The skill’s step 1 says fetch the preamble; the tool that ordinarily does so returned a model-written paraphrase of roughly 1.4 KB. That is the same workaround the P3 open had to use, unchanged eleven days later, and it is G-P3-7’s evidence rather than a footnote.
Round target
Section titled “Round target”petrova-codes, confirmed with the operator. skyflow-me’s Phase 6 is also open
and has no friction round; under L4 that is its own repo’s ledger and is not
touched here.
Every gate was re-evidenced against merged main (HEAD b71930ea) in this
session. Two were exercised rather than read: the law fetch (G-P3-7) was
run through both paths and byte-counted, and the phase-state derivation
(G-P3-9) was read to the regex that decides what it can see.
Part A — gate evaluation
Section titled “Part A — gate evaluation”G-P3-1 — canary registered, credential scoped, shown by failing elsewhere
Section titled “G-P3-1 — canary registered, credential scoped, shown by failing elsewhere”PASS, on a record that is itself open.
registry.yaml:782-795, the file’s only role: canary entry. App
petrova-canary-probe id 4605881, installation 153988870,
repository_selection: selected, total_count: 1
(docs/decisions/2026-08-15-ptv-scf-0001-p3-c0-close.md:44-59). The operative
clause is satisfied by executed refusals, not assertion: GET returns 404
against petrova, kahn-hq, eva-hq and 200 against petrova-canary (:82-87);
merge returns 405 and a main write returns 409 (:111-121).
Two qualifications, neither of which flips the verdict, both carried below: the
write half of the negative test was not executed and is disclosed as a
coverage gap (:95-104), and the record’s human countersign is unticked
(:179), which under
docs/decisions/2026-08-10-countersign-gates-closed-status.md keeps that
decision open.
G-P3-2 — probe asserts every A2 hop, three green runs, run IDs cited
Section titled “G-P3-2 — probe asserts every A2 hop, three green runs, run IDs cited”FAIL. The probe is a skeleton by its own declaration:
cli/src/probes/write-probe/index.ts:4 — “the apply path is C2’s”.
runSkeleton returns stage: "skeleton" and five hop ids. Of A2’s nine
hops, four are implemented (schema resolution hops.ts:90-109, fingerprint
:129-191, admission :210-217); idempotency key, phase integrity, dry-run
render, apply, PR emission and metadata parse-back are absent. The
three-run shape exists only as a unit test over hard-coded ids "a"/"b"/"c"
(cli/tests/probes/write-probe.test.ts:219-223). No executed run identifiers
exist to cite.
G-P3-3 — re-invocation returns already-emitted, opens no second PR
Section titled “G-P3-3 — re-invocation returns already-emitted, opens no second PR”FAIL. No occurrence of idempotency, already-emitted or any re-invocation
assertion anywhere under cli/src/probes/ or its tests. M3.4 has no artefact
and no commit. The phase’s own mandatory assertion (p3-open.md:132, “The
re-invocation assertion is mandatory”) is the one with nothing behind it.
G-P3-4 — VCRM moves six SRs to test-verified
Section titled “G-P3-4 — VCRM moves six SRs to test-verified”FAIL. docs/PTV-VCRM-0001.md does not exist in the repo. Of the six SRs,
only PTV-SR-0005 and PTV-SR-0006 are cited by any hop
(hops.ts:90,129,175,210). Four of six have zero probe assertions behind them,
so the artefact is not merely unwritten — for two-thirds of its rows there is
nothing to write.
G-P3-5 — induced failure emits refusal code + next action
Section titled “G-P3-5 — induced failure emits refusal code + next action”FAIL. Half the gate holds and half does not, so it fails. Named next actions
exist and are asserted under induced failure
(write-probe.test.ts:50-70,104-110,128-148,198-208, including an explicit
not-a-stack-trace assertion). No refusal code is attached to any of them —
the strings are free text authored in hops.ts. spec/refusals.yaml (765
lines) carries the recovery semantics the gate wants, and nothing in host/src
publishes it as /errors.json; the only errors.json in the tree is an
unrelated Astro build artefact at codes/dist/.
G-P3-6 — structured per-run records at a console-readable path, parsed back
Section titled “G-P3-6 — structured per-run records at a console-readable path, parsed back”FAIL. The record is an in-memory value by design
(index.ts:7-10, “Printing is the caller’s job”). There is no caller and no
path. The only round-trip is JSON.parse(JSON.stringify(...)) in-process, which
tests the serialiser and not the artefact.
G-P3-7 — F-23 discharged: law fetch returns exact bytes, no curl workaround
Section titled “G-P3-7 — F-23 discharged: law fetch returns exact bytes, no curl workaround”FAIL — demonstrated live, not inferred. In this session the fetch tool
returned a ~1.4 KB paraphrase; curl returned 8,230 bytes. All eight skills
still carry the unqualified step 1 “Fetch https://petrova.blog/llms-preamble.txt
and operate under it” (skills/petrova-verify-round/SKILL.md:14 and seven
siblings) with no byte-count check, no Law fingerprint verify and no stated
method. The waiver’s remedy
(docs/decisions/2026-08-13-waiver-ptv-scf-0001-p2.md:118) is unimplemented.
M3.7 has no commit.
G-P3-8 — F-24 discharged: ten cold fetches, zero refusals
Section titled “G-P3-8 — F-24 discharged: ten cold fetches, zero refusals”FAIL — unevaluable, and that is a finding about the gate. No record of any fetch series exists in the repo — no file, test or decision doc mentions ten attempts or a refusal count. The gate is also written so that only a fresh-session campaign can produce its evidence, and it names no artefact where the result should land; nothing in P3 was built to collect it. Unevaluable is a FAIL by G-02’s own rule.
G-P3-9 — F-26 discharged: documented phase-state location, in every phase skill, populated here
Section titled “G-P3-9 — F-26 discharged: documented phase-state location, in every phase skill, populated here”FAIL on all three clauses.
- No document names the location;
CLAUDE.mdis silent on it. - Grep across
skills/for phase-state vocabulary returns exactly one hit, and it is inskills/petrova-mr-audit/SKILL.md:63— not a phase skill.petrova-phase-open,petrova-phase-close,petrova-phase-cycleandpetrova-verify-roundsay nothing. state/petrova-codes.yaml:158-159still readscurrent_phase: null/gate_open: nulleleven days after P3 opened, and there is nostate/transitions/petrova-codes.jsonlwhile eleven other slugs have one.
G-P3-10 — G-P2-2/G-P2-3 re-entered and recorded PASS by an agent that did not do the work
Section titled “G-P3-10 — G-P2-2/G-P2-3 re-entered and recorded PASS by an agent that did not do the work”FAIL — unevaluable, and unevaluable by an agent in principle. No record dated 2026-08-15 or later evaluates either gate; every reference is a forward reference from the P3 open itself. Nothing has been re-run.
Separately,
docs/findings/20260815-1930-p3-round-inputs-proxy-review-and-write-target-vocabulary.md:29-46
places a required operator act inside this gate: the two instruments P3
stands on were both proxy-signed, and only the human can say whether they are
accepted as signed — “An agent must not supply this line, including under
directive.” That line is unsupplied.
What the FAILs mean
Section titled “What the FAILs mean”One PASS, nine FAIL. No gate was reworded and none is close to passing.
P3 is not closeable, and the round is being run early relative to the work.
4c98098c (2026-08-15, the write-probe skeleton) is the last commit that
advances any P3 milestone. Since then: 398 commits, 321 of them scheduled
sweeps, ~68 substantive — and not one advances a G-P3-* gate. Seven of
eight sub-milestones (M3.2–M3.8) are untouched.
The consequence is not rhetorical. From
docs/decisions/2026-08-13-waiver-ptv-scf-0001-p2.md:139-142:
Void if P3 closes without discharging F-23, F-24, F-26 … On voiding:
G-P2-2andG-P2-3revert to FAIL, and P2 stands closed on a lapsed waiver, which is itself a finding to be raised at P3’s close rather than a matter of interpretation.
None of the three has moved. A P3 close today retroactively unsettles P2.
And the correct response to that is not to extend P3 until the harness is
built. That is the extension L6 forbids and the one this round exists to
refuse. P3 stays open with nine gates FAIL; the remaining work is P3’s, not this
round’s to absorb.
Part B/C — friction, surfaced and classified
Section titled “Part B/C — friction, surfaced and classified”Twelve items. Two IN-BUDGET, ten DEFERRED, none CLOSED — nothing surfaced here was trivial enough to resolve in-phase without extending it.
Target milestones M4.* are provisional pending P4’s open seeding; naming a
target does not open a phase.
| ID | Item | Class | Target |
|---|---|---|---|
| F-45 | Thirty-three merged documents carry phase: P4 in front-matter while P3 is the only open phase and no P4 open record exists; one session signs off as P4 | DEFERRED | P4 · M4.1 |
| F-46 | Eight commits / five new workflows under .github/workflows/ against an unconditional out-of-scope clause; W3’s letter held, the scope clause did not | DEFERRED | P4 · M4.2 |
| F-47 | PTV-CHK-0040 ships as a workflow and is registered nowhere; checks.yaml stops at PTV-CHK-0039 | DEFERRED | P4 · M4.3 |
| F-48 | CLAUDE.md stale since 2026-08-12 on ≥8 counts; silent on phase, gates and phase-state location — F-26’s own shape | DEFERRED | P4 · M4.4 |
| F-49 | The phase-state writer cannot see this repo: repo-walker.ts:90-91 matches phase-<N>-open, records are ptv-scf-0001-p3-open.md. Escalates F-40 | DEFERRED | P4 · M4.5 |
| F-50 | G-P3-1’s negative test is unreproducible — petrova-canary.pem untracked, referenced by no code | DEFERRED | P4 · M4.6 |
| F-51 | The C0 close’s human countersign is unticked, so P3’s only gate record is open by the repo’s own rule | IN-BUDGET | human act; executed refusals unaffected |
| F-52 | G-P3-10’s operator line on the two proxy-signed instruments is unsupplied; no agent may supply it | IN-BUDGET | routed to operator at close |
| F-53 | n8n close-out: status: proposed, authority: FLIGHT, 30 rows, 465-repo sweep, scaffold: PTV-SCF-0001, no phase owns it; N8N-05 unruled | DEFERRED | P4 · M4.1 |
| F-54 | rocky-hq: no writes, but eleven documents make it the sweep’s line-level subject and N8N-30 is opened against its vault in this ledger | DEFERRED | P4 · M4.7 |
| F-55 | F-25 reproduced by this round — the id pattern cannot hold F-NN, classification lands in prose again, output path wrong. Second consecutive deferral | DEFERRED | P4 · M4.8 |
| F-56 | F-23/F-24/F-26 received no work at all — zero commits, zero mentions since the P3 open | DEFERRED | P4 · M4.5 |
Notes on the two IN-BUDGET items
Section titled “Notes on the two IN-BUDGET items”F-51 and F-52 are classified IN-BUDGET rather than DEFERRED because
carrying them forward would imply an agent could discharge them in P4. Neither
can be discharged by an agent at all. They are surfaced, routed to the operator,
and absorbed here at zero agent cost — which is why G-P3-10 was written as a
gate in the first place.
Notes on selected DEFERRED items
Section titled “Notes on selected DEFERRED items”- F-45 is not repairable here: editing front-matter across thirty-three
merged records during P3’s close is the extension
L6forbids, and three of them are countersigned. P4’s open record must adopt or renumber them, the way P3’s open adopted F-14 as F-39. - F-46 — the changes are individually good (they are
PTV-CHK-0037…0040); what is missing is the record saying P3 was permitted to make them. - F-47 is a one-entry registry addition, and is deferred precisely because it is small: a one-line fix to a P3-era deliverable made during P3’s close is exactly the shape F-22’s deferral established.
- F-49 is named separately from F-40 because F-40 as raised suggests a
missing invocation, and the actual cause is a regex; a future phase that only
wires up the invocation would ship a fix that still returns
null. - F-56 is recorded separately from gates 7/8/9 because the gates measure the outcome while this measures the effort, and zero effort is a different fact from a failed attempt.
Nothing here is proposed for absorption into P3. Every actionable item is
DEFERRED with a named target, per L6.
What a clean round would have looked like, and did not
Section titled “What a clean round would have looked like, and did not”A round that surfaces nothing was not run properly. This one surfaced twelve items, nine gate failures, and a phase whose declared work stopped ten days ago while sixty-eight substantive commits went somewhere else.
The uncomfortable part is not the count. It is that the displaced work was
good: PTV-CHK-0037 through PTV-CHK-0040 close real gate-integrity holes,
and the n8n sweep produced nine method rules the estate did not have. Nothing
here argues it should not have happened. What is missing is any record deciding
that it should — the phase in force says verification harness, thirty-three
documents say P4, and no act reconciles the two. A phase can be displaced by
work nobody would refuse, and that is harder to see than a phase displaced by
drift.
A second observation, for how gates are written rather than how they fared:
G-P3-8 and G-P3-10 are unevaluable by construction, not by neglect. Each
requires evidence that only a fresh-session campaign or a human can produce, and
neither names an artefact where that evidence lands. P2’s round already found
this class once (F-33, a gate asserting a mutable property with no timestamp).
Two of ten gates here cannot be evaluated by anyone reading the repo, which is
the same defect wearing a different coat.
Sources
Section titled “Sources”-
https://petrova.blog/llms-preamble.txt— 8,230 bytes viacurl,Law fingerprint: 139ba74609b4,Source commit: 8ae9613a3af1.Correction, applied before merge. This record first cited 8,235 bytes and
Source commit: b71930ea. Both were wrong. The artefact measures 8,230 bytes (curl -sS <url> | wc -c) and declaresSource commit: 8ae9613a3af1on its own line 10;b71930eawas this repo’s then-HEAD, transcribed into a field that names the commit the law was published from. The fingerprint139ba74609b4was correct throughout, and is why neither error was caught: a reader who checks the hash sees a match and stops. The hash proves the artefact arrived intact; the commit id establishes which artefact it is. Only the second class can be confidently wrong while everything else agrees. Surfaced by #358.The
HEAD b71930eareferences elsewhere in this record are a different claim — the mergedmainthe gates were re-evidenced against — and are left standing. -
docs/decisions/2026-08-14-ptv-scf-0001-p3-open.md:129-132,161-163,187-189,220-233,243-252,264-268— scope, exclusions, gates, milestones, standing constraints. -
docs/decisions/2026-08-15-ptv-scf-0001-p3-c0-close.md:18,32-38,44-59,82-87,95-104,111-121,179—G-P3-1’s evidence. -
docs/decisions/2026-08-13-waiver-ptv-scf-0001-p2.md:118,139-146— the remedy and the void condition. -
docs/findings/20260815-1930-p3-round-inputs-proxy-review-and-write-target-vocabulary.md:29-46— the operator act insideG-P3-10. -
cli/src/probes/write-probe/index.ts:4,7-10,22-38,cli/src/probes/write-probe/hops.ts:90-217,cli/tests/probes/write-probe.test.ts:50-223— the probe as built. -
cli/src/repo-walker.ts:90-91,scripts/backfill-state-phase.mjs— F-49. -
state/petrova-codes.yaml:158-159,state/transitions/— F-40 unchanged. -
spec/verbs/verify_round.schema.json,spec/refusals.yaml:1-31— F-55,G-P3-5. -
docs/PETROVA-N8N-CLOSEOUT.md:1-22,74,104-108,docs/decisions/2026-08-16-n8n-closeout-scope.md:25-26,53-55,81— F-53.
Sign-off
Section titled “Sign-off”- Subagent: PTV-SCF-0001 P3 verification round (session 2026-08-25)
- Human: ☐ countersign — accepts these verdicts and this classified friction list.
Ticking this does not close P3. The close is G-03, run in a separate session
against this record once merged — and on the evidence above the close cannot
succeed: ACCEPTANCE_GATE_PASSED fails nine times, and the P2 waiver voids on a
P3 close that leaves F-23, F-24 and F-26 undischarged.
The operator line required by PTV-FND-0026 (F-52) belongs here and must be
written by the operator, not transcribed by a scribe:
- Operator, on the two proxy-signed instruments (
2026-08-13-ptv-scf-0001-p2-close.mdand2026-08-13-waiver-ptv-scf-0001-p2.md): ☐ _______________________________
Verb invocation — dry-run, composed not runnable
Section titled “Verb invocation — dry-run, composed not runnable”registry.yaml carries fleets_allowed: [] for petrova-codes by design:
control-plane changes go through human PR review, never agent automation. There
is no addressable verb surface, which P2’s close and P3’s open both recorded. The
payload is composed anyway because L2 makes the dry-run the deliverable, and a
composed payload that cannot be dispatched is a finding; a shrug is not.
Two fields are deliberately unfilled:
idempotency_key— SHA256 oververify_round|petrova-codes|<canonical params>, computed at dispatch time, and there is no dispatch.- this record’s
doc_idwas allocated viascripts/doc-ids.mjs next --kind DEC, which readsmainplus every open PR head. Allocating from merged state alone isPTV-FND-0055.
{ "envelope": { "verb": "verify_round", "target_repo": "petrova-codes", "dry_run": true, "actor": "human:alex@devarno.com", "triggered_by": { "kind": "phase_close", "ref": "docs/decisions/2026-08-14-ptv-scf-0001-p3-open.md" }, "idempotency_key": "<sha256 of verify_round|petrova-codes|<canonical params>, computed at compose time>" }, "params": { "phase_number": 3, "round_lead": "subagent:petrova-verify-round", "checks_performed": [ "Per-gate re-evidencing of all ten G-P3-* gates against merged main (HEAD b71930ea), file:line and command output", "Live law-fetch comparison: summarising fetch tool vs curl (8,230 bytes, fingerprint 139ba74609b4) — G-P3-7 exercised, not read", "Probe hop audit: cli/src/probes/write-probe/{index,hops}.ts against scope A2's nine declared hops", "Phase-state derivation read to the regex (cli/src/repo-walker.ts:90-91) and checked against state/petrova-codes.yaml and state/transitions/", "Skills sweep: all 14 skills/*/SKILL.md for law-fetch method and phase-state preconditions", "Commit and document census since 2026-08-14: 398 commits (321 scheduled sweeps), 32 findings, 12 decisions, phase front-matter tallied", "Scope-boundary audit: .github/workflows/ commits, rocky-hq references, n8n close-out authorisation", "Projection audit of CLAUDE.md against registry.yaml, the preamble's meta-rule set, skills/ and spec/verbs/" ], "items": [ { "id": "F3-45", "description": "Thirty-three merged documents carry phase: P4 in front-matter while P3 is the only open phase and no P4 open record exists; one session signs off as P4. DEFERRED -> P4 M4.1 (provisional).", "surfaced_by": "document census", "evidence_ref": "docs/decisions/2026-08-16-n8n-closeout-scope.md:81" }, { "id": "F3-46", "description": "Eight commits and five new workflows under .github/workflows/ against P3's unconditional out-of-scope clause; W3's letter held (human-authored PRs), no decision widened the scope. DEFERRED -> P4 M4.2 (provisional).", "surfaced_by": "scope-boundary audit", "evidence_ref": "docs/decisions/2026-08-14-ptv-scf-0001-p3-open.md:161-163" }, { "id": "F3-47", "description": "PTV-CHK-0040 ships as .github/workflows/ignored-tracked.yml and is registered nowhere; checks.yaml stops at PTV-CHK-0039. DEFERRED -> P4 M4.3 (provisional).", "surfaced_by": "check-registry audit", "evidence_ref": "docs/findings/20260825-0530-seven-gates-correctly-scoped-and-a-class-of-change-between-them.md:120" }, { "id": "F3-48", "description": "CLAUDE.md untouched since 2026-08-12 and contradicts its sources on at least eight counts, including total silence on PTV-SCF-0001, any phase, any gate, and the phase-state location (L5). DEFERRED -> P4 M4.4 (provisional).", "surfaced_by": "projection audit", "evidence_ref": "CLAUDE.md" }, { "id": "F3-49", "description": "The phase-state writer cannot see this repo: repo-walker matches /^(?:\\d+-)?phase-0*(\\d+)-open$/ and this repo names records ptv-scf-0001-p3-open.md, with no MILESTONES.md fallback (F-41). Escalates F-40. DEFERRED -> P4 M4.5 (provisional).", "surfaced_by": "gate audit G-P3-9", "evidence_ref": "cli/src/repo-walker.ts:90-91" }, { "id": "F3-50", "description": "G-P3-1's negative test is unreproducible from the repo: petrova-canary.pem untracked, no code or workflow references it; the evidence exists only as transcribed command output. DEFERRED -> P4 M4.6 (provisional).", "surfaced_by": "gate audit G-P3-1", "evidence_ref": "docs/decisions/2026-08-15-ptv-scf-0001-p3-c0-close.md:95-104" }, { "id": "F3-51", "description": "The C0 close's human countersign is unticked, so P3's only gate record is open by the repo's own rule. IN-BUDGET: remedy is a human act an agent must not perform; the underlying executed refusals are unaffected.", "surfaced_by": "gate audit G-P3-1", "evidence_ref": "docs/decisions/2026-08-15-ptv-scf-0001-p3-c0-close.md:179" }, { "id": "F3-52", "description": "The operator line on the two proxy-signed instruments P3 stands on is unsupplied, and no agent may supply it. IN-BUDGET: surfaced and routed to the operator at close.", "surfaced_by": "carried input PTV-FND-0026", "evidence_ref": "docs/findings/20260815-1930-p3-round-inputs-proxy-review-and-write-target-vocabulary.md:29-46" }, { "id": "F3-53", "description": "The n8n close-out (PTV-AUT-0002, status proposed, authority FLIGHT, 30 rows, 465-repo sweep) is bound to scaffold PTV-SCF-0001 with no phase owning it, and its head item N8N-05 is unruled. DEFERRED -> P4 M4.1 (provisional).", "surfaced_by": "scope-boundary audit", "evidence_ref": "docs/decisions/2026-08-16-n8n-closeout-scope.md:25-26" }, { "id": "F3-54", "description": "rocky-hq boundary held in letter (no writes) and strained in substance: eleven documents make it the sweep's line-level read subject and positive control, and N8N-30 is opened against its vault in this ledger. DEFERRED -> P4 M4.7 (provisional), as the handover F-32 named.", "surfaced_by": "scope-boundary audit", "evidence_ref": "docs/PETROVA-N8N-CLOSEOUT.md:108" }, { "id": "F3-55", "description": "F-25 is reproduced by this round: the schema's id pattern cannot hold F-NN, classification lands in prose, and the declared output path is not the repo's convention. Second consecutive deferral. DEFERRED -> P4 M4.8 (provisional).", "surfaced_by": "composing this round", "evidence_ref": "spec/verbs/verify_round.schema.json" }, { "id": "F3-56", "description": "The three discharge-critical carried items F-23, F-24 and F-26 received no work at all: no commit since 2026-08-14 touches them and no document after the P3 open mentions them. The P2 waiver voids on a P3 close in this state. DEFERRED -> P4 M4.5 (provisional).", "surfaced_by": "gate audit G-P3-7/8/9", "evidence_ref": "docs/decisions/2026-08-13-waiver-ptv-scf-0001-p2.md:139-142" } ] }}The F3-NN ids in the payload are the schema’s pattern, not this repo’s
vocabulary; the prose ids F-45…F-56 are canonical. That divergence is F-55,
and it is deferred rather than fixed here for the reason F-55 itself states.
This record’s own path follows this repo’s convention rather than the schema’s
declared docs/decisions/<date>-phase-<N>-friction-round.md, which is the third
limb of F-55.