qfai 1.4.31 → 1.4.32

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.31)
42
+ ## ATDD annotation hard gate (v1.4.32)
43
43
 
44
44
  `qfai validate` enforces spec-to-test traceability with directory-based rules.
45
45
 
@@ -202,7 +202,7 @@ flowchart LR
202
202
  - Contracts SSOT: `.qfai/contracts/**`
203
203
  - Report outputs (`.qfai/report/**`) are derived artifacts and not SSOT.
204
204
 
205
- ## Minimal tutorial (v1.4.31)
205
+ ## Minimal tutorial (v1.4.32)
206
206
 
207
207
  1. `npx qfai init`
208
208
  2. Run `/qfai-discuss` to structure scope and open questions.
@@ -229,7 +229,7 @@ Release gate behavior:
229
229
 
230
230
  ## Continuous integration
231
231
 
232
- QFAI v1.4.31 generates integration wrappers under `.agents/**`, `.claude/**`,
232
+ QFAI v1.4.32 generates integration wrappers under `.agents/**`, `.claude/**`,
233
233
  `.github/**`, and `.codex/**`.
234
234
  It does not generate GitHub Actions workflows.
235
235
  Configure CI in your own platform and run:
@@ -24,7 +24,7 @@ flowchart TD
24
24
  ```
25
25
 
26
26
  > Formatting must follow the templates and checklists documented in each directory README.
27
- > Legacy wrappers `/qfai-sdd-refinement` and `/qfai-sdd-planning` are deprecated and route to `/qfai-sdd`.
27
+ > Deprecated legacy wrappers (`/qfai-sdd-refinement`, `/qfai-sdd-planning`) are no longer distributed by `qfai init`. Use `/qfai-sdd` instead.
28
28
 
29
29
  ## Directory map
30
30
 
@@ -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.31".length > 0) {
1593
- return "1.4.31";
1592
+ if ("1.4.32".length > 0) {
1593
+ return "1.4.32";
1594
1594
  }
1595
1595
  try {
1596
1596
  const packagePath = resolvePackageJsonPath();
@@ -3240,7 +3240,7 @@ function buildClaudeCommandWrapper(skillId) {
3240
3240
  ].join("\n");
3241
3241
  }
3242
3242
  function buildGithubPromptWrapper(skillId) {
3243
- const scopeReminder = buildPrototypingScopeReminder(skillId);
3243
+ const scopeReminder = buildSkillScopeReminder(skillId);
3244
3244
  return [
3245
3245
  "---",
3246
3246
  'agent: "agent"',
@@ -3289,7 +3289,7 @@ function buildCodexSkillWrapper(skillId) {
3289
3289
  ].join("\n");
3290
3290
  }
3291
3291
  function buildAgentsSkillWrapper(skillId) {
3292
- const scopeReminder = buildPrototypingScopeReminder(skillId);
3292
+ const scopeReminder = buildSkillScopeReminder(skillId);
3293
3293
  return [
3294
3294
  "---",
3295
3295
  `name: "${skillId}"`,
@@ -3311,14 +3311,25 @@ function buildAgentsSkillWrapper(skillId) {
3311
3311
  ""
3312
3312
  ].join("\n");
3313
3313
  }
3314
- function buildPrototypingScopeReminder(skillId) {
3315
- if (skillId !== "qfai-prototyping") {
3316
- return [];
3314
+ function buildSkillScopeReminder(skillId) {
3315
+ if (skillId === "qfai-prototyping") {
3316
+ return [
3317
+ "",
3318
+ "Scope reminder: `/qfai-prototyping` must cover ALL specs from `.qfai/specs/spec-*`."
3319
+ ];
3317
3320
  }
3318
- return [
3319
- "",
3320
- "Scope reminder: `/qfai-prototyping` must cover ALL specs from `.qfai/specs/spec-*`."
3321
- ];
3321
+ if (skillId === "qfai-sdd") {
3322
+ return [
3323
+ "",
3324
+ "Scope reminder checklist (`/qfai-sdd`):",
3325
+ "- No argument means ALL specs from `.qfai/specs/_shared/03_Capabilities.md` (stable `spec-0001..N` mapping).",
3326
+ "- Contracts-first and `_shared` outline run once per batch.",
3327
+ "- Slice/Plan/Delta are delegated in parallel per spec.",
3328
+ "- `qfai validate` and RCP review run once at batch tail after integration.",
3329
+ "- Follow `.qfai/assistant/steering/test-layers.md` for test-layer obligations."
3330
+ ];
3331
+ }
3332
+ return [];
3322
3333
  }
3323
3334
  function buildClaudeAgentWrapper(agentName) {
3324
3335
  const title = formatDisplayName(agentName);
@@ -8562,7 +8573,7 @@ async function validateDiscussPack(root) {
8562
8573
  issues.push(
8563
8574
  issue(
8564
8575
  "QFAI-DISCUSS-028",
8565
- `legacy discuss pack \u3092\u691C\u51FA\u3057\u307E\u3057\u305F\uFF08v1.4.31 \u306F warning\uFF09: ${legacyPacks.join(", ")}`,
8576
+ `legacy discuss pack \u3092\u691C\u51FA\u3057\u307E\u3057\u305F\uFF08v1.4.32 \u306F warning\uFF09: ${legacyPacks.join(", ")}`,
8566
8577
  "warning",
8567
8578
  discussRoot,
8568
8579
  "discussPack.legacy",
@@ -11092,7 +11103,7 @@ async function validateRequirePackReadiness(root, config) {
11092
11103
  issues.push(
11093
11104
  issue(
11094
11105
  "QFAI-RPACK-006",
11095
- `legacy require-pack \u3092\u691C\u51FA\u3057\u307E\u3057\u305F\uFF08v1.4.31 \u306F warning\uFF09: ${readiness.legacyPackNames.join(", ")}`,
11106
+ `legacy require-pack \u3092\u691C\u51FA\u3057\u307E\u3057\u305F\uFF08v1.4.32 \u306F warning\uFF09: ${readiness.legacyPackNames.join(", ")}`,
11096
11107
  "warning",
11097
11108
  requireRoot,
11098
11109
  "requirePack.legacy",
@@ -11197,7 +11208,7 @@ async function validateRepositoryHygiene(root, config) {
11197
11208
  issues.push(
11198
11209
  issue(
11199
11210
  "QFAI-HYG-001",
11200
- `legacy \u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u691C\u51FA\u3057\u307E\u3057\u305F\uFF08v1.4.31 \u306F warning\uFF09: .qfai/${rule.legacy}/`,
11211
+ `legacy \u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u691C\u51FA\u3057\u307E\u3057\u305F\uFF08v1.4.32 \u306F warning\uFF09: .qfai/${rule.legacy}/`,
11201
11212
  "warning",
11202
11213
  legacyPath,
11203
11214
  "hygiene.legacyDirectory",
@@ -11212,7 +11223,7 @@ async function validateRepositoryHygiene(root, config) {
11212
11223
  issues.push(
11213
11224
  issue(
11214
11225
  "QFAI-HYG-002",
11215
- `specs \u914D\u4E0B\u306B\u30C6\u30F3\u30D7\u30EC\u6DF7\u5165\u7591\u3044\u3092\u691C\u51FA\u3057\u307E\u3057\u305F\uFF08v1.4.31 \u306F warning\uFF09: ${suspiciousPaths.join(", ")}`,
11226
+ `specs \u914D\u4E0B\u306B\u30C6\u30F3\u30D7\u30EC\u6DF7\u5165\u7591\u3044\u3092\u691C\u51FA\u3057\u307E\u3057\u305F\uFF08v1.4.32 \u306F warning\uFF09: ${suspiciousPaths.join(", ")}`,
11216
11227
  "warning",
11217
11228
  specsRoot,
11218
11229
  "hygiene.templateContamination",
@@ -13633,13 +13644,13 @@ var ISSUE_EXPECTED_BY_CODE = {
13633
13644
  "QFAI-RPACK-003": "The latest require-pack files contain minimum substantive content.",
13634
13645
  "QFAI-RPACK-004": "No blocking OQ remains in 08_OQ.md (Disposition=open with Gate discuss|require|sdd).",
13635
13646
  "QFAI-RPACK-005": "require-* naming must be timestamp format only (dangerous names are forbidden).",
13636
- "QFAI-RPACK-006": "Legacy require-* serial packs are migration warnings in v1.4.31.",
13647
+ "QFAI-RPACK-006": "Legacy require-* serial packs are migration warnings in v1.4.32.",
13637
13648
  "QFAI-DISCUSS-023": "Discuss directory naming uses discuss-YYYYMMDDhhmmssSSS for new outputs.",
13638
13649
  "QFAI-DISCUSS-024": "Latest discuss pack contains required files (01_Context.md..09_delta.md).",
13639
13650
  "QFAI-DISCUSS-025": "No open OQ remains in latest discuss 05_OQ-Register.md.",
13640
13651
  "QFAI-DISCUSS-026": "Deferred rows include complete metadata in 07_Deferred.md.",
13641
13652
  "QFAI-DISCUSS-027": "Every deferred OQ in 05_OQ-Register.md is listed in 07_Deferred.md.",
13642
- "QFAI-DISCUSS-028": "Legacy discuss serial packs are migration warnings in v1.4.31.",
13653
+ "QFAI-DISCUSS-028": "Legacy discuss serial packs are migration warnings in v1.4.32.",
13643
13654
  "QFAI-COV-201": "Every AC must be referenced by at least one TC (`AC-Refs`).",
13644
13655
  "QFAI-COV-202": "Every BR must be referenced by at least one EX (`BR-Ref`).",
13645
13656
  "QFAI-COV-203": "Every EX must be referenced by at least one TC (`EX-Ref`).",
@@ -13664,7 +13675,7 @@ var ISSUE_EXPECTED_BY_CODE = {
13664
13675
  "QFAI-REVIEW-004": "Each review pack contains `summary.json`.",
13665
13676
  "QFAI-REVIEW-005": "Each review pack contains one or more reviewer files (`Rxx_*.md`).",
13666
13677
  "QFAI-REVIEW-006": "Each review summary JSON is parseable.",
13667
- "QFAI-REVIEW-007": "Each review summary satisfies the v1.4.31 minimum schema.",
13678
+ "QFAI-REVIEW-007": "Each review summary satisfies the v1.4.32 minimum schema.",
13668
13679
  "QFAI-PROT-101": "Both prototyping evidence files exist and prototyping.json follows the required schema.",
13669
13680
  "QFAI-PROT-111": "Coverage Matrix rows in prototyping evidence include every `.qfai/specs/spec-*` entry.",
13670
13681
  "QFAI-PROT-112": "Per-spec UI checks satisfy declared route counts and leave no unresolved UI routes.",