fix(ci): make the content-sync gate fire on the cases it exists to catch
`check-plugin-content-sync` was the only local pre-push hook scoped with `files:` instead of `always_run`, and its regex missed both compiled `plugin.json` paths — exactly the manifests the script had been taught to diff. A commit tampering only with one of those passed the entire pre-push suite at exit 0. A regex fix alone could not close it: pre-commit drops deleted paths from the file list, so removing a mirror directory skipped the hook too. The `hooks\.json` alternative was also already dead, matching only the pre-move flat path. Dropping `files:` for `always_run: true` closes all three and makes the hook uniform with its three siblings; the check costs ~2-4s. Also excludes `.github/plugin/marketplace.json` from `pretty-format-json`. This was not hypothetical: `json.dumps(indent=2, sort_keys=True)` reproduces the manifests committed at HEAD byte-for-byte, so `--autofix` had already rewritten compiled apm output once. Without the exclusion it would do so again on the next commit, silently breaking the byte-identical mirror invariant. Landing first, ahead of the regenerated manifests, so that cannot happen. Refs: #90 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X7GvKuJfy2WrdBmUttV4DT
This commit is contained in:
@@ -28,7 +28,7 @@ repos:
|
|||||||
- id: pretty-format-json
|
- id: pretty-format-json
|
||||||
stages: ['pre-commit']
|
stages: ['pre-commit']
|
||||||
args: [--autofix]
|
args: [--autofix]
|
||||||
exclude: '(^|/)(\.claude-plugin/plugin\.json|\.github/plugin/plugin\.json|\.claude-plugin/marketplace\.json)$|^\.agents/plugins/marketplace\.json$'
|
exclude: '(^|/)(\.claude-plugin/plugin\.json|\.github/plugin/plugin\.json|\.claude-plugin/marketplace\.json|\.github/plugin/marketplace\.json)$|^\.agents/plugins/marketplace\.json$'
|
||||||
- id: check-yaml
|
- id: check-yaml
|
||||||
stages: ['pre-commit']
|
stages: ['pre-commit']
|
||||||
- id: trailing-whitespace
|
- id: trailing-whitespace
|
||||||
@@ -64,12 +64,12 @@ repos:
|
|||||||
|
|
||||||
- id: check-plugin-content-sync
|
- id: check-plugin-content-sync
|
||||||
name: Check plugin content sync
|
name: Check plugin content sync
|
||||||
description: Verify each plugin's flat skills/agents/commands/hooks.json mirror is in sync with .apm/ -- Claude Code has no .apm/ awareness so this compiled mirror must stay current (see issue #90)
|
description: Verify each plugin's flat skills/agents/commands/hooks/hooks.json mirror is in sync with .apm/ -- Claude Code has no .apm/ awareness so this compiled mirror must stay current (see issue #90)
|
||||||
entry: bash scripts/sync-plugin-content.sh --check --all
|
entry: bash scripts/sync-plugin-content.sh --check --all
|
||||||
language: system
|
language: system
|
||||||
stages: [pre-push]
|
stages: [pre-push]
|
||||||
pass_filenames: false
|
pass_filenames: false
|
||||||
files: '^(scripts/sync-plugin-content\.sh|\.claude-plugin/marketplace\.json|plugins/[^/]+/(apm\.yml|\.mcp\.json|hooks\.json|\.apm/|agents/|skills/|commands/|instructions/|extensions/))'
|
always_run: true
|
||||||
|
|
||||||
- id: check-marketplace-mirror-sync
|
- id: check-marketplace-mirror-sync
|
||||||
name: Check marketplace mirror sync
|
name: Check marketplace mirror sync
|
||||||
|
|||||||
Reference in New Issue
Block a user