fix: preserve stale task identity history
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Build and Publish Multi-Context Image / build-and-push (push) Successful in 26s

Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a053ff-1d6f-7fe2-ac1c-a6eb40a42a0c
This commit is contained in:
tegwick 2026-08-31 02:02:35 +02:00
parent ddce470944
commit a32112e5ab
4 changed files with 65 additions and 44 deletions

View file

@ -378,24 +378,28 @@ canonical task identities, so T02 remains `progress`.
**Duplicate identity disposition (2026-08-31).** A fresh primary audit found
131 duplicate task `record_id` groups across 274 rows. The global count is not
the reset safety boundary: 104 groups have exactly one current projection
claimant plus retired history, and 15 exist only under retired workplans. Those
rows are retained as history and do not compete with the matched current
workplan.
the reset safety boundary: all 131 cross workplan boundaries, while none repeats
inside one workplan. A task has no projection-retirement field, so workplan slug
tombstones are only a diagnostic clue; current task membership is whether the
Forge still derives that id for that owning workplan.
The remaining 12 groups are two duplicated finished workplan projections:
The 12 groups with multiple untombstoned owning workplan slugs come from two
earlier wrong workplan/backing-file projections:
`CUST-WP-0010b-T01..T02` and `SECRETS-WP-0002-T01..T10`. They must be resolved
by retiring the displaced workplan projection, not by deleting or re-keying its
tasks. Evidence:
by reconciling the owning workplans while preserving their completed historical
task rows, not by deleting or re-keying those rows. Live exact-commit reconciles
did that with zero creates, retirements, cancellations, or refusals. Evidence:
`docs/evidence/STATE-WP-0083-task-identity-audit-2026-08-31.json`.
The diff now reports an explicit `ambiguous` class instead of silently choosing
the last row in a dictionary. Reset refuses duplicate identities declared by
the forge, duplicate identified rows inside the matched current workplan, and
any task creation whose canonical id or derived UUID is held by another current
workplan. These checks are batched; retired/displaced workplan tasks are outside
the current matching set and remain preserved. Live deployment and a clean
repository diff remain before T02 can close.
any task creation whose derived UUID is held by another current workplan. A
repeated human-readable id outside the owning workplan's current desired set is
historical evidence, not a competing projection. These checks are batched;
retired/displaced workplan tasks remain preserved. The second exact-commit pass
for both affected repositories returned `noop` with every count zero. Final
deployment of the refined boundary remains before T02 can close.
## Restore a migration mechanism for central