Migrate CTO SOT route to dotpath
This commit is contained in:
parent
b4454dab5f
commit
19e7766c1a
@ -3,7 +3,7 @@ name: cto-case-adapter-contract
|
|||||||
tier: local
|
tier: local
|
||||||
status: draft
|
status: draft
|
||||||
owner: jp
|
owner: jp
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-PRD.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-PRD.md
|
||||||
created: 2026-05-31
|
created: 2026-05-31
|
||||||
last_reviewed: 2026-05-31
|
last_reviewed: 2026-05-31
|
||||||
lifecycle_classification: planning
|
lifecycle_classification: planning
|
||||||
@ -3,7 +3,7 @@ name: cto-case-candidate-backend-issues
|
|||||||
tier: local
|
tier: local
|
||||||
status: draft
|
status: draft
|
||||||
owner: jp
|
owner: jp
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-PRD.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-PRD.md
|
||||||
created: 2026-05-31
|
created: 2026-05-31
|
||||||
last_reviewed: 2026-05-31
|
last_reviewed: 2026-05-31
|
||||||
lifecycle_classification: planning
|
lifecycle_classification: planning
|
||||||
@ -3,7 +3,7 @@ name: cto-case-failure-fixture-matrix
|
|||||||
tier: local
|
tier: local
|
||||||
status: draft
|
status: draft
|
||||||
owner: jp
|
owner: jp
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-PRD.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-PRD.md
|
||||||
created: 2026-05-31
|
created: 2026-05-31
|
||||||
last_reviewed: 2026-05-31
|
last_reviewed: 2026-05-31
|
||||||
lifecycle_classification: planning
|
lifecycle_classification: planning
|
||||||
@ -3,7 +3,7 @@ name: cto-case-source-admission-record
|
|||||||
tier: local
|
tier: local
|
||||||
status: draft
|
status: draft
|
||||||
owner: jp
|
owner: jp
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-PRD.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-PRD.md
|
||||||
created: 2026-05-31
|
created: 2026-05-31
|
||||||
last_reviewed: 2026-05-31
|
last_reviewed: 2026-05-31
|
||||||
lifecycle_classification: planning
|
lifecycle_classification: planning
|
||||||
@ -3,7 +3,7 @@ name: cto-case-stage1-gated-engine-issues
|
|||||||
tier: local
|
tier: local
|
||||||
status: draft
|
status: draft
|
||||||
owner: jp
|
owner: jp
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-STAGE1-GATED-ENGINE-PRD.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-STAGE1-GATED-ENGINE-PRD.md
|
||||||
created: 2026-05-31
|
created: 2026-05-31
|
||||||
last_reviewed: 2026-05-31
|
last_reviewed: 2026-05-31
|
||||||
lifecycle_classification: planning
|
lifecycle_classification: planning
|
||||||
@ -3,7 +3,7 @@ name: cto-case-stage1-gated-engine-prd
|
|||||||
tier: local
|
tier: local
|
||||||
status: draft
|
status: draft
|
||||||
owner: jp
|
owner: jp
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-STAGED-PROOF-GATES.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-STAGED-PROOF-GATES.md
|
||||||
created: 2026-05-31
|
created: 2026-05-31
|
||||||
last_reviewed: 2026-05-31
|
last_reviewed: 2026-05-31
|
||||||
lifecycle_classification: planning
|
lifecycle_classification: planning
|
||||||
@ -3,7 +3,7 @@ name: cto-case-stage2-artificial-fixture-issues
|
|||||||
tier: local
|
tier: local
|
||||||
status: draft
|
status: draft
|
||||||
owner: jp
|
owner: jp
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-STAGE2-ARTIFICIAL-FIXTURE-PRD.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-STAGE2-ARTIFICIAL-FIXTURE-PRD.md
|
||||||
created: 2026-05-31
|
created: 2026-05-31
|
||||||
last_reviewed: 2026-05-31
|
last_reviewed: 2026-05-31
|
||||||
lifecycle_classification: planning
|
lifecycle_classification: planning
|
||||||
@ -3,7 +3,7 @@ name: cto-case-stage2-artificial-fixture-prd
|
|||||||
tier: local
|
tier: local
|
||||||
status: draft
|
status: draft
|
||||||
owner: jp
|
owner: jp
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-STAGED-PROOF-GATES.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-STAGED-PROOF-GATES.md
|
||||||
created: 2026-05-31
|
created: 2026-05-31
|
||||||
last_reviewed: 2026-05-31
|
last_reviewed: 2026-05-31
|
||||||
lifecycle_classification: planning
|
lifecycle_classification: planning
|
||||||
@ -3,7 +3,7 @@ name: cto-case-staged-proof-gates
|
|||||||
tier: local
|
tier: local
|
||||||
status: draft
|
status: draft
|
||||||
owner: jp
|
owner: jp
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-PRD.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-PRD.md
|
||||||
created: 2026-05-31
|
created: 2026-05-31
|
||||||
last_reviewed: 2026-05-31
|
last_reviewed: 2026-05-31
|
||||||
lifecycle_classification: planning
|
lifecycle_classification: planning
|
||||||
@ -3,7 +3,7 @@ name: cto-harness-evidence-interface-contract
|
|||||||
tier: local
|
tier: local
|
||||||
status: draft
|
status: draft
|
||||||
owner: jp
|
owner: jp
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-PRD.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-PRD.md
|
||||||
created: 2026-05-31
|
created: 2026-05-31
|
||||||
last_reviewed: 2026-05-31
|
last_reviewed: 2026-05-31
|
||||||
lifecycle_classification: planning
|
lifecycle_classification: planning
|
||||||
@ -9,7 +9,7 @@ It is not Cortex OS Core authority. It is not a Cortex OS Instance. It is not a
|
|||||||
1. `/home/svrnty/workspaces/cortex-os/core` active SOT.
|
1. `/home/svrnty/workspaces/cortex-os/core` active SOT.
|
||||||
2. `/home/svrnty/workspaces/cortex-os/core/AGENTS.md`.
|
2. `/home/svrnty/workspaces/cortex-os/core/AGENTS.md`.
|
||||||
3. This file.
|
3. This file.
|
||||||
4. `README.md`, `WORKBOARD.yaml`, local `sot/`, and local tools.
|
4. `README.md`, `WORKBOARD.yaml`, local `.sot/`, and local tools.
|
||||||
5. Chat/session memory.
|
5. Chat/session memory.
|
||||||
|
|
||||||
## Workspace Classification
|
## Workspace Classification
|
||||||
|
|||||||
@ -26,7 +26,7 @@ This workspace is registered as a child-local planning workspace. Registration d
|
|||||||
|-- AGENTS.md
|
|-- AGENTS.md
|
||||||
|-- README.md
|
|-- README.md
|
||||||
|-- WORKBOARD.yaml
|
|-- WORKBOARD.yaml
|
||||||
|-- sot/
|
|-- .sot/
|
||||||
| |-- 00-START/
|
| |-- 00-START/
|
||||||
| | `-- CTO-WORKSPACE-INTENT.md
|
| | `-- CTO-WORKSPACE-INTENT.md
|
||||||
| `-- 03-PROTOCOLS/
|
| `-- 03-PROTOCOLS/
|
||||||
|
|||||||
@ -2,126 +2,126 @@ items:
|
|||||||
- id: CTO-WORK-001
|
- id: CTO-WORK-001
|
||||||
title: CTO Case Backend Architecture Brief
|
title: CTO Case Backend Architecture Brief
|
||||||
status: candidate
|
status: candidate
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-BACKEND-BRIEF.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-BACKEND-BRIEF.md
|
||||||
owner: jp
|
owner: jp
|
||||||
- id: CTO-WORK-002
|
- id: CTO-WORK-002
|
||||||
title: CTO Case Candidate Backend PRD
|
title: CTO Case Candidate Backend PRD
|
||||||
status: validated
|
status: validated
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-PRD.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-PRD.md
|
||||||
owner: ""
|
owner: ""
|
||||||
- id: CTO-WORK-003
|
- id: CTO-WORK-003
|
||||||
title: Planning Validator Coverage
|
title: Planning Validator Coverage
|
||||||
status: validated
|
status: validated
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-ISSUES.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-ISSUES.md
|
||||||
owner: ""
|
owner: ""
|
||||||
- id: CTO-WORK-004
|
- id: CTO-WORK-004
|
||||||
title: Harness Evidence Interface Contract
|
title: Harness Evidence Interface Contract
|
||||||
status: validated
|
status: validated
|
||||||
source: sot/03-PROTOCOLS/CTO-HARNESS-EVIDENCE-INTERFACE-CONTRACT.md
|
source: .sot/03-PROTOCOLS/CTO-HARNESS-EVIDENCE-INTERFACE-CONTRACT.md
|
||||||
owner: ""
|
owner: ""
|
||||||
- id: CTO-WORK-005
|
- id: CTO-WORK-005
|
||||||
title: Case Source Admission Record
|
title: Case Source Admission Record
|
||||||
status: validated
|
status: validated
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-SOURCE-ADMISSION-RECORD.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-SOURCE-ADMISSION-RECORD.md
|
||||||
owner: ""
|
owner: ""
|
||||||
- id: CTO-WORK-006
|
- id: CTO-WORK-006
|
||||||
title: Case Adapter Contract And Eligibility Decision
|
title: Case Adapter Contract And Eligibility Decision
|
||||||
status: validated
|
status: validated
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-ADAPTER-CONTRACT.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-ADAPTER-CONTRACT.md
|
||||||
owner: ""
|
owner: ""
|
||||||
- id: CTO-WORK-007
|
- id: CTO-WORK-007
|
||||||
title: Case Failure Fixture Matrix
|
title: Case Failure Fixture Matrix
|
||||||
status: validated
|
status: validated
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-FAILURE-FIXTURE-MATRIX.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-FAILURE-FIXTURE-MATRIX.md
|
||||||
owner: ""
|
owner: ""
|
||||||
- id: CTO-WORK-008
|
- id: CTO-WORK-008
|
||||||
title: Staged Proof Gate Records
|
title: Staged Proof Gate Records
|
||||||
status: validated
|
status: validated
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-STAGED-PROOF-GATES.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-STAGED-PROOF-GATES.md
|
||||||
owner: ""
|
owner: ""
|
||||||
- id: CTO-WORK-009
|
- id: CTO-WORK-009
|
||||||
title: Stage 1 Gated Case Engine PRD
|
title: Stage 1 Gated Case Engine PRD
|
||||||
status: validated
|
status: validated
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-STAGE1-GATED-ENGINE-PRD.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-STAGE1-GATED-ENGINE-PRD.md
|
||||||
owner: ""
|
owner: ""
|
||||||
- id: CTO-WORK-010
|
- id: CTO-WORK-010
|
||||||
title: Stage 1 Harness Implementation Route
|
title: Stage 1 Harness Implementation Route
|
||||||
status: validated
|
status: validated
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-STAGE1-GATED-ENGINE-ISSUES.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-STAGE1-GATED-ENGINE-ISSUES.md
|
||||||
owner: ""
|
owner: ""
|
||||||
|
|
||||||
- id: CTO-WORK-011
|
- id: CTO-WORK-011
|
||||||
title: Stage 2 Artificial Fixture PRD
|
title: Stage 2 Artificial Fixture PRD
|
||||||
status: validated
|
status: validated
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-STAGE2-ARTIFICIAL-FIXTURE-PRD.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-STAGE2-ARTIFICIAL-FIXTURE-PRD.md
|
||||||
owner: ""
|
owner: ""
|
||||||
- id: CTO-WORK-012
|
- id: CTO-WORK-012
|
||||||
title: Stage 2 Harness Artificial Fixture Route
|
title: Stage 2 Harness Artificial Fixture Route
|
||||||
status: blocked
|
status: blocked
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-STAGE2-ARTIFICIAL-FIXTURE-ISSUES.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-STAGE2-ARTIFICIAL-FIXTURE-ISSUES.md
|
||||||
owner: jp
|
owner: jp
|
||||||
- id: CTO-WORK-013
|
- id: CTO-WORK-013
|
||||||
title: Case Provider Admission PRD
|
title: Case Provider Admission PRD
|
||||||
status: validated
|
status: validated
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-PROVIDER-ADMISSION-PRD.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-PROVIDER-ADMISSION-PRD.md
|
||||||
owner: ""
|
owner: ""
|
||||||
- id: CTO-WORK-014
|
- id: CTO-WORK-014
|
||||||
title: Hermes Case CLI Task Adapter Route
|
title: Hermes Case CLI Task Adapter Route
|
||||||
status: validated
|
status: validated
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-PROVIDER-ADMISSION-ISSUES.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-PROVIDER-ADMISSION-ISSUES.md
|
||||||
owner: ""
|
owner: ""
|
||||||
- id: CTO-WORK-015
|
- id: CTO-WORK-015
|
||||||
title: Durable Case Provider Build PRD
|
title: Durable Case Provider Build PRD
|
||||||
status: validated
|
status: validated
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-PROVIDER-BUILD-PRD.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-PROVIDER-BUILD-PRD.md
|
||||||
owner: ""
|
owner: ""
|
||||||
- id: CTO-WORK-016
|
- id: CTO-WORK-016
|
||||||
title: Real Case Provider Stage 2 Run
|
title: Real Case Provider Stage 2 Run
|
||||||
status: blocked
|
status: blocked
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-PROVIDER-BUILD-ISSUES.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-PROVIDER-BUILD-ISSUES.md
|
||||||
owner: jp
|
owner: jp
|
||||||
- id: CTO-WORK-017
|
- id: CTO-WORK-017
|
||||||
title: Case Provider Timeout Fail-Closed Route
|
title: Case Provider Timeout Fail-Closed Route
|
||||||
status: validated
|
status: validated
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-PROVIDER-BUILD-ISSUES.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-PROVIDER-BUILD-ISSUES.md
|
||||||
owner: ""
|
owner: ""
|
||||||
- id: CTO-WORK-018
|
- id: CTO-WORK-018
|
||||||
title: Case Model Provider Admission Gate
|
title: Case Model Provider Admission Gate
|
||||||
status: validated
|
status: validated
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-PROVIDER-BUILD-ISSUES.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-PROVIDER-BUILD-ISSUES.md
|
||||||
owner: ""
|
owner: ""
|
||||||
- id: CTO-WORK-019
|
- id: CTO-WORK-019
|
||||||
title: Case Model Provider Admission PRD
|
title: Case Model Provider Admission PRD
|
||||||
status: validated
|
status: validated
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-MODEL-PROVIDER-ADMISSION-PRD.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-MODEL-PROVIDER-ADMISSION-PRD.md
|
||||||
owner: ""
|
owner: ""
|
||||||
- id: CTO-WORK-020
|
- id: CTO-WORK-020
|
||||||
title: Admit Case Model Provider For Real Stage 2
|
title: Admit Case Model Provider For Real Stage 2
|
||||||
status: blocked
|
status: blocked
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-MODEL-PROVIDER-ADMISSION-ISSUES.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-MODEL-PROVIDER-ADMISSION-ISSUES.md
|
||||||
owner: jp
|
owner: jp
|
||||||
- id: CTO-WORK-021
|
- id: CTO-WORK-021
|
||||||
title: Case-Compatible Local Provider Adapter Route PRD
|
title: Case-Compatible Local Provider Adapter Route PRD
|
||||||
status: validated
|
status: validated
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-LOCAL-PROVIDER-ROUTE-PRD.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-LOCAL-PROVIDER-ROUTE-PRD.md
|
||||||
owner: ""
|
owner: ""
|
||||||
- id: CTO-WORK-022
|
- id: CTO-WORK-022
|
||||||
title: Case-Compatible Local Provider Adapter Route
|
title: Case-Compatible Local Provider Adapter Route
|
||||||
status: blocked
|
status: blocked
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-LOCAL-PROVIDER-ROUTE-ISSUES.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-LOCAL-PROVIDER-ROUTE-ISSUES.md
|
||||||
owner: jp
|
owner: jp
|
||||||
- id: CTO-WORK-023
|
- id: CTO-WORK-023
|
||||||
title: Case Provider Decision Packet PRD
|
title: Case Provider Decision Packet PRD
|
||||||
status: validated
|
status: validated
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-PROVIDER-DECISION-PACKET-PRD.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-PROVIDER-DECISION-PACKET-PRD.md
|
||||||
owner: ""
|
owner: ""
|
||||||
- id: CTO-WORK-024
|
- id: CTO-WORK-024
|
||||||
title: Resolve Case Provider Decision
|
title: Resolve Case Provider Decision
|
||||||
status: blocked
|
status: blocked
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-PROVIDER-DECISION-PACKET-ISSUES.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-PROVIDER-DECISION-PACKET-ISSUES.md
|
||||||
owner: jp
|
owner: jp
|
||||||
- id: CTO-WORK-025
|
- id: CTO-WORK-025
|
||||||
title: Current Case Provider Decision Record
|
title: Current Case Provider Decision Record
|
||||||
status: validated
|
status: validated
|
||||||
source: sot/03-PROTOCOLS/CTO-CASE-PROVIDER-DECISION-RECORD.md
|
source: .sot/03-PROTOCOLS/CTO-CASE-PROVIDER-DECISION-RECORD.md
|
||||||
owner: ""
|
owner: ""
|
||||||
|
|||||||
58
tools/check_s91_cto_dotpath.py
Executable file
58
tools/check_s91_cto_dotpath.py
Executable file
@ -0,0 +1,58 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Check S91 CTO SOT dotpath migration state."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
ROOT = Path(__file__).resolve().parents[1]
|
||||||
|
REQUIRED_FILES = [
|
||||||
|
".sot/00-START/CTO-WORKSPACE-INTENT.md",
|
||||||
|
".sot/03-PROTOCOLS/CTO-CASE-BACKEND-BRIEF.md",
|
||||||
|
".sot/03-PROTOCOLS/CTO-CASE-PROVIDER-DECISION-RECORD.md",
|
||||||
|
]
|
||||||
|
SCAN_FILES = [
|
||||||
|
"AGENTS.md",
|
||||||
|
"README.md",
|
||||||
|
"WORKBOARD.yaml",
|
||||||
|
"tools/validate_cto_child.py",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def fail(message: str) -> None:
|
||||||
|
raise SystemExit(f"S91 cto dotpath check failed: {message}")
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
if not (ROOT / ".sot").is_dir():
|
||||||
|
fail("missing canonical .sot directory")
|
||||||
|
legacy = ROOT / "sot"
|
||||||
|
if not legacy.is_symlink():
|
||||||
|
fail("legacy sot path must be a temporary symlink")
|
||||||
|
if os.readlink(legacy) != ".sot":
|
||||||
|
fail("legacy sot symlink must target .sot")
|
||||||
|
|
||||||
|
for relative in REQUIRED_FILES:
|
||||||
|
if not (ROOT / relative).is_file():
|
||||||
|
fail(f"missing required canonical file: {relative}")
|
||||||
|
|
||||||
|
for relative in SCAN_FILES:
|
||||||
|
text = (ROOT / relative).read_text(encoding="utf-8")
|
||||||
|
if re.search(r"(?<!\.)sot/", text):
|
||||||
|
fail(f"legacy sot reference remains in {relative}")
|
||||||
|
if ".sot/" not in text:
|
||||||
|
fail(f"missing canonical .sot reference in {relative}")
|
||||||
|
|
||||||
|
for path in (ROOT / ".sot").rglob("*.md"):
|
||||||
|
text = path.read_text(encoding="utf-8")
|
||||||
|
if re.search(r"source:\s+sot/", text):
|
||||||
|
fail(f"legacy source frontmatter remains in {path.relative_to(ROOT)}")
|
||||||
|
|
||||||
|
print("S91 cto dotpath check passed")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
raise SystemExit(main())
|
||||||
@ -15,30 +15,30 @@ REQUIRED_FILES = [
|
|||||||
"README.md",
|
"README.md",
|
||||||
"WORKBOARD.yaml",
|
"WORKBOARD.yaml",
|
||||||
"CONTEXT.md",
|
"CONTEXT.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-CASE-CANDIDATE-BACKEND-PRD.md",
|
".sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-PRD.md",
|
||||||
"sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-ISSUES.md",
|
".sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-ISSUES.md",
|
||||||
"sot/03-PROTOCOLS/CTO-HARNESS-EVIDENCE-INTERFACE-CONTRACT.md",
|
".sot/03-PROTOCOLS/CTO-HARNESS-EVIDENCE-INTERFACE-CONTRACT.md",
|
||||||
"sot/03-PROTOCOLS/CTO-CASE-SOURCE-ADMISSION-RECORD.md",
|
".sot/03-PROTOCOLS/CTO-CASE-SOURCE-ADMISSION-RECORD.md",
|
||||||
"sot/03-PROTOCOLS/CTO-CASE-ADAPTER-CONTRACT.md",
|
".sot/03-PROTOCOLS/CTO-CASE-ADAPTER-CONTRACT.md",
|
||||||
"sot/03-PROTOCOLS/CTO-CASE-FAILURE-FIXTURE-MATRIX.md",
|
".sot/03-PROTOCOLS/CTO-CASE-FAILURE-FIXTURE-MATRIX.md",
|
||||||
"sot/03-PROTOCOLS/CTO-CASE-STAGED-PROOF-GATES.md",
|
".sot/03-PROTOCOLS/CTO-CASE-STAGED-PROOF-GATES.md",
|
||||||
"sot/03-PROTOCOLS/CTO-CASE-STAGE1-GATED-ENGINE-PRD.md",
|
".sot/03-PROTOCOLS/CTO-CASE-STAGE1-GATED-ENGINE-PRD.md",
|
||||||
"sot/03-PROTOCOLS/CTO-CASE-STAGE1-GATED-ENGINE-ISSUES.md",
|
".sot/03-PROTOCOLS/CTO-CASE-STAGE1-GATED-ENGINE-ISSUES.md",
|
||||||
"sot/03-PROTOCOLS/CTO-CASE-STAGE2-ARTIFICIAL-FIXTURE-PRD.md",
|
".sot/03-PROTOCOLS/CTO-CASE-STAGE2-ARTIFICIAL-FIXTURE-PRD.md",
|
||||||
"sot/03-PROTOCOLS/CTO-CASE-STAGE2-ARTIFICIAL-FIXTURE-ISSUES.md",
|
".sot/03-PROTOCOLS/CTO-CASE-STAGE2-ARTIFICIAL-FIXTURE-ISSUES.md",
|
||||||
"sot/03-PROTOCOLS/CTO-CASE-PROVIDER-ADMISSION-PRD.md",
|
".sot/03-PROTOCOLS/CTO-CASE-PROVIDER-ADMISSION-PRD.md",
|
||||||
"sot/03-PROTOCOLS/CTO-CASE-PROVIDER-ADMISSION-ISSUES.md",
|
".sot/03-PROTOCOLS/CTO-CASE-PROVIDER-ADMISSION-ISSUES.md",
|
||||||
"sot/03-PROTOCOLS/CTO-CASE-PROVIDER-BUILD-PRD.md",
|
".sot/03-PROTOCOLS/CTO-CASE-PROVIDER-BUILD-PRD.md",
|
||||||
"sot/03-PROTOCOLS/CTO-CASE-PROVIDER-BUILD-ISSUES.md",
|
".sot/03-PROTOCOLS/CTO-CASE-PROVIDER-BUILD-ISSUES.md",
|
||||||
"sot/03-PROTOCOLS/CTO-CASE-MODEL-PROVIDER-ADMISSION-PRD.md",
|
".sot/03-PROTOCOLS/CTO-CASE-MODEL-PROVIDER-ADMISSION-PRD.md",
|
||||||
"sot/03-PROTOCOLS/CTO-CASE-MODEL-PROVIDER-ADMISSION-ISSUES.md",
|
".sot/03-PROTOCOLS/CTO-CASE-MODEL-PROVIDER-ADMISSION-ISSUES.md",
|
||||||
"sot/03-PROTOCOLS/CTO-CASE-LOCAL-PROVIDER-ROUTE-PRD.md",
|
".sot/03-PROTOCOLS/CTO-CASE-LOCAL-PROVIDER-ROUTE-PRD.md",
|
||||||
"sot/03-PROTOCOLS/CTO-CASE-LOCAL-PROVIDER-ROUTE-ISSUES.md",
|
".sot/03-PROTOCOLS/CTO-CASE-LOCAL-PROVIDER-ROUTE-ISSUES.md",
|
||||||
"sot/03-PROTOCOLS/CTO-CASE-PROVIDER-DECISION-PACKET-PRD.md",
|
".sot/03-PROTOCOLS/CTO-CASE-PROVIDER-DECISION-PACKET-PRD.md",
|
||||||
"sot/03-PROTOCOLS/CTO-CASE-PROVIDER-DECISION-PACKET-ISSUES.md",
|
".sot/03-PROTOCOLS/CTO-CASE-PROVIDER-DECISION-PACKET-ISSUES.md",
|
||||||
"sot/03-PROTOCOLS/CTO-CASE-PROVIDER-DECISION-RECORD.md",
|
".sot/03-PROTOCOLS/CTO-CASE-PROVIDER-DECISION-RECORD.md",
|
||||||
]
|
]
|
||||||
|
|
||||||
REQUIRED_BRIEF_PHRASES = [
|
REQUIRED_BRIEF_PHRASES = [
|
||||||
@ -621,7 +621,7 @@ def main() -> int:
|
|||||||
if not path.is_file():
|
if not path.is_file():
|
||||||
errors.append(f"missing_required_file:{rel}")
|
errors.append(f"missing_required_file:{rel}")
|
||||||
|
|
||||||
brief = ROOT / "sot/03-PROTOCOLS/CTO-CASE-BACKEND-BRIEF.md"
|
brief = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-BACKEND-BRIEF.md"
|
||||||
if brief.is_file():
|
if brief.is_file():
|
||||||
text = brief.read_text(encoding="utf-8")
|
text = brief.read_text(encoding="utf-8")
|
||||||
for phrase in REQUIRED_BRIEF_PHRASES:
|
for phrase in REQUIRED_BRIEF_PHRASES:
|
||||||
@ -631,7 +631,7 @@ def main() -> int:
|
|||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
errors.append("brief_missing_not_promoted_frontmatter")
|
errors.append("brief_missing_not_promoted_frontmatter")
|
||||||
|
|
||||||
prd = ROOT / "sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-PRD.md"
|
prd = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-PRD.md"
|
||||||
if prd.is_file():
|
if prd.is_file():
|
||||||
text = prd.read_text(encoding="utf-8")
|
text = prd.read_text(encoding="utf-8")
|
||||||
for phrase in REQUIRED_PRD_PHRASES:
|
for phrase in REQUIRED_PRD_PHRASES:
|
||||||
@ -645,7 +645,7 @@ def main() -> int:
|
|||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
errors.append("prd_missing_not_promoted_frontmatter")
|
errors.append("prd_missing_not_promoted_frontmatter")
|
||||||
|
|
||||||
issues = ROOT / "sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-ISSUES.md"
|
issues = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-ISSUES.md"
|
||||||
if issues.is_file():
|
if issues.is_file():
|
||||||
text = issues.read_text(encoding="utf-8")
|
text = issues.read_text(encoding="utf-8")
|
||||||
if "Local planning SOT only. Not a Core Protocol. Not active Core authority." not in text:
|
if "Local planning SOT only. Not a Core Protocol. Not active Core authority." not in text:
|
||||||
@ -657,7 +657,7 @@ def main() -> int:
|
|||||||
if issue_id not in text:
|
if issue_id not in text:
|
||||||
errors.append(f"missing_issue_id:{issue_id}")
|
errors.append(f"missing_issue_id:{issue_id}")
|
||||||
|
|
||||||
evidence_interface = ROOT / "sot/03-PROTOCOLS/CTO-HARNESS-EVIDENCE-INTERFACE-CONTRACT.md"
|
evidence_interface = ROOT / ".sot/03-PROTOCOLS/CTO-HARNESS-EVIDENCE-INTERFACE-CONTRACT.md"
|
||||||
if evidence_interface.is_file():
|
if evidence_interface.is_file():
|
||||||
text = evidence_interface.read_text(encoding="utf-8")
|
text = evidence_interface.read_text(encoding="utf-8")
|
||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
@ -667,7 +667,7 @@ def main() -> int:
|
|||||||
if phrase not in text:
|
if phrase not in text:
|
||||||
errors.append(f"missing_evidence_interface_phrase:{phrase}")
|
errors.append(f"missing_evidence_interface_phrase:{phrase}")
|
||||||
|
|
||||||
source_admission = ROOT / "sot/03-PROTOCOLS/CTO-CASE-SOURCE-ADMISSION-RECORD.md"
|
source_admission = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-SOURCE-ADMISSION-RECORD.md"
|
||||||
if source_admission.is_file():
|
if source_admission.is_file():
|
||||||
text = source_admission.read_text(encoding="utf-8")
|
text = source_admission.read_text(encoding="utf-8")
|
||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
@ -677,7 +677,7 @@ def main() -> int:
|
|||||||
if phrase not in text:
|
if phrase not in text:
|
||||||
errors.append(f"missing_source_admission_phrase:{phrase}")
|
errors.append(f"missing_source_admission_phrase:{phrase}")
|
||||||
|
|
||||||
adapter_contract = ROOT / "sot/03-PROTOCOLS/CTO-CASE-ADAPTER-CONTRACT.md"
|
adapter_contract = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-ADAPTER-CONTRACT.md"
|
||||||
if adapter_contract.is_file():
|
if adapter_contract.is_file():
|
||||||
text = adapter_contract.read_text(encoding="utf-8")
|
text = adapter_contract.read_text(encoding="utf-8")
|
||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
@ -687,7 +687,7 @@ def main() -> int:
|
|||||||
if phrase not in text:
|
if phrase not in text:
|
||||||
errors.append(f"missing_adapter_contract_phrase:{phrase}")
|
errors.append(f"missing_adapter_contract_phrase:{phrase}")
|
||||||
|
|
||||||
failure_matrix = ROOT / "sot/03-PROTOCOLS/CTO-CASE-FAILURE-FIXTURE-MATRIX.md"
|
failure_matrix = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-FAILURE-FIXTURE-MATRIX.md"
|
||||||
if failure_matrix.is_file():
|
if failure_matrix.is_file():
|
||||||
text = failure_matrix.read_text(encoding="utf-8")
|
text = failure_matrix.read_text(encoding="utf-8")
|
||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
@ -697,7 +697,7 @@ def main() -> int:
|
|||||||
if phrase not in text:
|
if phrase not in text:
|
||||||
errors.append(f"missing_failure_matrix_phrase:{phrase}")
|
errors.append(f"missing_failure_matrix_phrase:{phrase}")
|
||||||
|
|
||||||
staged_proof = ROOT / "sot/03-PROTOCOLS/CTO-CASE-STAGED-PROOF-GATES.md"
|
staged_proof = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-STAGED-PROOF-GATES.md"
|
||||||
if staged_proof.is_file():
|
if staged_proof.is_file():
|
||||||
text = staged_proof.read_text(encoding="utf-8")
|
text = staged_proof.read_text(encoding="utf-8")
|
||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
@ -707,7 +707,7 @@ def main() -> int:
|
|||||||
if phrase not in text:
|
if phrase not in text:
|
||||||
errors.append(f"missing_staged_proof_phrase:{phrase}")
|
errors.append(f"missing_staged_proof_phrase:{phrase}")
|
||||||
|
|
||||||
stage1_prd = ROOT / "sot/03-PROTOCOLS/CTO-CASE-STAGE1-GATED-ENGINE-PRD.md"
|
stage1_prd = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-STAGE1-GATED-ENGINE-PRD.md"
|
||||||
if stage1_prd.is_file():
|
if stage1_prd.is_file():
|
||||||
text = stage1_prd.read_text(encoding="utf-8")
|
text = stage1_prd.read_text(encoding="utf-8")
|
||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
@ -717,7 +717,7 @@ def main() -> int:
|
|||||||
if phrase not in text:
|
if phrase not in text:
|
||||||
errors.append(f"missing_stage1_prd_phrase:{phrase}")
|
errors.append(f"missing_stage1_prd_phrase:{phrase}")
|
||||||
|
|
||||||
stage1_issues = ROOT / "sot/03-PROTOCOLS/CTO-CASE-STAGE1-GATED-ENGINE-ISSUES.md"
|
stage1_issues = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-STAGE1-GATED-ENGINE-ISSUES.md"
|
||||||
if stage1_issues.is_file():
|
if stage1_issues.is_file():
|
||||||
text = stage1_issues.read_text(encoding="utf-8")
|
text = stage1_issues.read_text(encoding="utf-8")
|
||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
@ -729,7 +729,7 @@ def main() -> int:
|
|||||||
if issue_id not in text:
|
if issue_id not in text:
|
||||||
errors.append(f"missing_stage1_issue_id:{issue_id}")
|
errors.append(f"missing_stage1_issue_id:{issue_id}")
|
||||||
|
|
||||||
stage2_prd = ROOT / "sot/03-PROTOCOLS/CTO-CASE-STAGE2-ARTIFICIAL-FIXTURE-PRD.md"
|
stage2_prd = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-STAGE2-ARTIFICIAL-FIXTURE-PRD.md"
|
||||||
if stage2_prd.is_file():
|
if stage2_prd.is_file():
|
||||||
text = stage2_prd.read_text(encoding="utf-8")
|
text = stage2_prd.read_text(encoding="utf-8")
|
||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
@ -739,7 +739,7 @@ def main() -> int:
|
|||||||
if phrase not in text:
|
if phrase not in text:
|
||||||
errors.append(f"missing_stage2_prd_phrase:{phrase}")
|
errors.append(f"missing_stage2_prd_phrase:{phrase}")
|
||||||
|
|
||||||
stage2_issues = ROOT / "sot/03-PROTOCOLS/CTO-CASE-STAGE2-ARTIFICIAL-FIXTURE-ISSUES.md"
|
stage2_issues = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-STAGE2-ARTIFICIAL-FIXTURE-ISSUES.md"
|
||||||
if stage2_issues.is_file():
|
if stage2_issues.is_file():
|
||||||
text = stage2_issues.read_text(encoding="utf-8")
|
text = stage2_issues.read_text(encoding="utf-8")
|
||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
@ -751,7 +751,7 @@ def main() -> int:
|
|||||||
if issue_id not in text:
|
if issue_id not in text:
|
||||||
errors.append(f"missing_stage2_issue_id:{issue_id}")
|
errors.append(f"missing_stage2_issue_id:{issue_id}")
|
||||||
|
|
||||||
provider_admission_prd = ROOT / "sot/03-PROTOCOLS/CTO-CASE-PROVIDER-ADMISSION-PRD.md"
|
provider_admission_prd = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-PROVIDER-ADMISSION-PRD.md"
|
||||||
if provider_admission_prd.is_file():
|
if provider_admission_prd.is_file():
|
||||||
text = provider_admission_prd.read_text(encoding="utf-8")
|
text = provider_admission_prd.read_text(encoding="utf-8")
|
||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
@ -761,7 +761,7 @@ def main() -> int:
|
|||||||
if phrase not in text:
|
if phrase not in text:
|
||||||
errors.append(f"missing_provider_admission_prd_phrase:{phrase}")
|
errors.append(f"missing_provider_admission_prd_phrase:{phrase}")
|
||||||
|
|
||||||
provider_admission_issues = ROOT / "sot/03-PROTOCOLS/CTO-CASE-PROVIDER-ADMISSION-ISSUES.md"
|
provider_admission_issues = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-PROVIDER-ADMISSION-ISSUES.md"
|
||||||
if provider_admission_issues.is_file():
|
if provider_admission_issues.is_file():
|
||||||
text = provider_admission_issues.read_text(encoding="utf-8")
|
text = provider_admission_issues.read_text(encoding="utf-8")
|
||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
@ -773,7 +773,7 @@ def main() -> int:
|
|||||||
if issue_id not in text:
|
if issue_id not in text:
|
||||||
errors.append(f"missing_provider_admission_issue_id:{issue_id}")
|
errors.append(f"missing_provider_admission_issue_id:{issue_id}")
|
||||||
|
|
||||||
provider_build_prd = ROOT / "sot/03-PROTOCOLS/CTO-CASE-PROVIDER-BUILD-PRD.md"
|
provider_build_prd = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-PROVIDER-BUILD-PRD.md"
|
||||||
if provider_build_prd.is_file():
|
if provider_build_prd.is_file():
|
||||||
text = provider_build_prd.read_text(encoding="utf-8")
|
text = provider_build_prd.read_text(encoding="utf-8")
|
||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
@ -783,7 +783,7 @@ def main() -> int:
|
|||||||
if phrase not in text:
|
if phrase not in text:
|
||||||
errors.append(f"missing_provider_build_prd_phrase:{phrase}")
|
errors.append(f"missing_provider_build_prd_phrase:{phrase}")
|
||||||
|
|
||||||
provider_build_issues = ROOT / "sot/03-PROTOCOLS/CTO-CASE-PROVIDER-BUILD-ISSUES.md"
|
provider_build_issues = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-PROVIDER-BUILD-ISSUES.md"
|
||||||
if provider_build_issues.is_file():
|
if provider_build_issues.is_file():
|
||||||
text = provider_build_issues.read_text(encoding="utf-8")
|
text = provider_build_issues.read_text(encoding="utf-8")
|
||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
@ -795,7 +795,7 @@ def main() -> int:
|
|||||||
if issue_id not in text:
|
if issue_id not in text:
|
||||||
errors.append(f"missing_provider_build_issue_id:{issue_id}")
|
errors.append(f"missing_provider_build_issue_id:{issue_id}")
|
||||||
|
|
||||||
model_provider_admission_prd = ROOT / "sot/03-PROTOCOLS/CTO-CASE-MODEL-PROVIDER-ADMISSION-PRD.md"
|
model_provider_admission_prd = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-MODEL-PROVIDER-ADMISSION-PRD.md"
|
||||||
if model_provider_admission_prd.is_file():
|
if model_provider_admission_prd.is_file():
|
||||||
text = model_provider_admission_prd.read_text(encoding="utf-8")
|
text = model_provider_admission_prd.read_text(encoding="utf-8")
|
||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
@ -805,7 +805,7 @@ def main() -> int:
|
|||||||
if phrase not in text:
|
if phrase not in text:
|
||||||
errors.append(f"missing_model_provider_admission_prd_phrase:{phrase}")
|
errors.append(f"missing_model_provider_admission_prd_phrase:{phrase}")
|
||||||
|
|
||||||
model_provider_admission_issues = ROOT / "sot/03-PROTOCOLS/CTO-CASE-MODEL-PROVIDER-ADMISSION-ISSUES.md"
|
model_provider_admission_issues = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-MODEL-PROVIDER-ADMISSION-ISSUES.md"
|
||||||
if model_provider_admission_issues.is_file():
|
if model_provider_admission_issues.is_file():
|
||||||
text = model_provider_admission_issues.read_text(encoding="utf-8")
|
text = model_provider_admission_issues.read_text(encoding="utf-8")
|
||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
@ -821,7 +821,7 @@ def main() -> int:
|
|||||||
if phrase not in text:
|
if phrase not in text:
|
||||||
errors.append(f"missing_model_provider_admission_issue_phrase:{phrase}")
|
errors.append(f"missing_model_provider_admission_issue_phrase:{phrase}")
|
||||||
|
|
||||||
local_provider_route_prd = ROOT / "sot/03-PROTOCOLS/CTO-CASE-LOCAL-PROVIDER-ROUTE-PRD.md"
|
local_provider_route_prd = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-LOCAL-PROVIDER-ROUTE-PRD.md"
|
||||||
if local_provider_route_prd.is_file():
|
if local_provider_route_prd.is_file():
|
||||||
text = local_provider_route_prd.read_text(encoding="utf-8")
|
text = local_provider_route_prd.read_text(encoding="utf-8")
|
||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
@ -831,7 +831,7 @@ def main() -> int:
|
|||||||
if phrase not in text:
|
if phrase not in text:
|
||||||
errors.append(f"missing_local_provider_route_prd_phrase:{phrase}")
|
errors.append(f"missing_local_provider_route_prd_phrase:{phrase}")
|
||||||
|
|
||||||
local_provider_route_issues = ROOT / "sot/03-PROTOCOLS/CTO-CASE-LOCAL-PROVIDER-ROUTE-ISSUES.md"
|
local_provider_route_issues = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-LOCAL-PROVIDER-ROUTE-ISSUES.md"
|
||||||
if local_provider_route_issues.is_file():
|
if local_provider_route_issues.is_file():
|
||||||
text = local_provider_route_issues.read_text(encoding="utf-8")
|
text = local_provider_route_issues.read_text(encoding="utf-8")
|
||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
@ -847,7 +847,7 @@ def main() -> int:
|
|||||||
if phrase not in text:
|
if phrase not in text:
|
||||||
errors.append(f"missing_local_provider_route_issue_phrase:{phrase}")
|
errors.append(f"missing_local_provider_route_issue_phrase:{phrase}")
|
||||||
|
|
||||||
provider_decision_packet_prd = ROOT / "sot/03-PROTOCOLS/CTO-CASE-PROVIDER-DECISION-PACKET-PRD.md"
|
provider_decision_packet_prd = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-PROVIDER-DECISION-PACKET-PRD.md"
|
||||||
if provider_decision_packet_prd.is_file():
|
if provider_decision_packet_prd.is_file():
|
||||||
text = provider_decision_packet_prd.read_text(encoding="utf-8")
|
text = provider_decision_packet_prd.read_text(encoding="utf-8")
|
||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
@ -857,7 +857,7 @@ def main() -> int:
|
|||||||
if phrase not in text:
|
if phrase not in text:
|
||||||
errors.append(f"missing_provider_decision_packet_prd_phrase:{phrase}")
|
errors.append(f"missing_provider_decision_packet_prd_phrase:{phrase}")
|
||||||
|
|
||||||
provider_decision_packet_issues = ROOT / "sot/03-PROTOCOLS/CTO-CASE-PROVIDER-DECISION-PACKET-ISSUES.md"
|
provider_decision_packet_issues = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-PROVIDER-DECISION-PACKET-ISSUES.md"
|
||||||
if provider_decision_packet_issues.is_file():
|
if provider_decision_packet_issues.is_file():
|
||||||
text = provider_decision_packet_issues.read_text(encoding="utf-8")
|
text = provider_decision_packet_issues.read_text(encoding="utf-8")
|
||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
@ -873,7 +873,7 @@ def main() -> int:
|
|||||||
if phrase not in text:
|
if phrase not in text:
|
||||||
errors.append(f"missing_provider_decision_packet_issue_phrase:{phrase}")
|
errors.append(f"missing_provider_decision_packet_issue_phrase:{phrase}")
|
||||||
|
|
||||||
provider_decision_record = ROOT / "sot/03-PROTOCOLS/CTO-CASE-PROVIDER-DECISION-RECORD.md"
|
provider_decision_record = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-PROVIDER-DECISION-RECORD.md"
|
||||||
if provider_decision_record.is_file():
|
if provider_decision_record.is_file():
|
||||||
text = provider_decision_record.read_text(encoding="utf-8")
|
text = provider_decision_record.read_text(encoding="utf-8")
|
||||||
if "core_promotion_status: not-promoted" not in text:
|
if "core_promotion_status: not-promoted" not in text:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user