Repository navigation
Reject a Tier Sharing the Maintainer-Only Model and State the Allowance as Conduct - #3524
Conversation
…ce as Conduct The validator rejects a tool mapping where another tier names the maintainer-only model, compared case-insensitively as the guard compares, since the guard would then refuse every dispatch at that tier. Requirement 10 states that setting the allowance is the maintainer's act and that an agent never doing it is conduct the hook does not enforce. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars.
|
|
A recorded local strict-review pass covers head |
There was a problem hiding this comment.
🟡 Changes recommended
model_tier_errors can raise TypeError for a non-string maintainerOnly value instead of returning validation errors.
1 open issue
What changed in this PR
This pull request prevents non-maintainer tiers from sharing the maintainer-only model and clarifies allowance ownership and enforcement boundaries in the agent-safety documentation.
Changes:
- Rejects case-insensitive sharing of the maintainer-only model across tiers.
- Adds regression coverage for a tier mapped to
Fable. - Clarifies that maintainers set the allowance and that agent conduct is not hook-enforced.
- Identifies a remaining validation issue for non-string
maintainerOnlyvalues.
| File | Description |
|---|---|
tests/test_spec_validate.py |
Adds regression coverage for case-insensitive sharing of the maintainer-only model. |
spec/validate.py |
Prevents another tier from sharing the maintainer-only model; requires a guard for non-string maintainerOnly values. |
host-setup/agent-safety/README.md |
Clarifies maintainer allowance responsibility and hook enforcement boundaries. |
Review effort: Lite
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## develop #3524 +/- ##
===========================================
+ Coverage 81.54% 81.56% +0.01%
===========================================
Files 26 26
Lines 8967 8970 +3
===========================================
+ Hits 7312 7316 +4
+ Misses 1655 1654 -1
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
A recorded local strict-review pass covers head |
…ain (#3521) ## Summary This promotes three changes to `main`: - [#3516](#3516) maps model tiers in one config, `spec/model-tiers.json`, carries the "Model Tiers" rule into the skills that dispatch, and adds a guard that refuses a highest-tier dispatch the maintainer did not allow. - [#3518](#3518) has the agent-safety installer's hooks share one registration helper. - [#3520](#3520) has those hooks share one registration-check loop. It also carries the fixes for this promotion's own review findings, each landed on `develop` first: - [#3522](#3522) requires a non-empty model name per tier and names both edits a model release makes. - [#3523](#3523) states what the highest-tier allowance covers and where the guard stops. - [#3524](#3524) rejects a tier sharing the maintainer-only model and states the allowance as conduct. - [#3525](#3525) matches the guard's alias boundaries regardless of case. - [#3526](#3526) mirrors the guard's CI self-tests in the local runbook. - [#3527](#3527) rejects a repeated tier name and names every hook the installer registers. Closes #3517 Closes #3519 🤖 Generated with [Claude Code](https://claude.com/claude-code)

Summary
This answers the third round of review findings on the promotion pull request #3521:
spec/validate.pynow rejects a tool mapping where another tier names the maintainer-only model. The comparison ignores case, as the guard's own comparison does. Without it, the guard would block that name and refuse every dispatch at the other tier. A new test coversfrontiermapped toFable.Local review, declined
spec/validate.pymodel_tier_errors: the check matches the guard'sAgentpath, an equality ignoring case. The guard'sWorkflowpath matches the blocked alias as a word inside a script's model value, so a lower tier mapped to a variant such asopus[1m]beside a reservedopuswould pass here. Two things rule it out underGOVERNANCE.md"Trust Boundaries and Hardening Effort". The config is trusted hub content, and the failure would be a loud refusal with a stated reason, not a silent one. Mirroring the regex would also put a second copy of the guard's matching rule in the validator.🤖 Generated with Claude Code