qfai 1.7.9 → 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.
- package/README.md +34 -70
- package/assets/init/.qfai/README.md +11 -16
- package/assets/init/.qfai/assistant/agents/acceptance-test-engineer.md +51 -0
- package/assets/init/.qfai/assistant/agents/architecture-reviewer.md +57 -0
- package/assets/init/.qfai/assistant/agents/backend-engineer.md +40 -31
- package/assets/init/.qfai/assistant/agents/completion-reviewer.md +48 -0
- package/assets/init/.qfai/assistant/agents/delivery-planner.md +52 -0
- package/assets/init/.qfai/assistant/agents/devops-ci-engineer.md +31 -28
- package/assets/init/.qfai/assistant/agents/discovery-analyst.md +50 -0
- package/assets/init/.qfai/assistant/agents/doc-steward.md +30 -20
- package/assets/init/.qfai/assistant/agents/frontend-engineer.md +40 -31
- package/assets/init/.qfai/assistant/agents/implementation-reviewer.md +58 -0
- package/assets/init/.qfai/assistant/agents/orchestrator.md +19 -2
- package/assets/init/.qfai/assistant/agents/product-experience-architect.md +59 -0
- package/assets/init/.qfai/assistant/agents/product-surface-reviewer.md +60 -0
- package/assets/init/.qfai/assistant/agents/qa-gatekeeper.md +53 -48
- package/assets/init/.qfai/assistant/agents/qa-strategist.md +49 -0
- package/assets/init/.qfai/assistant/agents/requirements-analyst.md +32 -29
- package/assets/init/.qfai/assistant/agents/requirements-reviewer.md +48 -0
- package/assets/init/.qfai/assistant/agents/solution-architect.md +59 -0
- package/assets/init/.qfai/assistant/agents/test-design-analyst.md +64 -0
- package/assets/init/.qfai/assistant/instructions/agent-selection.md +64 -50
- package/assets/init/.qfai/assistant/instructions/communication.md +17 -0
- package/assets/init/.qfai/assistant/instructions/constitution.md +36 -1
- package/assets/init/.qfai/assistant/instructions/drift-protocol.md +1 -1
- package/assets/init/.qfai/assistant/instructions/requirements-decomposition.md +20 -13
- package/assets/init/.qfai/assistant/instructions/workflow.md +2 -1
- package/assets/init/.qfai/assistant/skills/qfai-atdd/SKILL.md +32 -31
- package/assets/init/.qfai/assistant/skills/qfai-atdd/references/test-case-depth-checklist.md +80 -0
- package/assets/init/.qfai/assistant/skills/qfai-configure/SKILL.md +21 -15
- package/assets/init/.qfai/assistant/skills/qfai-discussion/SKILL.md +95 -61
- package/assets/init/.qfai/assistant/skills/qfai-discussion/references/rcp_footer.md +17 -85
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/01_Context.md +9 -1
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/02_Inception-Deck.md +1 -1
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/03_Story-Workshop.md +17 -60
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/04_Sources.md +69 -2
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/06_REQ.md +1 -1
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/07_NFR.md +1 -1
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/09_Constraints.md +1 -1
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/10_Policy.md +1 -1
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/11_OQ-Register.md +1 -1
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/12_OQ-Resolution-Log.md +1 -1
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/13_Deferred.md +1 -1
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/14_Review-Request.md +25 -16
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/99_delta.md +1 -1
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/prototyping.yaml +9 -0
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/review/Rxx_reviewer.md +8 -4
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/review/review_request.md +11 -7
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/review/summary.json +6 -44
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/00_index.md +29 -14
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/10_implementation_strategy.md +20 -0
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/11_design_taste_interview.md +45 -0
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/20_design_eval_invariant.md +68 -0
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/21_design_eval_trend_derived.md +68 -0
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/22_design_eval_product_specific.md +68 -0
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/23_design_eval_aggregate.md +41 -0
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/24_design_eval_dynamic_overrides.md +28 -0
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/30_option_comparison.md +56 -0
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/31_selected_anchor_screen.md +42 -0
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/40_screen_contracts.md +44 -0
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/50_review_input_bundle.md +36 -0
- package/assets/init/.qfai/assistant/skills/qfai-implement/SKILL.md +65 -67
- package/assets/init/.qfai/assistant/skills/qfai-prototyping/SKILL.md +171 -279
- package/assets/init/.qfai/assistant/skills/qfai-sdd/SKILL.md +91 -57
- package/assets/init/.qfai/assistant/skills/qfai-sdd/references/rcp_footer.md +21 -80
- package/assets/init/.qfai/assistant/skills/qfai-sdd/templates/evidence/import-lite.md +1 -1
- package/assets/init/.qfai/assistant/skills/qfai-sdd/templates/specs/_policies/11_Slice-Policy.md +50 -0
- package/assets/init/.qfai/assistant/skills/qfai-sdd/templates/specs/spec/06_Test-Cases.md +23 -3
- package/assets/init/.qfai/assistant/skills/qfai-verify/SKILL.md +25 -17
- package/assets/init/.qfai/assistant/steering/agent-catalog.yml +194 -0
- package/assets/init/.qfai/assistant/steering/agent-routing.yml +176 -0
- package/assets/init/.qfai/assistant/steering/cli-ux-guidelines.md +49 -0
- package/assets/init/.qfai/assistant/steering/manifest.md +44 -19
- package/assets/init/.qfai/assistant/steering/product.md +53 -11
- package/assets/init/.qfai/assistant/steering/research-first-protocol.md +58 -0
- package/assets/init/.qfai/assistant/steering/review-gate.rules.yml +17 -66
- package/assets/init/.qfai/assistant/steering/review-profiles.yml +30 -0
- package/assets/init/.qfai/assistant/steering/structure.md +30 -16
- package/assets/init/.qfai/assistant/steering/tech.md +37 -21
- package/assets/init/.qfai/assistant/steering/ui-definition-protocol.md +54 -0
- package/assets/init/.qfai/contracts/README.md +10 -4
- package/assets/init/.qfai/contracts/design/README.md +32 -0
- package/assets/init/.qfai/contracts/ui/README.md +5 -3
- package/assets/init/.qfai/discussion/README.md +52 -5
- package/assets/init/.qfai/evidence/README.md +143 -116
- package/assets/init/.qfai/report/README.md +1 -1
- package/assets/init/.qfai/review/README.md +24 -9
- package/assets/init/.qfai/specs/README.md +5 -2
- package/assets/init/root/qfai.config.yaml +13 -0
- package/assets/uix-rev/comparison-review.md +24 -7
- package/assets/uix-rev/contracts-review.md +17 -10
- package/assets/uix-rev/scoring-review.md +42 -6
- package/assets/uix-rev/strategy-review.md +13 -9
- package/dist/cli/index.cjs +15618 -11547
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.mjs +15487 -11415
- package/dist/cli/index.mjs.map +1 -1
- package/dist/index.cjs +10486 -6080
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +766 -198
- package/dist/index.d.ts +766 -198
- package/dist/index.mjs +10823 -6420
- package/dist/index.mjs.map +1 -1
- package/package.json +11 -3
- package/assets/init/.qfai/assistant/agents/architect-reviewer.md +0 -65
- package/assets/init/.qfai/assistant/agents/architect.md +0 -49
- package/assets/init/.qfai/assistant/agents/atdd-api-implementer.md +0 -49
- package/assets/init/.qfai/assistant/agents/atdd-e2e-implementer.md +0 -48
- package/assets/init/.qfai/assistant/agents/atdd-integration-implementer.md +0 -48
- package/assets/init/.qfai/assistant/agents/backend-reviewer.md +0 -66
- package/assets/init/.qfai/assistant/agents/code-reviewer.md +0 -67
- package/assets/init/.qfai/assistant/agents/contract-designer.md +0 -49
- package/assets/init/.qfai/assistant/agents/coverage-planner.md +0 -49
- package/assets/init/.qfai/assistant/agents/design-owner.md +0 -48
- package/assets/init/.qfai/assistant/agents/design-review-lead.md +0 -68
- package/assets/init/.qfai/assistant/agents/facilitator.md +0 -48
- package/assets/init/.qfai/assistant/agents/frontend-reviewer.md +0 -66
- package/assets/init/.qfai/assistant/agents/interviewer.md +0 -45
- package/assets/init/.qfai/assistant/agents/option-explorer.md +0 -51
- package/assets/init/.qfai/assistant/agents/option-reviewer.md +0 -66
- package/assets/init/.qfai/assistant/agents/oq-harvester.md +0 -50
- package/assets/init/.qfai/assistant/agents/oq-reviewer.md +0 -70
- package/assets/init/.qfai/assistant/agents/planner.md +0 -48
- package/assets/init/.qfai/assistant/agents/project-lead.md +0 -47
- package/assets/init/.qfai/assistant/agents/prototyping-coverage-auditor.md +0 -46
- package/assets/init/.qfai/assistant/agents/qa-engineer.md +0 -47
- package/assets/init/.qfai/assistant/agents/qa-lead.md +0 -44
- package/assets/init/.qfai/assistant/agents/qa-reviewer.md +0 -66
- package/assets/init/.qfai/assistant/agents/researcher.md +0 -47
- package/assets/init/.qfai/assistant/agents/reviewer.md +0 -62
- package/assets/init/.qfai/assistant/agents/runtime-gatekeeper.md +0 -46
- package/assets/init/.qfai/assistant/agents/test-case-owner.md +0 -53
- package/assets/init/.qfai/assistant/agents/test-engineer.md +0 -50
- package/assets/init/.qfai/assistant/agents/test-volume-estimator.md +0 -48
- package/assets/init/.qfai/assistant/agents/ui-ux-reviewer.md +0 -71
- package/assets/init/.qfai/assistant/agents/unit-test-scope-enforcer.md +0 -46
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/10_strategy.md +0 -28
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/20_eval_axis_usability.md +0 -31
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/21_eval_axis_consistency.md +0 -31
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/22_eval_axis_accessibility.md +0 -31
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/23_eval_axis_delight.md +0 -56
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/30_comparison.md +0 -45
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/31_anchor.md +0 -27
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/40_contracts.md +0 -51
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/50_review_bundle.md +0 -31
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/60_critique_loop.md +0 -23
- package/assets/init/.qfai/assistant/skills/qfai-prototyping-full-harness/SKILL.md +0 -185
- package/assets/init/.qfai/assistant/steering/review-roster.yml +0 -128
- package/assets/init/.qfai/evidence/.gitignore +0 -3
- package/assets/init/.qfai/report/.gitignore +0 -3
- package/assets/init/.qfai/review/.gitignore +0 -5
|
@@ -2,90 +2,172 @@
|
|
|
2
2
|
|
|
3
3
|
## Purpose
|
|
4
4
|
|
|
5
|
-
Evidence files record
|
|
5
|
+
Evidence files record what was actually executed, observed, skipped, or deferred.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
- relevant logs (summary)
|
|
9
|
-
- gaps / exceptions
|
|
10
|
-
- reviewer approval
|
|
7
|
+
## Prototyping stage required artifacts
|
|
11
8
|
|
|
12
|
-
|
|
9
|
+
`/qfai-prototyping` uses these canonical files:
|
|
13
10
|
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
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
|
-
|
|
18
|
+
Always required:
|
|
22
19
|
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
20
|
+
- `specs[]`
|
|
21
|
+
- `meta.generatedAt`
|
|
22
|
+
- `meta.toolVersion`
|
|
23
|
+
- `meta.commands[]`
|
|
24
|
+
- `mode.effective`
|
|
25
|
+
- `mode.source`
|
|
26
|
+
- `mode.rationale`
|
|
26
27
|
|
|
27
|
-
|
|
28
|
+
Optional:
|
|
28
29
|
|
|
29
|
-
|
|
30
|
+
- `surface`
|
|
31
|
+
- `mode.requested`
|
|
32
|
+
- `mode.discussionRecommendation`
|
|
33
|
+
- `runtimeGate`
|
|
34
|
+
- `uiFidelity`
|
|
35
|
+
- `renderEvidence`
|
|
36
|
+
- `browserQa`
|
|
37
|
+
- `fullHarness`
|
|
30
38
|
|
|
31
|
-
|
|
32
|
-
- one json evidence file for machine validation
|
|
39
|
+
## Obligation matrix
|
|
33
40
|
|
|
34
|
-
|
|
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
|
-
|
|
50
|
+
Interpretation:
|
|
37
51
|
|
|
38
|
-
- `
|
|
39
|
-
- `
|
|
40
|
-
- `
|
|
41
|
-
|
|
42
|
-
-
|
|
43
|
-
|
|
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`
|
|
60
|
+
- `uiFidelity`
|
|
61
|
+
- render evidence bundle
|
|
62
|
+
- browser QA bundle
|
|
63
|
+
- `runtimeGate.ui`
|
|
46
64
|
|
|
47
|
-
-
|
|
48
|
-
- `mode: skeleton`: keep `uiFidelity` with `screens: []` for L1 evidence.
|
|
65
|
+
Contradictory UI-only payloads on `non-ui` are validation errors.
|
|
49
66
|
|
|
50
|
-
|
|
67
|
+
## uiFidelity notes
|
|
51
68
|
|
|
52
|
-
|
|
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
|
-
|
|
74
|
+
## fullHarness minimum completeness
|
|
55
75
|
|
|
56
|
-
|
|
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
|
-
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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": "
|
|
94
|
+
"status": "captured",
|
|
73
95
|
"requested": true,
|
|
74
|
-
"autogenEnabled": false,
|
|
75
96
|
"viewports": ["desktop", "mobile"],
|
|
76
|
-
"outputPath": ".qfai/evidence/render.json"
|
|
77
|
-
|
|
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
|
-
|
|
155
|
+
Rules:
|
|
83
156
|
|
|
84
|
-
-
|
|
85
|
-
-
|
|
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
|
-
"
|
|
98
|
-
"
|
|
99
|
-
"
|
|
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-
|
|
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`
|
|
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
|
-
|
|
13
|
+
Routing SSOT:
|
|
14
14
|
|
|
15
|
-
- `.qfai/assistant/steering/
|
|
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
|
-
├── .
|
|
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": "
|
|
34
|
+
"version": "2.0",
|
|
34
35
|
"created_at": "2026-02-18T12:34:56+09:00",
|
|
35
36
|
"target": { "kind": "spec|require|discussion", "path": "..." },
|
|
36
|
-
"
|
|
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
|
|
44
|
-
- `
|
|
45
|
-
-
|
|
46
|
-
-
|
|
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
|
|
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
|
-
│
|
|
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
|
|
3
|
+
Review option comparison and selected anchor screen as independent artifacts.
|
|
4
4
|
|
|
5
|
-
## Comparison (
|
|
5
|
+
## Comparison Quality (30_option_comparison.md)
|
|
6
6
|
|
|
7
|
-
- Must contain at least 2 options
|
|
8
|
-
- Each option should have
|
|
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
|
-
|
|
13
|
+
### Trend-derived conversion check
|
|
11
14
|
|
|
12
|
-
-
|
|
13
|
-
-
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
|
3
|
+
Review scoring-ready schema for canonical completeness.
|
|
4
4
|
|
|
5
|
-
##
|
|
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
|
-
|
|
46
|
+
### Trend-derived conversion check
|
|
11
47
|
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
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
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
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
|
-
##
|
|
17
|
+
## Alignment Check
|
|
14
18
|
|
|
15
|
-
-
|
|
16
|
-
-
|
|
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
|
|