| 1 |
U1 |
experimental toggle + settings (copy fix m9) |
main |
upstream Zoo-Code-Org#1521 @ e89cceddd |
397 |
DONE — CI 22/22 green on 39762bf81 (incl. mutation-diff); CR settled, 4/4 RCs addressed, no new findings (vi mô hình; handler+ClineProvider round-trip; 4-theme Docker baselines; re-review RCs incl. 3936323331 false+unset save-payload round-trip); main sync (2026-09-05): head e89cceddd additively merges upstream main 0dbd5846f (5 commits: v3.82.0 Zoo-Code-Org#1533, GPT-6 Astra Zoo-Code-Org#1506, DeepSeek V4 Flash Vision Zoo-Code-Org#1488, throwIfAborted Zoo-Code-Org#1288, async Task.dispose() teardown fix Zoo-Code-Org#1527) — clean merge, standalone 397 numstat-identical; local gates re-verified on e89cceddd (types 11/11, vitest 84/84 + 159/159 + 11/11 + 26/26, mutation gate 2/2 Killed vs 0dbd5846f); body patched; final wrap-up comment posted (5544529700, pings @edelauna); CI 19/19 green on e89cceddd (incl. mutation-diff); awaiting CR re-review on the sync head + maintainer approval/merge; maintainer follow-up ping #1 posted 2026-09-06 (issue comment 5555167708, ~32 h silence after the wrap-up — the one-time follow-up per plan) |
| 2 |
U2 |
per-request effort resolution (reasoning.ts) |
U1 |
upstream Zoo-Code-Org#1522 @ 069c34b9a |
112 |
undrafted; 2nd sync head efbd336e5 additively merges U1's final head 39762bf81 (last Zoo-Code-Org#1521 CR fix — false/unset persistence cases in SettingsView.spec.tsx, +23/−10; U2's 3 files byte-identical to 18f488fa5); main sync (2026-09-05): head 069c34b9a merges U1's post-main-sync head e89cceddd (main 0d937c050 → 0dbd5846f) — clean merge, zero conflicts; standalone 112 (the 1-line comment re-indent deletion absorbed into main by Zoo-Code-Org#1488; api/index.ts blob unchanged); local gates re-verified on 069c34b9a (types 11/11, vitest 8/8 + 26/26, mutation gate 17/17 Killed CI-faithful vs 0dbd5846f); CI on 18f488fa5 all green (4 stale CANCELLED superseded by fresh SUCCESS); CR finding 3936500327 (false save path — cumulative U1 content) addressed in-thread, fixed in efbd336e5; body patched; CI 19/19 green on 069c34b9a (incl. mutation-diff); CR re-review on the new head: APPROVED (review 5120385746, 2026-09-05) — awaiting maintainer approval/merge |
| 3 |
U3 |
task-local runtime effort + switch re-validation (m1a) |
U2 |
upstream Zoo-Code-Org#1523 @ 1087fcbd4 |
418 |
undrafted (2026-09-05); 2nd sync head c5b48aa7e merges U2's new tip efbd336e5; 3rd (main) sync head e8c66cfad merges U2's post-main-sync tip 069c34b9a (main 0d937c050 → 0dbd5846f) — 1 conflict in Task.ts resolved (async dispose(): Promise<void> restructure kept; U3's 4-line DTE JSDoc above the new dispose(); test afterEach awaits task.dispose() per repo idiom); CR re-review on the main-sync head: review 5120440807 CHANGES_REQUESTED (2 findings) → fixed in 1edd728c4: disposeOnce() now clears runtimeThinkingEffort / runtimeThinkingEffortSource / preOverrideReasoningEffort (retained disposed task never serves a stale override; JSDoc claim true) and the test afterEach awaits task.dispose() unconditionally (!task.abort guard removed); standalone 398 → 403 (+5/−1 — soft overshoot, CR-driven, ≤1000 hard); local gates green on 1edd728c4 (check-types 11/11, vitest 8/8, eslint 0, mutation 25/25 Killed standalone vs 069c34b9a); body patched (CR-fix section); CR thread reply 3942099889 + PR comment 5554878078 posted; CI on 1edd728c4 21/21 green (incl. mutation-diff); dispose-reset split amended: reset code now in U3, U4 deduped (row 4); CR re-review on 1edd728c4 (2026-09-06): CHANGES_REQUESTED (review PRR_kwDOSK-bwM8AAAABMVxwdg) — new RC 3942121231 (Task.ts L2712): the unconditional dispose-time field clears left the override behind in apiConfiguration.reasoningEffort + the built api handler (both populated by setRuntimeThinkingEffort) → fixed in 1087fcbd4: disposeOnce() now calls the standard clearing call setRuntimeThinkingEffort(undefined) (restores apiConfiguration/api from preOverrideReasoningEffort before clearing the runtime fields) + 14-line describe("dispose") killing-test block (asserts the clear and the restore); standalone 403 → 418 (CR-driven soft overshoot, ≤1000 hard); local gates green on 1087fcbd4 (check-types 11/11, vitest 9/9, eslint 0, mutation 26/26 Killed standalone vs 069c34b9a); pushed; body patched (CR follow-up fix section); CR thread reply 3942205869 + PR comment 5555098023; CI on 1087fcbd4 20/20 green (incl. mutation-diff); awaiting CR re-review + maintainer approval/merge |
| 4 |
U4 |
history persistence (taskMetadata) |
U3 |
drafted (fork head a659ef23a) |
231 |
drafted 2026-09-05 (waiting-time sync); main sync (2026-09-05): head 4ba29924a merges U3's post-main-sync tip e8c66cfad (main 0d937c050 → 0dbd5846f) — clean auto-merge; 3 persistence files byte-identical to 111cf40ae, 3 dispose test assertions now await task.dispose() (async dispose() restructure, repo idiom); rework (2026-09-06): head 0c44a5b5a syncs U3's CR-fix head 1edd728c4 (clean auto-merge) + dedup commit drops the 9 dispose-reset lines now living in U3 (DTE JSDoc 3 + disposeOnce() block 6, per CR 5120440807); the 12-line dispose-boundary describe("dispose") test block stays in U4 (exercises U3's reset on the stacked tree); standalone 253 → 244; local gates green on 0c44a5b5a (check-types 11/11, eslint 0, vitest 18/18, mutation 4/4 Killed vs 1edd728c4); body updated (u4-upstream-body.md); restore-guard kill test (L42) in head; force-pushed to fork; held for upstream slot (plan §2.2 max-3-open) — open when a slot frees; 4th sync (2026-09-06): head a659ef23a merges U3's CR follow-up head 1087fcbd4 — 1 conflict in the DTE test file (both sides added a describe("dispose") block at the same spot), resolved by keeping U3's extended block (U4's 12-line version asserted a strict subset — the same three field assertions; U3's version adds the apiConfiguration restore assertion); U4's history-persistence + abortTask blocks untouched; standalone 244 → 231; local gates green on a659ef23a (check-types 11/11, eslint 0, vitest 116/116 (7 DTE suites), mutation 4/4 Killed vs 1087fcbd4); body updated; pushed to fork |
| 5 |
U5 |
anthropic adaptive effort envelope |
U4 |
drafted (fork head 21af51596) |
360 |
drafted 2026-09-05 (waiting-time sync): unit commit bb70d4f1b (mutation-gate fix folded in) + sync merge of U4 head d70b40ad3 (pre-fix sync head 54c033aa8); main sync (2026-09-05): head 704425cf2 merges U4's post-main-sync tip 4ba29924a (main 0d937c050 → 0dbd5846f) — clean auto-merge, both DTE files byte-identical; standalone 360 unchanged; first gate run: 4 Survived → fixed same PR (L42): 1 default-branch kill test + 2 equivalent-mutant directives (equivalence proof in body; maintainer approval requested); local gates green on 704425cf2 (check-types 11/11, eslint 0, vitest 21/21, mutation 25/25 Killed + 3 Ignored vs 4ba29924a); sync (2026-09-06): head 5de30425f merges U4's reworked tip 0c44a5b5a (brings in U3's CR fix 1edd728c4 + U4's dedup) — clean auto-merge, both DTE files byte-identical, standalone 360 unchanged; local gates green on 5de30425f (check-types 11/11, vitest 21/21, mutation 25/25 Killed + 3 Ignored vs 0c44a5b5a); body updated (u5-upstream-body.md); pushed to fork; held for upstream slot (plan §2.2 max-3-open); 4th sync (2026-09-06): head 21af51596 merges U4's fourth-sync head a659ef23a (brings in U3's CR follow-up fix 1087fcbd4 + U4's dispose-block conflict resolution) — clean auto-merge, both DTE files byte-identical, 360 unchanged; local gates green on 21af51596 (check-types 11/11, eslint 0, vitest 21/21, mutation 25/25 Killed + 3 Ignored vs a659ef23a); body updated; pushed to fork |
| 6 |
U25a |
hermetic OpenRouter fallback catalog (M4) |
main |
- |
- |
pending |
| 7 |
U6 |
tool schema/prompt/mode filter + effort enum (m7) |
U5 |
- |
- |
pending |
| 8 |
U13 |
new_task input - FINAL strict schema + hardening (B1/M7/m3/n6/n7) |
U5 |
- |
- |
pending |
| 9 |
U7 |
SetThinkingEffortTool core (incl. m8 test via union) |
U6 |
- |
- |
pending |
| 10 |
U14 |
orchestrator task-level specs (B1-corrected) |
U13 |
- |
- |
pending |
| 11 |
U8 |
tool guards + user-write reseed API (m4a) |
U7 |
- |
- |
pending |
| 12 |
U15 |
orchestrator tool + parser specs (n7 parity) |
U14 |
- |
- |
pending |
| 13 |
U9 |
parser + presenter (m6 documented skip) |
U8 |
- |
- |
pending |
| 14 |
U16 |
ChatView subtask UI + visible caption (m13) |
U15 |
- |
- |
pending |
| 15 |
U10 |
task runtime wiring |
U9 |
- |
- |
pending |
| 16 |
U17 |
ChatView spec remainder + provider delegation |
U16 |
- |
- |
pending |
| 17 |
U11 |
chat row display + localized aria (m10/n3) |
U10 |
- |
- |
pending |
| 18 |
U18 |
extension host wiring + ask gate (m2/n6) |
U17 |
- |
- |
pending |
| 19 |
U12 |
i18n dte-3 strings x18 locales (n1/n2) |
U18 |
- |
- |
pending |
| 20 |
U19 |
thinkingEffort utilities (D3 note) |
U11 |
- |
- |
pending |
| 21 |
U20 |
message handling + refusal line + two-writer test (m4b/m5) |
U19 |
- |
- |
pending |
| 22 |
U21 |
state push + provider-change merge safety (m1b) |
U20 |
- |
- |
pending |
| 23 |
U22 |
composer toggle (n4 dead prop removed) |
U21 |
- |
- |
pending |
| 24 |
U23 |
TaskHeader chip + NEW visual story + a11y (M6/m11) |
U22 |
- |
- |
pending |
| 25 |
U24a |
i18n dte-4 locales 1/2 (9 locales) |
U23 |
- |
- |
pending |
| 26 |
U24b |
i18n dte-4 locales 2/2 (9 locales) |
U24a |
- |
- |
pending |
| 27 |
U25 |
e2e proxy + fixtures (after U5 + U25a merged) |
main |
- |
- |
pending |
| 28 |
U26 |
e2e tool + switching part 1 (m16 pin) |
U25 |
- |
- |
pending |
| 29 |
U27 |
e2e switching part 2 |
U26 |
- |
- |
pending |
| 30 |
U28 |
e2e new_task fixtures (after dte-5 units merged) |
main |
- |
- |
pending |
| 31 |
U29 |
e2e new_task part 1 (m17 proxy generalize) |
U28 |
- |
- |
pending |
| 32 |
U30 |
e2e new_task part 2 (m17 dedup) |
U29 |
- |
- |
pending |
| 33 |
U36 |
e2e user composer-toggle flow (M5, after U20/U21 merged) |
main |
- |
- |
pending |
| 34 |
U31 |
F7 capability fill-in + LM Studio wire fix (M1) |
U18 |
- |
- |
pending |
| 35 |
U32a |
F7 schema + OpenAICompat panel + round-trip test (m15) |
U31 |
- |
- |
pending |
| 36 |
U32b |
F7 LM Studio/Ollama/LiteLLM/Friendli panels (M2) |
U32a |
- |
- |
pending |
| 37 |
U33 |
F7 webview resolution - shared extract (m14) |
U32b |
- |
- |
pending |
| 38 |
U33b |
F7 i18n x18 locales (n8 optional) |
U33 |
- |
- |
pending |
| 39 |
U34 |
F7 integration specs |
U33b |
- |
- |
pending |
| - |
U35 (micro) |
F7 e2e touch-up |
main (after U34) |
- |
- |
pending |
Tracking issue for the DTE-v2 recreation. Replaces this fork's #28 (closed as superseded) and the old upstream series: PRs Zoo-Code-Org#1336 Zoo-Code-Org#1338 Zoo-Code-Org#1354 Zoo-Code-Org#1355 Zoo-Code-Org#1356 Zoo-Code-Org#1359 Zoo-Code-Org#1361 Zoo-Code-Org#1366 Zoo-Code-Org#1379 and issues Zoo-Code-Org#1328 Zoo-Code-Org#1329 Zoo-Code-Org#1330 Zoo-Code-Org#1331 Zoo-Code-Org#1332 Zoo-Code-Org#1376 Zoo-Code-Org#1377 Zoo-Code-Org#1378 - all closed as superseded on 2026-09.
feat/dte-trial-all@27a2e97df(branch retained; tagdte-legacy/union). Never per-PR heads (B1/M7/m8 hazard).plans/dte-gap-review.md- 37 items (1 blocker / 8 major / 17 minor / 11 nit), all dispositioned in section 8 of the plan below.Unit status (maintained as PRs open/merge)
e89cceddd39762bf81(incl.mutation-diff); CR settled, 4/4 RCs addressed, no new findings (vimô hình; handler+ClineProvider round-trip; 4-theme Docker baselines; re-review RCs incl. 3936323331 false+unset save-payload round-trip); main sync (2026-09-05): heade89ccedddadditively merges upstream main0dbd5846f(5 commits: v3.82.0 Zoo-Code-Org#1533, GPT-6 Astra Zoo-Code-Org#1506, DeepSeek V4 Flash Vision Zoo-Code-Org#1488,throwIfAbortedZoo-Code-Org#1288, asyncTask.dispose()teardown fix Zoo-Code-Org#1527) — clean merge, standalone 397 numstat-identical; local gates re-verified one89cceddd(types 11/11, vitest 84/84 + 159/159 + 11/11 + 26/26, mutation gate 2/2 Killed vs0dbd5846f); body patched; final wrap-up comment posted (5544529700, pings @edelauna); CI 19/19 green one89cceddd(incl.mutation-diff); awaiting CR re-review on the sync head + maintainer approval/merge; maintainer follow-up ping #1 posted 2026-09-06 (issue comment 5555167708, ~32 h silence after the wrap-up — the one-time follow-up per plan)069c34b9aefbd336e5additively merges U1's final head39762bf81(last Zoo-Code-Org#1521 CR fix — false/unset persistence cases inSettingsView.spec.tsx, +23/−10; U2's 3 files byte-identical to18f488fa5); main sync (2026-09-05): head069c34b9amerges U1's post-main-sync heade89cceddd(main0d937c050→0dbd5846f) — clean merge, zero conflicts; standalone 112 (the 1-line comment re-indent deletion absorbed into main by Zoo-Code-Org#1488;api/index.tsblob unchanged); local gates re-verified on069c34b9a(types 11/11, vitest 8/8 + 26/26, mutation gate 17/17 Killed CI-faithful vs0dbd5846f); CI on18f488fa5all green (4 stale CANCELLED superseded by fresh SUCCESS); CR finding 3936500327 (false save path — cumulative U1 content) addressed in-thread, fixed inefbd336e5; body patched; CI 19/19 green on069c34b9a(incl.mutation-diff); CR re-review on the new head: APPROVED (review 5120385746, 2026-09-05) — awaiting maintainer approval/merge1087fcbd4c5b48aa7emerges U2's new tipefbd336e5; 3rd (main) sync heade8c66cfadmerges U2's post-main-sync tip069c34b9a(main0d937c050→0dbd5846f) — 1 conflict inTask.tsresolved (asyncdispose(): Promise<void>restructure kept; U3's 4-line DTE JSDoc above the newdispose(); testafterEachawaitstask.dispose()per repo idiom); CR re-review on the main-sync head: review5120440807CHANGES_REQUESTED (2 findings) → fixed in1edd728c4:disposeOnce()now clearsruntimeThinkingEffort/runtimeThinkingEffortSource/preOverrideReasoningEffort(retained disposed task never serves a stale override; JSDoc claim true) and the testafterEachawaitstask.dispose()unconditionally (!task.abortguard removed); standalone 398 → 403 (+5/−1 — soft overshoot, CR-driven, ≤1000 hard); local gates green on1edd728c4(check-types 11/11, vitest 8/8, eslint 0, mutation 25/25 Killed standalone vs069c34b9a); body patched (CR-fix section); CR thread reply 3942099889 + PR comment 5554878078 posted; CI on1edd728c421/21 green (incl.mutation-diff); dispose-reset split amended: reset code now in U3, U4 deduped (row 4); CR re-review on1edd728c4(2026-09-06): CHANGES_REQUESTED (reviewPRR_kwDOSK-bwM8AAAABMVxwdg) — new RC3942121231(Task.ts L2712): the unconditional dispose-time field clears left the override behind inapiConfiguration.reasoningEffort+ the builtapihandler (both populated bysetRuntimeThinkingEffort) → fixed in1087fcbd4:disposeOnce()now calls the standard clearing callsetRuntimeThinkingEffort(undefined)(restoresapiConfiguration/apifrompreOverrideReasoningEffortbefore clearing the runtime fields) + 14-linedescribe("dispose")killing-test block (asserts the clear and the restore); standalone 403 → 418 (CR-driven soft overshoot, ≤1000 hard); local gates green on1087fcbd4(check-types 11/11, vitest 9/9, eslint 0, mutation 26/26 Killed standalone vs069c34b9a); pushed; body patched (CR follow-up fix section); CR thread reply 3942205869 + PR comment 5555098023; CI on1087fcbd420/20 green (incl.mutation-diff); awaiting CR re-review + maintainer approval/mergea659ef23a)4ba29924amerges U3's post-main-sync tipe8c66cfad(main0d937c050→0dbd5846f) — clean auto-merge; 3 persistence files byte-identical to111cf40ae, 3 dispose test assertions nowawait task.dispose()(asyncdispose()restructure, repo idiom); rework (2026-09-06): head0c44a5b5asyncs U3's CR-fix head1edd728c4(clean auto-merge) + dedup commit drops the 9 dispose-reset lines now living in U3 (DTE JSDoc 3 +disposeOnce()block 6, per CR5120440807); the 12-line dispose-boundarydescribe("dispose")test block stays in U4 (exercises U3's reset on the stacked tree); standalone 253 → 244; local gates green on0c44a5b5a(check-types 11/11, eslint 0, vitest 18/18, mutation 4/4 Killed vs1edd728c4); body updated (u4-upstream-body.md); restore-guard kill test (L42) in head; force-pushed to fork; held for upstream slot (plan §2.2 max-3-open) — open when a slot frees; 4th sync (2026-09-06): heada659ef23amerges U3's CR follow-up head1087fcbd4— 1 conflict in the DTE test file (both sides added adescribe("dispose")block at the same spot), resolved by keeping U3's extended block (U4's 12-line version asserted a strict subset — the same three field assertions; U3's version adds theapiConfigurationrestore assertion); U4's history-persistence + abortTask blocks untouched; standalone 244 → 231; local gates green ona659ef23a(check-types 11/11, eslint 0, vitest 116/116 (7 DTE suites), mutation 4/4 Killed vs1087fcbd4); body updated; pushed to fork21af51596)bb70d4f1b(mutation-gate fix folded in) + sync merge of U4 headd70b40ad3(pre-fix sync head54c033aa8); main sync (2026-09-05): head704425cf2merges U4's post-main-sync tip4ba29924a(main0d937c050→0dbd5846f) — clean auto-merge, both DTE files byte-identical; standalone 360 unchanged; first gate run: 4 Survived → fixed same PR (L42): 1 default-branch kill test + 2 equivalent-mutant directives (equivalence proof in body; maintainer approval requested); local gates green on704425cf2(check-types 11/11, eslint 0, vitest 21/21, mutation 25/25 Killed + 3 Ignored vs4ba29924a); sync (2026-09-06): head5de30425fmerges U4's reworked tip0c44a5b5a(brings in U3's CR fix1edd728c4+ U4's dedup) — clean auto-merge, both DTE files byte-identical, standalone 360 unchanged; local gates green on5de30425f(check-types 11/11, vitest 21/21, mutation 25/25 Killed + 3 Ignored vs0c44a5b5a); body updated (u5-upstream-body.md); pushed to fork; held for upstream slot (plan §2.2 max-3-open); 4th sync (2026-09-06): head21af51596merges U4's fourth-sync heada659ef23a(brings in U3's CR follow-up fix1087fcbd4+ U4's dispose-block conflict resolution) — clean auto-merge, both DTE files byte-identical, 360 unchanged; local gates green on21af51596(check-types 11/11, eslint 0, vitest 21/21, mutation 25/25 Killed + 3 Ignored vsa659ef23a); body updated; pushed to forkRisk flags (quick reference — review pass 2026-09-04)
ChatTextArea.tsxanchors overlap open upstream feat(ollama): add reasoning effort selectors and gate on Enable Thinking Zoo-Code-Org/Zoo-Code#1345; if it lands first, rebase U22 onto it (§10 watch item).Task.ts), U13 (NewTaskTool.ts), U22 (ChatTextArea.tsx), U9 (NativeToolCallParser.ts/presentAssistantMessage.ts), U16 (ChatView.tsx), U16/U17 (ChatView.spec.tsx).DTE Final Ship Plan — "Ship It All" (DTE-v2, finalized 2026-09)
This is the single execution source of truth. It supersedes
plans/dte-400line-recreation-plan.md(kept as historical inventory) and folds in every actionable finding fromplans/dte-gap-review.md. Everything below is final: content source, unit ledger, trigger order, decisions, and the ship-all acceptance gate.upstream/main(re-verify per branch; wave-1 baseb2f63d366unless main advanced).origin/feat/dte-trial-all@27a2e97df— file content viagit show 27a2e97df:<path>, hunks viagit diff <base>..27a2e97df -- <path>.b17373bb9(dte-3 tip) lacks the dte-5/dte-7-lineage fixes,6eba686c1(dte-5 tip) ships the strict-schema-breakingnew_task.ts(B1), and65ee7b5e6(dte-7 tip) lacks the A5 orchestrator hardening (M7) and the dte-3 12-line effort-rank test (m8). Only the union is complete.Union-tree verification (ran 2026-09, results pinned)
git merge-base --is-ancestor b17373bb9 27a2e97dfcustom-legacyeffort-rank fallback test) is inside the union; m8 resolves for free by extracting U7/U8 from the uniongit grep custom-legacy 27a2e97dfsrc/core/tools/__tests__/setThinkingEffortTool.spec.tsnew_task.ts@ unionthinking_effort=["string","null"]pattern, all four params inrequired(B1 shape) with the explanatory commentNewTaskTool.ts@ unionstartLevelsfilter at :94, empty-capability wording :106-107) — M7 shapethinking-effort-proxy.ts,fixtures/thinking-effort.ts,thinking-effort-tool/switching.test.ts,new-task-thinking-effort.test.ts(i.e. the dte-3→dte-7 comment drift and the 11-line teardown hygiene are already in the union content)taskMetadata.spec.tssrc/core/task-persistence/__tests__/taskMetadata.spec.tsat dte-2 tip and at the union (U4 file list confirmed)1. Decisions (all resolved — no open questions block execution)
simulateWebviewMessagetest-API affordance)supportsReasoningEffort; F7 profiles can declare efforts in settings"easonLiangWorldedtech/Zoo-Code#35. Branchfeat/dte-trial-allis never deleted (content-source reference; tagdte-legacy/union 27a2e97dfcreated in Phase 0). Upstream Zoo-Code-Org#1326/Zoo-Code-Org#1327 (F1 adaptive-thinking display fix) intentionally left open — its content is not in the union content source and merges independentlysleep(1500)e2e teardown) and n10 (EXPLICIT test wire-assertion omission) = kept, house pattern / documented choice2. Execution policy (in order, max 3 in flight)
main(shallow stacks). e2e/main units (U25a, U25–U30, U36) open only after their base units are merged and rebase onto plainmain(maintainer policy)./resume).mutation-diffscope stays fully killable in one Stryker run. Record the merge in the DTE-v2 final ship plan - 39-unit 400-line redo of the DTE series (supersedes #28) #35 ledger (both unit rows → same PR #). Never merge across wave/stack boundaries or to rescue an over-budget unit — split instead.3. Line-counting rule (binding)
git diff --shortstat <stack-base> <branch>— the number GitHub shows against that base.git diff --shortstaton the staged commit), not after CI. If the measure lands ≥380, restructure before pushing — move the next naturaldescribeblock / hunk group (the reserved split point) into the next unit — and re-measure. Never approve around the budget.mutation-diffgates on changed code). The amendment ledger (§7) tests are no exception.4. Final unit ledger (39 units; sequence column = trigger order)
Targets are estimates from the old branches ± amendments; measure every unit at push time and hunk-tune if over (⚠ marks units estimated ≥380).
Wave 1 — base (base:
main)git show 27a2e97df:<path>)feat(settings): dynamic thinking effort experimental toggle (DTE-1)Wave 2 — dte-2 content (stacked after U1)
feat(api): per-request effective reasoning-effort resolution (DTE-2a)reasoning.ts(+45),api/index.ts(+9),dte-effective-reasoning-effort.spec.ts(+58),experiments.spec.ts(1/28)feat(task): task-local runtime thinking effort state (DTE-2b)Task.ts(+132/−3),Task.runtime-thinking-effort.test.tscore describes (≈220/394)feat(persistence): persist task thinking effort to history (DTE-2c)taskMetadata.ts(+13/−1),history.ts(+8),taskMetadata.spec.ts(+81), Task test remainder (~174)feat(anthropic): adaptive thinking-effort envelope (DTE-2d)anthropic.ts(+43/−1),anthropic-adaptive-effort.spec.ts(+297),ExperimentalSettings.spec.tsx(1/75)Wave 3 — dte-3 content (stacked after U5) · Wave 4 — dte-5 content (parallel track, stacked after U5's head)
test(api): hermetic aimock fallback catalog for OpenRouter fetcher(base:main; env-gated, main-safe)src/api/providers/fetchers/openrouter.ts(+~40: honorE2E_MOCK_MODEL_LIST_FALLBACK), bundled minimal catalog (openai/gpt-5,openai/gpt-5.1withsupported_parameters: ["reasoning"], +~25), fetcher test (+~20)feat(tools): set_thinking_effort schema, prompt, mode filter (DTE-3a)native-tools/set_thinking_effort.ts(+49),native-tools/index.ts(+2),filter-tools-for-mode.ts(+41),filter-thinking-effort.spec.ts(+151),packages/typesexperiment/tool/shared files (+46)enum: ["none","minimal","low","medium","high","xhigh","max"]on the effort property + spec (+~14)feat(orchestrator): new_task thinking-effort input (DTE-5a)NewTaskTool.ts(+95/−14),Task.ts(+56/−2),new_task.tsprompt (+6),shared/tools.ts(+3/−2),newTaskTool.spec.ts(+12),new-task-delegation.spec.ts(+6) — all from the union tree (FINAL shapes)undefinedat the child re-validation consumer +~6), n7 (sibling parity with SetThinkingEffortTool normalization)feat(tools): SetThinkingEffortTool core (DTE-3b)SetThinkingEffortTool.tscore hunks (+200),+220/504) — union tree; includes the 12-linesetThinkingEffortTool.spec.tspart 1 (custom-legacyeffort-rank fallback test (m8)test(orchestrator): new_task effort task-level specs (DTE-5b)Task.new-task-effort.spec.ts(+194),newTaskThinkingEffort.spec.tspart 1 (~+200/407) — union assertions (B1-corrected shape)feat(tools): set_thinking_effort guards (escalation cap, oscillation, capability) (DTE-3c)SetThinkingEffortTool.tsremainder (+106),+284/−10)setThinkingEffortTool.spec.tspart 2 (recordUserThinkingEffortWrite(task, effort)for guard-history reseed + API unit tests (+~15)test(orchestrator): new_task effort tool + parser specs (DTE-5c)newTaskThinkingEffort.spec.tspart 2 (~+207/−6),NativeToolCallParser.spec.ts(+51),NativeToolCallParser.ts(+6) — union contentfeat(parser): parse and present set_thinking_effort tool calls (DTE-3d)NativeToolCallParser.ts(+20),presentAssistantMessage.ts(+12), both parser/presenter specs (+362)feat(webview): subtask thinking-effort UI in ChatView (DTE-5d)ChatView.tsx(+154/−47),ChatView.spec.tsxpart 1 (~+125/−5)feat(task): wire set_thinking_effort into task runtime (DTE-3e)Task.ts(+105/−1),Task.runtime-thinking-effort.test.tsdte-3 adds (~+290/311)test(webview): ChatView effort spec remainder + provider delegation (DTE-5e)ChatView.spec.tsxpart 2 (~+125/−4),provider-delegation.spec.ts(+291/−2)feat(webview): display set_thinking_effort results in chat row (DTE-3f)ChatRow.tsx(+26),ChatRow.thinking-effort.spec.tsx(+120),ExperimentalSettings.spec.tsx(+75), Task test remainder (~21),vscode-extension-host.ts(+4)<Brain>aria-label (toggleTitlekey oraria-hidden; +~14); n3: de-emoji the spec fixture + fix stale describe label (±4)feat(webview): wire new_task effort through extension host (DTE-5f)ClineProvider.ts(+50/−9),webviewMessageHandler.ts(+8/−1),webviewMessageHandler.spec.ts(+36/−3),vscode-extension-host.ts(+8/−1)feat(i18n): translate set_thinking_effort strings (18 locales) (DTE-3g)locales/*/chat.json+5 ×18,*/settings.json+4 ×18Zoo(自動)spacing)Wave 5 — dte-4 content (stacked after U11's head)
feat(webview): thinking-effort utilities (DTE-4a)thinkingEffort.ts(+82),thinkingEffort.spec.ts(+178)feat(webview): thinking-effort message handling (DTE-4b)webviewMessageHandler.ts(+54),webviewMessageHandler.thinking-effort.spec.ts(+141)recordUserThinkingEffortWrite+ two-writer oscillation test (+~35)feat(webview): push thinking-effort state to webview (DTE-4c)ClineProvider.ts(+51),ClineProvider.spec.ts(+154/−3)(task as any).apiConfigurationoverwrite of the merged copy) + tests (+~22)feat(webview): ThinkingEffortToggle composer component (DTE-4d)ThinkingEffortToggle.tsx(+118),ThinkingEffortToggle.spec.tsx(+238),ChatTextArea.tsxanchorsdisabledprop (−12); Zoo-Code-Org#1345 anchor watch (rebase onto it if it merges first)feat(webview): thinking-effort chip in TaskHeader + visual snapshots (DTE-4e)TaskHeader.tsx(+37/−1),TaskHeader.thinking-effort.spec.tsx(+166),ThinkingEffortToggle.visual.tsx(+32),.visual.fixture.tsx(+27),ChatRow.thinking-effort.spec.tsx(+15), + PNG baselinestabIndex={0}+aria-labelfromchipTooltip(+~26)feat(i18n): thinking-effort UI strings, locales 1/2 (DTE-4f-a)locales/*(~15/8 ×9: en, zh-TW, zh-CN, ja, ko, de, fr, es, ca)feat(i18n): thinking-effort UI strings, locales 2/2 (DTE-4f-b)locales/*(~15/8 ×9: pt-BR, ru, tr, nl, it, pl, hi, id, vi)Wave 6 — e2e addenda (open only after base units merged; rebase onto
main; content: union tree)test(e2e): DTE request capture proxy + fixtures (DTE-3e2e-a)thinking-effort-proxy.ts(+212),fixtures/thinking-effort.ts(+159),runTest.ts(+2), oldsetThinkingEffortTool.spec.ts−12test(e2e): set_thinking_effort tool + switching workflow (DTE-3e2e-b)thinking-effort-tool.test.ts(+166),thinking-effort-switching.test.tspart 1 (~+130/263)strictEqualagainst the documented default) (+~6)test(e2e): set_thinking_effort switching suite remainder (DTE-3e2e-c)thinking-effort-switching.test.tspart 2 (~+133)test(e2e): new_task effort fixtures (DTE-5e2e-a)fixtures/subtasks.ts(+189),runTest.ts(+2/−1)test(e2e): new_task thinking-effort workflow part 1 (DTE-5e2e-b)new-task-thinking-effort.test.tspart 1 (~+260/501)headersSentguard) + reuse — dedup ~90 lines inline (+30/−40)test(e2e): new_task thinking-effort workflow part 2 (DTE-5e2e-c)new-task-thinking-effort.test.tspart 2 (~+241)test(e2e): user composer-toggle thinking-effort flow (DTE-4e2e)packages/types/src/api.ts(+~15:RooCodeTestAPI.simulateWebviewMessage(msg)),src/extension/api.ts(+~12), provider test-hook wiring (+~20),suite/composer-toggle-thinking-effort.test.ts(+~75; marker-prompt fixture,sequenceIndex: 0, asserts the capturedreasoning.effortequals the user-selected level viawithOpenRouterCaptureProxy), marker fixture (+~15)Wave 7 — F7 content (stacked after U18's head)
feat(api): declared reasoning-effort capability for OpenAI-compatible providers (F7a)model-capabilities.ts(+34),openai.ts(+14/−1),lm-studio.ts(+12/−2),base-openai-compatible-provider.ts(+11/−1),friendli.ts(+11/−1),native-ollama.ts(+17/−5),router-provider.ts(+27/−10),model-capabilities.spec.ts(+61),native-ollama.spec.ts(+66)reasoning_effortviagetModelParams({format:"openai"})+getOpenAiReasoning(sibling pattern ofopenai.ts:170) + request-layer test asserting the body field (+~40)feat(settings): supported effort levels — schema + OpenAI-compatible panel (F7b-a)provider-settings/common.ts(+10/−1),provider-settings.test.ts(+55),OpenAICompatible.tsx(+48/−21),OpenAICompatible.spec.tsx(+128),SupportedEffortLevels.tsx(+67),ExperimentalSettings.tsx(+8)[]/ omitted) + one request-construction assertion for the declared flow (+~35)feat(settings): supported effort levels — LM Studio/Ollama/LiteLLM/Friendli panels (F7b-b)LMStudio.tsx/Ollama.tsx/LiteLLM panel/Friendli.tsx(+~25 each: renderSupportedEffortLevelsgated on profile shape),ApiOptions.tsxwiring, panel specs (+~40 each)feat(webview): F7 effort resolution in thinking-effort utilities (F7c)thinkingEffort.ts(+56/−7),thinkingEffort.spec.ts(+139/−5)packages/types(single implementation; both mirrors delegate) + packages/types spec (+~90); fallback if the extraction is messier: pinned parity-table test (+~40)feat(i18n): F7 settings strings, 18 locales (F7c-i18n)locales/*/settings.json(~8/3 ×18)test(api): F7 declared-effort integration specs (F7d)f7-declared-reasoning-effort.spec.ts(+249),SetThinkingEffortTool.ts(+21),NewTaskTool.ts(+11/−2),filter-tools-for-mode.ts(+10/−10),newTaskThinkingEffort.spec.ts(+34/−6)test(e2e): F7 touch-up in new_task e2e suitenew-task-thinking-effort.test.ts(+11) — basemain, opens after U34 mergedTotals: 39 units (38 full + 1 micro). Old-series own content ≈10,800 lines + amendments ≈900 lines ≈ 11,700 counted lines ÷ 400 ≈ 29 minimum; 39 units reflects natural feature boundaries + the required splits.
Risk flags (quick reference — review pass 2026-09-04)
ChatTextArea.tsxanchors overlap open upstream feat(ollama): add reasoning effort selectors and gate on Enable Thinking Zoo-Code-Org/Zoo-Code#1345; if it lands first, rebase U22 onto it (§10 watch item).Task.ts), U13 (NewTaskTool.ts), U22 (ChatTextArea.tsx), U9 (NativeToolCallParser.ts/presentAssistantMessage.ts), U16 (ChatView.tsx), U16/U17 (ChatView.spec.tsx).5. Per-PR workflow (identical for every unit)
git worktree add -b feat/dte-v2-<seq>-<slug> C:\work\Zoo-Code-fork\wt-dte-v2-<seq> <stack-base>+pnpm install --frozen-lockfile.git show 27a2e97df:<path> > <file>; mixed files via hunk-level surgery (git diff <base>..27a2e97df -- <path>→ hand-separated patches / edit to old content minus later-unit hunks). Apply the unit's §4 amendments on top.git status --shortafter every staging step. Hunk-surgery double-check (mixed files):git diff <stack-base> HEAD -- <paths>against the27a2e97dfhunk set for the file — every expected hunk present, no later-unit hunk leaked in (those belong to the stacked unit), no stray edits to pre-existing content. The §9 content-fidelity check is the final net; this catches per-unit mistakes early.pnpm --dir src exec eslint --prune-suppressions --max-warnings=0 <each touched src file>— suppression counts never increase.pnpm check-types(repo root); targeted vitest suites for every touched package (run from the package declaring Vitest).node scripts/find-missing-translations.jsif locale files changed (18 locales,src/i18nandwebview-ui/src/i18nwhere keys are used).themes:checkonly if visual baselines were regenerated (Docker artifact; never hand-editplaywright/themes/*).git diff --shortstat <stack-base> HEAD→ a+d ≤ 400 (§3); split if over.<stack-base>with the §6 body (stack note + budget statement mandatory; D3 note for dte-4 units; amendment list with finding IDs).mutation-diff(expect ~30 min) andcodecov/patch.plans/dynamic-thinking-effort-plan.md§10; mark the old PR(s) this unit replaces (already closed as superseded — keep the link in the close comment thread).6. PR body template
7. CI targets (upstream/main
b2f63d366; re-verify per push)code-qa.ymlcodecov/patchgreene2e.yml//comments inside fixture JSON)visual-regression.ymlcodeql.ymlmutation-testing.ymlmutation-diffgreen — changed lines have in-PR killing testslabel-pr-review-state.ymlci-pending→coderabbit-review-active→draft-approvedUndraft gate: all of the above green + CodeRabbit review complete with no actionable comments + final comment posted (findings → what changed; local verification; standalone a/d numbers).
8. Gap-amendment ledger (disposition of all 37 gap-review items)
In-PR (verified at merge of the listed unit): B1→U13/U14 · M1→U31 · M2→U32b · M4→U25a · M5→U36 · M6→U23 · M7→U13 (union source) · M8→the split itself · m1→U3+U21 · m2→U18 · m3→U13 · m4→U8+U20 · m5→U20 · m7→U6 · m8→U7/U8 (union source — free) · m9→U1 · m10→U11 · m11→U23 · m13→U16 · m14→U33 · m15→U32a · m16→U26 · m17→U29/U30 · n1/n2→U12 (+U24a quality pass) · n3→U11 · n4→U22 · n6→U13/U18 · n7→U13/U15/U18 · n8→U33b (optional) · n11→this document.
Documented keeps (no code change): m6 (U9 PR body) · m12/D3 (dte-4 PR bodies) · n9 (house pattern) · n10 (documented choice).
Post-merge follow-ups (file in tracking issue
easonLiangWorldedtech/Zoo-Code#35; the list below is embedded in #35's body — file the concrete PRs as they open and check the rows off there):openai.tshandleO3FamilyMessage→resolveEffectiveReasoningEffort; drop the staticas "low"|"medium"|"high"cast) + tests. ~40–60 lines.shouldUseReasoningEffortcapability-absent branch: compare selected effort vs capability/default (PoE 400 risk).ApiConfigSelector/ModeSelector/… patterns).9. Ship-all acceptance gate ("it's all shipped" checklist)
upstream/main; ledger rows carry final PR #, head SHA, measured a+d (each ≤400).git diff <pre-DTE main>..main -- <file>equalsgit diff 3ea9f63e6..27a2e97df -- <file>except the listed amendments — i.e. per-filegit diff main..27a2e97df -- <file>is empty, or its non-empty delta matches the §8 ledger entry. No union content silently dropped; no per-PR-head-only shape (B1/M7/m8 classes) shipped.feat/dte-trial-allbranch retained (tagdte-legacy/union 27a2e97dfcreated). Upstream Anthropic adaptive-thinking models: thinking content invisible (display omitted) and thinking_tokens telemetry missing Zoo-Code-Org/Zoo-Code#1326/fix(api): surface adaptive thinking display and thinking_tokens for Anthropic models Zoo-Code-Org/Zoo-Code#1327 (F1 adaptive-thinking display fix) left open by design — content not in the union content source; merges independently.plans/dynamic-thinking-effort-plan.md§10 updated with the full new PR table. (DTE-v2 final ship plan - 39-unit 400-line redo of the DTE series (supersedes #28) #35 created 2026-09-04 with the full plan + 39-unit status table; PR # / a+d cells fill in as units land.)10. Phase 0 (one-time prep)
dte-legacy/union 27a2e97dfcreated locally on 2026-09-04 (local reference; the branchfeat/dte-trial-allon the fork remains the shared pointer).easonLiangWorldedtech/Zoo-Code#35opened with this plan + the gap-review ledger embedded in its body.chat-model-thinking-selector) is still OPEN and touches the U22ChatTextArea.tsxanchors — if it merges first, rebase U22 onto it (policy recorded in old feat(webview): thinking effort surfaces — header chip, composer toggle, in-chat display (DTE series 4/5) Zoo-Code-Org/Zoo-Code#1359 body).0dbd5846f→4140c2c83— 2 infra commits:4140c2c83([Fix] Commits fail after users interrupt mutation tests Zoo-Code-Org/Zoo-Code#1525) stryker interrupt fix (scripts/stryker-diff.mjs/.test.mjs/stryker.config.mjstempDirName/mutation-testing.yml+.stryker-tmpeslint/tsconfig exclusions) and057dfeebb([Chore] Bump GitHub Actions to node24 runtimes to fix Node 20 deprecation warnings Zoo-Code-Org/Zoo-Code#1534) node24 CI runtimes. No sync needed: nosrc/business-code changes; all 3 open PRs remain MERGEABLE with CI green on the current heads (1521e89cceddd19/19, 1522069c34b9a19/19, 15231087fcbd420/20); the only file overlap is U1's own DTE-1 discovery-flag change inscripts/stryker-diff.mjs, which is orthogonal to the [Fix] Commits fail after users interrupt mutation tests Zoo-Code-Org/Zoo-Code#1525 interrupt fix. Re-verify on the next main advance or at merge time.4140c2c83→9d43817fd— 1 commit:9d43817fd([Fix] Tasks stall when interrupted subtasks resume Zoo-Code-Org/Zoo-Code#1470) "[Fix] Tasks stall when interrupted subtasks resume" — native tool-call parser stream isolation (NativeToolCallParserper-task scope API; 24 files incl.src/core/task/Task.ts,scripts/stryker-diff.test.mjs,src/test-utils/native-tool-call-stream.ts,package.json,src/eslint-suppressions.json; merged by zoomote[bot] 2026-09-05 23:34:46Z). No sync needed: file overlap on exactly 2 files, both with disjoint hunks and orthogonal semantics —src/core/task/Task.ts([Fix] Tasks stall when interrupted subtasks resume Zoo-Code-Org/Zoo-Code#1470 hunks in the streaming-parser-scope region L3022–L3600; U3's own hunks in imports/fields/updateApiConfiguration/setRuntimeThinkingEffort/dispose/API-metadata call sites — different regions, different subsystems) andscripts/stryker-diff.test.mjs([Fix] Tasks stall when interrupted subtasks resume Zoo-Code-Org/Zoo-Code#1470 removes the danglingpreferDirectTestFilesimport + its describe block and fixes theparseVitestTestFilestest at L25/L181/L200+; U1's only hunk is the DTE-1 discovery-flag assertion at ~L129 inbuildManifest). All 3 PRs re-verified MERGEABLE after the advance with heads unchanged (1521e89cceddd, 1522069c34b9a, 15231087fcbd4) and CI green on the current heads. Re-verify on the next main advance or at merge time.9d43817fd→8d296deef— 1 commit:8d296deef([Fix] Task history disappears when user reopens a task Zoo-Code-Org/Zoo-Code#1319) "[Fix] Task history disappears when user reopens a task" — task-persistence resume/reopen fix (17 files:src/core/task-persistence/*incl. newmergeMessageSnapshots.ts+readFileWithMissingRetry.ts,src/core/task/Task.ts,src/core/task/apiConversationHistory.ts,src/core/webview/ClineProvider.ts,packages/types/src/message.ts, e2e + task-lifecycle docs +src/eslint-suppressions.json; merged by zoomote[bot] 2026-09-06 03:26:04Z). No sync needed: file overlap on exactly 1 file, with disjoint hunks and orthogonal semantics —src/core/task/Task.ts([Fix] Task history disappears when user reopens a task Zoo-Code-Org/Zoo-Code#1319 hunks in the import block (L114), the resume/state region L982–L1240, L2111–L2227, and one line at L2676 (coords at 9d43817; identical to merge-base0dbd5846fcoords since [Fix] Tasks stall when interrupted subtasks resume Zoo-Code-Org/Zoo-Code#1470's Task.ts changes are all ≥L3022) vs U3's hunks at L24 (import), L320–L327 (fields), L1635–L1726 (updateApiConfiguration/setRuntimeThinkingEffort), L1759–L1845 (metadata), L2527–L2617, a pure insertion at L2619, and API call sites L4202/L4428/L4593).git merge-tree --write-tree upstream/main HEADsimulation is conflict-free for all 3 PRs (1521 → merged tree573f3fc11, 1522 →bc279fd3a, 1523 →666b4347b); heads unchanged (1521e89cceddd, 1522069c34b9a, 15231087fcbd4) and CI green on the current heads. Re-verify on the next main advance or at merge time.gh api repos/Zoo-Code-Org/Zoo-Code/pulls/{N}/comments(old-series PR/issue threads are preserved after the 2026-09-04 closes — searchable via the close comments) and pin it in the base plan's §9; cross-reference in tracking issue DTE-v2 final ship plan - 39-unit 400-line redo of the DTE series (supersedes #28) #35. Counting stays additions+deletions regardless.