diff --git a/canon/standards/work-record-types.yaml b/canon/standards/work-record-types.yaml index c48ccc5..c068d90 100644 --- a/canon/standards/work-record-types.yaml +++ b/canon/standards/work-record-types.yaml @@ -7,6 +7,7 @@ kinds: - kind: workplan id_patterns: - "^[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] legacy_patterns: - pattern: "^MASON-0001$" diff --git a/canon/standards/work-record-types_v0.1.md b/canon/standards/work-record-types_v0.1.md index 802a344..d6731a1 100644 --- a/canon/standards/work-record-types_v0.1.md +++ b/canon/standards/work-record-types_v0.1.md @@ -58,7 +58,7 @@ attention_cost, …) extend the spine; they never replace it. | 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 | | `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) | @@ -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 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 registered as variants of `register-entry`, not as parallel work kinds. Their lifecycles remain owned by the register convention. `RISK-N-*` notes are diff --git a/tests/test_validate_work_records.py b/tests/test_validate_work_records.py index 9d24d6b..cf79729 100644 --- a/tests/test_validate_work_records.py +++ b/tests/test_validate_work_records.py @@ -59,6 +59,10 @@ class TestClassify: assert classify("RAPP--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): assert classify("BINKY-IN-0001", kinds) == "intake" assert classify("BINKY-DEC-2026-001", kinds) == "decision"