v0.4
Release v0.4
Release v0.4 — incremental update from v0.33 with 32 merged PRs.
What's Changed
🐛 Bug Fixes
- #1367: feat(#1358): [Bug] runAgentSubprocess fallback can throw synchronously and escape containment
- #1361: feat(#1357): [Bug] Supervisor 'Pipeline Failed / Manual intervention required' drops the actual error message
- #1359: feat(#1343): [Bug] Supervisor closes issue as 'already resolved' when work landed via sibling/parent PR
- #1356: feat(#1344): [Bug] agent-harness blocks tail — read is O(file size) vs O(N) for tail
- #1355: feat(#1345): [Bug] agent-harness lacks force-bypass mechanism for legitimate blocked commands
- #1354: feat(#1346): [Bug] agent-harness blocks head — read loads entire file, head stops at N lines
- #1351: feat(#1347): [Bug] agent-harness docs claim xxd/hexdump detection but code doesn't implement it
- #1349: feat(#1348): [Bug] agent-harness hardcoded JSON schemas in redirect messages drift from real tool schemas
🔧 Code Quality & Architecture
- #1352: feat(#1279): Dead Code: agent-harness - isCodeFilePath() never called
- #1340: feat(#1290): ICA: Collapse single-implementation state interfaces in agent-harness
- #1339: feat(#1324): ICA: providerToEnvVar duplicated Go/shell mapping
- #1338: feat(#1323): ICA: SettingsGenerator dead code
- #1337: feat(#1325): ICA: runInit 24-parameter orchestrator signature
- #1336: feat(#1328): ICA: tsc-checkpoint adapter/watcher speculative seam + pass-through wrapper
- #1335: feat(#1327): ICA: BashCommand split-brain bash classifier
- #1334: feat(#1329): ICA: github/deps.ts dead island duplicate
✨ Features & Enhancements
- #1385: feat(#1376): SIMPLIFY: Repeated heading-injection validation blocks (stages.ts)
- #1384: feat(#1373): SIMPLIFY: Duplicated push-text-once streaming pattern (adapter.ts)
- #1383: feat(#1374): SIMPLIFY: Duplicated token-usage computation (adapter.ts)
- #1382: feat(#1377): SIMPLIFY: Deep nesting in PR ahead-count verification (pr-creation.ts)
- #1381: feat(#1375): SIMPLIFY: agentName bare-text-wrap 3-branch conditional (stages.ts)
- #1380: feat(#1378): SIMPLIFY: Dead ternary err === 1 ? "err" : "err" (message-renderer.ts)
- #1379: feat(#1362): Code Simplification: extensions — 2026-07-25
- #1371: feat(#1366): SIMPLIFY: Repeated text/thinking push guard pattern → helper functions
- #1370: feat(#1364): SIMPLIFY: Status emoji/text dual chained ternary → single lookup
- #1369: feat(#1363): SIMPLIFY: Severity label chained ternary → lookup object
- #1368: feat(#1365): SIMPLIFY: Tool name advice nested ternary → lookup object
- #1353: feat(#1278): Bug: scrapling — TypeBox schema pattern ^https?:// case-sensitive, but validateUrl accepts mixed case
- #1350: feat(#1276): Bug: scrapling — AbortSignal not propagated to acquireCrawlLock (cancellation ignored)
- #1341: feat(#1288): Architecture Review: root — 2026-07-19
- #1333: feat(#1277): Bug: scrapling — postInstall exec result not checked (silent failure on scrapling.cli install)
- #1332: feat(#1331): [Feature] Replace pi-guardian daemon with on-demand shell scan in cheasee-pi clean
Full Changelog: v0.33...v0.4