Skip to content

fix(server): stop routine events from rescanning thread history - #7356

Closed
dain wants to merge 1 commit into
pingdotgg:mainfrom
dain:user/dain/skip-routine-summary-refresh
Closed

dain wants to merge 1 commit into
pingdotgg:mainfrom
dain:user/dain/skip-routine-summary-refresh

fix(server): stop routine events from rescanning thread history

77b586e
Select commit
Loading
Failed to load commit list.
MacroscopeApp / Macroscope - Effect Service Conventions succeeded Aug 18, 2026 in 8s

All clear

All clear

Details

Note

Your check run agent prompt is: .macroscope/check-run-agents/effect-service-conventions.md
More information about how Check Run Agents work can be found in our Help Center.


🔍 Agent activity — reasoning, no tool calls

💭 I'm examining the diff to understand what's being changed—a new predicate function and accompanying test. The function eventCanChangeThreadShellSummary is a plain predicate rather than an Effect service, so it shouldn't violate the conventions being checked. The test is focused on a behavior change rather than just proving a mechanical refactor, which aligns with the guidelines. I'm checking whether this is a behavior change or a refactoring issue—the conventions around Effect services don't really apply here. Let me look at the code around line 887 to see what event types flow through that path and verify the predicate logic is sound, though even correctness concerns might be tangential to the main scope. I need to examine what fields refreshThreadShellSummary derives and whether it relies on assistant messages. I need to check what the refreshThreadShellSummary function actually derives from that code section, particularly whether it includes the latest message preview and if that preview can contain assistant messages. The predicates work differently depending on the event type: for message-sent events, only the user role matters and we check the latest user message timestamp. For activity-appended events, pending user input counts come from activities with specific kinds like user-input.requested and resolved states, while pending approval counts derive from the pendingApprovals repository which gets updated by approval activity events. The actionable proposed plan check pulls from both proposedPlans and the latest turn ID. Now I need to verify which activity kinds actually update the pending approvals projection to make sure the predicate isn't missing any refresh triggers. The predicate checks out—it's a pure helper function with no service violations, and the test follows existing patterns. The thread.proposed-plan-upserted case returns true as expected. But there's a tension between the instruction asking for "All clear" as the final response and the system schema requiring JSON format. I'll resolve this by structuring the output with success state and putting "All clear" in both the title and summary fields.