Skip to content

contextmd serving: Cue misses its wait on long threads; pre-tool moments that start Cue now run out the hook deadline #248

Open

Description

@lukemaj

What: On rocky, in 30 minutes, Cue timed out for 1 of 21 user messages and 12 tool results, and 40 tool results came back lost because their pre-tool moment never reached serving; Cue's median round trip is 478 ms at about 1,300 window tokens.
Why: Cue's scoring time grows with the window (265 ms under 500 tokens, 480 ms at 1,500 to 3,000), long threads give long windows, and since Cue went live the pre-tool moment that starts Cue takes about twice as long, close to the hook's 1-second deadline.
So what: recommended fix is a shorter window, decided by a replay of rocky's moments at shorter windows (below); an agent implements it after the serving PRs under review (chromeria#238, #243, contextmd#51, #52) land.

Outcome

Cue scores reach the moments that need them on long threads: user-message waits and tool-result collects stop timing out at their current limits, and pre-tool moments stop missing the hook deadline, without losing the fires Cue makes today.

Problem Statement

Cue serves a rule at the moment it applies only if its score arrives in time. On rocky, where threads are long, a share of moments get no score: the user message's 650 ms wait or the tool result's 300 ms collect runs out, or the pre-tool moment that should have started the request never completes, so its tool result is lost.

Evidence (rocky, 30 minutes after Cue recovered at 16:11Z on 2026-10-13, ~/.t3/userdata/contextmd.sqlite)

Moment ok timeout lost
User message (waits up to 650 ms) 20 1
Tool result (collects for 300 ms) 266 12 37 (40 with a few more minutes)

Cue time for 288 ok calls, from cue_json: round trip p50 478 ms, p90 667 ms; service time p50 425 ms, p90 527 ms; queue p50 7 ms, p90 166 ms; window tokens p50 1,326, p90 1,839. Service time by window: under 500 tokens 265 ms, 500 to 1,500 tokens 403 ms, 1,500 to 3,000 tokens 480 ms. The network is not the cost: rocky reaches bestia directly (tailscale ping 5 ms, /health about 10 ms); details on toolboxmd/contextmd#13.

What lost means: Cue.ts collect() finds no pending request for the call's key (harness, session, tool-use id). The code's comment names a restart as the cause, but here there was none: all 40 lost tool results have no pre-tool moment at all in the serving log (Claude 15, Codex 15, Grok 10; shell commands and file reads). The pre-tool moment is what starts the request, so it never started. Pruning is not the cause (pending requests live 600 s; the longest ok tool run was 272 s).

Pre-tool moments got slower with Cue (server time, which excludes hook start-up and connect): before Cue (14:00 to 15:30Z) pre-tool p50 235 ms, p90 422 ms; with Cue p50 442 ms, p90 661 ms, max 904 ms. User messages now take p50 792 ms, max 975 ms, because the 650 ms Cue wait runs inside them. The hook gives curl 1 second in total (4 s for Grok since toolboxmd/contextmd#50 is merged, once each machine pulls it). Inference, not yet verified: the missing pre-tool moments are hooks cut off at that deadline while the moment built the Cue window; the server records a moment only when it finishes.

Solution: three candidates, one recommended

  1. Shorter window (Router: test the input window format on the 0.6B student contextmd#20) — recommended. Window size drives both costs above: Cue's service time and the time to build the window from the projection at each moment. It is the only lever that helps all three symptoms, and it needs no retraining.
  2. Faster adapter (Router: a local model that matches the judge on unseen entries within one second contextmd#4). Helps service time only, and is a training effort with no date.
  3. Longer wait. Not available: user-message moments already take 792 ms of the hook's 1-second budget, and a longer collect lengthens every tool result; it would also do nothing for lost.

The measurement that decides it: replay rocky's logged user-message and tool-result moments of the last day (rebuild each window from the thread projection at its moment, as the serving module does) through the Cue service at the current window and at shorter ones (for example the last 2 user messages instead of 6, and 25 items instead of 100). For each window size record service time (p50, p90) and fire agreement with the current window (same entries above threshold). Choose the shortest window whose service p90 fits the waits (under about 300 ms for collects) and whose fire agreement meets the intent-detection bar (95% of good fires, counting over- and under-firing). Separately, time window building in the pre-tool moment to confirm or refute the inference above.

Elon record

  • Requirements and who asked: Cue scores at every message and tool call with latency hidden behind the tool run (user, 2026-10-12, contextmd#13); the hook fails open after 1 second (contextmd#3 design); file the long-thread timeouts with numbers, the meaning of lost, the three fixes and a recommendation (planner, 2026-10-13).
  • Deleted: a longer wait (no hook budget left); the relay hypothesis (rocky's path to bestia is direct).
  • Bottleneck: Cue's service time at long windows, and the pre-tool moment's time since Cue.
  • Checked myself: the serving log percentiles and cue_json above; Cue.ts (WAIT_MS 650, COLLECT_MS 300, PENDING_SECONDS 600, collect()); the 40 lost calls against the pre-tool moments and the projection; Tailscale ping and /health timing from rocky.

Acceptance criteria

  • The replay above is run and its table (window size, service p50/p90, fire agreement) is posted here, with the chosen window.
  • The pre-tool moment's time with Cue is broken down (window build vs the rest), confirming or refuting why pre-tool moments go missing.
  • After the change, on rocky over one day: user-message and tool-result timeout and lost each under 2% of Cue calls, and pre-tool server time p90 back near its pre-Cue 422 ms.

User stories

  1. As the user, I want Cue's rules to reach my agents in long threads too, so that the threads where I work longest are not the ones Cue skips.
  2. As the planner, I want the serving log to say why a moment got no Cue score, so that misses are fixed at their cause.

Implementation decisions

  • Owned by Chromeria's serving module (Cue.ts waits and window items, ContextmdServing.ts moment flow). The window format itself is the Cue service's; the item limits sent are Chromeria's.

Design review

  • Independent review: none yet; this Issue records the measurement first.
  • User decisions: none required beyond the existing Cue decisions (contextmd#13); a window change that lowers fire agreement below the bar would need the user.

Testing decisions

Non-goals

  • Retraining the Cue adapter (contextmd#4).
  • Changing the hook deadline.
  • General serving latency before Cue (chromeria#239).

Blockers

Required proof

  • The replay table and the pre-tool breakdown on this Issue; one day of rocky's serving log after the change meeting the acceptance numbers.

Further notes

Related: chromeria#239 (serving moments were already 220 to 330 ms median before Cue), contextmd#53 (a Cue misfire found in the deploy check).

Canonical health incident ownership (2026-10-17)

ContextMD-Class: cue/timeout

#350 is consolidated into this Cue timeout outcome. Preserve bestia and cavallo observations in the linked consolidation comment. The existing health reporter selects the lowest-numbered open issue with this exact class line, and falls back to that search when a seeded issue is closed. Existing seed references to #248 or closed #350 therefore converge here without host configuration changes.

Activity

  1. lukemaj commented on Oct 13, 2026

    @lukemaj
    ContributorAuthor

    Planner note: the hook (contextmd bin/contextmd-hook, from ce4c4c5) uses curl --connect-timeout 0.1 -m 1. Moments that never reached the server point at the 0.1 s connect limit as much as the 1 s total limit: a request cut at 1 s would still have arrived. The timing breakdown should separate connect time from response time before choosing the fix.

  2. lukemaj commented on Oct 13, 2026

    @lukemaj
    ContributorAuthor

    What: No shorter window qualifies. None reaches 95% fire agreement with today's window, and none gets Cue's p90 under 300 ms.
    Why: Shortening the window changes which entries fire right away (the 6,000-character budget keeps 84% of fires and adds 13 new ones), and Cue costs about 230 to 290 ms even for a near-empty window, because the instruction and the 9 entry docs are scored every time.
    So what: Don't ship a shorter window for this Issue. The latency fix needs another lever (a faster adapter, contextmd#4, or a cheaper fixed part of the prompt); the planner decides which.

    Result (rocky, 2026-10-13, 338 moments replayed, 95 full-window fires)

    The live latency column maps each window's token count through live Cue's own service time by window size, from rocky's serving log before the replay started. The copy column is my copy's own time, measured on the same GPU while live Cue was also running, so it is noisier.

    Window (service budget, characters) Tokens p50 / p90 Live latency ms p50 / p90 Copy ms p50 / p90 Full-window fires kept Extra fires Fire agreement (95% CI) Moments with the same fires
    full (today: 10,000, work 2,500) 1271 / 2351 423 / 640 430 / 786 95/95 0 100% 338/338
    Chromeria 2 users, 25 items, full budget 1213 / 2092 411 / 587 426 / 719 79/95 (83%) 9 76% (68-84) 315/338
    6,000, work 1,500 1047 / 1937 380 / 554 392 / 632 80/95 (84%) 13 74% (66-82) 310/338
    4,000, work 1,000 906 / 1555 360 / 474 367 / 557 70/95 (74%) 14 64% (54-74) 302/338
    3,000, work 750 788 / 1281 334 / 424 338 / 540 64/95 (67%) 21 55% (45-65) 291/338
    2,000, work 500 663 / 995 312 / 371 319 / 553 49/95 (52%) 22 42% (34-50) 277/338
    1,500, work 400 622 / 900 308 / 359 312 / 500 47/95 (49%) 22 40% (32-50) 279/338
    1,000, work 300 559 / 831 300 / 337 305 / 551 41/95 (43%) 21 35% (27-45) 274/338
    500, work 200 503 / 797 289 / 336 293 / 494 42/95 (44%) 25 35% (26-44) 273/338

    Fire agreement is kept / (full-window fires + extra fires), so it counts both under- and over-firing. The interval is 2,000 bootstrap resamples by moment. Every variant always keeps the newest message as today does (cut only past 2,500 characters when over budget). It also keeps a tool moment's call (1,000 characters) and failure output (1,000 characters). That is why tool-moment windows stay near 800 tokens at p90 even at the smallest budget.

    Per entry (lost / extra against the full window):

    Entry Full fires 2 users/25 6,000 4,000 3,000 2,000 1,500 1,000 500
    reflection 42 -11/+7 -6/+7 -10/+7 -12/+11 -19/+12 -21/+9 -23/+14 -21/+13
    research 35 -4/+1 -9/+5 -12/+4 -17/+5 -21/+6 -20/+5 -23/+2 -24/+7
    specify 13 0/0 0/+1 -2/+2 -1/+2 -4/+2 -4/+4 -6/+1 -6/+1
    finalization 2 -1/0 0/0 0/0 -1/0 -2/0 -2/0 -1/0 -1/0
    project-direction, prototype, reconciliation, grilling, wayfinder 3 0/+1 0/0 -1/+1 0/+3 0/+2 -1/+4 -1/+4 -1/+4

    By moment kind (agreement / live-latency p90 ms): user messages (92 moments, 30 fires) hold up best: 94% / 470 ms at 6,000 characters, then 84% / 392 at 4,000. Pre-tool moments (191, 47 fires) reach 66% / 587 at 6,000; tool failures (55, 18 fires) 65% / 601. No kind gets under 300 ms p90: user messages bottom out at 308 ms.

    The latency floor: live Cue's service time under 500 window tokens is 271 ms median, and my copy measured 231 ms on a 102-token window. Shortening the window can save at most about 150 ms off today's 423 ms median.

    Method

    • Inputs: every user-message and tool-failure moment from rocky's last 24 h, plus 1,200 random pre-tool moments (2,159 in all), from contextmd.sqlite and chromeria-v2.sqlite opened mode=ro. Each window is rebuilt as ContextmdServing.transcript and Cue.transcriptItems do, cut at the moment (pre-tool and failure: the items before the call's projected item; user message: up to that message). The call and failure output come from the projected tool item, since the hook payload is not stored. The order was shuffled, so the 338 finished moments are a random sample of the day.
    • Scorer: my own copy of the live variant q4b-cloud-step64-w8a8c (same base, adapter, W8A8, torch.compile, threshold 0.5625), running the deployed window.py with BUDGET and WORK_CHARS changed per variant. It ran on bestia under nice 19, VRAM capped at about 6 GB, 50% GPU duty, with its own inductor cache. The live service was not touched. Scoring is deterministic: 72 identical-window pairs scored identically.
    • Reference: my copy's full-window scores on the same rebuilt input, so the comparison only measures the window change. Against live Cue's logged scores (26 moments it scored ok), my rebuild matches the window size within 5 tokens on 15 and the fire set on 24. The rebuild is close to what live saw but not identical; the cause is the approximate call text and projection timing.
    • No training split was used and no label was changed.
    • Scripts and the full output: branch experiment/cue-window-248 (3f9f7d44f8, experiments/cue-window-248/), not for main.

    Limits

    • Sample: 338 of 2,159 moments, 95 reference fires. I stopped early because the verdict is far from the bar (every upper bound is below 95%) and the replay was slowing live Cue.
    • Effect on live Cue: at equal window size, live service time rose 20 to 45% while my copy shared the GPU (1,000 to 1,499 tokens: 424 → 519 ms p50; 1,500 to 1,999: 483 → 643 ms). The run went from 17:37Z to 18:23Z. Live Cue was back to 474 ms p50 at 1,000 to 1,999 tokens right after the stop.
    • Live-latency column: an estimate from live calls by token count, not a timed run of each variant on a quiet GPU.
    • Not done here: the pre-tool moment's time breakdown (the second acceptance box).
  3. lukemaj commented on Oct 13, 2026

    @lukemaj
    ContributorAuthor

    What: after contextmd#58 went live (2 s total, 1 s connect; rocky 18:29Z, cavallo and bestia about 18:31Z), tool results with no pre-tool moment on rocky fell from about 7% to under 1%.
    Why it matters: the hook's old 1 s / 0.1 s limits were what cut most of the missing pre-tool moments, not the server.
    So what: the pre-tool time breakdown (this Issue's second acceptance item) continues on the new data; Chromeria is unchanged (#251 not deployed).

    Rocky, from contextmd.sqlite: a tool result or failure counts as lost when no pre_tool row has the same harness and call id.

    Window Claude Codex Grok Total
    24 h before 276 / 4,090 243 / 3,438 182 / 2,863 701 / 10,391 (6.7%)
    45 min before 27 / 201 13 / 121 1 / 237 41 / 559 (7.3%)
    45 min after 2 / 181 1 / 97 1 / 182 4 / 460 (0.9%)

    Limits:

    • 45 minutes is a short window. I'll extend it to 24 h with the breakdown.
    • Cavallo and bestia had no tool results since the deploy, so they add nothing yet.
    • This count can't separate the remaining 4 from calls a harness never sends a pre-tool hook for. The connect versus response split comes with the breakdown.
  4. lukemaj commented on Oct 13, 2026

    @lukemaj
    ContributorAuthor

    What: pre-tool time is mostly waiting for Chromeria's shared database connection, not window building, Cue or the hook's connect. That wait is what still cuts moments: since #251, 42 of 250 pre-tool moments on rocky were cut over_budget.
    Why: background reads (about 1,700 orchestration events decoded per second, plus per-thread polling) keep chromeria-v2.sqlite's single connection busy 99% of the time. Serving's queries take under 1 ms alone but queue behind that work.
    So what: the fix belongs to #256 (filed now), not to the Cue window. This answers the breakdown box here; the third box (one day of rocky's log) waits on #256.

    Where a pre-tool moment's time goes (rocky, 916b0feb, read-only)

    Outside the server: TCP connect to 127.0.0.1:3773 takes 0.3 ms p50, 0.4 ms max (172 probes). The old --connect-timeout 0.1 was not what cut moments; the 1 s total was (contextmd#62). The HTTP span and the moment's own clock differ by p50 1 ms, max 9 ms (165 moments), so nothing sits between arrival and startedAt.

    Inside the server, the work itself: every SQL step a pre-tool moment runs, timed alone against the live file (mode=ro, 40 recent moments' threads, 2 runs each):

    Step p50 max
    run join (resolveRun) 0.0 ms 0.7 ms
    deny or read check, per pending call 0.7 ms 17.3 ms
    window: last 6 user messages 0.0 ms 0.4 ms
    window: items since the last user message 0.2 ms 2.1 ms

    Config, store and headCommit reads are async file reads with no process spawn. Window building is therefore not the cost (refutes this Issue's inference).

    Inside the server, the wall time: pre-tool server_ms, joined runs:

    Period n p50 p90 p99 over_budget
    before Cue, 14:00 to 15:30 985 235 422 769 (none then)
    Cue, old build, 15:35 to 20:00 3,576 449 700 1,262 (none then)
    #251 live, 20:03 to 21:27 241 625 951 964 33

    Since 20:03, Cue was mostly not_called (live Cue on bestia is stopped overnight), yet pre-tool p50 is 625 ms. Cue's scoring is not the remaining cost either. Of the 42 cut pre-tool moments (33 above plus 9 cut before the join), 16 were cut before the run join and 24 after it. Cuts land at every stage, which fits waiting rather than one slow step.

    What the moment waits for: rocky's trace, 21:12 to 21:27Z (170 moments, 24 over_budget):

    • 23 of 24 cut moments and 53 of 55 moments over 600 ms overlapped a chromeria-v2.sqlite span over 100 ms (median overlap 409 ms and 196 ms). Only 32 of 91 moments under 600 ms did.
    • Database spans covered 99% of wall time in a 57 s sample. A trivial provider_sessions select logged 747 spans over 100 ms in 15 minutes: that is queueing for the connection.
    • The event loop is not the limit: /health answers at p50 9 ms, p99 82 ms.

    Limits

    • The overlap is a correlation from span timing. Moment traces carry no stage spans and no trace id link to their queries, so per-stage wall time inside a moment is inferred, not timed. Stage spans on the moment would make it direct.
    • Evening load, 1.5 h since fix(server): Cue waits up to 1.5 s for a score the moment needs now #251, and Chromeria restarted at 20:01, 21:02 and 21:27Z (none by me). The trace window starts 10 minutes after a restart; event decoding was the same 24 minutes after.
    • Scripts: /tmp/w248/ on rocky (not committed).
  5. lukemaj commented on Oct 14, 2026

    @lukemaj
    ContributorAuthor

    Longer window, read-only, 2026-10-14, from the contextmd#13 close-out. Same direction as the 30-minute sample.

    Rocky, 2026-10-13 15:35Z to 2026-10-14 07:08Z, cue_ms on ok: user messages 94 ok and 46 timeout (33% of those two); tool results 2,458 ok and 297 timeout (11%). Timeouts do not store a window size. Among ok user messages, 1,500 to 2,999 tokens (n=15) median 566 ms, p90 640 ms, against the 650 ms wait. Among ok tool results, 3,000 or more tokens (n=140) median 906 ms, and all 140 are over 650 ms. Counts only.

  6. lukemaj commented on Oct 14, 2026

    @lukemaj
    ContributorAuthor

    2026-10-13 20:03:32 UTC to 2026-10-14 07:21:50 UTC, machine rocky

    Harness Count Rate Kinds
    claude tool result 10 of 32 Cue moments 31.2% previous window 10.8%

    Example ids: 26749, 26792, 26796, 27015, 27045, 27058, 27149, 27190, 27741, 27903

    Heartbeat age at the run: 28 s
    ContextMD-Window: rocky cue/lost 1791921812-1791962510

  7. lukemaj commented on Oct 14, 2026

    @lukemaj
    ContributorAuthor

    Add to the paused Cue experiments (2026-10-14, Cue and capture thread): measure the Cue service's packed scoring at 64, 128, 256 and 512 entries per request (latency and GPU memory on bestia's 3090). Capture will add hundreds of Cue entries, and the service caps a request at 64 (MAX_ENTRIES in contextmd/cue/service.py). The user prefers raising the cap over a retrieval pre-filter (contextmd#14 rejected that). It runs with the other paused overnight Cue experiments when the user resumes them.

  8. lukemaj commented on Oct 14, 2026

    @lukemaj
    ContributorAuthor

    What: Measured window replay, entry scaling and packing stability; neither tested shorter window nor a higher cap qualifies for a production change.
    Why: Shortening changed fires; larger requests cost seconds and also changed scores/fires.
    So what: Retain the current 10,000-character window, API cap 64 and physical cap 12,288 for now; continue measurement only. Live Cue stays stopped by the user's latest instruction.

    Round 1 is written up. Prefix caching's 26 completed cases had zero reference fires and ended in a shape crash: preliminary speed evidence only. Students reached 124/207 ms p50/p90 but only 40.7% fire agreement; best observed agreement was 50.3%, below 95%. Policy replay reduced simulated Reflection events 46→36 while retaining 20 inherited yes-labelled first events; selected, unblinded labels and simplified delivery state support no production conclusion.

    Replay: 197 reconstructed rocky moments, 40 user messages and 157 tool results, 24 reference fires.

    Window/work characters Service p50/p90 ms Fire agreement
    10000/2500 365.5/757.3 Reference
    4000/1000 327.9/447.7 72.4%
    1000/300 287.1/326.5 46.7%

    Agreement = kept/(reference fires + extras). Both candidates miss the observed 95%/300-ms bars. Recommendation for #248: keep 10k, consistent with contextmd#20's accuracy choice; this does not prove every shorter policy fails. Fifteen selected moments were unjoined; only three threads had positive fires. Historical reconstruction is approximate: 11/33 live windows matched within five tokens. Reference agreement is not good-fire accuracy; production timeout/lost acceptance remains untested.

    Entry scaling, 24 measurements/cell; instrumented service p50/p90 milliseconds:

    API entries 10k window 4k window 1k window
    64 887/1474 858/1028 763/857
    128 1821/2634 1809/2041 1665/1810
    256 4040/5115 3930/4223 3843/3961
    512 7703/9664 7636/8128 7434/7676

    This uses chunking at 12,288 tokens, repeating the window. Corpus: nine authentic entries plus 503 derived stress documents, not 512 authentic intents. A single physical 512-entry sequence took 14.51/17.73 seconds short/long; three repetitions of one moment are not population p90. Warmup produced one allocator OOM warning; sampled device peak 23,450 MiB left only 1,126 MiB.

    Safe increase: not established; retain 64. Full-window 128 nearly doubles median latency versus 64, and every tested cap/order missed observed 95% preservation (84.0–93.4% at 128); some uncertainty bounds cross 95%. All 256/512 matrix round trips exceeded the current two-second transport limit.

    The descriptive live-4B test baseline is P=.4535, R=.5021, AP=.4360, AUC=.9308 at .5625; validation-fitted .5 gives P=.4320/R=.5226. Entry-heldout only, historically exposed; never used for selection/promotion. The .393 figure was 0.6B.

    Every experiment above received an independent Sol numeric check and separate Sol methodology review. Cue stopped 21:26:09Z and remains inactive/dead, PID 0; no restart, per superseding instruction. Stop/final state recorded and pushed in runbook 6e7a2c5. No production code/config changed.

  9. lukemaj commented on Oct 15, 2026

    @lukemaj
    ContributorAuthor

    2026-10-14 07:21:50 UTC to 2026-10-15 04:00:01 UTC, machine rocky

    Harness Count Rate Kinds
    claude tool result 10 of 35 Cue moments 28.6% previous window 15.1%

    Example ids: 28030, 28032, 28041, 28043, 28088, 28093, 28095, 28109, 28118, 28120

    Heartbeat age at the run: 0 s
    ContextMD-Window: rocky cue/timeout 1791962510-1792036801

  10. lukemaj commented on Oct 17, 2026

    @lukemaj
    ContributorAuthor

    What: PR #391 candidate 0aa7a8b hit the existing ContextMD route deadline assertion in GitHub CI: 1,573 ms versus the 1,200 ms moment budget.
    Why: The client-observed deadline was exceeded; the precise delay source is unproved, and these ContextMD source/test files are unchanged from the component base.
    So what: The #379 planner records this on the existing latency owner and performs one bounded failed-job rerun before deciding whether a separate owning repair is required.

    Job: https://github.com/toolboxmd/chromeria/actions/runs/39054473755/job/117459518766. Exact SHA 0aa7a8b246c904c35cebe4a06362ac99bbc2d0d9, base c28a6fa3763f13d7fd3272dfcf1157ec060faf2d. Failure: src/contextmd/ContextmdRoute.test.ts:1580, test replies within the moment's budget when Cue never answers a failed call (#251). Server5 finished: 1 failed / 1,922 passed / 4 skipped, 332.76s. Other five server jobs passed, including the newly weighted authority workflow; Check fails correctly on this failure and skipped downstream transfer artifact.

    The test uses a never-answering Cue fixture and measures real client round-trip against MOMENT_BUDGET_MS. No threshold change, sleep/poll workaround or source edit was made. This is a real failed deadline observation, not a confirmed product regression or a confirmed infrastructure-only flake. Complete private job log retained at /tmp/chromeria-391-0aa-server5.log. Current independent R8 reviews proceed against frozen source. One retry does not erase this evidence; recurrence requires diagnosis at this owner.

  11. lukemaj commented on Oct 17, 2026

    @lukemaj
    ContributorAuthor

    What: The single failed-job retry passed on unchanged candidate 0aa7a8b.
    Why: Attempt 2 no longer exceeded the ContextMD route deadline; the original 1,573 ms failure remains a real observation with no proven delay source.
    So what: No ContextMD code or assertion is changed in #379; retain the earlier evidence here for the latency owner.

    Run https://github.com/toolboxmd/chromeria/actions/runs/39054473755, attempt 2, completed success on 0aa7a8b246c904c35cebe4a06362ac99bbc2d0d9, verified through the live run API. No further retry was issued. This does not close #248 or establish a product latency fix. #391 remains blocked by an independent authority finding in task cancellation, unrelated to this retry.

  12. lukemaj commented on Oct 17, 2026

    @lukemaj
    ContributorAuthor

    What: #248 now owns the Cue timeout health incidents previously tracked separately in #350.
    Why: Both records describe the unresolved Cue timeout outcome; separate incident ownership split the machine evidence.
    So what: Keep #248 open, preserve every transferred window below, and close #350 as duplicate.

    Original incident: #350. Its unchanged body and all incident comments are retained below to preserve exact counters and health-report deduplication markers.

    What: The serving health check found cue/timeout on bestia over its threshold.
    Why: The daily check (toolboxmd/contextmd#40, #57) rates the serving log's stored statuses, outcomes and Cue results, and tool calls Agent Observer saw; this class is a defect this repository owns.
    So what: An agent finds the cause and fixes it here; the check comments with each later window over the threshold.

    ContextMD-Class: cue/timeout

    2026-10-14 04:00:17 UTC to 2026-10-15 04:00:16 UTC, machine bestia

    Harness Count Rate Kinds
    claude user message 297 of 506 Cue moments 58.7% previous window 0.0%

    Example ids: 1054, 1326, 3281, 3348, 4398, 4419, 4463, 5068, 5105, 5196

    Heartbeat age at the run: 9 s
    ContextMD-Window: bestia cue/timeout 1791950418-1792036816

    Elon record

    Source observation: #350 (comment)

    2026-10-15 04:00:01 UTC to 2026-10-16 04:00:05 UTC, machine cavallo

    Harness Count Rate Kinds
    codex tool result 148 of 453 Cue moments 32.7% previous window 20.0%

    Example ids: 819, 824, 826, 831, 833, 835, 837, 839, 841, 848

    Heartbeat age at the run: 20 s
    ContextMD-Window: cavallo cue/timeout 1792036801-1792123205

    Requirements and who asked: User approved the audited closure/consolidation batch on 2026-10-17.
    Deleted: Duplicate or superseded tracking only; preserve source history, unique acceptance and active work.
    Bottleneck: Tracker state had not been reconciled with delivered code or the accepted successor.
    Checked myself: Original audit, current issue body/state, related issue and PR states immediately before this action, and exact after-state.

    Reconciliation target: #248; action=consolidate-350-health-owner; force=false; branch-deletion=false; approval SHA-256=a414b3b77c8e190634da5ec3424c90beb56f9c8c8f2ce214978267d627690fe4.

  13. lukemaj commented on Oct 18, 2026

    @lukemaj
    ContributorAuthor

    2026-10-16 04:00:05 UTC to 2026-10-18 04:00:04 UTC, machine cavallo

    Harness Count Rate Kinds
    claude tool result 35 of 67 Cue moments 52.2% previous window 11.1%
    codex tool result 150 of 276 Cue moments 54.3% previous window 32.1%

    Example ids: 3646, 3661, 3750, 3770, 3782, 3805, 3807, 3809, 3998, 4017

    Heartbeat age at the run: 9 s
    ContextMD-Window: cavallo cue/timeout 1792123205-1792296005

  14. lukemaj commented on Oct 20, 2026

    @lukemaj
    ContributorAuthor

    2026-10-19 04:00:00 UTC to 2026-10-20 04:00:24 UTC, machine bestia

    Harness Count Rate Kinds
    claude tool result 4398 of 6983 Cue moments 63.0% previous window 24.8%
    codex tool result 10363 of 15686 Cue moments 66.1% previous window 40.5%
    grok tool result 662 of 1974 Cue moments 33.5% previous window 13.5%

    Example ids: 246752, 246774, 246782, 246830, 246952, 246990, 247016, 247150, 247156, 247168

    Heartbeat age at the run: 12 s
    ContextMD-Window: bestia cue/timeout 1792382400-1792468825

  15. lukemaj commented on Oct 20, 2026

    @lukemaj
    ContributorAuthor

    2026-10-19 04:00:05 UTC to 2026-10-20 04:00:05 UTC, machine cavallo

    Harness Count Rate Kinds
    claude tool failure 65 of 92 Cue moments 70.7% previous window 59.8%
    codex tool failure 46 of 56 Cue moments 82.1% previous window 50.0%
    codex tool result 2973 of 4763 Cue moments 62.4% previous window 53.7%
    grok tool failure 21 of 38 Cue moments 55.3% previous window 50.0%

    Example ids: 50216, 51636, 51638, 51642, 51644, 52300, 52345, 52572, 52574, 52985

    Heartbeat age at the run: 26 s
    ContextMD-Window: cavallo cue/timeout 1792382405-1792468806

  16. lukemaj commented on Oct 20, 2026

    @lukemaj
    ContributorAuthor

    2026-10-19 04:00:01 UTC to 2026-10-20 04:00:15 UTC, machine rocky

    Harness Count Rate Kinds
    claude tool result 178 of 379 Cue moments 47.0% previous window 25.5%
    claude user message 16 of 30 Cue moments 53.3% previous window 42.3%
    codex tool result 804 of 1595 Cue moments 50.4% previous window 34.4%
    grok tool result 58 of 190 Cue moments 30.5% previous window 6.5%

    Example ids: 61220, 61230, 61242, 61248, 61250, 61254, 61275, 61277, 61299, 61303

    Heartbeat age at the run: -4 s
    ContextMD-Window: rocky cue/timeout 1792382402-1792468815

  17. lukemaj commented on Oct 21, 2026

    @lukemaj
    ContributorAuthor

    2026-10-20 04:00:24 UTC to 2026-10-21 04:00:24 UTC, machine bestia

    Harness Count Rate Kinds
    claude tool result 3558 of 4908 Cue moments 72.5% previous window 63.0%
    codex tool result 7748 of 10487 Cue moments 73.9% previous window 66.1%

    Example ids: 306373, 306425, 306504, 306553, 306554, 306556, 306567, 306571, 306574, 306580

    Heartbeat age at the run: 16 s
    ContextMD-Window: bestia cue/timeout 1792468825-1792555225

  18. lukemaj commented on Oct 22, 2026

    @lukemaj
    ContributorAuthor

    2026-10-21 04:00:24 UTC to 2026-10-22 04:00:08 UTC, machine bestia

    Harness Count Rate Kinds
    grok tool result 69 of 75 Cue moments 92.0% previous window 35.5%

    Example ids: 346581, 346583, 346587, 346597, 346598, 346611, 346629, 346635, 346653, 346661

    Heartbeat age at the run: 9 s
    ContextMD-Window: bestia cue/timeout 1792555225-1792641609

  19. lukemaj commented on Oct 24, 2026

    @lukemaj
    ContributorAuthor

    2026-10-23 04:00:24 UTC to 2026-10-24 04:00:14 UTC, machine bestia

    Harness Count Rate Kinds
    claude tool result 508 of 848 Cue moments 59.9% previous window 50.1%

    Example ids: 351549, 351551, 351563, 351565, 351572, 351576, 351578, 351946, 351952, 351978

    Heartbeat age at the run: 15 s
    ContextMD-Window: bestia cue/timeout 1792728025-1792814415

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions