@mmerterden/multi-agent-pipeline 11.2.0 → 11.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/README.md +2 -2
- package/docs/FIGMA_PIPELINE.md +12 -25
- package/docs/architecture.md +3 -5
- package/docs/features.md +8 -8
- package/install/_dev-only-files.mjs +0 -6
- package/install/claude.mjs +33 -15
- package/install/copilot.mjs +16 -14
- package/install/templates/copilot-instructions.md +3 -3
- package/package.json +1 -1
- package/pipeline/commands/{multi-agent.md → multi-agent/SKILL.md} +39 -39
- package/pipeline/commands/multi-agent/{analysis.md → analysis/SKILL.md} +18 -18
- package/pipeline/commands/multi-agent/{analysis-resolve.md → analysis-resolve/SKILL.md} +4 -4
- package/pipeline/commands/multi-agent/{autopilot.md → autopilot/SKILL.md} +4 -4
- package/pipeline/commands/multi-agent/{build-optimize.md → build-optimize/SKILL.md} +1 -1
- package/pipeline/commands/multi-agent/{channels.md → channels/SKILL.md} +12 -12
- package/pipeline/commands/multi-agent/{dev.md → dev/SKILL.md} +4 -4
- package/pipeline/commands/multi-agent/{dev-autopilot.md → dev-autopilot/SKILL.md} +4 -4
- package/pipeline/commands/multi-agent/{dev-local.md → dev-local/SKILL.md} +5 -5
- package/pipeline/commands/multi-agent/{dev-local-autopilot.md → dev-local-autopilot/SKILL.md} +4 -4
- package/pipeline/commands/multi-agent/{finish.md → finish/SKILL.md} +6 -6
- package/pipeline/commands/multi-agent/{generate.md → generate/SKILL.md} +3 -3
- package/pipeline/commands/multi-agent/{help.md → help/SKILL.md} +4 -4
- package/pipeline/commands/multi-agent/{local.md → local/SKILL.md} +5 -5
- package/pipeline/commands/multi-agent/{local-autopilot.md → local-autopilot/SKILL.md} +5 -5
- package/pipeline/commands/multi-agent/{manual-test.md → manual-test/SKILL.md} +1 -1
- package/pipeline/commands/multi-agent/refactor/SKILL.md +257 -0
- package/pipeline/commands/multi-agent/{resume.md → resume/SKILL.md} +1 -1
- package/pipeline/commands/multi-agent/{review.md → review/SKILL.md} +5 -5
- package/pipeline/commands/multi-agent/{setup.md → setup/SKILL.md} +1 -1
- package/pipeline/commands/multi-agent/{sync.md → sync/SKILL.md} +20 -58
- package/pipeline/{commands/multi-agent → multi-agent-refs}/_account-picker.md +2 -2
- package/pipeline/{commands/multi-agent → multi-agent-refs}/_dev-context.md +2 -2
- package/pipeline/{commands/multi-agent → multi-agent-refs}/_repo-picker.md +2 -2
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/android-guide.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/jira.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/wiki.md +7 -7
- package/pipeline/multi-agent-refs/component-dispatch.md +92 -0
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/cross-cli-contract.md +10 -77
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/verify-by-test.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/generate-issue.md +2 -2
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/issue-jira-triad.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/keychain.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/log-format.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/modes.md +2 -2
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/operations.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-0-init.md +10 -10
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-1-analysis.md +6 -6
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-2-planning.md +3 -3
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-3-dev.md +10 -10
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-4-review.md +8 -8
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-5-test.md +3 -3
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-6-commit.md +4 -4
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-7-report.md +6 -6
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases.md +12 -12
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/progress-contract.md +4 -4
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/swiftui-guide.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/tracker-contract.md +3 -3
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/wiki-capture.md +4 -4
- package/pipeline/preferences-template.json +17 -1
- package/pipeline/rules/figma-pipeline.md +2 -2
- package/pipeline/schemas/prefs.schema.json +0 -34
- package/pipeline/scripts/README.md +1 -3
- package/pipeline/scripts/fixtures/install-layout.tsv +6 -5
- package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
- package/pipeline/scripts/phase-banner.sh +2 -2
- package/pipeline/scripts/review-scope.mjs +94 -0
- package/pipeline/scripts/scan-agent-config.sh +2 -2
- package/pipeline/scripts/smoke-agent-log-cost.sh +1 -1
- package/pipeline/scripts/smoke-agent-model-routing.sh +4 -4
- package/pipeline/scripts/smoke-autopilot-circuit-breaker.sh +2 -2
- package/pipeline/scripts/smoke-channels-approval-gate.sh +2 -2
- package/pipeline/scripts/smoke-channels-flow.sh +5 -5
- package/pipeline/scripts/smoke-clarify.sh +1 -1
- package/pipeline/scripts/smoke-commands-skills-parity.sh +3 -3
- package/pipeline/scripts/smoke-community-gates.sh +1 -1
- package/pipeline/scripts/smoke-compliance-skills.sh +2 -2
- package/pipeline/scripts/smoke-cost-summary.sh +1 -1
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +17 -43
- package/pipeline/scripts/smoke-cross-phase-cohesion.sh +1 -1
- package/pipeline/scripts/smoke-dev-critic.sh +1 -1
- package/pipeline/scripts/smoke-diff-explain.sh +1 -1
- package/pipeline/scripts/smoke-diff-risk.sh +1 -1
- package/pipeline/scripts/smoke-evidence-gate.sh +1 -1
- package/pipeline/scripts/smoke-figma-dispatch.sh +46 -57
- package/pipeline/scripts/smoke-gate-hooks.sh +1 -1
- package/pipeline/scripts/smoke-generate-issue.sh +8 -8
- package/pipeline/scripts/smoke-handoff-contract.sh +3 -3
- package/pipeline/scripts/smoke-identity-isolation.sh +2 -2
- package/pipeline/scripts/smoke-intent-guard.sh +1 -1
- package/pipeline/scripts/smoke-issue-comment-template.sh +2 -2
- package/pipeline/scripts/smoke-issue-jira-triad.sh +4 -4
- package/pipeline/scripts/smoke-language-axis.sh +6 -6
- package/pipeline/scripts/smoke-learnings-ledger.sh +3 -3
- package/pipeline/scripts/smoke-mode-dispatch-drift.sh +16 -16
- package/pipeline/scripts/smoke-model-fallback.sh +3 -3
- package/pipeline/scripts/smoke-multi-repo-integration.sh +2 -2
- package/pipeline/scripts/smoke-multi-repo-worktree.sh +1 -1
- package/pipeline/scripts/smoke-no-token-prompt.sh +5 -5
- package/pipeline/scripts/smoke-phase-0-multi-repo.sh +1 -1
- package/pipeline/scripts/smoke-phase-6-multi.sh +1 -1
- package/pipeline/scripts/smoke-phase4-gates.sh +45 -0
- package/pipeline/scripts/smoke-plan-approval-gate.sh +5 -5
- package/pipeline/scripts/smoke-plan-todos.sh +3 -3
- package/pipeline/scripts/smoke-pr-review-actions.sh +3 -3
- package/pipeline/scripts/smoke-prefs-language.sh +1 -1
- package/pipeline/scripts/smoke-progress-contract.sh +2 -2
- package/pipeline/scripts/smoke-push-retry.sh +1 -1
- package/pipeline/scripts/smoke-repo-map.sh +2 -2
- package/pipeline/scripts/smoke-shadow-git.sh +1 -1
- package/pipeline/scripts/smoke-skill-authoring.sh +4 -9
- package/pipeline/scripts/smoke-tasklist-ordering.sh +10 -10
- package/pipeline/scripts/smoke-test-gap.sh +1 -1
- package/pipeline/scripts/smoke-token-budget.sh +1 -1
- package/pipeline/scripts/smoke-token-preflight.sh +2 -2
- package/pipeline/scripts/smoke-tracker-contract.sh +13 -13
- package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +5 -5
- package/pipeline/scripts/smoke-triage-memory.sh +2 -2
- package/pipeline/scripts/smoke-update-check.sh +1 -1
- package/pipeline/scripts/smoke-url-enrichment.sh +2 -2
- package/pipeline/scripts/smoke-validator-gates.sh +1 -1
- package/pipeline/scripts/smoke-verify-by-test.sh +3 -3
- package/pipeline/scripts/smoke-wiki-integration.sh +9 -33
- package/pipeline/scripts/smoke-work-summary.sh +1 -1
- package/pipeline/scripts/smoke-worktree-path-convention.sh +4 -4
- package/pipeline/scripts/test-integrity-gate.mjs +83 -0
- package/pipeline/scripts/uninstall.mjs +2 -2
- package/pipeline/skills/.skill-manifest.json +40 -160
- package/pipeline/skills/.skills-index.json +3 -372
- package/pipeline/skills/shared/README.md +1 -1
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +3 -3
- package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-finish/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +116 -51
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +8 -30
- package/pipeline/skills/shared/external/compose-components/SKILL.md +14 -14
- package/pipeline/skills/skills-index.md +2 -43
- package/pipeline/commands/multi-agent/refactor.md +0 -188
- package/pipeline/commands/multi-agent/refs/component-dispatch.md +0 -92
- package/pipeline/scripts/smoke-existing-discovery-gate.sh +0 -71
- package/pipeline/scripts/smoke-figma-android-parity.sh +0 -148
- package/pipeline/scripts/smoke-figma-credential-store.sh +0 -105
- package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +0 -177
- package/pipeline/scripts/smoke-figma-sync.sh +0 -149
- package/pipeline/scripts/smoke-sync-delegation.sh +0 -74
- package/pipeline/skills/figma-android/README.md +0 -38
- package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +0 -62
- package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +0 -158
- package/pipeline/skills/figma-android/figma-component-test/SKILL.md +0 -120
- package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +0 -35
- package/pipeline/skills/figma-android/figma-to-component/SKILL.md +0 -124
- package/pipeline/skills/figma-common/README.md +0 -64
- package/pipeline/skills/figma-common/figma-bottom-sheets/SKILL.md +0 -152
- package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +0 -282
- package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +0 -503
- package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +0 -288
- package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +0 -362
- package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +0 -206
- package/pipeline/skills/figma-common/figma-commit/REVIEW.md +0 -337
- package/pipeline/skills/figma-common/figma-commit/SKILL.md +0 -216
- package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +0 -223
- package/pipeline/skills/figma-common/figma-component-start/SKILL.md +0 -251
- package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +0 -78
- package/pipeline/skills/figma-common/figma-evolve-component/SKILL.md +0 -61
- package/pipeline/skills/figma-common/figma-fix/SKILL.md +0 -321
- package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +0 -542
- package/pipeline/skills/figma-common/figma-issue/SKILL.md +0 -750
- package/pipeline/skills/figma-common/figma-iterate/SKILL.md +0 -208
- package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +0 -1020
- package/pipeline/skills/figma-common/figma-mend/SKILL.md +0 -331
- package/pipeline/skills/figma-common/figma-navigation/SKILL.md +0 -156
- package/pipeline/skills/figma-common/figma-overlays/SKILL.md +0 -142
- package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +0 -398
- package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +0 -104
- package/pipeline/skills/figma-common/figma-review/SKILL.md +0 -400
- package/pipeline/skills/figma-common/figma-setup/SKILL.md +0 -514
- package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +0 -592
- package/pipeline/skills/figma-common/figma-skip/SKILL.md +0 -129
- package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +0 -105
- package/pipeline/skills/figma-common/figma-ui-patterns/patterns/animated-gradient-border.md +0 -116
- package/pipeline/skills/figma-common/figma-utility/SKILL.md +0 -274
- package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +0 -808
- package/pipeline/skills/figma-common/figma-validate/SKILL.md +0 -633
- package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +0 -716
- package/pipeline/skills/figma-common/performance-review-next/SKILL.md +0 -238
- package/pipeline/skills/figma-common/performance-start/SKILL.md +0 -430
- package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +0 -706
- package/pipeline/skills/figma-common/performance-tour/SKILL.md +0 -423
- package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +0 -67
- package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +0 -178
- package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +0 -184
- package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +0 -219
- package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +0 -274
- package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +0 -416
- package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +0 -57
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +0 -307
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +0 -119
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +0 -174
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +0 -333
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +0 -368
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +0 -393
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +0 -617
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +0 -352
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +0 -337
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +0 -206
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +0 -235
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +0 -214
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +0 -902
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +0 -156
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +0 -175
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +0 -176
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +0 -333
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +0 -412
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +0 -336
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +0 -705
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +0 -332
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +0 -380
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +0 -262
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +0 -482
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +0 -274
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +0 -636
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +0 -142
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +0 -547
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +0 -39
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +0 -659
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +0 -580
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +0 -51
- package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +0 -183
- package/pipeline/skills/figma-ios/figma-to-component/reference/analytics-events.md +0 -64
- package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +0 -531
- package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-api.md +0 -89
- package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-xhtml.md +0 -155
- package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +0 -196
- package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +0 -57
- package/pipeline/skills/figma-ios/figma-to-component/reference/localization-naming.md +0 -89
- package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +0 -227
- package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +0 -157
- package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +0 -90
- package/pipeline/skills/figma-ios/figma-to-component/reference/registry.md +0 -116
- package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +0 -153
- package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +0 -130
- package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +0 -218
- package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +0 -188
- package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +0 -93
- package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +0 -98
- package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +0 -261
- package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +0 -147
- package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +0 -182
- package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +0 -185
- package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +0 -609
- package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +0 -332
- package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +0 -261
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +0 -184
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +0 -188
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +0 -768
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +0 -191
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +0 -420
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.example.json +0 -9
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +0 -336
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +0 -391
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +0 -292
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/__init__.py +0 -1
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +0 -93
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +0 -299
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_backfill_status.py +0 -343
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +0 -206
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update_http.py +0 -149
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_phase_clis.py +0 -281
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +0 -332
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +0 -176
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_review.py +0 -98
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue.py +0 -298
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +0 -195
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +0 -1298
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +0 -228
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +0 -1089
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +0 -141
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +0 -106
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +0 -162
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +0 -105
- package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +0 -179
- package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +0 -260
- package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +0 -260
- package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +0 -86
- package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +0 -321
- package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +0 -1470
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +0 -176
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +0 -147
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase7a.py +0 -629
- /package/pipeline/commands/multi-agent/{delete.md → delete/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{diff-explain.md → diff-explain/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{garbage-collect.md → garbage-collect/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{issue.md → issue/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{jira.md → jira/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{kill.md → kill/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{language.md → language/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{log.md → log/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{prune-logs.md → prune-logs/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{purge.md → purge/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{scan.md → scan/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{search.md → search/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{stack.md → stack/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{status.md → status/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{test.md → test/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{update.md → update/SKILL.md} +0 -0
- /package/pipeline/{commands/multi-agent → multi-agent-refs}/_input-parser.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/analysis-template.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/audit-guide.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/backend-guide.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/confluence.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/issue-comment.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr-review-actions.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/conventions-defaults.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/autopilot-circuit-breaker.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/dev-critic.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/external-context-injection.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/model-fallback.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/plan-todos.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/prior-fix-detection.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/repo-map.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/shadow-git.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/frontend-guide.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/knowledge.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/multi-repo-integration-build.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/picker-contract.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/rules.md +0 -0
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
# Localization:
|
|
22
22
|
# PHASE_LANG=en (default) | tr - when set to tr, canonical labels resolve to
|
|
23
23
|
# Turkish. The `auto` sentinel in place of [name] triggers a table lookup.
|
|
24
|
-
# Canonical label set mirrors pipeline/
|
|
24
|
+
# Canonical label set mirrors pipeline/multi-agent-refs/phases.md.
|
|
25
25
|
#
|
|
26
26
|
# Output is colored when stdout is a TTY (TERM != dumb). Plain otherwise so
|
|
27
27
|
# logs and CI artifacts stay readable. Always written to stdout - log
|
|
@@ -32,7 +32,7 @@ set -uo pipefail
|
|
|
32
32
|
PHASE_LANG="${PHASE_LANG:-en}"
|
|
33
33
|
|
|
34
34
|
# Canonical phase label table. Keep synced with
|
|
35
|
-
# pipeline/
|
|
35
|
+
# pipeline/multi-agent-refs/phases.md and the table in
|
|
36
36
|
# pipeline/skills/shared/multi-agent/SKILL.md.
|
|
37
37
|
phase_label() {
|
|
38
38
|
local phase="$1" lang="${2:-en}"
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @file review-scope.mjs - v11.3.0
|
|
4
|
+
*
|
|
5
|
+
* Diff-complexity gate for Phase 4 Stage 2. On trivial diffs, every reviewer
|
|
6
|
+
* model agrees and the 2nd/3rd model + triage cost is paid for nothing (a
|
|
7
|
+
* recurring practitioner complaint about multi-model review). This decides how
|
|
8
|
+
* many reviewers to dispatch from the deterministic diff-risk report - no LLM.
|
|
9
|
+
*
|
|
10
|
+
* Pure function of the diff-risk JSON (read on stdin or --file). A diff is
|
|
11
|
+
* "trivial" (→ single reviewer) only when ALL hold:
|
|
12
|
+
* - total churn (loc_added + loc_removed) <= --loc-floor (default 20)
|
|
13
|
+
* - totals.max_score < --risk-floor (default 3.0)
|
|
14
|
+
* - NO file carries a high-stakes signal: security_path, migration,
|
|
15
|
+
* public_api, no_test_change, test_lines_removed
|
|
16
|
+
* Otherwise → full (the CLI-aware set: 2 on Claude Code, 3 on Copilot CLI).
|
|
17
|
+
*
|
|
18
|
+
* Conservative by design: any doubt → full review. Skipping reviewers trades
|
|
19
|
+
* coverage for cost, so the bar for "trivial" is deliberately high.
|
|
20
|
+
*
|
|
21
|
+
* Usage:
|
|
22
|
+
* node diff-risk-score.mjs --base B --head H | node review-scope.mjs
|
|
23
|
+
* node test-review-scope: node review-scope.mjs --file risk.json --loc-floor 20 --risk-floor 3.0
|
|
24
|
+
*
|
|
25
|
+
* Output (stdout, JSON): { scope: "single"|"full", reason, churn, maxScore, blockers }
|
|
26
|
+
* Exit 0 always. Invalid/empty input → fail SAFE to "full" (never under-review).
|
|
27
|
+
*/
|
|
28
|
+
import { readFileSync } from "node:fs";
|
|
29
|
+
|
|
30
|
+
const args = process.argv.slice(2);
|
|
31
|
+
const num = (flag, dflt) => {
|
|
32
|
+
const i = args.indexOf(flag);
|
|
33
|
+
return i !== -1 && args[i + 1] != null ? Number(args[i + 1]) : dflt;
|
|
34
|
+
};
|
|
35
|
+
const LOC_FLOOR = num("--loc-floor", 20);
|
|
36
|
+
const RISK_FLOOR = num("--risk-floor", 3.0);
|
|
37
|
+
const fileFlag = args.indexOf("--file");
|
|
38
|
+
|
|
39
|
+
const HIGH_STAKES = new Set([
|
|
40
|
+
"security_path",
|
|
41
|
+
"migration",
|
|
42
|
+
"public_api",
|
|
43
|
+
"no_test_change",
|
|
44
|
+
"test_lines_removed",
|
|
45
|
+
]);
|
|
46
|
+
|
|
47
|
+
function readInput() {
|
|
48
|
+
try {
|
|
49
|
+
return fileFlag !== -1 && args[fileFlag + 1]
|
|
50
|
+
? readFileSync(args[fileFlag + 1], "utf8")
|
|
51
|
+
: readFileSync(0, "utf8");
|
|
52
|
+
} catch {
|
|
53
|
+
return "";
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function emit(o) {
|
|
58
|
+
process.stdout.write(JSON.stringify(o));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function main() {
|
|
62
|
+
let report;
|
|
63
|
+
try {
|
|
64
|
+
report = JSON.parse(readInput());
|
|
65
|
+
} catch {
|
|
66
|
+
emit({ scope: "full", reason: "no-risk-data-fail-safe", churn: null, maxScore: null, blockers: [] });
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const t = report?.totals || {};
|
|
71
|
+
const churn = (t.loc_added ?? 0) + (t.loc_removed ?? 0);
|
|
72
|
+
const maxScore = t.max_score ?? 0;
|
|
73
|
+
const files = Array.isArray(report?.files) ? report.files : [];
|
|
74
|
+
|
|
75
|
+
const blockers = [];
|
|
76
|
+
for (const f of files) {
|
|
77
|
+
for (const s of f.signals || []) {
|
|
78
|
+
if (HIGH_STAKES.has(s.name)) blockers.push({ file: f.file, signal: s.name });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const trivial = churn <= LOC_FLOOR && maxScore < RISK_FLOOR && blockers.length === 0;
|
|
83
|
+
const reason = trivial
|
|
84
|
+
? `trivial: churn ${churn}<=${LOC_FLOOR}, maxScore ${maxScore}<${RISK_FLOOR}, no high-stakes signals`
|
|
85
|
+
: blockers.length
|
|
86
|
+
? `high-stakes signal(s): ${[...new Set(blockers.map((b) => b.signal))].join(", ")}`
|
|
87
|
+
: churn > LOC_FLOOR
|
|
88
|
+
? `churn ${churn} > ${LOC_FLOOR}`
|
|
89
|
+
: `maxScore ${maxScore} >= ${RISK_FLOOR}`;
|
|
90
|
+
|
|
91
|
+
emit({ scope: trivial ? "single" : "full", reason, churn, maxScore, blockers });
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
main();
|
|
@@ -31,8 +31,8 @@ add "$ROOT/install/templates/claude-hooks.json"
|
|
|
31
31
|
add "$ROOT/install/templates/copilot-instructions.md"
|
|
32
32
|
add "$ROOT/pipeline/preferences-template.json"
|
|
33
33
|
for f in "$ROOT"/pipeline/agents/*.md; do add "$f"; done
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
# (figma component skills + their scripts now live in the ai-*-engineering-toolkit
|
|
35
|
+
# marketplace plugin, not in this repo, so there is nothing figma to scan here.)
|
|
36
36
|
add "$ROOT/pipeline/scripts/agent-guard.sh"
|
|
37
37
|
add "$ROOT/pipeline/scripts/pre-commit-check.sh"
|
|
38
38
|
|
|
@@ -20,7 +20,7 @@ RENDERER="$ROOT/pipeline/scripts/render-agent-log-cost.sh"
|
|
|
20
20
|
TRACKER="$ROOT/pipeline/scripts/phase-tracker.sh"
|
|
21
21
|
LOG_METRIC="$ROOT/pipeline/scripts/log-metric.sh"
|
|
22
22
|
TABLE="$ROOT/pipeline/scripts/cost-table.json"
|
|
23
|
-
LOG_FORMAT_DOC="$ROOT/pipeline/
|
|
23
|
+
LOG_FORMAT_DOC="$ROOT/pipeline/multi-agent-refs/phases/log-format.md"
|
|
24
24
|
|
|
25
25
|
pass=0
|
|
26
26
|
fail=0
|
|
@@ -15,8 +15,8 @@ set -euo pipefail
|
|
|
15
15
|
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
16
16
|
AGENTS_DIR="$ROOT/pipeline/agents"
|
|
17
17
|
ORCH_SKILL="$ROOT/pipeline/skills/shared/core/multi-agent/SKILL.md"
|
|
18
|
-
ORCH_CMD="$ROOT/pipeline/commands/multi-agent.md"
|
|
19
|
-
PHASE4="$ROOT/pipeline/
|
|
18
|
+
ORCH_CMD="$ROOT/pipeline/commands/multi-agent/SKILL.md"
|
|
19
|
+
PHASE4="$ROOT/pipeline/multi-agent-refs/phases/phase-4-review.md"
|
|
20
20
|
|
|
21
21
|
pass=0
|
|
22
22
|
fail=0
|
|
@@ -66,9 +66,9 @@ fi
|
|
|
66
66
|
|
|
67
67
|
# --- 4b: orchestrator command file references ---
|
|
68
68
|
if grep -q 'preferredModel' "$ORCH_CMD"; then
|
|
69
|
-
record_pass "commands/multi-agent.md references preferredModel"
|
|
69
|
+
record_pass "commands/multi-agent/SKILL.md references preferredModel"
|
|
70
70
|
else
|
|
71
|
-
record_fail "commands/multi-agent.md missing preferredModel reference"
|
|
71
|
+
record_fail "commands/multi-agent/SKILL.md missing preferredModel reference"
|
|
72
72
|
fi
|
|
73
73
|
|
|
74
74
|
# --- 5: Phase 4 review doc references override ---
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
set -uo pipefail
|
|
9
9
|
|
|
10
10
|
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
11
|
-
DOC="$ROOT/pipeline/
|
|
12
|
-
MODES="$ROOT/pipeline/
|
|
11
|
+
DOC="$ROOT/pipeline/multi-agent-refs/features/autopilot-circuit-breaker.md"
|
|
12
|
+
MODES="$ROOT/pipeline/multi-agent-refs/phases/modes.md"
|
|
13
13
|
|
|
14
14
|
PASS=0; FAIL=0
|
|
15
15
|
pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
|
|
@@ -13,8 +13,8 @@ set -euo pipefail
|
|
|
13
13
|
|
|
14
14
|
HERE="$(cd "$(dirname "$0")" && pwd)"
|
|
15
15
|
ROOT="$(cd "$HERE/../.." && pwd)"
|
|
16
|
-
CHANNELS="$ROOT/pipeline/commands/multi-agent/channels.md"
|
|
17
|
-
PHASE7="$ROOT/pipeline/
|
|
16
|
+
CHANNELS="$ROOT/pipeline/commands/multi-agent/channels/SKILL.md"
|
|
17
|
+
PHASE7="$ROOT/pipeline/multi-agent-refs/phases/phase-7-report.md"
|
|
18
18
|
|
|
19
19
|
PASS=0
|
|
20
20
|
FAIL=0
|
|
@@ -18,13 +18,13 @@
|
|
|
18
18
|
set -uo pipefail
|
|
19
19
|
|
|
20
20
|
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
21
|
-
CLAUDE_CMD="$ROOT/pipeline/commands/multi-agent/channels.md"
|
|
21
|
+
CLAUDE_CMD="$ROOT/pipeline/commands/multi-agent/channels/SKILL.md"
|
|
22
22
|
COPILOT_SKILL="$ROOT/pipeline/skills/shared/core/multi-agent-channels/SKILL.md"
|
|
23
|
-
ENRICH_CMD="$ROOT/pipeline/commands/multi-agent/enrich.md"
|
|
23
|
+
ENRICH_CMD="$ROOT/pipeline/commands/multi-agent/enrich/SKILL.md"
|
|
24
24
|
ENRICH_SKILL_DIR="$ROOT/pipeline/skills/shared/core/multi-agent-enrich"
|
|
25
|
-
PHASE7="$ROOT/pipeline/
|
|
26
|
-
MODES="$ROOT/pipeline/
|
|
27
|
-
WIKI_CAPTURE="$ROOT/pipeline/
|
|
25
|
+
PHASE7="$ROOT/pipeline/multi-agent-refs/phases/phase-7-report.md"
|
|
26
|
+
MODES="$ROOT/pipeline/multi-agent-refs/phases/modes.md"
|
|
27
|
+
WIKI_CAPTURE="$ROOT/pipeline/multi-agent-refs/wiki-capture.md"
|
|
28
28
|
SCHEMA="$ROOT/pipeline/schemas/prefs.schema.json"
|
|
29
29
|
MIGRATE="$ROOT/pipeline/scripts/migrate-prefs.mjs"
|
|
30
30
|
TEMPLATE="$ROOT/pipeline/preferences-template.json"
|
|
@@ -24,7 +24,7 @@ ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
|
24
24
|
AGENT="$ROOT/pipeline/agents/task-clarifier.md"
|
|
25
25
|
SCHEMA="$ROOT/pipeline/schemas/clarify-output.schema.json"
|
|
26
26
|
PREFS_SCHEMA="$ROOT/pipeline/schemas/prefs.schema.json"
|
|
27
|
-
PHASE_DOC="$ROOT/pipeline/
|
|
27
|
+
PHASE_DOC="$ROOT/pipeline/multi-agent-refs/phases/phase-0-init.md"
|
|
28
28
|
|
|
29
29
|
pass=0
|
|
30
30
|
fail=0
|
|
@@ -36,7 +36,7 @@ fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
|
|
|
36
36
|
# Underscore-prefixed files (e.g. _account-picker.md) are internal fragments
|
|
37
37
|
# loaded by other commands via Read; they're not invocable slash commands and
|
|
38
38
|
# intentionally have no matching skill.
|
|
39
|
-
CMDS=$(find "$CMDS_DIR" -
|
|
39
|
+
CMDS=$(find "$CMDS_DIR" -mindepth 2 -maxdepth 2 -name "SKILL.md" -exec dirname {} \; | xargs -n1 basename | sort)
|
|
40
40
|
|
|
41
41
|
# help.md in commands maps to multi-agent-help skill; the main "multi-agent"
|
|
42
42
|
# skill covers the behavior documented across multiple command files, so we
|
|
@@ -67,7 +67,7 @@ echo "→ Checking that every multi-agent-* skill has a corresponding command"
|
|
|
67
67
|
SKILLS=$(find "$SKILLS_DIR" -maxdepth 1 -type d -name "multi-agent-*" -exec basename {} \; | sed 's/^multi-agent-//' | sort)
|
|
68
68
|
|
|
69
69
|
for skill in $SKILLS; do
|
|
70
|
-
cmd_file="$CMDS_DIR/$skill.md"
|
|
70
|
+
cmd_file="$CMDS_DIR/$skill/SKILL.md"
|
|
71
71
|
# A few skills are Copilot-CLI-style conveniences without a Claude slash equivalent:
|
|
72
72
|
case "$skill" in
|
|
73
73
|
autopilot | dev-autopilot) # dash-style shortcut skills, the flags are documented in help.md
|
|
@@ -76,7 +76,7 @@ for skill in $SKILLS; do
|
|
|
76
76
|
;;
|
|
77
77
|
esac
|
|
78
78
|
if [ -f "$cmd_file" ]; then
|
|
79
|
-
pass "skills/shared/multi-agent-$skill/ ↔ commands/multi-agent/$skill.md"
|
|
79
|
+
pass "skills/shared/multi-agent-$skill/ ↔ commands/multi-agent/$skill/SKILL.md"
|
|
80
80
|
else
|
|
81
81
|
fail "skills/shared/multi-agent-$skill/ has no matching command"
|
|
82
82
|
fi
|
|
@@ -24,9 +24,9 @@ APPLE_SKILL="$ROOT/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md
|
|
|
24
24
|
GOOGLE_SKILL="$ROOT/pipeline/skills/shared/core/google-play-compliance/SKILL.md"
|
|
25
25
|
SIM_TEST="$ROOT/pipeline/commands/sim-test.md"
|
|
26
26
|
SEC_AUDITOR="$ROOT/pipeline/agents/security-auditor.md"
|
|
27
|
-
REVIEW_CMD="$ROOT/pipeline/commands/multi-agent/review.md"
|
|
27
|
+
REVIEW_CMD="$ROOT/pipeline/commands/multi-agent/review/SKILL.md"
|
|
28
28
|
REVIEW_SKILL="$ROOT/pipeline/skills/shared/core/multi-agent-review/SKILL.md"
|
|
29
|
-
CHANNELS_CMD="$ROOT/pipeline/commands/multi-agent/channels.md"
|
|
29
|
+
CHANNELS_CMD="$ROOT/pipeline/commands/multi-agent/channels/SKILL.md"
|
|
30
30
|
CHANNELS_SKILL="$ROOT/pipeline/skills/shared/core/multi-agent-channels/SKILL.md"
|
|
31
31
|
|
|
32
32
|
PASS=0
|
|
@@ -18,7 +18,7 @@ ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
|
18
18
|
RENDERER="$ROOT/pipeline/scripts/render-cost-summary.sh"
|
|
19
19
|
TABLE="$ROOT/pipeline/scripts/cost-table.json"
|
|
20
20
|
SCHEMA="$ROOT/pipeline/schemas/prefs.schema.json"
|
|
21
|
-
CHANNELS_DOC="$ROOT/pipeline/commands/multi-agent/channels.md"
|
|
21
|
+
CHANNELS_DOC="$ROOT/pipeline/commands/multi-agent/channels/SKILL.md"
|
|
22
22
|
|
|
23
23
|
pass=0
|
|
24
24
|
fail=0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
# smoke-cross-cli-behavior.sh - enforces the cross-CLI parity invariant
|
|
3
|
-
# defined in ~/.claude/
|
|
3
|
+
# defined in ~/.claude/multi-agent-refs/cross-cli-contract.md.
|
|
4
4
|
#
|
|
5
5
|
# This is a behavioral complement to smoke-sync-parity.sh (which tests the
|
|
6
6
|
# parity checker itself). This script asserts the actual Claude Code and
|
|
@@ -41,7 +41,10 @@ fi
|
|
|
41
41
|
# Underscore-prefixed Claude files (e.g. _account-picker.md) are internal
|
|
42
42
|
# fragments lazy-loaded by other commands; they're not invocable on either CLI
|
|
43
43
|
# and intentionally have no Copilot skill counterpart.
|
|
44
|
-
|
|
44
|
+
# Also exclude local-only alias wrappers (frontmatter `local-only: true`) - personal
|
|
45
|
+
# aliases to private marketplace-plugin skills, intentionally Claude-only, no Copilot peer.
|
|
46
|
+
CLAUDE_LIST=$(find "$CLAUDE_CMDS" -mindepth 2 -maxdepth 2 -name "SKILL.md" 2>/dev/null \
|
|
47
|
+
| while IFS= read -r f; do grep -q "^local-only: true" "$f" || basename "$(dirname "$f")"; done | sort)
|
|
45
48
|
COPILOT_LIST=$(find "$COPILOT_SKILLS" -maxdepth 1 -type d -name "multi-agent-*" -exec basename {} \; 2>/dev/null | sed 's/^multi-agent-//' | sort)
|
|
46
49
|
|
|
47
50
|
if [ "$CLAUDE_LIST" = "$COPILOT_LIST" ]; then
|
|
@@ -69,7 +72,7 @@ DEPRECATED=(
|
|
|
69
72
|
)
|
|
70
73
|
for p in "${DEPRECATED[@]}"; do
|
|
71
74
|
# grep -l returns filenames; empty = no matches
|
|
72
|
-
FOUND=$(grep -l -F -- "$p" "$CLAUDE_CMDS"
|
|
75
|
+
FOUND=$(grep -l -F -- "$p" $(find "$CLAUDE_CMDS" -name SKILL.md 2>/dev/null) 2>/dev/null || true)
|
|
73
76
|
if [ -z "$FOUND" ]; then
|
|
74
77
|
pass "no '$p' in Claude commands"
|
|
75
78
|
else
|
|
@@ -85,7 +88,7 @@ PERSONAL_HARDCODES=(
|
|
|
85
88
|
"${USER}_tkgithub"
|
|
86
89
|
)
|
|
87
90
|
for p in "${PERSONAL_HARDCODES[@]}"; do
|
|
88
|
-
FOUND=$(grep -l -F -- "$p" "$CLAUDE_CMDS"
|
|
91
|
+
FOUND=$(grep -l -F -- "$p" $(find "$CLAUDE_CMDS" -name SKILL.md 2>/dev/null) 2>/dev/null || true)
|
|
89
92
|
if [ -z "$FOUND" ]; then
|
|
90
93
|
pass "no '$p' leaked into Claude commands"
|
|
91
94
|
else
|
|
@@ -97,13 +100,13 @@ done
|
|
|
97
100
|
echo ""
|
|
98
101
|
echo "→ 4. Canonical placeholders present (sanity)"
|
|
99
102
|
# These MUST exist (regressions would mean someone undid a drift fix)
|
|
100
|
-
if grep -q -F "{owner}" "$CLAUDE_CMDS/sync.md" 2>/dev/null; then
|
|
103
|
+
if grep -q -F "{owner}" "$CLAUDE_CMDS/sync/SKILL.md" 2>/dev/null; then
|
|
101
104
|
pass "sync.md uses canonical '{owner}'"
|
|
102
105
|
else
|
|
103
106
|
fail "sync.md missing '{owner}' - drift fix may have regressed"
|
|
104
107
|
fi
|
|
105
108
|
|
|
106
|
-
if grep -q -F "{website-host}" "$CLAUDE_CMDS/sync.md" 2>/dev/null; then
|
|
109
|
+
if grep -q -F "{website-host}" "$CLAUDE_CMDS/sync/SKILL.md" 2>/dev/null; then
|
|
107
110
|
pass "sync.md uses canonical '{website-host}'"
|
|
108
111
|
else
|
|
109
112
|
fail "sync.md missing '{website-host}' - drift fix may have regressed"
|
|
@@ -114,7 +117,7 @@ echo ""
|
|
|
114
117
|
echo "→ 5. Canonical project-name vocabulary in log.md"
|
|
115
118
|
CANONICAL_PROJECTS=("my-ui-components" "my-figma-app" "my-ios-app")
|
|
116
119
|
for c in "${CANONICAL_PROJECTS[@]}"; do
|
|
117
|
-
if grep -q -F -- "$c" "$CLAUDE_CMDS/log.md" 2>/dev/null; then
|
|
120
|
+
if grep -q -F -- "$c" "$CLAUDE_CMDS/log/SKILL.md" 2>/dev/null; then
|
|
118
121
|
pass "log.md references '$c'"
|
|
119
122
|
else
|
|
120
123
|
fail "log.md missing canonical '$c'"
|
|
@@ -124,7 +127,7 @@ done
|
|
|
124
127
|
# ──────────────────────────────────────────────────────────────────────────
|
|
125
128
|
echo ""
|
|
126
129
|
echo "→ 6. Contract doc exists (required source of truth)"
|
|
127
|
-
CONTRACT="$
|
|
130
|
+
CONTRACT="$HOME/.claude/multi-agent-refs/cross-cli-contract.md"
|
|
128
131
|
if [ -f "$CONTRACT" ]; then
|
|
129
132
|
SIZE=$(wc -l < "$CONTRACT" | tr -d ' ')
|
|
130
133
|
if [ "$SIZE" -ge 100 ]; then
|
|
@@ -138,40 +141,11 @@ fi
|
|
|
138
141
|
|
|
139
142
|
# ──────────────────────────────────────────────────────────────────────────
|
|
140
143
|
echo ""
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
for tree in "${FIGMA_TREES[@]}"; do
|
|
147
|
-
claude_tree="$CLAUDE_SKILLS/$tree"
|
|
148
|
-
claude_note=""
|
|
149
|
-
# /multi-agent:stack parks inactive-platform trees under skills-inactive/.
|
|
150
|
-
# A parked tree is still deployed - count it from its parked location so
|
|
151
|
-
# iOS-stack machines don't fail on the android tree (and vice versa).
|
|
152
|
-
if [ ! -d "$claude_tree" ] && [ -d "$HOME/.claude/skills-inactive/$tree" ]; then
|
|
153
|
-
claude_tree="$HOME/.claude/skills-inactive/$tree"
|
|
154
|
-
claude_note=" (claude: parked by /multi-agent:stack)"
|
|
155
|
-
fi
|
|
156
|
-
copilot_tree="$COPILOT_SKILLS/$tree"
|
|
157
|
-
if [ -d "$claude_tree" ] && [ -d "$copilot_tree" ]; then
|
|
158
|
-
claude_count=$(find "$claude_tree" -maxdepth 1 -mindepth 1 -type d | wc -l | tr -d ' ')
|
|
159
|
-
copilot_count=$(find "$copilot_tree" -maxdepth 1 -mindepth 1 -type d | wc -l | tr -d ' ')
|
|
160
|
-
if [ "$claude_count" -eq "$copilot_count" ]; then
|
|
161
|
-
pass "$tree deployed to both CLIs ($claude_count skills each)$claude_note"
|
|
162
|
-
else
|
|
163
|
-
fail "$tree count mismatch (claude=$claude_count copilot=$copilot_count)$claude_note"
|
|
164
|
-
fi
|
|
165
|
-
elif [ -d "$claude_tree" ] || [ -d "$copilot_tree" ]; then
|
|
166
|
-
fail "$tree deployed to only ONE CLI"
|
|
167
|
-
else
|
|
168
|
-
echo " (tree not installed on either CLI - run \`node install.js --all\` to deploy)"
|
|
169
|
-
fi
|
|
170
|
-
done
|
|
171
|
-
|
|
172
|
-
# ──────────────────────────────────────────────────────────────────────────
|
|
173
|
-
echo ""
|
|
174
|
-
echo "→ 8. Agent personas deployed to both CLIs"
|
|
144
|
+
# Figma/component skill trees no longer ship in the pipeline (v11.2.0+): they
|
|
145
|
+
# live in the marketplace component plugins (ai-ios-engineering-toolkit /
|
|
146
|
+
# multi-agent-plugins), which each CLI loads through its own plugin channel.
|
|
147
|
+
# The pipeline therefore has no figma tree to deploy or parity-check here.
|
|
148
|
+
echo "→ 7. Agent personas deployed to both CLIs"
|
|
175
149
|
|
|
176
150
|
CLAUDE_AGENTS="$HOME/.claude/agents"
|
|
177
151
|
COPILOT_AGENTS="$HOME/.copilot/agents"
|
|
@@ -207,7 +181,7 @@ fi
|
|
|
207
181
|
# drift across the phase doc, the schema, and the consensus block.
|
|
208
182
|
echo "→ reviewer-count contract (Claude=2, Copilot=3)"
|
|
209
183
|
REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
210
|
-
P4="$REPO_ROOT/pipeline/
|
|
184
|
+
P4="$REPO_ROOT/pipeline/multi-agent-refs/phases/phase-4-review.md"
|
|
211
185
|
REVSCHEMA="$REPO_ROOT/pipeline/schemas/reviewer-output.schema.json"
|
|
212
186
|
TRSCHEMA="$REPO_ROOT/pipeline/schemas/triage-output.schema.json"
|
|
213
187
|
if grep -qiE "Claude Code (dispatches|=|:) ?2|2-model" "$P4" && grep -qiE "Copilot CLI (dispatches|=|:) ?3|3-model" "$P4"; then
|
|
@@ -16,7 +16,7 @@ set -euo pipefail
|
|
|
16
16
|
|
|
17
17
|
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
18
18
|
AGENT="$ROOT/pipeline/agents/dev-critic.md"
|
|
19
|
-
PHASE_DOC="$ROOT/pipeline/
|
|
19
|
+
PHASE_DOC="$ROOT/pipeline/multi-agent-refs/phases/phase-3-dev.md"
|
|
20
20
|
PREFS_SCHEMA="$ROOT/pipeline/schemas/prefs.schema.json"
|
|
21
21
|
CRITIC_SCHEMA="$ROOT/pipeline/schemas/dev-critic-output.schema.json"
|
|
22
22
|
|
|
@@ -28,7 +28,7 @@ TMP=$(mktemp -d)
|
|
|
28
28
|
|
|
29
29
|
# ──────────────────────────────────────────────────────────────────────────
|
|
30
30
|
echo "→ 1. Command + skill files exist"
|
|
31
|
-
[ -f "$REPO_ROOT/pipeline/commands/multi-agent/diff-explain.md" ] && pass "diff-explain.md present" || fail "diff-explain.md missing"
|
|
31
|
+
[ -f "$REPO_ROOT/pipeline/commands/multi-agent/diff-explain/SKILL.md" ] && pass "diff-explain.md present" || fail "diff-explain.md missing"
|
|
32
32
|
[ -f "$REPO_ROOT/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md" ] && pass "multi-agent-diff-explain SKILL.md present" || fail "Copilot peer missing"
|
|
33
33
|
[ -x "$SCRIPT" ] && pass "diff-explain.mjs is executable" || fail "diff-explain.mjs not executable"
|
|
34
34
|
|
|
@@ -22,7 +22,7 @@ ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
|
22
22
|
SCORE="$ROOT/pipeline/scripts/diff-risk-score.mjs"
|
|
23
23
|
VALIDATE="$ROOT/pipeline/scripts/validate-diff-risk.mjs"
|
|
24
24
|
SCHEMA="$ROOT/pipeline/schemas/diff-risk.schema.json"
|
|
25
|
-
PHASE4="$ROOT/pipeline/
|
|
25
|
+
PHASE4="$ROOT/pipeline/multi-agent-refs/phases/phase-4-review.md"
|
|
26
26
|
REVIEWER="$ROOT/pipeline/agents/code-reviewer.md"
|
|
27
27
|
PREFS="$ROOT/pipeline/schemas/prefs.schema.json"
|
|
28
28
|
FIX_IOS="$ROOT/pipeline/scripts/fixtures/diff-risk-ios.diff"
|
|
@@ -80,7 +80,7 @@ echo ""
|
|
|
80
80
|
echo "→ 5. Wiring: phase docs reference the gate"
|
|
81
81
|
GREP_HITS=0
|
|
82
82
|
for doc in phase-3-dev phase-4-review phase-6-commit; do
|
|
83
|
-
grep -q "evidence-gate" "$ROOT/pipeline/
|
|
83
|
+
grep -q "evidence-gate" "$ROOT/pipeline/multi-agent-refs/phases/$doc.md" && GREP_HITS=$((GREP_HITS+1))
|
|
84
84
|
done
|
|
85
85
|
if [ "$GREP_HITS" -ge 2 ]; then
|
|
86
86
|
pass "evidence-gate referenced in $GREP_HITS phase docs"
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# smoke-figma-dispatch.sh - Phase 3 component dispatch contract.
|
|
2
|
+
# smoke-figma-dispatch.sh - Phase 3 component dispatch contract (plugin-based).
|
|
3
3
|
#
|
|
4
|
-
# Verifies that multi-agent Phase 3
|
|
5
|
-
#
|
|
4
|
+
# Verifies that multi-agent Phase 3 dispatches component tasks to the
|
|
5
|
+
# ai-<platform>-engineering-toolkit MARKETPLACE PLUGIN (create-component,
|
|
6
|
+
# fallback create-ui-component) instead of a bundled figma-to-component skill.
|
|
6
7
|
#
|
|
7
|
-
# Runs offline - scans docs only, no
|
|
8
|
+
# Runs offline - scans docs only, no skill invocation.
|
|
8
9
|
|
|
9
10
|
set -euo pipefail
|
|
10
11
|
|
|
11
12
|
HERE="$(cd "$(dirname "$0")" && pwd)"
|
|
12
13
|
ROOT="$(cd "$HERE/../.." && pwd)"
|
|
13
|
-
PHASE0="$ROOT/pipeline/
|
|
14
|
-
PHASE3="$ROOT/pipeline/
|
|
15
|
-
DISPATCH="$ROOT/pipeline/
|
|
16
|
-
ORCH_IOS="$ROOT/pipeline/skills/figma-ios/figma-to-component/SKILL.md"
|
|
14
|
+
PHASE0="$ROOT/pipeline/multi-agent-refs/phases/phase-0-init.md"
|
|
15
|
+
PHASE3="$ROOT/pipeline/multi-agent-refs/phases/phase-3-dev.md"
|
|
16
|
+
DISPATCH="$ROOT/pipeline/multi-agent-refs/component-dispatch.md"
|
|
17
17
|
|
|
18
18
|
PASS=0
|
|
19
19
|
FAIL=0
|
|
@@ -22,62 +22,47 @@ fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
|
|
|
22
22
|
|
|
23
23
|
[ -f "$PHASE0" ] || { echo "error: $PHASE0 missing" >&2; exit 1; }
|
|
24
24
|
[ -f "$PHASE3" ] || { echo "error: $PHASE3 missing" >&2; exit 1; }
|
|
25
|
-
[ -f "$DISPATCH" ] || { echo "error: $DISPATCH missing
|
|
26
|
-
[ -f "$ORCH_IOS" ] || { echo "error: orchestrator skill missing at $ORCH_IOS (run WS-2 import first)" >&2; exit 1; }
|
|
25
|
+
[ -f "$DISPATCH" ] || { echo "error: $DISPATCH missing" >&2; exit 1; }
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
grep -Fq "$1" "$PHASE3" || grep -Fq "$1" "$DISPATCH"
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
echo "→ 1. Phase 0 classification routes component → figma-to-component"
|
|
35
|
-
if grep -Fq "pipeline/skills/figma-ios/figma-to-component" "$PHASE0"; then
|
|
36
|
-
pass "Phase 0 references the new orchestrator path"
|
|
37
|
-
else
|
|
38
|
-
fail "Phase 0 does NOT reference pipeline/skills/figma-ios/figma-to-component"
|
|
39
|
-
fi
|
|
40
|
-
|
|
41
|
-
if grep -Fq "figma-to-swiftui" "$PHASE0"; then
|
|
42
|
-
fail "Phase 0 still references legacy 'figma-to-swiftui' (expected 'figma-to-component')"
|
|
27
|
+
echo "→ 1. no bundled figma orchestrator remains in the tree"
|
|
28
|
+
if [ -e "$ROOT/pipeline/skills/figma-ios" ] || [ -e "$ROOT/pipeline/skills/figma-android" ] || [ -e "$ROOT/pipeline/skills/figma-common" ]; then
|
|
29
|
+
fail "bundled pipeline/skills/figma-* tree still present (should be plugin-only)"
|
|
43
30
|
else
|
|
44
|
-
pass "
|
|
31
|
+
pass "no pipeline/skills/figma-* tree (component skills live in the plugin)"
|
|
45
32
|
fi
|
|
46
33
|
|
|
47
34
|
echo ""
|
|
48
|
-
echo "→ 2. Phase
|
|
49
|
-
if grep -Fq "
|
|
50
|
-
pass "Phase
|
|
35
|
+
echo "→ 2. Phase 0 routes component tasks to the plugin component skill"
|
|
36
|
+
if grep -Fq "create-component" "$PHASE0"; then
|
|
37
|
+
pass "Phase 0 references the plugin create-component skill"
|
|
51
38
|
else
|
|
52
|
-
fail "Phase
|
|
39
|
+
fail "Phase 0 does NOT reference create-component"
|
|
53
40
|
fi
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
pass "dispatch contract mentions taskType guard"
|
|
41
|
+
if grep -Fq "figma-to-swiftui" "$PHASE0" || grep -Fq "skills/figma-ios/figma-to-component" "$PHASE0"; then
|
|
42
|
+
fail "Phase 0 still references a legacy/bundled figma orchestrator path"
|
|
57
43
|
else
|
|
58
|
-
|
|
44
|
+
pass "Phase 0 has no legacy/bundled figma orchestrator reference"
|
|
59
45
|
fi
|
|
60
46
|
|
|
61
47
|
echo ""
|
|
62
|
-
echo "→ 3. dispatch
|
|
63
|
-
if grep -Fq
|
|
64
|
-
pass "dispatch
|
|
48
|
+
echo "→ 3. dispatch guards taskType and resolves the plugin (dual-name)"
|
|
49
|
+
if grep -Fq 'taskType === "component"' "$DISPATCH"; then
|
|
50
|
+
pass "dispatch mentions taskType guard"
|
|
65
51
|
else
|
|
66
|
-
fail "dispatch missing
|
|
52
|
+
fail "dispatch missing taskType guard"
|
|
67
53
|
fi
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
echo "→ 4. dispatch delegates subphase tracking to orchestrator"
|
|
71
|
-
if grep -Fq "subphases[]" "$DISPATCH" || grep -Fq 'subphases\[\]' "$DISPATCH"; then
|
|
72
|
-
pass "dispatch documents state.phases[3].subphases[] report"
|
|
54
|
+
if grep -Fq "create-component" "$DISPATCH" && grep -Fq "create-ui-component" "$DISPATCH"; then
|
|
55
|
+
pass "dispatch documents dual-name resolution (create-component / create-ui-component)"
|
|
73
56
|
else
|
|
74
|
-
fail "dispatch missing
|
|
57
|
+
fail "dispatch missing dual-name plugin resolution"
|
|
75
58
|
fi
|
|
76
59
|
|
|
77
|
-
|
|
78
|
-
|
|
60
|
+
echo ""
|
|
61
|
+
echo "→ 4. dispatch layer owns subphase state + phase-tracker"
|
|
62
|
+
if grep -Fq 'subphases[]' "$DISPATCH" && grep -Fq "phase-tracker" "$DISPATCH"; then
|
|
63
|
+
pass "dispatch documents state.phases[3].subphases[] + phase-tracker"
|
|
79
64
|
else
|
|
80
|
-
fail "dispatch missing phase-tracker
|
|
65
|
+
fail "dispatch missing subphases[]/phase-tracker documentation"
|
|
81
66
|
fi
|
|
82
67
|
|
|
83
68
|
echo ""
|
|
@@ -87,7 +72,6 @@ if grep -Fq "<!-- progress-contract: applied -->" "$PHASE3"; then
|
|
|
87
72
|
else
|
|
88
73
|
fail "Phase 3 missing the adoption marker"
|
|
89
74
|
fi
|
|
90
|
-
|
|
91
75
|
if grep -Fq "<!-- progress-contract: applied -->" "$PHASE0"; then
|
|
92
76
|
pass "Phase 0 carries the adoption marker"
|
|
93
77
|
else
|
|
@@ -95,28 +79,33 @@ else
|
|
|
95
79
|
fi
|
|
96
80
|
|
|
97
81
|
echo ""
|
|
98
|
-
echo "→ 6. Phase 3 emits dispatch progress
|
|
99
|
-
if grep -qE '→ dispatching
|
|
100
|
-
pass "Phase 3 documents '→ dispatching
|
|
82
|
+
echo "→ 6. Phase 3 emits the plugin dispatch progress line"
|
|
83
|
+
if grep -qE '→ dispatching create-component' "$PHASE3"; then
|
|
84
|
+
pass "Phase 3 documents '→ dispatching create-component <name>' emission"
|
|
101
85
|
else
|
|
102
86
|
fail "Phase 3 missing dispatch progress line"
|
|
103
87
|
fi
|
|
104
88
|
|
|
105
89
|
echo ""
|
|
106
|
-
echo "→ 7. dispatch has failure + retry semantics
|
|
107
|
-
if grep -Fq "retryCount" "$DISPATCH"
|
|
108
|
-
pass "dispatch documents retryCount
|
|
90
|
+
echo "→ 7. dispatch has failure + retry semantics"
|
|
91
|
+
if grep -Fq "retryCount" "$DISPATCH"; then
|
|
92
|
+
pass "dispatch documents retryCount"
|
|
109
93
|
else
|
|
110
|
-
fail "dispatch missing
|
|
94
|
+
fail "dispatch missing retryCount documentation"
|
|
111
95
|
fi
|
|
112
96
|
|
|
113
97
|
echo ""
|
|
114
|
-
echo "→ 8. dispatch covers multi-repo
|
|
115
|
-
if grep -Fq
|
|
98
|
+
echo "→ 8. dispatch covers multi-repo + intentional cross-CLI divergence"
|
|
99
|
+
if grep -Fq 'state.projects[]' "$DISPATCH"; then
|
|
116
100
|
pass "dispatch documents multi-repo report"
|
|
117
101
|
else
|
|
118
102
|
fail "dispatch missing multi-repo report paragraph"
|
|
119
103
|
fi
|
|
104
|
+
if grep -Fiq "Copilot" "$DISPATCH"; then
|
|
105
|
+
pass "dispatch documents the Copilot cross-CLI divergence"
|
|
106
|
+
else
|
|
107
|
+
fail "dispatch missing cross-CLI divergence note"
|
|
108
|
+
fi
|
|
120
109
|
|
|
121
110
|
echo ""
|
|
122
111
|
echo "══ figma-dispatch smoke: $PASS passed, $FAIL failed ══"
|
|
@@ -62,7 +62,7 @@ else
|
|
|
62
62
|
fi
|
|
63
63
|
|
|
64
64
|
# 4. picker-contract documents the hook template + the phase-enforced caveat
|
|
65
|
-
PC="$ROOT/pipeline/
|
|
65
|
+
PC="$ROOT/pipeline/multi-agent-refs/picker-contract.md"
|
|
66
66
|
if grep -q "claude-hooks.json" "$PC" && grep -q "phase-enforced" "$PC"; then
|
|
67
67
|
pass "picker-contract references the template + the phase-enforced gates caveat"
|
|
68
68
|
else
|