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
id: STATE-WP-0083-T04
status: progress
status: done
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
different identifiers whose slugs still collide. Now refused with the holder
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.