@dtlabs/ai-toolkit 0.24.7 → 0.24.8
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/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
## 0.1.4 (2026-07-21)
|
|
2
|
+
## [0.24.8](https://github.com/dtlab-tech/ai-toolkit/compare/v0.24.7...v0.24.8) (2026-11-02)
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
* **pm-phase1:** hand gaps still open after three validation cycles to Gate 1 instead of failing the run ([a57e05a](https://github.com/dtlab-tech/ai-toolkit/commit/a57e05abf61ea3c42a36a92cd190cc3d3a57a39c))
|
|
8
|
+
* **pm-phase1:** hand gaps still open after three validation cycles to Gate 1 instead of failing the run ([d759efa](https://github.com/dtlab-tech/ai-toolkit/commit/d759efa9e13d464740698d3b8e01f131e91c848a))
|
|
9
|
+
* **pm-phase1:** hand gaps still open after three validation cycles to Gate 1 instead of failing the run ([976aa27](https://github.com/dtlab-tech/ai-toolkit/commit/976aa2724b8e1e2e91293d88bc0581a5fef01f01))
|
|
10
|
+
|
|
2
11
|
## [0.24.7](https://github.com/dtlab-tech/ai-toolkit/compare/v0.24.6...v0.24.7) (2026-10-30)
|
|
3
12
|
|
|
4
13
|
|
package/package.json
CHANGED
|
@@ -71,6 +71,9 @@ Extract from the result:
|
|
|
71
71
|
- `tech_spec.path` / `tech_spec.summary` — Tech-Spec artifact path (the split `spec/index.md` by
|
|
72
72
|
default) and its summary
|
|
73
73
|
- `validation.summary` — validation result (gaps or clean)
|
|
74
|
+
- `validation.open_gaps` — array of the validator's findings still open after the last revision
|
|
75
|
+
cycle; empty when validation was clean. Non-empty means the workflow stopped revising and left
|
|
76
|
+
these for the Gate 1 reviewer to accept, reject or send back
|
|
74
77
|
- `docs_digest` — content digest binding this approval to the exact Requirements/Tech-Spec
|
|
75
78
|
bytes just produced; embed verbatim into `{PREFIX}-Approvals.md` in Step 2 below
|
|
76
79
|
- `token_ledger` — array of per-agent token data from phase 1
|
|
@@ -92,6 +95,11 @@ Documents generated for {PREFIX}:
|
|
|
92
95
|
{tech_spec.path} — {tech_spec.summary}
|
|
93
96
|
{PREFIX}-Validation-Report.md — {validation.summary}
|
|
94
97
|
|
|
98
|
+
If `validation.open_gaps` is non-empty, also list every entry verbatim under a heading
|
|
99
|
+
"Open validation gaps — your decision at this gate", then continue. These are design points the
|
|
100
|
+
validator could not close in three cycles. "Approve with notes" records the ones you accept in
|
|
101
|
+
`{PREFIX}-Approvals.md`; "Request changes" sends them back.
|
|
102
|
+
|
|
95
103
|
To view a single combined document instead of the split source files, run:
|
|
96
104
|
/assemble-docs {PREFIX} [req|spec|all]
|
|
97
105
|
```
|
|
@@ -677,6 +677,8 @@ return c.run(meta.name, featureDir, prefix, async () => {
|
|
|
677
677
|
let assembledRequirements = assembleRequirements()
|
|
678
678
|
let assembledTechSpec = assembleTechSpec()
|
|
679
679
|
let validationSummary = 'skipped (fresh)'
|
|
680
|
+
// Gaps still open after the last revision cycle, handed to Gate 1 for a human decision.
|
|
681
|
+
let openGaps = []
|
|
680
682
|
if (force || changed || !fresh(file('Validation-Report'), [featurePath, reqIndexPath, specIndexPath])) {
|
|
681
683
|
for (let cycle = 1; cycle <= 3; cycle++) {
|
|
682
684
|
// needsRequirementsFix/needsTechSpecFix: explicit structured routing fields,
|
|
@@ -766,7 +768,17 @@ return c.run(meta.name, featureDir, prefix, async () => {
|
|
|
766
768
|
validationSummary = `0 gaps (clean on cycle ${cycle})`
|
|
767
769
|
break
|
|
768
770
|
}
|
|
769
|
-
if (cycle === 3)
|
|
771
|
+
if (cycle === 3) {
|
|
772
|
+
// The deterministic AC<->component traceability gaps stay a hard failure: they are
|
|
773
|
+
// mechanical and the Work Breakdown relies on that mapping. What the validator judges
|
|
774
|
+
// (open design points, drill-down findings) is for a person to accept or reject, and Gate
|
|
775
|
+
// 1 is that review: regenerating again cannot decide a point feature.md leaves undecided
|
|
776
|
+
// (on FTR-034 three full runs of three cycles each never converged for that reason).
|
|
777
|
+
if (structuralFindings.length) throw new Error('Validation gaps remain after 3 cycles')
|
|
778
|
+
openGaps = mergedFindings
|
|
779
|
+
validationSummary = `${openGaps.length} open gap(s) after 3 cycles, left for Gate 1 review (see the Validation Report)`
|
|
780
|
+
break
|
|
781
|
+
}
|
|
770
782
|
if (!mergedNeedsRequirementsFix && !mergedNeedsTechSpecFix) throw new Error(`Validation agent reported gaps on cycle ${cycle} but flagged neither document for revision`)
|
|
771
783
|
revisionFindings = mergedFindings
|
|
772
784
|
if (mergedNeedsRequirementsFix) { await generateRequirements(true); assembledRequirements = assembleRequirements() }
|
|
@@ -784,7 +796,7 @@ return c.run(meta.name, featureDir, prefix, async () => {
|
|
|
784
796
|
prefix, feature_dir: featureDir, feature_path: featurePath,
|
|
785
797
|
requirements: { path: reqIndexPath, summary: 'Requirements ready (split; req/index.md + req/use-cases/*.md)' },
|
|
786
798
|
tech_spec: { path: specIndexPath, summary: 'Tech-Spec ready (split; spec/index.md + spec/components/*.md)' },
|
|
787
|
-
validation: { path: file('Validation-Report'), summary: validationSummary },
|
|
799
|
+
validation: { path: file('Validation-Report'), summary: validationSummary, open_gaps: openGaps },
|
|
788
800
|
docs_digest: docsDigest,
|
|
789
801
|
token_ledger: c.tokenLedger, errors: [],
|
|
790
802
|
}
|