MAJOR
- 9e97cd5 40-validate-standalone.sh: route a target's sc2_gate to its dedicated
gate (config-audit → 50-config-audit-sc2.sh), mirroring 99-dryrun.sh, so --all
no longer falsely FAILs config-audit on the machine-locked v5.0.0 tests.
- 1708e90 99-dryrun.sh: assert EXACTLY one tag survives (F5); a partial tag-strip
no longer silently reports the wrong tag via head -1.
- 4e494c8 99-dryrun.sh: capture the SC2 standalone failing set from the dry-run's
own prepped extract ($dest), not the 40-validate side-effect clean room.
- aeb6292 00-preflight.sh: assert every map path is whitespace/glob-free, making
the word-split path handling in 99-dryrun.sh sound.
- 5d112cb extract the SC6 DROP + SC2 regression detectors into sc6-check.sh /
sc2-regression.sh and add sc-checks.test.mjs — a negative test proving each
detector FIRES (force-fresh re-extraction would undo a planted file-drop).
- 9e588ca 10-extract.sh re-asserts git filter-repo before use (self-heal runs
preflight only on a missing mirror); RUNBOOK lists git-filter-repo + python3>=3.6.
MINOR
- bc0f8a7 plugin-map.json: reset ms-ai-architect blob_strip_safe to null
(00-preflight.sh populates it per run).
- 8d649e9 99-dryrun.sh: gate SC6 behind extract success; a failed extract is
labelled (extract failed), not a content DROP.
- 4044c49 99-dryrun.sh: guard mktemp — an empty capture is an error, not a
false zero-regression PASS.
Also: 00-preflight.test.mjs asserted all 3 'renamed' plugins carry >=2 paths, but
llm-security became single-path in 836b8e9 (copilot was a coexisting plugin, not a
rename) — a stale pre-existing failure. Aligned the test to the ratified map and
added a positive single-path lock against re-introducing the 87-file-drop defect.
Verified: full dry-run 11/11, 0 pushes; sc-checks/99-dryrun/40-validate/00-preflight/
60-rewrite suites green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
140 lines
7.9 KiB
JSON
140 lines
7.9 KiB
JSON
{
|
|
"_comment": "Rename-aware extraction map for the polyrepo migration. Tags come from each plugin's .claude-plugin/plugin.json version (verified 2026-06-17), NOT from README/CLAUDE.md (which the migration corrects, Step 9). 11 targets = 10 plugins + the design-system. URLs are HTTPS (F2, #9740). Renamed plugins carry >=2 paths (F1). blob_strip_safe is (re)computed by 00-preflight.sh against the mirror history.",
|
|
"drop": ["plugins/ultra-cc-architect/"],
|
|
"targets": {
|
|
"ai-psychosis": {
|
|
"paths": ["plugins/ai-psychosis/"],
|
|
"path_renames": { "plugins/ai-psychosis/": "" },
|
|
"tag": "v1.2.0",
|
|
"repo_url": "https://git.fromaitochitta.com/open/ai-psychosis.git",
|
|
"has_vendor_ds": false,
|
|
"blob_strip": false,
|
|
"blob_strip_safe": null,
|
|
"test_cmd": "node --test 'tests/**/*.test.mjs'",
|
|
"standalone_caveat": "runs from repo root (relative-fixture cwd)"
|
|
},
|
|
"claude-design": {
|
|
"paths": ["plugins/claude-design/"],
|
|
"path_renames": { "plugins/claude-design/": "" },
|
|
"tag": "v0.1.0",
|
|
"repo_url": "https://git.fromaitochitta.com/open/claude-design.git",
|
|
"has_vendor_ds": false,
|
|
"blob_strip": false,
|
|
"blob_strip_safe": null,
|
|
"test_cmd": "bash tests/validate-plugin.sh",
|
|
"standalone_caveat": "structure check via validate-plugin.sh (no unit suite)"
|
|
},
|
|
"config-audit": {
|
|
"paths": ["plugins/config-audit/"],
|
|
"path_renames": { "plugins/config-audit/": "" },
|
|
"tag": "v5.1.0",
|
|
"repo_url": "https://git.fromaitochitta.com/open/config-audit.git",
|
|
"has_vendor_ds": false,
|
|
"blob_strip": false,
|
|
"blob_strip_safe": null,
|
|
"test_cmd": "node --test 'tests/**/*.test.mjs'",
|
|
"sc2_gate": "50-config-audit-sc2.sh",
|
|
"standalone_caveat": "SC2 gate = full tests/**/*.test.mjs MINUS the 6-file machine-locked v5.0.0 byte-stability surface (json-backcompat, raw-backcompat, cli-humanizer, posture-humanizer, scan-orchestrator-humanizer, lint-default-output), re-seeding snapshot-default-output via UPDATE_SNAPSHOT=1 in-clone. Operator-ratified 2026-06-17 brief-correction: plan F4 named only 2 files; the verified surface is 6 (the v5.0.0 fixtures embed the original abs path AND the claude_md/plugin_hygiene scanners key off a plugins/ ancestor, so findings drift by path — not a string rewrite). DROPPED clean-room SC2 coverage = config-audit's humanizer/posture-humanizer/scan-orchestrator-humanizer prose-snapshot surface (recorded, not silent). config-audit backlog (out of migration scope): normalize the v5.0.0 fixtures' embedded paths + make scanners path-agnostic, then re-include. The 3 other v5.0.0-referencing tests (posture, scoring-humanizer, scenario-read-test) are path-independent and stay in the gate."
|
|
},
|
|
"graceful-handoff": {
|
|
"paths": ["plugins/graceful-handoff/"],
|
|
"path_renames": { "plugins/graceful-handoff/": "" },
|
|
"tag": "v2.1.0",
|
|
"repo_url": "https://git.fromaitochitta.com/open/graceful-handoff.git",
|
|
"has_vendor_ds": false,
|
|
"blob_strip": false,
|
|
"blob_strip_safe": null,
|
|
"test_cmd": "node --test 'tests/**/*.test.mjs'",
|
|
"standalone_caveat": "pilot candidate (low-churn, has tests, no DS, no blob bloat)"
|
|
},
|
|
"human-friendly-style": {
|
|
"paths": ["plugins/human-friendly-style/"],
|
|
"path_renames": { "plugins/human-friendly-style/": "" },
|
|
"tag": "v1.1.0",
|
|
"repo_url": "https://git.fromaitochitta.com/open/human-friendly-style.git",
|
|
"has_vendor_ds": false,
|
|
"blob_strip": false,
|
|
"blob_strip_safe": null,
|
|
"test_cmd": "bash validate-plugin.generic.sh human-friendly-style",
|
|
"standalone_caveat": "no unit suite — ported generic structure validator (Step 7)"
|
|
},
|
|
"linkedin-studio": {
|
|
"paths": ["plugins/linkedin-studio/", "plugins/linkedin-thought-leadership/"],
|
|
"path_renames": {
|
|
"plugins/linkedin-studio/": "",
|
|
"plugins/linkedin-thought-leadership/": ""
|
|
},
|
|
"tag": "v0.4.0",
|
|
"repo_url": "https://git.fromaitochitta.com/open/linkedin-studio.git",
|
|
"has_vendor_ds": false,
|
|
"blob_strip": false,
|
|
"blob_strip_safe": null,
|
|
"test_cmd": "node --test hooks/scripts/__tests__/*.test.mjs render/__tests__/*.test.mjs agents/__tests__/*.test.mjs",
|
|
"test_cmd_advisory": "cd scripts/analytics && npm install && npm test",
|
|
"standalone_caveat": "renamed from linkedin-thought-leadership (F1). SC2 two-tier (M11): .mjs core is the HARD gate (zero deps); TS analytics suite is ADVISORY (npm/network required, NOT a clean-room gate)"
|
|
},
|
|
"llm-security": {
|
|
"paths": ["plugins/llm-security/"],
|
|
"path_renames": {
|
|
"plugins/llm-security/": ""
|
|
},
|
|
"tag": "v7.7.2",
|
|
"repo_url": "https://git.fromaitochitta.com/open/llm-security.git",
|
|
"has_vendor_ds": true,
|
|
"blob_strip": false,
|
|
"blob_strip_safe": null,
|
|
"test_cmd": "node --test 'tests/**/*.test.mjs'",
|
|
"standalone_caveat": "single-path (CORRECTED 2026-06-17 by the S11 dry-run): llm-security-copilot was a SEPARATE, COEXISTING plugin (196 llm-security + 167 copilot paths at the SAME commits f778558d/f418a8fe, then copilot deleted) — NOT a rename ancestor. The earlier dual --path + rename-to-root collided at the coexistence commits and dropped 87 of 421 files (incl. 18 test files -> 51 e2e fails). Single-path retains ALL 421 files + 67 tests + 139 commits of llm-security history; the 3 copilot-only commits are correctly excluded (different plugin). vendors the design-system (playground)."
|
|
},
|
|
"ms-ai-architect": {
|
|
"paths": ["plugins/ms-ai-architect/"],
|
|
"path_renames": { "plugins/ms-ai-architect/": "" },
|
|
"tag": "v1.15.0",
|
|
"repo_url": "https://git.fromaitochitta.com/open/ms-ai-architect.git",
|
|
"has_vendor_ds": true,
|
|
"blob_strip": true,
|
|
"blob_strip_safe": null,
|
|
"test_cmd": "bash tests/validate-plugin.sh",
|
|
"standalone_caveat": "148 MB screenshot blob-bomb (F3): single filter-repo pass strips >1MB blobs when blob_strip_safe (all under playground/screenshots/), else surgical --path-glob; vendors the design-system"
|
|
},
|
|
"okr": {
|
|
"paths": ["plugins/okr/"],
|
|
"path_renames": { "plugins/okr/": "" },
|
|
"tag": "v1.3.0",
|
|
"repo_url": "https://git.fromaitochitta.com/open/okr.git",
|
|
"has_vendor_ds": false,
|
|
"blob_strip": false,
|
|
"blob_strip_safe": null,
|
|
"test_cmd": "bash validate-plugin.generic.sh okr",
|
|
"standalone_caveat": "no unit suite — ported generic structure validator (Step 7). okr/templates/okr.local.md.template is intentionally tracked (SC7 allow-exception)"
|
|
},
|
|
"voyage": {
|
|
"paths": ["plugins/voyage/", "plugins/ultraplan-local/"],
|
|
"path_renames": {
|
|
"plugins/voyage/": "",
|
|
"plugins/ultraplan-local/": ""
|
|
},
|
|
"tag": "v5.1.1",
|
|
"repo_url": "https://git.fromaitochitta.com/open/voyage.git",
|
|
"has_vendor_ds": false,
|
|
"blob_strip": false,
|
|
"blob_strip_safe": null,
|
|
"test_cmd": "node --test 'tests/**/*.test.mjs'",
|
|
"standalone_caveat": "renamed from ultraplan-local (F1, 136 pre-rename commits). Carries .forgejo/ISSUE_TEMPLATE/ under --path — assert it survives, no monorepo-relative refs (M17)"
|
|
},
|
|
"playground-design-system": {
|
|
"paths": ["shared/playground-design-system/", "shared/playground-examples/"],
|
|
"path_renames": {
|
|
"shared/playground-design-system/": "",
|
|
"shared/playground-examples/": "playground-examples/"
|
|
},
|
|
"tag": "v0.6.0",
|
|
"repo_url": "https://git.fromaitochitta.com/open/playground-design-system.git",
|
|
"has_vendor_ds": false,
|
|
"blob_strip": false,
|
|
"blob_strip_safe": null,
|
|
"test_cmd": "bash -c 'test -f tokens.css && test -f base.css && test -d schemas'",
|
|
"standalone_caveat": "DS source repo (the 2 consumers are llm-security + ms-ai-architect). Receives sync-design-system.mjs + test + PLAYGROUND-MAINTENANCE.md at standup (Step 4)"
|
|
}
|
|
}
|
|
}
|