Skip to content

fix(skill-quality): stop invocation-probe runs failing validity on denied searches outside the workspace #11624

Closed

Description

@kyle-sexton

Refs: #11540, #11618

Observed

With the #11618 fix, the 8 /ai-slop:audit trigger-measurement runs (measure-invocation.sh emit-plugin-eval cases, --ablation none --runs 3, Opus 5.5, Claude Code 2.1.316) no longer fail on misses or turn caps. All 8 are still INVALID on permission denials:

  • The emitted cases set allowed_tools: [Skill, Read, Glob, Grep]. The agent, finding an empty workspace, runs Glob and Grep at /home/kyle, ~/.claude, the run's own temp workspace and the plugin copy's root.
  • The eval session denies them.
  • A with-arm denial aimed at or under the plugin directory always FAILs in run-validity.py.

Example: Glob /home/kyle/worktrees/ev6/a (the plugin copy root) in case ai-slop-audit-neg-train-01, run r1-a-pf.

The denials appear equally in both versions of the description, so they do not bias a before/after comparison. But skill-criteria.md Measurement step 4 reads numbers only from VALID runs, so no trigger measurement can pass today.

Fix wanted

One of these, chosen on evidence:

  • (a) The emitter gives probe cases a workspace or tool set that leaves nothing to search outside it.
  • (b) run-validity.py treats a denial in an invocation-probe case as a warning when it comes after the graded Skill decision.
  • (c) The emitted prompt names the workspace as the only place to look.

Measure the chosen fix on plugins/ai-slop/probes/audit.json.

Done when

  • An emitted probe suite run on a host returns VALID, or only warnings, under run-validity.py, with no change to the measured trigger rate beyond noise.

This was generated by AI.

Activity

  1. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 31, 2026
  2. github-actions commented on Oct 31, 2026

    @github-actions
    Contributor

    Proposed work class: work-class: scoped
    Basis: automated intake triage; the lanes App applied this class.

    Size: Medium
    Complexity: Medium
    Uncertainty: Knowable
    Flags: none
    Blocked by: none

    Understood: after the #11618 fix, all 8 /ai-slop:audit trigger-measurement runs are still INVALID. The agent searches outside the empty workspace, the eval session denies those searches, and run-validity.py fails any with-arm denial under the plugin directory. That leaves no trigger measurement able to pass. The issue lists three fixes (emitter workspace or tool set, a validity warning for post-decision denials, or a prompt naming the workspace) and asks for the choice to be made on evidence. I treated that as an implementation choice, not a design question. The done-when needs a host run, so a person or host run has to do it. No duplicate found; #11618 and #11540 are related context.

    Automated triage, applied by the lanes App.

  3. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    and removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 31, 2026
  4. added
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    admission-deferredAdmitted but waiting for WIP room; the hourly work-unblock sweep labels it agent-ready.
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    admission-deferredAdmitted but waiting for WIP room; the hourly work-unblock sweep labels it agent-ready.
    on Oct 31, 2026
  5. self-assigned this
    on Oct 31, 2026
  6. kyle-sexton commented on Oct 31, 2026

    @kyle-sexton
    MemberAuthor
    No description provided.
  7. melodic-automation-lanes commented on Oct 31, 2026

    @melodic-automation-lanes
    Contributor

    This records a re-fire of an earlier refusal, not a new refusal. The lanes kill switch stopped run 41219706363, the work-resolve-issue run that agent-ready started, before it did any work; that run ended at 2026-10-31T17:04:28Z. work-unblock has now removed and added agent-ready back to start a fresh run. A kill-switch refusal is no fault in this issue or the lanes, so it never counts against later re-fires; after limits.limit-stops-per-issue of them since a person last added agent-ready or a run last reported, work-unblock waits longer before each one, up to 24 hours.

  8. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Oct 31, 2026
  9. github-actions commented on Oct 31, 2026

    @github-actions
    Contributor
    No description provided.
  10. github-actions commented on Oct 31, 2026

    @github-actions
    Contributor

    already-leased: another session holds a live lease on #11624, so run https://github.com/melodic-software/claude-code-plugins/actions/runs/41236209491 ran no model.

  11. kyle-sexton commented on Oct 31, 2026

    @kyle-sexton
    MemberAuthor
    No description provided.
  12. kyle-sexton commented on Oct 31, 2026

    @kyle-sexton
    MemberAuthor

    Status: the denial rule shipped (#11655); the probe-setup fix is still open. One option tested and ruled out.

    #11655 makes the denial check order-aware: a probe denial warns only after the graded Skill call, or on a should-not-fire hold whose denial-free runs also held. Under that rule 2 of the 8 #11540 runs gate VALID. The other 6 have the agent search outside its empty workspace, get denied, and then decide.

    Option (a) by tool set is ruled out. I emitted the /ai-slop:audit probes with allowed_tools: [Skill] and ran 19 cases × 1 with-arm run (Claude Code 2.1.316, Opus 5.5). The agent still called Glob, Read and Grep, and now every call was denied, including Globs of its own run home. That made 16 of 19 runs denied, against 6 of 8 runs before. Per the docs, allowed_tools and --allow-tools add grants beyond the read-only set and never remove it:

    (both read 2026-10-31). The change was not pushed.

    Options left:

    • (c) The emitted prompt names the workspace as the only place to look.
    • (a') Seed the workspace (scaffold) with a file that matches what the agent searches for, so the search lands inside the workspace.

    Either one needs a paid measurement. Parked under the owner's 2026-10-31 usage plan: build the next attempt, check it on these 19 cases with --runs 1, and batch the full #11540 measurement with the other host-run items.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.priority: mediumReal value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

Type

Fields

No fields configured for Bug.

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions