@mmerterden/multi-agent-pipeline 11.2.0 → 11.3.1
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 +68 -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 +39 -17
- package/install/copilot.mjs +22 -16
- 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/lib/credential-store.sh +8 -4
- 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-skills-index.mjs +3 -6
- package/pipeline/scripts/eval-mine-corpus.mjs +187 -0
- package/pipeline/scripts/fixtures/install-layout.tsv +6 -5
- package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
- package/pipeline/scripts/lint-skills.mjs +26 -1
- 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 +17 -6
- package/pipeline/skills/.skill-manifest.json +40 -160
- package/pipeline/skills/.skills-index.json +3 -373
- 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 +3 -44
- 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,352 +0,0 @@
|
|
|
1
|
-
# PHASE 2D - Analytics Events
|
|
2
|
-
|
|
3
|
-
Analytics event integration using `UIComponentUtilities` view modifiers.
|
|
4
|
-
REF: `reference/analytics-events.md`
|
|
5
|
-
|
|
6
|
-
Execute if interactive elements exist in the component.
|
|
7
|
-
DEPENDS ON: Phase 2A (uses testing identifiers as analytics event IDs)
|
|
8
|
-
TOOL RESTRICTIONS: No Edit, No Bash
|
|
9
|
-
NEXT: Phase 3 (Data Analysis)
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
## IMPLEMENTATION_MODULE
|
|
14
|
-
|
|
15
|
-
Extensions: `Sources/UIComponentUtilities/Analytics/`
|
|
16
|
-
- `View+Analytics.swift` - View modifiers
|
|
17
|
-
- `AnalyticsContext.swift` - Context propagation
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## VIEW_MODIFIERS
|
|
22
|
-
|
|
23
|
-
| Modifier | Event Type | Usage |
|
|
24
|
-
|----------|-----------|-------|
|
|
25
|
-
| `.analyticsScreen(_:)` | `UIScreenViewed`, `UIScreenExited` | Screen lifecycle |
|
|
26
|
-
| `.analyticsButton(id:label:type:)` | `UIInteractionButtonTapped` | Button taps |
|
|
27
|
-
| `.analyticsCard(id:title:type:position:)` | `UIInteractionCardTapped` | Card taps |
|
|
28
|
-
| `.analyticsLink(id:text:destination:type:)` | `UIInteractionLinkTapped` | Link taps |
|
|
29
|
-
| `.analyticsToggle(id:label:isOn:)` | `UIInteractionToggleChanged` | Toggle changes |
|
|
30
|
-
| `.analyticsTabChanged(id:selectedIndex:label:)` | `UINavigationTabChanged` | Tab selection changes |
|
|
31
|
-
| `.analyticsImpression(id:type:name:position:)` | `UIVisibilityElementImpression` | Element visibility |
|
|
32
|
-
| `.analyticsModal(id:name:type:)` | `UINavigationModalPresented/Dismissed` | Modal lifecycle |
|
|
33
|
-
| `.analyticsError(id:type:code:message:displayType:)` | `UIErrorErrorDisplayed` | Error display |
|
|
34
|
-
| `.analyticsContext(screenName:screenClass:)` | - | Context propagation |
|
|
35
|
-
| `.analyticsComponent(_:)` | - | Component path |
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
## PARAMETER_TYPES
|
|
40
|
-
|
|
41
|
-
| Modifier | Required | Optional |
|
|
42
|
-
|----------|----------|----------|
|
|
43
|
-
| `.analyticsButton` | id | label, type (.primary/.secondary/.tertiary/.text/.icon) |
|
|
44
|
-
| `.analyticsCard` | id | title, type, position |
|
|
45
|
-
| `.analyticsLink` | id | text, destination, type (.internal/.external/.deeplink/.phone/.email) |
|
|
46
|
-
| `.analyticsToggle` | id, isOn | label |
|
|
47
|
-
| `.analyticsTabChanged` | id, selectedIndex | label (closure `(Int) -> String?` returning tab title for given index) |
|
|
48
|
-
| `.analyticsModal` | id | name, type (.sheet/.fullScreen/.popover/.alert) |
|
|
49
|
-
| `.analyticsImpression` | id, type (.banner/.card/.promotion/.advertisement) | name, position |
|
|
50
|
-
| `.analyticsError` | id, type (.network/.validation/.authentication/.server/.unknown) | code, message, displayType (.alert/.banner/.toast/.inline/.fullScreen) |
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## PRE-CHECK: Phase 1 + Phase 2A Complete
|
|
55
|
-
|
|
56
|
-
```
|
|
57
|
-
Read: {artifactPath}/pass1/_index.md
|
|
58
|
-
Read: {artifactPath}/pass1/design_context_response.json
|
|
59
|
-
Read: {artifactPath}/pass1/component_properties.json
|
|
60
|
-
Read: {artifactPath}/pass2/utility_identifiers.md # From Phase 2A - use as event IDs
|
|
61
|
-
Read: {artifactPath}/IMPLEMENTATION_HISTORY.md
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
EXTRACT:
|
|
65
|
-
- `componentName`
|
|
66
|
-
- `artifactPath`
|
|
67
|
-
- Interactive elements from design_context
|
|
68
|
-
- Testing identifiers (reuse as analytics IDs)
|
|
69
|
-
|
|
70
|
-
### Registry Input (optional)
|
|
71
|
-
|
|
72
|
-
The orchestrator may pass `registryData` containing pre-existing keys from `{repos.common.path}/Shared/Figma/Components/{nodeId}.json`.
|
|
73
|
-
If `registryData.analyticsEvents` exists and is non-empty, use it to pre-populate the events list.
|
|
74
|
-
Pre-existing events can be carried forward without re-analysis.
|
|
75
|
-
|
|
76
|
-
If any required file is missing:
|
|
77
|
-
|
|
78
|
-
```
|
|
79
|
-
STATUS: HALT
|
|
80
|
-
PHASE: phase-2d
|
|
81
|
-
GATE: PRE_CHECK
|
|
82
|
-
REASON: Required artifacts not found. Phase 1 and Phase 2A must complete first.
|
|
83
|
-
COMPLETED_GATES: []
|
|
84
|
-
ARTIFACTS_CREATED: none
|
|
85
|
-
USER_ACTION_REQUIRED: Run Phase 1 and Phase 2A first.
|
|
86
|
-
- pass1/_index.md must exist (Phase 1 output)
|
|
87
|
-
- pass2/utility_identifiers.md must exist (Phase 2A output)
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
## GATE 1: IDENTIFY_TRACKABLE_ELEMENTS
|
|
93
|
-
|
|
94
|
-
Scan `design_context_response.json` and `component_properties.json` for elements matching event categories:
|
|
95
|
-
|
|
96
|
-
| UI Element | Modifier | Event Type |
|
|
97
|
-
|------------|----------|------------|
|
|
98
|
-
| Button | `.analyticsButton(id:label:type:)` | `UIInteractionButtonTapped` |
|
|
99
|
-
| Card | `.analyticsCard(id:title:type:position:)` | `UIInteractionCardTapped` |
|
|
100
|
-
| Link | `.analyticsLink(id:text:destination:type:)` | `UIInteractionLinkTapped` |
|
|
101
|
-
| Toggle/Switch | `.analyticsToggle(id:label:isOn:)` | `UIInteractionToggleChanged` |
|
|
102
|
-
| Tab Group | `.analyticsTabChanged(id:selectedIndex:label:)` | `UINavigationTabChanged` |
|
|
103
|
-
| Sheet/Modal | `.analyticsModal(id:name:type:)` | `UINavigationModalPresented/Dismissed` |
|
|
104
|
-
| Banner/Promo | `.analyticsImpression(id:type:name:position:)` | `UIVisibilityElementImpression` |
|
|
105
|
-
| Error Display | `.analyticsError(id:type:code:message:displayType:)` | `UIErrorErrorDisplayed` |
|
|
106
|
-
| Screen Root | `.analyticsScreen(_:)` | `UIScreenViewed/Exited` |
|
|
107
|
-
|
|
108
|
-
### Decision
|
|
109
|
-
|
|
110
|
-
| Condition | Action |
|
|
111
|
-
|-----------|--------|
|
|
112
|
-
| No trackable elements found | → Skip to WRITE_ARTIFACT with "No analytics required" |
|
|
113
|
-
| Has trackable elements | → Proceed to GATE 2 |
|
|
114
|
-
|
|
115
|
-
---
|
|
116
|
-
|
|
117
|
-
## GATE 2: MAP_EVENTS_TO_IDENTIFIERS
|
|
118
|
-
|
|
119
|
-
For each trackable element, map to testing identifier from Phase 2A.
|
|
120
|
-
|
|
121
|
-
**ID Source:** `UITestingIdentifierKey.{ComponentName}.{element}.description`
|
|
122
|
-
|
|
123
|
-
Read `pass2/utility_identifiers.md` and match each interactive element to its corresponding testing identifier.
|
|
124
|
-
|
|
125
|
-
### Modifier Mapping
|
|
126
|
-
|
|
127
|
-
For each element, construct the full modifier call:
|
|
128
|
-
|
|
129
|
-
| Element | Identifier Key | Modifier |
|
|
130
|
-
|---------|----------------|----------|
|
|
131
|
-
| Submit Button | `.submitButton` | `.analyticsButton(id: UITestingIdentifierKey.{ComponentName}.submitButton.description, label: "Submit", type: .primary)` |
|
|
132
|
-
| Flight Card | `.flightCard` | `.analyticsCard(id: UITestingIdentifierKey.{ComponentName}.flightCard.description, title: route, type: "flight", position: index)` |
|
|
133
|
-
| Promo Banner | `.promoBanner` | `.analyticsImpression(id: UITestingIdentifierKey.{ComponentName}.promoBanner.description, type: .banner, name: title, position: nil)` |
|
|
134
|
-
|
|
135
|
-
### Registry Output Format
|
|
136
|
-
|
|
137
|
-
When building the `analyticsEvents` array for `component-utilities.json`, output each event as:
|
|
138
|
-
|
|
139
|
-
```json
|
|
140
|
-
{
|
|
141
|
-
"element": "Submit Button",
|
|
142
|
-
"identifierKey": "ComponentName.submitButton",
|
|
143
|
-
"event": "Tracks button tap via `.analyticsButton(id:label:type:)` modifier with primary type."
|
|
144
|
-
}
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
The `event` field is markdown text describing the tracked event. Each platform implements it in their own way.
|
|
148
|
-
|
|
149
|
-
---
|
|
150
|
-
|
|
151
|
-
## GATE 3: WRITE_ARTIFACT
|
|
152
|
-
|
|
153
|
-
### JSON Sidecar (machine-readable)
|
|
154
|
-
|
|
155
|
-
Write `{artifactPath}/pass2/utility_analytics.json`:
|
|
156
|
-
|
|
157
|
-
```json
|
|
158
|
-
{
|
|
159
|
-
"analyticsEvents": [
|
|
160
|
-
{ "element": "Element name", "identifierKey": "ComponentName.element", "event": "Description of tracked event" }
|
|
161
|
-
]
|
|
162
|
-
}
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
If no analytics events needed, write `{ "analyticsEvents": [] }`.
|
|
166
|
-
|
|
167
|
-
This JSON is consumed by `phase2-finalize.py` to build `component-utilities.json`. The orchestrator reads ONLY this JSON - never the markdown.
|
|
168
|
-
|
|
169
|
-
### Markdown Artifact (human-readable)
|
|
170
|
-
|
|
171
|
-
Write `{artifactPath}/pass2/utility_analytics.md`:
|
|
172
|
-
|
|
173
|
-
```markdown
|
|
174
|
-
# Analytics Events: {componentName}
|
|
175
|
-
|
|
176
|
-
Generated: {ISO_DATE}
|
|
177
|
-
Source: pass1/design_context_response.json, pass2/utility_identifiers.md
|
|
178
|
-
|
|
179
|
-
## Summary
|
|
180
|
-
- Total Events: {COUNT}
|
|
181
|
-
- Modifiers: analyticsButton({N}), analyticsCard({N}), analyticsImpression({N}), etc.
|
|
182
|
-
|
|
183
|
-
## Event Definitions
|
|
184
|
-
|
|
185
|
-
| Element | Identifier Key | Modifier |
|
|
186
|
-
|---------|----------------|----------|
|
|
187
|
-
| Submit | .{ComponentName}.submitButton | .analyticsButton(id:label:type:) |
|
|
188
|
-
| Card | .{ComponentName}.flightCard | .analyticsCard(id:title:type:position:) |
|
|
189
|
-
| Banner | .{ComponentName}.promoBanner | .analyticsImpression(id:type:name:position:) |
|
|
190
|
-
|
|
191
|
-
## Implementation
|
|
192
|
-
|
|
193
|
-
import UIComponentUtilities
|
|
194
|
-
|
|
195
|
-
### Screen Context (parent view)
|
|
196
|
-
```swift
|
|
197
|
-
ContentView()
|
|
198
|
-
.analyticsScreen("{ComponentName}")
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
### Button Tracking
|
|
202
|
-
```swift
|
|
203
|
-
Button("Submit") { submit() }
|
|
204
|
-
.accessibilityIdentifier(.{ComponentName}.submitButton)
|
|
205
|
-
.analyticsButton(
|
|
206
|
-
id: UITestingIdentifierKey.{ComponentName}.submitButton.description,
|
|
207
|
-
label: "Submit",
|
|
208
|
-
type: .primary
|
|
209
|
-
)
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
### Card Tracking (with position)
|
|
213
|
-
```swift
|
|
214
|
-
ForEach(flights.indices, id: \.self) { index in
|
|
215
|
-
FlightCard(flight: flights[index])
|
|
216
|
-
.accessibilityIdentifier(.{ComponentName}.flightCard.with(index))
|
|
217
|
-
.analyticsCard(
|
|
218
|
-
id: UITestingIdentifierKey.{ComponentName}.flightCard.with(index).description,
|
|
219
|
-
title: flights[index].route,
|
|
220
|
-
type: "flight",
|
|
221
|
-
position: index
|
|
222
|
-
)
|
|
223
|
-
}
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
### Link Tracking
|
|
227
|
-
```swift
|
|
228
|
-
TextLink("Terms of Service")
|
|
229
|
-
.accessibilityIdentifier(.{ComponentName}.termsLink)
|
|
230
|
-
.analyticsLink(
|
|
231
|
-
id: UITestingIdentifierKey.{ComponentName}.termsLink.description,
|
|
232
|
-
text: "Terms of Service",
|
|
233
|
-
destination: "/terms",
|
|
234
|
-
type: .internal
|
|
235
|
-
)
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
### Toggle Tracking
|
|
239
|
-
```swift
|
|
240
|
-
Toggle("Notifications", isOn: $notificationsEnabled)
|
|
241
|
-
.accessibilityIdentifier(.{ComponentName}.notificationsToggle)
|
|
242
|
-
.analyticsToggle(
|
|
243
|
-
id: UITestingIdentifierKey.{ComponentName}.notificationsToggle.description,
|
|
244
|
-
label: "Notifications",
|
|
245
|
-
isOn: $notificationsEnabled
|
|
246
|
-
)
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
### Impression Tracking (banners, promotions)
|
|
250
|
-
```swift
|
|
251
|
-
PromotionBanner(promotion: promo)
|
|
252
|
-
.accessibilityIdentifier(.{ComponentName}.promoBanner)
|
|
253
|
-
.analyticsImpression(
|
|
254
|
-
id: UITestingIdentifierKey.{ComponentName}.promoBanner.description,
|
|
255
|
-
type: .banner,
|
|
256
|
-
name: promo.title,
|
|
257
|
-
position: index
|
|
258
|
-
)
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
### Tab Group Tracking
|
|
262
|
-
```swift
|
|
263
|
-
TabsSecondaryGroup(items: items, selectedIndex: $selectedIndex)
|
|
264
|
-
.analyticsTabChanged(
|
|
265
|
-
id: UITestingIdentifierKey.{ComponentName}.container.description,
|
|
266
|
-
selectedIndex: $selectedIndex,
|
|
267
|
-
label: { items.indices.contains($0) ? items[$0].title : nil }
|
|
268
|
-
)
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
### Modal Tracking
|
|
272
|
-
```swift
|
|
273
|
-
.sheet(isPresented: $showDetails) {
|
|
274
|
-
DetailsView()
|
|
275
|
-
.analyticsModal(
|
|
276
|
-
id: "flight_details",
|
|
277
|
-
name: "Flight Details",
|
|
278
|
-
type: .sheet
|
|
279
|
-
)
|
|
280
|
-
}
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
### Error Tracking
|
|
284
|
-
```swift
|
|
285
|
-
ErrorBanner(error: networkError)
|
|
286
|
-
.analyticsError(
|
|
287
|
-
id: "network_error",
|
|
288
|
-
type: .network,
|
|
289
|
-
code: "CONN_TIMEOUT",
|
|
290
|
-
message: "Connection timed out",
|
|
291
|
-
displayType: .banner
|
|
292
|
-
)
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
### Direct Event (complex cases)
|
|
296
|
-
```swift
|
|
297
|
-
import AnalyticsEvents
|
|
298
|
-
|
|
299
|
-
UIVisibilityPullToRefreshTriggered(
|
|
300
|
-
contentId: UITestingIdentifierKey.{ComponentName}.refreshControl.description,
|
|
301
|
-
contentType: "flights",
|
|
302
|
-
screenName: context.screenName,
|
|
303
|
-
timeSinceLastRefreshMs: nil
|
|
304
|
-
).track()
|
|
305
|
-
```
|
|
306
|
-
```
|
|
307
|
-
|
|
308
|
-
---
|
|
309
|
-
|
|
310
|
-
## GATE 4: UPDATE_IMPLEMENTATION_HISTORY
|
|
311
|
-
|
|
312
|
-
Append to `{artifactPath}/IMPLEMENTATION_HISTORY.md`:
|
|
313
|
-
|
|
314
|
-
```markdown
|
|
315
|
-
## Phase 2D: Analytics Events
|
|
316
|
-
- Status: ✅ Complete
|
|
317
|
-
- Artifact: pass2/utility_analytics.md
|
|
318
|
-
- Events: {COUNT} ({modifiers_list})
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
---
|
|
322
|
-
|
|
323
|
-
## VALIDATION CHECKLIST
|
|
324
|
-
|
|
325
|
-
Before marking complete, verify:
|
|
326
|
-
|
|
327
|
-
```
|
|
328
|
-
[ ] Design context analyzed for interactive elements
|
|
329
|
-
[ ] Testing identifiers loaded from Phase 2A (pass2/utility_identifiers.md)
|
|
330
|
-
[ ] Each interactive element mapped to a view modifier (not raw events)
|
|
331
|
-
[ ] Modifier parameters match the modifier's signature (required vs optional)
|
|
332
|
-
[ ] IDs sourced from UITestingIdentifierKey.{Component}.{element}.description
|
|
333
|
-
[ ] utility_analytics.json created (JSON sidecar for finalize script)
|
|
334
|
-
[ ] utility_analytics.md created with complete implementation examples
|
|
335
|
-
[ ] All 9 modifier types checked: analyticsButton, analyticsCard, analyticsLink, analyticsToggle, analyticsTabChanged, analyticsImpression, analyticsModal, analyticsError, analyticsScreen
|
|
336
|
-
[ ] IMPLEMENTATION_HISTORY.md updated with Phase 2D status
|
|
337
|
-
[ ] If no trackable elements: utility_analytics.md says "No analytics required"
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
---
|
|
341
|
-
|
|
342
|
-
## SUCCESS OUTPUT
|
|
343
|
-
|
|
344
|
-
```
|
|
345
|
-
STATUS: COMPLETE
|
|
346
|
-
PHASE: phase-2d
|
|
347
|
-
GATES_PASSED: [PRE_CHECK, IDENTIFY_TRACKABLE_ELEMENTS, MAP_EVENTS_TO_IDENTIFIERS, WRITE_ARTIFACT, UPDATE_IMPLEMENTATION_HISTORY]
|
|
348
|
-
ARTIFACTS_CREATED:
|
|
349
|
-
- {artifactPath}/pass2/utility_analytics.json
|
|
350
|
-
- {artifactPath}/pass2/utility_analytics.md
|
|
351
|
-
SUMMARY: Analytics events: {COUNT} modifiers defined.
|
|
352
|
-
```
|
|
@@ -1,337 +0,0 @@
|
|
|
1
|
-
# PHASE 3 - Data Analysis Orchestrator
|
|
2
|
-
|
|
3
|
-
Orchestrates Phase 3 sub-phases: dispatches sub-agents, collects results, writes pass3/_index.md.
|
|
4
|
-
PREV: Phase 2 (Utility Integration)
|
|
5
|
-
NEXT: Phase 4 (Implementation)
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## PURPOSE
|
|
10
|
-
|
|
11
|
-
Phase 3 is the bridge between data collection (Phases 1-2) and code generation (Phase 4).
|
|
12
|
-
It transforms raw Figma artifacts into actionable analysis files that Phase 4 consumes directly.
|
|
13
|
-
Each sub-phase writes one analysis file to `pass3/`. Phase 4 reads pass3/ as its sole input.
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## PRE-CHECK: Phase 2 Complete
|
|
18
|
-
|
|
19
|
-
```
|
|
20
|
-
Read: {artifactPath}/IMPLEMENTATION_HISTORY.md
|
|
21
|
-
Read: {artifactPath}/pass2/_index.md
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
EXTRACT:
|
|
25
|
-
- `componentName`
|
|
26
|
-
- `artifactPath`
|
|
27
|
-
- `nodeId`
|
|
28
|
-
- `fileKey`
|
|
29
|
-
|
|
30
|
-
| Result | Action |
|
|
31
|
-
|--------|--------|
|
|
32
|
-
| Both files exist | Proceed to REGISTRY_LOOKUP |
|
|
33
|
-
| Either missing | HALT |
|
|
34
|
-
|
|
35
|
-
FAIL →
|
|
36
|
-
```
|
|
37
|
-
STATUS: HALT
|
|
38
|
-
PHASE: phase-3
|
|
39
|
-
GATE: PRE_CHECK
|
|
40
|
-
REASON: IMPLEMENTATION_HISTORY.md or pass2/_index.md not found. Phase 2 must complete first.
|
|
41
|
-
COMPLETED_GATES: []
|
|
42
|
-
ARTIFACTS_CREATED: none
|
|
43
|
-
USER_ACTION_REQUIRED: Run Phase 2 first.
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
Verify `pass3/` directory exists. If not:
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
mkdir -p {artifactPath}/pass3
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## NORMALIZE_DESIGN_CONTEXT: Handle Sublayer Format
|
|
55
|
-
|
|
56
|
-
Phase 1 script may produce a sublayer format for large components. Normalize it before dispatching sub-phases so they always see a single `response` field.
|
|
57
|
-
|
|
58
|
-
```
|
|
59
|
-
Read: {artifactPath}/pass1/design_context_response.json
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
Check the JSON structure:
|
|
63
|
-
|
|
64
|
-
| Format | Detection | Action |
|
|
65
|
-
|--------|-----------|--------|
|
|
66
|
-
| Normal | `sublayers` is `false` or absent | No action needed - `response` field exists |
|
|
67
|
-
| Sublayer | `sublayers` is `true` | Concatenate all `responses` values (see below) |
|
|
68
|
-
| Already normalized | `sublayers` is `true` AND `response` field exists | No action needed - Phase 2 already normalized |
|
|
69
|
-
|
|
70
|
-
### Sublayer normalization (if not already done by Phase 2)
|
|
71
|
-
|
|
72
|
-
If `sublayers: true` and no `response` field:
|
|
73
|
-
|
|
74
|
-
1. Read all values from the `responses` object (keyed by node ID, e.g. `"123:456": "...code..."`)
|
|
75
|
-
2. Concatenate them into a single string, separated by `\n\n// --- Sublayer: {nodeId} ---\n\n`
|
|
76
|
-
3. Add a `response` field to the JSON with the concatenated string
|
|
77
|
-
4. Keep the original `sublayers`, `sublayerNodeIds`, and `responses` fields intact (for traceability)
|
|
78
|
-
5. Write the updated JSON back to `{artifactPath}/pass1/design_context_response.json`
|
|
79
|
-
|
|
80
|
-
After normalization, all sub-phases read the `response` field as usual - no sublayer awareness needed.
|
|
81
|
-
|
|
82
|
-
---
|
|
83
|
-
|
|
84
|
-
## ROUTING
|
|
85
|
-
|
|
86
|
-
### Sub-phase inventory
|
|
87
|
-
|
|
88
|
-
| Sub-phase | Execution | Purpose | Required | Depends On |
|
|
89
|
-
|-----------|-----------|---------|----------|------------|
|
|
90
|
-
| 3A | **AI agent** (`phase-3a-location.md`) | Component name + path resolution | **ALWAYS** | Phase 1 (nodeId) |
|
|
91
|
-
| 3B | **Script** (`scripts/phase3-scripts.py 3b`) | Figma variables → Swift tokens | **ALWAYS** | Phase 1 (variable_defs) |
|
|
92
|
-
| 3C | **AI agent** (`phase-3c-nested.md`) | Nested component resolution | **ALWAYS** | Phase 1 (code_connect_map) |
|
|
93
|
-
| 3D | **AI agent** (`phase-3d-patterns.md`) | Pattern detection + architecture + complexity | **ALWAYS** | Phase 1 (design_context, component_properties) |
|
|
94
|
-
| 3E | **Script** (`scripts/phase3-scripts.py 3e`) | Asset inventory | If assets exist | Phase 1 (design_context_assets) |
|
|
95
|
-
| 3F | **Script** (`scripts/phase3-scripts.py 3f`) | Utility integration summary | **ALWAYS** | Phase 2 (component-utilities.json) |
|
|
96
|
-
| 3G | **Script** (`scripts/phase3-scripts.py 3g`) | Property coverage verification | **ALWAYS** | Phase 3D (architecture JSON output) |
|
|
97
|
-
|
|
98
|
-
### Execution flow
|
|
99
|
-
|
|
100
|
-
```
|
|
101
|
-
PRE-CHECK
|
|
102
|
-
↓
|
|
103
|
-
NORMALIZE_DESIGN_CONTEXT
|
|
104
|
-
↓
|
|
105
|
-
┌──────────────────────────────────────────────────┐
|
|
106
|
-
│ WAVE 1 - PARALLEL │
|
|
107
|
-
│ │
|
|
108
|
-
│ Scripts (Bash, ~5s): │
|
|
109
|
-
│ python3 scripts/phase3-scripts.py wave1 │
|
|
110
|
-
│ → 3B Token Mapping │
|
|
111
|
-
│ → 3E Asset Inventory │
|
|
112
|
-
│ → 3F Utility Integration │
|
|
113
|
-
│ │
|
|
114
|
-
│ AI Agents (parallel sub-agents): │
|
|
115
|
-
│ 3A - Component Location ← required │
|
|
116
|
-
│ 3C - Nested Components ← required │
|
|
117
|
-
│ 3D - Patterns + Architecture ← required │
|
|
118
|
-
│ │
|
|
119
|
-
└──────────────────────────────────────────────────┘
|
|
120
|
-
↓ wait for all to complete
|
|
121
|
-
↓
|
|
122
|
-
┌──────────────────────────────────────────────────┐
|
|
123
|
-
│ WAVE 2 - SEQUENTIAL (depends on 3D output) │
|
|
124
|
-
│ │
|
|
125
|
-
│ Script (Bash, ~1s): │
|
|
126
|
-
│ python3 scripts/phase3-scripts.py 3g │
|
|
127
|
-
│ → 3G Property Coverage Verification │
|
|
128
|
-
│ Reads: 04b_component_architecture.json (3D) │
|
|
129
|
-
│ │
|
|
130
|
-
└──────────────────────────────────────────────────┘
|
|
131
|
-
↓
|
|
132
|
-
GATE 1: COLLECT_RESULTS
|
|
133
|
-
↓
|
|
134
|
-
GATE 2: WRITE_IMPLEMENTATION_SPEC
|
|
135
|
-
↓
|
|
136
|
-
GATE 3: UPDATE_IMPLEMENTATION_HISTORY
|
|
137
|
-
↓
|
|
138
|
-
GATE 4: WRITE_PASS3_INDEX
|
|
139
|
-
↓
|
|
140
|
-
PHASE OUTPUT
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
### Dispatch instructions
|
|
144
|
-
|
|
145
|
-
**Wave 1 (parallel):** Launch scripts + AI agents simultaneously.
|
|
146
|
-
|
|
147
|
-
Scripts (single Bash command):
|
|
148
|
-
```bash
|
|
149
|
-
python3 {skillPath}/scripts/phase3-scripts.py wave1 --artifact-path {artifactPath}
|
|
150
|
-
```
|
|
151
|
-
This runs 3B, 3E, 3F sequentially (~5-10s total). The script handles skip conditions for 3E automatically.
|
|
152
|
-
|
|
153
|
-
AI Agents (sub-agents in parallel):
|
|
154
|
-
- 3A, 3C, 3D - each reads from `pass1/` artifacts independently.
|
|
155
|
-
- `design_context_response.json` is already normalized (flat `response` field) by NORMALIZE_DESIGN_CONTEXT.
|
|
156
|
-
- Each writes its own file to `pass3/`.
|
|
157
|
-
- Wait for ALL (scripts + agents) to complete before Wave 2.
|
|
158
|
-
|
|
159
|
-
**Wave 2 (sequential):** Run 3G script after 3D completes.
|
|
160
|
-
```bash
|
|
161
|
-
python3 {skillPath}/scripts/phase3-scripts.py 3g --artifact-path {artifactPath}
|
|
162
|
-
```
|
|
163
|
-
- 3G reads `pass1/component_properties.json` + `pass3/04b_component_architecture.json` (from 3D).
|
|
164
|
-
- 3G writes `pass3/00_property_coverage.json`.
|
|
165
|
-
- Wait for 3G to complete before proceeding to GATE 1.
|
|
166
|
-
|
|
167
|
-
### Skip conditions
|
|
168
|
-
|
|
169
|
-
| Sub-phase | Skip when |
|
|
170
|
-
|-----------|-----------|
|
|
171
|
-
| 3E | No `pass1/design_context_assets.txt` exists or file is empty (handled by script - writes placeholder automatically) |
|
|
172
|
-
|
|
173
|
-
---
|
|
174
|
-
|
|
175
|
-
## GATE 1: COLLECT_RESULTS
|
|
176
|
-
|
|
177
|
-
After all sub-phases complete, verify each produced its artifact:
|
|
178
|
-
|
|
179
|
-
```
|
|
180
|
-
[ ] pass3/01_component_location.md exists (Phase 3A)
|
|
181
|
-
[ ] pass3/02_token_mapping.md exists (Phase 3B)
|
|
182
|
-
[ ] pass3/03_nested_components.md exists (Phase 3C)
|
|
183
|
-
[ ] pass3/04_patterns.md exists (Phase 3D - patterns section)
|
|
184
|
-
[ ] pass3/04b_component_architecture.md exists (Phase 3D - architecture section)
|
|
185
|
-
[ ] pass3/04b_component_architecture.json exists (Phase 3D - structured, for 3G script)
|
|
186
|
-
[ ] pass3/05_complexity.md exists (Phase 3D - complexity section)
|
|
187
|
-
[ ] pass3/06_assets.md exists (Phase 3E - or skipped placeholder)
|
|
188
|
-
[ ] pass3/08_utility_integration.md exists (Phase 3F)
|
|
189
|
-
[ ] pass3/00_property_coverage.json exists (Phase 3G)
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
ANY missing →
|
|
193
|
-
```
|
|
194
|
-
STATUS: HALT
|
|
195
|
-
PHASE: phase-3
|
|
196
|
-
GATE: COLLECT_RESULTS
|
|
197
|
-
REASON: Sub-phase artifact missing.
|
|
198
|
-
MISSING: [list missing files]
|
|
199
|
-
USER_ACTION_REQUIRED: Re-run the failed sub-phase.
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
---
|
|
203
|
-
|
|
204
|
-
## GATE 2: WRITE_IMPLEMENTATION_SPEC (script)
|
|
205
|
-
|
|
206
|
-
**IMPORTANT:** Do NOT read pass3 sub-phase output files in the main orchestrator context. The spec script compiles everything from structured JSON files.
|
|
207
|
-
|
|
208
|
-
```bash
|
|
209
|
-
python3 {skillPath}/scripts/phase3-scripts.py spec --artifact-path '{artifactPath}'
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
The script reads `04b_component_architecture.json`, `00_property_coverage.json`, `pass1/component_summary.json`, and extracts counts from markdown files. It writes `pass3/07_implementation_spec.md`.
|
|
213
|
-
|
|
214
|
-
| Result | Action |
|
|
215
|
-
|--------|--------|
|
|
216
|
-
| Exit 0 | Proceed to GATE 3 |
|
|
217
|
-
| Exit 1 | HALT - missing required input files |
|
|
218
|
-
|
|
219
|
-
---
|
|
220
|
-
|
|
221
|
-
## GATE 3: UPDATE_IMPLEMENTATION_HISTORY
|
|
222
|
-
|
|
223
|
-
Append to `{artifactPath}/IMPLEMENTATION_HISTORY.md`:
|
|
224
|
-
|
|
225
|
-
```markdown
|
|
226
|
-
## Phase 3: Data Analysis
|
|
227
|
-
- Component Location: ✅ pass3/01_component_location.md
|
|
228
|
-
- Token Mapping: ✅ pass3/02_token_mapping.md ({MAPPED} mapped, {MISSING} missing)
|
|
229
|
-
- Nested Components: ✅ pass3/03_nested_components.md ({CONNECTED} connected, {UNCONNECTED} unconnected)
|
|
230
|
-
- Pattern Detection: ✅ pass3/04_patterns.md
|
|
231
|
-
- Component Architecture: ✅ pass3/04b_component_architecture.md
|
|
232
|
-
- Complexity: {SIMPLE/COMPLEX} ({COUNT} properties)
|
|
233
|
-
- Assets: ✅ pass3/06_assets.md ({NEW} new, {EXISTING} existing) | ⏭️ Skipped (no assets)
|
|
234
|
-
- Implementation Spec: ✅ pass3/07_implementation_spec.md
|
|
235
|
-
- Utility Integration: ✅ pass3/08_utility_integration.md
|
|
236
|
-
- Property Coverage: ✅ pass3/00_property_coverage.json ({IMPLEMENTED} implement, {SKIPPED} skip, {DEFERRED} defer)
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
---
|
|
240
|
-
|
|
241
|
-
## GATE 4: WRITE_PASS3_INDEX
|
|
242
|
-
|
|
243
|
-
Write `{artifactPath}/pass3/_index.md`:
|
|
244
|
-
|
|
245
|
-
```markdown
|
|
246
|
-
# Pass 3 - Analysis Output
|
|
247
|
-
|
|
248
|
-
Component: {componentName}
|
|
249
|
-
Generated: {ISO_DATE}
|
|
250
|
-
|
|
251
|
-
## Files
|
|
252
|
-
|
|
253
|
-
| File | Description | Phase |
|
|
254
|
-
|------|-------------|-------|
|
|
255
|
-
| `pass3/01_component_location.md` | Component name, path, registry source | Phase 3A |
|
|
256
|
-
| `pass3/02_token_mapping.md` | Figma variables → Swift tokens | Phase 3B |
|
|
257
|
-
| `pass3/03_nested_components.md` | Connected/unconnected dependencies | Phase 3C |
|
|
258
|
-
| `pass3/04_patterns.md` | Repeating/variant patterns, dimensions | Phase 3D |
|
|
259
|
-
| `pass3/04b_component_architecture.md` | API shape, enums, configurations, list inference | Phase 3D |
|
|
260
|
-
| `pass3/05_complexity.md` | SIMPLE/COMPLEX evaluation | Phase 3D |
|
|
261
|
-
| `pass3/06_assets.md` | Asset inventory (new/existing) | Phase 3E |
|
|
262
|
-
| `pass3/07_implementation_spec.md` | Compiled implementation blueprint | Phase 3 orchestrator |
|
|
263
|
-
| `pass3/08_utility_integration.md` | Utility keys mapped to elements | Phase 3F |
|
|
264
|
-
| `pass3/00_property_coverage.json` | Property coverage verification (IMPLEMENT/SKIP/DEFER) | Phase 3G |
|
|
265
|
-
|
|
266
|
-
## Read Instructions
|
|
267
|
-
|
|
268
|
-
Phase 4 (Implementation): read `pass3/07_implementation_spec.md` first (compiled spec).
|
|
269
|
-
For details on any section, read the individual file.
|
|
270
|
-
Token mapping: `pass3/02_token_mapping.md`
|
|
271
|
-
API design: `pass3/04b_component_architecture.md`
|
|
272
|
-
Utility integration: `pass3/08_utility_integration.md`
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
---
|
|
276
|
-
|
|
277
|
-
## VALIDATION CHECKLIST
|
|
278
|
-
|
|
279
|
-
```
|
|
280
|
-
[ ] IMPLEMENTATION_HISTORY.md loaded from Phase 2
|
|
281
|
-
[ ] design_context_response.json normalized (sublayer → flat response field, or already normalized by Phase 2)
|
|
282
|
-
[ ] Scripts dispatched (wave1: 3B+3E+3F via phase3-scripts.py)
|
|
283
|
-
[ ] AI agents dispatched (3A, 3C, 3D)
|
|
284
|
-
[ ] All Wave 1 (scripts + agents) returned COMPLETE
|
|
285
|
-
[ ] 01_component_location.md exists
|
|
286
|
-
[ ] 02_token_mapping.md exists
|
|
287
|
-
[ ] 03_nested_components.md exists
|
|
288
|
-
[ ] 04_patterns.md exists
|
|
289
|
-
[ ] 04b_component_architecture.md exists
|
|
290
|
-
[ ] 05_complexity.md exists
|
|
291
|
-
[ ] 06_assets.md exists (or skipped placeholder)
|
|
292
|
-
[ ] 07_implementation_spec.md written by spec script (NOT by orchestrator reading files)
|
|
293
|
-
[ ] 08_utility_integration.md exists
|
|
294
|
-
[ ] 00_property_coverage.json exists (Phase 3G - all properties have IMPLEMENT/SKIP/DEFER status)
|
|
295
|
-
[ ] IMPLEMENTATION_HISTORY.md updated with Phase 3 summary
|
|
296
|
-
[ ] pass3/_index.md written listing ALL pass3 files
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
---
|
|
300
|
-
|
|
301
|
-
## SUCCESS OUTPUT
|
|
302
|
-
|
|
303
|
-
```
|
|
304
|
-
STATUS: COMPLETE
|
|
305
|
-
PHASE: phase-3
|
|
306
|
-
GATES_PASSED: [PRE_CHECK, NORMALIZE_DESIGN_CONTEXT, DISPATCH_WAVE_1, DISPATCH_WAVE_2, COLLECT_RESULTS, WRITE_IMPLEMENTATION_SPEC, UPDATE_IMPLEMENTATION_HISTORY, WRITE_PASS3_INDEX]
|
|
307
|
-
ARTIFACTS_CREATED:
|
|
308
|
-
- {artifactPath}/pass3/01_component_location.md (via Phase 3A - AI agent)
|
|
309
|
-
- {artifactPath}/pass3/02_token_mapping.md (via Phase 3B - script)
|
|
310
|
-
- {artifactPath}/pass3/03_nested_components.md (via Phase 3C - AI agent)
|
|
311
|
-
- {artifactPath}/pass3/04_patterns.md (via Phase 3D - AI agent)
|
|
312
|
-
- {artifactPath}/pass3/04b_component_architecture.md (via Phase 3D - AI agent)
|
|
313
|
-
- {artifactPath}/pass3/04b_component_architecture.json (via Phase 3D - AI agent)
|
|
314
|
-
- {artifactPath}/pass3/05_complexity.md (via Phase 3D - AI agent)
|
|
315
|
-
- {artifactPath}/pass3/06_assets.md (via Phase 3E - script)
|
|
316
|
-
- {artifactPath}/pass3/08_utility_integration.md (via Phase 3F - script)
|
|
317
|
-
- {artifactPath}/pass3/00_property_coverage.json (via Phase 3G - script)
|
|
318
|
-
- {artifactPath}/pass3/07_implementation_spec.md (orchestrator)
|
|
319
|
-
- {artifactPath}/pass3/_index.md
|
|
320
|
-
SUMMARY: Data analysis complete. {TOTAL_FILES} analysis files created. Complexity: {SIMPLE/COMPLEX}. {MAPPED}/{TOTAL} tokens mapped. {CONNECTED}/{TOTAL} nested components connected. Ready for Phase 4.
|
|
321
|
-
```
|
|
322
|
-
|
|
323
|
-
---
|
|
324
|
-
|
|
325
|
-
## REFERENCES
|
|
326
|
-
|
|
327
|
-
| Topic | File |
|
|
328
|
-
|-------|------|
|
|
329
|
-
| Phase 3A | `phases/phase-3a-location.md` |
|
|
330
|
-
| Phase 3B | `phases/phase-3b-tokens.md` |
|
|
331
|
-
| Phase 3C | `phases/phase-3c-nested.md` |
|
|
332
|
-
| Phase 3D | `phases/phase-3d-patterns.md` |
|
|
333
|
-
| Phase 3E | `phases/phase-3e-assets.md` |
|
|
334
|
-
| Phase 3F | `phases/phase-3f-utilities.md` |
|
|
335
|
-
| Phase 3G | `phases/phase-3g-property-coverage.md` |
|
|
336
|
-
| Registry Tool | `reference/registry.md` |
|
|
337
|
-
| Missing Tokens | `reference/missing-tokens.md` |
|