docs lockstep phase 2: drift ticket, author dispatch, channels, promotion gate (R12–R16) #12

Merged
jsutter merged 1 commit from lockstep-phase-2 into main 2026-09-22 06:43:08 +00:00
Owner

Closes the docs-lockstep program (spec: symbio docs/proposals/2026-09-12-author-agent/program/docs-lockstep-spec.md, phase 1 = #1).

  • R12 — tools/file-drift-ticket.py + nightly tools/lockstep-drift.sh (.forgejo/workflows/lockstep-drift.yml): one docs-drift: <tool>@<version> ticket per release, deduped by exact title against open issues (AC1); an unreachable tracker is UNKNOWN, never clear (FAILURE-039), and files nothing. Previous-release surfaces synthesize from git history via the new check-lockstep --emit-surface-manifest.
  • R13 — tools/dispatch-author.py: one edit-pass contract per affected page (reader contract from frontmatter + the About page, change list from the report, acceptance: gates green / term ledger clean / verified advanced), dispatched setsid-detached via opencode run --agent author; dispatcher verifies gates, commits with the author trailer; PR waits for the realm agent. Scheduled dispatch runs from the agent runtime (staged opencode-cron job, approval-gated).
  • R14 — site.yaml channels: + tools/publish-channel.py + lockstep-publish.yml: testing re-captures the surfaces from the tool's testing binary (dit-releases) and builds into the testing apps' repos; stable inherits the existing pair. Tool release workflows dispatch docs-publish.
  • R15 — tools/check-promotion-gate.py, run by dit-operator/dit-client release workflows against the stable-channel docs-manifest; fail-closed under enforce.
  • R16 — one flag per manual (manuals.<m>.lockstep_gate); ditc flips to enforce — the 8 covers-pages that never carried a verified: stamp are stamped 2.4.4 in the same commit so the flip lands green.

Tests: 5 new fixtures (freshness-enforce, promotion-gate, drift-ticket, author-contract, emissions) — run-all.sh 17/17; full battery green (coverage, prose, fleet prose, link check, lockstep per manual). The real promotion gate was exercised: ditc@3.2.0 (installed) FAILs on uncovered session/mcp groups — the gate's first true catch; dito advisory warns and passes.

Note: after this lands, a ditc stable cut blocks until pages cover session/mcp (the R13 pipeline resolves it). dit-operator/dit-client wiring rides companion PRs in those repos.

Closes the docs-lockstep program (spec: symbio docs/proposals/2026-09-12-author-agent/program/docs-lockstep-spec.md, phase 1 = #1). - **R12** — `tools/file-drift-ticket.py` + nightly `tools/lockstep-drift.sh` (`.forgejo/workflows/lockstep-drift.yml`): one `docs-drift: <tool>@<version>` ticket per release, deduped by exact title against open issues (AC1); an unreachable tracker is UNKNOWN, never clear (FAILURE-039), and files nothing. Previous-release surfaces synthesize from git history via the new `check-lockstep --emit-surface-manifest`. - **R13** — `tools/dispatch-author.py`: one edit-pass contract per affected page (reader contract from frontmatter + the About page, change list from the report, acceptance: gates green / term ledger clean / `verified` advanced), dispatched setsid-detached via `opencode run --agent author`; dispatcher verifies gates, commits with the author trailer; PR waits for the realm agent. Scheduled dispatch runs from the agent runtime (staged opencode-cron job, approval-gated). - **R14** — `site.yaml channels:` + `tools/publish-channel.py` + `lockstep-publish.yml`: testing re-captures the surfaces from the tool's testing binary (dit-releases) and builds into the testing apps' repos; stable inherits the existing pair. Tool release workflows dispatch `docs-publish`. - **R15** — `tools/check-promotion-gate.py`, run by dit-operator/dit-client release workflows against the stable-channel docs-manifest; fail-closed under enforce. - **R16** — one flag per manual (`manuals.<m>.lockstep_gate`); **ditc flips to enforce** — the 8 covers-pages that never carried a `verified:` stamp are stamped 2.4.4 in the same commit so the flip lands green. Tests: 5 new fixtures (`freshness-enforce`, `promotion-gate`, `drift-ticket`, `author-contract`, `emissions`) — `run-all.sh` 17/17; full battery green (coverage, prose, fleet prose, link check, lockstep per manual). The real promotion gate was exercised: ditc@3.2.0 (installed) FAILs on uncovered `session`/`mcp` groups — the gate's first true catch; dito advisory warns and passes. Note: after this lands, a ditc stable cut blocks until pages cover `session`/`mcp` (the R13 pipeline resolves it). dit-operator/dit-client wiring rides companion PRs in those repos.
R12: tools/file-drift-ticket.py files one docs-drift ticket per release,
deduped by exact title against open issues; an unreachable tracker is
UNKNOWN, never clear (FAILURE-039). tools/lockstep-drift.sh +
.forgejo/workflows/lockstep-drift.yml run the nightly pass: current
captures vs the previous release's, synthesized manifests via
check-lockstep --emit-surface-manifest.

R13: tools/dispatch-author.py composes one edit-pass contract per affected
page (reader contract from frontmatter + the About page; change list from
the report; acceptance: gates green, term ledger clean, verified advanced)
and dispatches setsid-detached 'opencode run --agent author'; the
dispatcher verifies the gates and commits with the author trailer; the PR
waits for the owning realm agent's review and merge.

R14: site.yaml channels: + tools/publish-channel.py — testing re-captures
from the tool's testing binary and builds into the testing apps' repos;
stable inherits the existing sites. The tool release workflows dispatch
docs-publish; build-docs.py --channel redirects outputs and stamps
provenance.

R15: tools/check-promotion-gate.py — the stable-promotion gate the tool
repos' release workflows run against the stable-channel docs-manifest;
fail-closed under enforce.

R16: one flag per manual (site.yaml manuals.<m>.lockstep_gate) — ditc
flips to enforce with its re-authoring landed; check-lockstep's
missing-verified turns FAIL; the eight ditc pages whose covers never
carried a verified stamp are stamped 2.4.4 in the same commit so the flip
lands green.

Tests: five fixtures (freshness-enforce, promotion-gate, drift-ticket,
author-contract, emissions); run-all.sh 17/17; full battery green.

Assisted-by: deepnet:synthetic/hf:zai-org/GLM-5.3-Flash
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
deepnet/ditdocs!12
No description provided.