@mmerterden/multi-agent-pipeline 12.5.0 → 12.7.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 +213 -0
- package/README.md +19 -19
- package/docs/FIGMA_PIPELINE.md +34 -34
- package/docs/adr/0001-three-model-triage.md +12 -12
- package/docs/adr/0002-instruction-driven-flag.md +5 -5
- package/docs/adr/0003-unified-shared-skills.md +5 -5
- package/docs/adr/0004-zero-dependency-philosophy.md +5 -5
- package/docs/adr/0005-lazy-phase-docs.md +2 -2
- package/docs/adr/0006-skills-core-external-split.md +6 -6
- package/docs/adr/0007-multi-tool-adapter-framework.md +19 -19
- package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +19 -19
- package/docs/adr/README.md +1 -1
- package/docs/best-practices.md +3 -3
- package/docs/features.md +48 -28
- package/docs/performance.md +16 -16
- package/docs/recovery-guide.md +39 -39
- package/index.js +11 -5
- package/install/_common.mjs +5 -11
- package/install/_copilot-instructions.mjs +2 -2
- package/install/_dev-only-files.mjs +2 -1
- package/install/_platform-filter.mjs +1 -1
- package/install/_telemetry.mjs +1 -1
- package/install/claude.mjs +10 -9
- package/install/copilot.mjs +10 -19
- package/install/index.mjs +7 -15
- package/install/templates/copilot-instructions.md +54 -54
- package/install.js +1 -1
- package/package.json +15 -11
- package/pipeline/agents/security-auditor.md +1 -1
- package/pipeline/commands/archive-guard.md +5 -5
- package/pipeline/commands/multi-agent/SKILL.md +3 -1
- package/pipeline/commands/multi-agent/analysis/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/autopilot/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/build-optimize/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/create-jira/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/design-check/SKILL.md +287 -0
- package/pipeline/commands/multi-agent/dev/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/dev-autopilot/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/dev-local/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/dev-local-autopilot/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/diff-explain/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/finish/SKILL.md +6 -6
- package/pipeline/commands/multi-agent/forget/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/help/SKILL.md +46 -6
- package/pipeline/commands/multi-agent/issue/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/jira/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/kill/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/language/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/local/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/local-autopilot/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/log/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/manual-test/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/prune-logs/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/purge/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/refactor/SKILL.md +107 -19
- package/pipeline/commands/multi-agent/resume/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/review/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/review-issue/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/review-jira/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/routines/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/save/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/scan/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/search/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/setup/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/stack/SKILL.md +3 -3
- package/pipeline/commands/multi-agent/status/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/sync/SKILL.md +123 -16
- package/pipeline/commands/multi-agent/test/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/uninstall/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/update/SKILL.md +3 -3
- package/pipeline/commands/sim-test.md +5 -5
- package/pipeline/eval/run-metrics-fixture.json +60 -13
- package/pipeline/lib/account-resolver.sh +1 -1
- package/pipeline/lib/channels-multi-repo.sh +1 -1
- package/pipeline/lib/context-link-extractor.sh +1 -1
- package/pipeline/lib/credential-store.sh +33 -1
- package/pipeline/lib/fetch-confluence.sh +1 -1
- package/pipeline/lib/fetch-crashlytics.sh +1 -1
- package/pipeline/lib/fetch-fortify.sh +1 -1
- package/pipeline/lib/fetch-graylog.sh +1 -1
- package/pipeline/lib/fetch-swagger.sh +1 -1
- package/pipeline/lib/issue-fetcher.sh +1 -1
- package/pipeline/lib/multi-repo-pipeline.sh +1 -1
- package/pipeline/lib/repo-cache.sh +1 -1
- package/pipeline/lib/submodule-detector.sh +1 -1
- package/pipeline/multi-agent-refs/component-dispatch.md +1 -1
- package/pipeline/multi-agent-refs/component-generation.md +121 -0
- package/pipeline/multi-agent-refs/cross-cli-contract.md +4 -4
- package/pipeline/multi-agent-refs/features/model-fallback.md +2 -2
- package/pipeline/multi-agent-refs/phases/phase-3-dev.md +2 -2
- package/pipeline/multi-agent-refs/phases/phase-4-review.md +1 -1
- package/pipeline/multi-agent-refs/phases/phase-5-test.md +4 -4
- package/pipeline/preferences-template.json +23 -12
- package/pipeline/schemas/agent-state.schema.json +125 -5
- package/pipeline/schemas/analysis-output.schema.json +18 -4
- package/pipeline/schemas/analysis-spec.schema.json +120 -32
- package/pipeline/schemas/clarify-output.schema.json +15 -5
- package/pipeline/schemas/design-check-config.schema.json +183 -0
- package/pipeline/schemas/dev-critic-output.schema.json +20 -5
- package/pipeline/schemas/figma-project-config.schema.json +42 -10
- package/pipeline/schemas/learnings-ledger.schema.json +10 -2
- package/pipeline/schemas/migrations/figma-config-1.0.0-to-2.0.0.mjs +1 -4
- package/pipeline/schemas/migrations/prefs-2.0.0-to-2.1.0.mjs +24 -7
- package/pipeline/schemas/migrations/state-2.0.0-to-2.1.0.mjs +30 -12
- package/pipeline/schemas/plan-todos.schema.json +6 -3
- package/pipeline/schemas/planning-output.schema.json +5 -1
- package/pipeline/schemas/prefs.schema.json +215 -197
- package/pipeline/schemas/test-gap.schema.json +5 -5
- package/pipeline/schemas/token-budget.json +8 -8
- package/pipeline/schemas/triage-corpus.schema.json +1 -1
- package/pipeline/scripts/README.md +7 -5
- package/pipeline/scripts/aggregate-metrics.mjs +18 -6
- package/pipeline/scripts/build-skills-index.mjs +6 -2
- package/pipeline/scripts/build-stack-plugins.mjs +142 -39
- package/pipeline/scripts/check-derived-drift.mjs +196 -0
- package/pipeline/scripts/check-md-links.mjs +6 -2
- package/pipeline/scripts/classify-plan-safety.mjs +26 -8
- package/pipeline/scripts/cost-budget-check.mjs +11 -6
- package/pipeline/scripts/cost-table.json +1 -1
- package/pipeline/scripts/diff-explain.mjs +7 -3
- package/pipeline/scripts/diff-risk-score.mjs +13 -3
- package/pipeline/scripts/eval-golden-tasks-live.mjs +8 -3
- package/pipeline/scripts/eval-golden-tasks.mjs +21 -9
- package/pipeline/scripts/eval-intent.mjs +8 -4
- package/pipeline/scripts/eval-mine-corpus.mjs +14 -4
- package/pipeline/scripts/evidence-gate.mjs +7 -2
- package/pipeline/scripts/fixtures/install-layout.tsv +7 -7
- package/pipeline/scripts/gen-mode-dispatch.mjs +38 -21
- package/pipeline/scripts/gen-skills-index.mjs +18 -3
- package/pipeline/scripts/learning-curve.mjs +13 -3
- package/pipeline/scripts/learnings-ledger.mjs +119 -34
- package/pipeline/scripts/lint-mcp-refs.mjs +218 -0
- package/pipeline/scripts/lint-skills.mjs +20 -9
- package/pipeline/scripts/localize-commands.mjs +6 -1
- package/pipeline/scripts/match-skills.mjs +15 -4
- package/pipeline/scripts/memory-load.sh +5 -1
- package/pipeline/scripts/migrate-prefs.mjs +33 -16
- package/pipeline/scripts/phase-tracker.sh +3 -1
- package/pipeline/scripts/render-work-summary.sh +4 -1
- package/pipeline/scripts/repo-map.mjs +110 -64
- package/pipeline/scripts/review-scope.mjs +7 -1
- package/pipeline/scripts/routine-registry.mjs +4 -9
- package/pipeline/scripts/run-aggregator.mjs +11 -5
- package/pipeline/scripts/run-metrics.mjs +13 -8
- package/pipeline/scripts/run-smokes.mjs +57 -3
- package/pipeline/scripts/scorecard.mjs +258 -0
- package/pipeline/scripts/smoke-command-inventory.sh +81 -0
- package/pipeline/scripts/smoke-commands-skills-parity.sh +1 -1
- package/pipeline/scripts/smoke-compliance-skills.sh +4 -4
- package/pipeline/scripts/smoke-context-budget.sh +72 -0
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +12 -2
- package/pipeline/scripts/smoke-generate-issue.sh +6 -5
- package/pipeline/scripts/smoke-model-fallback.sh +1 -1
- package/pipeline/scripts/smoke-no-mcp-in-dev-phases.sh +86 -7
- package/pipeline/scripts/smoke-own-punctuation.sh +103 -0
- package/pipeline/scripts/smoke-per-repo-memory.sh +2 -2
- package/pipeline/scripts/smoke-review-readiness.sh +3 -2
- package/pipeline/scripts/smoke-schema-validation.sh +19 -5
- package/pipeline/scripts/smoke-shadow-git.sh +4 -2
- package/pipeline/scripts/smoke-workflow-audit.sh +43 -11
- package/pipeline/scripts/smoke-write-state.sh +49 -5
- package/pipeline/scripts/test-gap-rules/android.json +11 -11
- package/pipeline/scripts/test-gap-rules/ios.json +16 -11
- package/pipeline/scripts/test-gap-rules/node.json +19 -7
- package/pipeline/scripts/test-gap-rules/python.json +10 -4
- package/pipeline/scripts/test-gap-scan.mjs +44 -12
- package/pipeline/scripts/test-integrity-gate.mjs +5 -1
- package/pipeline/scripts/token-budget-report.mjs +44 -21
- package/pipeline/scripts/triage-memory.mjs +142 -32
- package/pipeline/scripts/uninstall.mjs +75 -31
- package/pipeline/scripts/validate-analysis-doc.mjs +15 -5
- package/pipeline/scripts/validate-diff-risk.mjs +32 -18
- package/pipeline/scripts/validate-test-gap.mjs +17 -7
- package/pipeline/scripts/validate-triage.mjs +17 -5
- package/pipeline/scripts/write-state.mjs +32 -9
- package/pipeline/skills/.skill-manifest.json +24 -8
- package/pipeline/skills/.skills-index.json +125 -89
- package/pipeline/skills/shared/README.md +65 -61
- package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +10 -8
- package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +26 -279
- package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +248 -0
- package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-finish/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-forget/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-garbage-collect/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +23 -1
- package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +82 -18
- package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-review-issue/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-review-jira/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-routines/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-save/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +3 -3
- package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +51 -9
- package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-uninstall/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +1 -1
- package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +1 -1
- package/pipeline/skills/shared/external/agent-introspection-debugging/SKILL.md +4 -4
- package/pipeline/skills/shared/external/agentflow/SKILL.md +1 -1
- package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +1 -1
- package/pipeline/skills/shared/external/android_ui_verification/SKILL.md +1 -1
- package/pipeline/skills/shared/external/api-patterns/SKILL.md +1 -1
- package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +1 -1
- package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +1 -1
- package/pipeline/skills/shared/external/backlog/BACKLOG.md +1 -1
- package/pipeline/skills/shared/external/backlog/SKILL.md +12 -12
- package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +1 -1
- package/pipeline/skills/shared/external/context-compression/SKILL.md +1 -1
- package/pipeline/skills/shared/external/council/SKILL.md +3 -3
- package/pipeline/skills/shared/external/css-modern/SKILL.md +1 -1
- package/pipeline/skills/shared/external/database-patterns/SKILL.md +1 -1
- package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +1 -1
- package/pipeline/skills/shared/external/docker-expert/SKILL.md +1 -1
- package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +1 -1
- package/pipeline/skills/shared/external/firebase/SKILL.md +1 -1
- package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +1 -1
- package/pipeline/skills/shared/external/help-skills/SKILL.md +1 -1
- package/pipeline/skills/shared/external/hig-components-content/SKILL.md +1 -1
- package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +1 -1
- package/pipeline/skills/shared/external/hig-components-status/SKILL.md +1 -1
- package/pipeline/skills/shared/external/hig-components-system/SKILL.md +1 -1
- package/pipeline/skills/shared/external/hig-foundations/SKILL.md +1 -1
- package/pipeline/skills/shared/external/hig-inputs/SKILL.md +1 -1
- package/pipeline/skills/shared/external/hig-patterns/SKILL.md +1 -1
- package/pipeline/skills/shared/external/hig-platforms/SKILL.md +1 -1
- package/pipeline/skills/shared/external/hig-technologies/SKILL.md +1 -1
- package/pipeline/skills/shared/external/html-semantic/SKILL.md +1 -1
- package/pipeline/skills/shared/external/humanizer/SKILL.md +1 -1
- package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +1 -1
- package/pipeline/skills/shared/external/ios-developer/SKILL.md +1 -1
- package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +1 -1
- package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +1 -1
- package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +1 -1
- package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +1 -1
- package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +1 -1
- package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +1 -1
- package/pipeline/skills/shared/external/observability-engineer/SKILL.md +1 -1
- package/pipeline/skills/shared/external/python-patterns/SKILL.md +1 -1
- package/pipeline/skills/shared/external/react-best-practices/SKILL.md +1 -1
- package/pipeline/skills/shared/external/rest-api-design/SKILL.md +1 -1
- package/pipeline/skills/shared/external/search-first/SKILL.md +2 -2
- package/pipeline/skills/shared/external/skill-creator/SKILL.md +12 -12
- package/pipeline/skills/shared/external/skill-creator/audit.md +21 -21
- package/pipeline/skills/shared/external/skill-creator/checklist.md +3 -3
- package/pipeline/skills/shared/external/skill-creator/examples.md +10 -10
- package/pipeline/skills/shared/external/skill-creator/label-check.md +17 -17
- package/pipeline/skills/shared/external/skill-creator/scripts/audit-panel.js +86 -50
- package/pipeline/skills/shared/external/skill-creator/template.md +9 -9
- package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +1 -1
- package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +1 -1
- package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +1 -1
- package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +1 -1
- package/pipeline/skills/shared/external/tailwind-css/SKILL.md +1 -1
- package/pipeline/skills/shared/external/testing-backend/SKILL.md +1 -1
- package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +1 -1
- package/pipeline/skills/shared/external/vue-composition/SKILL.md +1 -1
- package/pipeline/skills/shared/external/web-accessibility/SKILL.md +1 -1
- package/pipeline/skills/shared/external/web-performance/SKILL.md +1 -1
- package/pipeline/skills/shared/external/web-testing/SKILL.md +1 -1
- package/pipeline/skills/shared/external/xcode-build-benchmark/schemas/build-benchmark.schema.json +9 -49
- package/pipeline/skills/skills-index.md +63 -59
- package/pipeline/scripts/smoke-plugin-validate.sh +0 -64
|
@@ -97,8 +97,16 @@
|
|
|
97
97
|
"type": "object",
|
|
98
98
|
"required": ["tool", "phase"],
|
|
99
99
|
"properties": {
|
|
100
|
-
"tool": {
|
|
101
|
-
|
|
100
|
+
"tool": {
|
|
101
|
+
"type": "string",
|
|
102
|
+
"description": "MCP tool name, e.g. mcp__claude_ai_Figma__get_design_context."
|
|
103
|
+
},
|
|
104
|
+
"phase": {
|
|
105
|
+
"type": "integer",
|
|
106
|
+
"minimum": 0,
|
|
107
|
+
"maximum": 7,
|
|
108
|
+
"description": "Pipeline phase the call ran in. Only 0 (init) and 1 (analysis) are permitted."
|
|
109
|
+
},
|
|
102
110
|
"timestamp": { "type": "string", "description": "ISO-8601 time of the call." }
|
|
103
111
|
}
|
|
104
112
|
}
|
|
@@ -121,6 +129,108 @@
|
|
|
121
129
|
"default": false,
|
|
122
130
|
"description": "A Figma / skill instruction file is steering phases 3-6."
|
|
123
131
|
},
|
|
132
|
+
"mode": {
|
|
133
|
+
"type": ["string", "null"],
|
|
134
|
+
"description": "Pipeline mode for this run (e.g. 'dev', 'local', 'design-check'). Absent = full pipeline."
|
|
135
|
+
},
|
|
136
|
+
"designCheck": {
|
|
137
|
+
"type": ["object", "null"],
|
|
138
|
+
"additionalProperties": true,
|
|
139
|
+
"description": "State for a /multi-agent:design-check run. Populated in Phase 0 (mock feasibility, scenario inventory, scope), Phase 2 (Figma variants) and Phase 3 (captures, skips, findings).",
|
|
140
|
+
"properties": {
|
|
141
|
+
"module": { "type": "string", "description": "Module / submodule path being audited." },
|
|
142
|
+
"platform": { "type": "string", "enum": ["ios", "android"] },
|
|
143
|
+
"mock": {
|
|
144
|
+
"type": "object",
|
|
145
|
+
"additionalProperties": true,
|
|
146
|
+
"description": "design_mock_detect result.",
|
|
147
|
+
"properties": {
|
|
148
|
+
"supported": { "description": "true | false | 'debug-only'" },
|
|
149
|
+
"mechanism": { "type": ["string", "null"] },
|
|
150
|
+
"activation": { "type": ["object", "null"] },
|
|
151
|
+
"variantsHint": { "type": "array", "items": { "type": "string" } }
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
"inventory": {
|
|
155
|
+
"type": ["object", "null"],
|
|
156
|
+
"additionalProperties": true,
|
|
157
|
+
"description": "design_scenario_inventory result, persisted verbatim. THIS is the audit's target set - Phase 3 iterates it and Phase 4 gates on it. Never re-derive it by reading the repo.",
|
|
158
|
+
"properties": {
|
|
159
|
+
"targetCount": { "type": "integer" },
|
|
160
|
+
"targets": {
|
|
161
|
+
"type": "array",
|
|
162
|
+
"items": { "type": "object", "additionalProperties": true },
|
|
163
|
+
"description": "{ id, kind, label, screen, driver, evidence } per state driver (launch-arg / scenario-case / code-scenario / fixture / deep-link)."
|
|
164
|
+
},
|
|
165
|
+
"groups": {
|
|
166
|
+
"type": "array",
|
|
167
|
+
"items": { "type": "object", "additionalProperties": true }
|
|
168
|
+
},
|
|
169
|
+
"byKind": { "type": "object", "additionalProperties": true },
|
|
170
|
+
"truncated": { "type": "boolean" }
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
"scope": {
|
|
174
|
+
"type": ["object", "null"],
|
|
175
|
+
"additionalProperties": true,
|
|
176
|
+
"description": "Resolved run scope: the inventory targets this run must audit. The coverage gate applies to this set, not to the whole inventory - a scoped run is not penalised for out-of-scope targets.",
|
|
177
|
+
"properties": {
|
|
178
|
+
"argument": {
|
|
179
|
+
"type": ["string", "null"],
|
|
180
|
+
"description": "Raw $ARGUMENTS as given (empty = whole module, '--resume' = remainder of the last run)."
|
|
181
|
+
},
|
|
182
|
+
"targetIds": { "type": "array", "items": { "type": "string" } },
|
|
183
|
+
"resumedFrom": {
|
|
184
|
+
"type": ["string", "null"],
|
|
185
|
+
"description": "Report dir of the run this scope resumes, when --resume was used."
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
"figmaUrl": { "type": ["string", "null"] },
|
|
190
|
+
"variants": {
|
|
191
|
+
"type": "array",
|
|
192
|
+
"description": "Mapped variants with their Figma spec, capture, and findings.",
|
|
193
|
+
"items": { "type": "object", "additionalProperties": true }
|
|
194
|
+
},
|
|
195
|
+
"captured": {
|
|
196
|
+
"type": "array",
|
|
197
|
+
"description": "Every capture taken, appended and persisted as it happens so a dying run is resumable. One entry per screenshot, keyed to the target that produced it ('<targetId>', or '<targetId>#<sub-label>' for tap-reachable sub-states).",
|
|
198
|
+
"items": { "type": "object", "additionalProperties": true }
|
|
199
|
+
},
|
|
200
|
+
"skipped": {
|
|
201
|
+
"type": "array",
|
|
202
|
+
"description": "Targets that could not be audited, each with a CONCRETE reason. 'Requires a scenario / prefix / launch-arg' is not a reason - that is the work Phase 3 exists to do. A skip without a reason fails the coverage gate.",
|
|
203
|
+
"items": {
|
|
204
|
+
"type": "object",
|
|
205
|
+
"additionalProperties": true,
|
|
206
|
+
"required": ["id", "reason"],
|
|
207
|
+
"properties": {
|
|
208
|
+
"id": { "type": "string" },
|
|
209
|
+
"group": { "type": ["string", "null"] },
|
|
210
|
+
"reason": { "type": "string", "minLength": 1 }
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
"coverage": {
|
|
215
|
+
"type": ["object", "null"],
|
|
216
|
+
"additionalProperties": true,
|
|
217
|
+
"description": "design_report coverage verdict for this run. gate='fail' means the run is INCOMPLETE and must be reported as such, with the unaccounted ids and the --resume command.",
|
|
218
|
+
"properties": {
|
|
219
|
+
"gate": { "type": "string", "enum": ["pass", "fail"] },
|
|
220
|
+
"audited": { "type": "integer" },
|
|
221
|
+
"target": { "type": "integer" },
|
|
222
|
+
"pct": { "type": "number" },
|
|
223
|
+
"skippedWithReason": { "type": "integer" },
|
|
224
|
+
"unaccounted": { "type": "integer" },
|
|
225
|
+
"unaccountedIds": { "type": "array", "items": { "type": "string" } }
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
"reportDir": {
|
|
229
|
+
"type": ["string", "null"],
|
|
230
|
+
"description": "Output dir under ~/DesignChecks."
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
},
|
|
124
234
|
"identity": {
|
|
125
235
|
"type": "object",
|
|
126
236
|
"additionalProperties": false,
|
|
@@ -128,7 +238,10 @@
|
|
|
128
238
|
"properties": {
|
|
129
239
|
"name": { "type": "string" },
|
|
130
240
|
"email": { "type": "string", "format": "email" },
|
|
131
|
-
"username": {
|
|
241
|
+
"username": {
|
|
242
|
+
"type": "string",
|
|
243
|
+
"description": "SCM username (GitHub/Bitbucket). Used to filter out PR author from reviewer list."
|
|
244
|
+
}
|
|
132
245
|
}
|
|
133
246
|
},
|
|
134
247
|
"phases": {
|
|
@@ -139,7 +252,10 @@
|
|
|
139
252
|
"type": "object",
|
|
140
253
|
"additionalProperties": false,
|
|
141
254
|
"properties": {
|
|
142
|
-
"status": {
|
|
255
|
+
"status": {
|
|
256
|
+
"type": "string",
|
|
257
|
+
"enum": ["pending", "in_progress", "done", "skipped", "failed"]
|
|
258
|
+
},
|
|
143
259
|
"startedAt": { "type": "string", "format": "date-time" },
|
|
144
260
|
"finishedAt": { "type": "string", "format": "date-time" },
|
|
145
261
|
"model": { "type": "string" },
|
|
@@ -222,7 +338,11 @@
|
|
|
222
338
|
"properties": {
|
|
223
339
|
"number": { "type": "integer", "minimum": 1 },
|
|
224
340
|
"url": { "type": "string", "format": "uri" },
|
|
225
|
-
"version": {
|
|
341
|
+
"version": {
|
|
342
|
+
"type": "integer",
|
|
343
|
+
"minimum": 0,
|
|
344
|
+
"description": "Bitbucket PR version - must increment by 1 per PUT."
|
|
345
|
+
},
|
|
226
346
|
"draft": { "type": "boolean" },
|
|
227
347
|
"reviewers": {
|
|
228
348
|
"type": "array",
|
|
@@ -18,8 +18,14 @@
|
|
|
18
18
|
"enum": ["ios", "android", "backend", "frontend", "mobile", "unknown"],
|
|
19
19
|
"description": "Dominant stack inferred from project markers (.xcodeproj, build.gradle, package.json, etc.)."
|
|
20
20
|
},
|
|
21
|
-
"language": {
|
|
22
|
-
|
|
21
|
+
"language": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"description": "E.g. 'Swift 6', 'Kotlin 2.1', 'Python 3.13', 'TypeScript 5'."
|
|
24
|
+
},
|
|
25
|
+
"framework": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"description": "E.g. 'SwiftUI', 'Jetpack Compose', 'FastAPI', 'Next.js 16'."
|
|
28
|
+
}
|
|
23
29
|
}
|
|
24
30
|
},
|
|
25
31
|
"touchedAreas": {
|
|
@@ -30,8 +36,16 @@
|
|
|
30
36
|
"additionalProperties": false,
|
|
31
37
|
"required": ["path", "why"],
|
|
32
38
|
"properties": {
|
|
33
|
-
"path": {
|
|
34
|
-
|
|
39
|
+
"path": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"minLength": 1,
|
|
42
|
+
"description": "File or directory relative to repo root."
|
|
43
|
+
},
|
|
44
|
+
"why": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"minLength": 4,
|
|
47
|
+
"description": "Why the task likely affects this area."
|
|
48
|
+
}
|
|
35
49
|
}
|
|
36
50
|
},
|
|
37
51
|
"description": "Files / modules the task is most likely to modify. Phase 2 uses this to scope tasks."
|
|
@@ -128,8 +128,15 @@
|
|
|
128
128
|
"url": { "type": "string", "format": "uri" },
|
|
129
129
|
"fileKey": { "type": ["string", "null"] },
|
|
130
130
|
"nodeId": { "type": ["string", "null"] },
|
|
131
|
-
"screenshotUrl": {
|
|
132
|
-
|
|
131
|
+
"screenshotUrl": {
|
|
132
|
+
"type": ["string", "null"],
|
|
133
|
+
"description": "Local PNG path or signed render URL for this node."
|
|
134
|
+
},
|
|
135
|
+
"tier": {
|
|
136
|
+
"type": ["integer", "null"],
|
|
137
|
+
"enum": [1, 2, 3, null],
|
|
138
|
+
"description": "Figma access tier used to capture this record (mirrors state.figmaAccess.tier)."
|
|
139
|
+
},
|
|
133
140
|
"frames": {
|
|
134
141
|
"type": "array",
|
|
135
142
|
"items": {
|
|
@@ -202,14 +209,23 @@
|
|
|
202
209
|
"properties": {
|
|
203
210
|
"nodeId": { "type": "string" },
|
|
204
211
|
"name": { "type": ["string", "null"] },
|
|
205
|
-
"designText": {
|
|
206
|
-
|
|
212
|
+
"designText": {
|
|
213
|
+
"type": ["string", "null"],
|
|
214
|
+
"description": "The visible-layer text at this node (often a placeholder)."
|
|
215
|
+
},
|
|
216
|
+
"raw": {
|
|
217
|
+
"type": ["string", "null"],
|
|
218
|
+
"description": "The raw annotation label/labelMarkdown before parsing."
|
|
219
|
+
},
|
|
207
220
|
"parsed": {
|
|
208
221
|
"type": "object",
|
|
209
222
|
"description": "Parsed copy keyed by language code (lowercased), e.g. { tr, en }.",
|
|
210
223
|
"additionalProperties": { "type": "string" }
|
|
211
224
|
},
|
|
212
|
-
"mode": {
|
|
225
|
+
"mode": {
|
|
226
|
+
"type": "string",
|
|
227
|
+
"enum": ["prefixed", "two-line", "single", "empty"]
|
|
228
|
+
}
|
|
213
229
|
}
|
|
214
230
|
}
|
|
215
231
|
}
|
|
@@ -231,7 +247,10 @@
|
|
|
231
247
|
"additionalProperties": false,
|
|
232
248
|
"required": ["method", "path"],
|
|
233
249
|
"properties": {
|
|
234
|
-
"method": {
|
|
250
|
+
"method": {
|
|
251
|
+
"type": "string",
|
|
252
|
+
"enum": ["GET", "POST", "PUT", "PATCH", "DELETE"]
|
|
253
|
+
},
|
|
235
254
|
"path": { "type": "string" },
|
|
236
255
|
"summary": { "type": ["string", "null"] },
|
|
237
256
|
"auth": { "type": ["string", "null"] },
|
|
@@ -363,7 +382,10 @@
|
|
|
363
382
|
"enum": ["names", "schema", "console"],
|
|
364
383
|
"description": "Sub-type: names (comma list), schema (local JSON), console (reference-only URL)."
|
|
365
384
|
},
|
|
366
|
-
"source": {
|
|
385
|
+
"source": {
|
|
386
|
+
"type": ["string", "null"],
|
|
387
|
+
"description": "Original input string (path, URL, or comma list)."
|
|
388
|
+
},
|
|
367
389
|
"events": {
|
|
368
390
|
"type": "array",
|
|
369
391
|
"items": {
|
|
@@ -387,7 +409,10 @@
|
|
|
387
409
|
},
|
|
388
410
|
"platformsEmitting": {
|
|
389
411
|
"type": "array",
|
|
390
|
-
"items": {
|
|
412
|
+
"items": {
|
|
413
|
+
"type": "string",
|
|
414
|
+
"enum": ["ios", "android", "backend", "frontend"]
|
|
415
|
+
}
|
|
391
416
|
},
|
|
392
417
|
"citation": { "type": ["string", "null"] }
|
|
393
418
|
}
|
|
@@ -415,7 +440,10 @@
|
|
|
415
440
|
"name": { "type": "string" },
|
|
416
441
|
"file": { "type": "string" },
|
|
417
442
|
"line": { "type": ["integer", "null"] },
|
|
418
|
-
"tag": {
|
|
443
|
+
"tag": {
|
|
444
|
+
"type": "string",
|
|
445
|
+
"enum": ["direct-match", "same-domain", "cross-cutting"]
|
|
446
|
+
}
|
|
419
447
|
}
|
|
420
448
|
}
|
|
421
449
|
}
|
|
@@ -493,29 +521,89 @@
|
|
|
493
521
|
"additionalProperties": false,
|
|
494
522
|
"description": "v3 template - 23 main sections + 3 footer. Each section is either filled (object) or omitted (null). Omitted sections do not appear in the output document. Sections 1, 2, 4, 9, 13, 14, 20, 21 are never omitted (Locked 2).",
|
|
495
523
|
"properties": {
|
|
496
|
-
"summary":
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
"
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
"
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
"
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
"
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
"
|
|
517
|
-
|
|
518
|
-
|
|
524
|
+
"summary": {
|
|
525
|
+
"type": ["object", "null"],
|
|
526
|
+
"description": "Section 1 - Geliştirme Özeti / Summary. Never null."
|
|
527
|
+
},
|
|
528
|
+
"goalsAndNonGoals": {
|
|
529
|
+
"type": ["object", "null"],
|
|
530
|
+
"description": "Section 2 - Hedefler ve Karşı Hedefler. Never null. Both columns mandatory (Locked 13)."
|
|
531
|
+
},
|
|
532
|
+
"flowChart": {
|
|
533
|
+
"type": ["object", "null"],
|
|
534
|
+
"description": "Section 3 - Akış Diyagramı. Mermaid blocks."
|
|
535
|
+
},
|
|
536
|
+
"userStories": {
|
|
537
|
+
"type": ["object", "null"],
|
|
538
|
+
"description": "Section 4 - Kullanıcı Hikayeleri. Gherkin format (Locked 12). Never null."
|
|
539
|
+
},
|
|
540
|
+
"designReference": {
|
|
541
|
+
"type": ["object", "null"],
|
|
542
|
+
"description": "Section 5 - Tasarım Referansı. All Figma variants drilled (Locked 18). Screenshots embedded (Locked 17)."
|
|
543
|
+
},
|
|
544
|
+
"componentInventory": {
|
|
545
|
+
"type": ["object", "null"],
|
|
546
|
+
"description": "Section 6 - Bileşen Envanteri."
|
|
547
|
+
},
|
|
548
|
+
"designTokens": {
|
|
549
|
+
"type": ["object", "null"],
|
|
550
|
+
"description": "Section 7 - Tasarım Token'ları."
|
|
551
|
+
},
|
|
552
|
+
"assetInventory": {
|
|
553
|
+
"type": ["object", "null"],
|
|
554
|
+
"description": "Section 8 - Asset Envanteri. SVG default for new assets (Locked 15)."
|
|
555
|
+
},
|
|
556
|
+
"apiContracts": {
|
|
557
|
+
"type": ["object", "null"],
|
|
558
|
+
"description": "Section 9 - API Kontratları. All response variants enumerated (Locked 17)."
|
|
559
|
+
},
|
|
560
|
+
"localization": {
|
|
561
|
+
"type": ["object", "null"],
|
|
562
|
+
"description": "Section 10 - Lokalizasyon. 8-locale full coverage for new keys (Locked 20)."
|
|
563
|
+
},
|
|
564
|
+
"analytics": { "type": ["object", "null"], "description": "Section 11 - Analytics." },
|
|
565
|
+
"deeplinkPush": {
|
|
566
|
+
"type": ["object", "null"],
|
|
567
|
+
"description": "Section 12 - Deeplink ve Push Notification. Conditional."
|
|
568
|
+
},
|
|
569
|
+
"architecturePlan": {
|
|
570
|
+
"type": ["object", "null"],
|
|
571
|
+
"description": "Section 13 - Mimari Plan. Never null. Concept table filled by Pass B (Locked 22 + 24)."
|
|
572
|
+
},
|
|
573
|
+
"filesToAdd": {
|
|
574
|
+
"type": ["object", "null"],
|
|
575
|
+
"description": "Section 14 - Eklenecek Dosyalar. Never null. Every row carries Reuse / Add new / Modify tag (Locked 16)."
|
|
576
|
+
},
|
|
577
|
+
"testPlan": { "type": ["object", "null"], "description": "Section 15 - Test Planı." },
|
|
578
|
+
"accessibility": {
|
|
579
|
+
"type": ["object", "null"],
|
|
580
|
+
"description": "Section 16 - Erişilebilirlik."
|
|
581
|
+
},
|
|
582
|
+
"securityAndPrivacy": {
|
|
583
|
+
"type": ["object", "null"],
|
|
584
|
+
"description": "Section 17 - Güvenlik ve Gizlilik."
|
|
585
|
+
},
|
|
586
|
+
"rolloutPlan": { "type": ["object", "null"], "description": "Section 18 - Yayılım Planı." },
|
|
587
|
+
"alternativesConsidered": {
|
|
588
|
+
"type": ["object", "null"],
|
|
589
|
+
"description": "Section 19 - Değerlendirilen Alternatifler. ADR format."
|
|
590
|
+
},
|
|
591
|
+
"risksAndOpenQuestions": {
|
|
592
|
+
"type": ["object", "null"],
|
|
593
|
+
"description": "Section 20 - Riskler ve Açık Sorular. Never null. Auto-populated from conventionRisks + reuse competitors."
|
|
594
|
+
},
|
|
595
|
+
"references": {
|
|
596
|
+
"type": ["object", "null"],
|
|
597
|
+
"description": "Section 21 - Referanslar. Never null. User-supplied input table at the bottom (Locked 21)."
|
|
598
|
+
},
|
|
599
|
+
"glossary": {
|
|
600
|
+
"type": ["object", "null"],
|
|
601
|
+
"description": "Section 22 - Sözlük (footer). Optional in Lite mode."
|
|
602
|
+
},
|
|
603
|
+
"changelog": {
|
|
604
|
+
"type": ["object", "null"],
|
|
605
|
+
"description": "Section 23 - Değişiklik Geçmişi (footer)."
|
|
606
|
+
}
|
|
519
607
|
},
|
|
520
608
|
"required": [
|
|
521
609
|
"summary",
|
|
@@ -49,9 +49,19 @@
|
|
|
49
49
|
"additionalProperties": false,
|
|
50
50
|
"required": ["label"],
|
|
51
51
|
"properties": {
|
|
52
|
-
"label":
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
"label": {
|
|
53
|
+
"type": "string",
|
|
54
|
+
"description": "The choice text (≤ 60 chars; longer wraps awkwardly in AskUserQuestion)."
|
|
55
|
+
},
|
|
56
|
+
"recommended": {
|
|
57
|
+
"type": "boolean",
|
|
58
|
+
"default": false,
|
|
59
|
+
"description": "True for the conventional default. At most one option per question carries this flag."
|
|
60
|
+
},
|
|
61
|
+
"reason": {
|
|
62
|
+
"type": "string",
|
|
63
|
+
"description": "One-line tradeoff hint - why this choice would or would not be the right pick."
|
|
64
|
+
}
|
|
55
65
|
}
|
|
56
66
|
}
|
|
57
67
|
},
|
|
@@ -67,8 +77,8 @@
|
|
|
67
77
|
"description": "Filled in AFTER the orchestrator runs AskUserQuestion. Keys are question IDs (q1, q2, ...) and values are the selected label or free-text response. Empty during the agent's own emission.",
|
|
68
78
|
"additionalProperties": { "type": "string" }
|
|
69
79
|
},
|
|
70
|
-
"tokens_in":
|
|
71
|
-
"tokens_out":
|
|
80
|
+
"tokens_in": { "type": "integer", "minimum": 0 },
|
|
81
|
+
"tokens_out": { "type": "integer", "minimum": 0 },
|
|
72
82
|
"duration_ms": { "type": "integer", "minimum": 0 }
|
|
73
83
|
}
|
|
74
84
|
}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/mmerterden/multi-agent-pipeline/pipeline/schemas/design-check-config.schema.json",
|
|
4
|
+
"title": "Design Check Configuration",
|
|
5
|
+
"description": "Optional per-project config for /multi-agent:design-check. Stored at ~/.claude/projects/{slug}/design-check-config.json. Never committed. Everything here is optional: design_mock_detect auto-detects mock support and design_scenario_inventory auto-enumerates state drivers at run time; this file only overrides or augments that detection (extra mock switch keys, extra launch args / targets no source signal reveals, explicit variant->Figma-node mappings, status-bar crop, coverage floor, Confluence toggle). Keeps the engine generic - project specifics live here, never in shipped code.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["schemaVersion"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"schemaVersion": { "type": "string", "const": "1.0.0" },
|
|
11
|
+
"platform": {
|
|
12
|
+
"type": "string",
|
|
13
|
+
"enum": ["ios", "android"],
|
|
14
|
+
"description": "Override auto platform detection."
|
|
15
|
+
},
|
|
16
|
+
"mock": {
|
|
17
|
+
"type": "object",
|
|
18
|
+
"additionalProperties": false,
|
|
19
|
+
"description": "Mock-mode overrides. Omit to rely purely on auto-detection.",
|
|
20
|
+
"properties": {
|
|
21
|
+
"keys": {
|
|
22
|
+
"type": "array",
|
|
23
|
+
"items": { "type": "string" },
|
|
24
|
+
"description": "Extra UserDefaults / launch-arg switch keys to look for (passed as extra_keys to design_mock_detect)."
|
|
25
|
+
},
|
|
26
|
+
"launchArg": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"description": "Explicit iOS launch argument to force mock mode, e.g. '-debugMockMode YES'. Overrides the detected one."
|
|
29
|
+
},
|
|
30
|
+
"intentExtra": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"description": "Explicit Android intent extra, e.g. '--ez mockEnabled true'."
|
|
33
|
+
},
|
|
34
|
+
"buildConfig": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"description": "Build configuration that compiles the mocks (default 'Debug')."
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"inventory": {
|
|
41
|
+
"type": "object",
|
|
42
|
+
"additionalProperties": false,
|
|
43
|
+
"description": "Augments design_scenario_inventory, which decides the audit's target set. Only for states no source signal can reveal - everything detectable is detected.",
|
|
44
|
+
"properties": {
|
|
45
|
+
"extraLaunchArgs": {
|
|
46
|
+
"type": "array",
|
|
47
|
+
"items": { "type": "string" },
|
|
48
|
+
"description": "Launch args (iOS) / boolean intent-extra keys (Android) that drive a distinct state but appear in no scanned literal."
|
|
49
|
+
},
|
|
50
|
+
"extraTargets": {
|
|
51
|
+
"type": "array",
|
|
52
|
+
"description": "Fully hand-declared targets, for states reachable only by a documented manual step.",
|
|
53
|
+
"items": {
|
|
54
|
+
"type": "object",
|
|
55
|
+
"additionalProperties": false,
|
|
56
|
+
"required": ["id"],
|
|
57
|
+
"properties": {
|
|
58
|
+
"id": {
|
|
59
|
+
"type": "string",
|
|
60
|
+
"description": "Stable target id, e.g. 'config:seatmap-3d'."
|
|
61
|
+
},
|
|
62
|
+
"kind": { "type": "string", "description": "Target kind label (default 'config')." },
|
|
63
|
+
"label": { "type": "string" },
|
|
64
|
+
"screen": {
|
|
65
|
+
"type": "string",
|
|
66
|
+
"description": "Screen this target belongs to (groups the coverage report)."
|
|
67
|
+
},
|
|
68
|
+
"driver": {
|
|
69
|
+
"type": "object",
|
|
70
|
+
"additionalProperties": true,
|
|
71
|
+
"description": "How to reach it: { type: 'manual', note } or any driver shape the runner understands."
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"ignoreTargets": {
|
|
77
|
+
"type": "array",
|
|
78
|
+
"items": { "type": "string" },
|
|
79
|
+
"description": "Target ids to drop from the inventory entirely (dead drivers, states retired in code but still referenced). Unlike a skip, these never enter the coverage gate - use sparingly and prefer a skip with a reason."
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"coverage": {
|
|
84
|
+
"type": "object",
|
|
85
|
+
"additionalProperties": false,
|
|
86
|
+
"description": "Coverage gate tuning. The gate itself is not optional: a target is audited, or skipped with an explicit reason.",
|
|
87
|
+
"properties": {
|
|
88
|
+
"floor": {
|
|
89
|
+
"type": "number",
|
|
90
|
+
"minimum": 0,
|
|
91
|
+
"maximum": 1,
|
|
92
|
+
"description": "Additional hard floor on audited/target ratio (e.g. 0.9). Below it the gate fails even when every skip carries a reason."
|
|
93
|
+
},
|
|
94
|
+
"confirmAbove": {
|
|
95
|
+
"type": "integer",
|
|
96
|
+
"default": 25,
|
|
97
|
+
"description": "Relaunch count (inventory.relaunchCount for the scoped set, NOT the target count) above which Phase 0 asks for confirmation. Relaunches are the run's real cost: one relaunch serves every in-app target on that screen. Whole-module remains the intended default - this threshold estimates cost, it does not invite shrinking the audit."
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
"figma": {
|
|
102
|
+
"type": "object",
|
|
103
|
+
"additionalProperties": false,
|
|
104
|
+
"description": "Figma frame + variant mapping overrides.",
|
|
105
|
+
"properties": {
|
|
106
|
+
"url": {
|
|
107
|
+
"type": "string",
|
|
108
|
+
"description": "Default Figma MCP URL for this module's frame/page."
|
|
109
|
+
},
|
|
110
|
+
"frameSize": {
|
|
111
|
+
"type": "object",
|
|
112
|
+
"additionalProperties": false,
|
|
113
|
+
"properties": { "w": { "type": "number" }, "h": { "type": "number" } },
|
|
114
|
+
"description": "Figma frame size the spec coordinates are in (usually auto-read)."
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
"variants": {
|
|
119
|
+
"type": "array",
|
|
120
|
+
"description": "Explicit mock-variant -> Figma-node mappings. When present, the picker skips name-similarity guessing for these.",
|
|
121
|
+
"items": {
|
|
122
|
+
"type": "object",
|
|
123
|
+
"additionalProperties": false,
|
|
124
|
+
"required": ["id", "figmaNodeId"],
|
|
125
|
+
"properties": {
|
|
126
|
+
"id": {
|
|
127
|
+
"type": "string",
|
|
128
|
+
"description": "Mock variant id (matches a variantsHint / fixture name)."
|
|
129
|
+
},
|
|
130
|
+
"label": { "type": "string" },
|
|
131
|
+
"figmaNodeId": {
|
|
132
|
+
"type": "string",
|
|
133
|
+
"description": "Figma node id for this variant's frame."
|
|
134
|
+
},
|
|
135
|
+
"activation": {
|
|
136
|
+
"type": "object",
|
|
137
|
+
"additionalProperties": true,
|
|
138
|
+
"description": "How to put the app into this variant (launch arg / UserDefaults values / navigation path)."
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
"capture": {
|
|
144
|
+
"type": "object",
|
|
145
|
+
"additionalProperties": false,
|
|
146
|
+
"description": "Capture / comparison tuning.",
|
|
147
|
+
"properties": {
|
|
148
|
+
"cropTopLive": {
|
|
149
|
+
"type": "number",
|
|
150
|
+
"description": "Pixels to crop from the top of the live capture (status bar)."
|
|
151
|
+
},
|
|
152
|
+
"tolerancePx": { "type": "number", "default": 2 },
|
|
153
|
+
"colorTolerance": { "type": "number", "default": 3 },
|
|
154
|
+
"maxDiffPct": { "type": "number", "default": 1.0 }
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
"report": {
|
|
158
|
+
"type": "object",
|
|
159
|
+
"additionalProperties": false,
|
|
160
|
+
"description": "Report output + export.",
|
|
161
|
+
"properties": {
|
|
162
|
+
"outputRoot": {
|
|
163
|
+
"type": "string",
|
|
164
|
+
"description": "Report root dir (default ~/DesignChecks)."
|
|
165
|
+
},
|
|
166
|
+
"formats": {
|
|
167
|
+
"type": "array",
|
|
168
|
+
"items": { "type": "string", "enum": ["html", "pdf", "confluence"] },
|
|
169
|
+
"default": ["html", "pdf"]
|
|
170
|
+
},
|
|
171
|
+
"confluence": {
|
|
172
|
+
"type": "object",
|
|
173
|
+
"additionalProperties": false,
|
|
174
|
+
"properties": {
|
|
175
|
+
"enabled": { "type": "boolean", "default": false },
|
|
176
|
+
"space": { "type": "string" },
|
|
177
|
+
"parentId": { "type": "string" }
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|