fix(canon): register ad hoc workplan containers
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Python Tests / pytest (push) Successful in 21s

This commit is contained in:
codex 2026-08-23 14:11:14 +02:00
parent e7e162f1f3
commit 0829edc8b4
3 changed files with 12 additions and 1 deletions

View file

@ -7,6 +7,7 @@ kinds:
- kind: workplan - kind: workplan
id_patterns: id_patterns:
- "^[A-Z][A-Z0-9]*(?:-[A-Z][A-Z0-9]*)*-WP-[0-9]{4}$" - "^[A-Z][A-Z0-9]*(?:-[A-Z][A-Z0-9]*)*-WP-[0-9]{4}$"
- "^ADHOC-[0-9]{4}-[0-9]{2}-[0-9]{2}$"
lifecycle: [proposed, ready, active, blocked, backlog, finished, archived] lifecycle: [proposed, ready, active, blocked, backlog, finished, archived]
legacy_patterns: legacy_patterns:
- pattern: "^MASON-0001$" - pattern: "^MASON-0001$"

View file

@ -58,7 +58,7 @@ attention_cost, …) extend the spine; they never replace it.
| Kind | Id scheme | Meaning | Absorbs / legacy | | Kind | Id scheme | Meaning | Absorbs / legacy |
| --- | --- | --- | --- | | --- | --- | --- | --- |
| `workplan` | `{PREFIX}-WP-NNNN` | structured, dependency-bearing body of work | `MASON-0001` (single bootstrap record, grandfathered) | | `workplan` | `{PREFIX}-WP-NNNN` · `ADHOC-YYYY-MM-DD` | structured, dependency-bearing body of work; daily container for small same-day tasks | `MASON-0001` (single bootstrap record, grandfathered) |
| `task` | `{WP-ID}-TNN` (workplan) · `ADHOC-YYYY-MM-DD-TNN` | smallest executable unit | `MASON-0001-TNN` (grandfathered); issue-core issues become external projections only | | `task` | `{WP-ID}-TNN` (workplan) · `ADHOC-YYYY-MM-DD-TNN` | smallest executable unit | `MASON-0001-TNN` (grandfathered); issue-core issues become external projections only |
| `intake` | `{PREFIX}-IN-NNNN` | spark: idea, finding, directive, request | hub suggestions (legacy, read-only close-out); `AWQ-NNN` (grandfathered) | | `intake` | `{PREFIX}-IN-NNNN` | spark: idea, finding, directive, request | hub suggestions (legacy, read-only close-out); `AWQ-NNN` (grandfathered) |
| `decision` | `{PREFIX}-DEC-YYYY-NNN` | approval package + resolution | `DEC-YYYY-NNN` (binky, grandfathered as-is) | | `decision` | `{PREFIX}-DEC-YYYY-NNN` | approval package + resolution | `DEC-YYYY-NNN` (binky, grandfathered as-is) |
@ -89,6 +89,12 @@ now matches ADR-007's repository-derived prefix model; prefix ownership and
uniqueness remain separate registry checks and are not weakened by this syntax uniqueness remain separate registry checks and are not weakened by this syntax
correction. correction.
The same compatibility review registered `ADHOC-YYYY-MM-DD` as the workplan
container corresponding to the already canonical
`ADHOC-YYYY-MM-DD-TNN` task form. This aligns the machine registry with the
fleet agent convention and existing daily records; it does not permit ad hoc
containers to replace dependency-bearing workplans.
Risk Nexus findings (`RISK-F-*`) and regulatory records (`RISK-REG-*`) are Risk Nexus findings (`RISK-F-*`) and regulatory records (`RISK-REG-*`) are
registered as variants of `register-entry`, not as parallel work kinds. Their registered as variants of `register-entry`, not as parallel work kinds. Their
lifecycles remain owned by the register convention. `RISK-N-*` notes are lifecycles remain owned by the register convention. `RISK-N-*` notes are

View file

@ -59,6 +59,10 @@ class TestClassify:
assert classify("RAPP--OPENBAO-WP-0002", kinds) is None assert classify("RAPP--OPENBAO-WP-0002", kinds) is None
assert classify("1RAPP-OPENBAO-WP-0002", kinds) is None assert classify("1RAPP-OPENBAO-WP-0002", kinds) is None
def test_ad_hoc_daily_container_and_task_ids(self, kinds):
assert classify("ADHOC-2026-08-23", kinds) == "workplan"
assert classify("ADHOC-2026-08-23-T01", kinds) == "task"
def test_new_kind_ids(self, kinds): def test_new_kind_ids(self, kinds):
assert classify("BINKY-IN-0001", kinds) == "intake" assert classify("BINKY-IN-0001", kinds) == "intake"
assert classify("BINKY-DEC-2026-001", kinds) == "decision" assert classify("BINKY-DEC-2026-001", kinds) == "decision"