Skip to content

feat(just): add domain-scoped bulk plugin recipes#324

Merged
laurigates merged 1 commit into
mainfrom
feat/bulk-plugin-recipes
Jul 16, 2026
Merged

feat(just): add domain-scoped bulk plugin recipes#324
laurigates merged 1 commit into
mainfrom
feat/bulk-plugin-recipes

Conversation

@laurigates

Copy link
Copy Markdown
Owner

What

Adds an orchestration layer over the existing per-repo plugin-config judgment skills so Claude plugins can be installed / checked / re-evaluated across many repos, scoped by domain (fvh | laurigates | all), with an fzf --multi checkbox picker so each run's repo set is chosen explicitly (no surprises).

The plumbing already existed (plugins-audit whole-tree, plugins-sync-repo uniform-canonical, plugins-setup-repo/-check-repo cwd-bound). The gap was the missing enumeration → picker → batch-loop layer over those skills, plus a deterministic alias post-pass. This builds only that layer and reuses everything else.

Recipes (in private_dot_config/just/plugins.just)

Recipe Role
_plugins-repos scope Guarded domain-scope enumerator. Guards on -e "$e/.git" (dir or worktree file), not git rev-parse~/repos is itself a git repo, so rev-parse would falsely pass archive/, tmp/, io.fvh.io/, … A non-repo carrying .claude/settings.json (e.g. FVH ezpolls) is FLAGged on stderr and skipped.
_plugins-annotate repo jq state annotator → one path<TAB>summary line (enabled/lauri counts, alias + ok/DRIFT, marketplace key, workflows, tracked/gitignored) for the fzf row, --preview, and the check report.
plugins-normalize-alias repo Deterministic post-pass reconciling every laurigates alias to laurigates-claude-plugins. settings.json keyed on source.repo == laurigates/claude-plugins (robust to whatever alias a skill wrote); workflows via a perl lookahead that spares @claude-plugins-official. Idempotent; edits local files even if gitignored.
plugins-bulk scope action="check" Main driver: enumerate → annotate → fzf picker → sequential per-repo action → alias post-pass after any write. Never commits. check = local jq (read-only); setup = /configure-claude-plugins --fix; reeval = /health:check --scope=stack --fix; full = /configure:repo --fix.
plugins-audit-scope scope Scoped drift audit sharing a new private _plugins-audit-roots body; plugins-audit now delegates to it for the whole-tree variant (behaviour-preserving).

reeval targets /health:check --scope=stack --fix because /health:audit is unreachable (health-audit is user-invocable: false); health-check --scope=stack reaches its fix flow.

Verification

  • just -g _plugins-repos fvh → only real repos; ezpolls FLAGged on stderr; archive/tmp/io.fvh.io absent.
  • just -g _plugins-annotate ~/repos/laurigates/gitops → reports lgates-claude-plugins alias as DRIFT.
  • plugins-normalize-alias on gitops rewrites key + suffixes; re-run → "already canonical" (idempotent), exit 0. On pal-mcp-server, the 6 @claude-plugins-official LSP pins are byte-identical after (untouched); the claude-plugins/lgates-claude-plugins laurigates pins are normalized.
  • plugins-audit (whole tree, refactored) scanned 5 = laurigates 2 + fvh 3 — exact union.
  • Pre-commit "check justfiles parse and evaluate" passes.

Caveat

reeval's /health:check fix flow uses per-category AskUserQuestion; under -p there is no operator, so it may no-op — documented in the recipe as best-run-interactively. setup (--fix) is reliably non-interactive.

🤖 Generated with Claude Code

https://claude.ai/code/session_014xTWB98DPccsiCpkbbpzde

Add an orchestration layer over the existing per-repo plugin-config
judgment skills so plugins can be installed / checked / re-evaluated
across many repos, scoped by domain (fvh|laurigates|all), with an fzf
--multi checkbox picker so each run's repo set is chosen explicitly.

Five recipes:
- _plugins-repos: guarded domain-scope enumerator (`-e .git` guard, not
  git rev-parse, since ~/repos is itself a git repo; non-repos carrying
  .claude config are FLAGged on stderr, never processed).
- _plugins-annotate: jq state annotator (enabled/lauri counts, alias +
  ok/DRIFT, marketplace key, workflows, tracked/gitignored) as one
  path<TAB>summary line for the fzf row/preview and the check report.
- plugins-normalize-alias: deterministic post-pass reconciling every
  laurigates alias to laurigates-claude-plugins (settings.json keyed on
  source.repo; workflows via a perl lookahead that spares
  @claude-plugins-official), idempotent, edits local files even if
  gitignored.
- plugins-bulk: enumerate -> annotate -> fzf picker -> sequential
  per-repo action (check via local jq; setup/reeval/full via `claude -p`)
  -> alias post-pass after any write. Never commits.
- plugins-audit-scope: scoped drift audit sharing a new private
  _plugins-audit-roots body; plugins-audit now delegates to it for the
  whole-tree variant (behaviour-preserving).

reeval uses /health:check --scope=stack --fix (health-audit is
user-invocable: false; health-check reaches its fix flow).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014xTWB98DPccsiCpkbbpzde
@laurigates laurigates self-assigned this Jul 15, 2026
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Broken Links Detected

Summary

Status Count
🔍 Total 170
✅ Successful 160
⏳ Timeouts 0
🔀 Redirected 0
👻 Excluded 9
❓ Unknown 0
🚫 Errors 1

Errors per input

Errors in exact_dot_claude/docs/prds/daily-catchup.PRD.md


Please fix the broken links before merging.

@laurigates
laurigates merged commit a121405 into main Jul 16, 2026
7 of 8 checks passed
@laurigates
laurigates deleted the feat/bulk-plugin-recipes branch July 16, 2026 18:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant