Record Stage 5 target custody preflight
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"admission_status": "admitted",
|
"admission_status": "admitted",
|
||||||
|
"admission_lifecycle": "historical-proof-target",
|
||||||
"allowed_paths": [
|
"allowed_paths": [
|
||||||
"strings.py",
|
"strings.py",
|
||||||
"test_strings.py",
|
"test_strings.py",
|
||||||
@@ -36,11 +37,15 @@
|
|||||||
"vendor/",
|
"vendor/",
|
||||||
".git/"
|
".git/"
|
||||||
],
|
],
|
||||||
|
"future_execution_authorized": false,
|
||||||
|
"future_execution_requires_new_admission": true,
|
||||||
"noncritical_rationale": "Dedicated owned Stage 5 sandbox repo, not production, no customer data, no secrets, no deploy path, no external users, safe to delete after validation.",
|
"noncritical_rationale": "Dedicated owned Stage 5 sandbox repo, not production, no customer data, no secrets, no deploy path, no external users, safe to delete after validation.",
|
||||||
"operator_outcome_required": true,
|
"operator_outcome_required": true,
|
||||||
"ownership_evidence": "JP chat approval on 2026-06-01 to create this dedicated Stage 5 target sandbox under /home/svrnty/workspaces/cortex-os.",
|
"ownership_evidence": "JP chat approval on 2026-06-01 to create this dedicated Stage 5 target sandbox under /home/svrnty/workspaces/cortex-os.",
|
||||||
"repository_owner": "jp",
|
"repository_owner": "jp",
|
||||||
"review_trigger": "before Stage 5 execution against any different repository, before target repository path change, before allowed path change, before forbidden action change, before risk classification change",
|
"review_trigger": "before Stage 5 execution against any different repository, before target repository path change, before allowed path change, before forbidden action change, before risk classification change",
|
||||||
"risk_classification": "low_risk_noncritical",
|
"risk_classification": "low_risk_noncritical",
|
||||||
|
"root_path_dependency": "historical-reference-only",
|
||||||
|
"custody_preflight_record": "docs/STAGE5-TARGET-SANDBOX-CUSTODY-PREFLIGHT.md",
|
||||||
"target_repository_path": "/home/svrnty/workspaces/cortex-os/cto-stage5-target-sandbox"
|
"target_repository_path": "/home/svrnty/workspaces/cortex-os/cto-stage5-target-sandbox"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -491,3 +491,8 @@ items:
|
|||||||
status: validated
|
status: validated
|
||||||
source: docs/STAGE5-TARGET-SANDBOX-STALE-CASE-STATE.md
|
source: docs/STAGE5-TARGET-SANDBOX-STALE-CASE-STATE.md
|
||||||
owner: ""
|
owner: ""
|
||||||
|
- id: CTO-WORK-099
|
||||||
|
title: Stage 5 Target Sandbox Custody Preflight
|
||||||
|
status: validated
|
||||||
|
source: docs/STAGE5-TARGET-SANDBOX-CUSTODY-PREFLIGHT.md
|
||||||
|
owner: ""
|
||||||
|
|||||||
@@ -99,6 +99,14 @@ Current evidence:
|
|||||||
|
|
||||||
Movement gate:
|
Movement gate:
|
||||||
|
|
||||||
|
2026-06-17 custody preflight: the old Stage 5 target admission is now
|
||||||
|
historical proof context only. The admission record sets
|
||||||
|
`admission_lifecycle=historical-proof-target`,
|
||||||
|
`future_execution_authorized=false`, and
|
||||||
|
`future_execution_requires_new_admission=true`. Physical relocation remains a
|
||||||
|
separate host-aware custody gate because the MacBook mirror can rehydrate root
|
||||||
|
paths unless policy is checked first.
|
||||||
|
|
||||||
Move or archive only after CTO replaces the absolute live path with archive-stable evidence or a new admitted target fixture, reruns `python3 tools/validate_cto_child.py`, reruns `python3 tools/validate_cto_stage5_target_sandbox_child.py`, and records that target ownership remains outside CTO and Core. The target-local Case task residue is now declared stale, but the absolute path dependency remains open.
|
Move or archive only after CTO replaces the absolute live path with archive-stable evidence or a new admitted target fixture, reruns `python3 tools/validate_cto_child.py`, reruns `python3 tools/validate_cto_stage5_target_sandbox_child.py`, and records that target ownership remains outside CTO and Core. The target-local Case task residue is now declared stale, but the absolute path dependency remains open.
|
||||||
|
|
||||||
Rejected now: raw move, hard delete, validator path rewrites for cleanup optics, Case rerun, Harness rerun, provider mutation, target source mutation, Core mutation, Seed mutation, readiness claim, release claim.
|
Rejected now: raw move, hard delete, validator path rewrites for cleanup optics, Case rerun, Harness rerun, provider mutation, target source mutation, Core mutation, Seed mutation, readiness claim, release claim.
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
# CTO Stage 5 Target Sandbox Custody Preflight
|
||||||
|
|
||||||
|
Local planning evidence only. Not Core authority. Not Runtime authority.
|
||||||
|
|
||||||
|
Source: CTO-WORK-099.
|
||||||
|
|
||||||
|
## Result
|
||||||
|
|
||||||
|
Status: custody-preflight-complete.
|
||||||
|
|
||||||
|
Original target path remains historical proof context only:
|
||||||
|
|
||||||
|
```text
|
||||||
|
/home/svrnty/workspaces/cortex-os/cto-stage5-target-sandbox
|
||||||
|
```
|
||||||
|
|
||||||
|
The target sandbox remains in place during this slice. Do not move the target sandbox in this slice.
|
||||||
|
|
||||||
|
## Admission Lifecycle
|
||||||
|
|
||||||
|
The Stage 5 target admission now declares:
|
||||||
|
|
||||||
|
- `admission_lifecycle`: `historical-proof-target`
|
||||||
|
- `future_execution_authorized`: `false`
|
||||||
|
- `future_execution_requires_new_admission`: `true`
|
||||||
|
- `root_path_dependency`: `historical-reference-only`
|
||||||
|
|
||||||
|
Any future Stage 5 execution requires a new admission record, new approval
|
||||||
|
text, current target validation, and fresh Harness evidence. The old
|
||||||
|
2026-06-01 approval remains proof history only.
|
||||||
|
|
||||||
|
## Custody Decision
|
||||||
|
|
||||||
|
Physical relocation remains a separate host-aware custody gate. That gate must:
|
||||||
|
|
||||||
|
- preserve the target sandbox outside the umbrella with a manifest;
|
||||||
|
- prove the preserved target validator still passes from the preserved path;
|
||||||
|
- prove root absence or record any MacBook sync rehydration;
|
||||||
|
- keep target ownership outside CTO and Core;
|
||||||
|
- avoid hard deletion.
|
||||||
|
|
||||||
|
No target source mutation, Case rerun, Harness rerun, provider call, runtime
|
||||||
|
start, browser open, branch mutation, Core mutation, readiness claim, or release
|
||||||
|
claim occurred.
|
||||||
@@ -56,6 +56,15 @@ no default Runtime activation.
|
|||||||
|
|
||||||
## Remaining Movement Gate
|
## Remaining Movement Gate
|
||||||
|
|
||||||
|
2026-06-17 custody preflight:
|
||||||
|
|
||||||
|
- `docs/STAGE5-TARGET-SANDBOX-CUSTODY-PREFLIGHT.md` declares the original
|
||||||
|
target path historical proof context only.
|
||||||
|
- `.sot/03-PROTOCOLS/CTO-CASE-STAGE5-TARGET-REPOSITORY-ADMISSION.json`
|
||||||
|
now sets `future_execution_authorized=false` and
|
||||||
|
`future_execution_requires_new_admission=true`.
|
||||||
|
- The target sandbox was not moved in this slice.
|
||||||
|
|
||||||
Movement remains deferred until CTO replaces the absolute live path dependency
|
Movement remains deferred until CTO replaces the absolute live path dependency
|
||||||
with archive-stable evidence or a new admitted target fixture, then reruns:
|
with archive-stable evidence or a new admitted target fixture, then reruns:
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ REQUIRED_FILES = [
|
|||||||
"CONTEXT.md",
|
"CONTEXT.md",
|
||||||
"docs/LEGACY-INGEST.md",
|
"docs/LEGACY-INGEST.md",
|
||||||
"docs/STAGE5-TARGET-SANDBOX-STALE-CASE-STATE.md",
|
"docs/STAGE5-TARGET-SANDBOX-STALE-CASE-STATE.md",
|
||||||
|
"docs/STAGE5-TARGET-SANDBOX-CUSTODY-PREFLIGHT.md",
|
||||||
".sot/00-START/CTO-WORKSPACE-INTENT.md",
|
".sot/00-START/CTO-WORKSPACE-INTENT.md",
|
||||||
".sot/03-PROTOCOLS/CTO-CASE-BACKEND-BRIEF.md",
|
".sot/03-PROTOCOLS/CTO-CASE-BACKEND-BRIEF.md",
|
||||||
".sot/03-PROTOCOLS/CTO-ARCHITECTURE-BRIEF-CLOSEOUT-PRD.md",
|
".sot/03-PROTOCOLS/CTO-ARCHITECTURE-BRIEF-CLOSEOUT-PRD.md",
|
||||||
@@ -882,6 +883,7 @@ REQUIRED_STAGE5_TARGET_ADMISSION_TEMPLATE_PHRASES = [
|
|||||||
|
|
||||||
REQUIRED_STAGE5_TARGET_ADMISSION_JSON = {
|
REQUIRED_STAGE5_TARGET_ADMISSION_JSON = {
|
||||||
"admission_status": "admitted",
|
"admission_status": "admitted",
|
||||||
|
"admission_lifecycle": "historical-proof-target",
|
||||||
"target_repository_path": "/home/svrnty/workspaces/cortex-os/cto-stage5-target-sandbox",
|
"target_repository_path": "/home/svrnty/workspaces/cortex-os/cto-stage5-target-sandbox",
|
||||||
"repository_owner": "jp",
|
"repository_owner": "jp",
|
||||||
"ownership_evidence": "JP chat approval on 2026-06-01 to create this dedicated Stage 5 target sandbox under /home/svrnty/workspaces/cortex-os.",
|
"ownership_evidence": "JP chat approval on 2026-06-01 to create this dedicated Stage 5 target sandbox under /home/svrnty/workspaces/cortex-os.",
|
||||||
@@ -890,6 +892,10 @@ REQUIRED_STAGE5_TARGET_ADMISSION_JSON = {
|
|||||||
"approval_source": "JP chat approval on 2026-06-01",
|
"approval_source": "JP chat approval on 2026-06-01",
|
||||||
"approval_timestamp": "2026-06-01",
|
"approval_timestamp": "2026-06-01",
|
||||||
"operator_outcome_required": True,
|
"operator_outcome_required": True,
|
||||||
|
"future_execution_authorized": False,
|
||||||
|
"future_execution_requires_new_admission": True,
|
||||||
|
"root_path_dependency": "historical-reference-only",
|
||||||
|
"custody_preflight_record": "docs/STAGE5-TARGET-SANDBOX-CUSTODY-PREFLIGHT.md",
|
||||||
}
|
}
|
||||||
|
|
||||||
REQUIRED_STAGE5_TARGET_FORBIDDEN_ACTIONS = [
|
REQUIRED_STAGE5_TARGET_FORBIDDEN_ACTIONS = [
|
||||||
@@ -920,6 +926,24 @@ REQUIRED_STAGE5_TARGET_STALE_STATE_PHRASES = [
|
|||||||
"No hard delete, Core mutation, Harness rerun, Case rerun, provider",
|
"No hard delete, Core mutation, Harness rerun, Case rerun, provider",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
REQUIRED_STAGE5_TARGET_CUSTODY_PREFLIGHT_PHRASES = [
|
||||||
|
"Local planning evidence only. Not Core authority. Not Runtime authority.",
|
||||||
|
"Source: CTO-WORK-099.",
|
||||||
|
"Status: custody-preflight-complete.",
|
||||||
|
"Original target path remains historical proof context only",
|
||||||
|
"/home/svrnty/workspaces/cortex-os/cto-stage5-target-sandbox",
|
||||||
|
"Do not move the target sandbox in this slice.",
|
||||||
|
"`admission_lifecycle`: `historical-proof-target`",
|
||||||
|
"`future_execution_authorized`: `false`",
|
||||||
|
"`future_execution_requires_new_admission`: `true`",
|
||||||
|
"`root_path_dependency`: `historical-reference-only`",
|
||||||
|
"Any future Stage 5 execution requires a new admission record",
|
||||||
|
"Physical relocation remains a separate host-aware custody gate.",
|
||||||
|
"preserve the target sandbox outside the umbrella with a manifest",
|
||||||
|
"prove root absence or record any MacBook sync rehydration",
|
||||||
|
"No target source mutation, Case rerun, Harness rerun, provider call",
|
||||||
|
]
|
||||||
|
|
||||||
REQUIRED_PROVIDER_ADMISSION_PRD_PHRASES = [
|
REQUIRED_PROVIDER_ADMISSION_PRD_PHRASES = [
|
||||||
"Local planning SOT only. Not a Core Protocol. Not active Core authority.",
|
"Local planning SOT only. Not a Core Protocol. Not active Core authority.",
|
||||||
"https://github.com/workos/case.git",
|
"https://github.com/workos/case.git",
|
||||||
@@ -2689,6 +2713,14 @@ def main() -> int:
|
|||||||
if phrase not in text:
|
if phrase not in text:
|
||||||
errors.append(f"missing_stage5_target_stale_state_phrase:{phrase}")
|
errors.append(f"missing_stage5_target_stale_state_phrase:{phrase}")
|
||||||
|
|
||||||
|
stage5_target_custody_preflight = ROOT / "docs/STAGE5-TARGET-SANDBOX-CUSTODY-PREFLIGHT.md"
|
||||||
|
if stage5_target_custody_preflight.is_file():
|
||||||
|
text = stage5_target_custody_preflight.read_text(encoding="utf-8")
|
||||||
|
for phrase in REQUIRED_STAGE5_TARGET_CUSTODY_PREFLIGHT_PHRASES:
|
||||||
|
checked.append(f"stage5_target_custody_preflight_phrase:{phrase}")
|
||||||
|
if phrase not in text:
|
||||||
|
errors.append(f"missing_stage5_target_custody_preflight_phrase:{phrase}")
|
||||||
|
|
||||||
stage6_prd = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-STAGE6-CANDIDATE-DEFAULT-PRD.md"
|
stage6_prd = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-STAGE6-CANDIDATE-DEFAULT-PRD.md"
|
||||||
if stage6_prd.is_file():
|
if stage6_prd.is_file():
|
||||||
text = stage6_prd.read_text(encoding="utf-8")
|
text = stage6_prd.read_text(encoding="utf-8")
|
||||||
@@ -3023,7 +3055,7 @@ def main() -> int:
|
|||||||
checked.append(f"workboard_id:{issue_id}")
|
checked.append(f"workboard_id:{issue_id}")
|
||||||
if issue_id not in text:
|
if issue_id not in text:
|
||||||
errors.append(f"missing_workboard_id:{issue_id}")
|
errors.append(f"missing_workboard_id:{issue_id}")
|
||||||
for issue_id in ["CTO-WORK-098"]:
|
for issue_id in ["CTO-WORK-098", "CTO-WORK-099"]:
|
||||||
checked.append(f"workboard_id:{issue_id}")
|
checked.append(f"workboard_id:{issue_id}")
|
||||||
if issue_id not in text:
|
if issue_id not in text:
|
||||||
errors.append(f"missing_workboard_id:{issue_id}")
|
errors.append(f"missing_workboard_id:{issue_id}")
|
||||||
@@ -3123,6 +3155,7 @@ def main() -> int:
|
|||||||
"CTO-WORK-096": "validated",
|
"CTO-WORK-096": "validated",
|
||||||
"CTO-WORK-097": "validated",
|
"CTO-WORK-097": "validated",
|
||||||
"CTO-WORK-098": "validated",
|
"CTO-WORK-098": "validated",
|
||||||
|
"CTO-WORK-099": "validated",
|
||||||
}
|
}
|
||||||
for issue_id, expected in expected_statuses.items():
|
for issue_id, expected in expected_statuses.items():
|
||||||
checked.append(f"workboard_status:{issue_id}:{expected}")
|
checked.append(f"workboard_status:{issue_id}:{expected}")
|
||||||
@@ -3227,6 +3260,8 @@ def main() -> int:
|
|||||||
errors.append("workboard_missing_legacy_ingest_source")
|
errors.append("workboard_missing_legacy_ingest_source")
|
||||||
if "docs/STAGE5-TARGET-SANDBOX-STALE-CASE-STATE.md" not in text:
|
if "docs/STAGE5-TARGET-SANDBOX-STALE-CASE-STATE.md" not in text:
|
||||||
errors.append("workboard_missing_stage5_target_stale_state_source")
|
errors.append("workboard_missing_stage5_target_stale_state_source")
|
||||||
|
if "docs/STAGE5-TARGET-SANDBOX-CUSTODY-PREFLIGHT.md" not in text:
|
||||||
|
errors.append("workboard_missing_stage5_target_custody_preflight_source")
|
||||||
|
|
||||||
payload = {
|
payload = {
|
||||||
"ok": not errors,
|
"ok": not errors,
|
||||||
|
|||||||
Reference in New Issue
Block a user