@mmerterden/multi-agent-pipeline 12.6.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 +83 -0
- package/README.md +18 -18
- 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 +28 -28
- package/docs/performance.md +16 -16
- package/docs/recovery-guide.md +39 -39
- package/index.js +4 -4
- package/install/_common.mjs +5 -11
- package/install/_copilot-instructions.mjs +2 -2
- package/install/_dev-only-files.mjs +1 -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 +13 -10
- package/pipeline/commands/multi-agent/SKILL.md +1 -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 +1 -1
- 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 +3 -3
- 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 +16 -8
- package/pipeline/commands/multi-agent/resume/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/review/SKILL.md +1 -1
- 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 +5 -5
- package/pipeline/commands/multi-agent/test/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/uninstall/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/update/SKILL.md +3 -3
- 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 +1 -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 +1 -1
- package/pipeline/multi-agent-refs/features/model-fallback.md +2 -2
- package/pipeline/multi-agent-refs/phases/phase-4-review.md +1 -1
- package/pipeline/preferences-template.json +5 -11
- package/pipeline/schemas/agent-state.schema.json +39 -9
- 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 +32 -11
- 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/plan-todos.schema.json +6 -3
- package/pipeline/schemas/planning-output.schema.json +5 -1
- package/pipeline/schemas/prefs.schema.json +91 -229
- 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/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 +20 -7
- package/pipeline/scripts/cost-budget-check.mjs +2 -1
- 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 +3 -3
- 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 +103 -36
- package/pipeline/scripts/lint-mcp-refs.mjs +13 -2
- 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/migrate-prefs.mjs +33 -16
- package/pipeline/scripts/phase-tracker.sh +3 -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-context-budget.sh +72 -0
- 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-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 +126 -34
- package/pipeline/scripts/uninstall.mjs +74 -30
- 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/.skills-index.json +91 -91
- package/pipeline/skills/shared/README.md +57 -57
- package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +1 -1
- 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 +1 -1
- 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 +1 -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 +16 -8
- package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +1 -1
- 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 +1 -1
- package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +1 -1
- 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 +57 -57
- package/pipeline/scripts/smoke-plugin-validate.sh +0 -64
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Component Generation Guide (generic)
|
|
2
|
+
|
|
3
|
+
> Lifted out of `core/multi-agent/SKILL.md`, where it was loaded on every
|
|
4
|
+
> run of every mode. It applies only to a task that generates a UI
|
|
5
|
+
> component from a design, so it now loads when that path is taken.
|
|
6
|
+
> Component dispatch itself is in `component-dispatch.md`.
|
|
7
|
+
|
|
8
|
+
When the task involves creating a SwiftUI component (any project, not just figma), follow this architecture:
|
|
9
|
+
|
|
10
|
+
### Component Architecture: Configuration / View / Modifiers
|
|
11
|
+
|
|
12
|
+
Every component produces up to 5 files:
|
|
13
|
+
|
|
14
|
+
| File | When | Content |
|
|
15
|
+
|------|------|---------|
|
|
16
|
+
| `{Name}Configuration.swift` | Complex (>3 props) | Pure value type, all declarative properties |
|
|
17
|
+
| `{Name}View.swift` | Always | SwiftUI view, renders Configuration |
|
|
18
|
+
| `{Name}+Modifiers.swift` | Complex | Fluent modifier API chain |
|
|
19
|
+
| `{Name}Preview.swift` | Always | All meaningful variant previews |
|
|
20
|
+
| `{Name}Tests.swift` | Always | ViewInspector + Unit tests |
|
|
21
|
+
|
|
22
|
+
### Configuration Purity Rule
|
|
23
|
+
|
|
24
|
+
Configuration structs hold ONLY declarative, value-type properties:
|
|
25
|
+
|
|
26
|
+
```swift
|
|
27
|
+
// ✅ CORRECT - pure value type
|
|
28
|
+
struct ButtonConfiguration {
|
|
29
|
+
var title: String = ""
|
|
30
|
+
var style: ButtonStyle = .primary
|
|
31
|
+
var isEnabled: Bool = true
|
|
32
|
+
var icon: Image? = nil
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// ❌ WRONG - these do NOT belong in Configuration
|
|
36
|
+
// Closures → View property
|
|
37
|
+
// @Binding → View property
|
|
38
|
+
// @State → View property
|
|
39
|
+
// AnyView / @ViewBuilder → View generic parameter
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### View Implementation
|
|
43
|
+
|
|
44
|
+
```swift
|
|
45
|
+
struct ButtonView: View {
|
|
46
|
+
let configuration: ButtonConfiguration
|
|
47
|
+
private var action: (() -> Void)? // closure lives in View, not Config
|
|
48
|
+
|
|
49
|
+
var body: some View {
|
|
50
|
+
Button(action: { action?() }) {
|
|
51
|
+
HStack(spacing: .Spacing.spacing8) {
|
|
52
|
+
if let icon = configuration.icon { icon }
|
|
53
|
+
Text(configuration.title)
|
|
54
|
+
.typographyStyle(.body1)
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
.disabled(!configuration.isEnabled)
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Modifier Pattern
|
|
63
|
+
|
|
64
|
+
```swift
|
|
65
|
+
extension ButtonView {
|
|
66
|
+
func title(_ value: String) -> ButtonView {
|
|
67
|
+
var config = configuration
|
|
68
|
+
config.title = value
|
|
69
|
+
return ButtonView(configuration: config)
|
|
70
|
+
}
|
|
71
|
+
func style(_ value: ButtonStyle) -> ButtonView {
|
|
72
|
+
var config = configuration
|
|
73
|
+
config.style = value
|
|
74
|
+
return ButtonView(configuration: config)
|
|
75
|
+
}
|
|
76
|
+
func onTap(_ action: @escaping () -> Void) -> ButtonView {
|
|
77
|
+
var view = self
|
|
78
|
+
view.action = action
|
|
79
|
+
return view
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Simple vs Complex Decision
|
|
85
|
+
|
|
86
|
+
| Criteria | Simple | Complex |
|
|
87
|
+
|----------|--------|---------|
|
|
88
|
+
| Properties | ≤3 | >3 |
|
|
89
|
+
| Configuration file | No - props in View directly | Yes - separate struct |
|
|
90
|
+
| +Modifiers file | No | Yes |
|
|
91
|
+
| View file | All-in-one | Renders Configuration |
|
|
92
|
+
|
|
93
|
+
### 3-Layer Test Strategy
|
|
94
|
+
|
|
95
|
+
| Layer | Tool | What It Validates |
|
|
96
|
+
|-------|------|-------------------|
|
|
97
|
+
| Structural | ViewInspector | Hierarchy, subview existence, applied modifiers |
|
|
98
|
+
| Visual | Snapshot Tests | Pixel-correct render: light/dark, RTL/LTR |
|
|
99
|
+
| Behavioral | Unit Tests | State changes, closures, configuration mutations |
|
|
100
|
+
|
|
101
|
+
### Component Checklist (Before Commit)
|
|
102
|
+
|
|
103
|
+
1. No magic numbers - all values are design tokens or named constants
|
|
104
|
+
2. Configuration purity - no side-effects or view logic in Config
|
|
105
|
+
3. Modifier correctness - fluent API valid, paired modifiers live in the View
|
|
106
|
+
4. Accessibility - accessibility label/trait on every interactive element
|
|
107
|
+
5. Preview - all meaningful variants in the preview
|
|
108
|
+
6. Test - structural + unit tests written
|
|
109
|
+
7. Dark mode - renders correctly in both color schemes
|
|
110
|
+
8. Dynamic Type - text scales at large sizes without breaking the layout
|
|
111
|
+
|
|
112
|
+
### When a Figma URL Is Provided
|
|
113
|
+
|
|
114
|
+
If the user provides a Figma URL:
|
|
115
|
+
1. Fetch the design data with Figma MCP tools (get_design_context, get_screenshot)
|
|
116
|
+
2. Map the design's colors, spacing, and typography onto the project's token system
|
|
117
|
+
3. Apply the Configuration/View/Modifiers pattern above
|
|
118
|
+
4. Use the screenshot as a reference, do not copy it - adapt to the project's existing components
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
@@ -50,7 +50,7 @@ Both skills are wired to 4 consumers: `/multi-agent:test "store-ready"` (primary
|
|
|
50
50
|
|
|
51
51
|
### 1.3 Figma-skill routing from multi-agent (superseded)
|
|
52
52
|
|
|
53
|
-
Superseded by
|
|
53
|
+
Superseded by section 1.1: Claude Code resolves component dispatch to the marketplace plugin (dual-name `create-component`/`create-ui-component`; full contract in `$HOME/.claude/multi-agent-refs/component-dispatch.md`); Copilot CLI uses its local `~/.copilot/skills/figma-*` copies. No shared filesystem-path routing table or figma-skill frontmatter/inventory parity remains under enforcement.
|
|
54
54
|
|
|
55
55
|
---
|
|
56
56
|
|
|
@@ -9,7 +9,7 @@ without ever editing persona files at runtime.
|
|
|
9
9
|
|
|
10
10
|
> **Fable 5 available again (2026-07).** `claude-fable-5` is the top tier once
|
|
11
11
|
> more. Architect (`ios/android/backend-architect`), Reviewer-1 (`code-reviewer`),
|
|
12
|
-
> and triage personas declare `preferredModel: fable`
|
|
12
|
+
> and triage personas declare `preferredModel: fable` - the deepest-reasoning
|
|
13
13
|
> roles. **If Fable 5 is unavailable, the first fallback is opus (`claude-opus-4-8`).**
|
|
14
14
|
> Security and other `preferredModel: opus` personas keep opus as their top tier.
|
|
15
15
|
> The `premiumTierUntil` date gate stays in the contract as a generic mechanism
|
|
@@ -98,6 +98,6 @@ per-phase `model` field already carries the override).
|
|
|
98
98
|
- No edits to `pipeline/agents/*.md` at runtime; frontmatter is install-time
|
|
99
99
|
configuration only.
|
|
100
100
|
- Copilot CLI reviewer set is out of scope: Copilot CLI pins its own three
|
|
101
|
-
reviewer models (GPT-5.4 + Opus + Sonnet
|
|
101
|
+
reviewer models (GPT-5.4 + Opus + Sonnet - Fable 5 is not offered there) and
|
|
102
102
|
does not use this persona ladder. Only Claude Code dispatches Reviewer-1 on
|
|
103
103
|
Fable.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
### Phase 4: Review (deterministic gates + parallel + triage)
|
|
2
2
|
|
|
3
|
-
> **TLDR** - Three-stage review. Stage 1: deterministic gates (build + lint + test + secret scan) that MUST pass. Stage 2: AI models in parallel - reviewer set is **CLI-aware**: Claude Code dispatches 2 reviewers (Fable + Sonnet); Copilot CLI dispatches 3 reviewers (GPT-5.4 + Opus + Sonnet
|
|
3
|
+
> **TLDR** - Three-stage review. Stage 1: deterministic gates (build + lint + test + secret scan) that MUST pass. Stage 2: AI models in parallel - reviewer set is **CLI-aware**: Claude Code dispatches 2 reviewers (Fable + Sonnet); Copilot CLI dispatches 3 reviewers (GPT-5.4 + Opus + Sonnet - Fable 5 is not offered on Copilot CLI). Stage 3: Fable triage (Opus on Copilot CLI) - evaluates raw findings, filters false-positives/out-of-scope, keeps only actionable items. Only triage-accepted blocking items loop back to Phase 3.
|
|
4
4
|
|
|
5
5
|
<!-- progress-contract: applied -->
|
|
6
6
|
Progress emission per `$HOME/.claude/multi-agent-refs/progress-contract.md` - lines for each gate, each reviewer dispatch + finish, triage start, triage verdict, fix dispatch.
|
|
@@ -45,12 +45,7 @@
|
|
|
45
45
|
"autoDiff": false,
|
|
46
46
|
"manualNote": false
|
|
47
47
|
},
|
|
48
|
-
"wikiScope": [
|
|
49
|
-
"main",
|
|
50
|
-
"ios",
|
|
51
|
-
"screenshots",
|
|
52
|
-
"index"
|
|
53
|
-
],
|
|
48
|
+
"wikiScope": ["main", "ios", "screenshots", "index"],
|
|
54
49
|
"autopilotReportTimeoutSeconds": 1800,
|
|
55
50
|
"promptLanguage": "en",
|
|
56
51
|
"outputLanguage": "en",
|
|
@@ -162,17 +157,16 @@
|
|
|
162
157
|
}
|
|
163
158
|
},
|
|
164
159
|
"_derivedSkillSourcesTemplate": {
|
|
165
|
-
"_comment": "Optional. Populate global.derivedSkillSources[] to let /multi-agent:refactor check whether skills you derived from an upstream marketplace plugin have been updated. Kept in your LOCAL prefs only (never synced), so it may reference private sources. Copy an entry like the one below.",
|
|
160
|
+
"_comment": "Optional. Populate global.derivedSkillSources[] to let /multi-agent:refactor check whether skills you derived from an upstream marketplace plugin have been updated. Kept in your LOCAL prefs only (never synced), so it may reference private sources. Copy an entry like the one below. Set upstreamLocalClone when you have a working copy: the installed plugin cache is only as fresh as your last marketplace update, and a stale cache makes the drift check answer 'up to date' when it is four releases behind.",
|
|
166
161
|
"_example": {
|
|
167
162
|
"label": "Component toolkit skills",
|
|
168
163
|
"localPath": "plugins/<my-plugin>/skills/workflow",
|
|
169
164
|
"upstreamMarketplace": "<installed-marketplace-name>",
|
|
170
165
|
"upstreamPlugin": "<upstream-plugin-name>",
|
|
171
|
-
"upstreamSkills": [
|
|
172
|
-
"<skill-a>",
|
|
173
|
-
"<skill-b>"
|
|
174
|
-
],
|
|
166
|
+
"upstreamSkills": ["<skill-a>", "<skill-b>"],
|
|
175
167
|
"derivedFromVersion": "0.0.0",
|
|
168
|
+
"upstreamVersionSource": "marketplace.json",
|
|
169
|
+
"upstreamLocalClone": "$HOME/<upstream-repo-working-copy>",
|
|
176
170
|
"upstreamRepoUrl": "https://github.com/<org>/<repo>"
|
|
177
171
|
}
|
|
178
172
|
},
|
|
@@ -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
|
}
|
|
@@ -154,7 +162,10 @@
|
|
|
154
162
|
"items": { "type": "object", "additionalProperties": true },
|
|
155
163
|
"description": "{ id, kind, label, screen, driver, evidence } per state driver (launch-arg / scenario-case / code-scenario / fixture / deep-link)."
|
|
156
164
|
},
|
|
157
|
-
"groups": {
|
|
165
|
+
"groups": {
|
|
166
|
+
"type": "array",
|
|
167
|
+
"items": { "type": "object", "additionalProperties": true }
|
|
168
|
+
},
|
|
158
169
|
"byKind": { "type": "object", "additionalProperties": true },
|
|
159
170
|
"truncated": { "type": "boolean" }
|
|
160
171
|
}
|
|
@@ -164,9 +175,15 @@
|
|
|
164
175
|
"additionalProperties": true,
|
|
165
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.",
|
|
166
177
|
"properties": {
|
|
167
|
-
"argument": {
|
|
178
|
+
"argument": {
|
|
179
|
+
"type": ["string", "null"],
|
|
180
|
+
"description": "Raw $ARGUMENTS as given (empty = whole module, '--resume' = remainder of the last run)."
|
|
181
|
+
},
|
|
168
182
|
"targetIds": { "type": "array", "items": { "type": "string" } },
|
|
169
|
-
"resumedFrom": {
|
|
183
|
+
"resumedFrom": {
|
|
184
|
+
"type": ["string", "null"],
|
|
185
|
+
"description": "Report dir of the run this scope resumes, when --resume was used."
|
|
186
|
+
}
|
|
170
187
|
}
|
|
171
188
|
},
|
|
172
189
|
"figmaUrl": { "type": ["string", "null"] },
|
|
@@ -208,7 +225,10 @@
|
|
|
208
225
|
"unaccountedIds": { "type": "array", "items": { "type": "string" } }
|
|
209
226
|
}
|
|
210
227
|
},
|
|
211
|
-
"reportDir": {
|
|
228
|
+
"reportDir": {
|
|
229
|
+
"type": ["string", "null"],
|
|
230
|
+
"description": "Output dir under ~/DesignChecks."
|
|
231
|
+
}
|
|
212
232
|
}
|
|
213
233
|
},
|
|
214
234
|
"identity": {
|
|
@@ -218,7 +238,10 @@
|
|
|
218
238
|
"properties": {
|
|
219
239
|
"name": { "type": "string" },
|
|
220
240
|
"email": { "type": "string", "format": "email" },
|
|
221
|
-
"username": {
|
|
241
|
+
"username": {
|
|
242
|
+
"type": "string",
|
|
243
|
+
"description": "SCM username (GitHub/Bitbucket). Used to filter out PR author from reviewer list."
|
|
244
|
+
}
|
|
222
245
|
}
|
|
223
246
|
},
|
|
224
247
|
"phases": {
|
|
@@ -229,7 +252,10 @@
|
|
|
229
252
|
"type": "object",
|
|
230
253
|
"additionalProperties": false,
|
|
231
254
|
"properties": {
|
|
232
|
-
"status": {
|
|
255
|
+
"status": {
|
|
256
|
+
"type": "string",
|
|
257
|
+
"enum": ["pending", "in_progress", "done", "skipped", "failed"]
|
|
258
|
+
},
|
|
233
259
|
"startedAt": { "type": "string", "format": "date-time" },
|
|
234
260
|
"finishedAt": { "type": "string", "format": "date-time" },
|
|
235
261
|
"model": { "type": "string" },
|
|
@@ -312,7 +338,11 @@
|
|
|
312
338
|
"properties": {
|
|
313
339
|
"number": { "type": "integer", "minimum": 1 },
|
|
314
340
|
"url": { "type": "string", "format": "uri" },
|
|
315
|
-
"version": {
|
|
341
|
+
"version": {
|
|
342
|
+
"type": "integer",
|
|
343
|
+
"minimum": 0,
|
|
344
|
+
"description": "Bitbucket PR version - must increment by 1 per PUT."
|
|
345
|
+
},
|
|
316
346
|
"draft": { "type": "boolean" },
|
|
317
347
|
"reviewers": {
|
|
318
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
|
}
|