Skip to content

fix(hooks): prevent fd leak in estimateContextPercent#2178

Merged
Yeachan-Heo merged 1 commit intoYeachan-Heo:devfrom
jonckr:fix/estimate-context-fd-leak
Apr 5, 2026
Merged

fix(hooks): prevent fd leak in estimateContextPercent#2178
Yeachan-Heo merged 1 commit intoYeachan-Heo:devfrom
jonckr:fix/estimate-context-fd-leak

Conversation

@jonckr
Copy link
Copy Markdown

@jonckr jonckr commented Apr 5, 2026

Summary

  • estimateContextPercent in persistent-mode.cjs declares const fd = openSync(...) inside the try block
  • If readSync throws, the catch block cannot close the descriptor because fd is out of scope
  • The .mjs version of the same function (line 516) correctly uses let fd = -1 before the try block with a finally clause
  • pre-tool-enforcer.mjs (line 161) and context-guard-stop.mjs (line 139) also use the correct pattern

Fix

Align the .cjs version with the established pattern:

  1. Declare let fd = -1 before the try block
  2. Set fd = -1 after successful closeSync (prevent double-close)
  3. Add finally block for best-effort cleanup on error

Test plan

  • Verified .mjs version (line 516), pre-tool-enforcer.mjs (line 161), and context-guard-stop.mjs (line 139) all use let fd = -1 with finally
  • Confirmed the catch block in .cjs had no fd cleanup (just return 0)
  • Fix preserves all existing logic, only changes fd lifecycle management

The .cjs version declares `const fd` inside the try block, so if
readSync throws, the catch block cannot close the descriptor (fd is
out of scope). The .mjs version (line 516) and pre-tool-enforcer.mjs
(line 161) both correctly use `let fd = -1` before the try block
with a finally clause for cleanup.

Align the .cjs version with the established pattern: declare fd
before try, set to -1 after successful close, add finally block
for best-effort cleanup on error.
@chatgpt-codex-connector
Copy link
Copy Markdown

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Repo admins can enable using credits for code reviews in their settings.

@Yeachan-Heo
Copy link
Copy Markdown
Owner

CI green, merge-ready.\n\n—\n*[repo owner'''s gaebal-gajae (clawdbot) 🦞]*

@Yeachan-Heo Yeachan-Heo merged commit 6344bd3 into Yeachan-Heo:dev Apr 5, 2026
6 of 8 checks passed
Yeachan-Heo added a commit that referenced this pull request Apr 5, 2026
This restores the pre-jonckr runtime, hook, and team behavior by
reverting the five owner-scoped merge commits on top of origin/dev.
The rollback stays narrowly focused on the affected source/script
surfaces so reviewers can audit the history against the original PRs.

Constraint: Owner-directed rollback to pre-jonckr runtime behavior after CI/base-red fallout
Constraint: Must revert merge commits #2175 #2176 #2177 #2178 #2179 with mainline parent 1 semantics
Rejected: Manual file-by-file rollback | weaker audit trail and easier to miss behavior edges
Rejected: Partial rollback that keeps #2177-#2179 fixes | conflicts with the requested rollback scope
Confidence: medium
Scope-risk: moderate
Reversibility: clean
Directive: Reassess the reverted hook contract, fd-cleanup, and macOS version-sync behavior before reintroducing any of these changes
Tested: npx vitest run src/team/__tests__/tmux-session.test.ts
Tested: npx vitest run src/__tests__/pre-tool-enforcer.test.ts src/__tests__/bedrock-lm-suffix-hook.test.ts
Tested: npx vitest run src/hooks/persistent-mode/stop-hook-blocking.test.ts
Tested: node version consistency check for package/plugin/marketplace versions
Tested: npx tsc --noEmit
Tested: npm run lint
Tested: npm run build
Tested: npm pack + local prefix install smoke (`omc --version`, `omc --help`)
Not-tested: Full `npm test -- --run` remains red on `src/__tests__/hooks-command-escaping.test.ts` with an unrelated Windows-style plugin-root path failure outside the reverted files
Related: PR #2175
Related: PR #2176
Related: PR #2177
Related: PR #2178
Related: PR #2179
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants