Repository navigation
Conversation
A staged skill the CLI never reports at session init is not in the room the run claims to measure. Its cases still run, every one reads as a missed trigger, and the report tells the author a description does not trigger when that description was never offered to the agent. The two outcomes are indistinguishable in the verdict. The condition was already detected and already rendered as a warning above the numbers. It just did not reach the gate, so the run went green apart from a line that is easy to read past. This is the same class as the two checks beside it: infrastructure rather than score. It is placed before the accuracy bar so that neither a clean sweep nor `--min-accuracy 0` can license a room that was not the one asked for. Worth stating why it is not hypothetical. Descriptions share one listing budget, and on overflow the text is dropped starting with the skills invoked least. A skill staged for an eval has been invoked zero times, so it is first in that queue, while the runner's own user-level skills compete for the same space. Signed-off-by: John Lybeck <john.lybeck@amd.com>
johnl-amd
left a comment
There was a problem hiding this comment.
Repository: amd/skillscope · PR: #22 · Head: c34542ed14902109dd66555a347694c075a64919 · Base: 0f734b2dd344cd72b5e016ad6c3b1ac2ce36f6f3 · Skill dirs reviewed: none (no skill or instruction file in scope) · Standard commit: 8ee477d0133d37cb598e57ba0e0513385c18f2cb
Approved
This pull request touches only application code and its test suite — skillscope/cli.py (a routing_gate gating change) and tests/test_skillscope.py (three new unit tests) — and contains no SKILL.md, CLAUDE.md, AGENTS.md, command file (commands/*.md), agent file (agents/*.md), or path-scoped rules file (frontmatter with paths:). The ai-instruction-quality standard applies only to AI instruction files, and none are part of this diff.
Per the review scope rules, that makes this a clean pass rather than a failure to review: there is nothing here to check against the checklist, so no findings, Tier 1 through 3, apply.
Note: attempting to add the agent-hub-skill-reviewing / agent-hub-skill-reviewed labels failed with an HTTP 403 (token cannot write labels on this repository), so the claim/release labeling step was skipped; the review itself was still completed and posted.
🤖 Automated skill review by agent-hub — ai-instruction-quality on AMD AgentHub.
Model claude-sonnet-4-5 · took 1m · diff 5a6fdc903c0f · run
Not a human review. Reply here if a finding is wrong.
nowycondro
left a comment
There was a problem hiding this comment.
🤖 Automated review · review-code · head c34542ed
Review — needs work
Full review of the whole change (single pass: the diff is two tightly-coupled files, skillscope/cli.py and tests/test_skillscope.py, well within what one reviewer can read completely alongside their surrounding code).
No ticket named as closed by this change; #23 is mentioned only as related, informational work on the same budget problem.
Blocking
docs/usage.mdstill describes only two unconditional infrastructure checks, now stale —docs/usage.md:182-185
The user-facing docs say: "No value turns off the infrastructure checks — a run where nothing was graded, or where no skill activated anywhere, fails at any bar, since those numbers are an artifact rather than a result." This change adds a third such check (skills_missing_from_session,skillscope/cli.py:170-178) that also cannot be turned off by--min-accuracy, including at0. The in-code docstring forrouting_gatewas updated to say "the first three answers are infrastructure," but the user guide enumerating this exact behavior was not, so a reader of the docs is told there are only two unconditional failure modes when there are now three.
Confidence 85 · mechanical · Fix: add the missing-skill condition to thedocs/usage.md"Routing, and the bar it is held to" section alongside the other two.
Non-blocking
None
Decisions for the author
None
Positive signals
- The new gate branch is placed before the
min_accuracy <= 0short-circuit, so--min-accuracy 0cannot be used to bypass it — this is exercised directly bytest_a_missing_skill_outranks_the_accuracy_barand holds under mutation (see verification below). - Failure message names the exact missing skills rather than just signaling a boolean failure, keeping the fix actionable for whoever reads the CI log.
Deployment notes
This changes CI behavior for any skillscope routing consumer: a run that previously went green with only a warning line (when skills_missing_from_session was non-empty) will now exit 1 regardless of --min-accuracy, including 0. Existing pipelines relying on the old pass-with-warning behavior will start failing after this merges.
What this covered
Read skillscope/cli.py (routing_gate, cmd_routing, and the only call site) and tests/test_skillscope.py (TestRoutingGate) completely, against commits 0f734b2d…c34542ed, plus the surrounding code that produces and consumes skills_missing_from_session in skillscope/routing.py (summarize, run_case) to check whether elevating this from a warning to a gate enlarges the blast radius of any existing weakness in that computation — it does not: visible_skills is only populated from a case that actually reached a session-init event, so a timed-out or inconclusive case cannot contaminate the missing-skill set.
Verified by running, not just reading: full suite (python -m unittest discover -s tests -t .) is green at 229 tests; reverting the new if missing_skills: branch and rerunning TestRoutingGate fails exactly the three new tests and no others, confirming each is pinned to behavior rather than shape. CI's own statusCheckRollup for this commit is all green (4 unit-test jobs + the throwaway-repo action run).
Did not run: history pass found nothing notable in recent cli.py/routing.py log; prior-changes pass — no accessible record of earlier review comments on these two files outside this PR's own (excluded) discussion thread; agent-instruction adherence — no CLAUDE.md/AGENTS.md/skill files are in this repo or touched by this diff, so nothing to check there. Not reconciled against this PR's existing review thread or comments.
Not a human review. This is an automated code review; please verify findings independently before acting on them.
Review — needs workFull review of the whole change: a small diff touching Blocking
Non-blockingNone. Decisions for the author
Positive signals
Deployment notes
What this coveredRead completely: Fan-out: three independent passes were run (a code-correctness/test-quality pass; a combined history/prior-changes/agent-instruction/code-comments/impact-analysis pass; a design-review pass on three targeted questions) — the first two attempts at launching the latter two passes hit a concurrency limit and were re-issued successfully; all three completed as independent, blind passes (none were given the PR description or discussion). The PR description itself was incidentally fetched once during scope resolution (a single Not reconciled against any discussion here — this PR had no review comments at the time of this review. 🤖 Automated review by agent-hub on AMD AgentHub. |
Summary
routing_gatenow fails whenskills_missing_from_sessionis non-empty, alongside the two infrastructure checks already there. Placed before the accuracy bar, so neither a clean sweep nor--min-accuracy 0can pass a room that was not the one asked for.missed_trigger, and the report tells the author a description does not trigger when that description was never offered to the agent. The two outcomes are indistinguishable in the verdict.Why it is not hypothetical
Every enabled skill contributes one line to a listing the agent reads at session start, costing
len(name) + 4 + min(len(description), 1536), plus a separator between entries. That listing has a budget:Measured on one developer machine: 34 enabled skills needing 18,050 characters against that 8,000 budget, 2.3x over. At least 12 of the 34 are reduced to a bare name right now, in any session at the default context size.
On overflow nothing fails. Names are kept, descriptions are dropped, and the order is:
A skill staged for an eval has been invoked zero times, so its score is zero and it is first to lose its description by construction. Not merely likely to be near the front of the queue: last in line for restoration, every time, until it has been used, which it cannot be while it has no description to match on.
It also competes with whatever the runner already has. A real run against a catalog of 8 skills reported 17 further skills registered from the runner's own config, which this code already warns about separately.
Test plan
TestRoutingGate: a missing skill fails the run and names it; it outranks the accuracy bar at both1.0and0.0;Noneand[]leave the gate alone.python -m unittest discover -s tests -t ..Note
The failure message is longer than its neighbours on purpose. This is the quietest of the three infrastructure conditions, because the run still produces a plausible number, so the message says what the number would otherwise have been read as.
Related: #23 reports what a repo's own skills cost against the same budget, so a catalog can see the pressure it adds before it ships.