Repository navigation
Description
Problem
After the warning window that #1010 opens, a missing agentrepo pin still runs whatever binary is on PATH (packages/agents/source/lib/lib.sh:149), so the Go merge gates (#980, #981, #982) can be judged by an unpinned binary. docs/compatibility.md:5 requires two releases of warning before removing behavior; #1010 ships the warning in release N. This issue removes the fallback at release N+2 and moves the missing-pin case from running the PATH binary to refusing with the launcher's status 2. Part of #324 and #588.
Acceptance criteria
- AC1: Given no repository pin, or a declared pin whose executable is unavailable, and a current binary on PATH, when a merge-pr or agent-merge-pr entry starts after the enforcement release, then it refuses with status 2, prints one stderr line naming the missing pin and the fix, and the PATH binary never runs.
- AC2: Given a pinned binary below the floor, when an entry starts, then it still refuses with status 2 and the PATH binary never runs.
- AC3: Given the enforcement release, when the compatibility declaration and removal notes are read, then they name that release and the warning release from The merge entry points refuse a missing or below-floor pinned agentrepo #1010.
- AC4: Non-functional: the decision logic is tested Go and the shell edit is forwarding only.
Scope and non-goals
In scope: removing the PATH fallback for a missing pin in the merge entries, the Compatibility declaration for the removal, and the removal note in docs/agent-skills-migration.md.
Non-goal: the resolver, launcher, floor and comparer (#932), the warning (#1010), and gate wiring (#864 and #865).
Follow-up edit, applied to #874, #875 and #876 in one pass once this issue is Ready: "#874-#876 AC2 precondition becomes: the installed binary is at or above the floor and lacks the required merge command; blockers move to the enforcement issue."
Approach
Start this issue only after #1010 has shipped in release N and two releases of warning have passed, so the enforcement release is N+2. Replace the warning branch with a refusal through #932's launcher, reusing its resolver and comparer, and add no probe or second comparer. Write the failing tests first: a missing pin refuses with status 2 and a marker file shows the PATH binary never ran. The pull request declares the removal under ## Risk and the migration note names the enforcement release.
Dependencies
Blocked by #1010 and by the two-release window that starts at the warning release. #874, #875 and #876 depend on this issue for "refusal precedes fallback".
Size
S. One pull request, estimated under 200 lines of code including tests.
Verify plan
- AC1: fixtures with no repository pin and with a declared pin whose executable is unavailable, each with a current PATH binary; marker files show the PATH binary never ran, and the status is 2 with one stderr line.
- AC2: a below-floor pin with a current PATH binary: status 2 and the marker file is absent.
- AC3: read the declaration and the removal notes in the diff; both name the releases.
- AC4: the diff shows tested Go for the decision and forwarding-only shell.
- Generation:
mise run generate-skills, thenmise run skill-tokens, thenapm install, thencheck-generated-skills, with both harness outputs committed. - Definition of done: D1 each AC is verified on the merged head with commands and results in the PR's Verification. D2 an independent reviewer approved the exact merged head and the author resolved each finding or filed it as a follow-up. D3 required checks pass, including
mise run check,mise run cover-go-checkandmise run cover-py-check. D4check-leaks.shwith the private-strings list and gitleaks on the diff and each post. D5 signed commits. D6 the removal note indocs/agent-skills-migration.md. D7Assisted-bytrailers and theprovenance:agent-assistedlabel. D8 the line count within the size limit. D9 follow-ups are filed with a Problem and numbered ACs and listed under Related in the PR, and deferred work left in code links its issue. D10Closesthis issue, the board showing Done, and a finalStatus:comment naming the merge commit.
Risks
A machine with no pin stops merging after the enforcement release; the refusal line names the fix and the window gave two releases of warning. Undo: revert; the entries return to the warning behavior.
Operator authority
Owner-only GitHub action: the configured merge owner's exact-head approval of the protected lib.sh change, required after #753 (.agents/agent-skills.conf:9).
Activity