@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,153 @@
|
|
|
1
|
+
# Channel adapter — Confluence page
|
|
2
|
+
|
|
3
|
+
> Detailed contract for the `confluence` channel of `/multi-agent:channels`. Split out of `channels.md` in v8.0.0; the parent doc keeps a one-line summary and a link here.
|
|
4
|
+
|
|
5
|
+
The Confluence adapter creates or updates a Confluence page under a chosen parent. Like the Jira adapter, it runs **once** per invocation — the page lives at the primary repo's component slug in multi-repo mode.
|
|
6
|
+
|
|
7
|
+
## Required body structure
|
|
8
|
+
|
|
9
|
+
Every Confluence page written by this adapter follows the same section order. Section headings render in `prefs.global.outputLanguage`; the template (this doc) is English because `promptLanguage="en"` is locked, but the runtime body is in the user's language.
|
|
10
|
+
|
|
11
|
+
| # | Section key | Heading (`tr`) | Heading (`en`) | Required? |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| 1 | `overview` | `## Genel Bakış` | `## Overview` | always |
|
|
14
|
+
| 2 | `flow` | `## Akış Diyagramı` | `## Flow Diagram` | when work involves a non-trivial sequence (auth, payment, multi-step UI, async pipeline) |
|
|
15
|
+
| 3 | `technical_details` | `## Teknik Detaylar` | `## Technical Details` | always |
|
|
16
|
+
| 4 | `api_contracts` | `## API Kontratları` | `## API Contracts` | when work added or modified HTTP endpoints, GraphQL ops, or RPC methods |
|
|
17
|
+
| 5 | `references` | `## İlgili Bağlantılar` | `## References` | when any context link exists |
|
|
18
|
+
|
|
19
|
+
> Headings in the source markdown are `##`; the storage-format converter rewrites them to `<h2>…</h2>`. Sub-headings (`###`) become `<h3>` and so on.
|
|
20
|
+
|
|
21
|
+
### Section content rules
|
|
22
|
+
|
|
23
|
+
**`overview`** — 3-6 sentences. Audience is stakeholders/PM/designers, not engineers — explain the change in user/business terms first, then a single sentence on the technical approach. No marketing voice, no "we are proud to announce".
|
|
24
|
+
|
|
25
|
+
**`flow`** — when included, embed a flow diagram. Preferred form is a Mermaid block (Confluence renders Mermaid via the storage-format macro when the space has the plugin enabled); fallback is a numbered step list when Mermaid is unavailable. Template shape:
|
|
26
|
+
|
|
27
|
+
```markdown
|
|
28
|
+
## Flow Diagram
|
|
29
|
+
|
|
30
|
+
\`\`\`mermaid
|
|
31
|
+
sequenceDiagram
|
|
32
|
+
participant <actor>
|
|
33
|
+
participant <service>
|
|
34
|
+
<actor>->><service>: <request>
|
|
35
|
+
<service>-->><actor>: <response>
|
|
36
|
+
\`\`\`
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Replace `<actor>` / `<service>` with the real names at write-time; do not invent placeholders that don't exist in the diff.
|
|
40
|
+
|
|
41
|
+
**`technical_details`** — bullet list or sub-sections covering implementation specifics: data flow, key components touched, edge cases handled, performance notes. Code identifiers stay verbatim across languages.
|
|
42
|
+
|
|
43
|
+
**`api_contracts`** — for each new/changed endpoint:
|
|
44
|
+
|
|
45
|
+
```markdown
|
|
46
|
+
### <METHOD> <path>
|
|
47
|
+
|
|
48
|
+
**Request**
|
|
49
|
+
\`\`\`json
|
|
50
|
+
{ "..." }
|
|
51
|
+
\`\`\`
|
|
52
|
+
|
|
53
|
+
**Response — 200**
|
|
54
|
+
\`\`\`json
|
|
55
|
+
{ "..." }
|
|
56
|
+
\`\`\`
|
|
57
|
+
|
|
58
|
+
**Error responses**
|
|
59
|
+
- `400` — <when>
|
|
60
|
+
- `401` — <when>
|
|
61
|
+
- `404` — <when>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
When the task referenced a Confluence API-contract source page (see Phase 0 link extraction / Phase 1 context injection), this section may consume that contract directly — verbatim where it matches, with a `(source: <confluence-page-url>)` annotation at the end of the section.
|
|
65
|
+
|
|
66
|
+
**`references`** — flat bullet list, mirrors the Jira `## References` shape (Swagger, Figma, Crashlytics, Fortify, source Confluence pages, PR URLs). Emit one line per link, never deduplicate across categories.
|
|
67
|
+
|
|
68
|
+
### Assembly order (per run)
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
1. Read agent-state.json (taskId, contextLinks, prUrls, language).
|
|
72
|
+
2. Build section bodies in markdown — overview first, then in the table order, skipping conditional sections that don't apply.
|
|
73
|
+
3. Run the assembled body through the `humanizer` skill (tone target: formal, stakeholder-readable).
|
|
74
|
+
4. Convert markdown → Confluence storage XML (see table below).
|
|
75
|
+
5. POST / PUT.
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Token check
|
|
79
|
+
|
|
80
|
+
1. Read `prefs.global.keychainMapping.confluence` → `~/.claude/lib/credential-store.sh get`.
|
|
81
|
+
2. Missing → trigger the inline Token Save Flow from `setup.md` (clipboard-based). User can save the token now or skip the run.
|
|
82
|
+
3. Expired (`401 Unauthorized`) → same Save Flow with the `expired` trigger.
|
|
83
|
+
4. Skipped → adapter returns `{status: "skipped", reason: "no token"}`, does NOT block other adapters.
|
|
84
|
+
|
|
85
|
+
## Parent page resolution
|
|
86
|
+
|
|
87
|
+
Recents from `prefs.projects[<project>].confluenceUrls` (LRU, max 5):
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
Confluence parent page URL:
|
|
91
|
+
Recent [1]: https://<host>/display/<SPACE>/ComponentLibrary (enter to reuse)
|
|
92
|
+
Recent [2]: https://<host>/display/<SPACE>/Releases
|
|
93
|
+
[p] Paste new URL
|
|
94
|
+
[s] Skip this run
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
`spaceKey` + `parentId` extracted from URL with these patterns:
|
|
98
|
+
|
|
99
|
+
| URL form | Extraction |
|
|
100
|
+
|---|---|
|
|
101
|
+
| `/display/<SPACE>/<title>` | `spaceKey=<SPACE>`, `parentId` looked up via `GET /rest/api/content?spaceKey=<SPACE>&title=<title>` |
|
|
102
|
+
| `?pageId=12345` | `parentId=12345`, `spaceKey` resolved from page's `space.key` |
|
|
103
|
+
| `/spaces/<SPACE>/pages/12345/<title>` | both fields direct |
|
|
104
|
+
|
|
105
|
+
## Page title
|
|
106
|
+
|
|
107
|
+
Auto-suggested as `"{jiraId} — {taskTitle}"` — user can edit at the prompt. The `taskTitle` comes from `state.taskTitle` if set, else from the Jira summary, else from the PR title.
|
|
108
|
+
|
|
109
|
+
## Body conversion (markdown → storage format)
|
|
110
|
+
|
|
111
|
+
| Markdown | Confluence storage XML |
|
|
112
|
+
|---|---|
|
|
113
|
+
| `### Heading` | `<h3>Heading</h3>` |
|
|
114
|
+
| Tables | `<table><tr><th>...</th>...</tr><tr><td>...</td>...</tr></table>` |
|
|
115
|
+
| Code fences ` ```lang ` | `<ac:structured-macro ac:name="code"><ac:parameter ac:name="language">lang</ac:parameter><ac:plain-text-body><![CDATA[...]]></ac:plain-text-body></ac:structured-macro>` |
|
|
116
|
+
| Inline `code` | `<code>code</code>` |
|
|
117
|
+
| Links `[t](u)` | `<a href="u">t</a>` |
|
|
118
|
+
| Lists | `<ul><li>...</li></ul>` / `<ol><li>...</li></ol>` |
|
|
119
|
+
|
|
120
|
+
Body is run through humanizer before XML conversion — Confluence tone is the most formal of the four channels (target audience: stakeholders, PMs, designers).
|
|
121
|
+
|
|
122
|
+
## POST contract
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
POST /rest/api/content
|
|
126
|
+
{
|
|
127
|
+
"type": "page",
|
|
128
|
+
"title": "<title>",
|
|
129
|
+
"space": { "key": "<spaceKey>" },
|
|
130
|
+
"ancestors": [{ "id": "<parentId>" }],
|
|
131
|
+
"body": {
|
|
132
|
+
"storage": {
|
|
133
|
+
"value": "<storage-format-body>",
|
|
134
|
+
"representation": "storage"
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
If a page with the same title already lives under that parent, the adapter switches to update mode: `GET /rest/api/content/<id>?expand=version` → `PUT /rest/api/content/<id>` with incremented `version.number`.
|
|
141
|
+
|
|
142
|
+
## Recents persistence
|
|
143
|
+
|
|
144
|
+
Successful POST → URL prepended to `prefs.projects[<project>].confluenceUrls` (dedup by URL, trim to 5 entries). Surfaces as `Recent [1]` on the next run.
|
|
145
|
+
|
|
146
|
+
## Hard rules (must not regress)
|
|
147
|
+
|
|
148
|
+
- Real newlines and no HTML entities in the source body — XML conversion happens at adapter time, never embed `\n` literals.
|
|
149
|
+
- Section order is fixed: `overview` → `flow` (cond.) → `technical_details` → `api_contracts` (cond.) → `references` (cond.). Conditional sections may be omitted but never reordered.
|
|
150
|
+
- Humanizer pass runs **after** body assembly and **before** storage-XML conversion. Tone: formal, stakeholder-readable. No "we are excited", no first-person plural.
|
|
151
|
+
- Body content language follows `prefs.global.outputLanguage`. Code identifiers, API paths, file paths, type names, JSON keys, and the storage-XML markup stay verbatim. The template (this doc) is English because `promptLanguage="en"` is locked.
|
|
152
|
+
- Adapter failures are non-blocking. 401 / network timeout / parent-not-found → `failed` status, loop continues.
|
|
153
|
+
- If `--dry-run`, print the assembled storage XML to stdout and return without POST.
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Channel adapter — GitHub Issue comment
|
|
2
|
+
|
|
3
|
+
> Canonical template for the `issue` channel of `/multi-agent:channels`. Every successful run that touched a tracked GitHub issue MUST post one comment using this template — no exceptions, no "state-only" shortcuts.
|
|
4
|
+
|
|
5
|
+
## When this fires
|
|
6
|
+
|
|
7
|
+
The Issue Comment adapter runs once per channels invocation when:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
state.tracker.kind === "github-issue" AND channels.selected includes "issue"
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
In multi-repo tasks, the issue lives on the primary repo's issue tracker. Extras don't get separate issue comments — their PRs are linked back through the comment body.
|
|
14
|
+
|
|
15
|
+
## The hard rule
|
|
16
|
+
|
|
17
|
+
**Never update the issue body Progress flags without ALSO posting a comment.** The comment is the human-readable narrative; flags are the machine-readable status. Either both or neither. A run that updates flags without commenting is a contract violation and the run is incomplete.
|
|
18
|
+
|
|
19
|
+
## Required body structure
|
|
20
|
+
|
|
21
|
+
The template (this doc) is English because `promptLanguage="en"` is locked. At write-time, headings and prose render in `prefs.global.outputLanguage`; code identifiers, repo/branch/commit names, URLs, and the `Ref: #N` footer stay verbatim across languages.
|
|
22
|
+
|
|
23
|
+
| # | Section key | Heading (`tr`) | Heading (`en`) | Required? |
|
|
24
|
+
|---|---|---|---|---|
|
|
25
|
+
| 1 | `title` | `## Geliştirme Detayı — \`<name>\`` | `## Implementation Detail — \`<name>\`` | always |
|
|
26
|
+
| 2 | `summary` | (paragraphs immediately under the title) | (same) | always |
|
|
27
|
+
| 3 | `prs_branches` | `### Pull Request / Dal` | `### Pull Requests / Branches` | always |
|
|
28
|
+
| 4 | `acceptance_criteria` | `### Kabul Kriterleri` | `### Acceptance Criteria` | always |
|
|
29
|
+
| 5 | `build_and_test` | `### Build & Test` | `### Build & Test` | always (heading stays English — tooling token) |
|
|
30
|
+
| 6 | `figma_extras` | `### Code Connect / Wiki` | `### Code Connect / Wiki` | only on the figma component task type |
|
|
31
|
+
| 7 | `next_steps` | `### Sonraki Adımlar` | `### Next Steps` | always (empty list allowed — signals "fully complete") |
|
|
32
|
+
| 8 | `ref_footer` | `Ref: #<issueNumber>` | `Ref: #<issueNumber>` | always (token text, never translated) |
|
|
33
|
+
|
|
34
|
+
### Template body (English — runtime renders headings in `outputLanguage`)
|
|
35
|
+
|
|
36
|
+
```markdown
|
|
37
|
+
## Implementation Detail — `<ComponentOrTaskName>`
|
|
38
|
+
|
|
39
|
+
<1-3 paragraphs: why this approach was chosen, what changed, any architectural decision worth flagging>
|
|
40
|
+
|
|
41
|
+
### Pull Requests / Branches
|
|
42
|
+
- **<repoName>:** <prKindLabel> — <prUrl OR "branch `<branchName>` pushed (commit `<shortSha>`), PR not opened">
|
|
43
|
+
<one line per repo touched; never collapse multiple repos into one>
|
|
44
|
+
|
|
45
|
+
### Acceptance Criteria
|
|
46
|
+
- [<x|·>] <AC text — `x` if delivered, `·` if intentionally deferred (with `(deferred: <reason>)` suffix)>
|
|
47
|
+
<one bullet per AC item from the issue body, or per implicit AC if the issue had none>
|
|
48
|
+
|
|
49
|
+
### Build & Test
|
|
50
|
+
- Build: <green|red|baseline-pre-existing|skipped> — <one-line evidence: command + result OR "pre-existing failure verified on `<baselineSha>`">
|
|
51
|
+
- Tests: <N tests added | tests skipped (Phase 5 user-test path) | none>
|
|
52
|
+
<for figma component flow, also:>
|
|
53
|
+
- Code Connect: <published | dry-run-only | not-applicable> — <URL of Figma node if published>
|
|
54
|
+
- Wiki: <published | local-only | skipped> — <URL of wiki page if published>
|
|
55
|
+
|
|
56
|
+
### Next Steps
|
|
57
|
+
- <follow-up bullet — PRs to open, manual deploys, push consents needed>
|
|
58
|
+
<empty list is fine; the section header itself stays>
|
|
59
|
+
|
|
60
|
+
Ref: #<issueNumber>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Section content rules
|
|
64
|
+
|
|
65
|
+
- **`title`** — always wraps the component or task name in backticks. No emoji.
|
|
66
|
+
- **`summary`** — 1-3 paragraphs, **why** before **what**. No bullet lists in the summary block — those belong in `acceptance_criteria`.
|
|
67
|
+
- **`prs_branches`** — every repo the run touched gets exactly ONE line. If the PR was deferred, write the branch + commit SHA explicitly so the reader can `gh pr create` from there. Never collapse multiple repos into one line.
|
|
68
|
+
- **`acceptance_criteria`** — copy from the issue body verbatim when an `### Acceptance Criteria` section exists. If the section is `_No response_`, the agent enumerates the implicit ACs it satisfied during Phase 1/3. `[x]` only when delivered and verified; `[·]` for deferred (with reason in parens).
|
|
69
|
+
- **`build_and_test`** — required. If a build failure was pre-existing, the line includes the baseline SHA where the failure was reproduced (per `feedback_build_baseline_proof.md`).
|
|
70
|
+
- **`figma_extras`** — emitted only when `state.taskType == "component"` and the figma sub-pipeline ran.
|
|
71
|
+
- **`next_steps`** — empty list is fine; the section header itself stays. Empty signals "fully complete, no follow-ups".
|
|
72
|
+
- **`ref_footer`** — always `Ref: #N` (or `Related: #N`). NEVER `Closes/Fixes/Resolves` — the pipeline never auto-closes issues (`feedback_no_issue_close.md`).
|
|
73
|
+
|
|
74
|
+
### Assembly order (per run)
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
1. Read agent-state.json (taskId, contextLinks, prUrls, taskType, language).
|
|
78
|
+
2. Build section bodies in markdown — title first, then in the table order, skipping conditional sections that don't apply.
|
|
79
|
+
3. Run the assembled body through the `humanizer` skill.
|
|
80
|
+
4. Apply compaction policy if length > 4000 chars (see below).
|
|
81
|
+
5. POST via `gh issue comment`.
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Hard prohibitions
|
|
85
|
+
|
|
86
|
+
- No "Co-Authored-By: Claude" trailer. No "🤖 Generated with …" footer. No mention of Claude / Copilot / AI / model names anywhere in the body.
|
|
87
|
+
- No em-dashes (`—`) in prose. Use ` · ` or `→` per `feedback_no_em_dash.md`.
|
|
88
|
+
- No HTML entities. Use raw markdown.
|
|
89
|
+
- No links to internal `/tmp/*` or local-machine paths.
|
|
90
|
+
- No screenshots embedded as base64 — link to wiki / Figma instead.
|
|
91
|
+
|
|
92
|
+
## Compaction policy
|
|
93
|
+
|
|
94
|
+
If the comment exceeds 4000 characters, compact in this order:
|
|
95
|
+
|
|
96
|
+
1. `summary` trimmed to 1 paragraph.
|
|
97
|
+
2. `acceptance_criteria` list moved to a `<details>` collapsible.
|
|
98
|
+
3. `build_and_test` details collapsed to a one-line outcome.
|
|
99
|
+
4. `prs_branches` stays verbatim — never compact.
|
|
100
|
+
5. `next_steps` stays verbatim — never compact.
|
|
101
|
+
|
|
102
|
+
Below 4000 chars, no compaction; render the full template.
|
|
103
|
+
|
|
104
|
+
## API contract
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
gh issue comment "$ISSUE_NUMBER" --repo "$ORG/$REPO" --body-file /tmp/channels-$TASK_ID-issue.md
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Token resolution: `gh auth status` for the active GitHub account selected in Phase 0. The comment is authored by the configured Git identity, posted via that account's PAT.
|
|
111
|
+
|
|
112
|
+
## Pairing with the Progress flag updater
|
|
113
|
+
|
|
114
|
+
Every issue comment post is paired with `pipeline/scripts/update-issue-progress.sh "$TASK_ID"` in the same Phase 7 step. Order: comment FIRST (so the timestamp marks the run), flags SECOND (so the body diff is one logical change).
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# Phase 7 Step 5 — issue channel
|
|
118
|
+
gh issue comment "$ISSUE_NUMBER" --repo "$ORG/$REPO" --body-file /tmp/channels-$TASK_ID-issue.md
|
|
119
|
+
bash $HOME/.claude/scripts/update-issue-progress.sh "$TASK_ID"
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
If either call fails, the channel adapter MUST NOT mark the issue channel as completed in `agent-state.json`. The user sees a clear error and can retry.
|
|
123
|
+
|
|
124
|
+
## Drift detection
|
|
125
|
+
|
|
126
|
+
`pipeline/scripts/smoke-issue-comment-template.sh` greps the latest 5 issue comments authored by the configured Git identity and asserts each contains:
|
|
127
|
+
|
|
128
|
+
- `## Geliştirme Detayı` OR `## Implementation Detail` (language axis)
|
|
129
|
+
- `### Pull Requests` OR `### Branches`
|
|
130
|
+
- `### Acceptance Criteria`
|
|
131
|
+
- `### Build & Test`
|
|
132
|
+
- `Ref: #` footer
|
|
133
|
+
|
|
134
|
+
A failed assertion blocks `pre-push-check.sh`. This catches runs where the agent free-formed the comment instead of using the template.
|
|
135
|
+
|
|
136
|
+
## Hard rules (must not regress)
|
|
137
|
+
|
|
138
|
+
- Section order is fixed: `title` → `summary` → `prs_branches` → `acceptance_criteria` → `build_and_test` → `figma_extras` (cond.) → `next_steps` → `ref_footer`. Conditional sections may be omitted but never reordered.
|
|
139
|
+
- Humanizer pass runs **after** body assembly and **before** compaction / POST.
|
|
140
|
+
- Body content language follows `prefs.global.outputLanguage`. Repo names, branch names, commit SHAs, URLs, the `Ref: #N` footer, and the `### Build & Test` heading itself stay verbatim. The template (this doc) is English because `promptLanguage="en"` is locked.
|
|
141
|
+
- Never update issue body Progress flags without also posting this comment — see "The hard rule" above and `pairing` block below.
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Channel adapter — Jira comment
|
|
2
|
+
|
|
3
|
+
> Detailed contract for the `jira` channel of `/multi-agent:channels`. Split out of `channels.md` in v8.0.0; the parent doc keeps a one-line summary and a link here.
|
|
4
|
+
|
|
5
|
+
The Jira adapter posts a comment on the linked issue. The Jira ticket is shared by all repos in a multi-repo task, so the adapter runs **once** per channels invocation regardless of how many PR targets are dispatched in parallel.
|
|
6
|
+
|
|
7
|
+
## Required body structure
|
|
8
|
+
|
|
9
|
+
Every Jira comment posted by this adapter follows the same section order. Section headings render in `prefs.global.outputLanguage` (Turkish when `tr`, English when `en`); section keys and the structure itself are stable across languages so downstream tooling and humans both know where to look.
|
|
10
|
+
|
|
11
|
+
| # | Section key | Heading (`tr`) | Heading (`en`) | Required? |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| 1 | `summary` | `## Yapılan Çalışma Özeti` | `## Work Summary` | always |
|
|
14
|
+
| 2 | `test_scenarios` | `## Test Senaryoları` | `## Test Scenarios` | always (use "—" placeholder line if truly N/A) |
|
|
15
|
+
| 3 | `context_refs` | `## Bağlantılar` | `## References` | when any link exists |
|
|
16
|
+
|
|
17
|
+
> Heading levels in the source markdown are `##`. The wiki-markup converter (next section) rewrites them to `h2.` for Jira rendering.
|
|
18
|
+
|
|
19
|
+
### Section content rules
|
|
20
|
+
|
|
21
|
+
**`summary`** — 2-5 sentences in `outputLanguage`. What changed, why, and the user-visible impact. No "we", no marketing tone. Past tense (the work is done at the time the comment goes up).
|
|
22
|
+
|
|
23
|
+
**`test_scenarios`** — Given/When/Then numbered list. One scenario per acceptance criterion. The heading and scenario text are rendered in `outputLanguage` at write-time; the template itself (this file) shows the English skeleton:
|
|
24
|
+
|
|
25
|
+
```markdown
|
|
26
|
+
## Test Scenarios
|
|
27
|
+
|
|
28
|
+
1. **Given** a signed-in user
|
|
29
|
+
**When** they navigate to the Profile screen
|
|
30
|
+
**Then** their saved preferences appear in the configured order
|
|
31
|
+
2. **Given** ...
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Code identifiers (function names, file paths) stay verbatim — they are not translated. When there are no executable scenarios (pure doc change, dependency bump), write a single line: `- No manual test required — <short reason>`.
|
|
35
|
+
|
|
36
|
+
**`context_refs`** — flat bullet list of external links the work depends on or produced. PR URL is **not** repeated here; it lives on the first line (see *Cross-link injection*). Common entries (only when present in the task):
|
|
37
|
+
|
|
38
|
+
```markdown
|
|
39
|
+
## References
|
|
40
|
+
|
|
41
|
+
- Confluence: <page-url>
|
|
42
|
+
- Swagger: <openapi-url>
|
|
43
|
+
- Figma: <design-url>
|
|
44
|
+
- Crashlytics: <issue-url>
|
|
45
|
+
- Fortify: <findings-url>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
The links are pulled from `agent-state.json.contextLinks[]` (see Phase 0 link extraction). Empty `contextLinks[]` ⇒ section omitted.
|
|
49
|
+
|
|
50
|
+
### Assembly order (per run)
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
1. Read agent-state.json (taskId, contextLinks, prUrls, language).
|
|
54
|
+
2. Build section bodies in markdown — summary first, test_scenarios next, context_refs last.
|
|
55
|
+
3. Run the assembled body through the `humanizer` skill (see Hard rules below).
|
|
56
|
+
4. Apply Cross-link injection (PR URL on line 1).
|
|
57
|
+
5. Run Wiki markup conversion.
|
|
58
|
+
6. POST.
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Wiki markup conversion
|
|
62
|
+
|
|
63
|
+
Body markdown is rewritten to Jira wiki markup before POST:
|
|
64
|
+
|
|
65
|
+
| Markdown | Jira wiki |
|
|
66
|
+
|---|---|
|
|
67
|
+
| `### Heading` | `*Heading*` |
|
|
68
|
+
| `- [ ] task` / `- [x] task` | `# task` (numbered list — Jira renders TODO checkboxes inconsistently) |
|
|
69
|
+
| `` `code` `` | `{{code}}` |
|
|
70
|
+
| Tables (` | h | h | / | --- | --- |`) | `||h||h||` then `|c|c|` rows |
|
|
71
|
+
| Code fences ` ```lang ` | `{code:lang} ... {code}` |
|
|
72
|
+
|
|
73
|
+
Lines outside these patterns pass through verbatim. Multi-paragraph blocks are joined with one blank line.
|
|
74
|
+
|
|
75
|
+
## Cross-link injection
|
|
76
|
+
|
|
77
|
+
The adapter prepends the linked PR URL on the **first line** so reviewers can jump to the PR with one click:
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
PR: https://github.com/<org>/<repo>/pull/4321
|
|
81
|
+
|
|
82
|
+
Phase 4 review accepted 2 findings...
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
In multi-repo mode, `channels-multi-repo.sh render-jira <state> <body>` prepends a bulleted `* PR:` list — primary first, extras after. Single-repo tasks fall through to the unchanged body.
|
|
86
|
+
|
|
87
|
+
## Token resolution
|
|
88
|
+
|
|
89
|
+
Token comes from `prefs.global.keychainMapping.jira` → `~/.claude/lib/credential-store.sh get "$ACCOUNT_JIRA_TOKEN_KEY"`. Resolution path:
|
|
90
|
+
|
|
91
|
+
1. Read `keychainMapping.jira` from prefs.
|
|
92
|
+
2. Resolve via `credential-store.sh get` — the driver auto-delegates to `keychain.py` on macOS / Linux and PowerShell `CredentialManager` on Windows.
|
|
93
|
+
3. Missing → adapter prompts the inline Token Save Flow from `setup.md` (clipboard-based); user can save now or skip this run.
|
|
94
|
+
4. Expired (401) → same Save Flow with the "expired" trigger; on skip, returns `{status: "skipped", reason: "token expired"}`, does not block other adapters.
|
|
95
|
+
|
|
96
|
+
## POST contract
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
POST /rest/api/2/issue/{id}/comment
|
|
100
|
+
Authorization: Bearer $JIRA_TOKEN
|
|
101
|
+
Content-Type: application/json
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Body assembled with `jq --rawfile` + `curl --data-binary @file`:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
jq -n --rawfile body /tmp/channels-$TASK_ID-jira.txt '{body: $body}' \
|
|
108
|
+
> /tmp/channels-$TASK_ID-jira-payload.json
|
|
109
|
+
curl -s -X POST -H "Authorization: Bearer $JIRA_TOKEN" \
|
|
110
|
+
-H "Content-Type: application/json" \
|
|
111
|
+
--data-binary @/tmp/channels-$TASK_ID-jira-payload.json \
|
|
112
|
+
"$JIRA_BASE/rest/api/2/issue/$JIRA_ID/comment"
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
The dispatch summary line includes the comment URL with `?focusedCommentId=…` so the user can paste it into Slack/Teams.
|
|
116
|
+
|
|
117
|
+
## Wiki → Jira auto-link triad
|
|
118
|
+
|
|
119
|
+
When the **Wiki** adapter writes pages on the same run AND `prefs.global.wikiToJiraComment === true`, the Wiki adapter also posts a humanizer-passed Jira comment summarizing wiki pages (component name + variant count + wiki URL). That secondary comment is independent of this adapter — both can coexist on the same issue. Full contract: `refs/issue-jira-triad.md`.
|
|
120
|
+
|
|
121
|
+
## Hard rules (must not regress)
|
|
122
|
+
|
|
123
|
+
- Real newlines, no HTML entities — heredoc + `jq --rawfile` + `curl --data-binary @file`.
|
|
124
|
+
- Section order is fixed: `summary` → `test_scenarios` → `context_refs`. Never insert sections between them; never reorder.
|
|
125
|
+
- Humanizer pass runs **after** body assembly and **before** wiki-markup conversion. Tone target: informal but technical. No marketing voice, no "we are excited", no "I have…".
|
|
126
|
+
- Body content language follows `prefs.global.outputLanguage`. Code identifiers, file paths, type names, branch names, and the wiki-markup syntax stay verbatim. The `promptLanguage="en"` lock means any LLM prompt that produces the body is in English; the body itself is then rendered in the user's language.
|
|
127
|
+
- Adapter failures are non-blocking — a missing token or 401 returns `skipped`/`failed`, the loop keeps going for PR / Confluence / Wiki.
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Channel adapter — Pull Request review actions
|
|
2
|
+
|
|
3
|
+
> Canonical contract for the PR-actions branch of `/multi-agent:review`. The PR-side artifacts are **per-finding inline comments + an explicit approve / needs-work decision** — never a single monolithic description comment.
|
|
4
|
+
|
|
5
|
+
## When this fires
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
review.input.kind === "pr" (PR URL, #N, or repo#N input)
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Branch-only invocations (`/multi-agent:review feature/foo`) do NOT post anything — chat-only summary is the only artifact.
|
|
12
|
+
|
|
13
|
+
## The decision rule
|
|
14
|
+
|
|
15
|
+
After triage, count the `accepted` findings by severity:
|
|
16
|
+
|
|
17
|
+
| Accepted blocking | Accepted important | Accepted suggestion | Decision | Inline comments |
|
|
18
|
+
|---|---|---|---|---|
|
|
19
|
+
| 0 | 0 | 0 | **APPROVE** | none |
|
|
20
|
+
| 0 | 0 | ≥1 | **APPROVE** | none (suggestions stay in chat summary only) |
|
|
21
|
+
| 0 | ≥1 | any | **NEEDS WORK / REQUEST CHANGES** | one per accepted blocking + important |
|
|
22
|
+
| ≥1 | any | any | **NEEDS WORK / REQUEST CHANGES** | one per accepted blocking + important |
|
|
23
|
+
|
|
24
|
+
**Hard rule — no monolithic description comment.** "Post one big advisory comment with verdict + tables + finding sections" is forbidden. Every finding that warrants posting MUST be an inline comment anchored to `file:line`. The verdict itself is the review state (APPROVED / NEEDS_WORK), not a comment body.
|
|
25
|
+
|
|
26
|
+
**Suggestions never block and never get inline comments by default.** They only appear in the chat summary. Inline-posting suggestions floods the PR for taste-level concerns; reserve PR comments for blocking + important.
|
|
27
|
+
|
|
28
|
+
## Inline comment template (per finding)
|
|
29
|
+
|
|
30
|
+
Body language follows `prefs.global.outputLanguage`. Both forms below are 1:1 — pick the matching one at render time.
|
|
31
|
+
|
|
32
|
+
### Turkish (outputLanguage = "tr")
|
|
33
|
+
|
|
34
|
+
```markdown
|
|
35
|
+
{severityEmoji} **{severityLabelTr}** — {issueTr}
|
|
36
|
+
|
|
37
|
+
**Öneri:** {fixTr}
|
|
38
|
+
|
|
39
|
+
{Optional rule reference, e.g.:}
|
|
40
|
+
_apple-archive-compliance / no-force-unwrap — Guideline 2.1.1_
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
🤖 _Multi-Agent Review · iteration #{iterationNumber}_
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Severity labels (TR):
|
|
47
|
+
- `blocking` → `🔴 **Blocker**`
|
|
48
|
+
- `important` → `🟡 **Önemli**`
|
|
49
|
+
|
|
50
|
+
### English (outputLanguage = "en")
|
|
51
|
+
|
|
52
|
+
```markdown
|
|
53
|
+
{severityEmoji} **{severityLabelEn}** — {issueEn}
|
|
54
|
+
|
|
55
|
+
**Suggestion:** {fixEn}
|
|
56
|
+
|
|
57
|
+
{Optional rule reference}
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
🤖 _Multi-Agent Review · iteration #{iterationNumber}_
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Severity labels (EN):
|
|
64
|
+
- `blocking` → `🔴 **Blocker**`
|
|
65
|
+
- `important` → `🟡 **Important**`
|
|
66
|
+
|
|
67
|
+
### Anchoring
|
|
68
|
+
|
|
69
|
+
| Provider | Endpoint | Anchor |
|
|
70
|
+
|---|---|---|
|
|
71
|
+
| GitHub | `POST /repos/{owner}/{repo}/pulls/{n}/comments` | `path` + `line` (right side) + `commit_id` |
|
|
72
|
+
| Bitbucket Server | `POST /rest/api/1.0/projects/{key}/repos/{slug}/pull-requests/{id}/comments` with `anchor: { path, line, lineType: "ADDED", fileType: "TO" }` | `path` + `line` |
|
|
73
|
+
|
|
74
|
+
If a finding's `line` falls outside the diff (review of unchanged code), the anchor is dropped and the comment becomes a top-level PR comment instead — same body, no inline anchor.
|
|
75
|
+
|
|
76
|
+
## Decision endpoints
|
|
77
|
+
|
|
78
|
+
| Provider | Approve | Needs Work / Request Changes |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| GitHub | `gh pr review <N> --approve` | `gh pr review <N> --request-changes --body "<empty>"` |
|
|
81
|
+
| Bitbucket Server | `PUT /pull-requests/{id}/participants/{userSlug}` body `{"status":"APPROVED"}` | `PUT /pull-requests/{id}/participants/{userSlug}` body `{"status":"NEEDS_WORK"}` |
|
|
82
|
+
|
|
83
|
+
The Bitbucket needs-work pattern keeps the user as REVIEWER role; status flip is the visible "Request changes" signal in the UI.
|
|
84
|
+
|
|
85
|
+
## Order of operations
|
|
86
|
+
|
|
87
|
+
1. Decide: APPROVE vs NEEDS_WORK from the table above.
|
|
88
|
+
2. If NEEDS_WORK: post one inline comment per accepted blocking + important finding, in `outputLanguage`.
|
|
89
|
+
3. Set the review state (APPROVE / NEEDS_WORK) — this is the durable verdict signal.
|
|
90
|
+
4. The chat summary still prints regardless (live conversation). Suggestions go to chat only.
|
|
91
|
+
|
|
92
|
+
Comments and the decision are paired — the decision is set AFTER comments are posted so reviewers see the inlines before the state flag.
|
|
93
|
+
|
|
94
|
+
## Hard prohibitions
|
|
95
|
+
|
|
96
|
+
- No monolith description comment (no "## 🔍 Multi-Agent Review — PR #N" body).
|
|
97
|
+
- No `Closes #` / `Fixes #` / `Resolves #` keywords in any comment.
|
|
98
|
+
- No em-dashes (`—`) in free-form reviewer prose (the `issue` / `fix` body text); use ` · ` or `→`. The em-dash in the fixed inline template (severity label separator, e.g. `**Blocker** — {issue}`) is part of the rendered shape, not prose, and is allowed.
|
|
99
|
+
- No model vendor names in comment prose; the chat-side table column header is the only place they may appear.
|
|
100
|
+
- No suggestion-severity inline comments. Suggestions are chat-only.
|
|
101
|
+
- No mixing languages in one comment body — pick `outputLanguage` and stick to it.
|
|
102
|
+
|
|
103
|
+
## Idempotency
|
|
104
|
+
|
|
105
|
+
Each `/multi-agent:review` invocation:
|
|
106
|
+
- Posts new inline comments (does not edit prior runs' comments — preserves audit trail).
|
|
107
|
+
- Sets review state via the appropriate endpoint (PUT/POST) — overwrites prior state for the same user.
|
|
108
|
+
|
|
109
|
+
If the user re-runs review and findings shrink (e.g., from 3 important → 0), the state flips from NEEDS_WORK → APPROVED automatically.
|
|
110
|
+
|
|
111
|
+
## Provider auto-detection
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
case "$prHostUrl" in
|
|
115
|
+
github.com|api.github.com) provider=github ;;
|
|
116
|
+
bitbucket.*|*.bitbucket.*) provider=bitbucket-server ;;
|
|
117
|
+
gitlab.*|*.gitlab.*) provider=gitlab ;; # not implemented yet
|
|
118
|
+
*) provider=unknown ;;
|
|
119
|
+
esac
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Unknown providers fall back to chat-only with a warning: "Provider not recognized for {host}. Findings printed to chat; manual review action required on the PR UI."
|
|
123
|
+
|
|
124
|
+
## Pairing with the chat summary
|
|
125
|
+
|
|
126
|
+
The chat-side summary ALWAYS prints with the verdict table (per-model breakdown for parallel runs). The summary stays in chat; the PR receives inline comments per finding + the state flag — the two channels do not mirror each other.
|
|
127
|
+
|
|
128
|
+
## Drift detection
|
|
129
|
+
|
|
130
|
+
`pipeline/scripts/smoke-pr-review-actions.sh` asserts:
|
|
131
|
+
- The review.md flow uses `post-pr-review.sh` (not the legacy renderer).
|
|
132
|
+
- The legacy `pr-review-comment.md` template + `render-pr-review-body.sh` are GONE (no traces).
|
|
133
|
+
- The decision table appears verbatim in this file.
|
|
134
|
+
- Both `tr` and `en` inline comment shapes are present.
|
|
135
|
+
- Provider switch covers `github`, `bitbucket-server`, and a fallback case.
|