v1.18.5 — a pipe reaches the guard, and the installers stop deleting blind - #9
Merged
Conversation
…-05) guard.sh's tokenizer said "each &&/;/| segment is its own command" and consumed only &&, ; and || — so 'echo msg | git commit -F -', the ordinary way to commit a generated message, was one segment whose first token is echo, and the whole pipeline skipped the lease guard. | and |& are now consumed, ordered after || so neither shatters the other. Three new GUARD_SHAPES (both piped commits blocked, 'git log | grep commit' not), watched failing against the pre-fix guard (exit 0 where 2 was required), and a self-test plant that restores the shipped tokenizer. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Neither installer writes ~/.claude/skills/agent-sync itself — the skills CLI they drive recreates it — and both deleted that copy unconditionally, consulting nothing. That is the family's fail-open class (make-skill v0.25.0, distribution.md §3) in mirror image: on a home where the plugin is NOT installed, the prune destroyed the only Claude Code channel the very same run had just installed, and exited 0. The copy's fate is now a decision read from the target home's installed_plugins.json (spec taken from the JSON — plugin and marketplace names differ), marketplaces/<name> kept only as the fallback signal; no plugin → kept, plugin → pruned with the spec, remedy and family launcher named, --force → kept as the recorded choice to run two channels. Absent or corrupt JSON reads as no plugin. The success path now says how the next version arrives. test/installer_test.js: 11 cases against throwaway HOMEs, delegated CLIs stubbed through PATH, 10 of 11 watched failing against the pre-fix installers. In CI beside the SessionStart identity suite npm test already carried. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…deleting blind Version on all five surfaces, installer_test.js joins npm test, CHANGELOG section, verification ledger rows (ASY-05, REQ-I01, REQ-I02, gate), retro run stamp. Gate at this tree: PASS: agent-sync v1.18.5 — all checks green; self-test 59 fixtures all detected; installer 11 cases; claim cell 24; SessionStart 5. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
guard.sh's tokenizer claimed|and consumed only||—echo msg | git commit -F -bypassed the lease guard entirely.|and|&are now consumed (ordered after||); three newGUARD_SHAPES(both piped commits blocked,git log | grep commitnot) were watched failing against the pre-fix guard (exit 0 where 2 was required), and a self-test plant restores the shipped tokenizer.~/.claude/skills/agent-syncthemselves — the skills CLI does — and both deleted that copy unconditionally. The fate of the copy is now read from the target home'sinstalled_plugins.json(spec from the JSON;marketplaces/<name>dir kept only as the fallback signal): plugin present → pruned with the real spec and the plugin-channel remedy; no plugin → kept, because it IS the Claude Code channel;--force→ kept deliberately. Absent/corrupt JSON = no plugin (fail open, never crash). Only the Claude Code channel is gated.test/installer_test.js: 11 cases, throwaway HOMEs, delegated CLIs stubbed through PATH; 10 of 11 watched failing against the pre-fix installers. Wired intonpm testand CI.Gate
npm test→PASS: agent-sync v1.18.5 — all checks green; self-test 59/59 detected (incl. the new plant); claim cell 24; SessionStart 5; installer 11.claude plugin validate --strictgreen on both manifests.🤖 Generated with Claude Code