Fail closed on invalid Glas profiles
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Build and Publish Container Image / build-and-push (push) Successful in 22s

Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a028de-e2c8-7732-8521-46a7fc5db82f
This commit is contained in:
tegwick 2026-08-22 23:02:41 +02:00
parent 561538c95e
commit b933cf52c8
12 changed files with 455 additions and 9 deletions

View file

@ -154,7 +154,7 @@ silent fallback is exactly the failure this workplan removes.
```task
id: ACTIVITY-WP-0032-T03
status: todo
status: done
priority: medium
state_hub_task_id: "50225bac-1798-5cf5-91ad-d4c662de7fc7"
```
@ -177,6 +177,23 @@ Glas refuses before sandbox creation. If emit-time remote validation becomes
necessary, raise it as a capability request against glas-harness rather than
solving it locally.
Done 2026-08-22. Definition parsing now validates every declared rule or
instruction profile structurally and normalizes its version-pinned ref before
DB sync. With `ACTIVITY_CORE_REQUIRE_HARNESS_PROFILE=true`, sync refuses
task-emitting declarations that omit a profile; deterministic report-only
instructions remain exempt. Rule and instruction expansion carry the declared
profile, legacy hint, and allowlisted attribution refs into the queued request.
Emission now preflights the complete task batch before opening either the DB or
IssueSink. A missing profile in strict mode or any malformed profile becomes a
non-retryable activity error, so a later invalid item cannot leave earlier
items partially emitted and `approach_hint` cannot rescue it. Tests also prove
that an unknown but structurally valid versioned ref is preserved for the
authoritative execution-side Glas resolver; no local profile catalogue was
introduced. Verification: 59 focused tests and 426 repository tests passed;
the one live NATS-to-Temporal bridge test was deselected because it requires
the local integration stack. Python compilation and `git diff --check` passed.
## Record normalized execution evidence
```task
@ -211,10 +228,10 @@ provider-credential failures and would mask the result.
- [x] Invocation shape decided and recorded as an ADR, with the boundary stated
(ACT-ADR-006; pull queue preserved)
- [ ] ops_run carries an approved `harness_profile_ref`; no definition names a
- [x] ops_run carries an approved `harness_profile_ref`; no definition names a
concrete rein
- [ ] Malformed/absent profile refs are refused at emission; unknown-but-well-formed
- [x] Malformed/absent profile refs are refused at emission; unknown-but-well-formed
refs are refused by Glas before sandbox creation, never at claim
- [ ] `approach_hint` cannot override or substitute for a profile ref, proven by test
- [x] `approach_hint` cannot override or substitute for a profile ref, proven by test
- [ ] Normalized Glas evidence is visible in production status
- [ ] One definition proven on railiance01 end to end