Normalize workplan IDs and activate parents on task start

This commit is contained in:
2026-05-23 16:31:28 +02:00
parent 9f3561a254
commit 90c9f8e7a7
10 changed files with 195 additions and 38 deletions

View File

@@ -4,7 +4,7 @@ type: workplan
title: "Lifecycle Assertions and Renormalization"
domain: custodian
repo: state-hub
status: proposed
status: active
owner: codex
topic_slug: custodian
planning_priority: high
@@ -32,11 +32,21 @@ state changes themselves do not consistently use a shared transition layer.
This workplan turns the vocabulary into executable rules and repair scaffolding.
## Lifecycle Invariants
| Invariant | Classification | Repair Path |
|-----------|----------------|-------------|
| A task moving from `todo` to `in_progress` activates a parent workstream in `proposed`, `ready`, or `backlog`. | automatic repair | Set parent workstream status to `active` in the same transaction. |
| A `blocked` parent workstream is not automatically unblocked by task start. | hard guard | Keep `blocked`; require explicit unblock transition or dependency/decision repair. |
| `finished` and `archived` workstreams should not have open tasks unless explicitly grandfathered. | warning, then repair | Report via consistency tooling; close/cancel stale tasks or reopen parent with intent. |
| `needs_review` and `stalled` remain derived health labels. | hard vocabulary guard | Do not write them to workplan frontmatter or `workstreams.status`. |
| Archived workplan files must have closed lifecycle states. | hard consistency error | Move file back to active workplans or close the lifecycle state. |
## T01 - Define Lifecycle Invariants
```task
id: STATE-WP-0047-T01
status: todo
status: done
priority: high
state_hub_task_id: "28f28391-646c-4871-ae84-a1c1aae3f5bf"
```
@@ -50,11 +60,15 @@ derived labels.
Done when the invariant table is documented and each rule is classified as
hard error, warning, automatic repair, or human-review item.
Result 2026-05-23: added the initial invariant table above. The first automatic
repair implemented in this slice is parent activation when real task work
starts.
## T02 - Implement Shared Transition Helpers
```task
id: STATE-WP-0047-T02
status: todo
status: in_progress
priority: high
state_hub_task_id: "56d9b6b9-fba1-4997-bdd5-875187cafa2d"
```
@@ -66,11 +80,15 @@ entry and exit assertions, and return concise repair/action results.
Done when API routes, consistency tooling, and future UI actions can call one
shared transition layer for lifecycle changes.
Progress 2026-05-23: added `api.services.lifecycle` with shared status
normalization and parent-activation helpers. The task API now uses the helper;
consistency tooling and future UI actions still need to adopt the shared layer.
## T03 - Auto-Advance Workstream On Task Start
```task
id: STATE-WP-0047-T03
status: todo
status: done
priority: high
state_hub_task_id: "b0937fed-bd61-4f27-9586-8cebc6168827"
```
@@ -82,6 +100,10 @@ guard blocks the transition.
Done when starting real task work cannot leave the parent workstream parked in
planning states.
Result 2026-05-23: task creation or update to `in_progress` activates a parent
workstream from `proposed`, `ready`, or `backlog`, while leaving `blocked`
parents blocked.
## T04 - Harden Flow Advancement Semantics
```task
@@ -132,7 +154,7 @@ pattern instead of relying on ad hoc fixes.
```task
id: STATE-WP-0047-T07
status: todo
status: in_progress
priority: high
state_hub_task_id: "def5ce49-1938-4c45-807d-78ac15c995cb"
```
@@ -142,6 +164,11 @@ enforcement, and consistency repairs.
Done when lifecycle drift is hard to reintroduce accidentally.
Progress 2026-05-23: added router regression tests for task-start activation
from `proposed`, `ready`, and `backlog`, plus a guard test proving `blocked`
parents stay blocked. Remaining coverage still needs flow assertion hardening
and consistency repair tests.
## Acceptance Criteria
- Starting task work deterministically activates the parent workstream.