qfai 2.1.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/README.md +272 -20
  2. package/assets/defaults/workflows/change-tooling.yml +0 -4
  3. package/assets/init/.claude/settings.json +8 -8
  4. package/assets/init/.codex/hooks.json +6 -6
  5. package/assets/init/.qfai/assistant/agent/implementation-reviewer.md +14 -1
  6. package/assets/init/.qfai/assistant/agent/qa-gatekeeper.md +29 -0
  7. package/assets/init/.qfai/assistant/rule/constitution.md +5 -4
  8. package/assets/init/.qfai/assistant/rule/drift-protocol.md +14 -3
  9. package/assets/init/.qfai/assistant/rule/references/asset-authoring.md +70 -0
  10. package/assets/init/.qfai/assistant/rule/references/context-summary.md +30 -0
  11. package/assets/init/.qfai/assistant/rule/references/gate-failure-autorepair.md +42 -0
  12. package/assets/init/.qfai/assistant/rule/references/griller-recommendations.md +23 -0
  13. package/assets/init/.qfai/assistant/rule/references/host-backstops.md +60 -0
  14. package/assets/init/.qfai/assistant/rule/references/placeholder-scan.md +25 -0
  15. package/assets/init/.qfai/assistant/rule/references/reviewer-findings.md +41 -0
  16. package/assets/init/.qfai/assistant/rule/references/reviewer-remit.md +35 -0
  17. package/assets/init/.qfai/assistant/rule/shared-skill-delegation-baseline.md +26 -139
  18. package/assets/init/.qfai/assistant/rule/shared-skill-operating-baseline.md +6 -137
  19. package/assets/init/.qfai/assistant/rule/stage-cost.md +1 -1
  20. package/assets/init/.qfai/assistant/rule/test-layers.md +42 -0
  21. package/assets/init/.qfai/assistant/skill/qfai-configure/SKILL.md +8 -42
  22. package/assets/init/.qfai/assistant/skill/qfai-configure/references/principles.md +25 -0
  23. package/assets/init/.qfai/assistant/skill/qfai-discussion/SKILL.md +1 -1
  24. package/assets/init/.qfai/assistant/skill/qfai-discussion/references/discussion-completion-matrix.md +9 -2
  25. package/assets/init/.qfai/assistant/skill/qfai-discussion/references/ui_ux/platform_baselines.md +11 -0
  26. package/assets/init/.qfai/assistant/skill/qfai-discussion/references/ui_ux/review_audit_playbook.md +11 -0
  27. package/assets/init/.qfai/assistant/skill/qfai-discussion/references/ui_ux_best_practices.md +12 -36
  28. package/assets/init/.qfai/assistant/skill/qfai-grill/SKILL.md +1 -1
  29. package/assets/init/.qfai/assistant/skill/qfai-grilling/SKILL.md +16 -88
  30. package/assets/init/.qfai/assistant/skill/qfai-grilling/references/delegated-session.md +58 -0
  31. package/assets/init/.qfai/assistant/skill/qfai-grilling/references/session-record.md +42 -0
  32. package/assets/init/.qfai/assistant/skill/qfai-implement/SKILL.md +8 -1
  33. package/assets/init/.qfai/assistant/skill/qfai-implement/references/credential-reuse.md +9 -0
  34. package/assets/init/.qfai/assistant/skill/qfai-implement/references/cross-spec-ownership.md +41 -0
  35. package/assets/init/.qfai/assistant/skill/qfai-implement/references/oracle-strength.md +6 -1
  36. package/assets/init/.qfai/assistant/skill/qfai-implement/references/red-admissibility.md +1 -1
  37. package/assets/init/.qfai/assistant/skill/qfai-implement/references/ui-affecting.md +1 -3
  38. package/assets/init/.qfai/assistant/skill/qfai-maintain/SKILL.md +1 -1
  39. package/assets/init/.qfai/assistant/skill/qfai-migration-v1-to-v2/SKILL.md +4 -4
  40. package/assets/init/.qfai/assistant/skill/qfai-migration-v1-to-v2/references/migration-guide.md +19 -5
  41. package/assets/init/.qfai/assistant/skill/qfai-prototyping/SKILL.md +1 -1
  42. package/assets/init/.qfai/assistant/skill/qfai-prototyping/references/design-md-spec.md +14 -5
  43. package/assets/init/.qfai/assistant/skill/qfai-prototyping/references/generator-prompt.md +10 -0
  44. package/assets/init/.qfai/assistant/skill/qfai-prototyping/references/handoff.md +1 -1
  45. package/assets/init/.qfai/assistant/skill/qfai-prototyping/references/iteration-loop.md +3 -4
  46. package/assets/init/.qfai/assistant/skill/qfai-prototyping/references/review-payload-schema.md +10 -2
  47. package/assets/init/.qfai/assistant/skill/qfai-prototyping/references/reviewer-prompt.md +16 -3
  48. package/assets/init/.qfai/assistant/skill/qfai-run/SKILL.md +6 -21
  49. package/assets/init/.qfai/assistant/skill/qfai-run/references/extraction.md +30 -10
  50. package/assets/init/.qfai/assistant/skill/qfai-run/references/operator-screens.md +34 -0
  51. package/assets/init/.qfai/assistant/skill/qfai-run/references/plan.md +28 -5
  52. package/assets/init/.qfai/assistant/skill/qfai-run/references/stage-points.md +29 -0
  53. package/assets/init/.qfai/assistant/skill/qfai-sdd/SKILL.md +1 -1
  54. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/concrete-abstract-cycle.md +10 -1
  55. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/contract-artifact-rules.md +21 -9
  56. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/design-anti-patterns.md +19 -2
  57. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/design-md-authoring.md +11 -5
  58. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/design-md-brand-catalog.md +17 -2
  59. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/requirements-decomposition.md +2 -2
  60. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/sdd-execution-playbook.md +5 -5
  61. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/sdd-phase-checklists.md +4 -4
  62. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/sdd-quality-gate.md +2 -2
  63. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/sdd-triage.md +47 -5
  64. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/spec-traceability-rules.md +15 -3
  65. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/ui-contract-guide.md +16 -1
  66. package/assets/init/.qfai/assistant/skill/qfai-sdd/references/ui-design-contract-normalization.md +1 -2
  67. package/assets/init/.qfai/assistant/skill/qfai-sdd/templates/change-request.md +2 -2
  68. package/assets/init/.qfai/assistant/skill/qfai-sdd/templates/contracts/db-contract.sample.sql +2 -2
  69. package/assets/init/.qfai/assistant/skill/qfai-sdd/templates/spec/03_contract/cli/cli-NNNN-title.md +2 -2
  70. package/assets/init/.qfai/assistant/skill/qfai-sdd/templates/spec/03_contract/tech.md +1 -1
  71. package/assets/init/.qfai/assistant/skill/qfai-sdd/templates/spec/decisions.md +4 -0
  72. package/assets/init/.qfai/assistant/skill/qfai-triage/SKILL.md +1 -1
  73. package/assets/init/.qfai/assistant/skill/qfai-verify/SKILL.md +1 -1
  74. package/assets/init/.qfai/assistant/skill/qfai-verify/references/verify-output-contract.md +22 -8
  75. package/assets/init/.qfai/assistant/skill/web-research/SKILL.md +2 -10
  76. package/assets/init/.qfai/assistant/step/common-design-md/STEP.md +17 -3
  77. package/assets/init/.qfai/assistant/step/common-gate-run/STEP.md +30 -7
  78. package/assets/init/.qfai/assistant/step/discussion-uiux/STEP.md +11 -1
  79. package/assets/init/.qfai/assistant/step/implement-dep-bump/STEP.md +7 -0
  80. package/assets/init/.qfai/assistant/step/implement-scaffold/STEP.md +3 -3
  81. package/assets/init/.qfai/assistant/step/implement-seam/STEP.md +3 -1
  82. package/assets/init/.qfai/assistant/step/implement-tdd/STEP.md +3 -1
  83. package/assets/init/.qfai/assistant/step/implement-test-fix/STEP.md +2 -0
  84. package/assets/init/.qfai/assistant/step/sdd-flow/STEP.md +2 -0
  85. package/assets/init/.qfai/assistant/step/sdd-gate/STEP.md +4 -0
  86. package/assets/init/.qfai/assistant/step/sdd-triage/STEP.md +7 -3
  87. package/assets/init/.qfai/assistant/step/verify-change-note/STEP.md +8 -5
  88. package/assets/init/.qfai/assistant/step/verify-commit/STEP.md +6 -1
  89. package/assets/init/.qfai/assistant/step/verify-qfai-gate/STEP.md +20 -3
  90. package/assets/init/.qfai/assistant/step/verify-repeat-run/STEP.md +1 -1
  91. package/assets/init/.qfai/assistant/step/verify-repo-gate/STEP.md +23 -6
  92. package/assets/init/.qfai/waivers.yml +1 -1
  93. package/assets/init/root/.agents/rules/ai-readable-markdown.md +98 -0
  94. package/assets/init/root/.agents/rules/api-budget.md +4 -5
  95. package/assets/init/root/.agents/rules/documentation-clarity.md +30 -2
  96. package/assets/init/root/.agents/rules/grilling.md +4 -4
  97. package/assets/init/root/.agents/rules/interface-clarity.md +5 -5
  98. package/assets/init/root/.agents/rules/minimal-implementation.md +8 -0
  99. package/assets/init/root/.agents/rules/reminders.json +2 -2
  100. package/assets/init/root/.agents/rules/temporary-files.md +14 -5
  101. package/assets/init/root/.agents/rules/untrusted-content.md +3 -3
  102. package/assets/init/root/.agents/rules/user-questions.md +34 -7
  103. package/assets/init/root/.gitattributes +9 -0
  104. package/assets/init/root/.github/workflows/qfai-docs.yml +43 -11
  105. package/assets/init/root/.github/workflows/qfai-tests.yml +58 -15
  106. package/assets/init/root/.github/workflows/qfai-validate.yml +49 -42
  107. package/assets/init/root/AGENTS.md +1 -0
  108. package/assets/init/root/CLAUDE.md +1 -0
  109. package/assets/mdschema/story/03_contract/tech.mdschema.yml +7 -3
  110. package/assets/sandbox-templates/default-deny.yaml +0 -2
  111. package/assets/schemas/workflow/plan.schema.json +9 -2
  112. package/assets/scripts/check-mdschema.mjs +172 -5
  113. package/dist/cli/index.cjs +3979 -3055
  114. package/dist/cli/index.cjs.map +1 -1
  115. package/dist/cli/index.mjs +3167 -2243
  116. package/dist/cli/index.mjs.map +1 -1
  117. package/dist/index.cjs +3024 -2500
  118. package/dist/index.cjs.map +1 -1
  119. package/dist/index.d.cts +23 -9
  120. package/dist/index.d.ts +23 -9
  121. package/dist/index.mjs +2881 -2358
  122. package/dist/index.mjs.map +1 -1
  123. package/docs/MIGRATION-2.0.0.md +1 -1
  124. package/package.json +3 -3
package/dist/index.d.cts CHANGED
@@ -180,6 +180,12 @@ type QfaiPaths = {
180
180
  };
181
181
  type QfaiValidationConfig = {
182
182
  failOn: FailOn;
183
+ /**
184
+ * Terms the specs must no longer state, such as an option a decision rejected.
185
+ * `qfai validate` warns on each line of a spec document that still holds one
186
+ * (QFAI-STORY-016). Unset means no term is checked.
187
+ */
188
+ staleTerms?: string[];
183
189
  testStrategy: {
184
190
  /**
185
191
  * When true (default), `qfai validate` reports the silent-placeholder
@@ -382,6 +388,13 @@ type WorkflowMode = (typeof WORKFLOW_MODES)[number];
382
388
  * none of the three, and no mode is guessed in its place.
383
389
  */
384
390
  declare function readWorkflowMode(document: unknown): WorkflowMode | null;
391
+ /** The config issue an invalid `workflow.skipShipped` raises. */
392
+ declare const SKIPPED_WORKFLOWS_MESSAGE: string;
393
+ /**
394
+ * The shipped workflow names `workflow.skipShipped` lists, read from the parsed config document.
395
+ * `null` means the value is not a list of shipped names, and no entry is guessed in its place.
396
+ */
397
+ declare function readSkippedWorkflows(document: unknown): ReadonlySet<string> | null;
385
398
  declare function resolvePath(root: string, config: QfaiConfig, key: ConfigPathKey): string;
386
399
  /**
387
400
  * Why the file's `prototyping.primaryUiContract` was rejected, or `undefined` when the file sets
@@ -1170,7 +1183,7 @@ declare function locateToolAgainstProject(root: string): Promise<{
1170
1183
  * top-level `node_modules` is linked to another checkout's is covered by the
1171
1184
  * second.
1172
1185
  */
1173
- declare function reachedThroughLinkedNodeModules(root: string, packageDir: string): Promise<boolean>;
1186
+ declare function reachedThroughLinkedNodeModules(root: string, packageDir: string, walkFrom?: string): Promise<boolean>;
1174
1187
  /**
1175
1188
  * Whether `packageDir` sits under what `<dir>/node_modules` really points at.
1176
1189
  *
@@ -1202,7 +1215,8 @@ declare function resolvesThroughOwnNodeModules(dir: string, packageDir: string):
1202
1215
  declare function classifyAgainstDeclaration(declaringDir: string, packageDir: string): boolean;
1203
1216
  /**
1204
1217
  * The nearest directory at or above `root` whose `package.json` declares
1205
- * `qfai`, or `null` when none does.
1218
+ * `qfai`, or `null` when none does. The walk follows `root` as given, and the
1219
+ * directory returned is a real path.
1206
1220
  *
1207
1221
  * Every dependency field counts. A tool named in `devDependencies` is as
1208
1222
  * declared as one in `dependencies` — the project said which copy it wants
@@ -1241,8 +1255,9 @@ declare function classifyToolLocation(root: string, packageDir: string, link?: {
1241
1255
  * and Node reports the link's target. Only the nearest entry counts, because it
1242
1256
  * is the one `npx` runs; a farther link to the same checkout means the checkout
1243
1257
  * was run by its path. The `node_modules` directory's own real path is returned
1244
- * because it can be a link as well, to another checkout's. Both operands must
1245
- * already be real paths.
1258
+ * because it can be a link as well, to another checkout's. `root` is walked as
1259
+ * given, so a junction on the way up is followed the way `npx` follows it;
1260
+ * `packageDir` must already be a real path.
1246
1261
  */
1247
1262
  declare function findLinkingNodeModules(root: string, packageDir: string): Promise<string | null>;
1248
1263
  /**
@@ -1442,9 +1457,8 @@ type DesignMd = {
1442
1457
  * The published theme the token values were taken from, named so a
1443
1458
  * reader can install it.
1444
1459
  *
1445
- * Everything downstream is exact about those values — the prototyping loop hashes
1446
- * them, `certify` re-scans them, every literal in every capture is
1447
- * checked against them — and until this field existed there was nothing
1460
+ * Everything downstream is exact about those values — `certify` re-scans them,
1461
+ * every literal in every capture is checked against them — and until this field existed there was nothing
1448
1462
  * under the exactness: twelve colours, three families, four radii and
1449
1463
  * three shadows were written from a sentence of prose about the
1450
1464
  * archetype.
@@ -1517,7 +1531,7 @@ declare function validateDesignMd(d: DesignMd): ValidationIssue[];
1517
1531
  declare const DESIGN_MD_SAMPLE_MARKER = "QFAI-SAMPLE-DESIGN-MD";
1518
1532
  /**
1519
1533
  * True when `text` is still (or is derived from) a DESIGN.md the package
1520
- * ships as a sample. Used to stop `/qfai-sdd` Phase 0 from sha256-freezing
1534
+ * ships as a sample. Used to stop `/qfai-sdd` Phase 0 from adopting
1521
1535
  * an unauthored brand as the project's brand contract, and to surface the
1522
1536
  * same condition from `qfai validate` (QFAI-DCON-034).
1523
1537
  *
@@ -1540,4 +1554,4 @@ declare function isUnreplacedDesignMdSample(text: unknown): boolean;
1540
1554
  /** Run one ordered spec-to-story migration step from the current project root. */
1541
1555
  declare function runMigrationStep(step: number, argv: string[]): Promise<number>;
1542
1556
 
1543
- export { AC_GHERKIN_SECTION, ARCHETYPES, ATDD_TEST_KIND_DIRS, type Archetype, type AtddCodeTraceabilityResult, type AtddForbiddenRef, type AtddObligationRefs, type AtddSpecRefs, type AtddTestKind, type AtddTraceabilityMissing, type AtddTraceabilityScan, type AtddUnknownRef, type AtddUnknownRefKind, BROWSER_QA_PHASES, COLOR_KEYS, type ColorKey, type ConfigLoadResult, type ConfigPathKey, type ConfigSearchResult, DESIGN_MD_SAMPLE_MARKER, DISCUSSION_NON_UI_SURFACES, DISCUSSION_UI_BEARING_SURFACES, type DeferredTc, type DesignMd, type DesignMdColors, type DesignMdFonts, type DesignMdRadius, type DesignMdShadow, FONT_KEYS, type FailOn, type FenceMaskOptions, type FontKey, ID_PREFIXES, type IdFormatPrefix, type IdPrefix, type InvalidIdOccurrence, type Issue, type IssueCategory, type IssueLocation, type IssueSeverity, type OrphanContractsPolicy, type OutputFormat, PLANNED_CONTRACT_KEY, PROTOTYPING_SUPPORTED_SURFACES, type ParseError, type ParseResult, type PrototypingBrowserTool, type PrototypingSurface, type QfaiConfig, type QfaiOutputConfig, type QfaiPaths, type QfaiPrototypingConfig, type QfaiPrototypingExecutionConfig, type QfaiReportConfig, type QfaiReviewProfile, type QfaiRoutingEntry, type QfaiUiuxAuditConfig, type QfaiUiuxConfig, type QfaiValidationConfig, RADIUS_KEYS, type RadiusKey, type ReportData, type RunSddPreflightOptions, SHADOW_KEYS, type SddPreflightResult, type SddPreflightSource, type SddPreflightStatus, type ShadowKey, TC_VERIFIED_BY_KEY, type TcStatusDeclaration, type TcVerificationStatus, type TestFileExtensions, type TestLayerRoots, type TraceabilitySeverity, VISUAL_BROWSER_SURFACES, type ValidationCounts, type ValidationIssue, type ValidationOptions, type ValidationProfile, type ValidationResult, type ValidationTimings, type ValidationWaiverAction, type ValidationWaiverDowngradeTo, type ValidationWaiverEntry, type ValidationWaiverMatch, type ValidationWaiverScope, type ValidationWaiverSeverity, type ValidationWaiverSuppressed, type ValidationWaivers, WORKFLOW_MODE_MESSAGE, type WorkflowMode, atddAcceptanceLayerFilter, atddAcceptanceTestGlobs, atddTestKindDirs, atddTestOwnerProbe, classifyAgainstDeclaration, classifyToolLocation, collectDeclaredTcIds, collectDeclaredUsIds, collectHeadingTcIdsFrom, collectPlannedUsIds, collectTcLevels, collectTcStatuses, countIssues, createReportData, createTestLayerRoots, defaultConfig, deriveAtddFilePattern, deriveTestFileExtensions, evaluateAtddCodeTraceability, extractAcSpecNumber, extractAllIds, extractBrSpecNumber, extractCapSpecNumber, extractCaseSpecNumber, extractIds, extractInvalidIdOccurrences, extractInvalidIds, extractScSpecNumber, extractSpecNumber, extractUsSpecNumber, findConfigRoot, findDeclaringDir, findLinkingNodeModules, findPackageJsonUpward, formatReportJson, formatReportMarkdown, getConfigPath, isDiscussionUiBearingSurfaceType, isNonUiDiscussionSurface, isPlannedApiContract, isPlannedDbContract, isSupportedPrototypingSurface, isUnreplacedDesignMdSample, isValidPrototypingSurface, lintSql, loadConfig, locateToolAgainstProject, maskFencedCodeBlocks, packageRootProbe, parseDesignMd, reachedThroughLinkedNodeModules, readRejectedPrimaryUiContract, readTestFileExtensions, readWorkflowMode, requiresVisualBrowserEvidence, resolveAtddHomeKind, resolvePath, resolveTestKind, resolveToolPackageDir, resolveToolVersion, resolvesThroughOwnNodeModules, routingEntryName, runBrowserQaOrchestrated, runMigrationStep, runRenderCapture, runSddPreflight, summarizeBrowserQaResult, suspendsObligation, validateContracts, validateDesignMd, validateProject, validateUiContractParse };
1557
+ export { AC_GHERKIN_SECTION, ARCHETYPES, ATDD_TEST_KIND_DIRS, type Archetype, type AtddCodeTraceabilityResult, type AtddForbiddenRef, type AtddObligationRefs, type AtddSpecRefs, type AtddTestKind, type AtddTraceabilityMissing, type AtddTraceabilityScan, type AtddUnknownRef, type AtddUnknownRefKind, BROWSER_QA_PHASES, COLOR_KEYS, type ColorKey, type ConfigLoadResult, type ConfigPathKey, type ConfigSearchResult, DESIGN_MD_SAMPLE_MARKER, DISCUSSION_NON_UI_SURFACES, DISCUSSION_UI_BEARING_SURFACES, type DeferredTc, type DesignMd, type DesignMdColors, type DesignMdFonts, type DesignMdRadius, type DesignMdShadow, FONT_KEYS, type FailOn, type FenceMaskOptions, type FontKey, ID_PREFIXES, type IdFormatPrefix, type IdPrefix, type InvalidIdOccurrence, type Issue, type IssueCategory, type IssueLocation, type IssueSeverity, type OrphanContractsPolicy, type OutputFormat, PLANNED_CONTRACT_KEY, PROTOTYPING_SUPPORTED_SURFACES, type ParseError, type ParseResult, type PrototypingBrowserTool, type PrototypingSurface, type QfaiConfig, type QfaiOutputConfig, type QfaiPaths, type QfaiPrototypingConfig, type QfaiPrototypingExecutionConfig, type QfaiReportConfig, type QfaiReviewProfile, type QfaiRoutingEntry, type QfaiUiuxAuditConfig, type QfaiUiuxConfig, type QfaiValidationConfig, RADIUS_KEYS, type RadiusKey, type ReportData, type RunSddPreflightOptions, SHADOW_KEYS, SKIPPED_WORKFLOWS_MESSAGE, type SddPreflightResult, type SddPreflightSource, type SddPreflightStatus, type ShadowKey, TC_VERIFIED_BY_KEY, type TcStatusDeclaration, type TcVerificationStatus, type TestFileExtensions, type TestLayerRoots, type TraceabilitySeverity, VISUAL_BROWSER_SURFACES, type ValidationCounts, type ValidationIssue, type ValidationOptions, type ValidationProfile, type ValidationResult, type ValidationTimings, type ValidationWaiverAction, type ValidationWaiverDowngradeTo, type ValidationWaiverEntry, type ValidationWaiverMatch, type ValidationWaiverScope, type ValidationWaiverSeverity, type ValidationWaiverSuppressed, type ValidationWaivers, WORKFLOW_MODE_MESSAGE, type WorkflowMode, atddAcceptanceLayerFilter, atddAcceptanceTestGlobs, atddTestKindDirs, atddTestOwnerProbe, classifyAgainstDeclaration, classifyToolLocation, collectDeclaredTcIds, collectDeclaredUsIds, collectHeadingTcIdsFrom, collectPlannedUsIds, collectTcLevels, collectTcStatuses, countIssues, createReportData, createTestLayerRoots, defaultConfig, deriveAtddFilePattern, deriveTestFileExtensions, evaluateAtddCodeTraceability, extractAcSpecNumber, extractAllIds, extractBrSpecNumber, extractCapSpecNumber, extractCaseSpecNumber, extractIds, extractInvalidIdOccurrences, extractInvalidIds, extractScSpecNumber, extractSpecNumber, extractUsSpecNumber, findConfigRoot, findDeclaringDir, findLinkingNodeModules, findPackageJsonUpward, formatReportJson, formatReportMarkdown, getConfigPath, isDiscussionUiBearingSurfaceType, isNonUiDiscussionSurface, isPlannedApiContract, isPlannedDbContract, isSupportedPrototypingSurface, isUnreplacedDesignMdSample, isValidPrototypingSurface, lintSql, loadConfig, locateToolAgainstProject, maskFencedCodeBlocks, packageRootProbe, parseDesignMd, reachedThroughLinkedNodeModules, readRejectedPrimaryUiContract, readSkippedWorkflows, readTestFileExtensions, readWorkflowMode, requiresVisualBrowserEvidence, resolveAtddHomeKind, resolvePath, resolveTestKind, resolveToolPackageDir, resolveToolVersion, resolvesThroughOwnNodeModules, routingEntryName, runBrowserQaOrchestrated, runMigrationStep, runRenderCapture, runSddPreflight, summarizeBrowserQaResult, suspendsObligation, validateContracts, validateDesignMd, validateProject, validateUiContractParse };
package/dist/index.d.ts CHANGED
@@ -180,6 +180,12 @@ type QfaiPaths = {
180
180
  };
181
181
  type QfaiValidationConfig = {
182
182
  failOn: FailOn;
183
+ /**
184
+ * Terms the specs must no longer state, such as an option a decision rejected.
185
+ * `qfai validate` warns on each line of a spec document that still holds one
186
+ * (QFAI-STORY-016). Unset means no term is checked.
187
+ */
188
+ staleTerms?: string[];
183
189
  testStrategy: {
184
190
  /**
185
191
  * When true (default), `qfai validate` reports the silent-placeholder
@@ -382,6 +388,13 @@ type WorkflowMode = (typeof WORKFLOW_MODES)[number];
382
388
  * none of the three, and no mode is guessed in its place.
383
389
  */
384
390
  declare function readWorkflowMode(document: unknown): WorkflowMode | null;
391
+ /** The config issue an invalid `workflow.skipShipped` raises. */
392
+ declare const SKIPPED_WORKFLOWS_MESSAGE: string;
393
+ /**
394
+ * The shipped workflow names `workflow.skipShipped` lists, read from the parsed config document.
395
+ * `null` means the value is not a list of shipped names, and no entry is guessed in its place.
396
+ */
397
+ declare function readSkippedWorkflows(document: unknown): ReadonlySet<string> | null;
385
398
  declare function resolvePath(root: string, config: QfaiConfig, key: ConfigPathKey): string;
386
399
  /**
387
400
  * Why the file's `prototyping.primaryUiContract` was rejected, or `undefined` when the file sets
@@ -1170,7 +1183,7 @@ declare function locateToolAgainstProject(root: string): Promise<{
1170
1183
  * top-level `node_modules` is linked to another checkout's is covered by the
1171
1184
  * second.
1172
1185
  */
1173
- declare function reachedThroughLinkedNodeModules(root: string, packageDir: string): Promise<boolean>;
1186
+ declare function reachedThroughLinkedNodeModules(root: string, packageDir: string, walkFrom?: string): Promise<boolean>;
1174
1187
  /**
1175
1188
  * Whether `packageDir` sits under what `<dir>/node_modules` really points at.
1176
1189
  *
@@ -1202,7 +1215,8 @@ declare function resolvesThroughOwnNodeModules(dir: string, packageDir: string):
1202
1215
  declare function classifyAgainstDeclaration(declaringDir: string, packageDir: string): boolean;
1203
1216
  /**
1204
1217
  * The nearest directory at or above `root` whose `package.json` declares
1205
- * `qfai`, or `null` when none does.
1218
+ * `qfai`, or `null` when none does. The walk follows `root` as given, and the
1219
+ * directory returned is a real path.
1206
1220
  *
1207
1221
  * Every dependency field counts. A tool named in `devDependencies` is as
1208
1222
  * declared as one in `dependencies` — the project said which copy it wants
@@ -1241,8 +1255,9 @@ declare function classifyToolLocation(root: string, packageDir: string, link?: {
1241
1255
  * and Node reports the link's target. Only the nearest entry counts, because it
1242
1256
  * is the one `npx` runs; a farther link to the same checkout means the checkout
1243
1257
  * was run by its path. The `node_modules` directory's own real path is returned
1244
- * because it can be a link as well, to another checkout's. Both operands must
1245
- * already be real paths.
1258
+ * because it can be a link as well, to another checkout's. `root` is walked as
1259
+ * given, so a junction on the way up is followed the way `npx` follows it;
1260
+ * `packageDir` must already be a real path.
1246
1261
  */
1247
1262
  declare function findLinkingNodeModules(root: string, packageDir: string): Promise<string | null>;
1248
1263
  /**
@@ -1442,9 +1457,8 @@ type DesignMd = {
1442
1457
  * The published theme the token values were taken from, named so a
1443
1458
  * reader can install it.
1444
1459
  *
1445
- * Everything downstream is exact about those values — the prototyping loop hashes
1446
- * them, `certify` re-scans them, every literal in every capture is
1447
- * checked against them — and until this field existed there was nothing
1460
+ * Everything downstream is exact about those values — `certify` re-scans them,
1461
+ * every literal in every capture is checked against them — and until this field existed there was nothing
1448
1462
  * under the exactness: twelve colours, three families, four radii and
1449
1463
  * three shadows were written from a sentence of prose about the
1450
1464
  * archetype.
@@ -1517,7 +1531,7 @@ declare function validateDesignMd(d: DesignMd): ValidationIssue[];
1517
1531
  declare const DESIGN_MD_SAMPLE_MARKER = "QFAI-SAMPLE-DESIGN-MD";
1518
1532
  /**
1519
1533
  * True when `text` is still (or is derived from) a DESIGN.md the package
1520
- * ships as a sample. Used to stop `/qfai-sdd` Phase 0 from sha256-freezing
1534
+ * ships as a sample. Used to stop `/qfai-sdd` Phase 0 from adopting
1521
1535
  * an unauthored brand as the project's brand contract, and to surface the
1522
1536
  * same condition from `qfai validate` (QFAI-DCON-034).
1523
1537
  *
@@ -1540,4 +1554,4 @@ declare function isUnreplacedDesignMdSample(text: unknown): boolean;
1540
1554
  /** Run one ordered spec-to-story migration step from the current project root. */
1541
1555
  declare function runMigrationStep(step: number, argv: string[]): Promise<number>;
1542
1556
 
1543
- export { AC_GHERKIN_SECTION, ARCHETYPES, ATDD_TEST_KIND_DIRS, type Archetype, type AtddCodeTraceabilityResult, type AtddForbiddenRef, type AtddObligationRefs, type AtddSpecRefs, type AtddTestKind, type AtddTraceabilityMissing, type AtddTraceabilityScan, type AtddUnknownRef, type AtddUnknownRefKind, BROWSER_QA_PHASES, COLOR_KEYS, type ColorKey, type ConfigLoadResult, type ConfigPathKey, type ConfigSearchResult, DESIGN_MD_SAMPLE_MARKER, DISCUSSION_NON_UI_SURFACES, DISCUSSION_UI_BEARING_SURFACES, type DeferredTc, type DesignMd, type DesignMdColors, type DesignMdFonts, type DesignMdRadius, type DesignMdShadow, FONT_KEYS, type FailOn, type FenceMaskOptions, type FontKey, ID_PREFIXES, type IdFormatPrefix, type IdPrefix, type InvalidIdOccurrence, type Issue, type IssueCategory, type IssueLocation, type IssueSeverity, type OrphanContractsPolicy, type OutputFormat, PLANNED_CONTRACT_KEY, PROTOTYPING_SUPPORTED_SURFACES, type ParseError, type ParseResult, type PrototypingBrowserTool, type PrototypingSurface, type QfaiConfig, type QfaiOutputConfig, type QfaiPaths, type QfaiPrototypingConfig, type QfaiPrototypingExecutionConfig, type QfaiReportConfig, type QfaiReviewProfile, type QfaiRoutingEntry, type QfaiUiuxAuditConfig, type QfaiUiuxConfig, type QfaiValidationConfig, RADIUS_KEYS, type RadiusKey, type ReportData, type RunSddPreflightOptions, SHADOW_KEYS, type SddPreflightResult, type SddPreflightSource, type SddPreflightStatus, type ShadowKey, TC_VERIFIED_BY_KEY, type TcStatusDeclaration, type TcVerificationStatus, type TestFileExtensions, type TestLayerRoots, type TraceabilitySeverity, VISUAL_BROWSER_SURFACES, type ValidationCounts, type ValidationIssue, type ValidationOptions, type ValidationProfile, type ValidationResult, type ValidationTimings, type ValidationWaiverAction, type ValidationWaiverDowngradeTo, type ValidationWaiverEntry, type ValidationWaiverMatch, type ValidationWaiverScope, type ValidationWaiverSeverity, type ValidationWaiverSuppressed, type ValidationWaivers, WORKFLOW_MODE_MESSAGE, type WorkflowMode, atddAcceptanceLayerFilter, atddAcceptanceTestGlobs, atddTestKindDirs, atddTestOwnerProbe, classifyAgainstDeclaration, classifyToolLocation, collectDeclaredTcIds, collectDeclaredUsIds, collectHeadingTcIdsFrom, collectPlannedUsIds, collectTcLevels, collectTcStatuses, countIssues, createReportData, createTestLayerRoots, defaultConfig, deriveAtddFilePattern, deriveTestFileExtensions, evaluateAtddCodeTraceability, extractAcSpecNumber, extractAllIds, extractBrSpecNumber, extractCapSpecNumber, extractCaseSpecNumber, extractIds, extractInvalidIdOccurrences, extractInvalidIds, extractScSpecNumber, extractSpecNumber, extractUsSpecNumber, findConfigRoot, findDeclaringDir, findLinkingNodeModules, findPackageJsonUpward, formatReportJson, formatReportMarkdown, getConfigPath, isDiscussionUiBearingSurfaceType, isNonUiDiscussionSurface, isPlannedApiContract, isPlannedDbContract, isSupportedPrototypingSurface, isUnreplacedDesignMdSample, isValidPrototypingSurface, lintSql, loadConfig, locateToolAgainstProject, maskFencedCodeBlocks, packageRootProbe, parseDesignMd, reachedThroughLinkedNodeModules, readRejectedPrimaryUiContract, readTestFileExtensions, readWorkflowMode, requiresVisualBrowserEvidence, resolveAtddHomeKind, resolvePath, resolveTestKind, resolveToolPackageDir, resolveToolVersion, resolvesThroughOwnNodeModules, routingEntryName, runBrowserQaOrchestrated, runMigrationStep, runRenderCapture, runSddPreflight, summarizeBrowserQaResult, suspendsObligation, validateContracts, validateDesignMd, validateProject, validateUiContractParse };
1557
+ export { AC_GHERKIN_SECTION, ARCHETYPES, ATDD_TEST_KIND_DIRS, type Archetype, type AtddCodeTraceabilityResult, type AtddForbiddenRef, type AtddObligationRefs, type AtddSpecRefs, type AtddTestKind, type AtddTraceabilityMissing, type AtddTraceabilityScan, type AtddUnknownRef, type AtddUnknownRefKind, BROWSER_QA_PHASES, COLOR_KEYS, type ColorKey, type ConfigLoadResult, type ConfigPathKey, type ConfigSearchResult, DESIGN_MD_SAMPLE_MARKER, DISCUSSION_NON_UI_SURFACES, DISCUSSION_UI_BEARING_SURFACES, type DeferredTc, type DesignMd, type DesignMdColors, type DesignMdFonts, type DesignMdRadius, type DesignMdShadow, FONT_KEYS, type FailOn, type FenceMaskOptions, type FontKey, ID_PREFIXES, type IdFormatPrefix, type IdPrefix, type InvalidIdOccurrence, type Issue, type IssueCategory, type IssueLocation, type IssueSeverity, type OrphanContractsPolicy, type OutputFormat, PLANNED_CONTRACT_KEY, PROTOTYPING_SUPPORTED_SURFACES, type ParseError, type ParseResult, type PrototypingBrowserTool, type PrototypingSurface, type QfaiConfig, type QfaiOutputConfig, type QfaiPaths, type QfaiPrototypingConfig, type QfaiPrototypingExecutionConfig, type QfaiReportConfig, type QfaiReviewProfile, type QfaiRoutingEntry, type QfaiUiuxAuditConfig, type QfaiUiuxConfig, type QfaiValidationConfig, RADIUS_KEYS, type RadiusKey, type ReportData, type RunSddPreflightOptions, SHADOW_KEYS, SKIPPED_WORKFLOWS_MESSAGE, type SddPreflightResult, type SddPreflightSource, type SddPreflightStatus, type ShadowKey, TC_VERIFIED_BY_KEY, type TcStatusDeclaration, type TcVerificationStatus, type TestFileExtensions, type TestLayerRoots, type TraceabilitySeverity, VISUAL_BROWSER_SURFACES, type ValidationCounts, type ValidationIssue, type ValidationOptions, type ValidationProfile, type ValidationResult, type ValidationTimings, type ValidationWaiverAction, type ValidationWaiverDowngradeTo, type ValidationWaiverEntry, type ValidationWaiverMatch, type ValidationWaiverScope, type ValidationWaiverSeverity, type ValidationWaiverSuppressed, type ValidationWaivers, WORKFLOW_MODE_MESSAGE, type WorkflowMode, atddAcceptanceLayerFilter, atddAcceptanceTestGlobs, atddTestKindDirs, atddTestOwnerProbe, classifyAgainstDeclaration, classifyToolLocation, collectDeclaredTcIds, collectDeclaredUsIds, collectHeadingTcIdsFrom, collectPlannedUsIds, collectTcLevels, collectTcStatuses, countIssues, createReportData, createTestLayerRoots, defaultConfig, deriveAtddFilePattern, deriveTestFileExtensions, evaluateAtddCodeTraceability, extractAcSpecNumber, extractAllIds, extractBrSpecNumber, extractCapSpecNumber, extractCaseSpecNumber, extractIds, extractInvalidIdOccurrences, extractInvalidIds, extractScSpecNumber, extractSpecNumber, extractUsSpecNumber, findConfigRoot, findDeclaringDir, findLinkingNodeModules, findPackageJsonUpward, formatReportJson, formatReportMarkdown, getConfigPath, isDiscussionUiBearingSurfaceType, isNonUiDiscussionSurface, isPlannedApiContract, isPlannedDbContract, isSupportedPrototypingSurface, isUnreplacedDesignMdSample, isValidPrototypingSurface, lintSql, loadConfig, locateToolAgainstProject, maskFencedCodeBlocks, packageRootProbe, parseDesignMd, reachedThroughLinkedNodeModules, readRejectedPrimaryUiContract, readSkippedWorkflows, readTestFileExtensions, readWorkflowMode, requiresVisualBrowserEvidence, resolveAtddHomeKind, resolvePath, resolveTestKind, resolveToolPackageDir, resolveToolVersion, resolvesThroughOwnNodeModules, routingEntryName, runBrowserQaOrchestrated, runMigrationStep, runRenderCapture, runSddPreflight, summarizeBrowserQaResult, suspendsObligation, validateContracts, validateDesignMd, validateProject, validateUiContractParse };