qfai 2.1.0 → 2.1.2

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 (184) hide show
  1. package/README.md +327 -55
  2. package/assets/defaults/agent-routing/qfai-triage.yml +9 -0
  3. package/assets/defaults/workflows/change-tooling.yml +0 -4
  4. package/assets/defaults/workflows/run-owned-cleanup.yml +12 -0
  5. package/assets/init/.claude/settings.json +27 -9
  6. package/assets/init/.codex/hooks.json +20 -8
  7. package/assets/init/.qfai/assistant/agent/frontend-engineer.md +5 -0
  8. package/assets/init/.qfai/assistant/agent/implementation-reviewer.md +14 -1
  9. package/assets/init/.qfai/assistant/agent/product-experience-architect.md +4 -0
  10. package/assets/init/.qfai/assistant/agent/product-surface-reviewer.md +7 -0
  11. package/assets/init/.qfai/assistant/agent/qa-gatekeeper.md +29 -0
  12. package/assets/init/.qfai/assistant/agent/requirements-analyst.md +8 -0
  13. package/assets/init/.qfai/assistant/rule/communication.md +18 -8
  14. package/assets/init/.qfai/assistant/rule/constitution.md +5 -4
  15. package/assets/init/.qfai/assistant/rule/drift-protocol.md +72 -5
  16. package/assets/init/.qfai/assistant/rule/references/asset-authoring.md +72 -0
  17. package/assets/init/.qfai/assistant/rule/references/context-summary.md +30 -0
  18. package/assets/init/.qfai/assistant/rule/references/gate-failure-autorepair.md +42 -0
  19. package/assets/init/.qfai/assistant/rule/references/griller-recommendations.md +23 -0
  20. package/assets/init/.qfai/assistant/rule/references/host-backstops.md +60 -0
  21. package/assets/init/.qfai/assistant/rule/references/placeholder-scan.md +25 -0
  22. package/assets/init/.qfai/assistant/rule/references/reviewer-findings.md +41 -0
  23. package/assets/init/.qfai/assistant/rule/references/reviewer-remit.md +35 -0
  24. package/assets/init/.qfai/assistant/rule/references/worker-edit-boundary.md +48 -0
  25. package/assets/init/.qfai/assistant/rule/shared-skill-delegation-baseline.md +39 -162
  26. package/assets/init/.qfai/assistant/rule/shared-skill-operating-baseline.md +14 -145
  27. package/assets/init/.qfai/assistant/rule/stage-cost.md +1 -1
  28. package/assets/init/.qfai/assistant/rule/test-layers.md +42 -0
  29. package/assets/init/.qfai/assistant/rule/ui-definition-protocol.md +6 -1
  30. package/assets/init/.qfai/assistant/skill/qfai-configure/SKILL.md +11 -45
  31. package/assets/init/.qfai/assistant/skill/qfai-configure/references/principles.md +25 -0
  32. package/assets/init/.qfai/assistant/skill/qfai-discussion/SKILL.md +1 -1
  33. package/assets/init/.qfai/assistant/skill/qfai-discussion/references/discussion-completion-matrix.md +12 -9
  34. package/assets/init/.qfai/assistant/skill/qfai-discussion/references/ui-bearing-playbook.md +2 -4
  35. package/assets/init/.qfai/assistant/skill/qfai-discussion/references/ui_ux/platform_baselines.md +11 -0
  36. package/assets/init/.qfai/assistant/skill/qfai-discussion/references/ui_ux/review_audit_playbook.md +11 -0
  37. package/assets/init/.qfai/assistant/skill/qfai-discussion/references/ui_ux_best_practices.md +13 -42
  38. package/assets/init/.qfai/assistant/skill/qfai-discussion/templates/uiux/00_index.md +0 -16
  39. package/assets/init/.qfai/assistant/skill/qfai-grill/SKILL.md +1 -1
  40. package/assets/init/.qfai/assistant/skill/qfai-grilling/SKILL.md +16 -88
  41. package/assets/init/.qfai/assistant/skill/qfai-grilling/references/delegated-session.md +58 -0
  42. package/assets/init/.qfai/assistant/skill/qfai-grilling/references/session-record.md +42 -0
  43. package/assets/init/.qfai/assistant/skill/qfai-implement/SKILL.md +17 -4
  44. package/assets/init/.qfai/assistant/skill/qfai-implement/references/credential-reuse.md +9 -0
  45. package/assets/init/.qfai/assistant/skill/qfai-implement/references/cross-spec-ownership.md +41 -0
  46. package/assets/init/.qfai/assistant/skill/qfai-implement/references/oracle-strength.md +6 -1
  47. package/assets/init/.qfai/assistant/skill/qfai-implement/references/parallelization-policy.md +9 -1
  48. package/assets/init/.qfai/assistant/skill/qfai-implement/references/red-admissibility.md +47 -1
  49. package/assets/init/.qfai/assistant/skill/qfai-implement/references/ui-affecting.md +4 -3
  50. package/assets/init/.qfai/assistant/skill/qfai-maintain/SKILL.md +4 -4
  51. package/assets/init/.qfai/assistant/skill/qfai-migration-v1-to-v2/SKILL.md +16 -10
  52. package/assets/init/.qfai/assistant/skill/qfai-migration-v1-to-v2/references/migration-guide.md +10 -260
  53. package/assets/init/.qfai/assistant/skill/qfai-migration-v1-to-v2/references/migration-placement.md +273 -0
  54. package/assets/init/.qfai/assistant/skill/qfai-prototyping/SKILL.md +5 -4
  55. package/assets/init/.qfai/assistant/skill/qfai-prototyping/references/design-md-spec.md +14 -5
  56. package/assets/init/.qfai/assistant/skill/qfai-prototyping/references/generator-prompt.md +10 -0
  57. package/assets/init/.qfai/assistant/skill/qfai-prototyping/references/handoff.md +1 -1
  58. package/assets/init/.qfai/assistant/skill/qfai-prototyping/references/iteration-loop.md +3 -4
  59. package/assets/init/.qfai/assistant/skill/qfai-prototyping/references/review-payload-schema.md +12 -5
  60. package/assets/init/.qfai/assistant/skill/qfai-prototyping/references/reviewer-prompt.md +33 -4
  61. package/assets/init/.qfai/assistant/skill/qfai-run/SKILL.md +34 -36
  62. package/assets/init/.qfai/assistant/skill/qfai-run/references/evidence-delivery.md +322 -0
  63. package/assets/init/.qfai/assistant/skill/qfai-run/references/extraction.md +67 -24
  64. package/assets/init/.qfai/assistant/skill/qfai-run/references/operator-screens.md +246 -5
  65. package/assets/init/.qfai/assistant/skill/qfai-run/references/plan.md +29 -5
  66. package/assets/init/.qfai/assistant/skill/qfai-run/references/stage-points.md +43 -0
  67. package/assets/init/.qfai/assistant/skill/qfai-sdd/SKILL.md +5 -4
  68. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/concrete-abstract-cycle.md +10 -1
  69. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/contract-artifact-rules.md +22 -9
  70. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/design-anti-patterns.md +41 -6
  71. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/design-md-authoring.md +11 -5
  72. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/design-md-brand-catalog.md +17 -2
  73. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/requirements-decomposition.md +10 -2
  74. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/sdd-execution-playbook.md +34 -9
  75. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/sdd-phase-checklists.md +4 -4
  76. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/sdd-quality-gate.md +2 -2
  77. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/sdd-triage.md +177 -7
  78. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/spec-traceability-rules.md +29 -5
  79. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/ui-contract-guide.md +130 -1
  80. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/ui-design-contract-normalization.md +4 -30
  81. package/assets/init/.qfai/assistant/skill/qfai-sdd/templates/change-request.md +39 -2
  82. package/assets/init/.qfai/assistant/skill/qfai-sdd/templates/contracts/db-contract.sample.sql +2 -2
  83. package/assets/init/.qfai/assistant/skill/qfai-sdd/templates/contracts/ui-contract.sample.yaml +52 -5
  84. package/assets/init/.qfai/assistant/skill/qfai-sdd/templates/spec/03_contract/cli/cli-NNNN-title.md +2 -2
  85. package/assets/init/.qfai/assistant/skill/qfai-sdd/templates/spec/03_contract/tech.md +1 -1
  86. package/assets/init/.qfai/assistant/skill/qfai-sdd/templates/spec/decisions.md +7 -0
  87. package/assets/init/.qfai/assistant/skill/qfai-triage/SKILL.md +30 -20
  88. package/assets/init/.qfai/assistant/skill/qfai-verify/SKILL.md +6 -5
  89. package/assets/init/.qfai/assistant/skill/qfai-verify/references/context-load.md +9 -6
  90. package/assets/init/.qfai/assistant/skill/qfai-verify/references/verify-output-contract.md +92 -13
  91. package/assets/init/.qfai/assistant/skill/web-research/SKILL.md +37 -31
  92. package/assets/init/.qfai/assistant/skill/web-research/mcp-templates/brave-search/config.toml +2 -4
  93. package/assets/init/.qfai/assistant/skill/web-research/mcp-templates/brave-search/mcp-config.json +9 -5
  94. package/assets/init/.qfai/assistant/skill/web-research/mcp-templates/firecrawl/.mcp.json +1 -2
  95. package/assets/init/.qfai/assistant/skill/web-research/mcp-templates/firecrawl/config.toml +3 -3
  96. package/assets/init/.qfai/assistant/skill/web-research/mcp-templates/firecrawl/mcp-config.json +11 -8
  97. package/assets/init/.qfai/assistant/skill/web-research/mcp-templates/playwright/config.toml +1 -1
  98. package/assets/init/.qfai/assistant/skill/web-research/mcp-templates/playwright/mcp-config.json +7 -3
  99. package/assets/init/.qfai/assistant/step/common-design-md/STEP.md +17 -7
  100. package/assets/init/.qfai/assistant/step/common-gate-run/STEP.md +126 -13
  101. package/assets/init/.qfai/assistant/step/common-review-cycle/STEP.md +3 -2
  102. package/assets/init/.qfai/assistant/step/discussion-pack/STEP.md +1 -0
  103. package/assets/init/.qfai/assistant/step/discussion-research/STEP.md +2 -0
  104. package/assets/init/.qfai/assistant/step/discussion-uiux/STEP.md +12 -4
  105. package/assets/init/.qfai/assistant/step/implement-backport/STEP.md +1 -1
  106. package/assets/init/.qfai/assistant/step/implement-benchmark/STEP.md +7 -4
  107. package/assets/init/.qfai/assistant/step/implement-dep-bump/STEP.md +11 -1
  108. package/assets/init/.qfai/assistant/step/implement-diagnose/STEP.md +2 -0
  109. package/assets/init/.qfai/assistant/step/implement-oracle-parity/STEP.md +2 -2
  110. package/assets/init/.qfai/assistant/step/implement-quarantine/STEP.md +3 -3
  111. package/assets/init/.qfai/assistant/step/implement-refactor/STEP.md +2 -2
  112. package/assets/init/.qfai/assistant/step/implement-regression-fix/STEP.md +4 -3
  113. package/assets/init/.qfai/assistant/step/implement-retire/STEP.md +6 -3
  114. package/assets/init/.qfai/assistant/step/implement-revert/STEP.md +4 -3
  115. package/assets/init/.qfai/assistant/step/implement-scaffold/STEP.md +3 -3
  116. package/assets/init/.qfai/assistant/step/implement-seam/STEP.md +9 -6
  117. package/assets/init/.qfai/assistant/step/implement-stress-harness/STEP.md +1 -1
  118. package/assets/init/.qfai/assistant/step/implement-sweep/STEP.md +4 -3
  119. package/assets/init/.qfai/assistant/step/implement-tdd/STEP.md +42 -6
  120. package/assets/init/.qfai/assistant/step/implement-test-fix/STEP.md +2 -0
  121. package/assets/init/.qfai/assistant/step/implement-tooling/STEP.md +22 -2
  122. package/assets/init/.qfai/assistant/step/maintain-edit/STEP.md +18 -14
  123. package/assets/init/.qfai/assistant/step/prototyping-grill/STEP.md +4 -3
  124. package/assets/init/.qfai/assistant/step/prototyping-loop/STEP.md +4 -0
  125. package/assets/init/.qfai/assistant/step/prototyping-preflight/STEP.md +1 -3
  126. package/assets/init/.qfai/assistant/step/sdd-contract/STEP.md +11 -0
  127. package/assets/init/.qfai/assistant/step/sdd-flow/STEP.md +4 -0
  128. package/assets/init/.qfai/assistant/step/sdd-gate/STEP.md +4 -0
  129. package/assets/init/.qfai/assistant/step/sdd-story/STEP.md +10 -0
  130. package/assets/init/.qfai/assistant/step/sdd-triage/STEP.md +37 -11
  131. package/assets/init/.qfai/assistant/step/triage-answer/STEP.md +5 -4
  132. package/assets/init/.qfai/assistant/step/triage-close/STEP.md +33 -23
  133. package/assets/init/.qfai/assistant/step/triage-cluster/STEP.md +5 -3
  134. package/assets/init/.qfai/assistant/step/triage-decompose/STEP.md +2 -0
  135. package/assets/init/.qfai/assistant/step/triage-dedupe/STEP.md +4 -0
  136. package/assets/init/.qfai/assistant/step/triage-handoff/STEP.md +13 -4
  137. package/assets/init/.qfai/assistant/step/triage-investigate/STEP.md +8 -5
  138. package/assets/init/.qfai/assistant/step/triage-owned-cleanup/STEP.md +86 -0
  139. package/assets/init/.qfai/assistant/step/triage-request-info/STEP.md +2 -0
  140. package/assets/init/.qfai/assistant/step/triage-security-intake/STEP.md +6 -3
  141. package/assets/init/.qfai/assistant/step/verify-change-note/STEP.md +9 -5
  142. package/assets/init/.qfai/assistant/step/verify-commit/STEP.md +39 -6
  143. package/assets/init/.qfai/assistant/step/verify-external/STEP.md +5 -2
  144. package/assets/init/.qfai/assistant/step/verify-qfai-gate/STEP.md +10 -2
  145. package/assets/init/.qfai/assistant/step/verify-release-notes/STEP.md +1 -0
  146. package/assets/init/.qfai/assistant/step/verify-repeat-run/STEP.md +7 -5
  147. package/assets/init/.qfai/assistant/step/verify-repo-gate/STEP.md +136 -28
  148. package/assets/init/.qfai/waivers.yml +1 -1
  149. package/assets/init/root/.agents/rules/ai-readable-markdown.md +98 -0
  150. package/assets/init/root/.agents/rules/api-budget.md +191 -13
  151. package/assets/init/root/.agents/rules/documentation-clarity.md +192 -35
  152. package/assets/init/root/.agents/rules/grilling.md +4 -4
  153. package/assets/init/root/.agents/rules/interface-clarity.md +5 -5
  154. package/assets/init/root/.agents/rules/minimal-implementation.md +11 -3
  155. package/assets/init/root/.agents/rules/reminders.json +27 -14
  156. package/assets/init/root/.agents/rules/session-feedback.md +136 -0
  157. package/assets/init/root/.agents/rules/temporary-files.md +47 -5
  158. package/assets/init/root/.agents/rules/untrusted-content.md +3 -3
  159. package/assets/init/root/.agents/rules/user-questions.md +74 -36
  160. package/assets/init/root/.gitattributes +9 -0
  161. package/assets/init/root/.github/workflows/qfai-docs.yml +44 -12
  162. package/assets/init/root/.github/workflows/qfai-tests.yml +58 -15
  163. package/assets/init/root/.github/workflows/qfai-validate.yml +49 -42
  164. package/assets/init/root/AGENTS.md +23 -21
  165. package/assets/mdschema/story/03_contract/tech.mdschema.yml +7 -3
  166. package/assets/sandbox-templates/default-deny.yaml +9 -5
  167. package/assets/schemas/workflow/extraction.schema.json +85 -5
  168. package/assets/schemas/workflow/plan.schema.json +9 -2
  169. package/assets/scripts/check-mdschema.mjs +172 -5
  170. package/assets/uix-rev/comparison-review.md +1 -1
  171. package/assets/uix-rev/contracts-review.md +1 -2
  172. package/dist/cli/index.cjs +6499 -7688
  173. package/dist/cli/index.cjs.map +1 -1
  174. package/dist/cli/index.mjs +6449 -7641
  175. package/dist/cli/index.mjs.map +1 -1
  176. package/dist/index.cjs +5548 -7823
  177. package/dist/index.cjs.map +1 -1
  178. package/dist/index.d.cts +40 -666
  179. package/dist/index.d.ts +40 -666
  180. package/dist/index.mjs +5397 -7648
  181. package/dist/index.mjs.map +1 -1
  182. package/docs/MIGRATION-2.0.0.md +1 -1
  183. package/package.json +5 -7
  184. package/assets/init/root/CLAUDE.md +0 -45
@@ -30,19 +30,3 @@ cli-only pack — `primary_surface: cli` with no visual surface in
30
30
  `secondary_surfaces` — never gets one: the `common-design-md` step writes none, and
31
31
  `/qfai-prototyping` does not run on `cli`. Do not report any pack as
32
32
  incomplete for a missing `DESIGN.md`.
33
-
34
- ## Forbidden Legacy Files
35
-
36
- The following files are NOT part of the canonical family and must NOT be created in new packs:
37
-
38
- - `10_implementation_strategy.md` — discussion carries directions unranked, so it selects no strategy
39
- - `11_design_taste_interview.md` — brand signals are recorded in `04_Sources.md`
40
- - `12_design_system.md` — replaced by root `DESIGN.md`
41
- - the `20`–`24` design-evaluation family — the evaluator axes are fixed by the CLI, not authored here
42
- - `30_option_comparison.md` — replaced by root `DESIGN.md`
43
- - `31_selected_anchor_screen.md` — replaced by root `DESIGN.md`
44
- - `33_exploration_rubric.md` — replaced by the fixed evaluator axes (`.qfai/assistant/skill/qfai-prototyping/references/reviewer-prompt.md`)
45
- - `34_evaluator_calibration.md` — replaced by the fixed evaluator axes (`.qfai/assistant/skill/qfai-prototyping/references/reviewer-prompt.md`)
46
- - `40_contracts.md` — replaced by `40_screen_contracts.md`
47
- - `50_review_bundle.md` — replaced by `50_review_input_bundle.md`
48
- - `60_critique_loop.md` — removed (critique integrated into review bundle)
@@ -10,7 +10,7 @@ mode: interactive-by-default
10
10
 
11
11
  ## qfai-grill - the session a user asks for
12
12
 
13
- [DRIFT-PROTOCOL:MANDATORY]
13
+ [DRIFT-PROTOCOL:REQUIRED]
14
14
 
15
15
  Run a grilling session on whatever the argument names. This skill holds no
16
16
  method of its own: it directs the run to `qfai-grilling`, which is the one
@@ -1,14 +1,14 @@
1
1
  ---
2
2
  name: qfai-grilling
3
3
  title: QFAI Grilling (Design interrogation)
4
- description: "Interrogate an unfixed design in rounds: a tree of open decisions, a frontier of the ones answerable now, facts read rather than asked, and an end condition the user holds."
4
+ description: "Interrogate an unfixed design in rounds: a tree of open decisions, a frontier of the ones answerable now, facts read rather than asked, and an end condition the user holds. Use when a stage calls for a grilling session, or when asked to grill or stress-test a design."
5
5
  allowed-tools: [Read, Glob, Grep, Bash, TodoWrite, Task, Agent]
6
6
  mode: interactive-by-default
7
7
  ---
8
8
 
9
9
  ## qfai-grilling - interrogate a design before it is fixed
10
10
 
11
- [DRIFT-PROTOCOL:MANDATORY]
11
+ [DRIFT-PROTOCOL:REQUIRED]
12
12
 
13
13
  The one implementation of the interview method. A skill that needs a design
14
14
  interrogated invokes this rather than writing rounds of its own, so there is one
@@ -296,57 +296,13 @@ orchestrator holds both. That is a different answerer, not a delegated question:
296
296
  nothing hands the asking to a third agent, and the orchestrator still answers
297
297
  nothing itself.
298
298
 
299
- A round between agents may have several authors, because one frontier can hold
300
- decisions belonging to different drafting roles.
301
-
302
- - The round goes to **every author whose decisions it contains**, each seeing
303
- the whole round. A decision reads differently beside the ones next to it, and
304
- an author shown only its own share cannot say so.
305
- - **Every answer is collected before the frontier is recomputed.** Recomputing
306
- on the first reply settles the rest against a tree that moved under them.
307
- - **Two authors answering one question differently is itself a decision**, and
308
- it joins the frontier rather than being averaged. If the budget ends with it
309
- open, it takes the griller's recommendation like any other non-critical
310
- decision, with both positions recorded.
311
- - **An addition an author proposes is asked what part of the request needs
312
- it.** One nobody can point to is dropped, not adopted.
313
- - **A fact only the user holds goes to the user, not to an author.** No author
314
- can answer an unpublished constraint or an intention nobody wrote down, and
315
- the convergence rules escalate decisions rather than facts — so without this
316
- the fact sits on the frontier until the budget ends, taking every decision
317
- waiting on it with it. It escalates immediately, as a request for the value
318
- rather than a choice. Under a no-question mode it reaches nobody, and what
319
- follows depends on the fact rather than on its kind: where the consuming
320
- document declares the value undefaultable the run stops and names it
321
- (`.qfai/assistant/rule/constitution.md` Article X, rule 4), and where
322
- the document has a default that default is recorded as a labelled assumption
323
- beside the open question, which is the ordinary no-question path. Stopping on
324
- every user-held fact would block a run over a defaultable date.
325
-
326
- ### Orchestrator Protocol
327
-
328
- - The orchestrator computes the frontier and reads the answers. It does not
329
- decide a frontier question on anyone's behalf.
330
- - **Who puts the round depends on the mode, and exactly one role does.** With a
331
- user, the orchestrator puts it. Between agents, the griller puts it and the
332
- orchestrator does not — a session where both do is one where an author is
333
- asked twice and the two answers have no tie-break.
334
- - It must not record an answer **as the user's** that the user did not give, and
335
- must not self-approve the session's end condition. An author's answer in an
336
- agent-to-agent round is recorded as that author's position, with whose it is:
337
- the round cannot be recomputed, a disagreement cannot be kept, and an
338
- escalation cannot carry the positions to the user unless the answers are
339
- held.
340
- - **In a delegated session the griller's recommendation settles a decision that
341
- is not critical.** Where the authors and the griller land on one answer, or
342
- the budget ends first, the recommendation is taken and the stage records it as
343
- `agents`, with the reason and every disagreeing position. The stage's final
344
- report lists it; nothing waits for the user to read it.
345
-
346
- A critical decision is the exception: agreement closes its node for the
347
- round, and only the user's answer settles it. Recording an agreed critical
348
- decision as settled is how a choice nobody with the standing made reaches a
349
- draft.
299
+ ### Rounds between agents
300
+
301
+ Read `references/delegated-session.md` when a griller puts the round to authors
302
+ instead of a user. It holds how a round with several authors is held, which
303
+ role puts the round, why a fact only the user holds goes to the user, and when
304
+ the griller's recommendation settles a decision. A session with a user does not
305
+ need it.
350
306
 
351
307
  ### Capability Probe
352
308
 
@@ -367,45 +323,17 @@ decisions belonging to different drafting roles.
367
323
 
368
324
  ## Work Orders Summary
369
325
 
370
- A session that dispatched any lookup must record a `## Work Orders Summary`
371
- table in the artifact its invoking stage writes. Use the shared schema from
372
- `.qfai/assistant/rule/shared-skill-delegation-baseline.md`, including
373
- the `Agent instance` column.
374
-
375
- | Step | Role (sub-agent) | Agent instance | Task title | Input (refs) | Output (refs) | Status (PASS/REVISE/PENDING) |
376
- | ---- | ---------------- | --------------- | ------------------------------- | ------------------------------- | ------------------------------- | ---------------------------- |
377
- | 1 | Reviewer | `<instance id>` | Read the facts a round waits on | Decision and what it depends on | The fact, and where it was read | PASS/REVISE |
326
+ A session that dispatched any lookup records a `## Work Orders Summary` table
327
+ in the artifact its invoking stage writes. Read `references/session-record.md`
328
+ for the table. It also lists what the invoking stage's reviewer confirms about
329
+ the session, so read it when reviewing one.
378
330
 
379
331
  ### Reviewer Gate
380
332
 
381
333
  This skill produces no artifact, so the gate that covers a session is the
382
- invoking stage's. What it confirms about the session is:
383
-
384
- - no decision was recorded as the user's that the user did not answer, no
385
- critical decision was adopted without them, and none was assumed that the
386
- assumption path excludes;
387
- - every adopted decision has its `agents` row, and none of them adds what the
388
- request did not need;
389
- - a fact taken as settled names where it was read;
390
- - the session ended on its own condition or on the user's word, in one of the
391
- five endings `.agents/rules/grilling.md` names. Between agents a round budget
392
- bounds the rounds (`.qfai/assistant/rule/review-convergence.md`), and
393
- a session recorded as ended while a critical decision it escalated is still
394
- unanswered is the finding.
395
-
396
- - Reviewer independence is defined normatively in
397
- `.qfai/assistant/rule/shared-skill-delegation-baseline.md#definition-independent-reviewer-normative`.
398
- An agent that answered a lookup in this session is disqualified from reviewing
399
- the facts it supplied.
400
- - Reviewer checks the Drift Protocol, verifies alignment with `test-layers.md`,
401
- and treats ratios as signals, not gates.
402
- - Reviewer returns only `PASS` or `REVISE`, with a concrete fix proposal on
403
- `REVISE`. A gate that could not be run at all is recorded as `PENDING`, which
404
- never counts as `PASS`.
405
-
406
- A session run from the user-invoked entry point has no invoking stage. There the
407
- gate is the user reading the record, which is why that entry point writes no
408
- files.
334
+ invoking stage's. A session run from the user-invoked entry point has no
335
+ invoking stage. There the gate is the user reading the record, which is why that
336
+ entry point writes no files.
409
337
 
410
338
  ## Default Autopilot Policy
411
339
 
@@ -0,0 +1,58 @@
1
+ # Delegated session
2
+
3
+ How the session agent runs a round between agents: who is asked, how the
4
+ answers are held, and which role puts the round.
5
+
6
+ ## Several authors
7
+
8
+ A round between agents may have several authors, because one frontier can hold
9
+ decisions belonging to different drafting roles.
10
+
11
+ - The round goes to **every author whose decisions it contains**, each seeing
12
+ the whole round. A decision reads differently beside the ones next to it, and
13
+ an author shown only its own share cannot say so.
14
+ - **Every answer is collected before the frontier is recomputed.** Recomputing
15
+ on the first reply settles the rest against a tree that moved under them.
16
+ - **Two authors answering one question differently is itself a decision**, and
17
+ it joins the frontier rather than being averaged. If the budget ends with it
18
+ open, it takes the griller's recommendation like any other non-critical
19
+ decision, with both positions recorded.
20
+ - **An addition an author proposes is asked what part of the request needs
21
+ it.** One nobody can point to is dropped, not adopted.
22
+ - **A fact only the user holds goes to the user, not to an author.** No author
23
+ can answer an unpublished constraint or an intention nobody wrote down, and
24
+ the convergence rules escalate decisions rather than facts — so without this
25
+ the fact sits on the frontier until the budget ends, taking every decision
26
+ waiting on it with it. It escalates immediately, as a request for the value
27
+ rather than a choice. Under a no-question mode it reaches nobody, and what
28
+ follows depends on the fact rather than on its kind: where the consuming
29
+ document declares the value undefaultable the run stops and names it
30
+ (`.qfai/assistant/rule/constitution.md` Article X, rule 4), and where
31
+ the document has a default that default is recorded as a labelled assumption
32
+ beside the open question, which is the ordinary no-question path. Stopping on
33
+ every user-held fact would block a run over a defaultable date.
34
+
35
+ ## Orchestrator protocol
36
+
37
+ - The orchestrator computes the frontier and reads the answers. It does not
38
+ decide a frontier question on anyone's behalf.
39
+ - **Who puts the round depends on the mode, and exactly one role does.** With a
40
+ user, the orchestrator puts it. Between agents, the griller puts it and the
41
+ orchestrator does not — a session where both do is one where an author is
42
+ asked twice and the two answers have no tie-break.
43
+ - It must not record an answer **as the user's** that the user did not give, and
44
+ must not self-approve the session's end condition. An author's answer in an
45
+ agent-to-agent round is recorded as that author's position, with whose it is:
46
+ the round cannot be recomputed, a disagreement cannot be kept, and an
47
+ escalation cannot carry the positions to the user unless the answers are
48
+ held.
49
+ - **In a delegated session the griller's recommendation settles a decision that
50
+ is not critical.** Where the authors and the griller land on one answer, or
51
+ the budget ends first, the recommendation is taken and the stage records it as
52
+ `agents`, with the reason and every disagreeing position. The stage's final
53
+ report lists it; nothing waits for the user to read it.
54
+
55
+ A critical decision is the exception: agreement closes its node for the
56
+ round, and only the user's answer settles it. Recording an agreed critical
57
+ decision as settled is how a choice nobody with the standing made reaches a
58
+ draft.
@@ -0,0 +1,42 @@
1
+ # Recording a session
2
+
3
+ The work-orders table a session writes when it dispatched a lookup, and what
4
+ the reviewer of the invoking stage confirms about the session.
5
+
6
+ ## Work Orders Summary
7
+
8
+ Use the shared schema from
9
+ `.qfai/assistant/rule/shared-skill-delegation-baseline.md`, including the
10
+ `Agent instance` column.
11
+
12
+ | Step | Role (sub-agent) | Agent instance | Task title | Input (refs) | Output (refs) | Status (PASS/REVISE/PENDING) |
13
+ | ---- | ---------------- | --------------- | ------------------------------- | ------------------------------- | ------------------------------- | ---------------------------- |
14
+ | 1 | Reviewer | `<instance id>` | Read the facts a round waits on | Decision and what it depends on | The fact, and where it was read | PASS/REVISE |
15
+
16
+ ## What the reviewer confirms
17
+
18
+ The invoking stage's reviewer confirms this about the session:
19
+
20
+ - no decision was recorded as the user's that the user did not answer, no
21
+ critical decision was adopted without them, and none was assumed that the
22
+ assumption path excludes;
23
+ - every adopted decision has its `agents` row, and none of them adds what the
24
+ request did not need;
25
+ - a fact taken as settled names where it was read;
26
+ - the session ended on its own condition or on the user's word, in one of the
27
+ five endings `.agents/rules/grilling.md` names. Between agents a round budget
28
+ bounds the rounds (`.qfai/assistant/rule/review-convergence.md`), and
29
+ a session recorded as ended while a critical decision it escalated is still
30
+ unanswered is the finding.
31
+
32
+ The reviewer works under these rules:
33
+
34
+ - Reviewer independence is defined normatively in
35
+ `.qfai/assistant/rule/shared-skill-delegation-baseline.md#definition-independent-reviewer-normative`.
36
+ An agent that answered a lookup in this session is disqualified from reviewing
37
+ the facts it supplied.
38
+ - Reviewer checks the Drift Protocol, verifies alignment with `test-layers.md`,
39
+ and treats ratios as signals, not gates.
40
+ - Reviewer returns only `PASS` or `REVISE`, with a concrete fix proposal on
41
+ `REVISE`. A gate that could not be run at all is recorded as `PENDING`, which
42
+ never counts as `PASS`.
@@ -46,7 +46,7 @@ mode: approval-gated
46
46
 
47
47
  ## /qfai-implement — Implement a business flow
48
48
 
49
- [DRIFT-PROTOCOL:MANDATORY]
49
+ [DRIFT-PROTOCOL:REQUIRED]
50
50
 
51
51
  Run the entry check of
52
52
  `.qfai/assistant/rule/shared-skill-operating-baseline.md#workflow-run-entry-check-mandatory`
@@ -86,6 +86,11 @@ design. They are written by the `write-acceptance-tests` route, or by
86
86
  `implement-acceptance` run alone, and the report says which BF and AC tests
87
87
  still have an empty body.
88
88
 
89
+ For that report or a handoff of unfinished BF/AC bodies, read
90
+ `.qfai/assistant/step/verify-repo-gate/STEP.md#acceptance-evidence-and-follow-up`.
91
+ It separates annotation proof, body states, actual behavior and execution,
92
+ and the remaining work's owner and completion criteria.
93
+
89
94
  Each of these runs alone, instead of that order, when the request is not new
90
95
  behaviour but a failure, a repair or upkeep:
91
96
 
@@ -124,6 +129,13 @@ review, by `implementation-reviewer`. The review also checks for code
124
129
  written only to pass a test: no value hard-coded to the test's inputs and no branch written only for the test, and a wrong test or infeasible task raised as a Change Request, not worked around
125
130
  (`.qfai/assistant/rule/test-layers.md#a-passing-test-is-not-the-solution`).
126
131
 
132
+ The review also checks that the
133
+ change adds test files sized like their neighbours, commits no scratch checks,
134
+ follows § 4 on unrequested fixes, including its exception for a necessary fix
135
+ and reporting requirement, and states any assumption it built on
136
+ (`.qfai/assistant/rule/test-layers.md#test-suite-sizing`,
137
+ `.agents/rules/minimal-implementation.md` § 4).
138
+
127
139
  ## Completion
128
140
 
129
141
  The invocation completes on the gate of its last step once
@@ -132,9 +144,10 @@ every finding of its one review is fixed or answered. Invoked by name, it runs
132
144
  completion; when that fresh validate result has no test-obligation EX finding
133
145
  for this BF, the invocation reports "nothing to do", and reads or writes no
134
146
  ledger status. Inside a route it runs no validate: the verify stage does.
135
- The report ends with a question listing the next actions, `/qfai-verify`
136
- recommended, as `.agents/rules/user-questions.md` § 6 sets out.
137
- Under a no-question mode, list them in the report instead.
147
+ When the next step needs the user's answer, ask a question listing the next
148
+ actions, `/qfai-verify` recommended, per `.agents/rules/user-questions.md` § 6.
149
+ Completion-only reports ask nothing. Under a no-question mode, list remaining
150
+ actions instead.
138
151
 
139
152
  ## Default Autopilot Policy
140
153
 
@@ -4,6 +4,15 @@ Acceptance tests that need an authenticated actor pay for the sign-in once per w
4
4
  per test. This file is the rule set. It is prose guidance — it adds no validator, no finding code,
5
5
  no test layer and no annotation token, and nothing here is checked by a tool.
6
6
 
7
+ ## Contents
8
+
9
+ - Scope
10
+ - Not dogfooded here
11
+ - The seven session-reuse rules
12
+ - The companion rule: a caller-injected environment is not the harness's to manage
13
+ - Script naming: adopter guidance
14
+ - A worked example, as one illustration among possible backends
15
+
7
16
  ## Scope
8
17
 
9
18
  These rules oblige the **E2E, API and Integration** layers only: the acceptance tests
@@ -6,6 +6,47 @@ Before changing a shared production module, test helper, fixture, contract, or p
6
6
 
7
7
  Do not use filename similarity as the only ownership signal. Follow imports, contract references, test fixtures, and call sites. A flow that merely happens to contain the same word is not a dependent flow.
8
8
 
9
+ ## Finding the dependents
10
+
11
+ Search from the changed files outward, not from the flows inward:
12
+
13
+ 1. Start from the files the step plans to edit. After the edit, reconcile that
14
+ list with the files changed since the branch diverged from the configured
15
+ base branch (the three-dot comparison, so a file changed only on the base
16
+ branch is not counted). List a renamed file under both its old and new path.
17
+ If the comparison cannot be computed (a shallow clone, a missing base ref,
18
+ an exported tree), the changed set is unknown: say so and treat the search
19
+ as unresolved. Never read that failure as an empty list.
20
+ 2. For a changed contract, read the `Examples` citations of its rules. Each
21
+ cited EX ID names a flow.
22
+ 3. For every other changed file, find its readers: static imports and
23
+ re-exports, followed importer by importer, and literal paths that a
24
+ production module, test or fixture loader reads. Continue through a runtime
25
+ entrypoint (a command line, an HTTP route, a spawned process) that a test
26
+ invokes by a literal name. Follow each chain until a test file is reached.
27
+ 4. Read the `QFAI:BF-`, `QFAI:AC-` and `QFAI:EX-` annotations in those test
28
+ files. A BF annotation names the flow. An AC or EX annotation names it
29
+ through its first four-digit segment: `AC-0007-0002-01` and
30
+ `EX-0007-0002-03` both give `BF-0007`. Deduplicate the flows.
31
+
32
+ Record each changed file, the readers or tests that reach it and the flows they
33
+ name.
34
+
35
+ ## When the search cannot finish
36
+
37
+ Some edges cannot be followed by reading: an import whose path is computed,
38
+ fixtures loaded by a glob, an asset read by a path built at run time, an
39
+ entrypoint reached by a computed name. Where one is left:
40
+ the dependent set is unknown, not empty.
41
+
42
+ Record each such edge with its file and the reason it could not be followed, as
43
+ an unresolved cross-flow obligation. The flows it may touch keep their evidence
44
+ until the consumers are identified and each one is revalidated below. Run the
45
+ full test suite once on the integrated tree as an additional check, and record
46
+ its command and result. A passing suite does not replace the per-flow
47
+ revalidation and does not make a stale proof current. Do not report the search
48
+ as complete while an edge is unresolved.
49
+
9
50
  ## Revalidation
10
51
 
11
52
  Run the changed example selector and the relevant tests of each dependent flow against the integrated tree. Run the scoped validation gate for each affected BF ID. Ask implementation-reviewer to judge any changed obligation and shared-code risk. A flow whose assertions or contract moved needs its own new evidence and review.
@@ -16,7 +16,12 @@ The path is relative to the project root, and the original text is copied exactl
16
16
 
17
17
  A missing import, syntax error, fixture failure, or deliberate unimplemented throw does not prove the oracle. The failure must name the example's observable behavior. A mutation in an unrelated helper only proves that helper is used.
18
18
 
19
- The falsifiability run in red-not-observable.md already supplies this proof when it tests the same predicate and selector. Reuse that run instead of mutating twice.
19
+ A proof belongs to one example.
20
+ When a mutation fails tests annotated with different examples, record each failing assertion and check which boundary it proves.
21
+ Narrow an assertion that proves another example's boundary, or have `/qfai-sdd` settle an unclear boundary in the examples.
22
+ A shared predicate may fail several tests whose assertions independently prove their own examples.
23
+
24
+ The falsifiability run recorded for an example that production already satisfies already supplies this proof when it tests the same predicate and selector. Reuse that run instead of mutating twice.
20
25
 
21
26
  ## Weak oracles
22
27
 
@@ -10,7 +10,15 @@ For each candidate item, name its production files, test files, contracts, fixtu
10
10
 
11
11
  Deny parallel dispatch when two items write the same shared fixture or mock file, or mutate the same fixture instance. A shared fixture module that both items only read as-is does not by itself deny parallel dispatch.
12
12
 
13
- Give each worker a separate worktree and an exact file ownership list. Workers do not change another worker's files or the story tree. The orchestrator integrates their results and resolves every overlap before judging either item complete.
13
+ Give each worker an exact file ownership list and a checkout assigned by the host.
14
+ Use separate worktrees when the host supports editing them; otherwise use the
15
+ existing shared-index mode in
16
+ `.qfai/assistant/rule/workflow.md#concurrency-stage-independent-mandatory`.
17
+ Creating a worktree does not grant edit permission. For a refused edit, follow
18
+ `.qfai/assistant/rule/shared-skill-delegation-baseline.md#worker-edit-boundary`.
19
+ Workers do not change another worker's files or the story tree. The orchestrator
20
+ integrates their results and resolves every overlap before judging either item
21
+ complete.
14
22
 
15
23
  ## Integration gate
16
24
 
@@ -6,8 +6,54 @@ A RED observation belongs to one example and one test selector. The test must lo
6
6
 
7
7
  A collection error, import error, syntax error, missing fixture, timeout before the assertion, or unconditional throw is a missing seam. Repair the seam and repeat RED before production behavior is added.
8
8
 
9
+ ### Selected-case execution
10
+
11
+ For each focused Red, Green and Refactor invocation, keep this human receipt
12
+ under the target example in the existing stage report:
13
+
14
+ - The exact command with argument boundaries, cwd, file selection and case
15
+ selector. Preserve the Standard Test command's quoted arguments; a name
16
+ pattern does not select files.
17
+ - The actual runtime version, reporter, input revision and raw output/log
18
+ reference. Explain intentional input changes between invocations.
19
+ - The target EX, test source declaration and full file/parent/case identity.
20
+ Resolve duplicate short names through their full hierarchy; account for the
21
+ runner's actual parent selection rather than assuming a leaf-only pattern
22
+ runs every nesting shape.
23
+ - Evidence that this selected case's body executed, linked to its actual
24
+ terminal result. Retain skip, TODO, cancellation, interruption and any
25
+ expected-failure inversion explicitly.
26
+ - Process exit, aggregate counts and file/container results, apart from that
27
+ case evidence. An annotation and static scanner linkage prove a declaration,
28
+ not runtime execution or a behavioral result.
29
+
30
+ Compare actual TAP start and terminal records, spec named results or JUnit
31
+ nodes with the declared target and its full hierarchy. A TAP label, spec glyph
32
+ or JUnit testcase can belong to a container; none alone proves the selected
33
+ leaf body ran. Dots, coverage and summaries alone are also insufficient. If
34
+ output is unfamiliar, incomplete or cannot identify the selected case, retain
35
+ it, name the missing observation and obtain supported case-level evidence.
36
+ Do not guess a parser or invent a receipt format.
37
+
38
+ Zero selected executions, skip, TODO, cancellation, interruption or missing
39
+ identifiable body evidence cannot close a phase, even with exit zero or a
40
+ passing file/container. Correct selection or observation and repeat the
41
+ focused invocation. Failure of a parent, another case, an import or an
42
+ unconditional throw is not the selected assertion's ordinary RED. An
43
+ expected-failure inversion is recorded separately; its reported pass is not
44
+ ordinary behavior success. Existing approved alternative RED routes remain
45
+ available.
46
+
47
+ Ordinary RED reaches and fails the selected intended assertion or expected
48
+ exception on its stated behavior. GREEN and Refactor must observe that same
49
+ selected behavior succeeding on the intended input. Do not reuse another
50
+ case's result or a prior input revision's result as proof for this invocation.
51
+ The normal verify run establishes full collection coverage; no extra full suite is
52
+ required for each focused cycle. This receipt adds no ledger, JSON field,
53
+ gate status, runtime parser or runner.
54
+
9
55
  ## Assertion control
10
56
 
11
57
  Temporarily neutralize only the example assertion while keeping the test compilable and runnable. The same command must pass. Capture the changed lines and result, then restore the assertion before recording RED. This control shows that the reported failure came from the assertion.
12
58
 
13
- If a seam is needed to reach the assertion, add only that seam and record its limit. A seam cannot implement the behavior that the example is intended to test. Where production already satisfies the example, use red-not-observable.md and its falsifiability proof.
59
+ If a seam is needed to reach the assertion, add only that seam and record its limit. A seam cannot implement the behavior that the example is intended to test. Where production already satisfies the example, use the falsifiability route for existing behavior and its falsifiability proof.
@@ -5,6 +5,7 @@
5
5
  Read the UI surface paths `uiux.surfacePaths` declares in qfai.config.yaml, and resolve paths.contractsDir from the same file. Read every UI contract under its ui/ directory, and the root DESIGN.md if present for the brand tokens.
6
6
  When a prototyping loop ran in this checkout, read its handoff at .qfai/prototype/final/handoff.json: the final prototype, its procurement and the implementation notes.
7
7
  Read the flow, story, acceptance criterion, and example that the implementation changes.
8
+ For each screen the change renders, read its `supplements` and `structure` in the UI contract before adding text: the screen shows its title, group headings, labels and declared supplements, and no other text.
8
9
 
9
10
  ## Routing
10
11
 
@@ -13,9 +14,7 @@ production or test change implements behavior described by a UI contract, or a c
13
14
  surface path. Follow imports, component use, and contract references to check a changed path. A change to a shared
14
15
  component is UI affecting when a rendered surface consumes it.
15
16
 
16
- Match declared paths after normalizing separators to forward slashes. A pattern with two stars spans zero or more path
17
- segments; one star stays in one segment; a question mark matches one character. Matching is case-sensitive, including
18
- dot-prefixed segments. If `uiux.surfacePaths` is absent or the path relationship is uncertain, use the observed
17
+ If `uiux.surfacePaths` is absent or the path relationship is uncertain, use the observed
19
18
  behavior and UI contracts; route an unresolved case as UI affecting and record the uncertainty for
20
19
  product-surface-reviewer. Do not infer that a change has no UI effect from its directory name alone.
21
20
 
@@ -24,3 +23,5 @@ product-surface-reviewer. Do not infer that a change has no UI effect from its d
24
23
  For a UI affecting example, report the screen state, action, expected and observed result, and a capture or rendered artifact. The artifact must identify the source revision. In the stage review, product-surface-reviewer judges each UI affecting example, its UI contracts, and its captured state. The review verdict refers to that revision.
25
24
 
26
25
  If the implementation or capture changes after the verdict, refresh the capture and review. A passing code test cannot substitute for the visual and interaction evidence that the acceptance criterion requires.
26
+
27
+ Capture each declared task at a desktop width and a narrow width, in the normal state and in every declared empty, error, loading and success state the screen has. A text the contract declares that the capture lacks, or a text the capture shows that the contract does not declare, is a finding.
@@ -12,7 +12,7 @@ mode: execution-focused
12
12
 
13
13
  ## /qfai-maintain - Non-normative edits
14
14
 
15
- [DRIFT-PROTOCOL:MANDATORY]
15
+ [DRIFT-PROTOCOL:REQUIRED]
16
16
 
17
17
  Run the entry check of
18
18
  `.qfai/assistant/rule/shared-skill-operating-baseline.md#workflow-run-entry-check-mandatory`
@@ -57,9 +57,9 @@ Markdown and link checks run over the changed files, each exiting 0. A check the
57
57
  project does not have is UNRUN, not a pass.
58
58
 
59
59
  The stage returns what `maintain-edit` lists under "What the stage returns".
60
- The report ends with a question listing the next actions, as
61
- `.agents/rules/user-questions.md` § 6 sets out.
62
- Under a no-question mode, list them in the report instead.
60
+ Ask for the next action only when proceeding requires the user's answer, as
61
+ `.agents/rules/user-questions.md` § 6 sets out. A completion-only report needs
62
+ no question. Under a no-question mode, list any remaining actions instead.
63
63
 
64
64
  ## Default Autopilot Policy
65
65
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: qfai-migration-v1-to-v2
3
3
  title: QFAI 1.x to 2.x Migration
4
- description: "Move an existing QFAI 1.x spec-pack project to the 2.x story-based spec tree using the bundled steps, then install and check the free-text entry."
4
+ description: "Move an existing QFAI 1.x spec-pack project to the 2.x story-based spec tree using the bundled steps, then install and check the free-text entry. Use when asked to migrate a project that still holds QFAI 1.x spec packs."
5
5
  allowed-tools: [Read, Glob, Write, Edit, Bash]
6
6
  roles:
7
7
  [
@@ -16,7 +16,7 @@ routing-profile: architecture-heavy
16
16
 
17
17
  ## /qfai-migration-v1-to-v2
18
18
 
19
- [DRIFT-PROTOCOL:MANDATORY]
19
+ [DRIFT-PROTOCOL:REQUIRED]
20
20
 
21
21
  ## User Questions (AskUserQuestion Protocol)
22
22
 
@@ -24,10 +24,16 @@ Follow `.qfai/assistant/rule/shared-skill-operating-baseline.md#user-questions-a
24
24
  for every user question. With `--auto`, ask nothing and record
25
25
  explicit assumptions in the migration report.
26
26
 
27
- Read `references/migration-guide.md` before changing the project. Run this
28
- skill from the project root, where `qfai.config.yaml` and a locally installed
29
- `qfai` package are available. The twelve scripts use the installed package.
30
- They do not add a `qfai` subcommand or make network calls.
27
+ Read `references/migration-guide.md` before changing the project.
28
+
29
+ Read `references/migration-placement.md` when you write `plan.yaml`, when a
30
+ step reports a retired configuration key, and when a step lists a document that
31
+ does not fit its template's shape. It holds the plan format, the retired keys,
32
+ the contract numbers, the business rules and what each document keeps.
33
+
34
+ Run this skill from the project root, where `qfai.config.yaml` and a locally
35
+ installed `qfai` package are available. The twelve scripts use the installed
36
+ package. They do not add a `qfai` subcommand or make network calls.
31
37
 
32
38
  The skill serves two runs, and the steps tell them apart from the project
33
39
  itself:
@@ -60,7 +66,7 @@ names the directory and leaves the check to the person.
60
66
 
61
67
  Complete the launcher preflight in `.qfai/assistant/rule/shared-skill-operating-baseline.md`
62
68
  before running a CLI command.
63
- Use `rule/shared-skill-delegation-baseline.md` to route the declared roles and
69
+ Use `.qfai/assistant/rule/shared-skill-delegation-baseline.md` to route the declared roles and
64
70
  keep authors separate from reviewers.
65
71
 
66
72
  ### Procedure
@@ -81,7 +87,7 @@ keep authors separate from reviewers.
81
87
  each old business rule's destination contract. Name that contract by its
82
88
  current path under `cli/`, `api/`, `db/`, `ui/` or `design/` of the
83
89
  contracts directory: step 3 gives every contract a new ID and file name,
84
- and later steps find it from that path. Use the format in the guide. The plan
90
+ and later steps find it from that path. Use the format in `references/migration-placement.md`. The plan
85
91
  may be written before step 1, from the old contract paths.
86
92
  2. Before the first real run, tell the person that the migration deletes
87
93
  every 1.x file that has no destination and replaces every customised
@@ -112,7 +118,7 @@ keep authors separate from reviewers.
112
118
  5. Resolve every reported item with the person responsible for the content.
113
119
  Preserve any item the scripts could not place. Before step 4 writes
114
120
  `id-map.json`, settle an example that cites several criteria and a rule that
115
- binds no contract through the plan keys the guide names. After it, do not
121
+ binds no contract through the plan keys `references/migration-placement.md` names. After it, do not
116
122
  change `plan.yaml` to move a mapped item. Place remaining content in the new
117
123
  tree through `/qfai-sdd`, and finish each listed item as the guide's
118
124
  "Resolve the reports" section says.
@@ -175,7 +181,7 @@ saying it is already done. The complete write boundary is in
175
181
  The architecture reviewer checks the old-to-new mapping and preservation of
176
182
  unplaced content. The reviewer checks the twelve reports, rerun
177
183
  behavior, and validation result. Enforce the Drift Protocol and
178
- `rule/test-layers.md` when reviewing test obligations. Counts and effort
184
+ `.qfai/assistant/rule/test-layers.md` when reviewing test obligations. Counts and effort
179
185
  estimates are signals, not gates. Record PASS or REVISE on the final tree.
180
186
 
181
187
  ## Default Autopilot Policy