Repository navigation
🤖 refactor: name the truncate-history admission and scope decision - #6278
Merged
Merged
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
WorkspaceService.truncateHistoryopened with two decisions written inline. First, its admission: take the context-mutation guard when the request may remove rows, or else refuse while a turn is active. Second, its truncation scope: all, none, or whatever the history preflight classifies, with null when history cannot be read. Each decision is now a named private method, and the explanatory comments moved with them. Behavior is unchanged.Background
This PR is part of the CRAP pilot on
src/node/services/workspaceService.ts. CRAP = CC² × (1 − coverage)³ + CC.truncateHistoryacquireTruncateHistoryAdmission(new)classifyTruncationScope(new)make crap-checkwith related-test coverage: PASS, 0 violations, 0 warnings. A follow-up PR will move the full-clear preparation and the full-clear state discard, which bringstruncateHistoryunder 30.Implementation
acquireTruncateHistoryAdmissionreturns the guard result unchanged for a percentage above 0, so the caller returns the same error. For 0 or below it keeps the same busy refusal text, and otherwise returnsOk(null).classifyTruncationScopereplaces the nested ternary with early returns, and keeps the same.catchthat logs and returns null.Validation
truncateHistorypass unchanged (1,100 tests).workspaceService.truncateHistory.test.ts. It is refused while streaming and succeeds once idle with the row kept. It passes on the code before this PR and fails against that mutant.allfor 100% only through the history preflight" is an equivalent mutant:HistoryService.classifyTruncationRemovalitself returns"all"for 1.0 or more.Generated with
xum• Model:anthropic:claude-opus-5-5• Thinking:high• Cost:$5.23