Skip to content

refactor(session-repair): beautify per code review, 7 findings (v0.5.31) - #133

Merged
royosherove merged 2 commits into
mainfrom
refactor/session-repair-cleanup
May 14, 2026
Merged

refactor(session-repair): beautify per code review, 7 findings (v0.5.31)#133
royosherove merged 2 commits into
mainfrom
refactor/session-repair-cleanup

Conversation

@royosherove

Copy link
Copy Markdown
Member

Pure refactor of today's session-repair / soft-reset / lifecycle code. Zero behavior change. 536 tests passing (+2 regression guards for the divergent-change fix).

Addresses 7 maintainability findings from the post-v0.5.30 review:

# Finding Fix
1 DRY: classifiers shared 80% structure Extracted matchesErrorPatterns() + looksLikeValidationError() shared helpers
2 softResetSessionFile mixed abstraction levels Extracted buildTrimmedEntries()
3 Catch block: 60 lines + nested try Extracted attemptSoftResetRecovery() → 25 lines linear
4 Magic number 5 MAX_CAUSE_CHAIN_DEPTH constant
5 session-repair.ts 574 lines Split into 4 focused files (81 + 120 + 75 + 239)
6 Anonymous {entries, report} shape SessionRepairResult named type (no clash with message-validator.ts's RepairResult)
7 isToolPairingError didn't walk cause chain Fixed automatically by #1 — both classifiers now consistent

Public API preserved via re-exports (Feathers seam pattern). Existing callers compile unchanged.

Architecture review caught: RepairResult name collision (renamed to SessionRepairResult), stray indentation, mixed .js import extensions. All addressed before push.

Addresses all 7 findings from the post-v0.5.30 maintainability review.
Pure refactor \u2014 zero behavior change. 536 tests passing (+2 new for the
divergent-change fix).

#1 + #7 \u2014 DRY: extract matchesErrorPatterns + fix divergent change
  isContextOverflowError and isToolPairingError shared ~80% of structure
  (top-level .message, cause-chain walk, stringify-gate, circular try/catch)
  but with subtle drift: only one walked the cause chain. Extracted
  matchesErrorPatterns(err, patterns, { stringifyGate }) shared helper.
  Both classifiers now ~7 lines and BOTH walk cause chains. Added 2 tests
  proving isToolPairingError now classifies wrapped/Bedrock-nested
  tool-pairing errors (regression guard for the divergent-change fix).
  Also extracted looksLikeValidationError() shared gate so the two
  classifiers don't repeat the 4xx/ValidationException check.

#2 \u2014 long method: extracted buildTrimmedEntries(entries, cutIdx) from
  softResetSessionFile. The orchestration is now linear: validate \u2192 cut
  \u2192 build \u2192 repair \u2192 write \u2192 report. Each step at the same abstraction
  level.

#3 \u2014 long catch with nested try: extracted attemptSoftResetRecovery()
  in lifecycle.ts. flushMemoryThenCompact catch block went from ~60
  lines with nested try/catch to ~25 lines, linear: classify \u2192 recover
  \u2192 log \u2192 persist.

#4 \u2014 magic number: MAX_CAUSE_CHAIN_DEPTH = 5 named constant.

#5 \u2014 file >400 lines: split src/agents/shared/session-repair.ts (574
  lines, two domains) into:
    - session-repair.ts (81 lines) \u2014 public surface, tool-pair repair,
      re-exports for backward compat
    - session-soft-reset.ts (120 lines) \u2014 softResetSessionFile + types
    - error-classifiers.ts (75 lines) \u2014 matchesErrorPatterns +
      isContextOverflowError + isToolPairingError + MAX_CAUSE_CHAIN_DEPTH
    - session-repair-internal.ts (239 lines) \u2014 shared filesystem +
      in-memory repair primitives
  All public exports preserved via re-exports (Feathers seam pattern).
  Existing callers compile unchanged.

#6 \u2014 naming: introduced RepairResult { entries, report } named type for
  the previously-anonymous repairEntriesInMemory return shape. Better
  IDE hover/autocomplete; no inline destructuring noise at call sites.

Verification:
  npm test \u2014 536 passing (was 534, +2 for cause-chain regression tests)
  wc -l src/agents/shared/session-repair.ts \u2014 81 (was 574)
  All public API surfaces preserved.
@royosherove
royosherove merged commit fd0d122 into main May 14, 2026
1 check passed
@royosherove
royosherove deleted the refactor/session-repair-cleanup branch May 14, 2026 19:09
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.

1 participant