Declare mcp-beaver grant boundaries in aos-eval shape: deny-by-absence is tested, "everything you declared works" is not #84
Labels
No labels
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/mcp-beaver#84
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Outcome
Declare mcp-beaver's grant boundaries in
aos-eval.boundaries.v1shape, derived from the.mcp.kdlguardfile, soaos-eval boundaries checkcan name every deny rule with no reachable-case counterpart. deny-by-absence is the product claim, and nothing currently measures the other half of it.The specific risk here
The README states the claim plainly: "Everything you declared works. Nothing else is reachable." Those are two assertions and the test suite is weighted toward the second one.
Read on
mainat depth 30: 192 test functions across 32_test.gofiles, roughly 46 naming a refusal (Reject*,Refus*,Den*,Block*) against roughly 16 naming a permit (Allow*,Permit*,Accept*,Serves*).Those numbers are a signal rather than a measurement. They read test-function names, so a reachable case asserted inside a table test without
Allowin its name is invisible to them. The reason a better number does not exist is the thing to fix: no file declares the complete boundary set, so nothing can distinguish a real missing half from a naming artifact.Why the pairing rule fits a dam better than an agent
From
aos_eval/boundaries.py:"A dam is not a wall. It decides what gets through." A wall passes a refusal-only suite perfectly. The half that separates this runtime from a wall is the one with less coverage, and
TestArgPinAllowsTheMatchingValuebesideTestArgPinRefusesAnOverrideshows the shape is already natural here. It is just not declared, so no tool can report the pairs nobody wrote.Two modes, two different claims
The pairing needs to distinguish them, because
docs/conformance.mdand the README describe genuinely different guarantees:Those two out-halves fail differently and a single declaration that flattens them would measure the weaker one. The proxy-mode half is the one with real blast radius, since the credential is present and only the check stands between a call and the upstream.
It costs nothing to run
aos-evalholds no runner and no model client, soboundaries deriveandboundaries checkrun offline with no inference and no human grader. This is the deterministic-battery half of the eval stack, not the graded-board half.Expect the first output to be a gap
Against sirens-echo's pilot board the same tool reported 56 derived slots, none authored.
docs/aos-eval.md: "The first honest output in a new repo is usually a gap" and "A coverage report that cannot come back negative is decoration." A clean first run here should be read as a bug in the declaration.Complete when
aos-eval.boundaries.v1shape, derived from the guardfile grant tree rather than hand-restated, withoriginnaming the source.aos-eval boundaries checkruns as ajustverb or in CI, and its current gap is recorded rather than suppressed.Not in scope
No human-graded board and no model subject. The
agent-composeandsirens-echotriple does not transfer, because mcp-beaver is a runtime rather than an agent. Also not MCP protocol conformance, whichdocs/conformance.mdalready covers and which asks a different question.Source
Opened after a portfolio-wide eval coverage read on 2026-08-18.
docs/aos-eval.mdin agentic-os names exactly two consumers, agent-compose and sirens-echo. mcp-beaver has none. Sibling issue filed againstumbra, whose KDL policy this runtime renders.Third sibling filed: ward#1676.
Worth reading alongside this one, because it walks back the opening argument both of these use. The refusal-versus-permit test-name ratio pointed at a gap in Ward's director merge gate, and checking the actual call sites found it properly paired with three unnamed positive-path assertions. The name-based count is unreliable in both directions, which is the argument for declaring the boundary set rather than counting test names, and it applies to the numbers quoted here too.