PTV-SCF-0001 P2 — phase open
Date: 2026-08-13
Status: open
Supersedes: none
Superseded-by: none — current
Phase: PTV-SCF-0001 P2 · Golden prompts as skills
Predecessor: P1 · Specification — CLOSED 2026-08-12
Shape: G-01 (docs/PETROVA-GOLDEN-PROMPTS.md §2)
Terminal state of this record: a phase opened with scope, gates and carried
friction. It closes nothing.
Step 1 — what phase is currently open
Section titled “Step 1 — what phase is currently open”None. Read from decision-doc history, not from a projection:
| Record | Verdict |
|---|---|
2026-08-12-ptv-scf-0001-p1-verification-round.md | merged (#260) — the round, two gates FAIL |
2026-08-12-requirement-tree-root-set.md | merged (#261), countersigned — the F-02 ruling |
2026-08-12-ptv-scf-0001-p1-close.md | merged (#262) — P1 CLOSED, four preconditions PASS, no waiver |
No record opens P2, P3 or any later phase. No phase is open.
Step 2 — is the predecessor CLOSED
Section titled “Step 2 — is the predecessor CLOSED”Yes. P1’s close record is merged and countersigned, all four G-03 preconditions PASS on cited evidence, and no waiver was used. The two gates the round recorded as FAIL were made to pass by correcting a defect the gate itself found — not by weakening the gate.
Step 3 — entry criteria
Section titled “Step 3 — entry criteria”The scaffold declares phases sequential and gated
(docs/specs/2026-08-12-ptv-scf-0001-scaffold-rev-a.xml:145) with no per-phase
entry criteria block. The criteria are therefore the sequencing discipline itself,
plus the close record’s own consequence clause.
| # | Criterion | Verdict | Evidence |
|---|---|---|---|
| 1 | Predecessor phase closed | MET | 2026-08-12-ptv-scf-0001-p1-close.md, merged as #262. |
| 2 | No phase skipped — P0 ran and P1 closed before P2 | MET, with a defect recorded | P0’s exit-gate artefacts exist and are merged: docs/findings/20260811-1749-ptv-scf-0001-p0-ground-truth.md and -p0-delta-register.md, both status: baseline, every claim sourced. But no P0 close record exists — the close-record discipline began with P1. See the note below. |
| 3 | The predecessor explicitly authorises this phase to open | MET | P1 close, §Consequences: “P2 · Golden prompts as skills may open. Its entry criteria are unaffected by anything in the deferred ledger.” |
| 4 | Deferred friction targeted at this phase is enumerable | MET | Three items, step 4 below. |
The P0 defect, stated rather than smoothed. G-01 says an unmet criterion is a halt, not a caveat — so this one is named at full weight. P0 has no close record and no verification round of its own; its terminal artefacts were merged and the scaffold moved on. Criterion 2 is judged MET because what a close record attests — that the exit gate was evaluated and friction classified — is evidenced here by the artefacts themselves and by P1’s round, which consumed P0’s delta register (D-09, D-12, D-19, D-20) and classified those items. The attestation is missing; the work it attests to is not.
This is not repaired retroactively. A close record written in August for a phase that ended on 2026-08-11 would be a manufactured attestation, which is worse than an absent one. It is recorded here as F-14 · P0 has no close record, raised at P2 open, carried into P2’s own verification round for classification.
No other criterion is unmet or unevidenced. No halt condition applies:
a contract.yaml exists for this repo, and the current phase is determinable from
decision-doc history above.
Step 4 — carried friction, the inputs to this phase
Section titled “Step 4 — carried friction, the inputs to this phase”Per G-01 step 4 and MR-2. Source for all three:
docs/decisions/2026-08-12-ptv-scf-0001-p1-close.md:43-56, itself consuming
2026-08-12-ptv-scf-0001-p1-verification-round.md.
| Item | Raised in | What it is | Where it lands in this phase |
|---|---|---|---|
| F-04 | round, L116-119 | 35 of 40 registered slugs belong to no domain. They draw from the open DR-3600+ block, which is not a domain but the absence of one. Part 3 of their domain module is blocked on a DR block allocation, which is a G1 act. | C4 |
| F-05 | round, L121-123 | Domain module parts 3–5 unspecified for every generated slug — by design, since a generated judgement is a fabrication with a build step in front of it. But 40 × 3 unspecified sections have no owner named. | C4 |
| G4-impl | root-set ruling, L140 | Gate G4 is asserted by CI in the SDD’s own mutation protocol (docs/PETROVA-SDD-BASELINE.md:927, sequence L914) and has no implementation. P1 found six orphans by hand-reading a mermaid block — precisely the manual check G4 was meant to replace. | C3 |
F-03 was deferred to P2 by the round and then closed in the P1 close session. It is not carried. Nothing else in the eight-row ledger targets P2.
What this phase is
Section titled “What this phase is”Objective, verbatim (…scaffold-rev-a.xml:204): make governance law fetchable
rather than pasted.
A cold agent in a governed repo currently receives the law as ~60 pasted lines. A pasted copy cannot be revised, and a preamble that misstates the law is worse than no preamble at all. P2 replaces the paste with a fetch, and converts the eight golden prompts — today prose in a single 524-line markdown file — into skills that load.
Five spec tasks (XML L206-224) plus the three carried items. Six work chunks.
| Chunk | Covers | What lands |
|---|---|---|
| C0 | — | This record. |
| C1 | tasks 1–3 | Field gaps closed on the three machine artefacts. |
| C2 | tasks 4–5 | Eight skills + slash commands; the merged phase-cycle skill retired. |
| C3 | G4-impl | The trace-to-root checker, registered in checks.yaml. |
| C4 | F-04, F-05 | A proposed DR-block allocation and per-slug ownership ledger. |
| C5 | — | Verification round (G-02), then close (G-03). Separate acts. |
Three rulings taken at open
Section titled “Three rulings taken at open”These are deviations from a literal reading of the spec, decided here rather than drifted into. Each is recorded so the verification round can evaluate it.
R-1 · The three machine artefacts already exist, generated, at other paths.
The spec lists public/llms-preamble.txt, public/errors.json and
public/verbs/index.json as P2 deliverables (XML L456-458). All three already
ship — as generated Astro routes, built by the 2026-08-10 machine-surface work:
site/src/pages/llms-preamble.txt.ts→https://petrova.blog/llms-preamble.txtcodes/src/pages/errors.json.ts→https://petrova.codes/errors.jsoncodes/src/pages/verbs/index.json.ts→https://petrova.codes/verbs/index.json
Ruling: keep the generated routes; the deliverable is the served URL, not a file
under public/. Emitting static copies at the spec’s literal paths would create
a second surface that goes stale — the exact defect
docs/decisions/2026-08-10-machine-surface-bound-to-sources.md was written to
close. P2’s work on these three is therefore gap-closing, not authoring. The spec
text is amended by this record rather than satisfied literally.
What is genuinely missing, and is C1’s scope:
| Artefact | Task asks for | Present today | Gap |
|---|---|---|---|
| preamble | ”the operating law (L1–L7) and the current warning list, versioned” | meta-rule titles, write mechanics, prohibitions, Generated: + Source commit: | no labelled L1–L7 block; no warning list at all; no version distinct from build stamp |
| errors.json | ”code, stage, meaning, correct response, and whether retry with the SAME idempotency key is safe” | code, description, arriving verbs, one global retry_semantics block | no per-code stage; no per-code correct_response |
| verbs/index.json | ”name, fingerprint, read/write class, refused-path globs” | name, class, mutating, refusal codes, side effects, refused-path regex | no fingerprint; refused paths are a regex, not globs |
R-2 · skills/petrova-phase-cycle merges G-01, G-02 and G-03, which task 5
forbids. The task is explicit: “Preserve the structural separation of G-02 and
G-03. An agent asked to verify-and-close optimises toward closure and
under-surfaces friction. Do not merge them for convenience.” The prompts doc
carries the same warning independently (L198-204). The existing skill is precisely
that merge, and it predates the spec’s rescue.
Ruling: split into petrova-phase-open, petrova-verify-round and
petrova-phase-close. petrova-phase-cycle becomes a deprecation pointer naming
the three and stating why the merge was retired — deleting the name outright
strands consumer repos that already reference it.
This phase is itself the worked example of why: P1’s round produced two FAIL verdicts and a halt. A skill that had been asked to verify-and-close would have been optimising toward the close while it wrote them.
R-3 · F-04 is enumerated and proposed, not ratified. DR-block allocation is a
G1 act. C4 produces a record proposing an allocation for all 35 unallocated slugs
with rationale, and names an owner per slug for F-05’s parts 3–5. It is authored
Status: open and uncountersigned; an unticked human countersign keeps a
decision open, and an agent never ticks one. P2 delivers the ledger; the
ratification is the operator’s.
Acceptance gates
Section titled “Acceptance gates”Gates 1–3 are the spec’s exit gate (XML L226-230), stated so someone outside this session can evaluate them. Gates 4–6 cover the carried friction, which the spec’s gate does not reach.
| # | Gate | Evaluable as |
|---|---|---|
| G-P2-1 | Every one of the eight skills loads in a cold session and produces a correct plan against a test repo | For each skill: a fresh session, that skill, the test repo, and a plan that names the right files and the right terminal state. Eight runs, eight verdicts. |
| G-P2-2 | A session using only the fetched preamble performs equivalently to one given the pasted §1 block | Same task, two cold sessions, one fetching and one pasted. Equivalent means: same law cited, same refusals predicted, no governance claim present in one and absent in the other. |
| G-P2-3 | No skill requires out-of-band context to work | FAIL if any skill’s correct operation depends on a fact not reachable from the skill text plus the fetched artefacts. Asserted per skill, not in aggregate. |
| G-P2-4 | errors.json carries stage, meaning and correct_response for every code; verbs/index.json carries a fingerprint for every verb and refused paths as globs; the preamble carries L1–L7 labelled and a non-empty warning list | Read the built artefacts and assert field presence and non-emptiness. Mechanical. |
| G-P2-5 | The G4 checker exits non-zero on a seeded orphan requirement and zero on the current baseline, and is registered in checks.yaml | Two runs plus a registry lookup. |
| G-P2-6 | Every one of the 35 unallocated slugs appears in the C4 record with a proposed DR block and a named owner, and the record is uncountersigned | Count the rows; assert 35; assert the countersign is unticked. |
G-P2-4 and G-P2-6 are stated as counts and field assertions on purpose. “The artefacts are better” is not a gate.
No gate here may be weakened to pass. If one fails, it fails, and the round says so — that is the termination condition the scaffold names.
Sub-milestones seeded
Section titled “Sub-milestones seeded”| ID | State | Acceptance gate |
|---|---|---|
| C1 · machine artefacts | open | G-P2-4 |
| C2 · eight skills | open | G-P2-1, G-P2-3 |
| C3 · G4 checker | open | G-P2-5 |
| C4 · DR allocation ledger | open | G-P2-6 |
| C5 · round and close | blocked on C1–C4 | G-P2-2, plus the G-03 preconditions |
C1 precedes C2: the skills open with a fetch of what C1 emits, so authoring them first would mean authoring against an artefact that does not yet carry the law.
Verb invocation
Section titled “Verb invocation”None. petrova-codes carries fleets_allowed: [] in its own registry entry by
design — control-plane changes go through human PR review, never agent automation.
There is no petrova.act.* dry-run to render here, and composing one would be
the anti-shape the self-entry exists to prevent. This phase proceeds by PR.
References
Section titled “References”docs/specs/2026-08-12-ptv-scf-0001-scaffold-rev-a.xml:203-230— P2 tasks and exit gate. Rescued from a transcript, not ratified — seedocs/findings/20260812-1228-scaffold-spec-existed-only-in-a-transcript.md.docs/decisions/2026-08-12-ptv-scf-0001-p1-close.md— the deferred ledger.docs/decisions/2026-08-12-ptv-scf-0001-p1-verification-round.md— F-04, F-05 as raised.docs/decisions/2026-08-12-requirement-tree-root-set.md:140— the G4 observation.docs/decisions/2026-08-10-machine-surface-bound-to-sources.md— why R-1 keeps the generated routes.docs/PETROVA-GOLDEN-PROMPTS.md— G-01..G-08 source text; §1 preamble; §11 gap analysis.docs/PETROVA-SDD-BASELINE.md:927— G4 as specified.
Sign-off
Section titled “Sign-off”- Subagent: PTV-SCF-0001 P2 open (session 2026-08-13)
- Human: ☐ countersign — opens P2 on the criteria, scope, rulings and gates above.