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.
- package/README.md +327 -55
- package/assets/defaults/agent-routing/qfai-triage.yml +9 -0
- package/assets/defaults/workflows/change-tooling.yml +0 -4
- package/assets/defaults/workflows/run-owned-cleanup.yml +12 -0
- package/assets/init/.claude/settings.json +27 -9
- package/assets/init/.codex/hooks.json +20 -8
- package/assets/init/.qfai/assistant/agent/frontend-engineer.md +5 -0
- package/assets/init/.qfai/assistant/agent/implementation-reviewer.md +14 -1
- package/assets/init/.qfai/assistant/agent/product-experience-architect.md +4 -0
- package/assets/init/.qfai/assistant/agent/product-surface-reviewer.md +7 -0
- package/assets/init/.qfai/assistant/agent/qa-gatekeeper.md +29 -0
- package/assets/init/.qfai/assistant/agent/requirements-analyst.md +8 -0
- package/assets/init/.qfai/assistant/rule/communication.md +18 -8
- package/assets/init/.qfai/assistant/rule/constitution.md +5 -4
- package/assets/init/.qfai/assistant/rule/drift-protocol.md +72 -5
- package/assets/init/.qfai/assistant/rule/references/asset-authoring.md +72 -0
- package/assets/init/.qfai/assistant/rule/references/context-summary.md +30 -0
- package/assets/init/.qfai/assistant/rule/references/gate-failure-autorepair.md +42 -0
- package/assets/init/.qfai/assistant/rule/references/griller-recommendations.md +23 -0
- package/assets/init/.qfai/assistant/rule/references/host-backstops.md +60 -0
- package/assets/init/.qfai/assistant/rule/references/placeholder-scan.md +25 -0
- package/assets/init/.qfai/assistant/rule/references/reviewer-findings.md +41 -0
- package/assets/init/.qfai/assistant/rule/references/reviewer-remit.md +35 -0
- package/assets/init/.qfai/assistant/rule/references/worker-edit-boundary.md +48 -0
- package/assets/init/.qfai/assistant/rule/shared-skill-delegation-baseline.md +39 -162
- package/assets/init/.qfai/assistant/rule/shared-skill-operating-baseline.md +14 -145
- package/assets/init/.qfai/assistant/rule/stage-cost.md +1 -1
- package/assets/init/.qfai/assistant/rule/test-layers.md +42 -0
- package/assets/init/.qfai/assistant/rule/ui-definition-protocol.md +6 -1
- package/assets/init/.qfai/assistant/skill/qfai-configure/SKILL.md +11 -45
- package/assets/init/.qfai/assistant/skill/qfai-configure/references/principles.md +25 -0
- package/assets/init/.qfai/assistant/skill/qfai-discussion/SKILL.md +1 -1
- package/assets/init/.qfai/assistant/skill/qfai-discussion/references/discussion-completion-matrix.md +12 -9
- package/assets/init/.qfai/assistant/skill/qfai-discussion/references/ui-bearing-playbook.md +2 -4
- package/assets/init/.qfai/assistant/skill/qfai-discussion/references/ui_ux/platform_baselines.md +11 -0
- package/assets/init/.qfai/assistant/skill/qfai-discussion/references/ui_ux/review_audit_playbook.md +11 -0
- package/assets/init/.qfai/assistant/skill/qfai-discussion/references/ui_ux_best_practices.md +13 -42
- package/assets/init/.qfai/assistant/skill/qfai-discussion/templates/uiux/00_index.md +0 -16
- package/assets/init/.qfai/assistant/skill/qfai-grill/SKILL.md +1 -1
- package/assets/init/.qfai/assistant/skill/qfai-grilling/SKILL.md +16 -88
- package/assets/init/.qfai/assistant/skill/qfai-grilling/references/delegated-session.md +58 -0
- package/assets/init/.qfai/assistant/skill/qfai-grilling/references/session-record.md +42 -0
- package/assets/init/.qfai/assistant/skill/qfai-implement/SKILL.md +17 -4
- package/assets/init/.qfai/assistant/skill/qfai-implement/references/credential-reuse.md +9 -0
- package/assets/init/.qfai/assistant/skill/qfai-implement/references/cross-spec-ownership.md +41 -0
- package/assets/init/.qfai/assistant/skill/qfai-implement/references/oracle-strength.md +6 -1
- package/assets/init/.qfai/assistant/skill/qfai-implement/references/parallelization-policy.md +9 -1
- package/assets/init/.qfai/assistant/skill/qfai-implement/references/red-admissibility.md +47 -1
- package/assets/init/.qfai/assistant/skill/qfai-implement/references/ui-affecting.md +4 -3
- package/assets/init/.qfai/assistant/skill/qfai-maintain/SKILL.md +4 -4
- package/assets/init/.qfai/assistant/skill/qfai-migration-v1-to-v2/SKILL.md +16 -10
- package/assets/init/.qfai/assistant/skill/qfai-migration-v1-to-v2/references/migration-guide.md +10 -260
- package/assets/init/.qfai/assistant/skill/qfai-migration-v1-to-v2/references/migration-placement.md +273 -0
- package/assets/init/.qfai/assistant/skill/qfai-prototyping/SKILL.md +5 -4
- package/assets/init/.qfai/assistant/skill/qfai-prototyping/references/design-md-spec.md +14 -5
- package/assets/init/.qfai/assistant/skill/qfai-prototyping/references/generator-prompt.md +10 -0
- package/assets/init/.qfai/assistant/skill/qfai-prototyping/references/handoff.md +1 -1
- package/assets/init/.qfai/assistant/skill/qfai-prototyping/references/iteration-loop.md +3 -4
- package/assets/init/.qfai/assistant/skill/qfai-prototyping/references/review-payload-schema.md +12 -5
- package/assets/init/.qfai/assistant/skill/qfai-prototyping/references/reviewer-prompt.md +33 -4
- package/assets/init/.qfai/assistant/skill/qfai-run/SKILL.md +34 -36
- package/assets/init/.qfai/assistant/skill/qfai-run/references/evidence-delivery.md +322 -0
- package/assets/init/.qfai/assistant/skill/qfai-run/references/extraction.md +67 -24
- package/assets/init/.qfai/assistant/skill/qfai-run/references/operator-screens.md +246 -5
- package/assets/init/.qfai/assistant/skill/qfai-run/references/plan.md +29 -5
- package/assets/init/.qfai/assistant/skill/qfai-run/references/stage-points.md +43 -0
- package/assets/init/.qfai/assistant/skill/qfai-sdd/SKILL.md +5 -4
- package/assets/init/.qfai/assistant/skill/qfai-sdd/references/concrete-abstract-cycle.md +10 -1
- package/assets/init/.qfai/assistant/skill/qfai-sdd/references/contract-artifact-rules.md +22 -9
- package/assets/init/.qfai/assistant/skill/qfai-sdd/references/design-anti-patterns.md +41 -6
- package/assets/init/.qfai/assistant/skill/qfai-sdd/references/design-md-authoring.md +11 -5
- package/assets/init/.qfai/assistant/skill/qfai-sdd/references/design-md-brand-catalog.md +17 -2
- package/assets/init/.qfai/assistant/skill/qfai-sdd/references/requirements-decomposition.md +10 -2
- package/assets/init/.qfai/assistant/skill/qfai-sdd/references/sdd-execution-playbook.md +34 -9
- package/assets/init/.qfai/assistant/skill/qfai-sdd/references/sdd-phase-checklists.md +4 -4
- package/assets/init/.qfai/assistant/skill/qfai-sdd/references/sdd-quality-gate.md +2 -2
- package/assets/init/.qfai/assistant/skill/qfai-sdd/references/sdd-triage.md +177 -7
- package/assets/init/.qfai/assistant/skill/qfai-sdd/references/spec-traceability-rules.md +29 -5
- package/assets/init/.qfai/assistant/skill/qfai-sdd/references/ui-contract-guide.md +130 -1
- package/assets/init/.qfai/assistant/skill/qfai-sdd/references/ui-design-contract-normalization.md +4 -30
- package/assets/init/.qfai/assistant/skill/qfai-sdd/templates/change-request.md +39 -2
- package/assets/init/.qfai/assistant/skill/qfai-sdd/templates/contracts/db-contract.sample.sql +2 -2
- package/assets/init/.qfai/assistant/skill/qfai-sdd/templates/contracts/ui-contract.sample.yaml +52 -5
- package/assets/init/.qfai/assistant/skill/qfai-sdd/templates/spec/03_contract/cli/cli-NNNN-title.md +2 -2
- package/assets/init/.qfai/assistant/skill/qfai-sdd/templates/spec/03_contract/tech.md +1 -1
- package/assets/init/.qfai/assistant/skill/qfai-sdd/templates/spec/decisions.md +7 -0
- package/assets/init/.qfai/assistant/skill/qfai-triage/SKILL.md +30 -20
- package/assets/init/.qfai/assistant/skill/qfai-verify/SKILL.md +6 -5
- package/assets/init/.qfai/assistant/skill/qfai-verify/references/context-load.md +9 -6
- package/assets/init/.qfai/assistant/skill/qfai-verify/references/verify-output-contract.md +92 -13
- package/assets/init/.qfai/assistant/skill/web-research/SKILL.md +37 -31
- package/assets/init/.qfai/assistant/skill/web-research/mcp-templates/brave-search/config.toml +2 -4
- package/assets/init/.qfai/assistant/skill/web-research/mcp-templates/brave-search/mcp-config.json +9 -5
- package/assets/init/.qfai/assistant/skill/web-research/mcp-templates/firecrawl/.mcp.json +1 -2
- package/assets/init/.qfai/assistant/skill/web-research/mcp-templates/firecrawl/config.toml +3 -3
- package/assets/init/.qfai/assistant/skill/web-research/mcp-templates/firecrawl/mcp-config.json +11 -8
- package/assets/init/.qfai/assistant/skill/web-research/mcp-templates/playwright/config.toml +1 -1
- package/assets/init/.qfai/assistant/skill/web-research/mcp-templates/playwright/mcp-config.json +7 -3
- package/assets/init/.qfai/assistant/step/common-design-md/STEP.md +17 -7
- package/assets/init/.qfai/assistant/step/common-gate-run/STEP.md +126 -13
- package/assets/init/.qfai/assistant/step/common-review-cycle/STEP.md +3 -2
- package/assets/init/.qfai/assistant/step/discussion-pack/STEP.md +1 -0
- package/assets/init/.qfai/assistant/step/discussion-research/STEP.md +2 -0
- package/assets/init/.qfai/assistant/step/discussion-uiux/STEP.md +12 -4
- package/assets/init/.qfai/assistant/step/implement-backport/STEP.md +1 -1
- package/assets/init/.qfai/assistant/step/implement-benchmark/STEP.md +7 -4
- package/assets/init/.qfai/assistant/step/implement-dep-bump/STEP.md +11 -1
- package/assets/init/.qfai/assistant/step/implement-diagnose/STEP.md +2 -0
- package/assets/init/.qfai/assistant/step/implement-oracle-parity/STEP.md +2 -2
- package/assets/init/.qfai/assistant/step/implement-quarantine/STEP.md +3 -3
- package/assets/init/.qfai/assistant/step/implement-refactor/STEP.md +2 -2
- package/assets/init/.qfai/assistant/step/implement-regression-fix/STEP.md +4 -3
- package/assets/init/.qfai/assistant/step/implement-retire/STEP.md +6 -3
- package/assets/init/.qfai/assistant/step/implement-revert/STEP.md +4 -3
- package/assets/init/.qfai/assistant/step/implement-scaffold/STEP.md +3 -3
- package/assets/init/.qfai/assistant/step/implement-seam/STEP.md +9 -6
- package/assets/init/.qfai/assistant/step/implement-stress-harness/STEP.md +1 -1
- package/assets/init/.qfai/assistant/step/implement-sweep/STEP.md +4 -3
- package/assets/init/.qfai/assistant/step/implement-tdd/STEP.md +42 -6
- package/assets/init/.qfai/assistant/step/implement-test-fix/STEP.md +2 -0
- package/assets/init/.qfai/assistant/step/implement-tooling/STEP.md +22 -2
- package/assets/init/.qfai/assistant/step/maintain-edit/STEP.md +18 -14
- package/assets/init/.qfai/assistant/step/prototyping-grill/STEP.md +4 -3
- package/assets/init/.qfai/assistant/step/prototyping-loop/STEP.md +4 -0
- package/assets/init/.qfai/assistant/step/prototyping-preflight/STEP.md +1 -3
- package/assets/init/.qfai/assistant/step/sdd-contract/STEP.md +11 -0
- package/assets/init/.qfai/assistant/step/sdd-flow/STEP.md +4 -0
- package/assets/init/.qfai/assistant/step/sdd-gate/STEP.md +4 -0
- package/assets/init/.qfai/assistant/step/sdd-story/STEP.md +10 -0
- package/assets/init/.qfai/assistant/step/sdd-triage/STEP.md +37 -11
- package/assets/init/.qfai/assistant/step/triage-answer/STEP.md +5 -4
- package/assets/init/.qfai/assistant/step/triage-close/STEP.md +33 -23
- package/assets/init/.qfai/assistant/step/triage-cluster/STEP.md +5 -3
- package/assets/init/.qfai/assistant/step/triage-decompose/STEP.md +2 -0
- package/assets/init/.qfai/assistant/step/triage-dedupe/STEP.md +4 -0
- package/assets/init/.qfai/assistant/step/triage-handoff/STEP.md +13 -4
- package/assets/init/.qfai/assistant/step/triage-investigate/STEP.md +8 -5
- package/assets/init/.qfai/assistant/step/triage-owned-cleanup/STEP.md +86 -0
- package/assets/init/.qfai/assistant/step/triage-request-info/STEP.md +2 -0
- package/assets/init/.qfai/assistant/step/triage-security-intake/STEP.md +6 -3
- package/assets/init/.qfai/assistant/step/verify-change-note/STEP.md +9 -5
- package/assets/init/.qfai/assistant/step/verify-commit/STEP.md +39 -6
- package/assets/init/.qfai/assistant/step/verify-external/STEP.md +5 -2
- package/assets/init/.qfai/assistant/step/verify-qfai-gate/STEP.md +10 -2
- package/assets/init/.qfai/assistant/step/verify-release-notes/STEP.md +1 -0
- package/assets/init/.qfai/assistant/step/verify-repeat-run/STEP.md +7 -5
- package/assets/init/.qfai/assistant/step/verify-repo-gate/STEP.md +136 -28
- package/assets/init/.qfai/waivers.yml +1 -1
- package/assets/init/root/.agents/rules/ai-readable-markdown.md +98 -0
- package/assets/init/root/.agents/rules/api-budget.md +191 -13
- package/assets/init/root/.agents/rules/documentation-clarity.md +192 -35
- package/assets/init/root/.agents/rules/grilling.md +4 -4
- package/assets/init/root/.agents/rules/interface-clarity.md +5 -5
- package/assets/init/root/.agents/rules/minimal-implementation.md +11 -3
- package/assets/init/root/.agents/rules/reminders.json +27 -14
- package/assets/init/root/.agents/rules/session-feedback.md +136 -0
- package/assets/init/root/.agents/rules/temporary-files.md +47 -5
- package/assets/init/root/.agents/rules/untrusted-content.md +3 -3
- package/assets/init/root/.agents/rules/user-questions.md +74 -36
- package/assets/init/root/.gitattributes +9 -0
- package/assets/init/root/.github/workflows/qfai-docs.yml +44 -12
- package/assets/init/root/.github/workflows/qfai-tests.yml +58 -15
- package/assets/init/root/.github/workflows/qfai-validate.yml +49 -42
- package/assets/init/root/AGENTS.md +23 -21
- package/assets/mdschema/story/03_contract/tech.mdschema.yml +7 -3
- package/assets/sandbox-templates/default-deny.yaml +9 -5
- package/assets/schemas/workflow/extraction.schema.json +85 -5
- package/assets/schemas/workflow/plan.schema.json +9 -2
- package/assets/scripts/check-mdschema.mjs +172 -5
- package/assets/uix-rev/comparison-review.md +1 -1
- package/assets/uix-rev/contracts-review.md +1 -2
- package/dist/cli/index.cjs +6499 -7688
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.mjs +6449 -7641
- package/dist/cli/index.mjs.map +1 -1
- package/dist/index.cjs +5548 -7823
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +40 -666
- package/dist/index.d.ts +40 -666
- package/dist/index.mjs +5397 -7648
- package/dist/index.mjs.map +1 -1
- package/docs/MIGRATION-2.0.0.md +1 -1
- package/package.json +5 -7
- 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:
|
|
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:
|
|
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
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
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
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
the
|
|
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.
|
|
383
|
-
|
|
384
|
-
|
|
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:
|
|
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
|
-
|
|
136
|
-
recommended,
|
|
137
|
-
Under a no-question mode, list
|
|
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
|
-
|
|
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
|
|
package/assets/init/.qfai/assistant/skill/qfai-implement/references/parallelization-policy.md
CHANGED
|
@@ -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
|
|
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
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
61
|
-
`.agents/rules/user-questions.md` § 6 sets out.
|
|
62
|
-
Under a no-question mode, list
|
|
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:
|
|
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.
|
|
28
|
-
|
|
29
|
-
`
|
|
30
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|