@mmerterden/multi-agent-pipeline 11.1.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 +58 -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/_common.mjs +9 -1
- package/install/_dev-only-files.mjs +0 -6
- package/install/claude.mjs +45 -18
- 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/build-stack-plugins.mjs +1 -1
- 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 +21 -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/backlog/BACKLOG.md +32 -0
- package/pipeline/skills/shared/external/backlog/SKILL.md +49 -0
- package/pipeline/skills/shared/external/compose-components/SKILL.md +14 -14
- package/pipeline/skills/shared/external/skill-creator/SKILL.md +48 -0
- package/pipeline/skills/shared/external/skill-creator/audit.md +59 -0
- package/pipeline/skills/shared/external/skill-creator/checklist.md +32 -0
- package/pipeline/skills/shared/external/skill-creator/examples.md +65 -0
- package/pipeline/skills/shared/external/skill-creator/label-check.md +43 -0
- package/pipeline/skills/shared/external/skill-creator/scripts/audit-panel.js +83 -0
- package/pipeline/skills/shared/external/skill-creator/template.md +67 -0
- package/pipeline/skills/skills-index.md +4 -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
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
#
|
|
3
|
-
# smoke-existing-discovery-gate.sh
|
|
4
|
-
#
|
|
5
|
-
# Asserts the figma-to-component orchestrator has the Phase 1.5 existing-
|
|
6
|
-
# component discovery gate wired in:
|
|
7
|
-
# - phase-1.5-existing-discovery.md exists with the canonical anchors
|
|
8
|
-
# - phase-2-orchestrator ENTRY GATE consults discovery.status
|
|
9
|
-
# - phase-6-code-connect ENTRY GATE skips publish when already mapped
|
|
10
|
-
#
|
|
11
|
-
# This is Defect 10 from the GH1241 stability plan (docs/STABILITY-FIX-PLAN.md).
|
|
12
|
-
|
|
13
|
-
set -euo pipefail
|
|
14
|
-
|
|
15
|
-
SELF_DIR=$(cd "$(dirname "$0")" && pwd)
|
|
16
|
-
PIPELINE_ROOT=$(cd "$SELF_DIR/.." && pwd)
|
|
17
|
-
|
|
18
|
-
cd "$PIPELINE_ROOT"
|
|
19
|
-
|
|
20
|
-
FAIL=0
|
|
21
|
-
|
|
22
|
-
GATE_DOC="skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md"
|
|
23
|
-
PHASE2="skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md"
|
|
24
|
-
PHASE6="skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md"
|
|
25
|
-
|
|
26
|
-
# 1. Phase 1.5 doc exists.
|
|
27
|
-
if [ ! -f "$GATE_DOC" ]; then
|
|
28
|
-
echo "FAIL [smoke-existing-discovery-gate]: $GATE_DOC missing"
|
|
29
|
-
exit 1
|
|
30
|
-
fi
|
|
31
|
-
|
|
32
|
-
# 2. Phase 1.5 contains the four canonical statuses.
|
|
33
|
-
declare -a REQUIRED_STATUSES=(
|
|
34
|
-
"GREENFIELD_OK"
|
|
35
|
-
"ALREADY_MAPPED"
|
|
36
|
-
"EXISTING_SOURCE_NO_CC"
|
|
37
|
-
"GAP_ANALYSIS"
|
|
38
|
-
)
|
|
39
|
-
for st in "${REQUIRED_STATUSES[@]}"; do
|
|
40
|
-
if ! grep -qF "$st" "$GATE_DOC"; then
|
|
41
|
-
echo "FAIL [smoke-existing-discovery-gate]: $GATE_DOC must define status $st"
|
|
42
|
-
FAIL=$((FAIL + 1))
|
|
43
|
-
fi
|
|
44
|
-
done
|
|
45
|
-
|
|
46
|
-
# 3. Phase 1.5 writes to agent-state.discovery.{status,sourcePath,gaps}.
|
|
47
|
-
if ! grep -qE 'discovery.*status|"discovery"' "$GATE_DOC"; then
|
|
48
|
-
echo "FAIL [smoke-existing-discovery-gate]: $GATE_DOC must write to agent-state.discovery"
|
|
49
|
-
FAIL=$((FAIL + 1))
|
|
50
|
-
fi
|
|
51
|
-
|
|
52
|
-
# 4. Phase 2 ENTRY GATE consults discovery.status.
|
|
53
|
-
if ! grep -qE "discovery\.status|agent-state\.discovery" "$PHASE2"; then
|
|
54
|
-
echo "FAIL [smoke-existing-discovery-gate]: $PHASE2 ENTRY GATE must consult discovery.status"
|
|
55
|
-
FAIL=$((FAIL + 1))
|
|
56
|
-
fi
|
|
57
|
-
|
|
58
|
-
# 5. Phase 6 ENTRY GATE skips when ALREADY_MAPPED or .figma.swift exists.
|
|
59
|
-
if ! grep -qE "ALREADY_MAPPED|already published|GAP_ANALYSIS" "$PHASE6"; then
|
|
60
|
-
echo "FAIL [smoke-existing-discovery-gate]: $PHASE6 ENTRY GATE must skip when ALREADY_MAPPED / GAP_ANALYSIS"
|
|
61
|
-
FAIL=$((FAIL + 1))
|
|
62
|
-
fi
|
|
63
|
-
|
|
64
|
-
if [ "$FAIL" -gt 0 ]; then
|
|
65
|
-
echo ""
|
|
66
|
-
echo "smoke-existing-discovery-gate: $FAIL violation(s)."
|
|
67
|
-
echo "Defect 10 contract - see docs/STABILITY-FIX-PLAN.md."
|
|
68
|
-
exit 1
|
|
69
|
-
fi
|
|
70
|
-
|
|
71
|
-
echo "smoke-existing-discovery-gate: ok"
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# smoke-figma-android-parity.sh - WS-7 contract.
|
|
3
|
-
#
|
|
4
|
-
# Verifies the Android platform skill tree under pipeline/skills/figma-android/
|
|
5
|
-
# mirrors the iOS peer for every platform-specific skill required by the
|
|
6
|
-
# figma-to-component orchestrator. Also checks Android-specific details
|
|
7
|
-
# (Kotlin file names, Compose tooling, Paparazzi/Roborazzi references).
|
|
8
|
-
|
|
9
|
-
set -euo pipefail
|
|
10
|
-
|
|
11
|
-
HERE="$(cd "$(dirname "$0")" && pwd)"
|
|
12
|
-
ROOT="$(cd "$HERE/../.." && pwd)"
|
|
13
|
-
IOS_DIR="$ROOT/pipeline/skills/figma-ios"
|
|
14
|
-
ANDROID_DIR="$ROOT/pipeline/skills/figma-android"
|
|
15
|
-
|
|
16
|
-
PASS=0
|
|
17
|
-
FAIL=0
|
|
18
|
-
pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
|
|
19
|
-
fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
|
|
20
|
-
|
|
21
|
-
[ -d "$IOS_DIR" ] || { echo "error: iOS tree missing at $IOS_DIR" >&2; exit 1; }
|
|
22
|
-
[ -d "$ANDROID_DIR" ] || { echo "error: Android tree missing at $ANDROID_DIR" >&2; exit 1; }
|
|
23
|
-
|
|
24
|
-
# Platform-specific skills that MUST exist on both sides.
|
|
25
|
-
REQUIRED=(
|
|
26
|
-
figma-to-component
|
|
27
|
-
figma-component-implement
|
|
28
|
-
figma-component-test
|
|
29
|
-
figma-component-code-connect
|
|
30
|
-
figma-component-wiki
|
|
31
|
-
)
|
|
32
|
-
|
|
33
|
-
echo "→ 1. Android tree has required platform-specific skills"
|
|
34
|
-
for skill in "${REQUIRED[@]}"; do
|
|
35
|
-
if [ -d "$ANDROID_DIR/$skill" ] && [ -f "$ANDROID_DIR/$skill/SKILL.md" ]; then
|
|
36
|
-
pass "$skill present"
|
|
37
|
-
else
|
|
38
|
-
fail "$skill missing"
|
|
39
|
-
fi
|
|
40
|
-
done
|
|
41
|
-
|
|
42
|
-
echo ""
|
|
43
|
-
echo "→ 2. iOS tree has the same required skills (parity source)"
|
|
44
|
-
for skill in "${REQUIRED[@]}"; do
|
|
45
|
-
if [ -d "$IOS_DIR/$skill" ] && [ -f "$IOS_DIR/$skill/SKILL.md" ]; then
|
|
46
|
-
pass "iOS $skill present"
|
|
47
|
-
else
|
|
48
|
-
fail "iOS $skill missing (parity source broken)"
|
|
49
|
-
fi
|
|
50
|
-
done
|
|
51
|
-
|
|
52
|
-
echo ""
|
|
53
|
-
echo "→ 3. Every Android SKILL.md has frontmatter with platform: android"
|
|
54
|
-
for skill in "${REQUIRED[@]}"; do
|
|
55
|
-
f="$ANDROID_DIR/$skill/SKILL.md"
|
|
56
|
-
[ -f "$f" ] || continue
|
|
57
|
-
if ! head -n 1 "$f" | grep -Fxq -- "---"; then
|
|
58
|
-
fail "$skill/SKILL.md missing frontmatter"
|
|
59
|
-
continue
|
|
60
|
-
fi
|
|
61
|
-
if awk '/^---$/{c++; next} c==1' "$f" | grep -Fq "platform: android"; then
|
|
62
|
-
pass "$skill stamped platform: android"
|
|
63
|
-
else
|
|
64
|
-
fail "$skill/SKILL.md missing platform: android stamp"
|
|
65
|
-
fi
|
|
66
|
-
done
|
|
67
|
-
|
|
68
|
-
echo ""
|
|
69
|
-
echo "→ 4. Every Android SKILL.md stamped status: wip-v5 + sourced-from"
|
|
70
|
-
for skill in "${REQUIRED[@]}"; do
|
|
71
|
-
f="$ANDROID_DIR/$skill/SKILL.md"
|
|
72
|
-
[ -f "$f" ] || continue
|
|
73
|
-
grep -q "^status: wip-v5" "$f" && pass "$skill status: wip-v5" || fail "$skill missing status stamp"
|
|
74
|
-
grep -q "^sourced-from: " "$f" && pass "$skill has sourced-from" || fail "$skill missing sourced-from"
|
|
75
|
-
done
|
|
76
|
-
|
|
77
|
-
echo ""
|
|
78
|
-
echo "→ 5. Android implement skill targets Compose + Kotlin"
|
|
79
|
-
IMPL="$ANDROID_DIR/figma-component-implement/SKILL.md"
|
|
80
|
-
if [ -f "$IMPL" ]; then
|
|
81
|
-
if grep -Fq "@Composable" "$IMPL" && grep -Fq "Configuration.kt" "$IMPL" && grep -Fq "@Immutable" "$IMPL"; then
|
|
82
|
-
pass "implement references @Composable + Configuration.kt + @Immutable"
|
|
83
|
-
else
|
|
84
|
-
fail "implement missing Compose/Kotlin markers"
|
|
85
|
-
fi
|
|
86
|
-
fi
|
|
87
|
-
|
|
88
|
-
echo ""
|
|
89
|
-
echo "→ 6. Android test skill targets Compose Testing + Paparazzi"
|
|
90
|
-
TEST="$ANDROID_DIR/figma-component-test/SKILL.md"
|
|
91
|
-
if [ -f "$TEST" ]; then
|
|
92
|
-
if grep -Fq "createComposeRule" "$TEST" && grep -Fq "Paparazzi" "$TEST"; then
|
|
93
|
-
pass "test references createComposeRule + Paparazzi"
|
|
94
|
-
else
|
|
95
|
-
fail "test missing Compose Testing / Paparazzi markers"
|
|
96
|
-
fi
|
|
97
|
-
fi
|
|
98
|
-
|
|
99
|
-
echo ""
|
|
100
|
-
echo "→ 7. Android orchestrator routes Android-specific build (gradleModule)"
|
|
101
|
-
ORCH="$ANDROID_DIR/figma-to-component/SKILL.md"
|
|
102
|
-
if [ -f "$ORCH" ]; then
|
|
103
|
-
if grep -Fq "gradleModule" "$ORCH" && grep -Fq "./gradlew" "$ORCH"; then
|
|
104
|
-
pass "orchestrator references gradleModule + gradlew"
|
|
105
|
-
else
|
|
106
|
-
fail "orchestrator missing gradleModule / gradlew references"
|
|
107
|
-
fi
|
|
108
|
-
fi
|
|
109
|
-
|
|
110
|
-
echo ""
|
|
111
|
-
echo "→ 8. figma-project-config schema declares Android build fields"
|
|
112
|
-
SCHEMA="$ROOT/pipeline/schemas/figma-project-config.schema.json"
|
|
113
|
-
if jq -e '.properties.build.properties.gradleModule' "$SCHEMA" >/dev/null 2>&1 \
|
|
114
|
-
&& jq -e '.properties.build.properties.variant' "$SCHEMA" >/dev/null 2>&1; then
|
|
115
|
-
pass "schema has build.gradleModule + build.variant"
|
|
116
|
-
else
|
|
117
|
-
fail "schema missing Android build fields"
|
|
118
|
-
fi
|
|
119
|
-
|
|
120
|
-
echo ""
|
|
121
|
-
echo "→ 9. Platform enum covers Android"
|
|
122
|
-
if jq -e '.properties.project.properties.platform.enum | index("android")' "$SCHEMA" >/dev/null 2>&1; then
|
|
123
|
-
pass "project.platform enum includes android"
|
|
124
|
-
else
|
|
125
|
-
fail "project.platform enum missing android"
|
|
126
|
-
fi
|
|
127
|
-
|
|
128
|
-
echo ""
|
|
129
|
-
echo "→ 10. README.md present explaining the Android tree"
|
|
130
|
-
README="$ANDROID_DIR/README.md"
|
|
131
|
-
if [ -f "$README" ] && grep -Fq "Android Platform Skills" "$README"; then
|
|
132
|
-
pass "README.md present and descriptive"
|
|
133
|
-
else
|
|
134
|
-
fail "README.md missing or not descriptive"
|
|
135
|
-
fi
|
|
136
|
-
|
|
137
|
-
echo ""
|
|
138
|
-
echo "→ 11. component-dispatch.md ref acknowledges Android routing"
|
|
139
|
-
DISPATCH="$ROOT/pipeline/commands/multi-agent/refs/component-dispatch.md"
|
|
140
|
-
if grep -Fq "android" "$DISPATCH" && grep -Fq "figma-android" "$DISPATCH"; then
|
|
141
|
-
pass "component-dispatch.md routes iOS/Android"
|
|
142
|
-
else
|
|
143
|
-
fail "component-dispatch.md missing Android routing"
|
|
144
|
-
fi
|
|
145
|
-
|
|
146
|
-
echo ""
|
|
147
|
-
echo "══ figma-android-parity smoke: $PASS passed, $FAIL failed ══"
|
|
148
|
-
[ "$FAIL" -eq 0 ]
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# smoke-figma-credential-store.sh - drift gate for figma skill Keychain access.
|
|
3
|
-
#
|
|
4
|
-
# In v8.3.x the figma skill family was migrated off raw `security` calls and
|
|
5
|
-
# routed through the cross-platform credential helper:
|
|
6
|
-
# ~/.claude/lib/credential-store.sh (Claude Code installs)
|
|
7
|
-
# ~/.copilot/lib/credential-store.sh (Copilot CLI installs)
|
|
8
|
-
# Each bash block uses a `CRED_STORE` resolver that picks whichever helper is
|
|
9
|
-
# present so the same source ships to both CLIs.
|
|
10
|
-
#
|
|
11
|
-
# This smoke locks the migration in place. It re-fails the build if anyone
|
|
12
|
-
# reverts a figma skill back to a direct `security find-generic-password` /
|
|
13
|
-
# `add-generic-password` / `delete-generic-password` call against one of OUR
|
|
14
|
-
# managed token names.
|
|
15
|
-
#
|
|
16
|
-
# Two intentional exceptions:
|
|
17
|
-
# - Subprocess calls that read the `Claude Code-credentials` keychain entry
|
|
18
|
-
# (Claude Code's own OAuth-token store, not ours).
|
|
19
|
-
# - Pedagogical references inside CHANGELOG / MIGRATION docs.
|
|
20
|
-
#
|
|
21
|
-
# Exit 0 = no drift, 1 = at least one figma file regressed.
|
|
22
|
-
|
|
23
|
-
set -uo pipefail
|
|
24
|
-
|
|
25
|
-
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
26
|
-
|
|
27
|
-
pass=0
|
|
28
|
-
fail=0
|
|
29
|
-
failures=()
|
|
30
|
-
record_pass() { pass=$((pass + 1)); printf ' \033[0;32mPASS\033[0m %s\n' "$1"; }
|
|
31
|
-
record_fail() { fail=$((fail + 1)); failures+=("$1"); printf ' \033[0;31mFAIL\033[0m %s\n' "$1"; }
|
|
32
|
-
|
|
33
|
-
printf '→ smoke-figma-credential-store: figma skills route Keychain via the helper, not raw `security`\n'
|
|
34
|
-
|
|
35
|
-
# 1. The 8 figma surfaces that were migrated must keep using "$CRED_STORE" or
|
|
36
|
-
# `~/.claude/lib/credential-store.sh` / `~/.copilot/lib/credential-store.sh`.
|
|
37
|
-
MIGRATED_FILES=(
|
|
38
|
-
"pipeline/skills/figma-common/figma-issue/SKILL.md"
|
|
39
|
-
"pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md"
|
|
40
|
-
"pipeline/skills/figma-common/figma-setup/SKILL.md"
|
|
41
|
-
"pipeline/skills/figma-common/figma-validate/SKILL.md"
|
|
42
|
-
"pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md"
|
|
43
|
-
"pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md"
|
|
44
|
-
"pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md"
|
|
45
|
-
"pipeline/skills/figma-ios/figma-to-component/reference/tools.md"
|
|
46
|
-
"pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py"
|
|
47
|
-
)
|
|
48
|
-
|
|
49
|
-
for rel in "${MIGRATED_FILES[@]}"; do
|
|
50
|
-
abs="$ROOT/$rel"
|
|
51
|
-
base="$(basename "$rel")"
|
|
52
|
-
if [ ! -f "$abs" ]; then
|
|
53
|
-
record_fail "$base missing - figma skill set drifted out of inventory"
|
|
54
|
-
continue
|
|
55
|
-
fi
|
|
56
|
-
|
|
57
|
-
# Each of these must reference the helper at least once (resolver, get/set/delete call,
|
|
58
|
-
# or python subprocess wrapper). If the helper reference is gone, the file regressed.
|
|
59
|
-
if grep -qE 'credential-store\.sh|CRED_STORE|keychain\.py' "$abs"; then
|
|
60
|
-
record_pass "$base references the credential helper"
|
|
61
|
-
else
|
|
62
|
-
record_fail "$base lost its credential-store.sh reference"
|
|
63
|
-
fi
|
|
64
|
-
|
|
65
|
-
# Now look for raw `security {find,add,delete}-generic-password` calls
|
|
66
|
-
# against OUR managed tokens. Anything matching one of these service names
|
|
67
|
-
# is a regression. (Claude Code's own `Claude Code-credentials` entry is
|
|
68
|
-
# NOT in this list - the figma-setup wizard is allowed to read it.)
|
|
69
|
-
managed_tokens='FIGMA_ACCESS_TOKEN|FIGMA_MCP_TOKEN|FIGMA_API_USER|JIRA_TOKEN|CONFLUENCE_TOKEN'
|
|
70
|
-
bad=$(grep -nE "security (find|add|delete)-generic-password.*-s [\"']?($managed_tokens)[\"']?" "$abs" 2>/dev/null || true)
|
|
71
|
-
if [ -z "$bad" ]; then
|
|
72
|
-
record_pass "$base contains no raw security calls against managed tokens"
|
|
73
|
-
else
|
|
74
|
-
record_fail "$base regressed to raw security on a managed token:
|
|
75
|
-
$bad"
|
|
76
|
-
fi
|
|
77
|
-
done
|
|
78
|
-
|
|
79
|
-
# 2. The cross-CLI contract doc must point callers at credential-store.sh as
|
|
80
|
-
# the canonical path. If it ever flips back to raw `security` in the
|
|
81
|
-
# "canonical" column the principle is broken.
|
|
82
|
-
CONTRACT="$ROOT/pipeline/commands/multi-agent/refs/cross-cli-contract.md"
|
|
83
|
-
if [ -f "$CONTRACT" ] && grep -qE 'canonical path is .*credential-store\.sh' "$CONTRACT"; then
|
|
84
|
-
record_pass "cross-cli-contract.md declares credential-store.sh as canonical"
|
|
85
|
-
else
|
|
86
|
-
record_fail "cross-cli-contract.md no longer declares credential-store.sh as canonical"
|
|
87
|
-
fi
|
|
88
|
-
|
|
89
|
-
# 3. The Copilot install template allowlist must list the helper, not just raw `security`.
|
|
90
|
-
TEMPLATE="$ROOT/install/templates/copilot-instructions.md"
|
|
91
|
-
if [ -f "$TEMPLATE" ] && grep -q 'credential-store\.sh' "$TEMPLATE"; then
|
|
92
|
-
record_pass "install template allowlist references credential-store.sh"
|
|
93
|
-
else
|
|
94
|
-
record_fail "install template allowlist no longer references credential-store.sh"
|
|
95
|
-
fi
|
|
96
|
-
|
|
97
|
-
# Summary
|
|
98
|
-
total=$((pass + fail))
|
|
99
|
-
printf '\n→ smoke-figma-credential-store: %d/%d passed\n' "$pass" "$total"
|
|
100
|
-
if [ "$fail" -ne 0 ]; then
|
|
101
|
-
printf '\nFailures:\n'
|
|
102
|
-
for f in "${failures[@]}"; do printf ' - %s\n' "$f"; done
|
|
103
|
-
exit 1
|
|
104
|
-
fi
|
|
105
|
-
exit 0
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# smoke-figma-cross-cli-inventory.sh - enforces the cross-CLI parity
|
|
3
|
-
# inventory for the v5.0.0 figma-to-component skill set.
|
|
4
|
-
#
|
|
5
|
-
# Source-tree assertions (does not require install.js to have deployed
|
|
6
|
-
# the skills). Complements smoke-cross-cli-behavior.sh (installed-tree)
|
|
7
|
-
# and smoke-commands-skills-parity.sh (multi-agent commands).
|
|
8
|
-
#
|
|
9
|
-
# Contract source of truth: refs/cross-cli-contract.md section1.1.
|
|
10
|
-
#
|
|
11
|
-
# Verifies:
|
|
12
|
-
# 1. Every platform-specific figma-android skill exists in figma-ios too.
|
|
13
|
-
# 2. Every required figma-* skill from the contract table exists in figma-ios.
|
|
14
|
-
# 3. Every SKILL.md that claims "platform: android" lives under figma-android/.
|
|
15
|
-
# 4. Every SKILL.md that claims "platform: ios" lives under figma-ios/.
|
|
16
|
-
# 5. No orphaned figma skill directories (not in the contract).
|
|
17
|
-
# 6. Contract doc references both figma-ios and figma-android paths.
|
|
18
|
-
|
|
19
|
-
set -euo pipefail
|
|
20
|
-
|
|
21
|
-
HERE="$(cd "$(dirname "$0")" && pwd)"
|
|
22
|
-
ROOT="$(cd "$HERE/../.." && pwd)"
|
|
23
|
-
IOS_DIR="$ROOT/pipeline/skills/figma-ios"
|
|
24
|
-
ANDROID_DIR="$ROOT/pipeline/skills/figma-android"
|
|
25
|
-
COMMON_DIR="$ROOT/pipeline/skills/figma-common"
|
|
26
|
-
CONTRACT="$ROOT/pipeline/commands/multi-agent/refs/cross-cli-contract.md"
|
|
27
|
-
|
|
28
|
-
PASS=0
|
|
29
|
-
FAIL=0
|
|
30
|
-
pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
|
|
31
|
-
fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
|
|
32
|
-
|
|
33
|
-
for d in "$IOS_DIR" "$ANDROID_DIR" "$COMMON_DIR"; do
|
|
34
|
-
[ -d "$d" ] || { echo "error: $d missing" >&2; exit 1; }
|
|
35
|
-
done
|
|
36
|
-
[ -f "$CONTRACT" ] || { echo "error: $CONTRACT missing" >&2; exit 1; }
|
|
37
|
-
|
|
38
|
-
# Platform-specific skills (required on BOTH sides per contract)
|
|
39
|
-
PLATFORM_SPECIFIC=(
|
|
40
|
-
figma-to-component
|
|
41
|
-
figma-component-implement
|
|
42
|
-
figma-component-test
|
|
43
|
-
figma-component-code-connect
|
|
44
|
-
figma-component-wiki
|
|
45
|
-
)
|
|
46
|
-
|
|
47
|
-
# Platform-agnostic (required on at least iOS side today - WS-7b moves to figma-common/)
|
|
48
|
-
COMMON_REQUIRED=(
|
|
49
|
-
figma-component-start
|
|
50
|
-
figma-component-confluence-sync
|
|
51
|
-
figma-component-status-update
|
|
52
|
-
figma-commit
|
|
53
|
-
figma-iteration-commit
|
|
54
|
-
figma-issue
|
|
55
|
-
figma-iterate
|
|
56
|
-
figma-cli-iterate
|
|
57
|
-
figma-cli-lean-iterate
|
|
58
|
-
figma-cli-iterate-mend
|
|
59
|
-
figma-cli-skip
|
|
60
|
-
figma-fix
|
|
61
|
-
figma-mend
|
|
62
|
-
figma-review
|
|
63
|
-
figma-validate
|
|
64
|
-
figma-setup
|
|
65
|
-
figma-remote-mcp-auth
|
|
66
|
-
figma-ui-patterns
|
|
67
|
-
figma-utility
|
|
68
|
-
figma-skip
|
|
69
|
-
figma-form-integration
|
|
70
|
-
figma-price-integration
|
|
71
|
-
)
|
|
72
|
-
|
|
73
|
-
echo "→ 1. Platform-specific skills exist on BOTH figma-ios and figma-android"
|
|
74
|
-
for skill in "${PLATFORM_SPECIFIC[@]}"; do
|
|
75
|
-
ios_ok="false"
|
|
76
|
-
and_ok="false"
|
|
77
|
-
[ -f "$IOS_DIR/$skill/SKILL.md" ] && ios_ok="true"
|
|
78
|
-
[ -f "$ANDROID_DIR/$skill/SKILL.md" ] && and_ok="true"
|
|
79
|
-
if [ "$ios_ok" = "true" ] && [ "$and_ok" = "true" ]; then
|
|
80
|
-
pass "$skill present on both platforms"
|
|
81
|
-
else
|
|
82
|
-
fail "$skill parity broken (ios=$ios_ok android=$and_ok)"
|
|
83
|
-
fi
|
|
84
|
-
done
|
|
85
|
-
|
|
86
|
-
echo ""
|
|
87
|
-
echo "→ 2. Platform-agnostic skills live in figma-common/ (WS-7b ✓)"
|
|
88
|
-
for skill in "${COMMON_REQUIRED[@]}"; do
|
|
89
|
-
if [ -f "$COMMON_DIR/$skill/SKILL.md" ]; then
|
|
90
|
-
pass "$skill present in figma-common"
|
|
91
|
-
else
|
|
92
|
-
fail "$skill missing in figma-common"
|
|
93
|
-
fi
|
|
94
|
-
done
|
|
95
|
-
|
|
96
|
-
echo ""
|
|
97
|
-
echo "→ 2b. Platform-agnostic skills are NOT duplicated under figma-ios"
|
|
98
|
-
DUPES=0
|
|
99
|
-
for skill in "${COMMON_REQUIRED[@]}"; do
|
|
100
|
-
if [ -d "$IOS_DIR/$skill" ]; then
|
|
101
|
-
fail "duplication: $skill exists in BOTH figma-ios/ and figma-common/"
|
|
102
|
-
DUPES=$((DUPES+1))
|
|
103
|
-
fi
|
|
104
|
-
done
|
|
105
|
-
[ "$DUPES" -eq 0 ] && pass "no common-skill duplication in figma-ios"
|
|
106
|
-
|
|
107
|
-
echo ""
|
|
108
|
-
echo "→ 3. figma-android SKILL.md files stamp platform: android"
|
|
109
|
-
while IFS= read -r -d '' f; do
|
|
110
|
-
base=$(dirname "$f" | xargs basename)
|
|
111
|
-
if head -n 1 "$f" | grep -Fxq -- "---"; then
|
|
112
|
-
if awk '/^---$/{c++; next} c==1' "$f" | grep -Fq "platform: android"; then
|
|
113
|
-
pass "$base stamps platform: android"
|
|
114
|
-
else
|
|
115
|
-
fail "$base missing 'platform: android' stamp"
|
|
116
|
-
fi
|
|
117
|
-
fi
|
|
118
|
-
done < <(find "$ANDROID_DIR" -maxdepth 2 -name SKILL.md -print0)
|
|
119
|
-
|
|
120
|
-
echo ""
|
|
121
|
-
echo "→ 4. figma-ios SKILL.md files do NOT claim platform: android (only ios or none)"
|
|
122
|
-
while IFS= read -r -d '' f; do
|
|
123
|
-
if awk '/^---$/{c++; next} c==1' "$f" | grep -Fq "platform: android"; then
|
|
124
|
-
fail "$(dirname "$f" | xargs basename) claims platform: android but lives under figma-ios/"
|
|
125
|
-
fi
|
|
126
|
-
done < <(find "$IOS_DIR" -maxdepth 2 -name SKILL.md -print0)
|
|
127
|
-
pass "no cross-platform stamp leakage in figma-ios/"
|
|
128
|
-
|
|
129
|
-
echo ""
|
|
130
|
-
echo "→ 5. No orphaned figma-android directories (contract-table inventory)"
|
|
131
|
-
EXPECTED_ANDROID=("${PLATFORM_SPECIFIC[@]}")
|
|
132
|
-
ORPHANS=0
|
|
133
|
-
for d in "$ANDROID_DIR"/*/; do
|
|
134
|
-
[ -d "$d" ] || continue
|
|
135
|
-
name=$(basename "$d")
|
|
136
|
-
case " ${EXPECTED_ANDROID[*]} " in
|
|
137
|
-
*" $name "*) ;;
|
|
138
|
-
*) fail "unexpected dir: figma-android/$name (not in contract)"; ORPHANS=$((ORPHANS+1)) ;;
|
|
139
|
-
esac
|
|
140
|
-
done
|
|
141
|
-
[ "$ORPHANS" -eq 0 ] && pass "no orphaned figma-android directories"
|
|
142
|
-
|
|
143
|
-
echo ""
|
|
144
|
-
echo "→ 6. cross-cli-contract.md references both platforms"
|
|
145
|
-
if grep -Fq "pipeline/skills/figma-ios" "$CONTRACT" && grep -Fq "pipeline/skills/figma-android" "$CONTRACT"; then
|
|
146
|
-
pass "contract references figma-ios + figma-android paths"
|
|
147
|
-
else
|
|
148
|
-
fail "contract missing one or both figma platform paths"
|
|
149
|
-
fi
|
|
150
|
-
|
|
151
|
-
echo ""
|
|
152
|
-
echo "→ 7. Contract section 1.1 present (figma subphase skills section)"
|
|
153
|
-
if grep -Fq "1.1 Figma component subphase skills" "$CONTRACT"; then
|
|
154
|
-
pass "section 1.1 heading present"
|
|
155
|
-
else
|
|
156
|
-
fail "section 1.1 heading missing"
|
|
157
|
-
fi
|
|
158
|
-
|
|
159
|
-
echo ""
|
|
160
|
-
echo "→ 8. Contract section 1.2 routing rules present"
|
|
161
|
-
if grep -Fq "1.2 Figma-skill routing from multi-agent" "$CONTRACT"; then
|
|
162
|
-
pass "section 1.2 heading present"
|
|
163
|
-
else
|
|
164
|
-
fail "section 1.2 heading missing"
|
|
165
|
-
fi
|
|
166
|
-
|
|
167
|
-
echo ""
|
|
168
|
-
echo "→ 9. Contract section 1.3 frontmatter requirements present"
|
|
169
|
-
if grep -Fq "1.3 Figma skill frontmatter" "$CONTRACT"; then
|
|
170
|
-
pass "section 1.3 heading present"
|
|
171
|
-
else
|
|
172
|
-
fail "section 1.3 heading missing"
|
|
173
|
-
fi
|
|
174
|
-
|
|
175
|
-
echo ""
|
|
176
|
-
echo "══ figma-cross-cli-inventory smoke: $PASS passed, $FAIL failed ══"
|
|
177
|
-
[ "$FAIL" -eq 0 ]
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# smoke-figma-sync.sh - WS-9 contract for sync-figma-source.sh.
|
|
3
|
-
#
|
|
4
|
-
# Verifies:
|
|
5
|
-
# 1. sync script exists + executable.
|
|
6
|
-
# 2. prefs.schema.json declares global.figmaSource with correct shape.
|
|
7
|
-
# 3. sync script handles missing figmaSource gracefully (exit 0 w/ message).
|
|
8
|
-
# 4. sync script handles missing path file.
|
|
9
|
-
# 5. dry-run mode writes nothing.
|
|
10
|
-
# 6. CHANGELOG note format is correct (includes `### Sync YYYY-MM-DD`).
|
|
11
|
-
# 7. Watermark update logic (lastCommit + lastSyncedAt) runs atomically.
|
|
12
|
-
|
|
13
|
-
set -euo pipefail
|
|
14
|
-
|
|
15
|
-
HERE="$(cd "$(dirname "$0")" && pwd)"
|
|
16
|
-
ROOT="$(cd "$HERE/../.." && pwd)"
|
|
17
|
-
SYNC="$ROOT/pipeline/scripts/sync-figma-source.sh"
|
|
18
|
-
SCHEMA="$ROOT/pipeline/schemas/prefs.schema.json"
|
|
19
|
-
TMP="$(mktemp -d -t figma-sync-smoke-XXXX)"
|
|
20
|
-
trap 'rm -rf "$TMP"' EXIT
|
|
21
|
-
|
|
22
|
-
PASS=0
|
|
23
|
-
FAIL=0
|
|
24
|
-
pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
|
|
25
|
-
fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
|
|
26
|
-
|
|
27
|
-
need() { command -v "$1" >/dev/null 2>&1 || { echo "error: $1 required" >&2; exit 127; }; }
|
|
28
|
-
need jq
|
|
29
|
-
need git
|
|
30
|
-
|
|
31
|
-
[ -x "$SYNC" ] && pass "sync script exists and is executable" || fail "sync script not executable at $SYNC"
|
|
32
|
-
|
|
33
|
-
echo ""
|
|
34
|
-
echo "→ 2. prefs schema declares global.figmaSource with correct shape"
|
|
35
|
-
for field in path branch lastSyncedAt lastCommit; do
|
|
36
|
-
if jq -e ".properties.global.properties.figmaSource.properties.$field" "$SCHEMA" >/dev/null 2>&1; then
|
|
37
|
-
pass "figmaSource.$field declared"
|
|
38
|
-
else
|
|
39
|
-
fail "figmaSource.$field missing from schema"
|
|
40
|
-
fi
|
|
41
|
-
done
|
|
42
|
-
|
|
43
|
-
echo ""
|
|
44
|
-
echo "→ 3. missing figmaSource → exit 0 with skip message"
|
|
45
|
-
cat > "$TMP/prefs-no-source.json" <<'EOF'
|
|
46
|
-
{ "schemaVersion": "2.1.0", "global": {}, "projects": {} }
|
|
47
|
-
EOF
|
|
48
|
-
OUT=$(MULTI_AGENT_PREFS="$TMP/prefs-no-source.json" bash "$SYNC" 2>&1)
|
|
49
|
-
RC=$?
|
|
50
|
-
if [ "$RC" -eq 0 ] && echo "$OUT" | grep -Fq "figmaSource not configured"; then
|
|
51
|
-
pass "gracefully handles missing figmaSource"
|
|
52
|
-
else
|
|
53
|
-
fail "did not skip cleanly (rc=$RC, out: $OUT)"
|
|
54
|
-
fi
|
|
55
|
-
|
|
56
|
-
echo ""
|
|
57
|
-
echo "→ 4. figmaSource.path missing on disk → exit 1 with error"
|
|
58
|
-
cat > "$TMP/prefs-bad-path.json" <<EOF
|
|
59
|
-
{ "schemaVersion": "2.1.0", "global": { "figmaSource": { "path": "$TMP/does-not-exist", "branch": "develop" } }, "projects": {} }
|
|
60
|
-
EOF
|
|
61
|
-
set +e
|
|
62
|
-
OUT=$(MULTI_AGENT_PREFS="$TMP/prefs-bad-path.json" bash "$SYNC" 2>&1)
|
|
63
|
-
RC=$?
|
|
64
|
-
set -e
|
|
65
|
-
if [ "$RC" -ne 0 ] && echo "$OUT" | grep -Fq "does not exist"; then
|
|
66
|
-
pass "errors cleanly on missing path"
|
|
67
|
-
else
|
|
68
|
-
fail "did not error on missing path (rc=$RC)"
|
|
69
|
-
fi
|
|
70
|
-
|
|
71
|
-
echo ""
|
|
72
|
-
echo "→ 5. dry-run mode does not mutate prefs"
|
|
73
|
-
# Build a tiny fake source with .instructions/figma/sample/SKILL.md
|
|
74
|
-
FAKE_SRC="$TMP/fake-src"
|
|
75
|
-
mkdir -p "$FAKE_SRC/.instructions/figma/sample" "$FAKE_SRC/.claude/skills/sample"
|
|
76
|
-
cat > "$FAKE_SRC/.instructions/figma/sample/SKILL.md" <<'EOF'
|
|
77
|
-
---
|
|
78
|
-
name: sample
|
|
79
|
-
description: smoke fixture
|
|
80
|
-
---
|
|
81
|
-
# sample
|
|
82
|
-
EOF
|
|
83
|
-
cat > "$FAKE_SRC/.claude/skills/sample/SKILL.md" <<'EOF'
|
|
84
|
-
---
|
|
85
|
-
name: sample
|
|
86
|
-
description: smoke stub
|
|
87
|
-
---
|
|
88
|
-
# sample stub
|
|
89
|
-
EOF
|
|
90
|
-
(cd "$FAKE_SRC" && git init -q && git -c user.email=t@t -c user.name=t add . && git -c user.email=t@t -c user.name=t commit -q -m init)
|
|
91
|
-
PREFS_BEFORE="$TMP/prefs-dry.json"
|
|
92
|
-
cat > "$PREFS_BEFORE" <<EOF
|
|
93
|
-
{ "schemaVersion": "2.1.0", "global": { "figmaSource": { "path": "$FAKE_SRC", "branch": "main" } }, "projects": {} }
|
|
94
|
-
EOF
|
|
95
|
-
CHECKSUM_BEFORE=$(jq -c '.' "$PREFS_BEFORE" | shasum | awk '{print $1}')
|
|
96
|
-
MULTI_AGENT_PREFS="$PREFS_BEFORE" bash "$SYNC" --dry-run >/dev/null 2>&1 || true
|
|
97
|
-
CHECKSUM_AFTER=$(jq -c '.' "$PREFS_BEFORE" | shasum | awk '{print $1}')
|
|
98
|
-
[ "$CHECKSUM_BEFORE" = "$CHECKSUM_AFTER" ] && pass "dry-run leaves prefs untouched" || fail "dry-run mutated prefs"
|
|
99
|
-
|
|
100
|
-
echo ""
|
|
101
|
-
echo "→ 6. CHANGELOG heading pattern used by sync (grep shape)"
|
|
102
|
-
if grep -Fq '### Sync $(date' "$SYNC" || grep -Eq '### Sync \$\(date' "$SYNC"; then
|
|
103
|
-
pass "sync emits '### Sync YYYY-MM-DD' heading"
|
|
104
|
-
else
|
|
105
|
-
fail "sync script does not emit the canonical CHANGELOG heading"
|
|
106
|
-
fi
|
|
107
|
-
|
|
108
|
-
echo ""
|
|
109
|
-
echo "→ 7. Watermark update uses atomic rename"
|
|
110
|
-
if grep -Fq "mv \"\$TMP\" \"\$PREFS_FILE\"" "$SYNC"; then
|
|
111
|
-
pass "atomic rename on prefs update"
|
|
112
|
-
else
|
|
113
|
-
fail "no atomic rename in sync script"
|
|
114
|
-
fi
|
|
115
|
-
|
|
116
|
-
echo ""
|
|
117
|
-
echo "→ 8. --force-full flag is recognised"
|
|
118
|
-
if grep -Fq -- "--force-full" "$SYNC"; then
|
|
119
|
-
pass "force-full flag supported"
|
|
120
|
-
else
|
|
121
|
-
fail "force-full flag missing"
|
|
122
|
-
fi
|
|
123
|
-
|
|
124
|
-
echo ""
|
|
125
|
-
echo "→ 9. --plan flag writes a structured JSON plan artifact"
|
|
126
|
-
if grep -Fq -- "--plan" "$SYNC"; then
|
|
127
|
-
pass "plan flag recognised"
|
|
128
|
-
else
|
|
129
|
-
fail "plan flag missing"
|
|
130
|
-
fi
|
|
131
|
-
if grep -Fq ".last-figma-sync-plan.json" "$SYNC"; then
|
|
132
|
-
pass "plan writes to .last-figma-sync-plan.json"
|
|
133
|
-
else
|
|
134
|
-
fail "plan output path missing"
|
|
135
|
-
fi
|
|
136
|
-
if grep -Fq "overlaySkip" "$SYNC"; then
|
|
137
|
-
pass "plan records overlay-skip per skill"
|
|
138
|
-
else
|
|
139
|
-
fail "plan does not record overlaySkip"
|
|
140
|
-
fi
|
|
141
|
-
if grep -Fq "tree" "$SYNC" && grep -Fq "figma-ios" "$SYNC" && grep -Fq "figma-common" "$SYNC"; then
|
|
142
|
-
pass "plan records destination tree (figma-ios vs figma-common)"
|
|
143
|
-
else
|
|
144
|
-
fail "plan missing tree routing info"
|
|
145
|
-
fi
|
|
146
|
-
|
|
147
|
-
echo ""
|
|
148
|
-
echo "══ figma-sync smoke: $PASS passed, $FAIL failed ══"
|
|
149
|
-
[ "$FAIL" -eq 0 ]
|