@mmerterden/multi-agent-pipeline 8.6.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 +2623 -0
- package/LICENSE +21 -0
- package/README.md +852 -0
- package/docs/FIGMA_PIPELINE.md +138 -0
- package/docs/GENERICITY-REVIEW.md +277 -0
- package/docs/STABILITY-FIX-PLAN.md +168 -0
- package/docs/adr/0001-three-model-triage.md +81 -0
- package/docs/adr/0002-instruction-driven-flag.md +62 -0
- package/docs/adr/0003-unified-shared-skills.md +55 -0
- package/docs/adr/0004-zero-dependency-philosophy.md +60 -0
- package/docs/adr/0005-lazy-phase-docs.md +68 -0
- package/docs/adr/0006-skills-core-external-split.md +52 -0
- package/docs/adr/0007-multi-tool-adapter-framework.md +110 -0
- package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +98 -0
- package/docs/adr/README.md +33 -0
- package/docs/architecture.md +181 -0
- package/docs/best-practices.md +93 -0
- package/docs/features.md +274 -0
- package/docs/performance.md +116 -0
- package/docs/recovery-guide.md +479 -0
- package/index.js +76 -0
- package/install/_adapters.mjs +69 -0
- package/install/_common.mjs +150 -0
- package/install/_copilot-instructions.mjs +32 -0
- package/install/_dev-only-files.mjs +23 -0
- package/install/_platform-filter.mjs +132 -0
- package/install/_telemetry.mjs +79 -0
- package/install/claude.mjs +332 -0
- package/install/copilot.mjs +254 -0
- package/install/index.mjs +179 -0
- package/install/templates/copilot-instructions.md +319 -0
- package/install.js +24 -0
- package/package.json +78 -0
- package/pipeline/adapters/_base.mjs +288 -0
- package/pipeline/adapters/copilot-chat.mjs +158 -0
- package/pipeline/adapters/cursor.mjs +187 -0
- package/pipeline/agents/android-architect.md +42 -0
- package/pipeline/agents/backend-architect.md +43 -0
- package/pipeline/agents/code-reviewer.md +57 -0
- package/pipeline/agents/dev-critic.md +148 -0
- package/pipeline/agents/explorer.md +34 -0
- package/pipeline/agents/ios-architect.md +41 -0
- package/pipeline/agents/security-auditor.md +98 -0
- package/pipeline/agents/task-clarifier.md +113 -0
- package/pipeline/claude-md-template.md +55 -0
- package/pipeline/commands/archive-guard.md +45 -0
- package/pipeline/commands/deploy.md +54 -0
- package/pipeline/commands/figma-to-swiftui.md +295 -0
- package/pipeline/commands/multi-agent/_account-picker.md +90 -0
- package/pipeline/commands/multi-agent/_dev-context.md +111 -0
- package/pipeline/commands/multi-agent/_input-parser.md +43 -0
- package/pipeline/commands/multi-agent/_repo-picker.md +76 -0
- package/pipeline/commands/multi-agent/autopilot.md +116 -0
- package/pipeline/commands/multi-agent/channels.md +465 -0
- package/pipeline/commands/multi-agent/delete.md +66 -0
- package/pipeline/commands/multi-agent/dev-autopilot.md +120 -0
- package/pipeline/commands/multi-agent/dev-local-autopilot.md +110 -0
- package/pipeline/commands/multi-agent/dev-local.md +105 -0
- package/pipeline/commands/multi-agent/dev.md +246 -0
- package/pipeline/commands/multi-agent/diff-explain.md +68 -0
- package/pipeline/commands/multi-agent/help.md +422 -0
- package/pipeline/commands/multi-agent/issue.md +79 -0
- package/pipeline/commands/multi-agent/jira.md +132 -0
- package/pipeline/commands/multi-agent/kill.md +38 -0
- package/pipeline/commands/multi-agent/language.md +94 -0
- package/pipeline/commands/multi-agent/local-autopilot.md +139 -0
- package/pipeline/commands/multi-agent/local.md +117 -0
- package/pipeline/commands/multi-agent/log.md +25 -0
- package/pipeline/commands/multi-agent/manual-test.md +43 -0
- package/pipeline/commands/multi-agent/purge.md +39 -0
- package/pipeline/commands/multi-agent/refactor.md +188 -0
- package/pipeline/commands/multi-agent/refs/android-guide.md +250 -0
- package/pipeline/commands/multi-agent/refs/audit-guide.md +240 -0
- package/pipeline/commands/multi-agent/refs/backend-guide.md +135 -0
- package/pipeline/commands/multi-agent/refs/channels/confluence.md +153 -0
- package/pipeline/commands/multi-agent/refs/channels/issue-comment.md +141 -0
- package/pipeline/commands/multi-agent/refs/channels/jira.md +127 -0
- package/pipeline/commands/multi-agent/refs/channels/pr-review-actions.md +135 -0
- package/pipeline/commands/multi-agent/refs/channels/pr.md +139 -0
- package/pipeline/commands/multi-agent/refs/channels/wiki.md +66 -0
- package/pipeline/commands/multi-agent/refs/component-dispatch.md +92 -0
- package/pipeline/commands/multi-agent/refs/cross-cli-contract.md +326 -0
- package/pipeline/commands/multi-agent/refs/frontend-guide.md +136 -0
- package/pipeline/commands/multi-agent/refs/issue-jira-triad.md +104 -0
- package/pipeline/commands/multi-agent/refs/keychain.md +80 -0
- package/pipeline/commands/multi-agent/refs/knowledge.md +112 -0
- package/pipeline/commands/multi-agent/refs/multi-repo-integration-build.md +207 -0
- package/pipeline/commands/multi-agent/refs/phases/log-format.md +89 -0
- package/pipeline/commands/multi-agent/refs/phases/modes.md +156 -0
- package/pipeline/commands/multi-agent/refs/phases/operations.md +91 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-0-init.md +481 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-1-analysis.md +264 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-2-planning.md +278 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-3-dev.md +364 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-4-review.md +378 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-5-test.md +129 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-6-commit.md +339 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-7-report.md +361 -0
- package/pipeline/commands/multi-agent/refs/phases.md +187 -0
- package/pipeline/commands/multi-agent/refs/progress-contract.md +155 -0
- package/pipeline/commands/multi-agent/refs/rules.md +189 -0
- package/pipeline/commands/multi-agent/refs/swiftui-guide.md +254 -0
- package/pipeline/commands/multi-agent/refs/tracker-contract.md +256 -0
- package/pipeline/commands/multi-agent/refs/wiki-capture.md +109 -0
- package/pipeline/commands/multi-agent/resume.md +28 -0
- package/pipeline/commands/multi-agent/review.md +228 -0
- package/pipeline/commands/multi-agent/scan.md +74 -0
- package/pipeline/commands/multi-agent/search.md +97 -0
- package/pipeline/commands/multi-agent/setup.md +767 -0
- package/pipeline/commands/multi-agent/stack.md +48 -0
- package/pipeline/commands/multi-agent/status.md +38 -0
- package/pipeline/commands/multi-agent/sync.md +319 -0
- package/pipeline/commands/multi-agent/test.md +39 -0
- package/pipeline/commands/multi-agent/update.md +88 -0
- package/pipeline/commands/multi-agent.md +293 -0
- package/pipeline/commands/security-review.md +6 -0
- package/pipeline/commands/sim-test.md +256 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-1-analysis.json +25 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-2-plan.json +30 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-review.json +20 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-triage.json +15 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/task.json +12 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-1-analysis.json +29 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-2-plan.json +43 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-review.json +35 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-triage.json +35 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/task.json +12 -0
- package/pipeline/eval/golden-tasks/README.md +65 -0
- package/pipeline/eval/triage/01-empty-findings/expected.json +6 -0
- package/pipeline/eval/triage/01-empty-findings/input.json +5 -0
- package/pipeline/eval/triage/01-empty-findings/notes.md +7 -0
- package/pipeline/eval/triage/02-real-blocker/expected.json +15 -0
- package/pipeline/eval/triage/02-real-blocker/input.json +14 -0
- package/pipeline/eval/triage/02-real-blocker/notes.md +7 -0
- package/pipeline/eval/triage/03-out-of-scope-defer/expected.json +18 -0
- package/pipeline/eval/triage/03-out-of-scope-defer/input.json +14 -0
- package/pipeline/eval/triage/03-out-of-scope-defer/notes.md +10 -0
- package/pipeline/eval/triage/04-false-positive-reject/expected.json +18 -0
- package/pipeline/eval/triage/04-false-positive-reject/input.json +14 -0
- package/pipeline/eval/triage/04-false-positive-reject/notes.md +10 -0
- package/pipeline/eval/triage/05-mixed-classification/expected.json +43 -0
- package/pipeline/eval/triage/05-mixed-classification/input.json +38 -0
- package/pipeline/eval/triage/05-mixed-classification/notes.md +17 -0
- package/pipeline/eval/triage/06-severity-mismatch/expected.json +15 -0
- package/pipeline/eval/triage/06-severity-mismatch/input.json +14 -0
- package/pipeline/eval/triage/06-severity-mismatch/notes.md +9 -0
- package/pipeline/eval/triage/07-duplicate-reviewers/expected.json +27 -0
- package/pipeline/eval/triage/07-duplicate-reviewers/input.json +22 -0
- package/pipeline/eval/triage/07-duplicate-reviewers/notes.md +9 -0
- package/pipeline/eval/triage/08-style-misclassified/expected.json +18 -0
- package/pipeline/eval/triage/08-style-misclassified/input.json +14 -0
- package/pipeline/eval/triage/08-style-misclassified/notes.md +9 -0
- package/pipeline/eval/triage/09-cascading-finding/expected.json +23 -0
- package/pipeline/eval/triage/09-cascading-finding/input.json +22 -0
- package/pipeline/eval/triage/09-cascading-finding/notes.md +9 -0
- package/pipeline/eval/triage/10-deferred-crossref/expected.json +18 -0
- package/pipeline/eval/triage/10-deferred-crossref/input.json +14 -0
- package/pipeline/eval/triage/10-deferred-crossref/notes.md +9 -0
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/expected.json +27 -0
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/input.json +22 -0
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/notes.md +14 -0
- package/pipeline/eval/triage/README.md +54 -0
- package/pipeline/lib/account-resolver.sh +204 -0
- package/pipeline/lib/channels-multi-repo.sh +218 -0
- package/pipeline/lib/context-link-extractor.sh +192 -0
- package/pipeline/lib/credential-store-resolver.sh +57 -0
- package/pipeline/lib/credential-store.sh +226 -0
- package/pipeline/lib/fetch-confluence.sh +358 -0
- package/pipeline/lib/fetch-crashlytics.sh +314 -0
- package/pipeline/lib/fetch-fortify.sh +321 -0
- package/pipeline/lib/fetch-swagger.sh +270 -0
- package/pipeline/lib/issue-fetcher.sh +333 -0
- package/pipeline/lib/multi-repo-pipeline.sh +252 -0
- package/pipeline/lib/plan-todos.sh +284 -0
- package/pipeline/lib/post-pr-review.sh +374 -0
- package/pipeline/lib/repo-cache.sh +231 -0
- package/pipeline/lib/review-watch.sh +244 -0
- package/pipeline/lib/shadow-git.sh +222 -0
- package/pipeline/lib/submodule-detector.sh +177 -0
- package/pipeline/lib/vercel-deploy.sh +170 -0
- package/pipeline/preferences-template.json +132 -0
- package/pipeline/rules/app-store-guidelines.md +59 -0
- package/pipeline/rules/code-review.md +27 -0
- package/pipeline/rules/code-style.md +37 -0
- package/pipeline/rules/debugging.md +24 -0
- package/pipeline/rules/figma-pipeline.md +190 -0
- package/pipeline/rules/git-conventions.md +29 -0
- package/pipeline/rules/kotlin-android.md +92 -0
- package/pipeline/rules/performance.md +23 -0
- package/pipeline/rules/security.md +39 -0
- package/pipeline/rules/swiftui-qa.md +32 -0
- package/pipeline/rules/tdd.md +25 -0
- package/pipeline/rules/testing.md +37 -0
- package/pipeline/schemas/agent-state.schema.json +273 -0
- package/pipeline/schemas/analysis-output.schema.json +59 -0
- package/pipeline/schemas/clarify-output.schema.json +74 -0
- package/pipeline/schemas/dev-critic-output.schema.json +104 -0
- package/pipeline/schemas/diff-risk.schema.json +78 -0
- package/pipeline/schemas/figma-project-config.schema.json +372 -0
- package/pipeline/schemas/migrations/README.md +73 -0
- package/pipeline/schemas/migrations/figma-config-1.0.0-to-2.0.0.mjs +112 -0
- package/pipeline/schemas/migrations/prefs-2.0.0-to-2.1.0.mjs +75 -0
- package/pipeline/schemas/migrations/prefs-2.1.0-to-2.2.0.mjs +64 -0
- package/pipeline/schemas/migrations/prefs-2.2.0-to-2.3.0.mjs +36 -0
- package/pipeline/schemas/migrations/state-2.0.0-to-2.1.0.mjs +34 -0
- package/pipeline/schemas/plan-todos.schema.json +62 -0
- package/pipeline/schemas/planning-output.schema.json +57 -0
- package/pipeline/schemas/prefs.schema.json +1137 -0
- package/pipeline/schemas/reviewer-output.schema.json +55 -0
- package/pipeline/schemas/test-gap.schema.json +64 -0
- package/pipeline/schemas/token-budget.json +17 -0
- package/pipeline/schemas/triage-corpus.schema.json +31 -0
- package/pipeline/schemas/triage-output.schema.json +115 -0
- package/pipeline/scripts/.last-figma-sync-plan.json +23 -0
- package/pipeline/scripts/README-figma-smokes.md +34 -0
- package/pipeline/scripts/README.md +104 -0
- package/pipeline/scripts/aggregate-metrics.mjs +310 -0
- package/pipeline/scripts/audit-log-rotate.sh +61 -0
- package/pipeline/scripts/audit-log.sh +69 -0
- package/pipeline/scripts/benchmark-phase-0.sh +128 -0
- package/pipeline/scripts/build-skills-index.mjs +139 -0
- package/pipeline/scripts/classify-plan-safety.mjs +177 -0
- package/pipeline/scripts/cost-table.json +27 -0
- package/pipeline/scripts/diff-explain.mjs +276 -0
- package/pipeline/scripts/diff-risk-score.mjs +328 -0
- package/pipeline/scripts/eval-golden-tasks-live.mjs +294 -0
- package/pipeline/scripts/eval-golden-tasks.mjs +223 -0
- package/pipeline/scripts/eval-triage.mjs +171 -0
- package/pipeline/scripts/figma-placeholder-map.json +191 -0
- package/pipeline/scripts/fixtures/diff-risk-android.diff +40 -0
- package/pipeline/scripts/fixtures/diff-risk-ios.diff +48 -0
- package/pipeline/scripts/fixtures/install-layout.tsv +16 -0
- package/pipeline/scripts/fixtures/test-gap-node.diff +30 -0
- package/pipeline/scripts/fixtures/test-gap-python.diff +32 -0
- package/pipeline/scripts/gen-mode-dispatch.mjs +170 -0
- package/pipeline/scripts/gen-skills-index.mjs +90 -0
- package/pipeline/scripts/github-ssh-setup.sh +103 -0
- package/pipeline/scripts/import-figma-skills.sh +253 -0
- package/pipeline/scripts/keychain-save.sh +74 -0
- package/pipeline/scripts/keychain.py +294 -0
- package/pipeline/scripts/log-metric.sh +98 -0
- package/pipeline/scripts/match-skills.mjs +167 -0
- package/pipeline/scripts/memory-load.sh +46 -0
- package/pipeline/scripts/memory-save.sh +76 -0
- package/pipeline/scripts/migrate-prefs.mjs +390 -0
- package/pipeline/scripts/migrate-state.mjs +215 -0
- package/pipeline/scripts/output-quality-check.sh +125 -0
- package/pipeline/scripts/phase-banner.sh +158 -0
- package/pipeline/scripts/phase-tracker.sh +548 -0
- package/pipeline/scripts/pre-commit-check.sh +69 -0
- package/pipeline/scripts/pre-push-check.sh +77 -0
- package/pipeline/scripts/render-agent-log-cost.sh +149 -0
- package/pipeline/scripts/render-cost-summary.sh +137 -0
- package/pipeline/scripts/render-work-summary.sh +195 -0
- package/pipeline/scripts/repo-map.mjs +367 -0
- package/pipeline/scripts/run-aggregator.mjs +298 -0
- package/pipeline/scripts/scan-skills.sh +332 -0
- package/pipeline/scripts/search-logs.sh +291 -0
- package/pipeline/scripts/sign-skills.sh +67 -0
- package/pipeline/scripts/smoke-adapters.sh +207 -0
- package/pipeline/scripts/smoke-add-detail.sh +137 -0
- package/pipeline/scripts/smoke-agent-log-cost.sh +183 -0
- package/pipeline/scripts/smoke-agent-model-routing.sh +87 -0
- package/pipeline/scripts/smoke-bitbucket-contract.sh +223 -0
- package/pipeline/scripts/smoke-channels-flow.sh +130 -0
- package/pipeline/scripts/smoke-ci-workflows.sh +88 -0
- package/pipeline/scripts/smoke-clarify.sh +148 -0
- package/pipeline/scripts/smoke-commands-skills-parity.sh +87 -0
- package/pipeline/scripts/smoke-compliance-skills.sh +119 -0
- package/pipeline/scripts/smoke-cost-summary.sh +139 -0
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +198 -0
- package/pipeline/scripts/smoke-cross-phase-cohesion.sh +128 -0
- package/pipeline/scripts/smoke-delete-flow.sh +151 -0
- package/pipeline/scripts/smoke-dev-critic.sh +144 -0
- package/pipeline/scripts/smoke-diff-explain.sh +128 -0
- package/pipeline/scripts/smoke-diff-risk.sh +161 -0
- package/pipeline/scripts/smoke-dynamic-skill-loading.sh +160 -0
- package/pipeline/scripts/smoke-eval-live.sh +136 -0
- package/pipeline/scripts/smoke-existing-discovery-gate.sh +71 -0
- package/pipeline/scripts/smoke-figma-android-parity.sh +148 -0
- package/pipeline/scripts/smoke-figma-config-schema.sh +144 -0
- package/pipeline/scripts/smoke-figma-credential-store.sh +105 -0
- package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +177 -0
- package/pipeline/scripts/smoke-figma-dispatch.sh +123 -0
- package/pipeline/scripts/smoke-figma-skill-import.sh +174 -0
- package/pipeline/scripts/smoke-figma-sync.sh +149 -0
- package/pipeline/scripts/smoke-identity-isolation.sh +70 -0
- package/pipeline/scripts/smoke-install-layout.sh +241 -0
- package/pipeline/scripts/smoke-install-leak-gate.sh +125 -0
- package/pipeline/scripts/smoke-issue-comment-template.sh +86 -0
- package/pipeline/scripts/smoke-issue-jira-triad.sh +120 -0
- package/pipeline/scripts/smoke-keychain.sh +158 -0
- package/pipeline/scripts/smoke-language-axis.sh +109 -0
- package/pipeline/scripts/smoke-lib-scripts.sh +395 -0
- package/pipeline/scripts/smoke-migrate-state.sh +102 -0
- package/pipeline/scripts/smoke-mode-dispatch-drift.sh +158 -0
- package/pipeline/scripts/smoke-multi-repo-integration.sh +116 -0
- package/pipeline/scripts/smoke-multi-repo-worktree.sh +61 -0
- package/pipeline/scripts/smoke-no-token-prompt.sh +69 -0
- package/pipeline/scripts/smoke-pat-audit.sh +107 -0
- package/pipeline/scripts/smoke-per-repo-memory.sh +156 -0
- package/pipeline/scripts/smoke-personal-data.sh +82 -0
- package/pipeline/scripts/smoke-phase-0-multi-repo.sh +170 -0
- package/pipeline/scripts/smoke-phase-6-multi.sh +79 -0
- package/pipeline/scripts/smoke-phase-banner.sh +101 -0
- package/pipeline/scripts/smoke-phase-tracker.sh +255 -0
- package/pipeline/scripts/smoke-phase0-bridge-contract.sh +241 -0
- package/pipeline/scripts/smoke-phase4-triage.sh +142 -0
- package/pipeline/scripts/smoke-plan-approval-gate.sh +71 -0
- package/pipeline/scripts/smoke-plan-safety.sh +139 -0
- package/pipeline/scripts/smoke-plan-todos.sh +193 -0
- package/pipeline/scripts/smoke-pr-review-actions.sh +152 -0
- package/pipeline/scripts/smoke-pre-commit.sh +138 -0
- package/pipeline/scripts/smoke-pref-migration.sh +224 -0
- package/pipeline/scripts/smoke-prefs-language.sh +134 -0
- package/pipeline/scripts/smoke-progress-contract.sh +118 -0
- package/pipeline/scripts/smoke-push-retry.sh +75 -0
- package/pipeline/scripts/smoke-readme-counts.sh +120 -0
- package/pipeline/scripts/smoke-repo-map.sh +300 -0
- package/pipeline/scripts/smoke-review-watch.sh +134 -0
- package/pipeline/scripts/smoke-run-aggregator.sh +216 -0
- package/pipeline/scripts/smoke-schema-validation.sh +173 -0
- package/pipeline/scripts/smoke-search.sh +187 -0
- package/pipeline/scripts/smoke-shadow-git.sh +175 -0
- package/pipeline/scripts/smoke-skill-authoring.sh +142 -0
- package/pipeline/scripts/smoke-skill-language.sh +83 -0
- package/pipeline/scripts/smoke-skill-manifest.sh +138 -0
- package/pipeline/scripts/smoke-skill-scan.sh +198 -0
- package/pipeline/scripts/smoke-stack-swap.sh +132 -0
- package/pipeline/scripts/smoke-subagent-validators.sh +105 -0
- package/pipeline/scripts/smoke-sync-delegation.sh +74 -0
- package/pipeline/scripts/smoke-sync-parity.sh +92 -0
- package/pipeline/scripts/smoke-tasklist-ordering.sh +111 -0
- package/pipeline/scripts/smoke-telemetry.sh +147 -0
- package/pipeline/scripts/smoke-test-gap.sh +183 -0
- package/pipeline/scripts/smoke-token-budget.sh +67 -0
- package/pipeline/scripts/smoke-tracker-contract.sh +129 -0
- package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +65 -0
- package/pipeline/scripts/smoke-triage-memory.sh +174 -0
- package/pipeline/scripts/smoke-url-enrichment.sh +70 -0
- package/pipeline/scripts/smoke-validator-contradiction.sh +67 -0
- package/pipeline/scripts/smoke-vercel-deploy-redact.sh +129 -0
- package/pipeline/scripts/smoke-wiki-integration.sh +146 -0
- package/pipeline/scripts/smoke-work-summary.sh +163 -0
- package/pipeline/scripts/smoke-worktree-path-convention.sh +86 -0
- package/pipeline/scripts/smoke-write-state.sh +115 -0
- package/pipeline/scripts/stack-swap.sh +182 -0
- package/pipeline/scripts/sync-figma-source.sh +228 -0
- package/pipeline/scripts/sync-parity-check.sh +135 -0
- package/pipeline/scripts/test-gap-rules/android.json +25 -0
- package/pipeline/scripts/test-gap-rules/ios.json +29 -0
- package/pipeline/scripts/test-gap-rules/node.json +17 -0
- package/pipeline/scripts/test-gap-rules/python.json +19 -0
- package/pipeline/scripts/test-gap-scan.mjs +343 -0
- package/pipeline/scripts/token-budget-report.mjs +145 -0
- package/pipeline/scripts/triage-memory.mjs +258 -0
- package/pipeline/scripts/ui-tree-dumper.swift +122 -0
- package/pipeline/scripts/uninstall.mjs +331 -0
- package/pipeline/scripts/update-issue-progress.sh +146 -0
- package/pipeline/scripts/validate-analysis.mjs +132 -0
- package/pipeline/scripts/validate-diff-risk.mjs +117 -0
- package/pipeline/scripts/validate-planning.mjs +180 -0
- package/pipeline/scripts/validate-reviewer.mjs +131 -0
- package/pipeline/scripts/validate-schemas.mjs +88 -0
- package/pipeline/scripts/validate-test-gap.mjs +90 -0
- package/pipeline/scripts/validate-triage.mjs +175 -0
- package/pipeline/scripts/verify-skills.sh +126 -0
- package/pipeline/scripts/write-state.mjs +175 -0
- package/pipeline/skills/.skill-manifest.json +779 -0
- package/pipeline/skills/.skills-index.json +1771 -0
- package/pipeline/skills/figma-android/README.md +36 -0
- package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +62 -0
- package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +158 -0
- package/pipeline/skills/figma-android/figma-component-test/SKILL.md +120 -0
- package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +35 -0
- package/pipeline/skills/figma-android/figma-to-component/SKILL.md +124 -0
- package/pipeline/skills/figma-common/README.md +57 -0
- package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +277 -0
- package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +498 -0
- package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +283 -0
- package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +362 -0
- package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +206 -0
- package/pipeline/skills/figma-common/figma-commit/REVIEW.md +337 -0
- package/pipeline/skills/figma-common/figma-commit/SKILL.md +211 -0
- package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +218 -0
- package/pipeline/skills/figma-common/figma-component-start/SKILL.md +246 -0
- package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +73 -0
- package/pipeline/skills/figma-common/figma-fix/SKILL.md +316 -0
- package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +542 -0
- package/pipeline/skills/figma-common/figma-issue/SKILL.md +745 -0
- package/pipeline/skills/figma-common/figma-iterate/SKILL.md +203 -0
- package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +1015 -0
- package/pipeline/skills/figma-common/figma-mend/SKILL.md +331 -0
- package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +398 -0
- package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +104 -0
- package/pipeline/skills/figma-common/figma-review/SKILL.md +395 -0
- package/pipeline/skills/figma-common/figma-setup/SKILL.md +514 -0
- package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +592 -0
- package/pipeline/skills/figma-common/figma-skip/SKILL.md +129 -0
- package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +104 -0
- package/pipeline/skills/figma-common/figma-utility/SKILL.md +274 -0
- package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +808 -0
- package/pipeline/skills/figma-common/figma-validate/SKILL.md +633 -0
- package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +711 -0
- package/pipeline/skills/figma-common/performance-review-next/SKILL.md +233 -0
- package/pipeline/skills/figma-common/performance-start/SKILL.md +425 -0
- package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +706 -0
- package/pipeline/skills/figma-common/performance-tour/SKILL.md +418 -0
- package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +67 -0
- package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +178 -0
- package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +184 -0
- package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +219 -0
- package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +274 -0
- package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +401 -0
- package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +57 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +307 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +119 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +174 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +333 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +368 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +393 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +617 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +352 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +337 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +206 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +235 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +214 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +871 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +156 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +175 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +176 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +333 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +412 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +336 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +695 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +332 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +380 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +262 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +482 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +274 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +636 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +142 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +547 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +39 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +659 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +580 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +51 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +129 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/analytics-events.md +64 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +531 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-api.md +89 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-xhtml.md +155 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +196 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +57 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/localization-naming.md +89 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +227 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +157 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +90 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/registry.md +116 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +153 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +130 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +218 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +188 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +93 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +98 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +261 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +147 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +182 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +185 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +609 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +332 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +261 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +184 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +188 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +768 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +191 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +420 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.json +94 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +336 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +391 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +292 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/__init__.py +1 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +93 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +299 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_backfill_status.py +343 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +206 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update_http.py +149 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_phase_clis.py +281 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +332 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +176 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_review.py +98 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue.py +298 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +195 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +1298 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +228 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +1089 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +141 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +106 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +162 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +105 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +179 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +260 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +260 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +86 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +321 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +1470 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +176 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +147 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase7a.py +629 -0
- package/pipeline/skills/shared/README.md +212 -0
- package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +315 -0
- package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +348 -0
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +944 -0
- package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +51 -0
- package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +300 -0
- package/pipeline/skills/shared/core/multi-agent-delete/SKILL.md +63 -0
- package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +64 -0
- package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +56 -0
- package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +36 -0
- package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +42 -0
- package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +66 -0
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +292 -0
- package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +35 -0
- package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +38 -0
- package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +41 -0
- package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +87 -0
- package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +37 -0
- package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +53 -0
- package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +28 -0
- package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +47 -0
- package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +42 -0
- package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +191 -0
- package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +31 -0
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +61 -0
- package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +61 -0
- package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +62 -0
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +309 -0
- package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +55 -0
- package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +41 -0
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +184 -0
- package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +44 -0
- package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +34 -0
- package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +45 -0
- package/pipeline/skills/shared/external/agentflow/SKILL.md +199 -0
- package/pipeline/skills/shared/external/alarmkit/SKILL.md +438 -0
- package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +584 -0
- package/pipeline/skills/shared/external/android-architecture/SKILL.md +407 -0
- package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +153 -0
- package/pipeline/skills/shared/external/android-performance/SKILL.md +736 -0
- package/pipeline/skills/shared/external/android-security/SKILL.md +577 -0
- package/pipeline/skills/shared/external/android_ui_verification/SKILL.md +66 -0
- package/pipeline/skills/shared/external/api-patterns/SKILL.md +85 -0
- package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +910 -0
- package/pipeline/skills/shared/external/app-clips/SKILL.md +436 -0
- package/pipeline/skills/shared/external/app-intents/SKILL.md +489 -0
- package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +1076 -0
- package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +75 -0
- package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +409 -0
- package/pipeline/skills/shared/external/app-store-review/SKILL.md +411 -0
- package/pipeline/skills/shared/external/app-store-review/references/code-signing.md +259 -0
- package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +90 -0
- package/pipeline/skills/shared/external/app-store-review/references/rejection-patterns.md +152 -0
- package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +118 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +500 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +425 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +344 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +508 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +285 -0
- package/pipeline/skills/shared/external/architecture/SKILL.md +60 -0
- package/pipeline/skills/shared/external/authentication/SKILL.md +496 -0
- package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +211 -0
- package/pipeline/skills/shared/external/background-processing/SKILL.md +499 -0
- package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +390 -0
- package/pipeline/skills/shared/external/callkit-voip/SKILL.md +461 -0
- package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +425 -0
- package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +462 -0
- package/pipeline/skills/shared/external/clean-code/SKILL.md +94 -0
- package/pipeline/skills/shared/external/closed-loop-delivery/SKILL.md +116 -0
- package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +492 -0
- package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +461 -0
- package/pipeline/skills/shared/external/compose-components/SKILL.md +441 -0
- package/pipeline/skills/shared/external/compose-navigation/SKILL.md +436 -0
- package/pipeline/skills/shared/external/compose-testing/SKILL.md +527 -0
- package/pipeline/skills/shared/external/contacts-framework/SKILL.md +425 -0
- package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +409 -0
- package/pipeline/skills/shared/external/context-compression/SKILL.md +266 -0
- package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +491 -0
- package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +435 -0
- package/pipeline/skills/shared/external/core-motion/SKILL.md +388 -0
- package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +405 -0
- package/pipeline/skills/shared/external/core-nfc/SKILL.md +495 -0
- package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +420 -0
- package/pipeline/skills/shared/external/coreml/SKILL.md +458 -0
- package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +765 -0
- package/pipeline/skills/shared/external/css-modern/SKILL.md +467 -0
- package/pipeline/skills/shared/external/database-patterns/SKILL.md +335 -0
- package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +422 -0
- package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +387 -0
- package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +298 -0
- package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +37 -0
- package/pipeline/skills/shared/external/device-integrity/SKILL.md +477 -0
- package/pipeline/skills/shared/external/docker-expert/SKILL.md +413 -0
- package/pipeline/skills/shared/external/energykit/SKILL.md +460 -0
- package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +541 -0
- package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +483 -0
- package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +326 -0
- package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +190 -0
- package/pipeline/skills/shared/external/firebase/SKILL.md +61 -0
- package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +348 -0
- package/pipeline/skills/shared/external/gradle-kotlin-dsl/SKILL.md +552 -0
- package/pipeline/skills/shared/external/healthkit/SKILL.md +498 -0
- package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +602 -0
- package/pipeline/skills/shared/external/help-skills/SKILL.md +166 -0
- package/pipeline/skills/shared/external/hig-components-content/SKILL.md +81 -0
- package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +95 -0
- package/pipeline/skills/shared/external/hig-components-status/SKILL.md +82 -0
- package/pipeline/skills/shared/external/hig-components-system/SKILL.md +101 -0
- package/pipeline/skills/shared/external/hig-foundations/SKILL.md +94 -0
- package/pipeline/skills/shared/external/hig-inputs/SKILL.md +110 -0
- package/pipeline/skills/shared/external/hig-patterns/SKILL.md +99 -0
- package/pipeline/skills/shared/external/hig-platforms/SKILL.md +81 -0
- package/pipeline/skills/shared/external/hig-technologies/SKILL.md +125 -0
- package/pipeline/skills/shared/external/homekit-matter/SKILL.md +496 -0
- package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +455 -0
- package/pipeline/skills/shared/external/html-semantic/SKILL.md +301 -0
- package/pipeline/skills/shared/external/humanizer/SKILL.md +118 -0
- package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +301 -0
- package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +140 -0
- package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +59 -0
- package/pipeline/skills/shared/external/ios-developer/SKILL.md +217 -0
- package/pipeline/skills/shared/external/ios-localization/SKILL.md +418 -0
- package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +627 -0
- package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +462 -0
- package/pipeline/skills/shared/external/ios-networking/SKILL.md +441 -0
- package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +862 -0
- package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -0
- package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +563 -0
- package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +1116 -0
- package/pipeline/skills/shared/external/ios-security/SKILL.md +496 -0
- package/pipeline/skills/shared/external/ios-security/references/app-review-guidelines.md +174 -0
- package/pipeline/skills/shared/external/ios-security/references/cryptokit-advanced.md +297 -0
- package/pipeline/skills/shared/external/ios-security/references/file-storage-patterns.md +354 -0
- package/pipeline/skills/shared/external/ios-security/references/privacy-manifest.md +117 -0
- package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +101 -0
- package/pipeline/skills/shared/external/live-activities/SKILL.md +500 -0
- package/pipeline/skills/shared/external/live-activities/references/live-activity-patterns.md +868 -0
- package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +109 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +110 -0
- package/pipeline/skills/shared/external/mapkit-location/SKILL.md +485 -0
- package/pipeline/skills/shared/external/mapkit-location/references/corelocation-patterns.md +730 -0
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +748 -0
- package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +479 -0
- package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +64 -0
- package/pipeline/skills/shared/external/musickit-audio/SKILL.md +395 -0
- package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +363 -0
- package/pipeline/skills/shared/external/natural-language/SKILL.md +412 -0
- package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +311 -0
- package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +418 -0
- package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +38 -0
- package/pipeline/skills/shared/external/observability-engineer/SKILL.md +235 -0
- package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +398 -0
- package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +254 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +387 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/references/paperkit-integration.md +376 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +302 -0
- package/pipeline/skills/shared/external/permissionkit/SKILL.md +446 -0
- package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +435 -0
- package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +501 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +701 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +774 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +869 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/photospicker-patterns.md +597 -0
- package/pipeline/skills/shared/external/play-store-review/SKILL.md +350 -0
- package/pipeline/skills/shared/external/push-notifications/SKILL.md +501 -0
- package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +677 -0
- package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +745 -0
- package/pipeline/skills/shared/external/python-patterns/SKILL.md +383 -0
- package/pipeline/skills/shared/external/react-best-practices/SKILL.md +290 -0
- package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +479 -0
- package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +480 -0
- package/pipeline/skills/shared/external/rest-api-design/SKILL.md +386 -0
- package/pipeline/skills/shared/external/retrofit-networking/SKILL.md +506 -0
- package/pipeline/skills/shared/external/room-database/SKILL.md +564 -0
- package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +483 -0
- package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +544 -0
- package/pipeline/skills/shared/external/speech-recognition/SKILL.md +485 -0
- package/pipeline/skills/shared/external/storekit/SKILL.md +478 -0
- package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +58 -0
- package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +755 -0
- package/pipeline/skills/shared/external/swift-charts/SKILL.md +487 -0
- package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +895 -0
- package/pipeline/skills/shared/external/swift-codable/SKILL.md +467 -0
- package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +408 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +80 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/swift-6-2-concurrency.md +233 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +187 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +341 -0
- package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +113 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/SKILL.md +124 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/actors.md +155 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/async-streams.md +67 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/bridging.md +52 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/bug-patterns.md +100 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/cancellation.md +107 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/diagnostics.md +70 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/hotspots.md +47 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/interop.md +129 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/new-features.md +224 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/structured.md +101 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/testing.md +218 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/unstructured.md +61 -0
- package/pipeline/skills/shared/external/swift-language/SKILL.md +498 -0
- package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +505 -0
- package/pipeline/skills/shared/external/swift-testing/SKILL.md +462 -0
- package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +504 -0
- package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +97 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/async-tests.md +252 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/core-rules.md +52 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/migrating-from-xctest.md +34 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +318 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/writing-better-tests.md +254 -0
- package/pipeline/skills/shared/external/swiftdata/SKILL.md +334 -0
- package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +504 -0
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +975 -0
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +675 -0
- package/pipeline/skills/shared/external/swiftdata-pro/SKILL.md +102 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/class-inheritance.md +104 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/cloudkit.md +10 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/core-rules.md +20 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/indexing.md +27 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/predicates.md +73 -0
- package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +503 -0
- package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +821 -0
- package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +553 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/SKILL.md +102 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/accessibility-patterns.md +215 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-advanced.md +403 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-basics.md +284 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-transitions.md +326 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts-accessibility.md +135 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts.md +602 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/image-optimization.md +203 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/latest-apis.md +464 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/layout-best-practices.md +266 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/liquid-glass.md +416 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/list-patterns.md +394 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-scenes.md +318 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-views.md +357 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-window-styling.md +303 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/performance-patterns.md +403 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/scroll-patterns.md +293 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/sheet-navigation-patterns.md +363 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/state-management.md +417 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/view-structure.md +389 -0
- package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +450 -0
- package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +425 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +336 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +97 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +69 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +99 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +147 -0
- package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +98 -0
- package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +262 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +207 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +177 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +169 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +178 -0
- package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +371 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +486 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +1097 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +780 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +696 -0
- package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +487 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +46 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +29 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +33 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +52 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +114 -0
- package/pipeline/skills/shared/external/swiftui-pro/SKILL.md +108 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/accessibility.md +13 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/api.md +39 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/data.md +43 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/design.md +31 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/hygiene.md +9 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/navigation.md +14 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/performance.md +46 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/swift.md +56 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/views.md +35 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +103 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +428 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +534 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +948 -0
- package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +210 -0
- package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +273 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +151 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +95 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +51 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +111 -0
- package/pipeline/skills/shared/external/tailwind-css/SKILL.md +309 -0
- package/pipeline/skills/shared/external/testing-backend/SKILL.md +393 -0
- package/pipeline/skills/shared/external/tipkit/SKILL.md +494 -0
- package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +782 -0
- package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +336 -0
- package/pipeline/skills/shared/external/vision-framework/SKILL.md +475 -0
- package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +736 -0
- package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +738 -0
- package/pipeline/skills/shared/external/vue-composition/SKILL.md +371 -0
- package/pipeline/skills/shared/external/weatherkit/SKILL.md +410 -0
- package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +567 -0
- package/pipeline/skills/shared/external/web-accessibility/SKILL.md +373 -0
- package/pipeline/skills/shared/external/web-performance/SKILL.md +345 -0
- package/pipeline/skills/shared/external/web-testing/SKILL.md +385 -0
- package/pipeline/skills/shared/external/widgetkit/SKILL.md +497 -0
- package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +871 -0
- package/pipeline/skills/skills-index.md +205 -0
|
@@ -0,0 +1,711 @@
|
|
|
1
|
+
# /performance-iteration-commit-all — Batch Validate & Push All Tour Components
|
|
2
|
+
|
|
3
|
+
> Reads `_tour_tracker.json`, validates all reviewed components in a single build+test
|
|
4
|
+
> cycle, pushes all local commits in a single push per submodule, then handles issue
|
|
5
|
+
> housekeeping for each component individually.
|
|
6
|
+
|
|
7
|
+
## Guardrails
|
|
8
|
+
|
|
9
|
+
> **NEVER create branches on the main repo (REPO_ROOT).** Same guardrail as `figma-iteration-commit`.
|
|
10
|
+
|
|
11
|
+
> **NEVER use `json.dumps()` default formatting on JSON files.** Preserve existing format.
|
|
12
|
+
> `ui-testing-identifiers.json` uses `" : "` (space-colon-space).
|
|
13
|
+
|
|
14
|
+
> **NEVER manually edit `ui-testing-identifiers.json` during rebase conflict resolution.**
|
|
15
|
+
> Follow the conflict resolution protocol from `figma-iteration-commit`.
|
|
16
|
+
|
|
17
|
+
## Parameters
|
|
18
|
+
|
|
19
|
+
No arguments — reads `_tour_tracker.json`.
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
/performance-iteration-commit-all
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Constants
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
REPO_ROOT = git repo root (auto-detect)
|
|
31
|
+
GH_REPO = {github.componentsRepo}
|
|
32
|
+
COMMON = ${REPO_ROOT}/{repos.common.path}
|
|
33
|
+
UICOMPONENTS = ${REPO_ROOT}/{repos.components.path}
|
|
34
|
+
WIKI = ${REPO_ROOT}/{repos.wiki.path}
|
|
35
|
+
TRACKER_FILE = ${REPO_ROOT}/_tour_tracker.json
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## STEP 0 — Read Tracker & Verify State
|
|
41
|
+
|
|
42
|
+
Read `_tour_tracker.json`.
|
|
43
|
+
|
|
44
|
+
Verify:
|
|
45
|
+
- `current_step` is `"STEP_3"` — if not, HALT: "Review not complete. Run /performance-review-next first."
|
|
46
|
+
- `reviewed_components` has at least 1 entry
|
|
47
|
+
- All reviewed components have local commits (check with `git log`)
|
|
48
|
+
|
|
49
|
+
Collect reviewed component data:
|
|
50
|
+
|
|
51
|
+
```python
|
|
52
|
+
reviewed = [tracker["components"][str(issue)] for issue in tracker["reviewed_components"]]
|
|
53
|
+
lean_mode = tracker.get("lean_mode", False)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Print:
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
60
|
+
║ BATCH COMMIT — PRE-FLIGHT ║
|
|
61
|
+
╠══════════════════════════════════════════════════════════════╣
|
|
62
|
+
║ ║
|
|
63
|
+
║ Components to commit: ║
|
|
64
|
+
║ 1. ComponentA (#1000) — reviewed ✅ ║
|
|
65
|
+
║ 2. ComponentC (#1002) — reviewed ✅ ║
|
|
66
|
+
║ ║
|
|
67
|
+
║ Dropped (will NOT be committed): ║
|
|
68
|
+
║ ❌ ComponentB (#1001) — halted, dropped ║
|
|
69
|
+
║ ║
|
|
70
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
71
|
+
|
|
72
|
+
Proceed with validation and push? (yes/no)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Wait for user confirmation.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## STEP 1 — Validate (SINGLE PASS)
|
|
80
|
+
|
|
81
|
+
### 1a. Build
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
xcodebuild build -project "${REPO_ROOT}/{build.xcodeproj}" \
|
|
85
|
+
-scheme {build.scheme} -destination 'generic/platform=iOS' \
|
|
86
|
+
CODE_SIGNING_ALLOWED=NO -quiet
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
If build fails → HALT. Fix before committing.
|
|
90
|
+
|
|
91
|
+
### 1b. Tests (Combined)
|
|
92
|
+
|
|
93
|
+
> **LEAN MODE:** If `lean_mode` is `true` in the tracker, **SKIP this entire substep.**
|
|
94
|
+
> Tests were not generated during production. Print `Tests: ⏭️ skipped (lean mode)` and proceed to 1c.
|
|
95
|
+
|
|
96
|
+
Run tests for ALL reviewed components in a single xcodebuild invocation:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
xcodebuild test -project "${REPO_ROOT}/{build.xcodeproj}" \
|
|
100
|
+
-scheme {build.scheme} \
|
|
101
|
+
-destination 'platform=iOS Simulator,name=iPhone 16 Pro' \
|
|
102
|
+
-only-testing:"UIComponentsTests/ComponentAViewInspectorTests" \
|
|
103
|
+
-only-testing:"UIComponentsTests/ComponentASnapshotTests" \
|
|
104
|
+
-only-testing:"UIComponentsTests/ComponentCViewInspectorTests" \
|
|
105
|
+
-only-testing:"UIComponentsTests/ComponentCSnapshotTests" \
|
|
106
|
+
CODE_SIGNING_ALLOWED=NO -quiet
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Build the `-only-testing` flags dynamically from the reviewed components list.
|
|
110
|
+
|
|
111
|
+
If tests fail → HALT. Identify failing component and fix.
|
|
112
|
+
|
|
113
|
+
### 1c. Key Sync Validation
|
|
114
|
+
|
|
115
|
+
For each reviewed component:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
cd ${COMMON}
|
|
119
|
+
python3 .instructions/figma/figma-to-swiftui/scripts/validate-localization-sync.py \
|
|
120
|
+
--component "${COMPONENT_NAME}"
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
If out of sync → regenerate:
|
|
124
|
+
```bash
|
|
125
|
+
swift package plugin --allow-writing-to-package-directory update-localizations-dev
|
|
126
|
+
swift package plugin --allow-writing-to-package-directory update-accessibility-dev
|
|
127
|
+
swift run UITestingIdentifierTool generate
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
If regeneration creates new changes → commit them:
|
|
131
|
+
```bash
|
|
132
|
+
cd ${COMMON}
|
|
133
|
+
git add -A
|
|
134
|
+
git commit -m "fix(common): sync keys after tour validation
|
|
135
|
+
|
|
136
|
+
Tour: performance-tour $(date +%Y%m%d)"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### 1d. Code Review (Lightweight)
|
|
140
|
+
|
|
141
|
+
Read `.instructions/figma/figma-commit/REVIEW.md` and run the 13-point checklist
|
|
142
|
+
across ALL reviewed components.
|
|
143
|
+
|
|
144
|
+
- Auto-fix any fixable violations
|
|
145
|
+
- If auto-fixes applied, commit:
|
|
146
|
+
```bash
|
|
147
|
+
cd ${UICOMPONENTS}
|
|
148
|
+
git add -A
|
|
149
|
+
git commit -m "fix(uicomponents): auto-fix review violations
|
|
150
|
+
|
|
151
|
+
Tour: performance-tour review fixes"
|
|
152
|
+
```
|
|
153
|
+
- Re-run build (STEP 1a) to verify auto-fixes didn't break anything
|
|
154
|
+
- If unfixable violations remain → print them, ask user to proceed or abort
|
|
155
|
+
|
|
156
|
+
Print validation result:
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
Validation Summary:
|
|
160
|
+
Build: ✅
|
|
161
|
+
Tests: ✅ (ComponentA: 12 passed, ComponentC: 8 passed) # or: ⏭️ skipped (lean mode)
|
|
162
|
+
Key Sync: ✅
|
|
163
|
+
Review: ✅ / ⚠️ (N warnings, M auto-fixed)
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## STEP 2 — Push (SINGLE PUSH per submodule)
|
|
169
|
+
|
|
170
|
+
### 2a. Push with Rebase-Retry Loop
|
|
171
|
+
|
|
172
|
+
For each submodule that has commits (common, uicomponents, wiki):
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
cd ${SUBMODULE}
|
|
176
|
+
PUSH_BRANCH="iteration/develop" # or "master" for wiki
|
|
177
|
+
|
|
178
|
+
MAX_RETRIES=3
|
|
179
|
+
for i in $(seq 1 $MAX_RETRIES); do
|
|
180
|
+
git push origin ${PUSH_BRANCH} && break
|
|
181
|
+
|
|
182
|
+
echo "Push rejected — remote updated. Rebasing (attempt $i)..."
|
|
183
|
+
git fetch origin ${PUSH_BRANCH}
|
|
184
|
+
git rebase origin/${PUSH_BRANCH}
|
|
185
|
+
|
|
186
|
+
if [ $? -ne 0 ]; then
|
|
187
|
+
# Rebase conflict — attempt auto-resolution for generated files
|
|
188
|
+
# See "Generated File Conflict Resolution" below
|
|
189
|
+
# If auto-resolution fails → HALT
|
|
190
|
+
fi
|
|
191
|
+
|
|
192
|
+
# Re-validate build after rebase
|
|
193
|
+
xcodebuild build -project "${REPO_ROOT}/{build.xcodeproj}" \
|
|
194
|
+
-scheme {build.scheme} -destination 'generic/platform=iOS' \
|
|
195
|
+
CODE_SIGNING_ALLOWED=NO -quiet
|
|
196
|
+
|
|
197
|
+
if [ $? -ne 0 ]; then
|
|
198
|
+
echo "HALT: Build failed after rebase. Fix before pushing."
|
|
199
|
+
exit 1
|
|
200
|
+
fi
|
|
201
|
+
done
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**Push order matters:** common → uicomponents → wiki (dependencies flow this direction).
|
|
205
|
+
In **lean mode**, wiki submodule has no commits — skip the wiki push entirely.
|
|
206
|
+
|
|
207
|
+
#### Generated File Conflict Resolution (common submodule)
|
|
208
|
+
|
|
209
|
+
During rebase, conflicts in generated files are **expected** when others have pushed to
|
|
210
|
+
`iteration/develop` concurrently. **NEVER resolve these by picking a side — always
|
|
211
|
+
accept remote then regenerate.**
|
|
212
|
+
|
|
213
|
+
**Conflict resolution table:**
|
|
214
|
+
|
|
215
|
+
| File | Resolution |
|
|
216
|
+
|------|-----------|
|
|
217
|
+
| `ui-testing-identifiers.json` | 1. `git checkout --ours` (upstream=remote during rebase) 2. Re-add our keys from `Shared/Figma/Components/{nodeId}.json` using Python with `" : "` format 3. `git add` |
|
|
218
|
+
| `LocalizationStringKeys.swift` | 1. `git checkout --ours` 2. Run `swift package plugin --allow-writing-to-package-directory update-localizations-dev` 3. `git add` |
|
|
219
|
+
| `UIAssetsGeneratedTokens.swift` | 1. `git checkout --ours` (timestamp-only conflict) 2. `git add` |
|
|
220
|
+
| `UITestingIdentifierKeys.swift` | 1. `git checkout --ours` 2. Run `swift run UITestingIdentifierTool generate` 3. `git add` |
|
|
221
|
+
| `Localizable.xcstrings` | 1. `git checkout --ours` 2. Already regenerated by `update-localizations-dev` above 3. `git add` |
|
|
222
|
+
|
|
223
|
+
**Procedure per conflicted commit during rebase:**
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
1. List conflicted files: git diff --name-only --diff-filter=U
|
|
227
|
+
2. For each conflicted file:
|
|
228
|
+
a. If in table above → apply resolution (accept remote + regenerate)
|
|
229
|
+
b. If NOT in table → HALT, ask user to resolve manually
|
|
230
|
+
3. git add <resolved files>
|
|
231
|
+
4. git rebase --continue
|
|
232
|
+
5. If next commit also conflicts → repeat from step 1
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
**Post-rebase verification:** After all conflicts resolved and rebase completes,
|
|
236
|
+
verify our keys survived:
|
|
237
|
+
```bash
|
|
238
|
+
grep -c "ComponentName" iOS/Sources/LocalizationStringKeys/Generated/LocalizationStringKeys.swift
|
|
239
|
+
grep -c "ComponentName" Shared/UITestingIdentifiers/ui-testing-identifiers.json
|
|
240
|
+
```
|
|
241
|
+
If count is 0 for any component → regenerate again before pushing.
|
|
242
|
+
|
|
243
|
+
#### Wiki Conflict Resolution
|
|
244
|
+
|
|
245
|
+
Wiki status pages (`ComponentImplementationStatus*.md`) are auto-generated dashboards.
|
|
246
|
+
When conflicts occur:
|
|
247
|
+
1. `git checkout --ours` (accept remote counts)
|
|
248
|
+
2. `git add` + `git rebase --continue`
|
|
249
|
+
3. Status dashboard will be regenerated in STEP 3e
|
|
250
|
+
|
|
251
|
+
### 2b. Record Push SHAs
|
|
252
|
+
|
|
253
|
+
After successful push:
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
COMMON_SHA=$(git -C ${COMMON} rev-parse --short HEAD)
|
|
257
|
+
UICOMP_SHA=$(git -C ${UICOMPONENTS} rev-parse --short HEAD)
|
|
258
|
+
WIKI_SHA=$(git -C ${WIKI} rev-parse --short HEAD) # only if not lean_mode
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Update tracker: record SHAs for each component.
|
|
262
|
+
|
|
263
|
+
### 2c. Fetch All Remotes
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
cd ${COMMON} && git fetch origin iteration/develop
|
|
267
|
+
cd ${UICOMPONENTS} && git fetch origin iteration/develop
|
|
268
|
+
# Wiki fetch — skip in lean mode
|
|
269
|
+
if [ "$LEAN_MODE" != "true" ]; then
|
|
270
|
+
cd ${WIKI} && git fetch origin master
|
|
271
|
+
fi
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### 2d. Post-Push Build Verification
|
|
275
|
+
|
|
276
|
+
After all submodules are pushed, verify that the **remote dependency chain** builds
|
|
277
|
+
correctly. This catches issues where generated files lost entries during rebase
|
|
278
|
+
conflict resolution (e.g., `LocalizationStringKeys.swift` missing component keys).
|
|
279
|
+
|
|
280
|
+
1. Ensure `Package.swift` in uicomponents points to **remote** common (not local path):
|
|
281
|
+
```
|
|
282
|
+
.package(url: "...{project.slug}-common.git", branch: "iteration/develop")
|
|
283
|
+
```
|
|
284
|
+
If it has a local `path:` override, revert it first.
|
|
285
|
+
|
|
286
|
+
2. Resolve packages to pick up the freshly pushed common:
|
|
287
|
+
```bash
|
|
288
|
+
cd ${UICOMPONENTS}
|
|
289
|
+
swift package resolve
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
3. Run a quick build:
|
|
293
|
+
```bash
|
|
294
|
+
xcodebuild build -project "${REPO_ROOT}/{build.xcodeproj}" \
|
|
295
|
+
-scheme {build.scheme} -destination 'generic/platform=iOS' \
|
|
296
|
+
CODE_SIGNING_ALLOWED=NO -skipMacroValidation -quiet
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
4. If build fails:
|
|
300
|
+
- Check for `has no member` errors → indicates generated file lost keys during rebase
|
|
301
|
+
- For `LocalizationStringKeys`: `cd ${COMMON} && swift package plugin --allow-writing-to-package-directory update-localizations-dev`
|
|
302
|
+
- For `UITestingIdentifierKeys`: `cd ${COMMON} && swift run UITestingIdentifierTool generate`
|
|
303
|
+
- Commit fix: `git add -A && git commit -m "fix(common): regenerate keys after rebase"`
|
|
304
|
+
- Push: `git push origin iteration/develop`
|
|
305
|
+
- Re-run this step to confirm
|
|
306
|
+
|
|
307
|
+
5. If build succeeds → print `Post-Push Build: ✅`
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
## STEP 3 — Issue Housekeeping (Per Component)
|
|
312
|
+
|
|
313
|
+
> **(strict) NONE of these substeps may be skipped.** Each substep prints a
|
|
314
|
+
> status line (`✅` or `❌`). The Completion Gate at the end (3g) verifies ALL
|
|
315
|
+
> substeps executed. If any critical substep is missing → HALT.
|
|
316
|
+
|
|
317
|
+
Initialise a per-component result tracker:
|
|
318
|
+
|
|
319
|
+
```python
|
|
320
|
+
housekeeping = {} # { issue_number: { "3a": bool, "3b": bool, "3c": bool, "3d": bool, "3e": bool, "3f": bool } }
|
|
321
|
+
for comp in reviewed:
|
|
322
|
+
housekeeping[comp["issue"]] = {k: False for k in ["3a","3b","3c","3d","3e","3f"]}
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
For EACH reviewed component:
|
|
326
|
+
|
|
327
|
+
### 3a. Comment on Issue
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
gh issue comment <N> --repo ${GH_REPO} --body "$(cat <<EOF
|
|
331
|
+
Committed to iteration/develop (submodules) via performance-tour:
|
|
332
|
+
- common: ${COMMON_SHA}
|
|
333
|
+
- uicomponents: ${UICOMP_SHA}
|
|
334
|
+
$(if [ "$LEAN_MODE" != "true" ]; then echo "- wiki: ${WIKI_SHA}"; fi)
|
|
335
|
+
$(if [ "$LEAN_MODE" = "true" ]; then echo "\nMode: lean (tests & wiki skipped)"; fi)
|
|
336
|
+
|
|
337
|
+
Tour batch: $(date +%Y-%m-%d)
|
|
338
|
+
Ready for review.
|
|
339
|
+
EOF
|
|
340
|
+
)"
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
Verify: `gh issue view <N> --repo ${GH_REPO} --json comments --jq '.comments[-1].body' | grep -q 'performance-tour'`
|
|
344
|
+
|
|
345
|
+
Print: ` #<N> 3a Comment: ✅` or `❌`
|
|
346
|
+
|
|
347
|
+
### 3b. Update Issue Phase + Labels
|
|
348
|
+
|
|
349
|
+
Determine completed phases from committed files:
|
|
350
|
+
- Has Swift view file → phase:implementation done
|
|
351
|
+
- Has test files → phase:testing done (**skip check in lean mode — always false**)
|
|
352
|
+
- Has .figma.swift → phase:code-connect done
|
|
353
|
+
- Has wiki markdown → phase:documentation done (**skip check in lean mode — always false**)
|
|
354
|
+
|
|
355
|
+
**Add phase labels to issue (adjust for lean mode):**
|
|
356
|
+
|
|
357
|
+
```bash
|
|
358
|
+
# Full mode: add all completed phase labels
|
|
359
|
+
# Lean mode: only add phase:code-connect (no testing or documentation labels)
|
|
360
|
+
if [ "$LEAN_MODE" = "true" ]; then
|
|
361
|
+
gh issue edit <N> --repo ${GH_REPO} \
|
|
362
|
+
--add-label "phase:code-connect"
|
|
363
|
+
else
|
|
364
|
+
gh issue edit <N> --repo ${GH_REPO} \
|
|
365
|
+
--add-label "phase:testing" \
|
|
366
|
+
--add-label "phase:code-connect" \
|
|
367
|
+
--add-label "phase:documentation"
|
|
368
|
+
fi
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
**Update Phase field on Projects V2 board** to the LAST completed phase
|
|
372
|
+
(same GraphQL mutations as `figma-iteration-commit` STEP 4b):
|
|
373
|
+
|
|
374
|
+
```bash
|
|
375
|
+
# Phase option IDs:
|
|
376
|
+
# Implementation = 0577dcda
|
|
377
|
+
# Testing = 106b64ce
|
|
378
|
+
# Code Connect = 5384b1e1
|
|
379
|
+
# Documentation = 7307fb8f
|
|
380
|
+
#
|
|
381
|
+
# In lean mode, last phase = Code Connect (5384b1e1)
|
|
382
|
+
# In full mode, last phase = Documentation (7307fb8f)
|
|
383
|
+
|
|
384
|
+
ISSUE_NODE_ID=$(gh api graphql -f query='{ repository(owner: "{github.org}", name: "{project.slug}-components") { issue(number: <N>) { id } } }' --jq '.data.repository.issue.id')
|
|
385
|
+
|
|
386
|
+
ITEM_ID=$(gh api graphql -f query='mutation { addProjectV2ItemById(input: { projectId: "{github.projectV2Id}", contentId: "'"$ISSUE_NODE_ID"'" }) { item { id } } }' --jq '.data.addProjectV2ItemById.item.id')
|
|
387
|
+
|
|
388
|
+
# Set Phase = Documentation (last completed) — or Code Connect in lean mode
|
|
389
|
+
LAST_PHASE_ID="7307fb8f" # Documentation
|
|
390
|
+
if [ "$LEAN_MODE" = "true" ]; then
|
|
391
|
+
LAST_PHASE_ID="5384b1e1" # Code Connect
|
|
392
|
+
fi
|
|
393
|
+
gh api graphql -f query='mutation { updateProjectV2ItemFieldValue(input: { projectId: "{github.projectV2Id}", itemId: "'"$ITEM_ID"'", fieldId: "{github.projectV2Fields.phase}", value: { singleSelectOptionId: "'"$LAST_PHASE_ID"'" } }) { projectV2Item { id } } }'
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
Verify: `gh api graphql` query confirms Phase field updated.
|
|
397
|
+
|
|
398
|
+
Print: ` #<N> 3b Phase: ✅ → Documentation` or ` #<N> 3b Phase: ✅ → Code Connect (lean)` or `❌`
|
|
399
|
+
|
|
400
|
+
### 3c. Link Wiki to Issue
|
|
401
|
+
|
|
402
|
+
> **LEAN MODE:** If `lean_mode` is `true`, **SKIP this substep.** Wiki was not generated.
|
|
403
|
+
> Print ` #<N> 3c Wiki Link: ⏭ (lean mode)` and proceed.
|
|
404
|
+
|
|
405
|
+
If wiki was committed, add/update `### Wiki` section in issue body
|
|
406
|
+
(same logic as `figma-iteration-commit` STEP 4c).
|
|
407
|
+
|
|
408
|
+
```bash
|
|
409
|
+
# Get current body
|
|
410
|
+
BODY=$(gh issue view <N> --repo ${GH_REPO} --json body --jq '.body')
|
|
411
|
+
|
|
412
|
+
# Construct wiki URL
|
|
413
|
+
WIKI_URL="https://github.com/${GH_REPO}/wiki/<WIKI_RELATIVE_PATH>/<COMPONENT_NAME>"
|
|
414
|
+
|
|
415
|
+
# Append wiki section if not already present
|
|
416
|
+
if ! echo "$BODY" | grep -q '### Wiki'; then
|
|
417
|
+
NEW_BODY="${BODY}
|
|
418
|
+
|
|
419
|
+
### Wiki
|
|
420
|
+
|
|
421
|
+
[${COMPONENT_NAME}](${WIKI_URL})"
|
|
422
|
+
gh issue edit <N> --repo ${GH_REPO} --body "$NEW_BODY"
|
|
423
|
+
fi
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
Verify: `gh issue view <N> --repo ${GH_REPO} --json body --jq '.body' | grep -q 'Wiki'`
|
|
427
|
+
|
|
428
|
+
Print: ` #<N> 3c Wiki Link: ✅` or `⏭ (no wiki)` or `❌`
|
|
429
|
+
|
|
430
|
+
### 3d. Auto-Unblock Dependents
|
|
431
|
+
|
|
432
|
+
After ALL components are pushed, scan blocked issues:
|
|
433
|
+
|
|
434
|
+
```bash
|
|
435
|
+
gh issue list --repo ${GH_REPO} --state open --label blocked --json number,title,body
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
For each blocked issue, check if all blocking dependencies now have implementations.
|
|
439
|
+
If yes → remove `blocked` label + comment.
|
|
440
|
+
|
|
441
|
+
Print: ` 3d Unblock: ✅ (N unblocked)` or `⏭ (none blocked)`
|
|
442
|
+
|
|
443
|
+
### 3e. Regenerate Status Dashboard
|
|
444
|
+
|
|
445
|
+
> **LEAN MODE:** If `lean_mode` is `true`, **SKIP this substep.** No wiki changes were made.
|
|
446
|
+
> Print ` 3e Dashboard: ⏭ (lean mode)` and proceed.
|
|
447
|
+
|
|
448
|
+
Wiki status pages (`ComponentImplementationStatus.md`, `-DSC.md`, `-MAC.md`) contain
|
|
449
|
+
component counts that may have been lost during rebase conflict resolution. Regenerate
|
|
450
|
+
them after all pushes are complete.
|
|
451
|
+
|
|
452
|
+
```bash
|
|
453
|
+
# Run the status update skill logic:
|
|
454
|
+
cd ${WIKI}
|
|
455
|
+
|
|
456
|
+
# Option A: If figma-to-swift-ui-status-update is available as a command
|
|
457
|
+
# /figma-to-swift-ui-status-update
|
|
458
|
+
|
|
459
|
+
# Option B: Manual regeneration using the registry
|
|
460
|
+
cd ${COMMON}
|
|
461
|
+
python3 ${REPO_ROOT}/.instructions/figma/figma-to-swiftui/scripts/update-status-dashboard.py \
|
|
462
|
+
--wiki-path "${WIKI}" \
|
|
463
|
+
--common-path "${COMMON}" \
|
|
464
|
+
--uicomponents-path "${UICOMPONENTS}"
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
If the script is not available, skip with a warning:
|
|
468
|
+
```
|
|
469
|
+
⚠️ Status dashboard regeneration skipped — script not found.
|
|
470
|
+
Run /figma-to-swift-ui-status-update manually to update counts.
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
If regeneration produces changes:
|
|
474
|
+
```bash
|
|
475
|
+
cd ${WIKI}
|
|
476
|
+
git add ComponentImplementationStatus*.md
|
|
477
|
+
git commit -m "docs(wiki): regenerate status dashboard after tour batch
|
|
478
|
+
|
|
479
|
+
Tour: performance-tour $(date +%Y-%m-%d)"
|
|
480
|
+
git push origin master
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
Print: ` 3e Dashboard: ✅ regenerated` or `⏭ (no script)`
|
|
484
|
+
|
|
485
|
+
### 3f. Jira Assignment & Content Update
|
|
486
|
+
|
|
487
|
+
> This step is a **safety net** for `performance-start` STEP 4. In tour mode,
|
|
488
|
+
> `performance-start` should assign Jira issues, but subagents may skip it.
|
|
489
|
+
> This step verifies and fixes any gaps.
|
|
490
|
+
|
|
491
|
+
For EACH reviewed component that has a Jira key (from issue body, field `### Jira Issue`):
|
|
492
|
+
|
|
493
|
+
```bash
|
|
494
|
+
# Extract Jira key from issue body
|
|
495
|
+
JIRA_KEY=$(gh issue view <N> --repo ${GH_REPO} --json body --jq '.body' | grep -oE '{jira.projectKey}-[0-9]+')
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
If `JIRA_KEY` is empty or `_No response_` → skip with `⏭ (no Jira)`.
|
|
499
|
+
|
|
500
|
+
Otherwise, run the Jira update via **Python urllib** (same approach as `performance-start` STEP 4):
|
|
501
|
+
|
|
502
|
+
```python
|
|
503
|
+
# /tmp/jira_housekeeping_<JIRA_KEY>.py
|
|
504
|
+
import subprocess, urllib.request, json
|
|
505
|
+
|
|
506
|
+
token = subprocess.check_output(
|
|
507
|
+
["security", "find-generic-password", "-a",
|
|
508
|
+
subprocess.check_output(["whoami"]).decode().strip(),
|
|
509
|
+
"-s", "JIRA_TOKEN", "-w"],
|
|
510
|
+
stderr=subprocess.DEVNULL
|
|
511
|
+
).decode().strip()
|
|
512
|
+
|
|
513
|
+
JIRA_KEY = "<JIRA_KEY>"
|
|
514
|
+
|
|
515
|
+
# 1. Get current user
|
|
516
|
+
req = urllib.request.Request(
|
|
517
|
+
"{jira.baseUrl}/rest/api/2/myself",
|
|
518
|
+
headers={"Authorization": f"Bearer {token}"}
|
|
519
|
+
)
|
|
520
|
+
resp = urllib.request.urlopen(req, timeout=15)
|
|
521
|
+
username = json.loads(resp.read().decode())["name"]
|
|
522
|
+
|
|
523
|
+
# 2. Check if already assigned
|
|
524
|
+
req2 = urllib.request.Request(
|
|
525
|
+
f"{jira.baseUrl}/rest/api/2/issue/{JIRA_KEY}?fields=assignee",
|
|
526
|
+
headers={"Authorization": f"Bearer {token}"}
|
|
527
|
+
)
|
|
528
|
+
resp2 = urllib.request.urlopen(req2, timeout=15)
|
|
529
|
+
assignee = json.loads(resp2.read().decode()).get("fields",{}).get("assignee")
|
|
530
|
+
|
|
531
|
+
if assignee and assignee.get("name") == username:
|
|
532
|
+
print(f"ALREADY_ASSIGNED {JIRA_KEY}")
|
|
533
|
+
else:
|
|
534
|
+
# 3. Assign
|
|
535
|
+
data = json.dumps({"name": username}).encode()
|
|
536
|
+
req3 = urllib.request.Request(
|
|
537
|
+
f"{jira.baseUrl}/rest/api/2/issue/{JIRA_KEY}/assignee",
|
|
538
|
+
data=data,
|
|
539
|
+
headers={"Authorization": f"Bearer {token}", "Content-Type": "application/json"},
|
|
540
|
+
method="PUT"
|
|
541
|
+
)
|
|
542
|
+
try:
|
|
543
|
+
urllib.request.urlopen(req3, timeout=15)
|
|
544
|
+
print(f"ASSIGNED {JIRA_KEY}")
|
|
545
|
+
except urllib.error.HTTPError as e:
|
|
546
|
+
print(f"ASSIGN_FAILED {JIRA_KEY} {e.code}")
|
|
547
|
+
|
|
548
|
+
# 4. Update Jira content (summary, description, labels)
|
|
549
|
+
description = (
|
|
550
|
+
"h3. Figma\n"
|
|
551
|
+
"[<COMPONENT>|<FIGMA_URL>]\n\n"
|
|
552
|
+
"h3. GitHub Issue\n"
|
|
553
|
+
"[#<N>|https://github.com/<GH_REPO>/issues/<N>]\n\n"
|
|
554
|
+
"h3. Component\n"
|
|
555
|
+
"* *Registry Name:* <REGISTRY>\n"
|
|
556
|
+
"* *Component Name:* <COMPONENT>\n"
|
|
557
|
+
"* *Page:* <PAGE>\n\n"
|
|
558
|
+
"h3. Status\n"
|
|
559
|
+
"* (/) Implementation\n"
|
|
560
|
+
"* (/) Testing\n"
|
|
561
|
+
"* (/) Code Connect\n"
|
|
562
|
+
"* (/) Documentation"
|
|
563
|
+
)
|
|
564
|
+
summary = "Implement <COMPONENT> iOS UI Component"
|
|
565
|
+
update_data = json.dumps({
|
|
566
|
+
"fields": {
|
|
567
|
+
"summary": summary,
|
|
568
|
+
"description": description,
|
|
569
|
+
"labels": ["redesign_ios_ui_component", "MobRedesign"],
|
|
570
|
+
"components": [{"name": "TKMOB IOS"}],
|
|
571
|
+
"fixVersions": [{"name": "no-version"}],
|
|
572
|
+
"customfield_22025": {"value": "YOK"},
|
|
573
|
+
"customfield_21400": ["no-version"]
|
|
574
|
+
}
|
|
575
|
+
}).encode()
|
|
576
|
+
req4 = urllib.request.Request(
|
|
577
|
+
f"{jira.baseUrl}/rest/api/2/issue/{JIRA_KEY}",
|
|
578
|
+
data=update_data,
|
|
579
|
+
headers={"Authorization": f"Bearer {token}", "Content-Type": "application/json"},
|
|
580
|
+
method="PUT"
|
|
581
|
+
)
|
|
582
|
+
try:
|
|
583
|
+
urllib.request.urlopen(req4, timeout=15)
|
|
584
|
+
print(f"UPDATED {JIRA_KEY}")
|
|
585
|
+
except urllib.error.HTTPError as e:
|
|
586
|
+
print(f"UPDATE_FAILED {JIRA_KEY} {e.code}")
|
|
587
|
+
```
|
|
588
|
+
|
|
589
|
+
Print: ` #<N> 3f Jira (<JIRA_KEY>): ✅ assigned + updated` or `⏭ (no Jira)` or `⚠️ (VPN/token issue)`
|
|
590
|
+
|
|
591
|
+
### 3g. Required Completion Gate
|
|
592
|
+
|
|
593
|
+
> **This gate is NON-NEGOTIABLE. Do NOT proceed to STEP 4 without passing it.**
|
|
594
|
+
|
|
595
|
+
Print the housekeeping checklist for ALL components:
|
|
596
|
+
|
|
597
|
+
```
|
|
598
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
599
|
+
║ HOUSEKEEPING COMPLETION GATE ║
|
|
600
|
+
╠══════════════════════════════════════════════════════════════╣
|
|
601
|
+
║ ║
|
|
602
|
+
║ #308 MilesSmilesInviteInviteList ║
|
|
603
|
+
║ 3a Comment: ✅ ║
|
|
604
|
+
║ 3b Phase: ✅ → Documentation ║
|
|
605
|
+
║ 3c Wiki Link: ✅ ║
|
|
606
|
+
║ 3d Unblock: ⏭ (none blocked) ║
|
|
607
|
+
║ 3e Dashboard: ✅ regenerated ║
|
|
608
|
+
║ 3f Jira: ✅ {jira.projectKey}-132507 ║
|
|
609
|
+
║ ║
|
|
610
|
+
║ #309 MilesSmilesMenuVoucherRightsGroup ║
|
|
611
|
+
║ 3a Comment: ✅ ║
|
|
612
|
+
║ 3b Phase: ✅ → Documentation ║
|
|
613
|
+
║ 3c Wiki Link: ✅ ║
|
|
614
|
+
║ 3d Unblock: ⏭ (none blocked) ║
|
|
615
|
+
║ 3e Dashboard: ⏭ (covered above) ║
|
|
616
|
+
║ 3f Jira: ✅ {jira.projectKey}-132508 ║
|
|
617
|
+
║ ║
|
|
618
|
+
║ CRITICAL CHECK: ║
|
|
619
|
+
║ 3a (Comment): ALL ✅ ║
|
|
620
|
+
║ 3b (Phase): ALL ✅ ← MUST pass ║
|
|
621
|
+
║ 3c (Wiki): ALL ✅ ← MUST pass (if wiki exists) ║
|
|
622
|
+
║ (or ⏭ lean for all in lean mode) ║
|
|
623
|
+
║ 3f (Jira): ALL ✅ ← MUST pass (if Jira exists) ║
|
|
624
|
+
║ ║
|
|
625
|
+
║ GATE: ✅ PASSED ║
|
|
626
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
**Critical substeps** (MUST pass or have valid skip reason):
|
|
630
|
+
- **3a** — Comment on issue
|
|
631
|
+
- **3b** — Phase + labels updated
|
|
632
|
+
- **3c** — Wiki linked (if wiki committed)
|
|
633
|
+
- **3f** — Jira assigned (if Jira key exists)
|
|
634
|
+
|
|
635
|
+
**Non-critical substeps** (warn but continue):
|
|
636
|
+
- **3d** — Auto-unblock (best effort)
|
|
637
|
+
- **3e** — Status dashboard (best effort)
|
|
638
|
+
|
|
639
|
+
If ANY critical substep shows `❌`:
|
|
640
|
+
1. Print which substeps failed and for which components
|
|
641
|
+
2. **Retry the failed substep** (1 retry per substep)
|
|
642
|
+
3. If retry also fails → HALT with: `"Housekeeping incomplete. Fix manually before marking tour done."`
|
|
643
|
+
|
|
644
|
+
If gate passes → proceed to STEP 4.
|
|
645
|
+
|
|
646
|
+
---
|
|
647
|
+
|
|
648
|
+
## STEP 4 — Final Report
|
|
649
|
+
|
|
650
|
+
```
|
|
651
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
652
|
+
║ TOUR COMPLETE — FINAL REPORT ║
|
|
653
|
+
╠══════════════════════════════════════════════════════════════╣
|
|
654
|
+
║ ║
|
|
655
|
+
║ ┌───┬────────┬──────────────┬──────────┬────────────────┐ ║
|
|
656
|
+
║ │ # │ Issue │ Component │ Status │ SHA │ ║
|
|
657
|
+
║ ├───┼────────┼──────────────┼──────────┼────────────────┤ ║
|
|
658
|
+
║ │ 1 │ #1000 │ ComponentA │ ✅ Pushed │ abc1234 │ ║
|
|
659
|
+
║ │ 2 │ #1002 │ ComponentC │ ✅ Pushed │ def5678 │ ║
|
|
660
|
+
║ │ 3 │ #1001 │ ComponentB │ ❌ Dropped│ — │ ║
|
|
661
|
+
║ └───┴────────┴──────────────┴──────────┴────────────────┘ ║
|
|
662
|
+
║ ║
|
|
663
|
+
║ Validation: ║
|
|
664
|
+
║ Build: ✅ ║
|
|
665
|
+
║ Tests: ✅ (20 passed) ║
|
|
666
|
+
║ Review: ✅ ║
|
|
667
|
+
║ Post-Push: ✅ (remote dep build verified) ║
|
|
668
|
+
║ ║
|
|
669
|
+
║ Push: ║
|
|
670
|
+
║ common: ✅ pushed (2 commits) ║
|
|
671
|
+
║ uicomponents: ✅ pushed (2 commits) ║
|
|
672
|
+
║ wiki: ✅ pushed (2 commits) / ⏭ lean ║
|
|
673
|
+
║ ║
|
|
674
|
+
║ Issues Updated: #1000, #1002 ║
|
|
675
|
+
║ Jira Updated: {jira.projectKey}-132507, {jira.projectKey}-132508 ║
|
|
676
|
+
║ Unblocked: #1050 (was blocked by ComponentA) ║
|
|
677
|
+
║ Dashboard: ✅ regenerated ║
|
|
678
|
+
║ Housekeeping: ✅ gate passed (all 6 substeps) ║
|
|
679
|
+
║ ║
|
|
680
|
+
║ Tour Duration: 1h 23m ║
|
|
681
|
+
║ Components: 2 committed, 1 dropped ║
|
|
682
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
683
|
+
```
|
|
684
|
+
|
|
685
|
+
### Cleanup
|
|
686
|
+
|
|
687
|
+
```bash
|
|
688
|
+
# Remove tour tracker (tour is complete)
|
|
689
|
+
rm -f ${TRACKER_FILE}
|
|
690
|
+
```
|
|
691
|
+
|
|
692
|
+
---
|
|
693
|
+
|
|
694
|
+
## Error Handling
|
|
695
|
+
|
|
696
|
+
| Error | Action |
|
|
697
|
+
|-------|--------|
|
|
698
|
+
| Tracker not found | HALT: "No tour in progress" |
|
|
699
|
+
| current_step not STEP_3 | HALT: "Review not complete" |
|
|
700
|
+
| No reviewed components | HALT: "Nothing to commit" |
|
|
701
|
+
| Build fails | HALT — fix, then re-run |
|
|
702
|
+
| Tests fail | HALT — fix failing component, then re-run |
|
|
703
|
+
| Push rejected (after 3 retries) | HALT — manual conflict resolution needed |
|
|
704
|
+
| Rebase conflict (generated file) | Auto-resolve: accept remote + regenerate (see 2a table) |
|
|
705
|
+
| Rebase conflict (non-generated) | HALT — print conflict file, ask user to resolve |
|
|
706
|
+
| Post-push build fails | Regenerate generated files in common, commit + push fix |
|
|
707
|
+
| Status dashboard script missing | Warn + skip — not blocking |
|
|
708
|
+
| Issue housekeeping fails (critical: 3a/3b/3c/3f) | Retry once → if still fails, HALT |
|
|
709
|
+
| Issue housekeeping fails (non-critical: 3d/3e) | Warn but continue |
|
|
710
|
+
| Jira unreachable | ⚠️ warn — mark 3f as skipped with reason, pass gate |
|
|
711
|
+
| Completion gate fails | HALT: print failed substeps, retry once, then abort |
|