@dtlabs/ai-toolkit 0.16.7 → 0.16.9
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 +16 -0
- package/lib/task-executor/index.js +35 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
## 0.1.4 (2026-07-21)
|
|
2
|
+
## [0.16.9](https://github.com/dtlab-tech/ai-toolkit/compare/v0.16.8...v0.16.9) (2026-10-07)
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
* **task-executor:** let "skipped" satisfy a downstream dependency ([f00d3c6](https://github.com/dtlab-tech/ai-toolkit/commit/f00d3c68324c0ca7f1d8f965b15288027830fd01))
|
|
8
|
+
* **task-executor:** let "skipped" satisfy a downstream dependency ([6b48a61](https://github.com/dtlab-tech/ai-toolkit/commit/6b48a619e64f497b9b93e4a1a0254105eda1b718))
|
|
9
|
+
|
|
10
|
+
## [0.16.8](https://github.com/dtlab-tech/ai-toolkit/compare/v0.16.7...v0.16.8) (2026-10-07)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **task-executor:** treat a zero-diff checkpoint as a valid no-op ([a587ee0](https://github.com/dtlab-tech/ai-toolkit/commit/a587ee0a88f24934235f64e9fbc9c395a76001fb))
|
|
16
|
+
* **task-executor:** treat a zero-diff checkpoint as a valid no-op ([568e590](https://github.com/dtlab-tech/ai-toolkit/commit/568e590f8359c405561ef7e23ca626ddcecb9b12))
|
|
17
|
+
|
|
2
18
|
## [0.16.7](https://github.com/dtlab-tech/ai-toolkit/compare/v0.16.6...v0.16.7) (2026-10-07)
|
|
3
19
|
|
|
4
20
|
|
|
@@ -2119,6 +2119,30 @@ async function _runTaskToResolution(ctx) {
|
|
|
2119
2119
|
continue;
|
|
2120
2120
|
}
|
|
2121
2121
|
|
|
2122
|
+
if (changedPaths.length === 0) {
|
|
2123
|
+
// Verification and review both confirm the task's deliverable already
|
|
2124
|
+
// matches its expected baseline — there is nothing for THIS attempt to
|
|
2125
|
+
// stage or commit (a prior manual commit, an earlier attempt, or a
|
|
2126
|
+
// prerequisite task already produced it). git.stageTaskFiles()
|
|
2127
|
+
// deliberately refuses an empty changedPaths array ("must be a
|
|
2128
|
+
// non-empty array — explicit enumeration, never a wildcard") — calling
|
|
2129
|
+
// it here would throw STAGING_VALIDATION_ERROR uncaught by anything in
|
|
2130
|
+
// this loop, crashing the whole execute() run instead of completing
|
|
2131
|
+
// one task cleanly. Confirmed against a real run: a retried INFRA task
|
|
2132
|
+
// whose deliverable had already been committed manually hit exactly
|
|
2133
|
+
// this on its second attempt, after verification and review both
|
|
2134
|
+
// legitimately passed. Mark the task 'skipped' instead of forcing it
|
|
2135
|
+
// through a checkpoint pipeline that has nothing to stage — already a
|
|
2136
|
+
// first-class terminal-success outcome (TASK_STATUSES; this loop's own
|
|
2137
|
+
// allTerminalSuccess check above already includes it, and reconcile's
|
|
2138
|
+
// _classifyTask already special-cases task.status === 'skipped' before
|
|
2139
|
+
// ever looking at an attempt's stage).
|
|
2140
|
+
state = store.readState(executionRoot, runId);
|
|
2141
|
+
state = state.setTaskStatus(taskId, 'skipped');
|
|
2142
|
+
store.writeState(executionRoot, runId, state);
|
|
2143
|
+
return;
|
|
2144
|
+
}
|
|
2145
|
+
|
|
2122
2146
|
// Checkpoint: stage first (US-05-TASK-BE-02) so its OWN write-tree
|
|
2123
2147
|
// result becomes the checkpoint intent's expectedTreeSha, THEN persist
|
|
2124
2148
|
// the intent (US-05-TASK-BE-01) with that now-known treeSha, THEN commit
|
|
@@ -2853,7 +2877,17 @@ async function execute(args) {
|
|
|
2853
2877
|
if (t.status !== 'pending') return false;
|
|
2854
2878
|
return t.dependencies.every(function (depId) {
|
|
2855
2879
|
const dep = state.tasks[depId];
|
|
2856
|
-
|
|
2880
|
+
// 'skipped' must satisfy a dependency exactly like 'checkpointed'/
|
|
2881
|
+
// 'integrated' do — it is already treated as terminal success by
|
|
2882
|
+
// both the nonTerminalIds filter just above and the allTerminalSuccess
|
|
2883
|
+
// check below (and by reconcile's _classifyTask). Omitting it here
|
|
2884
|
+
// left any task depending on a 'skipped' one stuck 'pending' forever,
|
|
2885
|
+
// even though the rest of this run correctly treated 'skipped' as a
|
|
2886
|
+
// completed, successful outcome — confirmed against a real run: both
|
|
2887
|
+
// tasks that reached 'skipped' (the Bug 4 no-op-checkpoint fix) had
|
|
2888
|
+
// downstream dependents that never got scheduled, blocking the
|
|
2889
|
+
// entire remaining 64-task run.
|
|
2890
|
+
return dep && (dep.status === 'checkpointed' || dep.status === 'integrated' || dep.status === 'skipped');
|
|
2857
2891
|
});
|
|
2858
2892
|
});
|
|
2859
2893
|
|