Add Case model provider admission route
This commit is contained in:
@@ -32,6 +32,8 @@ REQUIRED_FILES = [
|
||||
"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-ISSUES.md",
|
||||
"sot/03-PROTOCOLS/CTO-CASE-MODEL-PROVIDER-ADMISSION-PRD.md",
|
||||
"sot/03-PROTOCOLS/CTO-CASE-MODEL-PROVIDER-ADMISSION-ISSUES.md",
|
||||
]
|
||||
|
||||
REQUIRED_BRIEF_PHRASES = [
|
||||
@@ -351,6 +353,42 @@ REQUIRED_PROVIDER_BUILD_ISSUE_IDS = [
|
||||
"CTO-WORK-018",
|
||||
]
|
||||
|
||||
REQUIRED_MODEL_PROVIDER_ADMISSION_PRD_PHRASES = [
|
||||
"Local planning SOT only. Not a Core Protocol. Not active Core authority.",
|
||||
"CTO-WORK-018",
|
||||
"anthropic",
|
||||
"claude-sonnet-4-6",
|
||||
"unadmitted external model path",
|
||||
"explicit admitted provider/model pair",
|
||||
"credential source class",
|
||||
"allowed network class",
|
||||
"admission timestamp",
|
||||
"CTO_HARNESS_CASE_MODEL_PROVIDER",
|
||||
"CTO_HARNESS_CASE_MODEL",
|
||||
"backend/provider-model-not-admitted.txt",
|
||||
"unadmitted provider/model blocks before `case_process_started`",
|
||||
"models.default",
|
||||
"CASE_DATA_DIR/config.json",
|
||||
"ca run --task <task-file> --mode unattended",
|
||||
"case_model_provider",
|
||||
"case_model",
|
||||
"case_model_admission_status",
|
||||
"case_process_started",
|
||||
"allowed_writes_passed",
|
||||
"changed_files",
|
||||
"blockers",
|
||||
"Fake remains the default validation lane.",
|
||||
"Same-run fake baseline comparison remains required.",
|
||||
"No secrets appear in task file, argv, report, trace, backend logs, SOT, or commits.",
|
||||
"4500082 Gate Case execution on admitted model",
|
||||
"model_provider_gate_blocks",
|
||||
]
|
||||
|
||||
REQUIRED_MODEL_PROVIDER_ADMISSION_ISSUE_IDS = [
|
||||
"CTO-WORK-019",
|
||||
"CTO-WORK-020",
|
||||
]
|
||||
|
||||
|
||||
def workboard_status(text: str, issue_id: str) -> str | None:
|
||||
pattern = rf"- id: {re.escape(issue_id)}\n(?: .+\n)*? status: ([^\n]+)"
|
||||
@@ -542,6 +580,28 @@ def main() -> int:
|
||||
if issue_id not in text:
|
||||
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"
|
||||
if model_provider_admission_prd.is_file():
|
||||
text = model_provider_admission_prd.read_text(encoding="utf-8")
|
||||
if "core_promotion_status: not-promoted" not in text:
|
||||
errors.append("model_provider_admission_prd_missing_not_promoted_frontmatter")
|
||||
for phrase in REQUIRED_MODEL_PROVIDER_ADMISSION_PRD_PHRASES:
|
||||
checked.append(f"model_provider_admission_prd_phrase:{phrase}")
|
||||
if phrase not in text:
|
||||
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"
|
||||
if model_provider_admission_issues.is_file():
|
||||
text = model_provider_admission_issues.read_text(encoding="utf-8")
|
||||
if "core_promotion_status: not-promoted" not in text:
|
||||
errors.append("model_provider_admission_issues_missing_not_promoted_frontmatter")
|
||||
if "Local planning SOT only. Not a Core Protocol. Not active Core authority." not in text:
|
||||
errors.append("model_provider_admission_issues_missing_local_planning_notice")
|
||||
for issue_id in REQUIRED_MODEL_PROVIDER_ADMISSION_ISSUE_IDS:
|
||||
checked.append(f"model_provider_admission_issue_id:{issue_id}")
|
||||
if issue_id not in text:
|
||||
errors.append(f"missing_model_provider_admission_issue_id:{issue_id}")
|
||||
|
||||
board = ROOT / "WORKBOARD.yaml"
|
||||
if board.is_file():
|
||||
text = board.read_text(encoding="utf-8")
|
||||
@@ -565,6 +625,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_MODEL_PROVIDER_ADMISSION_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",
|
||||
@@ -583,6 +647,8 @@ def main() -> int:
|
||||
"CTO-WORK-016": "blocked",
|
||||
"CTO-WORK-017": "validated",
|
||||
"CTO-WORK-018": "validated",
|
||||
"CTO-WORK-019": "validated",
|
||||
"CTO-WORK-020": "blocked",
|
||||
}
|
||||
for issue_id, expected in expected_statuses.items():
|
||||
checked.append(f"workboard_status:{issue_id}:{expected}")
|
||||
@@ -617,6 +683,10 @@ def main() -> int:
|
||||
errors.append("workboard_missing_provider_build_prd_source")
|
||||
if "CTO-CASE-PROVIDER-BUILD-ISSUES.md" not in text:
|
||||
errors.append("workboard_missing_provider_build_issues_source")
|
||||
if "CTO-CASE-MODEL-PROVIDER-ADMISSION-PRD.md" not in text:
|
||||
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")
|
||||
|
||||
payload = {
|
||||
"ok": not errors,
|
||||
|
||||
Reference in New Issue
Block a user