qfai 1.7.8 → 1.7.13

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.
Files changed (150) hide show
  1. package/README.md +34 -70
  2. package/assets/init/.qfai/README.md +11 -16
  3. package/assets/init/.qfai/assistant/agents/acceptance-test-engineer.md +51 -0
  4. package/assets/init/.qfai/assistant/agents/architecture-reviewer.md +57 -0
  5. package/assets/init/.qfai/assistant/agents/backend-engineer.md +40 -31
  6. package/assets/init/.qfai/assistant/agents/completion-reviewer.md +48 -0
  7. package/assets/init/.qfai/assistant/agents/delivery-planner.md +52 -0
  8. package/assets/init/.qfai/assistant/agents/devops-ci-engineer.md +31 -28
  9. package/assets/init/.qfai/assistant/agents/discovery-analyst.md +50 -0
  10. package/assets/init/.qfai/assistant/agents/doc-steward.md +30 -20
  11. package/assets/init/.qfai/assistant/agents/frontend-engineer.md +40 -31
  12. package/assets/init/.qfai/assistant/agents/implementation-reviewer.md +58 -0
  13. package/assets/init/.qfai/assistant/agents/orchestrator.md +19 -2
  14. package/assets/init/.qfai/assistant/agents/product-experience-architect.md +59 -0
  15. package/assets/init/.qfai/assistant/agents/product-surface-reviewer.md +60 -0
  16. package/assets/init/.qfai/assistant/agents/qa-gatekeeper.md +53 -48
  17. package/assets/init/.qfai/assistant/agents/qa-strategist.md +49 -0
  18. package/assets/init/.qfai/assistant/agents/requirements-analyst.md +32 -29
  19. package/assets/init/.qfai/assistant/agents/requirements-reviewer.md +48 -0
  20. package/assets/init/.qfai/assistant/agents/solution-architect.md +59 -0
  21. package/assets/init/.qfai/assistant/agents/test-design-analyst.md +64 -0
  22. package/assets/init/.qfai/assistant/instructions/agent-selection.md +64 -50
  23. package/assets/init/.qfai/assistant/instructions/communication.md +17 -0
  24. package/assets/init/.qfai/assistant/instructions/constitution.md +36 -1
  25. package/assets/init/.qfai/assistant/instructions/drift-protocol.md +1 -1
  26. package/assets/init/.qfai/assistant/instructions/requirements-decomposition.md +20 -13
  27. package/assets/init/.qfai/assistant/instructions/workflow.md +2 -1
  28. package/assets/init/.qfai/assistant/skills/qfai-atdd/SKILL.md +32 -31
  29. package/assets/init/.qfai/assistant/skills/qfai-atdd/references/test-case-depth-checklist.md +80 -0
  30. package/assets/init/.qfai/assistant/skills/qfai-configure/SKILL.md +21 -15
  31. package/assets/init/.qfai/assistant/skills/qfai-discussion/SKILL.md +95 -61
  32. package/assets/init/.qfai/assistant/skills/qfai-discussion/references/rcp_footer.md +17 -85
  33. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/01_Context.md +9 -1
  34. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/02_Inception-Deck.md +1 -1
  35. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/03_Story-Workshop.md +17 -60
  36. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/04_Sources.md +69 -2
  37. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/06_REQ.md +1 -1
  38. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/07_NFR.md +1 -1
  39. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/09_Constraints.md +1 -1
  40. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/10_Policy.md +1 -1
  41. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/11_OQ-Register.md +1 -1
  42. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/12_OQ-Resolution-Log.md +1 -1
  43. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/13_Deferred.md +1 -1
  44. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/14_Review-Request.md +25 -16
  45. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/99_delta.md +1 -1
  46. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/prototyping.yaml +9 -0
  47. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/review/Rxx_reviewer.md +8 -4
  48. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/review/review_request.md +11 -7
  49. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/review/summary.json +6 -44
  50. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/00_index.md +29 -14
  51. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/10_implementation_strategy.md +20 -0
  52. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/11_design_taste_interview.md +45 -0
  53. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/20_design_eval_invariant.md +68 -0
  54. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/21_design_eval_trend_derived.md +68 -0
  55. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/22_design_eval_product_specific.md +68 -0
  56. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/23_design_eval_aggregate.md +41 -0
  57. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/24_design_eval_dynamic_overrides.md +28 -0
  58. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/30_option_comparison.md +56 -0
  59. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/31_selected_anchor_screen.md +42 -0
  60. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/40_screen_contracts.md +44 -0
  61. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/50_review_input_bundle.md +36 -0
  62. package/assets/init/.qfai/assistant/skills/qfai-implement/SKILL.md +65 -67
  63. package/assets/init/.qfai/assistant/skills/qfai-prototyping/SKILL.md +188 -267
  64. package/assets/init/.qfai/assistant/skills/qfai-sdd/SKILL.md +91 -57
  65. package/assets/init/.qfai/assistant/skills/qfai-sdd/references/rcp_footer.md +21 -80
  66. package/assets/init/.qfai/assistant/skills/qfai-sdd/templates/evidence/import-lite.md +1 -1
  67. package/assets/init/.qfai/assistant/skills/qfai-sdd/templates/specs/_policies/11_Slice-Policy.md +50 -0
  68. package/assets/init/.qfai/assistant/skills/qfai-sdd/templates/specs/spec/06_Test-Cases.md +23 -3
  69. package/assets/init/.qfai/assistant/skills/qfai-verify/SKILL.md +25 -17
  70. package/assets/init/.qfai/assistant/steering/agent-catalog.yml +194 -0
  71. package/assets/init/.qfai/assistant/steering/agent-routing.yml +176 -0
  72. package/assets/init/.qfai/assistant/steering/cli-ux-guidelines.md +49 -0
  73. package/assets/init/.qfai/assistant/steering/manifest.md +44 -19
  74. package/assets/init/.qfai/assistant/steering/product.md +53 -11
  75. package/assets/init/.qfai/assistant/steering/research-first-protocol.md +58 -0
  76. package/assets/init/.qfai/assistant/steering/review-gate.rules.yml +17 -66
  77. package/assets/init/.qfai/assistant/steering/review-profiles.yml +30 -0
  78. package/assets/init/.qfai/assistant/steering/structure.md +30 -16
  79. package/assets/init/.qfai/assistant/steering/tech.md +37 -21
  80. package/assets/init/.qfai/assistant/steering/ui-definition-protocol.md +54 -0
  81. package/assets/init/.qfai/contracts/README.md +10 -4
  82. package/assets/init/.qfai/contracts/design/README.md +32 -0
  83. package/assets/init/.qfai/contracts/ui/README.md +5 -3
  84. package/assets/init/.qfai/discussion/README.md +52 -5
  85. package/assets/init/.qfai/evidence/README.md +143 -116
  86. package/assets/init/.qfai/report/README.md +1 -1
  87. package/assets/init/.qfai/review/README.md +24 -9
  88. package/assets/init/.qfai/specs/README.md +5 -2
  89. package/assets/init/root/qfai.config.yaml +13 -0
  90. package/assets/uix-rev/comparison-review.md +24 -7
  91. package/assets/uix-rev/contracts-review.md +17 -10
  92. package/assets/uix-rev/scoring-review.md +42 -6
  93. package/assets/uix-rev/strategy-review.md +13 -9
  94. package/dist/cli/index.cjs +15646 -11383
  95. package/dist/cli/index.cjs.map +1 -1
  96. package/dist/cli/index.mjs +10846 -6582
  97. package/dist/cli/index.mjs.map +1 -1
  98. package/dist/index.cjs +10885 -6287
  99. package/dist/index.cjs.map +1 -1
  100. package/dist/index.d.cts +766 -198
  101. package/dist/index.d.ts +766 -198
  102. package/dist/index.mjs +10858 -6263
  103. package/dist/index.mjs.map +1 -1
  104. package/package.json +11 -3
  105. package/assets/init/.qfai/assistant/agents/architect-reviewer.md +0 -65
  106. package/assets/init/.qfai/assistant/agents/architect.md +0 -49
  107. package/assets/init/.qfai/assistant/agents/atdd-api-implementer.md +0 -49
  108. package/assets/init/.qfai/assistant/agents/atdd-e2e-implementer.md +0 -48
  109. package/assets/init/.qfai/assistant/agents/atdd-integration-implementer.md +0 -48
  110. package/assets/init/.qfai/assistant/agents/backend-reviewer.md +0 -66
  111. package/assets/init/.qfai/assistant/agents/code-reviewer.md +0 -67
  112. package/assets/init/.qfai/assistant/agents/contract-designer.md +0 -49
  113. package/assets/init/.qfai/assistant/agents/coverage-planner.md +0 -49
  114. package/assets/init/.qfai/assistant/agents/design-owner.md +0 -48
  115. package/assets/init/.qfai/assistant/agents/design-review-lead.md +0 -68
  116. package/assets/init/.qfai/assistant/agents/facilitator.md +0 -48
  117. package/assets/init/.qfai/assistant/agents/frontend-reviewer.md +0 -66
  118. package/assets/init/.qfai/assistant/agents/interviewer.md +0 -45
  119. package/assets/init/.qfai/assistant/agents/option-explorer.md +0 -51
  120. package/assets/init/.qfai/assistant/agents/option-reviewer.md +0 -66
  121. package/assets/init/.qfai/assistant/agents/oq-harvester.md +0 -50
  122. package/assets/init/.qfai/assistant/agents/oq-reviewer.md +0 -70
  123. package/assets/init/.qfai/assistant/agents/planner.md +0 -48
  124. package/assets/init/.qfai/assistant/agents/project-lead.md +0 -47
  125. package/assets/init/.qfai/assistant/agents/prototyping-coverage-auditor.md +0 -46
  126. package/assets/init/.qfai/assistant/agents/qa-engineer.md +0 -47
  127. package/assets/init/.qfai/assistant/agents/qa-lead.md +0 -44
  128. package/assets/init/.qfai/assistant/agents/qa-reviewer.md +0 -66
  129. package/assets/init/.qfai/assistant/agents/researcher.md +0 -47
  130. package/assets/init/.qfai/assistant/agents/reviewer.md +0 -62
  131. package/assets/init/.qfai/assistant/agents/runtime-gatekeeper.md +0 -46
  132. package/assets/init/.qfai/assistant/agents/test-case-owner.md +0 -53
  133. package/assets/init/.qfai/assistant/agents/test-engineer.md +0 -50
  134. package/assets/init/.qfai/assistant/agents/test-volume-estimator.md +0 -48
  135. package/assets/init/.qfai/assistant/agents/ui-ux-reviewer.md +0 -71
  136. package/assets/init/.qfai/assistant/agents/unit-test-scope-enforcer.md +0 -46
  137. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/10_strategy.md +0 -28
  138. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/20_eval_axis_usability.md +0 -31
  139. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/21_eval_axis_consistency.md +0 -31
  140. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/22_eval_axis_accessibility.md +0 -31
  141. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/23_eval_axis_delight.md +0 -56
  142. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/30_comparison.md +0 -45
  143. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/31_anchor.md +0 -27
  144. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/40_contracts.md +0 -51
  145. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/50_review_bundle.md +0 -31
  146. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/60_critique_loop.md +0 -23
  147. package/assets/init/.qfai/assistant/steering/review-roster.yml +0 -128
  148. package/assets/init/.qfai/evidence/.gitignore +0 -3
  149. package/assets/init/.qfai/report/.gitignore +0 -3
  150. package/assets/init/.qfai/review/.gitignore +0 -5
@@ -2,90 +2,172 @@
2
2
 
3
3
  ## Purpose
4
4
 
5
- Evidence files record **what was actually executed** for each custom prompt run:
5
+ Evidence files record what was actually executed, observed, skipped, or deferred.
6
6
 
7
- - commands executed
8
- - relevant logs (summary)
9
- - gaps / exceptions
10
- - reviewer approval
7
+ ## Prototyping stage required artifacts
11
8
 
12
- ## Version control policy
9
+ `/qfai-prototyping` uses these canonical files:
13
10
 
14
- Evidence is **not versioned by default**.
15
- Recommended approach:
11
+ - `.qfai/evidence/prototyping.md`
12
+ - `.qfai/evidence/prototyping.json`
13
+ - `.qfai/evidence/render.json` (when render evidence is emitted)
14
+ - `.qfai/evidence/browser-qa.json` (when browser QA is emitted)
16
15
 
17
- - Add `.qfai/evidence/` to `.gitignore` (project-level), OR
18
- - Add it to `.git/info/exclude` (local only), OR
19
- - Store evidence outside the repository (artifact store, issue attachments).
16
+ ## prototyping.json minimum schema
20
17
 
21
- ## Naming
18
+ Always required:
22
19
 
23
- - Summary file: `.qfai/evidence/<prompt>-<run-id>.md`
24
- - Optional artifacts: `.qfai/evidence/<prompt>/<YYYY-MM-DD>/<run-id>/...`
25
- - `<run-id>`: prefer `spec-XXXX` when applicable.
20
+ - `specs[]`
21
+ - `meta.generatedAt`
22
+ - `meta.toolVersion`
23
+ - `meta.commands[]`
24
+ - `mode.effective`
25
+ - `mode.source`
26
+ - `mode.rationale`
26
27
 
27
- ### Prototyping stage required evidence
28
+ Optional:
28
29
 
29
- `/qfai-prototyping` requires two evidence artifacts in the evidence directory:
30
+ - `surface`
31
+ - `mode.requested`
32
+ - `mode.discussionRecommendation`
33
+ - `runtimeGate`
34
+ - `uiFidelity`
35
+ - `renderEvidence`
36
+ - `browserQa`
37
+ - `fullHarness`
30
38
 
31
- - one markdown evidence file for human-readable coverage/runtime logs
32
- - one json evidence file for machine validation
39
+ ## Obligation matrix
33
40
 
34
- ### Prototyping JSON minimum + uiFidelity mode rule
41
+ | surface / mode | specs | runtimeGate | uiFidelity | render evidence | browser QA | fullHarness |
42
+ | ------------------------- | -------- | ----------- | ----------------------------- | --------------- | ---------- | ----------- |
43
+ | non-ui / low-cost | required | optional | n/a | n/a | n/a | absent |
44
+ | non-ui / standard | required | optional | n/a | n/a | n/a | absent |
45
+ | non-ui / full-harness | required | optional | n/a | n/a | n/a | required |
46
+ | ui-bearing / low-cost | required | optional | optional (`skeleton` allowed) | optional | optional | absent |
47
+ | ui-bearing / standard | required | optional | required | optional | optional | absent |
48
+ | ui-bearing / full-harness | required | required | required | required | required | required |
35
49
 
36
- `prototyping.json` keeps the existing minimum schema for validation:
50
+ Interpretation:
37
51
 
38
- - `specs[]`
39
- - `runtimeGate.ui[]`
40
- - `runtimeGate.api[]`
41
- - `meta.generatedAt`
42
- - `meta.toolVersion`
43
- - `meta.commands[]`
52
+ - `required`: schema and completeness are enforced
53
+ - `optional`: if present, schema must be valid
54
+ - `n/a`: absent is normal success
55
+
56
+ ## non-ui canonical semantics
57
+
58
+ For `surface: non-ui`, the following are normal success when absent:
44
59
 
45
- `uiFidelity` handling depends on `mode`:
60
+ - `uiFidelity`
61
+ - render evidence bundle
62
+ - browser QA bundle
63
+ - `runtimeGate.ui`
46
64
 
47
- - `mode: interactive` (default): `uiFidelity` is required.
48
- - `mode: skeleton`: keep `uiFidelity` with `screens: []` for L1 evidence.
65
+ Contradictory UI-only payloads on `non-ui` are validation errors.
49
66
 
50
- When `uiFidelity` is present, keep all minimum fields above.
67
+ ## uiFidelity notes
51
68
 
52
- ### Render evidence bundle conventions
69
+ - `uiFidelity` is the canonical UI evidence block.
70
+ - `mode: interactive` is the default when a working UI flow is exercised.
71
+ - `mode: skeleton` is allowed for low-cost UI proof where structure exists but wiring is intentionally partial.
72
+ - Keep `"version": "0.1"` in the `uiFidelity` payload until the schema version changes.
53
73
 
54
- When render capture is enabled, keep render metadata path-only and store artifacts on disk:
74
+ ## fullHarness minimum completeness
55
75
 
56
- - default bundle path: `.qfai/evidence/render.json`
57
- - default viewports: `desktop`, `mobile`
58
- - `uiFidelity.screens[].renders[]` is the normalized in-band source for validator/report use
59
- - captured entries require `imagePath` and `htmlPath`
60
- - skipped entries require `skippedReason`
61
- - failed entries require `error`
76
+ When `mode.effective = "full-harness"`:
62
77
 
63
- Degraded mode is allowed:
78
+ - `fullHarness.enabled = true`
79
+ - `fullHarness.available`
80
+ - `fullHarness.runId`
81
+ - `fullHarness.iterationCount >= 1`
82
+ - `fullHarness.bestIteration >= 1`
83
+ - `fullHarness.terminationReason`
84
+ - `fullHarness.reviewerSignoff`
85
+ - `fullHarness.scoringTrace.length >= 1`
64
86
 
65
- - if renderer setup is unavailable, record `status: "skipped"` with a concrete reason
66
- - do not inline screenshot bytes or HTML bodies into JSON
67
- - keep `prototyping.json` and `render.json` aligned by file path only
87
+ ## Render evidence bundle conventions
88
+
89
+ Canonical path: `.qfai/evidence/render.json`
68
90
 
69
91
  ```json
70
92
  {
71
93
  "renderEvidence": {
72
- "status": "skipped",
94
+ "status": "captured",
73
95
  "requested": true,
74
- "autogenEnabled": false,
75
96
  "viewports": ["desktop", "mobile"],
76
- "outputPath": ".qfai/evidence/render.json",
77
- "reason": "render requested without autogen-ui-fidelity"
78
- }
97
+ "outputPath": ".qfai/evidence/render.json"
98
+ },
99
+ "screens": [
100
+ {
101
+ "route": "/orders",
102
+ "viewport": "desktop",
103
+ "status": "captured",
104
+ "width": 1440,
105
+ "height": 900,
106
+ "imagePath": ".qfai/evidence/render/orders.desktop.png",
107
+ "htmlPath": ".qfai/evidence/render/orders.desktop.html"
108
+ },
109
+ {
110
+ "route": "/orders",
111
+ "viewport": "mobile",
112
+ "status": "skipped",
113
+ "skippedReason": "path-only review for non-blocking mobile check"
114
+ }
115
+ ]
116
+ }
117
+ ```
118
+
119
+ Rules:
120
+
121
+ - `status`: `captured | skipped | failed`
122
+ - `captured`: `imagePath` and `htmlPath` required (QFAI-PROT-252)
123
+ - `skipped`: `skippedReason` required (QFAI-PROT-252)
124
+ - `failed`: `error` required (QFAI-PROT-252)
125
+ - external bundle is the source of truth
126
+ - in-band `uiFidelity.screens[].renders[]` is summary/projection only
127
+ - render evidence must remain `path-only`; `data:` URIs, `base64,` payloads, and inline HTML are invalid (QFAI-PROT-251)
128
+ - extremely long single-line payloads (>500 chars) are treated as inline payload violations
129
+ - top-level `renderEvidence.status` and individual `screens[].status` must not contradict (QFAI-PROT-253)
130
+
131
+ ## browser-qa.json canonical contract
132
+
133
+ ```json
134
+ {
135
+ "browserQa": {
136
+ "executed": true,
137
+ "status": "completed",
138
+ "mode": "full-harness",
139
+ "summary": {
140
+ "smoke": { "passed": 3, "failed": 0 },
141
+ "interaction": { "passed": 4, "failed": 1 }
142
+ }
143
+ },
144
+ "findings": [
145
+ {
146
+ "category": "interaction",
147
+ "severity": "error",
148
+ "route": "/orders",
149
+ "message": "Save button submits duplicate request"
150
+ }
151
+ ]
79
152
  }
80
153
  ```
81
154
 
82
- Good example references:
155
+ Rules:
83
156
 
84
- - Repository docs sample: `docs/examples/prototyping-ui-fidelity.good.json`
85
- - UI contract pair sample: `docs/examples/ui-contract.good.yaml`
157
+ - required only for `ui-bearing / full-harness` (QFAI-PROT-263)
158
+ - optional for `ui-bearing / low-cost|standard`
159
+ - n/a for `non-ui`
160
+ - `executed=true` requires `status=completed`; `executed=false` permits `status=skipped|failed` only
161
+ - `status=completed` without `summary` or `findings` produces a warning (QFAI-PROT-262)
162
+ - `browserQa.mode` must match `prototyping.json.mode.effective` (QFAI-PROT-261)
163
+ - `summary.*.passed/failed` must be non-negative integers
164
+ - each finding requires `category`, `severity`, and `message`
165
+
166
+ ## Example prototyping.json
86
167
 
87
168
  ```json
88
169
  {
170
+ "surface": "web-ui",
89
171
  "specs": [
90
172
  {
91
173
  "specId": "spec-0001",
@@ -94,75 +176,20 @@ Good example references:
94
176
  "missing": { "uiRoutes": [], "apiEndpoints": [], "dbObjects": [] }
95
177
  }
96
178
  ],
97
- "runtimeGate": {
98
- "ui": [{ "route": "/orders", "status": 200 }],
99
- "api": [{ "method": "GET", "path": "/api/orders", "status": 200 }]
100
- },
101
- "uiFidelity": {
102
- "version": "0.1",
103
- "mode": "interactive",
104
- "screens": [
105
- {
106
- "route": "/orders",
107
- "uiContractId": "CON-UI-0001",
108
- "expected": { "elements": 6, "actions": 2 },
109
- "observed": {
110
- "elementsPlaced": 6,
111
- "actionsWired": 2,
112
- "markersEmitted": 5
113
- },
114
- "mockPaths": [
115
- {
116
- "id": "mp_create_to_list",
117
- "status": "pass",
118
- "notes": "create -> list reflects (client mock)"
119
- }
120
- ],
121
- "placeholders": { "hasPlaceholderText": false, "notes": "" }
122
- }
123
- ]
179
+ "mode": {
180
+ "effective": "standard",
181
+ "source": "default",
182
+ "rationale": "No explicit request or discussion recommendation was provided."
124
183
  },
125
184
  "meta": {
126
- "generatedAt": "2026-02-27T00:00:00.000Z",
185
+ "generatedAt": "2026-04-04T00:00:00.000Z",
127
186
  "toolVersion": "<current-tool-version>",
128
187
  "commands": ["qfai validate --fail-on error"]
188
+ },
189
+ "uiFidelity": {
190
+ "version": "0.1",
191
+ "mode": "interactive",
192
+ "screens": []
129
193
  }
130
194
  }
131
195
  ```
132
-
133
- ## Minimal content template
134
-
135
- ```md
136
- # Evidence: <prompt> (<run-id>)
137
-
138
- ## Scope
139
-
140
- - Spec: <SPEC-XXXX or none>
141
- - Branch: <name>
142
- - Commit: <hash>
143
-
144
- ## Commands executed
145
-
146
- - <cmd1>
147
- - <cmd2>
148
-
149
- ## Results summary
150
-
151
- - <what passed / what failed>
152
-
153
- ## Exceptions / gaps
154
-
155
- - <explicit gaps>
156
-
157
- ## Reviewer approval
158
-
159
- - Reviewer: <name/role>
160
- - Approved at: <YYYY-MM-DD>
161
- ```
162
-
163
- ## Checklist
164
-
165
- - [ ] Contains executed commands and outcomes.
166
- - [ ] Notes any intentional gaps.
167
- - [ ] Has non-author approval (when required by prompt).
168
- - [ ] Prototyping stage includes both markdown and json evidence files.
@@ -23,4 +23,4 @@ These artifacts are reporting outputs, not SSOT.
23
23
  - Keep this directory as report-only output.
24
24
  - Do not move requirement/spec SSOT into this directory.
25
25
  - If `preflight_summary.md` exists, treat it as review-exempt context for the next SDD step.
26
- - Keep `.gitignore` as a baseline and append generated logs/artifacts over time.
26
+ - Keep `.gitignore` entries in the project root (managed by `qfai init`) to exclude generated artifacts.
@@ -10,15 +10,16 @@ Each review pack must include:
10
10
  - `Rxx_<reviewer>.md` (1 file or more)
11
11
  - `summary.json`
12
12
 
13
- Roster SSOT:
13
+ Routing SSOT:
14
14
 
15
- - `.qfai/assistant/steering/review-roster.yml`
15
+ - `.qfai/assistant/steering/agent-routing.yml`
16
+ - `.qfai/assistant/steering/review-profiles.yml`
16
17
 
17
18
  ## Path format
18
19
 
19
20
  ```text
20
21
  .qfai/review/
21
- ├── .gitignore
22
+ ├── README.md
22
23
  └── review-YYYYMMDDhhmmssSSS/
23
24
  ├── review_request.md
24
25
  ├── R01_<reviewer>.md
@@ -30,20 +31,34 @@ Roster SSOT:
30
31
 
31
32
  ```json
32
33
  {
33
- "version": "1.0",
34
+ "version": "2.0",
34
35
  "created_at": "2026-02-18T12:34:56+09:00",
35
36
  "target": { "kind": "spec|require|discussion", "path": "..." },
36
- "roster": [{ "reviewer": "name-or-id", "status": "PASS|FAIL|N/A", "feedback_count": 0 }],
37
+ "routing_profile": "default",
38
+ "reviewers": [{ "reviewer": "name-or-id", "status": "PASS|FAIL", "feedback_count": 0 }],
39
+ "conditional_reviewers": [],
37
40
  "overall_status": "PASS|FAIL"
38
41
  }
39
42
  ```
40
43
 
41
44
  Rules:
42
45
 
43
- - Execute all reviewers from roster in order for each review cycle.
44
- - `N/A` is allowed only with an explicit reason following roster `na_rule`.
45
- - If any reviewer returns `FAIL`, return/fix and rerun full roster review.
46
- - Validate evidence must include latest `.qfai/report/validate.log` and ATDD traceability report (`.qfai/report/atdd-traceability/summary.{json,md}`).
46
+ - Execute only the reviewers routed for the current skill/phase.
47
+ - If any reviewer returns `FAIL`, return/fix and rerun only failed reviewers and reviewers **affected by the changed scope**.
48
+ - "changed scope" is defined as the set of file paths affected by the latest fix and the scope tags (component, domain, layer, etc.) associated with those files.
49
+ - An "affected reviewer" is any reviewer matching either of the following:
50
+ - Its assigned scope (path prefix or scope tag) in `.qfai/assistant/steering/agent-routing.yml` or `review-profiles.yml` intersects the changed scope.
51
+ - Its routing definition (scope, weight, enabled/disabled) was modified in the diff of the above two files.
52
+ - Procedure for determining rerun targets:
53
+ 1. List all added/modified/deleted file paths from the latest change diff.
54
+ 2. Resolve the corresponding scope tags, components, and domains via `agent-routing.yml` / `review-profiles.yml` to enumerate the changed scope.
55
+ 3. For each reviewer, check whether its assigned scope intersects the changed scope or whether its routing definition was modified; mark matching reviewers as "affected".
56
+ 4. Rerun only "previously FAIL reviewers" + "affected reviewers"; carry forward previous results for all others.
57
+ - Validation evidence for each review pack must archive the latest
58
+ `.qfai/report/validate.log` and ATDD traceability report
59
+ (`.qfai/report/atdd-traceability/summary.{json,md}`) by copying them from
60
+ `.qfai/report` into the corresponding `review-*/evidence/` directory
61
+ (since `.qfai/report` may be git-ignored).
47
62
  - Reviewers must confirm no unresolved ATDD hard gates (`QFAI-ATDD-101/102/103/111/112/113/121/122`).
48
63
 
49
64
  ## Prototyping review quick checklist
@@ -7,7 +7,8 @@
7
7
  - upper-layer policies and decision bases: `.qfai/specs/_policies/**`
8
8
  - capability-specific details: `.qfai/specs/spec-XXXX/**`
9
9
 
10
- The split policy is fixed: **1 CAP = 1 spec directory**.
10
+ The slice policy SSOT lives in `_policies/11_Slice-Policy.md`.
11
+ The current approved model is **1 CAP = 1 spec directory**, but `/qfai-sdd` must refresh that policy file before making create/update/delete slice decisions.
11
12
 
12
13
  ## Required layout
13
14
 
@@ -23,7 +24,8 @@ specs/
23
24
  │ ├── 07_Constraints.md
24
25
  │ ├── 08_Decisions.md
25
26
  │ ├── 09_Open-questions.md
26
- └── 10_delta.md
27
+ ├── 10_delta.md
28
+ │ └── 11_Slice-Policy.md
27
29
  └── spec-XXXX/
28
30
  ├── 01_Spec.md
29
31
  ├── 02_User-stories.md
@@ -84,6 +86,7 @@ Each `spec-XXXX/tdd/test-list.md` is the execution ledger for the TDD micro-cycl
84
86
  - `specs/` is definition-only. Keep operational status as run logs under `.qfai/report/run-*/`.
85
87
  - Do not keep state markers like `release_candidate`, `Status`, `Progress`, or runtime `Risk` sections in spec files.
86
88
  - `/qfai-sdd` requires a complete `discussion/discussion-*/` pack and stops if it is missing or incomplete.
89
+ - `/qfai-sdd` must create or refresh `_policies/11_Slice-Policy.md` before deciding whether repository changes require spec CREATE / UPDATE / DELETE.
87
90
  - Blocking OQ in `discussion-*/11_OQ-Register.md` (`Disposition: open`) must be resolved before SDD proceeds.
88
91
  - Preflight writes `.qfai/report/preflight_summary.md` before spec generation to record selected inputs and open gaps.
89
92
  - `_policies/04_Business-Flow.md` must include at least one ` ```mermaid ` block and at least one `flowchart` or `sequenceDiagram`.
@@ -30,3 +30,16 @@ validation:
30
30
  unknownContractIdSeverity: error
31
31
  output:
32
32
  validateJsonPath: .qfai/report/validate.json
33
+ prototyping:
34
+ calibration:
35
+ packPath: .qfai/evidence/calibration.yaml
36
+ thresholds:
37
+ accept: 0.8
38
+ refine: 0.5
39
+ maxIterations: 15
40
+ plateauDelta: 0.02
41
+ plateauLookback: 3
42
+ execution:
43
+ targetUrl: null
44
+ browserProvider: playwright
45
+ renderProvider: playwright
@@ -1,13 +1,30 @@
1
1
  # UIX-REV: Comparison Review
2
2
 
3
- Review option comparison and anchor selection.
3
+ Review option comparison and selected anchor screen as independent artifacts.
4
4
 
5
- ## Comparison (30_comparison.md)
5
+ ## Comparison Quality (30_option_comparison.md)
6
6
 
7
- - Must contain at least 2 options
8
- - Each option should have structured evaluation
7
+ - Must contain at least 2 options with structured evaluation
8
+ - Each option should have pros/cons/trade-off analysis
9
+ - Evaluation criteria must reference the 3-layer evaluation family
10
+ - Rejected/deferred options must have explicit rationale
11
+ - Reconsideration conditions must be documented for deferred options
9
12
 
10
- ## Anchor (31_anchor.md)
13
+ ### Trend-derived conversion check
11
14
 
12
- - Must declare selected_anchor or chosen field
13
- - Anchor must reference one of the compared options
15
+ - Trend scan results are converted to comparison axes
16
+ - Stale / overused AI slop avoidance is reflected in comparison criteria
17
+
18
+ ## Selected Direction Quality (31_selected_anchor_screen.md)
19
+
20
+ - `selected_option` must reference one of the compared options in `30_option_comparison.md`
21
+ - `why_selected` must provide rationale aligned with 3-layer evaluation family
22
+ - Anchor screen must represent the canonical visual direction
23
+ - Downstream strategy (`10_implementation_strategy.md`) must align with selected direction
24
+ - Downstream contracts (`40_screen_contracts.md`) must be consistent with selected direction
25
+ - Deferred options must document reconsideration conditions
26
+
27
+ ### Trend-derived conversion check
28
+
29
+ - Trend scan results are reflected in selected direction rationale
30
+ - Stale / overused AI slop avoidance is reflected in selection
@@ -1,18 +1,25 @@
1
- # UIX-REV: Screen Contracts Review
1
+ # UIX-REV: Screen Contracts Review (40_screen_contracts.md)
2
2
 
3
- Review screen contracts for completeness.
3
+ Review screen contracts for canonical 11-field schema completeness.
4
4
 
5
- ## Required Fields per Screen
5
+ ## Required Fields per Screen (canonical 11-field schema)
6
6
 
7
- - route
8
- - actor
9
- - purpose
10
- - primary_tasks
11
- - required_states
12
- - transitions
13
- - observable_outcomes
7
+ 1. `screen_id` — unique identifier
8
+ 2. `route` — URL path or navigation target
9
+ 3. `purpose` — what the screen accomplishes
10
+ 4. `actor` — who uses this screen
11
+ 5. `primary_tasks` — main user tasks on this screen
12
+ 6. `secondary_tasks` — additional tasks
13
+ 7. `required_states` — must include `default`, `loading`, `empty`, and `error`
14
+ 8. `transitions` — navigation to/from this screen
15
+ 9. `observable_outcomes` — what success looks like
16
+ 10. `notes_for_verify` — verification guidance
17
+ 11. `notes_for_reviewer` — reviewer-specific notes
14
18
 
15
19
  ## Quality Criteria
16
20
 
17
21
  - Each screen contract must be independently verifiable
18
22
  - Routes must be unique across all contracts
23
+ - Required states must include `default`, `loading`, `empty`, and `error`
24
+ - All 11 fields must be present and non-empty for each screen
25
+ - Screen contracts must be consistent with 50_review_input_bundle.md
@@ -1,14 +1,50 @@
1
1
  # UIX-REV: Scoring Review
2
2
 
3
- Review evaluation axes and aggregate scoring rules.
3
+ Review scoring-ready schema for canonical completeness.
4
4
 
5
- ## Evaluation Axes
5
+ ## Per-Axis Required Fields
6
+
7
+ Each evaluation axis must include:
8
+
9
+ 1. `axis_id` — unique identifier
10
+ 2. `axis_name` — human-readable name
11
+ 3. `layer` — invariant / trend-derived / product-specific
12
+ 4. `origin` — derivation source (taste interview, trend scan, domain)
13
+ 5. `intent` — what this axis measures
14
+ 6. `why_it_matters` — rationale for inclusion
15
+ 7. `score_anchors` — concrete definitions for `low`, `mid`, `high`
16
+ 8. `positive_signals` — evidence that supports a high score
17
+ 9. `negative_signals` — evidence that supports a low score
18
+ 10. `anti_patterns` — patterns that should be flagged
19
+ 11. `evidence_required` — what evidence is needed to score
20
+ 12. `weight` — relative weight in aggregate scoring
21
+ 13. `minimum_floor` — minimum acceptable score (optional)
22
+ 14. `source_refs` — references to taste/trend sources
23
+ 15. `goal_refs` — references to project goals
24
+ 16. `review_questions` — questions the reviewer should ask
25
+
26
+ ## Evaluation Axes Quality
6
27
 
7
28
  - Each trend-derived row must include source_translation
8
29
  - Axes must be measurable and verifiable
30
+ - No generic/boilerplate axes without taste/trend derivation
31
+
32
+ ## Aggregate Scoring Rules
33
+
34
+ Canonical field names (must match `23_design_eval_aggregate.md`):
35
+
36
+ - `total_score_formula`: weighted composite formula
37
+ - `layer_weights`: per-layer weight allocation (must sum to 1.0)
38
+ - `accept_threshold`: minimum score for accept verdict (≥ 3.5)
39
+ - `refine_band`: score range for refine verdict (2.5–3.4)
40
+ - `pivot_band`: score range for pivot verdict (< 2.5)
41
+ - `max_iterations`: maximum scoring iterations
42
+ - `plateau_rule`: stagnation detection rule documented
43
+ - `missing_score_policy`: how to handle missing axis scores
44
+ - `disagreement_rule`: calibration disagreement handling documented
9
45
 
10
- ## Aggregate Scoring
46
+ ### Trend-derived conversion check
11
47
 
12
- - weights: defined for all axes
13
- - normalization: method specified
14
- - threshold: pass/fail boundary defined
48
+ - Trend scan results are converted to scoring axes
49
+ - Trend scan results are reflected in selected direction
50
+ - Stale / overused AI slop avoidance is reflected in comparison and selection
@@ -1,19 +1,23 @@
1
1
  # UIX-REV: Strategy Review
2
2
 
3
- Review the UI/UX strategy document for completeness and quality.
3
+ Review the UI/UX strategy document (`10_implementation_strategy.md`) for completeness and quality.
4
+
5
+ This review is scoped to strategy completeness only. Selected direction evaluation belongs to `comparison-review.md`.
4
6
 
5
7
  ## Required Fields
6
8
 
7
- - selection_required
8
- - candidate_options
9
- - chosen_option
10
- - verification_expectations
11
- - none_as_legitimate_outcome
9
+ - `surface`
10
+ - `decision`
11
+ - `why_this_strategy`
12
+ - `expected_strengths`
13
+ - `known_risks`
14
+ - `fit_for_this_product`
15
+ - enum validity for `surface` and `decision`
12
16
 
13
- ## Depth Check
17
+ ## Alignment Check
14
18
 
15
- - rationale: minimum 20 characters
16
- - approach: minimum 20 characters
19
+ - Strategy `decision` must be consistent with the selected direction in `31_selected_anchor_screen.md` (cross-reference only; SSOT judgment is in comparison-review)
20
+ - Strategy must not contradict screen contracts in `40_screen_contracts.md`
17
21
 
18
22
  ## Verdict
19
23