mirror of
https://github.com/Jeuners/ECC.git
synced 2026-09-09 15:02:30 +02:00
coderabbitai flagged: the two `catch` blocks in `readSessionCost`
silently swallowed every failure mode. A malformed `costs.jsonl`
row, a permission error opening the file, or any other unexpected
I/O failure would silently return zero cost — masking real
problems and feeding stale or zero numbers into
`ecc-context-monitor.js` (which then injects them as
`additionalContext` into the live model turn).
Fix two things, both fail-open-preserving:
1. **Inner JSON.parse catch** — count malformed lines and write
one aggregated breadcrumb per call:
[ecc-metrics-bridge] skipped N malformed line(s) in <path>
Aggregating (rather than per-line) keeps a log-flooded
`costs.jsonl` diagnosable without overwhelming stderr.
2. **Outer fs.readFileSync catch** — write a breadcrumb on real
errors, but stay silent on `ENOENT`. The "no costs.jsonl yet"
case is genuinely normal (no Stop event has fired this session)
and producing noise on every PreToolUse before the first Stop
would be reviewer-visible spam. All other error codes
(`EACCES`, `EISDIR`, `EMFILE`, …) get:
[ecc-metrics-bridge] failing open after <name> reading <path>: <msg>
In both cases the function still returns the zero-cost fallback
so the bridge never breaks tool execution — only the
diagnosability changes.
Two new regression tests in
`tests/hooks/ecc-metrics-bridge.test.js`:
✓ readSessionCost writes a stderr breadcrumb when malformed
lines are skipped — feeds 4 rows (2 valid, 2 malformed),
asserts the last valid row still wins AND captured stderr
contains "skipped 2 malformed line(s)".
✓ readSessionCost stays silent when costs.jsonl does not exist
(ENOENT) — uses a fresh tmp HOME with no metrics dir, asserts
zero return AND empty stderr.
Test count: 16 → 18; `npm test` green; `yarn lint` clean.
|
||
|---|---|---|
| .. | ||
| auto-tmux-dev.js | ||
| bash-hook-dispatcher.js | ||
| block-no-verify.js | ||
| check-console-log.js | ||
| check-hook-enabled.js | ||
| config-protection.js | ||
| cost-tracker.js | ||
| design-quality-check.js | ||
| desktop-notify.js | ||
| doc-file-warning.js | ||
| ecc-context-monitor.js | ||
| ecc-metrics-bridge.js | ||
| ecc-statusline.js | ||
| evaluate-session.js | ||
| gateguard-fact-force.js | ||
| governance-capture.js | ||
| insaits-security-monitor.py | ||
| insaits-security-wrapper.js | ||
| mcp-health-check.js | ||
| observe-runner.js | ||
| plugin-hook-bootstrap.js | ||
| post-bash-build-complete.js | ||
| post-bash-command-log.js | ||
| post-bash-dispatcher.js | ||
| post-bash-pr-created.js | ||
| post-edit-accumulator.js | ||
| post-edit-console-warn.js | ||
| post-edit-format.js | ||
| post-edit-typecheck.js | ||
| pre-bash-commit-quality.js | ||
| pre-bash-dev-server-block.js | ||
| pre-bash-dispatcher.js | ||
| pre-bash-git-push-reminder.js | ||
| pre-bash-tmux-reminder.js | ||
| pre-compact.js | ||
| pre-write-doc-warn.js | ||
| quality-gate.js | ||
| run-with-flags-shell.sh | ||
| run-with-flags.js | ||
| session-activity-tracker.js | ||
| session-end-marker.js | ||
| session-end.js | ||
| session-start-bootstrap.js | ||
| session-start.js | ||
| stop-format-typecheck.js | ||
| suggest-compact.js | ||