qfai 1.4.27 → 1.4.28

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 CHANGED
@@ -39,7 +39,7 @@ npx qfai report
39
39
  - `npx qfai doctor`
40
40
  - Diagnoses configuration discovery, path resolution, glob scanning, and `validate.json` inputs before running validate/report; use `--fail-on` to enforce failures in CI.
41
41
 
42
- ## ATDD annotation hard gate (v1.4.27)
42
+ ## ATDD annotation hard gate (v1.4.28)
43
43
 
44
44
  `qfai validate` enforces spec-to-test traceability with directory-based rules.
45
45
 
@@ -220,7 +220,7 @@ flowchart LR
220
220
  - Contracts SSOT: `.qfai/contracts/**`
221
221
  - Report outputs (`.qfai/report/**`) are derived artifacts and not SSOT.
222
222
 
223
- ## Minimal tutorial (v1.4.27)
223
+ ## Minimal tutorial (v1.4.28)
224
224
 
225
225
  1. `npx qfai init`
226
226
  2. Run `/qfai-discuss` to structure scope and open questions.
@@ -247,7 +247,7 @@ Release gate behavior:
247
247
 
248
248
  ## Continuous integration
249
249
 
250
- QFAI v1.4.27 generates integration wrappers under `.agents/**`, `.claude/**`,
250
+ QFAI v1.4.28 generates integration wrappers under `.agents/**`, `.claude/**`,
251
251
  `.github/**`, and `.codex/**`.
252
252
  It does not generate GitHub Actions workflows.
253
253
  Configure CI in your own platform and run:
@@ -8,17 +8,19 @@
8
8
 
9
9
  - .qfai/assistant/instructions/\*
10
10
  - .qfai/assistant/steering/\*
11
+ - .qfai/assistant/steering/test-layers.md (US/TC/CON-API hard obligations)
11
12
  - .qfai/specs/spec-\*/delta.md (Decision Records; check rejected)
12
13
  - .qfai/specs/spec-\*/spec.md
13
- - .qfai/specs/spec-\*/scenario.feature
14
+ - Optional legacy input: `.qfai/specs/spec-*/scenario.feature`
14
15
  - .qfai/contracts/api/\*\*
15
16
  - .qfai/contracts/db/\*\*
16
17
 
17
18
  ## Deliverables (MANDATORY)
18
19
 
19
20
  - Decision Records referenced (DR-IDs) + rejected check (or RE-OPEN request)
20
- - Implementation mapping (contract/scenario -> file/function)
21
+ - Implementation mapping (contract/spec obligations -> file/function)
21
22
  - Backend code changes (minimal, traceable)
23
+ - Validation gate evidence (`qfai validate --fail-on error`) for touched scope
22
24
  - Execution proof (commands + key outputs)
23
25
  - Evidence summary for `.qfai/evidence/` (gitignored; do not commit)
24
26
 
@@ -8,16 +8,18 @@
8
8
 
9
9
  - .qfai/assistant/instructions/\*
10
10
  - .qfai/assistant/steering/\*
11
+ - .qfai/assistant/steering/test-layers.md (US/TC/CON-API hard obligations)
11
12
  - .qfai/specs/spec-\*/delta.md (Decision Records; check rejected)
12
13
  - .qfai/specs/spec-\*/spec.md
13
- - .qfai/specs/spec-\*/scenario.feature
14
+ - Optional legacy input: `.qfai/specs/spec-*/scenario.feature`
14
15
  - .qfai/contracts/ui/\*\*
15
16
 
16
17
  ## Deliverables (MANDATORY)
17
18
 
18
19
  - Decision Records referenced (DR-IDs) + rejected check (or RE-OPEN request)
19
- - Implementation mapping (contract/scenario -> file/component)
20
+ - Implementation mapping (contract/spec obligations -> file/component)
20
21
  - Frontend code changes (minimal, traceable)
22
+ - Validation gate evidence (`qfai validate --fail-on error`) for touched scope
21
23
  - Execution proof (commands + key outputs)
22
24
  - Evidence summary for `.qfai/evidence/` (gitignored; do not commit)
23
25
 
@@ -9,8 +9,9 @@
9
9
 
10
10
  - .qfai/assistant/instructions/\*
11
11
  - .qfai/assistant/steering/\*
12
+ - .qfai/assistant/steering/test-layers.md (SSOT for hard coverage obligations)
12
13
  - .qfai/specs/spec-\*/delta.md (Decision Records; check rejected)
13
- - Prompt-specific artifacts (ledgers, traceability, evidence)
14
+ - Prompt-specific artifacts (traceability, validation evidence, optional legacy scenario/ledger artifacts)
14
15
 
15
16
  ## Deliverables (MANDATORY)
16
17
 
@@ -23,7 +24,8 @@
23
24
  ## Stop conditions (Blockers)
24
25
 
25
26
  - Subagent delegation missing when required
26
- - Ledger missing or not 100% implemented
27
+ - Validation gate evidence missing/failing (`qfai validate --fail-on error`)
28
+ - Required hard obligations in `test-layers.md` are unmet
27
29
  - Reviewer sign-off missing
28
30
  - Rejected option would be reintroduced without RE-OPEN DR
29
31
 
@@ -8,15 +8,16 @@
8
8
 
9
9
  - .qfai/assistant/instructions/\*
10
10
  - .qfai/assistant/steering/\*
11
+ - .qfai/assistant/steering/test-layers.md (US/TC/CON-API hard obligations)
11
12
  - .qfai/specs/spec-\*/delta.md (Decision Records; check rejected)
12
13
  - .qfai/specs/spec-\*/spec.md
13
- - .qfai/specs/spec-\*/scenario.feature
14
- - Coverage ledgers and test outputs
14
+ - Test outputs and coverage tooling outputs
15
+ - Optional legacy artifacts: `.qfai/specs/spec-*/scenario.feature`, coverage ledgers
15
16
 
16
17
  ## Deliverables (MANDATORY)
17
18
 
18
19
  - Decision Records referenced (DR-IDs) + rejected check (or RE-OPEN request)
19
- - Traceability audit (Req/BR/AC/CASE/SC -> tests)
20
+ - Traceability audit (`US/TC/CON-API` -> tests + runtime/coverage evidence)
20
21
  - Gap list with explicit rationale
21
22
  - Noise control notes (aggregation policy)
22
23
  - Evidence summary for `.qfai/evidence/` (gitignored; do not commit)
@@ -26,7 +27,7 @@
26
27
  - Rejected option would be reintroduced without RE-OPEN DR
27
28
  - Evidence is missing or incomplete
28
29
  - "Done" claimed without runtime evidence
29
- - Coverage ledger missing or inconsistent
30
+ - Validation gate evidence missing/failing (`qfai validate --fail-on error`) or required `US/TC/CON-API` obligations are unmet
30
31
 
31
32
  ## Sign-off checklist (Check Last)
32
33
 
@@ -39,7 +40,7 @@
39
40
 
40
41
  - Decision Records (DR-IDs) / rejected check
41
42
  - Findings
42
- - Traceability audit
43
+ - Traceability audit (`US/TC/CON-API` -> tests)
43
44
  - Gap list
44
45
  - Evidence summary
45
46
  - Open Questions / Risks
@@ -12,9 +12,10 @@
12
12
  - .qfai/assistant/steering/test-layers.md (test-layer definitions + required coverage expectations)
13
13
  - .qfai/specs/spec-\*/delta.md (Decision Records; check rejected)
14
14
  - QA evidence summary under `.qfai/evidence/` (gitignored)
15
- - Coverage ledgers and traceability reports
15
+ - `qfai validate --fail-on error` evidence (`.qfai/report/validate.json` / logs)
16
+ - Traceability reports and coverage tooling outputs (legacy ledgers optional when present)
16
17
  - .qfai/specs/spec-\*/spec.md
17
- - .qfai/specs/spec-\*/scenario.feature
18
+ - Optional legacy input: `.qfai/specs/spec-*/scenario.feature`
18
19
 
19
20
  ## Cross-cutting review: Drift Protocol (MANDATORY)
20
21
 
@@ -8,23 +8,25 @@
8
8
 
9
9
  - .qfai/assistant/instructions/\*
10
10
  - .qfai/assistant/steering/\*
11
+ - .qfai/assistant/steering/test-layers.md (US/TC/CON-API hard obligations)
11
12
  - .qfai/specs/spec-\*/delta.md (Decision Records; check rejected)
12
- - .qfai/specs/spec-\*/scenario.feature
13
13
  - .qfai/specs/spec-\*/spec.md
14
- - Existing test files and coverage ledgers
14
+ - Existing test files and coverage tooling outputs
15
+ - Optional legacy artifacts: `.qfai/specs/spec-*/scenario.feature`, coverage ledgers
15
16
 
16
17
  ## Deliverables (MANDATORY)
17
18
 
18
19
  - Decision Records referenced (DR-IDs) + rejected check (or RE-OPEN request)
19
20
  - Automation plan per layer (unit/component/integration/api/e2e)
20
- - Coverage ledger is 100% implemented (blocked/skipped require DR + approval)
21
+ - Coverage obligations mapped to `US/TC/CON-API` with evidence from tests/coverage tooling
22
+ - Validation gate evidence (`qfai validate --fail-on error`) with `error=0`
21
23
  - Execution proof (commands + key outputs)
22
24
  - Evidence summary for `.qfai/evidence/` (gitignored; do not commit)
23
25
 
24
26
  ## Stop conditions (Blockers)
25
27
 
26
28
  - Rejected option would be reintroduced without RE-OPEN DR
27
- - Scenarios cannot be mapped to layers
29
+ - `US/TC/CON-API` obligations cannot be mapped to test layers
28
30
  - Test stack is absent and cannot be bootstrapped via policy
29
31
  - Evidence is missing or incomplete
30
32
  - Scope ambiguity prevents a safe decision
@@ -42,7 +44,7 @@
42
44
  - Findings
43
45
  - Decisions
44
46
  - Proposed tests (files/sections)
45
- - Coverage ledger summary
47
+ - Coverage/obligation summary (`US/TC/CON-API`, tool coverage evidence)
46
48
  - Evidence summary
47
49
  - Open Questions / Risks
48
50
  - Confidence (High/Medium/Low + reason)
@@ -8,15 +8,16 @@
8
8
 
9
9
  - .qfai/assistant/instructions/\*
10
10
  - .qfai/assistant/steering/\*
11
+ - .qfai/assistant/steering/test-layers.md (scope and hard obligations)
11
12
  - .qfai/specs/spec-\*/delta.md (Decision Records; check rejected)
12
13
  - .qfai/specs/spec-\*/spec.md
13
- - .qfai/specs/spec-\*/scenario.feature
14
- - Current unit/component test ledger
14
+ - Optional legacy input: `.qfai/specs/spec-*/scenario.feature`
15
+ - Current unit/component test outputs or coverage reports (legacy ledgers optional)
15
16
 
16
17
  ## Deliverables (MANDATORY)
17
18
 
18
19
  - Decision Records referenced (DR-IDs) + rejected check (or RE-OPEN request)
19
- - Scope ledger with explicit inclusions/exclusions
20
+ - Scope matrix with explicit inclusions/exclusions
20
21
  - Review of test scope vs requirements/contracts
21
22
  - Evidence summary for `.qfai/evidence/` (gitignored; do not commit)
22
23
 
@@ -38,7 +39,7 @@
38
39
 
39
40
  - Decision Records (DR-IDs) / rejected check
40
41
  - Findings
41
- - Scope ledger
42
+ - Scope matrix
42
43
  - Exclusions rationale
43
44
  - Evidence summary
44
45
  - Open Questions / Risks
@@ -38,7 +38,7 @@ When unsure, read inputs in this order:
38
38
  - P1: `.qfai/assistant/instructions/*`
39
39
  - P2: `.qfai/assistant/steering/*`
40
40
  - P3: `.qfai/specs/<spec-id>/delta.md` (Decision Records; if no spec yet, state "not applicable")
41
- - P4: other artifacts (spec.md, scenario.feature, contracts, evidence)
41
+ - P4: other artifacts (spec.md, contracts, evidence, optional legacy `scenario.feature` / coverage ledgers)
42
42
 
43
43
  ## Sub-agent Delegation (MANDATORY)
44
44
 
@@ -85,7 +85,8 @@ Every major artifact in this stage MUST include a `## Work Orders Summary` secti
85
85
  - Final completion gate MUST be delegated to an independent Reviewer sub-agent.
86
86
  - Reviewer checks (minimum):
87
87
  - Required roles were delegated (no orchestrator self-authoring).
88
- - DoD satisfied (coverage ledger, gates, evidence, DR-IDs).
88
+ - DoD satisfied (validate gate, test-layer hard gate, evidence, DR-IDs).
89
+ - Validate gate evidence exists: `qfai validate --fail-on error` completed with `error=0`.
89
90
  - **Drift Protocol enforced**:
90
91
  - No upstream artifact edits were made without an explicit user-approved Change Request.
91
92
  - If upstream changes exist, the correct owner skill was re-run after approval; downstream did not patch upstream directly.
@@ -105,7 +106,8 @@ Inputs (refs):
105
106
  Constraints:
106
107
  - must: enforce Drift Protocol (no upstream edits without user approval + CR)
107
108
  - must: verify plan/test-layer adherence (`steering/test-layers.md` + plan)
108
- - must: check Coverage Ledger is 100% unless approved exception
109
+ - must: check `qfai validate --fail-on error` passes with evidence (`error=0`)
110
+ - must: enforce `.qfai/assistant/steering/test-layers.md` hard gates
109
111
  - must_not: accept test-volume ratios/floors as a hard gate
110
112
  - must_not: accept upstream edits made directly by downstream phase
111
113
  Output format:
@@ -45,7 +45,7 @@ When unsure, read inputs in this order:
45
45
  - P1: `.qfai/assistant/instructions/*`
46
46
  - P2: `.qfai/assistant/steering/*`
47
47
  - P3: `.qfai/specs/<spec-id>/delta.md` (Decision Records; if no spec yet, state "not applicable")
48
- - P4: other artifacts (spec.md, scenario.feature, contracts, evidence)
48
+ - P4: other artifacts (spec.md, contracts, evidence, optional legacy `scenario.feature` / coverage ledgers)
49
49
 
50
50
  ## Sub-agent Delegation (MANDATORY)
51
51
 
@@ -92,7 +92,8 @@ Every major artifact in this stage MUST include a `## Work Orders Summary` secti
92
92
  - Final completion gate MUST be delegated to an independent Reviewer sub-agent.
93
93
  - Reviewer checks (minimum):
94
94
  - Required roles were delegated (no orchestrator self-authoring).
95
- - DoD satisfied (coverage ledger, gates, evidence, DR-IDs).
95
+ - DoD satisfied (validate gate, test-layer hard gate, evidence, DR-IDs).
96
+ - Validate gate evidence exists: `qfai validate --fail-on error` completed with `error=0`.
96
97
  - **Drift Protocol enforced**:
97
98
  - No upstream artifact edits were made without an explicit user-approved Change Request.
98
99
  - If upstream changes exist, the correct owner skill was re-run after approval; downstream did not patch upstream directly.
@@ -112,7 +113,8 @@ Inputs (refs):
112
113
  Constraints:
113
114
  - must: enforce Drift Protocol (no upstream edits without user approval + CR)
114
115
  - must: verify plan/test-layer adherence (`steering/test-layers.md` + plan)
115
- - must: check Coverage Ledger is 100% unless approved exception
116
+ - must: check `qfai validate --fail-on error` passes with evidence (`error=0`)
117
+ - must: enforce `.qfai/assistant/steering/test-layers.md` hard gates
116
118
  - must_not: accept test-volume ratios/floors as a hard gate
117
119
  - must_not: accept upstream edits made directly by downstream phase
118
120
  Output format:
@@ -222,7 +224,7 @@ Build a minimal runnable vertical slice from contracts so the app boots and user
222
224
  - `.qfai/contracts/api/*.yaml` (OpenAPI)
223
225
  - `.qfai/contracts/db/*.sql` (schema constraints)
224
226
  - `.qfai/specs/<spec-id>/spec.md` + `delta.md` (scope + decisions)
225
- - `.qfai/specs/<spec-id>/scenario.feature` (for “what users do”, but do NOT implement tests here)
227
+ - `.qfai/specs/<spec-id>/scenario.feature` (optional legacy input for “what users do”; do NOT implement tests here)
226
228
 
227
229
  ## Output boundaries
228
230
 
@@ -97,7 +97,7 @@ Every major artifact in this stage MUST include a `## Work Orders Summary` secti
97
97
  - Final completion gate MUST be delegated to an independent Reviewer sub-agent.
98
98
  - Reviewer checks (minimum):
99
99
  - Required roles were delegated (no orchestrator self-authoring).
100
- - DoD satisfied (coverage ledger, gates, evidence, DR-IDs).
100
+ - DoD satisfied (validate gate, test-layer hard gate, evidence, DR-IDs).
101
101
  - Validate gate evidence exists and is fresh:
102
102
  - `qfai validate --fail-on error --format github` completed with `error=0`.
103
103
  - `.qfai/report/validate.log` and `.qfai/report/specs-coverage/spec-*.md` are present.
@@ -129,7 +129,8 @@ Inputs (refs):
129
129
  Constraints:
130
130
  - must: enforce Drift Protocol (no upstream edits without user approval + CR)
131
131
  - must: verify plan/test-layer adherence (`steering/test-layers.md` + plan)
132
- - must: check Coverage Ledger is 100% unless approved exception
132
+ - must: check `qfai validate --fail-on error` passes with evidence (`error=0`)
133
+ - must: enforce `.qfai/assistant/steering/test-layers.md` hard gates
133
134
  - must_not: accept test-volume ratios/floors as a hard gate
134
135
  - must_not: accept upstream edits made directly by downstream phase
135
136
  Output format:
@@ -38,7 +38,7 @@ When unsure, read inputs in this order:
38
38
  - P1: `.qfai/assistant/instructions/*`
39
39
  - P2: `.qfai/assistant/steering/*`
40
40
  - P3: `.qfai/specs/<spec-id>/delta.md` (Decision Records; if no spec yet, state "not applicable")
41
- - P4: other artifacts (spec.md, scenario.feature, contracts, evidence)
41
+ - P4: other artifacts (spec.md, contracts, evidence, optional legacy `scenario.feature` / coverage ledgers)
42
42
 
43
43
  ## Sub-agent Delegation (MANDATORY)
44
44
 
@@ -85,7 +85,8 @@ Every major artifact in this stage MUST include a `## Work Orders Summary` secti
85
85
  - Final completion gate MUST be delegated to an independent Reviewer sub-agent.
86
86
  - Reviewer checks (minimum):
87
87
  - Required roles were delegated (no orchestrator self-authoring).
88
- - DoD satisfied (coverage ledger, gates, evidence, DR-IDs).
88
+ - DoD satisfied (validate gate, test-layer hard gate, evidence, DR-IDs).
89
+ - Validate gate evidence exists: `qfai validate --fail-on error` completed with `error=0`.
89
90
  - **Drift Protocol enforced**:
90
91
  - No upstream artifact edits were made without an explicit user-approved Change Request.
91
92
  - If upstream changes exist, the correct owner skill was re-run after approval; downstream did not patch upstream directly.
@@ -105,7 +106,8 @@ Inputs (refs):
105
106
  Constraints:
106
107
  - must: enforce Drift Protocol (no upstream edits without user approval + CR)
107
108
  - must: verify plan/test-layer adherence (`steering/test-layers.md` + plan)
108
- - must: check Coverage Ledger is 100% unless approved exception
109
+ - must: check `qfai validate --fail-on error` passes with evidence (`error=0`)
110
+ - must: enforce `.qfai/assistant/steering/test-layers.md` hard gates
109
111
  - must_not: accept test-volume ratios/floors as a hard gate
110
112
  - must_not: accept upstream edits made directly by downstream phase
111
113
  Output format:
@@ -1589,8 +1589,8 @@ var import_promises7 = require("fs/promises");
1589
1589
  var import_node_path8 = __toESM(require("path"), 1);
1590
1590
  var import_node_url2 = require("url");
1591
1591
  async function resolveToolVersion() {
1592
- if ("1.4.27".length > 0) {
1593
- return "1.4.27";
1592
+ if ("1.4.28".length > 0) {
1593
+ return "1.4.28";
1594
1594
  }
1595
1595
  try {
1596
1596
  const packagePath = resolvePackageJsonPath();
@@ -8549,7 +8549,7 @@ async function validateDiscussPack(root) {
8549
8549
  issues.push(
8550
8550
  issue(
8551
8551
  "QFAI-DISCUSS-028",
8552
- `legacy discuss pack \u3092\u691C\u51FA\u3057\u307E\u3057\u305F\uFF08v1.4.27 \u306F warning\uFF09: ${legacyPacks.join(", ")}`,
8552
+ `legacy discuss pack \u3092\u691C\u51FA\u3057\u307E\u3057\u305F\uFF08v1.4.28 \u306F warning\uFF09: ${legacyPacks.join(", ")}`,
8553
8553
  "warning",
8554
8554
  discussRoot,
8555
8555
  "discussPack.legacy",
@@ -10670,7 +10670,7 @@ async function validateRequirePackReadiness(root, config) {
10670
10670
  issues.push(
10671
10671
  issue(
10672
10672
  "QFAI-RPACK-006",
10673
- `legacy require-pack \u3092\u691C\u51FA\u3057\u307E\u3057\u305F\uFF08v1.4.27 \u306F warning\uFF09: ${readiness.legacyPackNames.join(", ")}`,
10673
+ `legacy require-pack \u3092\u691C\u51FA\u3057\u307E\u3057\u305F\uFF08v1.4.28 \u306F warning\uFF09: ${readiness.legacyPackNames.join(", ")}`,
10674
10674
  "warning",
10675
10675
  requireRoot,
10676
10676
  "requirePack.legacy",
@@ -10775,7 +10775,7 @@ async function validateRepositoryHygiene(root, config) {
10775
10775
  issues.push(
10776
10776
  issue(
10777
10777
  "QFAI-HYG-001",
10778
- `legacy \u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u691C\u51FA\u3057\u307E\u3057\u305F\uFF08v1.4.27 \u306F warning\uFF09: .qfai/${rule.legacy}/`,
10778
+ `legacy \u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u691C\u51FA\u3057\u307E\u3057\u305F\uFF08v1.4.28 \u306F warning\uFF09: .qfai/${rule.legacy}/`,
10779
10779
  "warning",
10780
10780
  legacyPath,
10781
10781
  "hygiene.legacyDirectory",
@@ -10790,7 +10790,7 @@ async function validateRepositoryHygiene(root, config) {
10790
10790
  issues.push(
10791
10791
  issue(
10792
10792
  "QFAI-HYG-002",
10793
- `specs \u914D\u4E0B\u306B\u30C6\u30F3\u30D7\u30EC\u6DF7\u5165\u7591\u3044\u3092\u691C\u51FA\u3057\u307E\u3057\u305F\uFF08v1.4.27 \u306F warning\uFF09: ${suspiciousPaths.join(", ")}`,
10793
+ `specs \u914D\u4E0B\u306B\u30C6\u30F3\u30D7\u30EC\u6DF7\u5165\u7591\u3044\u3092\u691C\u51FA\u3057\u307E\u3057\u305F\uFF08v1.4.28 \u306F warning\uFF09: ${suspiciousPaths.join(", ")}`,
10794
10794
  "warning",
10795
10795
  specsRoot,
10796
10796
  "hygiene.templateContamination",
@@ -13210,13 +13210,13 @@ var ISSUE_EXPECTED_BY_CODE = {
13210
13210
  "QFAI-RPACK-003": "The latest require-pack files contain minimum substantive content.",
13211
13211
  "QFAI-RPACK-004": "No blocking OQ remains in 08_OQ.md (Disposition=open with Gate discuss|require|sdd).",
13212
13212
  "QFAI-RPACK-005": "require-* naming must be timestamp format only (dangerous names are forbidden).",
13213
- "QFAI-RPACK-006": "Legacy require-* serial packs are migration warnings in v1.4.27.",
13213
+ "QFAI-RPACK-006": "Legacy require-* serial packs are migration warnings in v1.4.28.",
13214
13214
  "QFAI-DISCUSS-023": "Discuss directory naming uses discuss-YYYYMMDDhhmmssSSS for new outputs.",
13215
13215
  "QFAI-DISCUSS-024": "Latest discuss pack contains required files (01_Context.md..09_delta.md).",
13216
13216
  "QFAI-DISCUSS-025": "No open OQ remains in latest discuss 05_OQ-Register.md.",
13217
13217
  "QFAI-DISCUSS-026": "Deferred rows include complete metadata in 07_Deferred.md.",
13218
13218
  "QFAI-DISCUSS-027": "Every deferred OQ in 05_OQ-Register.md is listed in 07_Deferred.md.",
13219
- "QFAI-DISCUSS-028": "Legacy discuss serial packs are migration warnings in v1.4.27.",
13219
+ "QFAI-DISCUSS-028": "Legacy discuss serial packs are migration warnings in v1.4.28.",
13220
13220
  "QFAI-COV-201": "Every AC must be referenced by at least one TC (`AC-Refs`).",
13221
13221
  "QFAI-COV-202": "Every BR must be referenced by at least one EX (`BR-Ref`).",
13222
13222
  "QFAI-COV-203": "Every EX must be referenced by at least one TC (`EX-Ref`).",
@@ -13241,7 +13241,7 @@ var ISSUE_EXPECTED_BY_CODE = {
13241
13241
  "QFAI-REVIEW-004": "Each review pack contains `summary.json`.",
13242
13242
  "QFAI-REVIEW-005": "Each review pack contains one or more reviewer files (`Rxx_*.md`).",
13243
13243
  "QFAI-REVIEW-006": "Each review summary JSON is parseable.",
13244
- "QFAI-REVIEW-007": "Each review summary satisfies the v1.4.27 minimum schema.",
13244
+ "QFAI-REVIEW-007": "Each review summary satisfies the v1.4.28 minimum schema.",
13245
13245
  "QFAI-CONTRACT-030": "Contract index references must match declared contract IDs in .qfai/contracts/**."
13246
13246
  };
13247
13247
  function resolveIssueTarget(issue2) {