feat(workplan): close STATE-WP-0083-T04 — fleet reset is idempotent
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

Second pass: 93 repositories noop with zero created, updated or retired,
demonstrating ADR-012 decision 7's requirement that reset twice produces the
same projection.

Slug refusal took errors from 12 to 9 — three repositories were erroring on slug
collisions, not just disaster-control. 60 records across 13 repositories no
longer derive from any file, which is the retirement work CUST-WP-0068-T09
waits on, now enumerated per repository.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 2583210@bnt-lap001
Assistant-Session: f2bff2d5-e9b2-4338-92ca-10282a927006
This commit is contained in:
tegwick 2026-08-26 19:39:03 +02:00
parent 4991ac79ed
commit 12d8a1d018

View file

@ -184,7 +184,7 @@ so partial convergence cannot be mistaken for full. 678 tests pass.
```task ```task
id: STATE-WP-0083-T04 id: STATE-WP-0083-T04
status: progress status: done
priority: medium priority: medium
``` ```
@ -631,3 +631,37 @@ exists`. The identifier refusal added earlier checks `id`; `slug` carries its ow
unique constraint across the whole table, so two repositories can derive unique constraint across the whole table, so two repositories can derive
different identifiers whose slugs still collide. Now refused with the holder different identifiers whose slugs still collide. Now refused with the holder
named, and covered by test. named, and covered by test.
## Second fleet pass — idempotent (2026-08-26)
Re-run after the slug-collision refusal deployed.
| | first pass | second |
|---|---|---|
| applied | 91 | 0 |
| **noop** | 2 | **93** |
| refused | 16 repos / 64 | 19 repos / 69 |
| errored | 12 | **9** |
| created / updated / retired | 8 / 737 / 0 | **0 / 0 / 0** |
**Idempotence demonstrated rather than asserted.** 93 repositories changed
nothing on the second run: `ADR-012` decision 7 requires that reset twice
produces the same projection, and it does.
The slug fix helped more than predicted. Errors fell 12 → 9, not 12 → 11 — three
repositories were erroring on slug collisions rather than only
`disaster-control`. They now refuse with the holder named:
| Refusal reason | Count |
|---|---|
| would be retired; the forge no longer derives it | 60 |
| slug already belongs to another repository | 9 |
**60 records across 13 repositories no longer derive from any file.** That is the
retirement work `CUST-WP-0068-T09` waits on, now enumerated per repository:
`railiance-platform` (20), `vergabe-teilnahme` (16), `railiance-apps` (8), then
single figures elsewhere.
All 9 remaining errors are private repositories the pod cannot clone
anonymously — unchanged, and not a code problem.