Observed behavior
Against a clean external pilot produced by the published v0.9.3 coordinator, the lifecycle classifier returned success with
etired_lockout even though the project adoption package was still draft and unratified. The target remained byte-clean.
The tree contained the ordinary planning/state/routing files, an explicitly draft adoption decision, a separate ratified record unrelated to Writwall adoption, closed work-order history, and no active pointer. The classifier inferred lifecycle state from file existence and closed history rather than verifying that the adoption authority itself was ratified.
Why this matters
A draft bootstrap can be mistaken for a governed, retired project. That sends the human and the next agent down the wrong recovery path and bypasses the intended Architect-to-Owner ratification boundary.
Required behavior
- Classify an adopted or retired project only from a valid, ratified Writwall adoption record.
- Treat draft, proposed, unsigned, contradictory, or malformed adoption evidence as partial/recovery state or fail closed with a specific diagnostic.
- Do not let unrelated ratified decisions satisfy the adoption condition.
- Preserve backwards-compatible behavior for genuinely new, partially bootstrapped, actively governed, adopted-lockout, and retired-lockout projects.
- Add regression tests reproducing the observed false
etired_lockout result without embedding any external-project identity or paths.
Evidence boundary
This issue is sanitized. It contains no external-project name, host path, private content, secrets, or other-project records.
Observed behavior
Against a clean external pilot produced by the published v0.9.3 coordinator, the lifecycle classifier returned success with
etired_lockout even though the project adoption package was still draft and unratified. The target remained byte-clean.
The tree contained the ordinary planning/state/routing files, an explicitly draft adoption decision, a separate ratified record unrelated to Writwall adoption, closed work-order history, and no active pointer. The classifier inferred lifecycle state from file existence and closed history rather than verifying that the adoption authority itself was ratified.
Why this matters
A draft bootstrap can be mistaken for a governed, retired project. That sends the human and the next agent down the wrong recovery path and bypasses the intended Architect-to-Owner ratification boundary.
Required behavior
etired_lockout result without embedding any external-project identity or paths.
Evidence boundary
This issue is sanitized. It contains no external-project name, host path, private content, secrets, or other-project records.