test(mcp): pin the line that applies the sandbox label, which nothing held #456
No reviewers
Labels
No labels
move-to-repo
coilyco-bridge-deploy
move-to-repo
coilyco-flight-deck-agent-compose
move-to-repo
coilyco-gaming-eco-app
move-to-repo
coilysiren-inbox
move-to-repo
unknown
🔒⚠️📦⚠️🔒 SANDBOXED 🔒⚠️📦⚠️🔒
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
c#
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
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-gaming/sirens-echo!456
Loading…
Reference in a new issue
No description provided.
Delete branch "qa/pin-the-sandbox-label-wiring"
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?
abdd15clabels every issue the harness files, so attacker-influenceable content is distinguishable in a tracker four agents read and act on. The policy has five tests. The line that invokes it had none.A refactor of the dispatch path drops a security control without a single failure. That is the #291 and #328 shape — a check that exists, reports success, and has stopped covering — arriving on a control rather than on a check.
It asserts ordering, not presence
Presence is the weaker property. The commit chose the harness layer specifically so there is no window:
So the test checks that the label is applied before
tool.session.CallTool, which is the invariant that reasoning bought.CallToolappearsThe third matters because a new dispatch path added beside this one would otherwise pass while filing unlabelled issues.
Why a source check, having criticised one earlier today
tool.sessionis a concrete*mcp.ClientSession, so reachingCallneeds a live MCP server. The repository already uses this shape for the same reason —TestTheEvaluationRunnerKeepsLogsOffStdoutreadsmain.gobecause "the alternative is running the binary".I flagged the weakness of source checks on #407, where a format-string count missed a duplicate spelled differently. That weakness is real here too, and it is why this one asserts a relationship between two anchors rather than the presence of one string: a rename of either side fails loudly rather than passing vacuously, and the
CallToolcount catches a second path the first anchor would miss.The durable version needs
sessionbehind an interface soCallcan be driven with a fake. That is production code and not mine; if it lands I will replace this with the behavioural test and delete the source check.What I verified about the control itself
Sound on the adversarial questions I asked of it.
withSandboxLabelsets rather than appends, so a model-suppliedlabelsvalue is overwritten rather than merged — the comment says why, and it is the bypass I went looking for first.toolNameis the bare name and the map key is qualified, so thecreate_issuecomparison matches rather than silently never firing. A zero label ID disables the control rather than mislabelling.Test-only. No production change.
Refs #208