STATE-WP-0097: propose unlinked-supersession check; decline hub contest state
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

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

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 356991@bnt-lap001
Assistant-Session: 5d99ea69-ed55-4a1e-8d97-f4f312db247f
This commit is contained in:
tegwick 2026-10-13 22:19:15 +02:00
parent acf6e277af
commit fec6b5fdff
2 changed files with 76 additions and 13 deletions

View file

@ -0,0 +1,62 @@
---
id: STATE-WP-0097
type: workplan
title: "Flag resolved decisions that a later decision supersedes without a link"
domain: infotech
repo: state-hub
status: proposed
owner: claude-code
topic_slug: infotech
created: "2026-10-13"
updated: "2026-10-13"
flavor: implementation
related: [STATE-WP-0094]
---
Owner response to activity-core suggestion ff7d2152-75dd-4a49-8dac-e0ebe7343039
(contest path for resolved decisions).
Disposition: State Hub does not add a first-class `contested` decision state or
a `/decisions/{id}/contest` route. State Hub is in retirement
(`prj-state-hub-retirement`). Decisions are file-first work records whose
writer convention is repo-manager (RMGR-WP-0008). The worked example was
settled the same day by a superseding decision. The defect was that the hub
never linked the two decisions. 1c9817ee (Activity Core owns the publisher)
remained `resolved` with `superseded_by: null` after c6f23433 superseded it.
The link was set by hand on 2026-10-13 with founder approval.
The existing model already expresses re-assignment (`status: superseded`,
`superseded_by`). This plan makes a missing link visible. It does not add a new
authoring surface.
## Add a consistency check for unlinked supersession
```task
id: STATE-WP-0097-T01
status: todo
priority: medium
```
Add C-43 (WARN, not auto-fixable) to `scripts/consistency_check.py`. It fires
when a resolved decision's title or rationale cites another decision id with
"supersedes"/"superseding" while that cited decision is still `resolved`, or
has `superseded_by` unset or pointing elsewhere. Report both ids. The fix stays
a deliberate founder/decider action: PATCH `status: superseded` and
`superseded_by`. Add tests for the linked, unlinked and mismatched cases.
Document C-43 in the checker header table.
## Document the interim contest convention
```task
id: STATE-WP-0097-T02
status: todo
priority: low
```
Document the convention in `docs/`. An owner whose checked-in charter
(INTENT.md, SCOPE.md, ADRs) excludes an assigned decision replies on the
relaying thread with `CONTEST <decision_id>` and charter refs. Only the founder
or the original decider re-resolves. Re-assignment is a new decision that
supersedes the old one, followed by the link that C-43 checks. A first-class
contest state is routed to the-custodian canon and repo-manager as the
long-term owners. It is not built here.