Add Case local provider adapter route
This commit is contained in:
@@ -34,6 +34,8 @@ REQUIRED_FILES = [
|
||||
"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-ISSUES.md",
|
||||
"sot/03-PROTOCOLS/CTO-CASE-LOCAL-PROVIDER-ROUTE-PRD.md",
|
||||
"sot/03-PROTOCOLS/CTO-CASE-LOCAL-PROVIDER-ROUTE-ISSUES.md",
|
||||
]
|
||||
|
||||
REQUIRED_BRIEF_PHRASES = [
|
||||
@@ -451,6 +453,59 @@ REQUIRED_MODEL_PROVIDER_ADMISSION_ISSUE_PHRASES = [
|
||||
"`effect`: `CTO-WORK-020 remains blocked until admitted provider/model and real Stage 2 pass report exist`.",
|
||||
]
|
||||
|
||||
REQUIRED_LOCAL_PROVIDER_ROUTE_PRD_PHRASES = [
|
||||
"Local planning SOT only. Not a Core Protocol. Not active Core authority.",
|
||||
"`CTO-WORK-020` remains blocked until a provider policy decision exists.",
|
||||
"`decision_status=local_provider_required`",
|
||||
"local_case_compatible",
|
||||
"CTO-WORK-020` admission JSON gate as authority",
|
||||
"CTO_HARNESS_CASE_MODEL_ADMISSION_FILE",
|
||||
"CTO_HARNESS_CASE_MODEL_PROVIDER",
|
||||
"CTO_HARNESS_CASE_MODEL",
|
||||
"no external provider fallback",
|
||||
"missing local adapter config to block before `case_process_started`",
|
||||
"admission JSON mismatch to block before `case_process_started`",
|
||||
"`decision_status != local_provider_required` to block route execution",
|
||||
"No Target Repository path exposure.",
|
||||
"Do not approve a local provider.",
|
||||
"Do not implement a provider adapter.",
|
||||
"Do not admit a provider/model.",
|
||||
"Do not approve Anthropic or any external provider.",
|
||||
"Do not run real Case Stage 2.",
|
||||
"case_model_provider",
|
||||
"case_model",
|
||||
"case_model_admission_status",
|
||||
"anthropic",
|
||||
"claude-sonnet-4-6",
|
||||
"same-run fake baseline comparison required",
|
||||
"Harness Evidence Interface",
|
||||
]
|
||||
|
||||
REQUIRED_LOCAL_PROVIDER_ROUTE_ISSUE_IDS = [
|
||||
"CTO-WORK-021",
|
||||
"CTO-WORK-022",
|
||||
]
|
||||
|
||||
REQUIRED_LOCAL_PROVIDER_ROUTE_ISSUE_PHRASES = [
|
||||
"Status: validated.",
|
||||
"Status: blocked.",
|
||||
"`decision_status=local_provider_required`",
|
||||
"local_case_compatible",
|
||||
"Uses `CTO-WORK-020` admission JSON gate as authority instead of redefining admission.",
|
||||
"CTO_HARNESS_CASE_MODEL_ADMISSION_FILE",
|
||||
"no external fallback to `anthropic` or `claude-sonnet-4-6`",
|
||||
"negative gates for missing local adapter config, admission JSON mismatch, and `decision_status != local_provider_required`",
|
||||
"Completion of this route does not admit a provider/model and does not change `CTO-WORK-020` status.",
|
||||
"Keeps `CTO-WORK-020` blocked until admitted provider/model and real Case Stage 2 pass evidence exist.",
|
||||
"Does not approve or implement any provider.",
|
||||
"Provider/model admission remains owned by `CTO-WORK-020`.",
|
||||
"Missing local adapter config blocks before `case_process_started`.",
|
||||
"Admission JSON mismatch blocks before `case_process_started`.",
|
||||
"External provider fallback blocks before `case_process_started`.",
|
||||
"Harness report proves `case_model_provider`, `case_model`, and `case_model_admission_status`.",
|
||||
"Real Case Stage 2 produces a pass report only through the Harness Evidence Interface.",
|
||||
]
|
||||
|
||||
|
||||
def workboard_status(text: str, issue_id: str) -> str | None:
|
||||
pattern = rf"- id: {re.escape(issue_id)}\n(?: .+\n)*? status: ([^\n]+)"
|
||||
@@ -668,6 +723,32 @@ def main() -> int:
|
||||
if phrase not in text:
|
||||
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"
|
||||
if local_provider_route_prd.is_file():
|
||||
text = local_provider_route_prd.read_text(encoding="utf-8")
|
||||
if "core_promotion_status: not-promoted" not in text:
|
||||
errors.append("local_provider_route_prd_missing_not_promoted_frontmatter")
|
||||
for phrase in REQUIRED_LOCAL_PROVIDER_ROUTE_PRD_PHRASES:
|
||||
checked.append(f"local_provider_route_prd_phrase:{phrase}")
|
||||
if phrase not in text:
|
||||
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"
|
||||
if local_provider_route_issues.is_file():
|
||||
text = local_provider_route_issues.read_text(encoding="utf-8")
|
||||
if "core_promotion_status: not-promoted" not in text:
|
||||
errors.append("local_provider_route_issues_missing_not_promoted_frontmatter")
|
||||
if "Local planning SOT only. Not a Core Protocol. Not active Core authority." not in text:
|
||||
errors.append("local_provider_route_issues_missing_local_planning_notice")
|
||||
for issue_id in REQUIRED_LOCAL_PROVIDER_ROUTE_ISSUE_IDS:
|
||||
checked.append(f"local_provider_route_issue_id:{issue_id}")
|
||||
if issue_id not in text:
|
||||
errors.append(f"missing_local_provider_route_issue_id:{issue_id}")
|
||||
for phrase in REQUIRED_LOCAL_PROVIDER_ROUTE_ISSUE_PHRASES:
|
||||
checked.append(f"local_provider_route_issue_phrase:{phrase}")
|
||||
if phrase not in text:
|
||||
errors.append(f"missing_local_provider_route_issue_phrase:{phrase}")
|
||||
|
||||
board = ROOT / "WORKBOARD.yaml"
|
||||
if board.is_file():
|
||||
text = board.read_text(encoding="utf-8")
|
||||
@@ -695,6 +776,10 @@ def main() -> int:
|
||||
checked.append(f"workboard_id:{issue_id}")
|
||||
if issue_id not in text:
|
||||
errors.append(f"missing_workboard_id:{issue_id}")
|
||||
for issue_id in REQUIRED_LOCAL_PROVIDER_ROUTE_ISSUE_IDS:
|
||||
checked.append(f"workboard_id:{issue_id}")
|
||||
if issue_id not in text:
|
||||
errors.append(f"missing_workboard_id:{issue_id}")
|
||||
expected_statuses = {
|
||||
"CTO-WORK-002": "validated",
|
||||
"CTO-WORK-003": "validated",
|
||||
@@ -715,6 +800,8 @@ def main() -> int:
|
||||
"CTO-WORK-018": "validated",
|
||||
"CTO-WORK-019": "validated",
|
||||
"CTO-WORK-020": "blocked",
|
||||
"CTO-WORK-021": "validated",
|
||||
"CTO-WORK-022": "blocked",
|
||||
}
|
||||
for issue_id, expected in expected_statuses.items():
|
||||
checked.append(f"workboard_status:{issue_id}:{expected}")
|
||||
@@ -753,6 +840,10 @@ def main() -> int:
|
||||
errors.append("workboard_missing_model_provider_admission_prd_source")
|
||||
if "CTO-CASE-MODEL-PROVIDER-ADMISSION-ISSUES.md" not in text:
|
||||
errors.append("workboard_missing_model_provider_admission_issues_source")
|
||||
if "CTO-CASE-LOCAL-PROVIDER-ROUTE-PRD.md" not in text:
|
||||
errors.append("workboard_missing_local_provider_route_prd_source")
|
||||
if "CTO-CASE-LOCAL-PROVIDER-ROUTE-ISSUES.md" not in text:
|
||||
errors.append("workboard_missing_local_provider_route_issues_source")
|
||||
|
||||
payload = {
|
||||
"ok": not errors,
|
||||
|
||||
Reference in New Issue
Block a user