Skip to content

Live monitor checks the session with Haiku while you view it, and created pull requests count as evidence - #643

Merged
gcko merged 23 commits into
feature/session-redesignfrom
feature/live-monitor-haiku
Oct 24, 2026
Merged

gcko merged 23 commits into
feature/session-redesignfrom
feature/live-monitor-haiku

Conversation

@gcko

@gcko gcko commented Oct 23, 2026

Copy link
Copy Markdown
Contributor

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

  • Live monitor checks with Haiku while you watch (Claude Code first). With Live monitor on and the session open in a visible tab, a supervised Haiku check reads the newest turns at most once a minute. It sets the live drift level, labelled "Live monitor · Haiku". A level from Analyze drift outranks it, and it never decides whether the goal was met. When the check is paused, capped or has failed, the model-free estimate stays as the fallback.
  • It stops on its own. It stops when the session ends: the switch turns off and is disabled. It also stops when you leave the session or the tab is hidden, when you pause model calls, or when the server stops hearing from the page. Nothing is remembered across a reload.
  • "Do you still want to monitor this session?" appears after 20 minutes and stays for 10. Yes resets the timer and No turns the monitor off. With no answer, it turns off and leaves a note saying why.
  • Its own spend cap. The monitor has its own caps, apart from the Analyze budget: 30 checks per session per window, and a rolling daily cap. A minute with nothing new costs nothing. It has its own "What is sent" notice.
  • Created PRs and skills become evidence. A pull request Claude Code created, and a skill it used, can now back a goal. A reading of "create a PR of the work" can then say so, and so can the check of Claude Code's own "goal met" claim. Today both say "Can't tell".
  • pnpm vitest counts as a check. It counts the same as pnpm 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 targets main.

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

Signed-off-by: Jared Scott <jared.scott@infuseai.io>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Coverage

Name                                                               Stmts   Miss Branch BrPart  Cover
----------------------------------------------------------------------------------------------------
compass/skills/compass/agy_hook.py                                    86     15     28      7  78.9%
compass/skills/compass/compass_runtime/__init__.py                     0      0      0      0 100.0%
compass/skills/compass/compass_runtime/aggregate.py                  351      2    118      2  99.1%
compass/skills/compass/compass_runtime/annotations.py               1056     23    422     21  97.0%
compass/skills/compass/compass_runtime/asks.py                       110      0     28      0 100.0%
compass/skills/compass/compass_runtime/claude_data.py                549     49    246     19  91.4%
compass/skills/compass/compass_runtime/cli.py                        284     21     66      6  91.7%
compass/skills/compass/compass_runtime/collectors/__init__.py          0      0      0      0 100.0%
compass/skills/compass/compass_runtime/collectors/antigravity.py     427     41    178     24  87.6%
compass/skills/compass/compass_runtime/collectors/claude.py          321     17    122     15  92.3%
compass/skills/compass/compass_runtime/collectors/codex.py           258     18     96     15  90.7%
compass/skills/compass/compass_runtime/collectors/copilot.py         153      4     52      2  97.1%
compass/skills/compass/compass_runtime/collectors/cursor.py          287     19    108     16  90.6%
compass/skills/compass/compass_runtime/collectors/droid.py            34      3      6      1  90.0%
compass/skills/compass/compass_runtime/collectors/gemini.py           54      7     16      4  84.3%
compass/skills/compass/compass_runtime/collectors/goose.py            95      6     28      4  91.9%
compass/skills/compass/compass_runtime/collectors/opencode.py        124      4     44      4  95.2%
compass/skills/compass/compass_runtime/collectors/pi.py              328     34    152     20  88.8%
compass/skills/compass/compass_runtime/config.py                     365      3     30      2  98.7%
compass/skills/compass/compass_runtime/copied_corrections.py         330     28     98     20  88.8%
compass/skills/compass/compass_runtime/correction.py                 337      6    112      4  97.8%
compass/skills/compass/compass_runtime/deliveries.py                 128     12     30      7  88.0%
compass/skills/compass/compass_runtime/departures.py                 135      6     30      6  92.7%
compass/skills/compass/compass_runtime/diagnostics.py                 89      3     26      3  94.8%
compass/skills/compass/compass_runtime/dismissals.py                 111      3     32      3  95.8%
compass/skills/compass/compass_runtime/ends.py                        86      5     18      0  95.2%
compass/skills/compass/compass_runtime/entry_numbers.py              121      5     38      5  93.7%
compass/skills/compass/compass_runtime/events.py                     230      1     86      3  98.7%
compass/skills/compass/compass_runtime/focus.py                       72      2     20      2  95.7%
compass/skills/compass/compass_runtime/frontend_dev.py               142      8     46      9  91.0%
compass/skills/compass/compass_runtime/git_status.py                  59      1     22      2  96.3%
compass/skills/compass/compass_runtime/goal_find.py                  136      4     46      4  95.6%
compass/skills/compass/compass_runtime/history.py                    236      9     60      7  94.6%
compass/skills/compass/compass_runtime/http_api.py                  1836    199    588     60  89.0%
compass/skills/compass/compass_runtime/interaction_prototype.py      709    221    198     38  65.7%
compass/skills/compass/compass_runtime/io.py                         301      8     72      6  96.2%
compass/skills/compass/compass_runtime/irreversible.py                39      0      6      0 100.0%
compass/skills/compass/compass_runtime/levels.py                     315      4    102      5  97.8%
compass/skills/compass/compass_runtime/lifecycle.py                  451     53    160     20  86.7%
compass/skills/compass/compass_runtime/live_estimate.py              282     18     84     14  91.3%
compass/skills/compass/compass_runtime/live_lease.py                 250      6     82      8  95.8%
compass/skills/compass/compass_runtime/live_monitor.py               389     20    122     18  92.6%
compass/skills/compass/compass_runtime/notifications.py              264     11     92      6  95.2%
compass/skills/compass/compass_runtime/observation.py                412      5    122      2  98.7%
compass/skills/compass/compass_runtime/observer.py                   725     36    276     22  94.2%
compass/skills/compass/compass_runtime/probe.py                       44      0     18      1  98.4%
compass/skills/compass/compass_runtime/project_context.py           4181    225   1744    159  92.9%
compass/skills/compass/compass_runtime/quota.py                      392      7    144      6  97.2%
compass/skills/compass/compass_runtime/reach.py                       78      6     30      4  90.7%
compass/skills/compass/compass_runtime/reading.py                   1803     24    640     28  97.9%
compass/skills/compass/compass_runtime/reading_jobs.py               223     14     52      4  93.5%
compass/skills/compass/compass_runtime/reading_policy.py             480     24    154     20  93.1%
compass/skills/compass/compass_runtime/reading_route.py              299     12     96      4  95.9%
compass/skills/compass/compass_runtime/record_pages.py               223     11     72     10  92.9%
compass/skills/compass/compass_runtime/records.py                    404      8    166     11  96.7%
compass/skills/compass/compass_runtime/semantic_history.py           332     12    126     15  94.1%
compass/skills/compass/compass_runtime/session_outline.py            142      7     42      5  93.5%
compass/skills/compass/compass_runtime/session_source.py             512     19    142     17  94.5%
compass/skills/compass/compass_runtime/session_summary.py            895     19    282     19  96.8%
compass/skills/compass/compass_runtime/sessions.py                   252      5    100      5  97.2%
compass/skills/compass/compass_runtime/snapshot.py                    43      0      6      0 100.0%
compass/skills/compass/compass_runtime/spacedock.py                  516     50    264     26  90.0%
compass/skills/compass/compass_runtime/state.py                       95      0      2      0 100.0%
compass/skills/compass/compass_runtime/stream.py                      57      0      8      0 100.0%
compass/skills/compass/compass_runtime/summary_jobs.py               328     36     92     21  85.5%
compass/skills/compass/compass_runtime/summary_store.py              295     23     82      9  91.5%
compass/skills/compass/compass_runtime/supervise.py                  431     95    126     10  78.3%
compass/skills/compass/compass_runtime/transcripts.py                673     42    328     29  92.9%
compass/skills/compass/compass_runtime/tripwires.py                  233     11     94     11  93.3%
compass/skills/compass/compass_runtime/turns.py                      209     11    104     12  92.7%
compass/skills/compass/compass_runtime/unasked.py                    177      6     50      5  95.2%
compass/skills/compass/compass_runtime/web/__init__.py                 0      0      0      0 100.0%
compass/skills/compass/compass_runtime/web/page.py                   114      8     42      6  91.0%
compass/skills/compass/event_hook.py                                 218      6     92      4  96.8%
compass/skills/compass/mcp_server.py                                 382     23    112     14  92.1%
compass/skills/compass/notify_hook.py                                 49     15      6      1  67.3%
compass/skills/compass/server.py                                       3      0      2      1  80.0%
compass/skills/compass/statusline_hook.py                            136     14     46      8  86.8%
scripts/abstention_ledger.py                                         440     42    148     18  89.8%
scripts/analyze_campaign.py                                          776     64    290     59  88.5%
scripts/bench_collect.py                                             214     13     54      6  92.9%
scripts/bench_event_latency.py                                        67     21     14      1  67.9%
scripts/build_sample_fixture.py                                      186     62     68      8  66.9%
scripts/bump_version.py                                               60     12     24      5  77.4%
scripts/capture_focus_raise.py                                       729    131    236     16  79.4%
scripts/capture_hook.py                                              293     30     90     11  88.8%
scripts/capture_team_registry.py                                     172     33     48      6  80.5%
scripts/capture_terminal_identity.py                                 347    108    104     14  66.3%
scripts/claude_route_verification.py                                 334     25     38      5  90.9%
scripts/cut_sample_session.py                                         49     12     12      1  78.7%
scripts/derive_prompt_shapes.py                                      210     16     88     14  89.3%
scripts/drift_closure_grading.py                                     400     14    204     14  95.4%
scripts/drift_closure_operator.py                                    329     31    126     33  85.9%
scripts/drift_replay.py                                             1643    230    600    106  83.1%
scripts/drift_study.py                                               239     23     98     16  88.4%
scripts/drift_study_controls.py                                      155     11     42      9  89.8%
scripts/frontend_inventory.py                                        143    143     66      0   0.0%
scripts/frozen_page.py                                                13      0      4      0 100.0%
scripts/levels_cases.py                                              778     99    254     30  85.4%
scripts/live_analyze_campaign.py                                      59      4     14      3  90.4%
scripts/mark_abstention.py                                          1272    166    462     64  85.0%
scripts/ordinary_turn_driver.py                                      475     33    156     30  90.0%
scripts/redact_session.py                                            173     25     50      7  83.9%
scripts/regen_client_fixtures.py                                     565     56     68      7  86.9%
scripts/release_transition.py                                        344     73    114      5  75.5%
scripts/run_tests.py                                                 187     37     60      5  78.1%
scripts/sanitize_session.py                                          370     35    122      9  89.4%
scripts/score_abstention.py                                         1527    110    554     58  91.8%
scripts/store_paths.py                                                 7      0      0      0 100.0%
scripts/update_homebrew.py                                            83      5     26      2  93.6%
scripts/update_marketplace.py                                         59      3     18      2  93.5%
scripts/validate_plugins.py                                          839    218    466     66  71.6%
scripts/verify_release_archive.py                                    222     21     50      4  90.8%
----------------------------------------------------------------------------------------------------
TOTAL                                                              41045   3579  14340   1535  89.7%

Threshold: fail_under in pyproject.toml · label coverage-exception to bypass (visible in PR timeline).

gcko and others added 16 commits October 23, 2026 17:18
…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>
@gcko gcko changed the title Live monitor checks the session with Haiku while you watch, and created pull requests count as evidence Live monitor checks the session with Haiku while you view it, and created pull requests count as evidence Oct 23, 2026
gcko and others added 6 commits October 24, 2026 11:15
…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>
@gcko
gcko marked this pull request as ready for review October 24, 2026 03:46
@gcko
gcko merged commit 7f669ee into feature/session-redesign Oct 24, 2026
20 checks passed
@gcko
gcko deleted the feature/live-monitor-haiku branch October 24, 2026 03:46
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