Commit Graph
3076 Commits
Author SHA1 Message Date
Bohdan Triapitsyn 12ee13ee0b chore: changelog entry for the follow opt-out gestures
Claude-Session: https://claude.ai/code/session_017TK5JAYDfT3Fotc23UEg98
2026-08-28 23:20:39 +03:00
Bohdan Triapitsyn 80fddba933 fix(chat): release live follow on middle-button pan, Shift+Space, and nested wheel (#2107)
fix: release chat autoscroll on explicit navigation intent
2026-08-28 23:06:49 +03:00
Bohdan Triapitsyn 1d1c215230 fix(chat): release live follow on middle-button pan, Shift+Space, and nested wheel
Merge main and reshape the follow opt-out to the gestures the timeline was
missing: a middle-button press starts the platform autoscroll pan (the only
scroll gesture on wheel-less mice and tablets with a pointer), Shift+Space
scrolls up from the keyboard, and an upward wheel over a nested scroller that
still has room above stays with that scroller instead of releasing the chat.

The grace re-pin timer and scroll-direction tracking are dropped: returning to
within the end band already re-arms follow, and the mode machine is built
without timers on purpose. Pause/Break never move the viewport and are not
gestures.

Closes #1640
2026-08-28 23:05:57 +03:00
Bohdan Triapitsyn 8029480f22 docs(triage): a fixed-close needs its evidence commit reachable from main 2026-08-28 23:04:05 +03:00
Bohdan Triapitsyn 7c1902b9e9 fix(settings): drop the class-name assertion test and redundant truncate from the passkey row 2026-08-28 23:03:16 +03:00
Gautam0507andRepro Agent 8fee25c97b fix(ui): let SettingsFieldRow labels truncate on long content (#3196)
* test: reproduce long passkey label overlay (issue #3181)

* fix(ui): let SettingsFieldRow labels truncate on long content

---------

Co-authored-by: Repro Agent <repro-agent@example.com>
2026-08-28 23:02:50 +03:00
Bohdan Triapitsyn 339c88783c docs(triage): an open PR blocks stale and fixed closes of its issue 2026-08-28 22:51:50 +03:00
Bohdan Triapitsyn 758d627d6c docs(vscode): credit @mdatsev for the OpenCode upgrade fix 2026-08-28 22:48:01 +03:00
Bohdan Triapitsyn 7b59610efc docs(changelog): credit @mdatsev for the OpenCode upgrade fix 2026-08-28 22:47:50 +03:00
Bohdan Triapitsyn cddc366afc docs(triage): check for an open PR before taking an issue into work; credit @mattv8 for the CRLF composer fix 2026-08-28 22:45:29 +03:00
Bohdan Triapitsyn 33783999e5 fix(chat): own end-follow during streaming instead of the list's animated maintain
The list's animated maintainScrollAtEnd is single-flight and re-pins only
within a tenth of the viewport, so in a narrow viewport (VS Code sidebar) each
revealed block — several screens tall there — left the reader a second behind
and multiple screens above the live edge. The timeline hook now follows growth
itself: glide when within a viewport of the end, otherwise jump to one screen
above the end and glide the rest. Measured at 420x640: time spent >40px behind
dropped from 45% to 11%, max distance from 1682px to 382px.

Claude-Session: https://claude.ai/code/session_017TK5JAYDfT3Fotc23UEg98
2026-08-28 22:33:01 +03:00
Bohdan Triapitsyn 844c5eb22c chore: consolidate the unreleased changelogs
Claude-Session: https://claude.ai/code/session_017TK5JAYDfT3Fotc23UEg98
2026-08-28 20:13:21 +03:00
Bohdan Triapitsyn 505f9b9e8c feat(mobile): list managed Chats in the sessions sheet
Chat sessions without a project were dropped from the mobile session tree
because no registered project owned their directory. The sheet now partitions
sessions like the desktop sidebar and shows Chats as a collapsible section above
the project tree, with the same rows, swipe actions and paging; search results
label them "Chats" instead of the raw directory name.

Claude-Session: https://claude.ai/code/session_017TK5JAYDfT3Fotc23UEg98
2026-08-28 20:08:58 +03:00
Bohdan Triapitsyn 010ee59f60 fix(chat): keep the viewport in place on send when auto-follow is off
With "Follow new content while streaming" disabled, sending from mid-history
no longer anchors the new message at the top of the viewport; the reader stays
where they were and the scroll-to-bottom pill leads to the new turn. Sending
from the live edge still parks the message as before. The setting's info text
now describes this in every locale.

Claude-Session: https://claude.ai/code/session_017TK5JAYDfT3Fotc23UEg98
2026-08-28 20:08:58 +03:00
Bohdan Triapitsyn b291eb0b03 docs(agents): changelog is written only on the maintainer's explicit request
Claude-Session: https://claude.ai/code/session_017TK5JAYDfT3Fotc23UEg98
2026-08-28 20:08:58 +03:00
Bohdan Triapitsyn 59fa91309a fix(ui): keep the app root pinned when the caret scrolls it
Chromium scrolls overflow:hidden ancestors when a textarea caret moves out
of view (PageUp/PageDown in the prompt box, long prompts), shifting the whole
app up and hiding the title bar with no way to scroll back. Snap html/body/#root
back to zero on any root scroll event in the web, desktop, VS Code and mini-chat
apps.

Claude-Session: https://claude.ai/code/session_017TK5JAYDfT3Fotc23UEg98
2026-08-28 20:08:58 +03:00
Bohdan Triapitsyn e00ebea262 fix(browser): wait for panel surface before capture 2026-08-28 20:08:58 +03:00
Bohdan Triapitsyn 4e857b7877 fix(vscode): remove unreachable branch checkout behavior
The VS Code app mounts VSCodeLayout, which exposes sessions, chat, and settings but not the shared GitView or its branch selector. The remote-tracking checkout path added for that selector therefore had no user-reachable caller in the extension.

Restore the existing VS Code checkout implementation and remove the VS Code changelog claim. The web runtime keeps the fix because its Git view exposes the branch selector.
2026-08-28 20:08:58 +03:00
Bohdan Triapitsyn 82bd2a60b0 Merge pull request #3207 from openchamber/fix/composer-crlf-caret
fix(composer): keep the caret inside the normalized document
2026-08-28 20:07:30 +03:00
Iuliia Ivashko eca9353382 fix(composer): keep the caret inside the normalized document
CodeMirror collapses a CRLF pair into one line break, so the document is
shorter than the string it was given. The composer derived the caret from
the JS string length, which put it past the end of the document and made
dispatch throw `RangeError: Selection points outside of document`.

Because the exception fires before the transaction applies, the document
never updates, the un-normalized text stays in React state, and the draft
persists as-is: every later visit to the session restores it and crashes
again, with no way out from the UI.

Derive the caret from the change set instead, in the controlled writeback
and in the imperative insert/replace handles.

fixes #3013

# Conflicts:
#	CHANGELOG.md
#	packages/vscode/CHANGELOG.md
2026-08-28 19:14:02 +03:00
Bohdan Triapitsyn 7b5b431d22 Merge pull request #3209 from openchamber/fix/opencode-upgrade-target
fix(opencode): name the release when upgrading OpenCode
2026-08-28 19:04:18 +03:00
Iuliia Ivashko 20cda28cac fix(opencode): name the release when upgrading OpenCode
Since opencode 1.18.x, `POST /global/upgrade` requires a `target` semver in
the body. OpenChamber sent an empty object, so every "Update OpenCode" click
came back 400. The rejection arrives as `{name, data:{message}}`, which has
no `error` field, so the user was left with the bare status text: "Bad
Request".

Resolve the target from the latest release — the same lookup the upgrade
prompt already uses to decide there is anything to offer — and fail with an
explicit code when it cannot be resolved, rather than sending a body opencode
is guaranteed to reject. Read the upstream rejection message so a refused
upgrade explains itself.

The VS Code extension carries its own copy of this flow and had the same two
defects; both are fixed there.

fixes #3121
2026-08-28 18:48:27 +03:00
Bohdan Triapitsyn 6950e113f4 docs(vscode): add the surface reachability map
Canonical answer to 'is this reachable in VS Code': three webview hosts,
VSCodeLayout's three views, a 33-row surface table (mounted / partial /
not mounted with the mount chain or cut-off point), the dead-bridge
handler list, and which fs routes stay live. Reviews, changelog entries,
and parity claims consult this map; whoever mounts or unmounts a surface
updates it in the same change.
2026-08-28 16:35:34 +03:00
Bohdan Triapitsyn b5fed6e2e2 docs(agents): VS Code reachability gates changelog entries; yulia-ivashko carries maintainer weight
- changelog-authoring: a VS Code entry requires the surface to be
  mounted from the VS Code entrypoint (consult the surface map in
  packages/vscode/src/DOCUMENTATION.md when present); shared-but-unmounted
  code earns no entry
- triage-prs: yulia-ivashko is a core maintainer with merge rights —
  her review decisions carry maintainer weight in sweeps
2026-08-28 16:30:55 +03:00
Bohdan Triapitsyn 30f635c7ed docs(agents): reachability is proven from the runtime entrypoint
A shared component importing a runtime API proves nothing about that
runtime; the runtime's own entrypoint must mount the path. Trace
top-down before claiming a bug or fix is user-visible in a runtime —
VS Code's layout mounts only a subset of the shared surfaces and bites
reviews constantly.
2026-08-28 16:24:06 +03:00
Bohdan Triapitsyn f551f4e784 Merge pull request #3205 from openchamber/fix/branch-selector-remote-checkout
fix(git): check out a local tracking branch when a remote branch is picked
2026-08-28 16:21:40 +03:00
Bohdan Triapitsyn 5871c36875 chore: bump @opencode-ai/sdk to 1.18.25 2026-08-28 16:01:07 +03:00
Iuliia Ivashko 01b3e3346f fix(git): check out a local tracking branch when a remote branch is picked 2026-08-28 15:45:43 +03:00
Alan Shum 73e21d0050 test(ui): repair current main test baseline (#3191) 2026-08-28 15:44:40 +03:00
Bohdan Triapitsyn 5faa1a6531 docs(agents): needs-your-hands is binary — a merge gate or nothing
Either the manual check guards an irreversible path and the verdict
reads 'MERGE — after you verify X', or the verdict is a plain MERGE
with no checklist: residual cosmetic risk is absorbed by the verdict
(users surface it, a revert costs one commit). Post-merge homework
lists were the reviewer offloading uncertainty onto the maintainer.
2026-08-28 15:32:07 +03:00
Bohdan Triapitsyn 8b27bd6791 docs(agents): split needs-your-hands into merge gates and post-merge smoke
A manual check either guards an irreversible path (data loss, upgrade
and restart flows, auth) and gates the merge, or it is low-risk visual
polish where merging first is fine and skipping the check is stated as
accepted risk — never a ritual list padded to feel thorough.
2026-08-28 15:28:14 +03:00
Bohdan Triapitsyn 779cf19ae6 docs(agents): pickup mode, clickable references, and calibrated report detail
- PRs/issues with human thread activity run in pickup mode across all
  three skills: the output opens with thread state (asked / answered /
  resolved at HEAD / remaining) and continues the conversation instead
  of restarting review — the sweep remembers the maintainer's own
  comments for them
- every PR/issue reference in maintainer-facing output is a clickable
  markdown link, never a bare number
- report entries are calibrated: 2-4 sentences each (what, why this
  verdict, main risk), needs-your-hands lives inside the entry rather
  than a number-repeating section
2026-08-28 15:24:17 +03:00
Bohdan Triapitsyn 8821b9f69e Merge pull request #3204 from openchamber/fix/desktop-update-install-errors-visible
fix(desktop): surface failed update installs
2026-08-28 15:14:42 +03:00
Iuliia Ivashko 52d79cb368 fix(desktop): surface failed update installs
"Restart to Update" answered the renderer with null before the install was
attempted, so a rejected install only reached main.log and the button looked
dead. The apply-update path now keeps the IPC call open until the app quits or
autoUpdater reports the failure, rolls the quit/install flags back when the app
stays up, and the update dialog shows the real reason with a translated hint for
a rejected code signature.

Also settle the download promise on downloadUpdate() itself: an already cached
payload emits no 'update-downloaded', which left that promise pending with its
listeners attached on every retry.
2026-08-28 14:47:09 +03:00
Bohdan Triapitsyn 1760347dc7 docs(agents): prior maintainer verdicts are binding across triage sweeps
A sweep verifies whether an earlier push-back or recorded product
decision was addressed at the current HEAD and reports that explicitly;
it never re-decides or re-asks. The generic rebase-request is never
posted over an existing substantive review comment.
2026-08-28 14:12:35 +03:00
Bohdan Triapitsyn 3f3d942aab fix(browser): reveal panel for agent captures
Fixes #3175
2026-08-28 14:06:43 +03:00
Bohdan Triapitsyn 262397f896 docs(commands): source bug-work from the root-cause:found label only
The command ships in the public repo; the local triage backlog file is
maintainer-private and not a dependency anyone else can resolve.
2026-08-28 13:54:27 +03:00
Bohdan Triapitsyn 198d3f12d1 docs(commands): add feature-work and bug-work session starters
Conversation-style entry points so the maintainer can start real work
without opening the GitHub UI: feature-work serves a menu of accepted
features (approved scope from the acceptance comment is binding);
bug-work serves verified bugs from the local fix backlog and the
root-cause:found label, severity-first, re-verifying anchors before
fixing. Both close the loop with fixes #N in the eventual commit.
2026-08-28 13:53:03 +03:00
Bohdan Triapitsyn 5978b6cb14 docs(agents): record the fate of feature decisions
A maintainer's answer on a FEATURE-DECISION now resolves mechanically:
wanted features get an acceptance comment plus the new accepted label
(never re-asked by later sweeps; label:accepted is the implementation
roadmap), declined ones get the drafted close; conditional answers are
recorded as the accepted scope.
2026-08-28 13:48:54 +03:00
Bohdan Triapitsyn f826f41f55 docs(agents): detect silently-fixed issues and link fixes to issues at merge
triage-issues gains a silently-fixed detection ladder, strongest
evidence first: mechanism-anchor (git log -L on the root-cause:found
file:line since the issue date), repro re-run against current main, and
symptom search over commits/CHANGELOG/merged PR titles. CLOSE-FIXED
always names its evidence; an unverified hunch only asks the reporter
to retry.

pr-review's merge verdicts now search open issues for the symptom a bug
fix resolves and propose Closes #N, so fixes stop landing unlinked.
2026-08-28 13:06:22 +03:00
Bohdan Triapitsyn d52f8b16f0 docs(commands): add /triage-issues entry point deferring to the triage-issues skill 2026-08-28 12:56:33 +03:00
Bohdan Triapitsyn 13d7688c33 ci: run issue-intake on mimo-v2.5, matching the previous issue agents 2026-08-28 12:55:49 +03:00
Bohdan Triapitsyn fa34efbc39 ci: merge issue triage and reproduction into one intake bot; add triage-issues skill
One issue now gets one comment instead of two posted minutes apart
(the old triage bot asked questions its reproduce sibling then answered
itself). The combined issue-intake agent, driven by an audit of recent
bot output:

- duplicate check before anything else — duplicates are closed, not
  reproduced (the duplicate label had zero uses across 1,353 issues
  while the bot found duplicates in prose)
- reproduction artifacts live in a collapsed block inside the comment;
  the reproduce/issue-N branch convention is retired (382 stale branches
  removed from origin)
- reproducible:true renamed to root-cause:found — it asserts a traced
  mechanism, not reporter-confirmed causation; confirmed:reporter is the
  human-set complement
- the bot no longer sets priority (maintainer-only flag), announces its
  labels, opens with flattery, or interrogates feature reporters about
  design decisions
- comment opens with a For-the-maintainer line (fix-ready /
  needs-reporter / duplicate / likely-fixed / feature)
- label taxonomy cut from 65 to ~26: api:*, reproduction-steps:*,
  priority:medium/low, 13 near-zero-use area labels, ios/android
  platforms, and orphans removed
- runs on zai-coding-plan/glm-5.3-flash via ZHIPU_API_KEY
- new triage-issues skill mirrors the PR triage pipeline: mechanical
  sweep, verdict fan-out, approved batch actions, fix backlog
2026-08-28 12:47:20 +03:00
Bohdan Triapitsyn 3616863efc docs(commands): pr-review command is a thin pointer to the pr-review skill
One canonical owner for the review philosophy; the command keeps the
/pr-review entry point and defers everything else to the skill.
2026-08-28 12:36:16 +03:00
Bohdan Triapitsyn 4f53db17e6 fix(worktrees): protect user changes across ambiguous move failures
Post-merge hardening of the session-to-worktree move (#2998), driven by
review findings on the follow-up pass:

- an ambiguous transport failure (relay abort, timeout) on the
  change-carrying move no longer force-deletes the fresh worktree that
  may hold the user's only copy of their changes; both intent kinds
  surface honest guidance and refresh both directories
- assertSdkSuccess re-tags ambiguous transport errors when wrapping SDK
  failures, so ambiguity classification survives the wrapper on every
  path, matching the prompt-send precedent
- session liveness checks scan all child stores plus the global status
  index, and report unknown (not idle) when no store covers the session
  — an evicted background directory can no longer make a busy session
  look movable
- incomplete-rollback errors carry the changes-may-be-in-destination
  guidance instead of swallowing it
- move-message assembly shared across the three call sites; tests now
  exercise the real ambiguity classifier (extracted to
  send-failure-classification.ts) instead of a hand-mirrored mock
- i18n fallout from the merge train: Turkish gains the 21 worktree-move
  keys, all 12 locales get the hedged ambiguous-failure toast; owning
  DOCUMENTATION.md files record the new contracts
2026-08-28 12:03:55 +03:00
Bohdan Triapitsyn 9d279137ce docs(agents): weigh trusted community reviewers in triage sweeps
Comments and reviews from patrick-motard and mattv8 are strong human
signals during batch triage: their approval upgrades confidence, their
concerns become findings to verify. They write free-form; sweeps map
their conclusions onto the verdict ladder.
2026-08-28 11:49:45 +03:00
Bohdan Triapitsyn 820e3194b5 Merge pull request #2998 from mattv8/feat/move-session-existing-worktree
feat(sessions): move sessions to existing worktrees
2026-08-28 11:37:21 +03:00
Bohdan Triapitsyn 06263a5c2b Merge pull request #3064 from fitzgpt/feat/i18n-turkish
feat(i18n): add Turkish (tr) locale
2026-08-28 11:33:52 +03:00
Bohdan Triapitsyn aff407288d ci: re-enable pr-review bot on glm-5.3-flash with recalibrated output contract
Re-enable the automated PR review (pull_request_target + /oc-review
comments) on zai-coding-plan/glm-5.3-flash via ZHIPU_API_KEY.

Recalibrate the output contract based on an audit of 69 past reviews
(22 PRs, Aug 15-18): 18 of 27 BLOCKED verdicts were template-policing,
3.1 reviews per PR, ~8.4K chars per comment.

- BLOCKED now means code/merge problems only; handoff/template gaps move
  to a separate one-line Handoff flag that never changes the verdict
- re-reviews emit deltas (verdict + what changed) instead of full
  re-emission; push-triggered re-reviews are throttled to one per 15
  minutes (manual /oc-review always runs)
- hard length budgets by change class; the applied-guidance table is
  gone (guidance is applied silently, named only when it produced a
  finding); empty evidence/security sections are omitted
- evidence demands are single-shot and escapable, never raised for
  dependency bumps, string edits, server code, or packaging
- the comment opens with a one-line maintainer verdict (merge / merge
  after X / don't merge because Y), enforced by the workflow
- triage-prs skill treats review:* labels as a pre-sort for verdict
  reviews
2026-08-28 11:24:23 +03:00
mattv8 6d1510a148 docs(changelog): keep worktree move unreleased 2026-08-27 19:15:06 -06:00