4116 Commits

Author SHA1 Message Date
Nathan Esquenazi
3dc2585c2f chore(#4024): drop stray .review-crops/ scratch from the release diff
The release diff committed 7 PNG review-crop screenshots under a root-level
.review-crops/ directory (652K) that nothing references — not the CHANGELOG,
docs HTML, or any source file. These are deep-review before/after scratch
shots, not durable UX evidence (the intended evidence lives in
docs/ui-ux/evidence/pr4024-*.png and is kept). Shipping them in v0.51.375
would bloat the repo history permanently for every user.

Remove the directory and add .review-crops/ to .gitignore (next to the
.local-review/ harness entry) so review scratch can't leak into a release
diff again — mirroring the stray-uv.lock drop in #3963.

No code or test change; the Transparent Stream feature is untouched.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 19:11:22 -07:00
nesquena-hermes
c45adb910a fix(#4024): wire dormant recency-fade to live turn + include Interrupted in progress-bar completed set (Opus final-gate observations)
- _applyTransparentRowFading was only called from the settled loop (which the fn skips), so live-turn recency fade never applied — now called from _syncTransparentEventControls (internally live-gated, no-ops on settled).
- _attachProgressBar isCompleted now includes Interrupted so an interrupted row's bar fills 100% instead of rendering empty.
2026-06-13 01:53:11 +00:00
nesquena-hermes
f18e8d6545 docs(changelog): stamp Transparent Stream (#3820/#4024) as v0.51.375 (Release MN) 2026-06-13 01:43:25 +00:00
nesquena-hermes
d952dfe3a2 fix(#4024): trifecta round-2 — rehydrate root-turn, always-preserve detail tab, drop redundant Running: name prefix
- C1-r2 (both Codex+Opus): _rehydrateTransparentStreamDom now also rewires the root element when it IS the assistant turn (querySelectorAll only matched descendants), so turn-toggle + event-controls re-bind after a live-turn restore.
- O-Bug2-r2: preserve the Full/Output detail tab regardless of open state.
- r2 #4: drop the 'Running: ' name prefix — the legible status badge already carries it (V6 redundancy class).
2026-06-13 01:16:56 +00:00
nesquena-hermes
5dad3e03e5 test(#4024): update CSS-literal assertions to the new quiet treatment + add 8 trifecta-fix regression guards
- Re-anchor test_old_event_fading + test_transparent_event_row_quiet_metadata_visual_rhythm to the new contract (left-rail output, inline-row args, underline active tab, WCAG fade floor, live-only fade).
- Add guards: live-turn-restore rehydrate (C1), echoed-thinking dedup (O-Bug1), thinking-card flat reset (V1), skin-proof reset (V3), legible failed status (V2), interrupted settled status (O-Edge), completion preserves expand state (O-Bug2), live-only entrance animation (V9).
2026-06-13 01:12:09 +00:00
nesquena-hermes
ed3ac13fc5 fix(#4024): trifecta UX + correctness pass — rehydrate live-restore, thinking dedup, quiet thinking rows, legible failures, skin-proof reset, compact args, flat output, live-only fade/anim
Functional (Codex+Opus trifecta findings):
- C1: restoreLiveTurnHtmlForSession now calls _rehydrateTransparentStreamDom (controls were dead after active-session live-turn restore).
- O-Bug1: per-turn echoed-thinking dedup in the transparent settled path (mirrors the compact seenReasons), fixes duplicate out-of-order Thinking rows.
- O-Bug2: tool completion preserves the row's open state + Full/Output tab.
- O-Edge: settled/reloaded done===false tools show 'Interrupted' (not a permanent Running shimmer); progress bar clears for Interrupted too.

Visual (trifecta CSS):
- V1: reset .thinking-card to flat/transparent (was the heaviest object in the stream).
- V2: failed=error color + left border, running/interrupted legible (was an invisible muted badge).
- V3: scoped !important reset beats the 6 per-skin .tool-card re-card rules.
- V4: inline key:value args (was a tall stacked form).
- V5/V7: output pre flattened to a quiet left-rail, max-height:none (one expanded zone, no nested scroll).
- V6: drop redundant tool/status pseudo-args from the detail body.
- V8: row fading gated to the live turn only + floor raised for WCAG; settled history stays full-opacity.
- V9: entrance animation scoped to #liveAssistantTurn (was replaying on every renderMessages).
- V10: larger mobile header tap targets + active detail-tab underline.

O-Bug3 (live thinking overwrite when no seq) intentionally deferred — documented follow-up; settled render is already correct and a live heuristic risks a streaming regression.
2026-06-13 01:08:41 +00:00
nesquena-hermes
92f7a24448 Merge #4024 Transparent Stream onto master (rebase)
# Conflicts:
#	CHANGELOG.md
2026-06-13 00:40:17 +00:00
nesquena-hermes
75ea7abef4 Merge pull request #4082 from nesquena/stage-mm
Some checks failed
Release & Docker / release (push) Has been cancelled
Release MM (v0.51.374): custom-provider context-length probes carry the API key (#4059)
v0.51.374
2026-06-12 17:35:50 -07:00
nesquena-hermes
e8529c84e5 Merge #4060: pass custom provider keys to context probes (#4059) 2026-06-13 00:17:16 +00:00
nesquena-hermes
6354a46e0d Merge pull request #4081 from nesquena/stage-ml
Some checks failed
Release & Docker / release (push) Has been cancelled
Release ML (v0.51.373): sidebar lineage segments survive streaming refresh + source-count alignment
v0.51.373
2026-06-12 17:10:37 -07:00
nesquena-hermes
89ca46eeb5 harden(#4020): prune lineage cache by collapsed-row key too (Opus SHOULD-FIX)
Opus advisor found a key-space asymmetry: _pruneLineageReportCacheToVisibleSessions
built visibleKeys from RAW rows via _sidebarLineageKeyForRow, but the render loop
keys the lineage-report cache by _sidebarLineageKeyForRow on the COLLAPSED row,
which can differ when collapse merges segments. On a malformed/edge chain the
expanded row's cache could be evicted every payload and re-fetched ~every 5s
(partial regression of the bug #4020 fixes). Fold the collapsed rows' cache keys
into the visible set too, mirroring the _resolveSessionIdFromSidebarLineage
precedent, behind a defensive try/catch.

docs(changelog): stamp #4020+#4055 as v0.51.373 (Release ML)
2026-06-13 00:03:30 +00:00
nesquena-hermes
0fdfa4b9fa Merge #4055 into stage-ml 2026-06-12 23:43:28 +00:00
nesquena-hermes
3ddf99c6f1 Merge #4020 into stage-ml 2026-06-12 23:43:28 +00:00
Frank Song
9f0e76c182 Preserve worklog detail disclosure state 2026-06-13 07:43:12 +08:00
nesquena-hermes
dee23a3528 Merge pull request #4079 from nesquena/stage-mk
Some checks failed
Release & Docker / release (push) Has been cancelled
Release MK (v0.51.372): markdown link-label inline code + /use skill autocomplete + mobile Worklog overflow
v0.51.372
2026-06-12 16:41:00 -07:00
nesquena-hermes
f083cf54d1 docs(changelog): stamp Phase-2 batch as v0.51.372 (Release MK) 2026-06-12 23:37:34 +00:00
nesquena-hermes
4874126b6d Merge #4066 into stage-mk 2026-06-12 23:18:00 +00:00
nesquena-hermes
0eee1b85ec Merge #4010 into stage-mk 2026-06-12 23:18:00 +00:00
nesquena-hermes
f4ce459f79 Merge #4017 into stage-mk 2026-06-12 23:18:00 +00:00
Rod Boev
db2d6eb97a test(pytest): suppress shard nodeid floods in verbose CI 2026-06-12 16:53:03 -04:00
nesquena-hermes
46ca6aefb6 Merge pull request #4074 from nesquena/stage-mj
Some checks failed
Release & Docker / release (push) Has been cancelled
Release MJ (v0.51.371): low-risk batch — approval polling, composer/titlebar polish, slash-command parity, skill categories, French TTS
v0.51.371
2026-06-12 13:44:07 -07:00
nesquena-hermes
ce013de195 Merge master (docs #4061) into stage-mj 2026-06-12 20:40:35 +00:00
nesquena-hermes
8a3ba873c8 Merge pull request #4061 from rodboev/pr/4045-aimlapi-provider-preset
docs(onboarding): document AIML API custom-provider setup (#4045)
2026-06-12 13:37:31 -07:00
nesquena-hermes
31936c3026 docs(changelog): stamp Phase-1 low-risk batch as v0.51.371 (Release MJ) 2026-06-12 20:29:28 +00:00
nesquena-hermes
6ec5527386 harden(#4057): pass local skills dir to _skill_category_from_path explicitly (Opus SHOULD-FIX)
_active_skill_search_dirs filters to existing dirs, so on a host with no local
skills dir but configured external dirs the local root is dropped from the list
and the position-based skills_dirs[0]==local assumption misclassified the first
external root as local (its flat skills silently lost their category label).
Pass the local dir explicitly (backward-compatible optional param defaulting to
the old skills_dirs[0] behavior) + regression test for the absent-local-dir case.
2026-06-12 20:28:46 +00:00
nesquena-hermes
ec15da249b Merge branch 'master' into pr/4045-aimlapi-provider-preset 2026-06-12 13:22:09 -07:00
nesquena-hermes
2fea2d588b Merge #4058 into stage-mj 2026-06-12 20:14:42 +00:00
nesquena-hermes
4ad3299449 Merge #4057 into stage-mj 2026-06-12 20:14:42 +00:00
nesquena-hermes
1e5a741f50 Merge #4054 into stage-mj 2026-06-12 20:14:42 +00:00
nesquena-hermes
10481d4f34 Merge #4051 into stage-mj 2026-06-12 20:14:42 +00:00
nesquena-hermes
13fdb0755f Merge #4049 into stage-mj 2026-06-12 20:14:42 +00:00
nesquena-hermes
ffa9f533ef Merge #4048 into stage-mj 2026-06-12 20:14:42 +00:00
nesquena-hermes
1052f4ab87 Merge #4047 into stage-mj 2026-06-12 20:14:42 +00:00
nesquena-hermes
99ee11a733 Merge #4046 into stage-mj 2026-06-12 20:14:42 +00:00
nesquena-hermes
fb3d689619 Merge #4050 into stage-mj 2026-06-12 20:14:41 +00:00
nesquena-hermes
f026c03bc1 Merge pull request #4073 from nesquena/stage-mi
Some checks failed
Release & Docker / release (push) Has been cancelled
Release MI (v0.51.370): real model catalog when /api/models rebuild times out (#3928)
v0.51.370
2026-06-12 13:09:53 -07:00
nesquena-hermes
82fcf665eb harden(#4052): tolerate providers.*.models list-of-dicts keyed by model/name (Opus SHOULD-FIX)
The richer static-catalog builder's group-building loop used a strict item["id"]
extraction that would KeyError (caught → degrade to the minimal one-model catalog)
for legal config shapes where providers.<id>.models is a list of dicts keyed by
"model"/"name" rather than "id". Mirror the tolerant id-or-model-or-name resolution
the detection loop already uses, skip entries with nothing usable, and add a
regression test. No behavior change for the common list-of-strings / list-of-id-dicts
shapes.

docs(changelog): stamp #4052 model-picker budget fallback as v0.51.370 (Release MI)
2026-06-12 20:05:12 +00:00
nesquena-hermes
1c82dab798 Merge #4052: real static catalog when /api/models times out (#3928) 2026-06-12 19:50:52 +00:00
Rod Boev
ea05c6f3e8 test(mobile): harden worklog overflow regression parser (#4064) 2026-06-12 13:57:37 -04:00
Rod Boev
028be2fe22 fix(mobile): constrain Worklog summary overflow on narrow viewports (#4064) 2026-06-12 13:33:26 -04:00
Frank Song
d516f9dd00 fix(anchor): harden registry contract before wiring 2026-06-13 00:44:26 +08:00
Rod Boev
010127d0c0 docs(onboarding): place AIML setup with custom-provider guidance (#4045) 2026-06-12 12:41:43 -04:00
Rod Boev
b426067e6f docs(onboarding): document AIML API custom-provider setup (#4045) 2026-06-12 12:35:59 -04:00
b3nw
9ac9f8d690 fix(#4059): log unresolved custom provider key templates 2026-06-12 16:23:35 +00:00
b3nw
8ee8523340 test: isolate context-length metadata stub 2026-06-12 16:18:50 +00:00
Rod Boev
6a1109475b fix(sidebar): count inactive rows through the render path 2026-06-12 12:03:04 -04:00
Rod Boev
65c0864e34 fix(approval): clear stale approval cards while busy 2026-06-12 11:55:43 -04:00
Rod Boev
4d8fa0245e fix(#3928): stabilize the static fallback contract 2026-06-12 11:55:43 -04:00
Rod Boev
0ed902bd05 fix(sidebar): drop the dead WebUI count path 2026-06-12 11:55:43 -04:00
b3nw
b2eda41b49 fix(#4059): pass custom provider keys to context probes
Resolve custom provider API keys from the matched config snapshot and pass them through session hydration plus streaming fallback context-length probes. This prevents authenticated /v1/models endpoints from falling back to the default 256K window and clobbering larger persisted session metadata.
2026-06-12 15:53:48 +00:00