feat(workplan): record CUST-WP-0067-T10 progress — 129 of 426 workplans recovered
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

Central 670 -> 799. All 403 cache-only workplans with a backing path have that
file on disk, confirming ADR-010's finding that nothing was lost.

Only 57 carry deterministic identifiers, so C-06 refuses most as stale
references. --bootstrap-empty-projection recovers them with identifiers
preserved, verified on one repository before rollout.

Classifies the 297 remaining and lists per-repository blockers from actual
error messages. Corrects this task's own earlier reading of
bootstrap_source_invalid as a single cause: it covers at least two.

Recommends promotion to its own workplan — the mechanical share is done; the
rest needs content fixes, an identifier decision overlapping RMGR-WP-0005, and
owner judgement across ~40 repositories.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
codex 2026-08-25 14:36:19 +02:00
parent 137c7796a6
commit e205e37d31

View file

@ -678,3 +678,56 @@ repository-record subset and touches every repo with work records.
Acceptance: every cache-only workplan and task either exists on central or
carries a written disposition; the cache database can then be discarded, and
`ADR-010`'s divergence is closed rather than merely described.
**Progress (2026-08-25): 129 of 426 recovered.** Central went from 670 to 799
workplans. Measured precisely rather than estimated — the divergence is 426
workplans, not the ~400 first reported, and **all 403 with a backing path have
that file present on disk**, confirming `ADR-010`'s finding that nothing was
lost.
**Mechanism.** Only 57 of 403 carry deterministic UUIDv5 identifiers; the rest
are pre-`ADR-007` v4. C-06 refuses non-derived identifiers as
`C-03 FAIL — stale reference`, so the ordinary path cannot re-derive most of
them. Rewriting 345 identifiers fleet-wide was rejected: it overlaps
`RMGR-WP-0005`'s ownership of identifier migration and was unnecessary.
`--bootstrap-empty-projection` registers a repository's workplans **preserving
their existing identifiers**, verified on one repository first — workplan and
all four tasks landed with original UUIDs and statuses, no file rewritten and
no commit.
**A self-inflicted failure worth recording.** The registrar generates
`WORK-RECORDS.md`, which dirties the worktree and then fails its own git
precondition; the retry reports `git_precondition_failed` instead. Several runs
had in fact registered successfully before failing on the file they created.
Committing that generated index and retrying clears it.
**The 297 remaining, classified:**
| Count | Class | What it needs |
|---|---|---|
| 176 | non-empty projection | C-06 for the deterministic subset; the rest await the identifier-migration decision |
| 58 | file not shaped as a workplan | content fix — 50 are `clay-borg`, using `kind: product` instead of `type: workplan` and `status: done`, which is not a workplan status |
| 24 | bootstrap-eligible | blocked on the per-repository causes below |
| 23 | orphan, no backing file | written disposition, per the orphan rules above |
| 16 | non-conforming record id | identifier fix with the repo owner |
**Per-repository blockers**, from actual error messages:
| Repository | Cause |
|---|---|
| `clay-borg` | no file parses as a workplan |
| `rapp-openbao`, `policy-nexus`, `whitehat-security` | a task has no authoritative projection UUID; task ids must be minted first |
| `glas-harness`, `rein-aharness`, `rein-openweights` | record ids rejected by the canon registry (e.g. `GLAS-0001`, not `PREFIX-WP-NNNN`) |
| `ops-mason` | projection no longer empty — already partly registered |
| `ground-game` | genuine uncommitted work; left untouched |
| `zone-engine` | untracked `DECISIONS.md`; owner content |
A correction to this task's own analysis: `bootstrap_source_invalid` was first
read as one cause because only the error *code* was captured. It covers at
least two unrelated causes, separated only after capturing the messages.
**Recommendation: promote to its own workplan.** What remains is not one job.
It is a content-conformance pass, an identifier decision overlapping
`RMGR-WP-0005`, an orphan disposition, and a per-repository unblocking pass —
across ~40 repositories, several needing owner judgement. The mechanical share
is done.