Protect Case model admission evidence

This commit is contained in:
Svrnty 2026-05-31 19:57:04 -04:00
parent 4d9ba492b0
commit 7fe25ece93
3 changed files with 28 additions and 0 deletions

View File

@ -57,6 +57,7 @@ Blocked by:
## Hermes Implementation Evidence - 2026-05-31
- Hermes commit: `f39d8ab Require admitted Case model pair`.
- `f39d8ab` proves admission gating implementation only; it is not a real Case Stage 2 pass.
- The Hermes adapter now requires `CTO_HARNESS_CASE_MODEL_ADMISSION_FILE`.
- Env provider/model is only the requested pair; the admission JSON is the authority.
- Missing admission blocks before `case_process_started`.

View File

@ -91,6 +91,7 @@ Real Case Stage 2 remains blocked until a named provider/model is admitted, then
## Hermes Implementation Evidence - 2026-05-31
- Hermes commit: `f39d8ab Require admitted Case model pair`.
- `f39d8ab` proves admission gating implementation only; it is not a real Case Stage 2 pass.
- Admission file variable: `CTO_HARNESS_CASE_MODEL_ADMISSION_FILE`.
- Env provider/model is now a requested pair, not admission authority.
- The admission JSON is the authority for real Case Stage 2 model admission.

View File

@ -403,6 +403,28 @@ REQUIRED_MODEL_PROVIDER_ADMISSION_ISSUE_IDS = [
"CTO-WORK-020",
]
REQUIRED_MODEL_PROVIDER_ADMISSION_ISSUE_PHRASES = [
"f39d8ab Require admitted Case model pair",
"`f39d8ab` proves admission gating implementation only; it is not a real Case Stage 2 pass.",
"CTO_HARNESS_CASE_MODEL_ADMISSION_FILE",
"admission JSON is the authority",
"Missing admission blocks before `case_process_started`.",
"Mismatched admission blocks before `case_process_started`.",
"case_model_provider",
"case_model",
"case_model_admission_status",
"admitted",
"missing_admission",
"mismatch",
"invalid_admission",
"not_admitted",
"report.md",
"Case stdout/stderr",
"20260531T235421Z-r1-string-slugify-1875638",
"20260531T235448Z-r1-string-slugify-1876884",
"`CTO-WORK-020` remains blocked until a provider/model is explicitly approved and real Case Stage 2 produces a pass report.",
]
def workboard_status(text: str, issue_id: str) -> str | None:
pattern = rf"- id: {re.escape(issue_id)}\n(?: .+\n)*? status: ([^\n]+)"
@ -615,6 +637,10 @@ def main() -> int:
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}")
for phrase in REQUIRED_MODEL_PROVIDER_ADMISSION_ISSUE_PHRASES:
checked.append(f"model_provider_admission_issue_phrase:{phrase}")
if phrase not in text:
errors.append(f"missing_model_provider_admission_issue_phrase:{phrase}")
board = ROOT / "WORKBOARD.yaml"
if board.is_file():