Repository navigation
Live monitor checks the session with Haiku while you view it, and created pull requests count as evidence - #643
Merged
Conversation
Signed-off-by: Jared Scott <jared.scott@infuseai.io> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
CoverageThreshold: |
…y call Haiku Record the owner's 2026-10-23 ruling as dated amendments: cadence evaluation for the Live monitor only, while the session is viewed; the four follow-up rulings; the lane, caps, TTL, stops and reload decisions; Analyze cancels a tick without refunding its spend (decided). DEC-16 and DEC-26 item 5's "raises nothing" stand. The live monitor row's prose in the reader-state inventory now says the switch drives a server lease. No existing heading is renamed. Implements [DRC-4961](https://linear.app/recce/issue/DRC-4961) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Jared Scott <jared.scott@variable.team>
… once a minute Add the server-callable check behind the Live monitor and its policy, with no route that starts it yet: - a monitor model setting (--claude-monitor-model) and validator that admit only an explicit Haiku id, defaulting to claude-haiku-5-5; the reading validator and its Sonnet floor are unchanged - live_monitor: a window per monitored session, spacing of at least 60 s, the shared reading slot, a skip that costs nothing for an unchanged transcript, a closed reply shape held to the model-free level's floor, provenance on every tick, and cancel by Pause and by an Analyze press - the monitor's own ledger and caps in reading_policy (30 ticks per session per window, a rolling 24 h cap across the board), apart from Analyze's - a monitor notice kind with its "What is sent" copy - a compass-release pre-flight item for bumping the Haiku default Implements [DRC-4962](https://linear.app/recce/issue/DRC-4962) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Jared Scott <jared.scott@variable.team>
`pnpm vitest run X` now reads as the same check `pnpm exec vitest run X` does, including a lone call piped to an output filter. A pnpm word that is not a closed runner stays unread. Recorded as a dated DEC-23 amendment. Implements [DRC-4970](https://linear.app/recce/issue/DRC-4970) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Jared Scott <jared.scott@variable.team>
A Claude Code session that created a pull request now publishes a pull request fact read from the structured `gitOperation.pr` on the shell result (repository, number, URL, time), and one that launched a skill publishes the skill's name. Neither reads command text, output or arguments. A reading is sent both under the tool-output grant and may cite them as consistent, the goal-met verdict check agrees on a reason that names a created pull request, and the Drift card's note names the pull request it confirmed. Recorded as dated amendments to the closed lists and the verdict amendment, with a shape-only capture taken against a stub `gh`. Implements [DRC-4969](https://linear.app/recce/issue/DRC-4969) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Jared Scott <jared.scott@variable.team>
…of cap artifacts The consent sentence now names the repository and number of a created pull request and the names of skills used, so a changed sentence asks again. Skill and URL shapes are matched whole, dot-only repository segments are refused, a created pull request is listed beside the entry cap and reserved like a pass, skills rank after every counted entry so they cannot evict a written path, the check scan sentence counts both, and the verdict check reads "PR 7", "PR (#7)" and lists of pull requests. Contract fixtures are regenerated from the server. Implements [DRC-4969](https://linear.app/recce/issue/DRC-4969) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Jared Scott <jared.scott@variable.team>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Jared Scott <jared.scott@variable.team>
…ct the monitor amendment Add the owner's 2026-10-23 floor ruling as its own amendment under DEC-26: a model None or low stands when Haiku cites a turn it was sent and the estimate shows no failed check and no unsettled later direction; no passing check does not block it; the live-only shell blocker is not included. Correct the amendment bullet that said every remaining decision was as recommended, say that consent under the widening means "not paused", and mark the reader-state row's server-lease sentence as applying once the switch is rebuilt. Implements [DRC-4961](https://linear.app/recce/issue/DRC-4961) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Jared Scott <jared.scott@variable.team>
…e a clock - the floor works both ways: a raised estimate is published over a lower model level, and a model None or low stands only with a cite and no failed check or unsettled later direction - a success word in the reason is a verdict, however qualified - each check re-sends the recent window beside its new turns, so a quiet turn cannot flip the level - the notice and the disclosure name the commands of checks and the paths of files written, those rows are dropped where the destination cannot be named, and only this session's facts are sent - the lease gets begin_window holders and renewal, a window accessor with the banner and deadline, an ended input, and an end that cannot be followed by a launch; a window that runs out drops its level - an Analyze press waits long enough for a cancelled tick, turns new ticks away while it takes the slot, and retries once - the in-flight limit counts one board, the prompt cap is 6,000 characters, and a ledger of its own cannot be combined with a job marker Implements [DRC-4962](https://linear.app/recce/issue/DRC-4962) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Jared Scott <jared.scott@variable.team>
…ile the session is viewed Add POST /api/live-monitor with start, beat, confirm and stop, and a lease table with a ticker that calls the Haiku check for a lease that is due: - one lease per Claude Code session, held by any number of tabs, in memory only, so a restart starts with no lease - a visible tab that stops beating is gone after 50 s with no stop post and no beacon; a hidden tab keeps the lease and pauses the checks - the TTL clock is the server's: the question stands from 20 to 30 minutes, Yes resets it, No or no answer ends the lease - the lease ends for ended, left, paused, unanswered, declined, stopped or cap, and the session's end is read from the row after the overlay pass - start is refused for an ended session, another harness, the sample, paused model calls and --no-observer-model - Pause ends every lease and kills a check in flight; closing the server stops the ticker - the state is published on the focused context's sources.work and on no row - SECURITY.md names what the monitor sends and the CLI-cache exposure at cadence Implements [DRC-4963](https://linear.app/recce/issue/DRC-4963) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019324xLBLyAdr2QHFngRAro Signed-off-by: Jared Scott <jared.scott@variable.team>
…disable it once the session ends The switch now drives the server's lease instead of a key in the browser: - turning it on posts start, a visible tab beats about every 20 seconds, a hidden tab says so once and stops, and turning it off, leaving the route or moving to another session posts stop, with a beacon as the page goes away - a reload shows it off until it is pressed, and the live-estimate storage key is retired - the pill and the card show the Haiku level labelled Live monitor · Haiku, an Analyze reading outranks it, and the estimate shows whenever the monitor has no level - it is aria-disabled with its reason once the session has ended or while model calls are paused or off, and flips to off with a note if the session ends while it is viewed - each end the server reports leaves a note in the Drift card, the monitor's own limit worded apart from Analyze's - the hint names the model call, the cadence and the provider - the sample session shows it on and never takes a lease The two recorded answers it departs from are named in the design record and neither golden is re-recorded. Implements [DRC-4964](https://linear.app/recce/issue/DRC-4964) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019324xLBLyAdr2QHFngRAro Signed-off-by: Jared Scott <jared.scott@variable.team>
…0 minutes and turn the monitor off if nobody answers The server publishes the question from 20 minutes after the monitor started, or after the last Yes, until 10 minutes later; the page counts down to that time on the clock it holds: - Yes posts confirm yes, which resets the server's clock, and the next question comes 20 minutes on; No posts confirm no and turns the monitor off - with no answer by the deadline the monitor turns off with a note saying why, and beats no more - a lease that ends another way while the question is up clears it and shows that reason's note instead - an answer from any tab clears the question in every tab, because the next state the server publishes carries no deadline - the question is announced through the live region when it opens and is reached by keyboard - the timings are the server's config; the shipped defaults are 20 and 10 Implements [DRC-4965](https://linear.app/recce/issue/DRC-4965) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019324xLBLyAdr2QHFngRAro Signed-off-by: Jared Scott <jared.scott@variable.team>
…tch and question Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019324xLBLyAdr2QHFngRAro Signed-off-by: Jared Scott <jared.scott@variable.team>
…r a start without telling which sessions exist - a start can say the tab is hidden, and a hidden holder is never ticked - a beat or an answer from a tab that did not start cannot join the lease, so the holders here and in the check stay one set - a check that cannot run is found before its inputs are built - an ended session, one not on the board and one the board lists twice are refused in the same words, and a twice-listed session keeps its lease - the ticker exits when no lease remains and returns with the next start, and a table made after the server closed starts none - the route-count pin counts hyphenated routes, and SECURITY.md counts twenty ungated routes Implements [DRC-4963](https://linear.app/recce/issue/DRC-4963) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019324xLBLyAdr2QHFngRAro Signed-off-by: Jared Scott <jared.scott@variable.team>
…after a pause or cap, and settle the question on the server's word - the page asks whether the tab is hidden: a start from a hidden tab says so, each beat says what is so now, and a tab hidden by the time the start answers beats once as hidden and holds the lease without a visible cadence - a start the reader left before it answered is not aborted, and its lease is stopped when it does answer - a pause or the monitor's own limit leaves the model-free estimate as the level until the reader leaves or turns it on again; every other end shows nothing live - leaving a session and turning the switch on forget the old lease, so its question and level cannot reach the new monitor - at the question's deadline the page beats once and acts on the server's answer, so another tab's Yes is not undone - the question is a labelled region and focus returns to the switch, or to the control that opens it, after an answer; the pill names the monitor - copy: the hint and the monitor's line say what is asked and of whom, and the left, declined and cap notes and the unreachable refusal read as the owner worded them Implements [DRC-4964](https://linear.app/recce/issue/DRC-4964) Implements [DRC-4965](https://linear.app/recce/issue/DRC-4965) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019324xLBLyAdr2QHFngRAro Signed-off-by: Jared Scott <jared.scott@variable.team>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019324xLBLyAdr2QHFngRAro Signed-off-by: Jared Scott <jared.scott@variable.team>
…sts, and every way it stops Reconcile the docs with the model-backed Live monitor, the lease, the switch and the question, and with the pull request and skill evidence: - README, the promise map, HOW_TO_USE, the skill and SECURITY.md say it asks Haiku about once a minute while a session is viewed, name what is sent and to whom, its own caps and each stop, and say its accuracy check has not been run yet - Pause model calls lists the monitor, in the promise paragraph and its duplicate in the 2x2 items, and in a new dated amendment under the Pause amendment, whose heading is unchanged - SECURITY.md names the monitor's model setting and that the estimate stays as its fallback; the skill documents the model flag and the lease route - the reading's evidence lists name a created pull request and a used skill - the estimate's docstrings say they are the monitor's model-free fallback - a documentation test holds that no page or docstring says the monitor calls no model Implements [DRC-4966](https://linear.app/recce/issue/DRC-4966) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019324xLBLyAdr2QHFngRAro Signed-off-by: Jared Scott <jared.scott@variable.team>
…done, and keep numbers stable A consistent line resting only on a created pull request or a used skill no longer has "successfully" or "confirmed" read as a stated verdict, which had withdrawn the goal line on a live session. The words stay a verdict beside any check, and every other success word still withdraws it. Pull requests and skills take their places in a message's group from 1,000, so no check, file or launch already numbered shifts when either joins the group. Implements [DRC-4969](https://linear.app/recce/issue/DRC-4969) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019324xLBLyAdr2QHFngRAro Signed-off-by: Jared Scott <jared.scott@variable.team>
…er entry Reverts the 1,000 place offset: a citation reading 4.1001 is worse for a reader than the shift it avoided, and summaries and readings never read ordinals. Implements [DRC-4969](https://linear.app/recce/issue/DRC-4969) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019324xLBLyAdr2QHFngRAro Signed-off-by: Jared Scott <jared.scott@variable.team>
…a used skill An Analyze reading may draw None or low with no passing check when every Consistent outcome line cites a recorded harness fact, a created pull request or a used skill, beside the floor's unchanged blockers. The agent's words alone still never lift the level. Recorded as a dated DEC-26 amendment extending the monitor's floor, taken under the owner's standing instruction to act on recommendations. Implements [DRC-4969](https://linear.app/recce/issue/DRC-4969) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019324xLBLyAdr2QHFngRAro Signed-off-by: Jared Scott <jared.scott@variable.team>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019324xLBLyAdr2QHFngRAro Signed-off-by: Jared Scott <jared.scott@variable.team>
A Haiku level is a model assessment, so the card no longer says there is none. The line stays under the estimate. Also pins that a tab shown again beats visible at once. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019324xLBLyAdr2QHFngRAro Signed-off-by: Jared Scott <jared.scott@variable.team>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019324xLBLyAdr2QHFngRAro Signed-off-by: Jared Scott <jared.scott@variable.team>
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.
Draft. Work for the Live monitor model check, and for two evidence bugs found while testing it, on top of
feature/session-redesign(#631).What changes for a reader
pnpm vitestcounts as a check. It counts the same aspnpm exec vitest.Linear
Each line says "Part of" because this pull request targets
feature/session-redesign. Linear closes an issue when a pull request that says "Implements" merges anywhere, including into a feature branch. Switch these lines to "Implements" when the work targetsmain.Part of DRC-4961
Part of DRC-4962
Part of DRC-4963
Part of DRC-4964
Part of DRC-4965
Part of DRC-4966
Part of DRC-4967
Part of DRC-4968
Part of DRC-4969
Part of DRC-4970
Verification
Nothing is built yet. Each issue lists its own checks.
🤖 Generated with Claude Code