You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Closes#149 — surfaced by Sentinel post-CHARTER-17 housekeeping. TDE
adopters who keep documents on disk as audit history after the debt is
paid had no canonical status to mark the closure; `accepted` /
`superseded` / `deprecated` all carry the wrong semantics. The
validator rejected `resolved` with META-003.
This release ships Option A of the issue's proposal triplet (flat enum
+ `resolved`) and documents Option B (per-doc-type lifecycle vocabulary)
as the deliberate next evolution.
CLI changes (cli-3.13.1):
- cli/src/validation.rs:48: add `resolved` to VALID_STATUSES with an
extensive comment explaining (1) the TDE semantics it captures vs.
the alternatives, (2) why Option A ships now over B/C, and (3) what
the future per-doc-type lookup will tighten.
- cli/tests/validate_test.rs: two new regression tests —
`test_validate_tde_resolved_terminal_state` (positive) and
`test_validate_rejects_non_canonical_ailog_terminals` (negative;
`final` / `closed` / `completed` continue to fail per #149's
Sentinel-invention caveat).
Framework changes (fw-4.14.2):
- dist/.straymark/00-governance/DOCUMENTATION-POLICY.md §3 (EN + ES +
zh-CN): lifecycle diagram extended with the `resolved` terminal
branch; new row in the status table with the principled distinction
from `accepted` / `superseded` / `deprecated`; §6 TDE row annotated
with the `identified → resolved` lifecycle.
- dist/.straymark/templates/TEMPLATE-TDE.md (EN + ES + zh-CN):
frontmatter `status: identified` annotated with the transition; new
optional `## Resolution` body section (Resolved by / Date /
Verification / Notes).
Adopter guidance: `straymark update-framework` + `straymark update-cli`
unblock TDE files marked `status: resolved` immediately. AILOGs
invented `final` / `closed` / `completed` continue to fail —
canonical AILOG terminal is `accepted` per TEMPLATE-AILOG.md.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Closes [#149](https://github.com/StrangeDaysTech/straymark/issues/149) — surfaced by Sentinel post-CHARTER-17 housekeeping. TDE adopters who keep documents on disk as audit history after the debt is paid had no canonical status to mark the closure; `accepted` / `superseded` / `deprecated` all carry the wrong semantics. The validator rejected `resolved` with `META-003`.
13
+
14
+
This release ships **Option A** of the issue's proposal triplet (flat enum + `resolved`) and documents **Option B** (per-doc-type lifecycle vocabulary) as the deliberate next evolution.
15
+
16
+
### Added (CLI)
17
+
18
+
-**`resolved`** is now a valid value in `VALID_STATUSES` (`cli/src/validation.rs:48`). Adopter-facing effect: `straymark validate` accepts `status: resolved` on TDE documents without `META-003`. Two new tests pin the behavior:
19
+
-`test_validate_tde_resolved_terminal_state` — TDE with `status: resolved` passes.
20
+
-`test_validate_rejects_non_canonical_ailog_terminals` — `final`, `closed`, `completed` (Sentinel's invented AILOG terminals reported in #149) continue to fail with `META-003`. Adopters using these on AILOGs should migrate to `accepted` per `TEMPLATE-AILOG.md` and `DOCUMENTATION-POLICY.md §6`.
21
+
22
+
### Changed (Framework)
23
+
24
+
-**`dist/.straymark/00-governance/DOCUMENTATION-POLICY.md` §3 (EN + i18n/es + i18n/zh-CN)** — lifecycle diagram extended with the `resolved` terminal branch (TDE-only); new `resolved` row in the status table with the principled distinction from `accepted` / `superseded` / `deprecated`; §6 table column updated to note that TDE enters at `identified` and has its own terminal `resolved`.
25
+
-**`dist/.straymark/templates/TEMPLATE-TDE.md` (EN + i18n/es + i18n/zh-CN)** — frontmatter `status: identified` annotated with the `→ resolved` transition; new optional `## Resolution` body section (omit while the debt is still open) with fields for Resolved by / Date / Verification / Notes.
26
+
27
+
### Deliberately deferred (Option B)
28
+
29
+
The principled fix to the per-doc-type lifecycle vocabulary problem is to promote the flat `VALID_STATUSES` enum to a `HashMap<DocType, Vec<&str>>` so each doc type has its own canonical state machine and the validator inspects `doc.doc_type` before deciding which set to apply. The reasons to defer:
30
+
31
+
- Option A unblocks adopters today (Sentinel reports 2 TDE files with `status: resolved`); shipping it is ~30 LOC + docs.
32
+
- Option B is ~150 LOC + a per-type test matrix expansion + non-trivial decisions about which terminals each type should have. Doing it pre-announcement risks calcifying choices we'd rather make based on a second adopter's lifecycle needs.
33
+
- The `VALID_STATUSES` constant doc-comment in `validation.rs` and the explanatory paragraph in `DOCUMENTATION-POLICY.md §3` both name the trade-off explicitly: "TDE is the only type today with a custom terminal; the validator accepts `resolved` globally as a stop-gap. Issue #149 Option B will scope `resolved` strictly to TDE; until then, using it on non-TDE documents passes validation but is semantically incorrect."
34
+
35
+
### Adopter guidance
36
+
37
+
-`straymark update-framework` brings the new `TEMPLATE-TDE.md` and `DOCUMENTATION-POLICY.md`. Existing TDE files are unaffected — the template change is purely additive.
- Sentinel-side AILOGs marked `final` / `closed` / `completed` continue to fail validation. The fix is to migrate those to `accepted` (the canonical AILOG terminal per `TEMPLATE-AILOG.md`) and capture the "work completed" semantics in the body or in the originating Charter's telemetry, not in the AILOG status field.
Framework-only patch that closes the documentation gap left by `fw-4.14.0` / `cli-3.13.0`. The release added the `batch-complete` subcommand and the Batch Ledger workflow but didn't surface them in three places adopters and contributors discover the project from: the root `README.md` (and i18n overlays), the project's user-facing comparison/feature lists, and **`dist/STRAYMARK.md`** — the governance file shipped to every adopter via `straymark init`.
Copy file name to clipboardExpand all lines: dist/.straymark/00-governance/DOCUMENTATION-POLICY.md
+8-3Lines changed: 8 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -156,17 +156,22 @@ identified ──┐
156
156
│ └──────► superseded
157
157
│
158
158
└──► (TDE-only entry state, see §6)
159
+
│
160
+
▼
161
+
resolved
162
+
(TDE-only terminal — debt paid; see §6)
159
163
```
160
164
161
165
| Status | Description |
162
166
|--------|-------------|
163
167
| `identified` | Entry state for agent-driven discovery types (TDE today). Functionally equivalent to `draft` for lifecycle gating — a human reviewer is expected to prioritize and promote it. Semantically distinct so adopter analytics can distinguish "agent found this debt" from "human is drafting a deliberate doc". |
164
168
| `draft` | In draft, pending review |
165
169
| `accepted` | Approved and current |
170
+
| `resolved` | **TDE-only terminal state**: the technical debt described in this document has been addressed; the file is kept on disk as audit history. Distinct from `accepted` ("we accept this debt continues to exist"), `superseded` ("another TDE replaced this one"), and `deprecated` ("the TDE concept itself is no longer relevant"). The canonical closing reference (the Charter, PR, or commit that paid the debt) goes in the `## Resolution` body section. |
166
171
| `deprecated` | Obsolete, but kept as reference |
167
172
| `superseded` | Replaced by another document |
168
173
169
-
The per-type default status mapping lives in §6 — most types enter at `draft` or `accepted`, but TDE enters at `identified` per the agent-autonomy boundary (agent identifies, human prioritizes).
174
+
The per-type default status mapping lives in §6 — most types enter at `draft` or `accepted`, but TDE enters at `identified` per the agent-autonomy boundary (agent identifies, human prioritizes). TDE is the only type today with a custom terminal state (`resolved`); the validator accepts `resolved` globally as a stop-gap. A future per-doc-type lifecycle vocabulary (issue #149 Option B) will scope `resolved` to TDE strictly; until then, using it on non-TDE documents is allowed by the validator but semantically incorrect.
170
175
171
176
---
172
177
@@ -269,7 +274,7 @@ For documents that require multiple reviewers (e.g., ETH with both legal and eng
0 commit comments