Repository navigation
merge queue: checking #1324 + #1331 + #1334 + #1335 together on main (0d8f2e0) - #1338
Closed
mergify[bot] wants to merge 16 commits into
Closed
mergify[bot] wants to merge 16 commits into
mergify[bot] wants to merge 16 commits into
Conversation
Reflect was writing a new preference whenever someone reminded the agent of a skill it had already skipped. Add lesson_route.py so that signal stays an intervention for ordering, and the lesson bucket is already-covered unless no skill states the preference yet. Co-authored-by: Cursor <cursoragent@cursor.com> Change-Id: Ibb2d3e90a7cf01987aeb14b71e9413d7cec536c3
The boundary-parser allow mark stays, and the comment checker treats that mark as a machine directive so the two gates agree. Co-authored-by: Cursor <cursoragent@cursor.com> Change-Id: I0a048d4d387df53de81d2638521a5198de499b36
Hook runs belonging to the same harness event had no shared key, so grouping them for herd/wall-clock metrics relied on fragile 2s-window inference. Add event_uid = sha256(stdin)[:12] to _row() so every runner that receives the same stdin self-groups with zero coordination.
…runner metrics row gains an event_uid field that groups all hook runs belonging to one harness event, with no change to hook stdout, stderr, or exit codes. Review lane: behavior Safety invariant: Hook stdout and exit codes stay the same. This slice does not change the other four claims. Files: engine/hooks/_runner/run.py Change types: bugfix Acceptance criteria: The branch contains only this claim, and the review step publishes one pull request. Exit code: 0 Invoker-Finalize-Id: 5330cf4f-7efd-43e4-9fc5-fbc19b9c9a89
…770-8d121c9e — Review claim: Every runner metrics row gains an event_uid field that groups all hook runs belonging to one harness event, with no change to hook stdout, stderr, or exit codes. Review lane: behavior Safety invariant: Hook stdout and exit codes stay the same. This slice does not change the other four claims. Files: engine/hooks/_runner/run.py Change types: bugfix Acceptance criteria: The branch contains only this claim, and the review step publishes one pull request.
`report.py --scorecard` folds runs.jsonl into one row per (phase, event type) and prints procs/event, cpu_ms/event, wall_ms/event, timeout%, crash% and spoke-rate. Rows are split into "before" and "after" by whether the row carries a `dispatch_path`, and grouped into events by `event_uid` (falling back to the row index when a row has no uid), so one harness event counts once no matter how many detectors ran under it. The phase split and the proc count read the row field the runner actually writes, `dispatch_path`. An earlier draft of this fold read `dispatch_mode`, which no row has: every post-dispatcher row then landed in the "before" bucket and the after-phase proc count never credited the dispatcher, so the scorecard showed no change at all. `--days N` is accepted alongside `--since` so the canary window can be given in whole days. Tests: two cases in engine/hooks/_runner/tests/test_report.py drive the CLI over a fixture ledger holding one pre- and one post-dispatcher event; they assert the per-phase numbers and the printed column header. Both fail against the base report.py with "unrecognized arguments: --scorecard --days 14". Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
….py --html folds runs.jsonl and events jsonl once into summary.json and emits a static dashboard.html on demand, with no server and no change to any hook behavior. Review lane: behavior Safety invariant: Hook stdout and exit codes stay the same. This slice does not change the other four claims. Files: engine/hooks/_runner/report.py Change types: bugfix Acceptance criteria: The branch contains only this claim, and the review step publishes one pull request. Exit code: 0 Invoker-Finalize-Id: e5a0edf3-e934-4a17-8242-75988f61e013
…478-adac8c27 — Review claim: report.py --html folds runs.jsonl and events jsonl once into summary.json and emits a static dashboard.html on demand, with no server and no change to any hook behavior. Review lane: behavior Safety invariant: Hook stdout and exit codes stay the same. This slice does not change the other four claims. Files: engine/hooks/_runner/report.py Change types: bugfix Acceptance criteria: The branch contains only this claim, and the review step publishes one pull request.
The fleet self-saturates: one SubagentStop burst spawned 15-30 processes that each re-parsed the same transcript, measured at 15.1s p50 wall idle against 1.55s for a single process, with per-hook durations escalating in launch order. dispatch.py now runs opted-in detectors in-process, sequentially, parsing the event once and passing the same parsed payload to every detector. A hook opts in with subagent_stop.dispatch in its manifest, naming a MODULE:FUNCTION entry point (default detect:detect). A detector with no resolvable entry point still runs as a subprocess and its metrics row is marked subprocess_fallback. Each detector keeps its own verdict, its own runs.jsonl row under its own hook name, and its own rule_ids; a detector that raises, exits, or overruns its 4s soft budget is caught and recorded without stopping its siblings. The event budget defaults to 9s for SubagentStop. mirror_stop_hooks_to_subagent_stop.py emits one dispatcher entry for the opted-in hooks and leaves every other hook's direct entry alone. (cherry picked from commit 531f5c8 on plan/hook-fleet-dispatcher-measure-the-herd-then-dispatch-it)
…op hooks dispatch through one process that parses the event once and shares one transcript parse across all opted-in detectors, emitting the same per-detector metrics rows and verdicts as the subprocess fleet. Review lane: behavior Safety invariant: Hook stdout and exit codes stay the same. This slice does not change the other four claims. Files: engine/hooks/_runner/dispatch.py Change types: bugfix Acceptance criteria: The branch contains only this claim, and the review step publishes one pull request. Exit code: 0 Invoker-Finalize-Id: aaa80940-f2d5-4d79-bb40-79c68fe333ad
…e5bede34 — Review claim: SubagentStop hooks dispatch through one process that parses the event once and shares one transcript parse across all opted-in detectors, emitting the same per-detector metrics rows and verdicts as the subprocess fleet. Review lane: behavior Safety invariant: Hook stdout and exit codes stay the same. This slice does not change the other four claims. Files: engine/hooks/_runner/dispatch.py Change types: bugfix Acceptance criteria: The branch contains only this claim, and the review step publishes one pull request.
…son-route-already-covered/drop-lesson-router-comments-failed-comment-gate--0a048d4d Drop the lesson-router comments that failed the comment gate.
This was referenced Oct 11, 2026
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.
🎉 This combination of pull requests has been checked successfully and will be merged soon. 🎉
#1324 + #1331 + #1334 + #1335 are queued together for merge on branch main (0d8f2e0).
This pull request has been created by Mergify to check the mergeability of [#1324 + #1331 + #1334 + #1335].
You don't need to do anything. Mergify will close this pull request automatically when it is complete.
Required conditions of queue rule
admin-bypassfor merge:check-success = lintcheck-success = testcheck-success = validateRequired conditions to stay in the queue:
-draftbase=mainlabel=admin-bypass