.translate/config.yml's target-language is written, validated and reported by doctor — and read by nothing. Three commands hardcode 'zh-cn', so translate forward against a French edition with no -l runs the whole resync as Chinese, silently.
Also: three near-identical Logger contracts, two divergent batch barriers (a lockstep barrier rather than a pool — measured ~62% wall-clock waste at the shipped -j 5 default), a byte-for-byte duplicated realGhRunner, and translate-state.ts sitting inside src/cli/ though the Action writes the same files.
Mostly re-export-compatible; nine test files need zero edits.
Findings covered
10 audit findings land here. F<n> are stable references into the audit; rank is the report ordering (1 = act first of 139).
Plan
Estimate 3 days · Wave 2, step T7 · strict dependency order within the wave
Four small shared modules, resolveFromConfig with precedence flag > config > default, runPool replacing both batch barriers, translate-state.ts moved into src/ with one recordSync(). Mostly re-export-compatible; nine test files need zero edits.
From the technical-debt audit of 2026-07-23 (141 candidates adversarially verified, re-validated against v0.23.0, 139 live). Effort is stopgap / full — t≈0.5h, s≈3.5h, m≈11h, L≈28h. Items marked ½ were partially addressed by v0.22.0/v0.23.0.
.translate/config.yml'starget-languageis written, validated and reported bydoctor— and read by nothing. Three commands hardcode'zh-cn', sotranslate forwardagainst a French edition with no-lruns the whole resync as Chinese, silently.Also: three near-identical
Loggercontracts, two divergent batch barriers (a lockstep barrier rather than a pool — measured ~62% wall-clock waste at the shipped-j 5default), a byte-for-byte duplicatedrealGhRunner, andtranslate-state.tssitting insidesrc/cli/though the Action writes the same files.Mostly re-export-compatible; nine test files need zero edits.
Findings covered
10 audit findings land here.
F<n>are stable references into the audit; rank is the report ordering (1 = act first of 139).F11· rank 7 · high · s/s —.translate/config.yml'starget-languageis read by nothing;forwardwith no-lruns a French edition aszh-cnF20· rank 41 · med · s/m — State lives insrc/cli/and is imported upward by core; four hand-rolledFileStateliterals disagreeF59· rank 86 · low · s/s —getToolVersion()has no test oracle — Jest's CJS transform always takes the unguarded first strategyF60· rank 108 · low · s/s —status --check-syncis the only bulk LLM loop with no-j; its description still claims "no LLM calls"F61· rank 109 · low · s/s —backwardand non---githubforwarduse a lockstep batch barrier at-j 5F63· rank 110 · low · s/s — Three byte-identical logger interfaces keepBufferedLoggerfenced insidebackward.tsF26· rank 111 · low · s/s —forwardandbackwardsolve interleaved parallel output in opposite waysF77· rank 112 · low · t/t —realGhRunnerduplicated byte-for-byte in two files, untested in eitherF72· rank 113 · low · t/t — Shared review domain types live in the command orchestrator rather than a types moduleF89· rank 114 · low · s/s — The### Source PRand metadata-block literals are hand-copied across four modulesPlan
Estimate 3 days · Wave 2, step T7 · strict dependency order within the wave
Four small shared modules,
resolveFromConfigwith precedence flag > config > default,runPoolreplacing both batch barriers,translate-state.tsmoved intosrc/with onerecordSync(). Mostly re-export-compatible; nine test files need zero edits.From the technical-debt audit of 2026-07-23 (141 candidates adversarially verified, re-validated against v0.23.0, 139 live). Effort is stopgap / full — t≈0.5h, s≈3.5h, m≈11h, L≈28h. Items marked ½ were partially addressed by v0.22.0/v0.23.0.