@dtlabs/ai-toolkit 0.16.0 → 0.16.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.
package/CHANGELOG.md CHANGED
@@ -1,4 +1,12 @@
1
1
  ## 0.1.4 (2026-07-21)
2
+ ## [0.16.1](https://github.com/dtlab-tech/ai-toolkit/compare/v0.16.0...v0.16.1) (2026-10-02)
3
+
4
+
5
+ ### Bug Fixes
6
+
7
+ * **wb-validate:** require groupingRationale only when outputCount > 1 ([e3cb71a](https://github.com/dtlab-tech/ai-toolkit/commit/e3cb71a7f38fbd974c70f3dbdd99223a6aa05048))
8
+ * **wb-validate:** require groupingRationale only when outputCount > 1 ([7406fbe](https://github.com/dtlab-tech/ai-toolkit/commit/7406fbe336304c2ebcd012fc6a6b1b4980121a64))
9
+
2
10
  ## [0.16.0](https://github.com/dtlab-tech/ai-toolkit/compare/v0.15.1...v0.16.0) (2026-10-02)
3
11
 
4
12
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dtlabs/ai-toolkit",
3
- "version": "0.16.0",
3
+ "version": "0.16.1",
4
4
  "description": "AI Toolkit — reusable agents and procedures for developers to build AI-powered applications.",
5
5
  "files": [
6
6
  "docs/",
@@ -359,7 +359,7 @@ for (const phase of phases) {
359
359
 
360
360
  const topLevelFields = [
361
361
  'id', 'title', 'outcome', 'domain', 'agentType', 'dependsOn',
362
- 'acceptanceCriteria', 'outputCount', 'groupingRationale', 'commit',
362
+ 'acceptanceCriteria', 'outputCount', 'commit',
363
363
  ]
364
364
  for (const field of topLevelFields) {
365
365
  if (task[field] == null) {
@@ -374,6 +374,20 @@ for (const phase of phases) {
374
374
  }
375
375
  }
376
376
 
377
+ // groupingRationale is required only when outputCount > 1 (the generator agent's own
378
+ // contract: a single-output task has nothing to justify grouping, so it emits null) —
379
+ // null is the documented, correct value there, not a missing field.
380
+ if (task.outputCount > 1 && task.groupingRationale == null) {
381
+ report.errors.push({
382
+ category: ERRORS.MISSING_FIELD,
383
+ severity: 'error',
384
+ taskId,
385
+ field: 'groupingRationale',
386
+ message: `Task "${taskId}" has outputCount > 1 but is missing required field "groupingRationale"`,
387
+ details: { taskId, field: 'groupingRationale' },
388
+ })
389
+ }
390
+
377
391
  // Nested: verification.commands — existence and array type only; emptiness checked later
378
392
  if (task.verification == null || task.verification.commands == null) {
379
393
  report.errors.push({