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 +3 -3
- package/assets/init/.qfai/README.md +1 -1
- package/dist/cli/index.cjs +29 -18
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.mjs +29 -18
- package/dist/cli/index.mjs.map +1 -1
- package/dist/index.cjs +6 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +6 -6
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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.
|
|
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.
|
|
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.
|
|
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
|
-
>
|
|
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
|
|
package/dist/cli/index.cjs
CHANGED
|
@@ -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.
|
|
1593
|
-
return "1.4.
|
|
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 =
|
|
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 =
|
|
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
|
|
3315
|
-
if (skillId
|
|
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
|
-
|
|
3319
|
-
|
|
3320
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.",
|