Resolve reopened Remote UI feedback - #70
Conversation
|
Follow-up UX refinement from operator feedback is in
Validation: |
|
Latest UI polish is in
Validation: full |
|
Follow-up for Fizzy #119: fixed PR diff/comment persistence and selection latency. Root cause: selecting a diff line rebuilt and replaced the full PR subtree, so cost scaled with PR size; polling also cloned the unchanged diff during editor reconciliation. Numeric scroll restoration could not guarantee that the same visible line stayed anchored. Outcome:
Chromium measurement on a 1,500-line fixture: 73.4 ms synchronous full render vs 20.5 ms synchronous selection update (~3.6x faster). The smoke test also verifies viewer/form node identity, replacement-container scroll, visible line position, range state, Cancel, Escape, forced refresh, mobile, and desktop. Validation: |
|
CI follow-up for |
|
Implemented the PR diff render optimization in b440df9.\n\nRoot cause: the mounted diff DOM was preserved, but every unchanged poll still mapped every file, hunk, and line into a redundant HTML string before reconciliation. The viewer now uses snapshot + expand state as its version and emits an empty keyed shell only when the matching mounted viewer can be transplanted.\n\nBrowser validation with 1,500 lines:\n- full render: 80.7 ms synchronous\n- first transition poll: 71.0 ms\n- steady unchanged poll: 6.9 ms\n- both unchanged polls called renderDiffLine zero times\n- viewer node, inline comment node/value, focus, page scroll, and visible line position stayed stable\n- surrounding PR metadata still updated with poll preservation disabled\n- snapshot change and collapse each regenerated all 1,500 lines and replaced the viewer\n- collapse now keeps every file closed after a rebuild\n\nValidation:\n- bin/test\n- bin/remote-ui-smoke\n- git diff --check\n- gitleaks detect --no-banner --redact --source .\n- independent spec review: clean\n- independent standards review: clean\n\nNo merge performed; PR remains ready for orchestrator review. |
|
CI follow-up: both Ruby 3.4 jobs and one Ruby 3.2 job passed on b440df9. The duplicate Ruby 3.2 run failed at test/cli_command_test.rb:568 (remote agent stop timing), the same unrelated flaky lifecycle assertion seen before; the other Ruby 3.2 run on the identical commit passed. Local bin/test also passed. |
|
Added persistent, network-free agent PR listing in 8048a39.\n\nRoot cause: the browser cache was transient, but the minutes-long delay came from the server issuing one serial GitHub metadata request per PR on every GET /agents/:key/pull-requests. The first implementation review also caught a second scaling trap: reading the full diff snapshot JSON once per listed PR.\n\nOutcome:\n- newly discovered canonical PR references persist in ~/.tycho/logs/agents/pull_request_catalog.json\n- compact GitHub metadata survives server/browser restarts\n- ordinary listing makes zero GitHub requests\n- ordinary listing reads the catalog once and parses the shared diff snapshot store once\n- Refresh metadata is now an explicit operation and remains separate from patch fetching\n- fetching a diff also updates the same cached metadata\n- existing attachment records remain the authoritative agent occurrence source\n\nRegression coverage uses three PRs and proves zero metadata calls, one snapshot-store parse, explicit refresh behavior, persisted catalog contents, and restart recovery.\n\nValidation passed: bin/test, bin/remote-ui-smoke, git diff --check, gitleaks, independent spec review, and independent standards review. |
|
CI follow-up for 8048a39: both Ruby 3.4 jobs and one Ruby 3.2 job passed. The duplicate Ruby 3.2 run failed at the existing test/cli_command_test.rb:568 remote-agent-stop timing assertion; the other Ruby 3.2 run on the identical commit passed. This is the same unrelated flake recorded earlier. |
8048a39 to
eef6d00
Compare
|
Refined the persistent catalog in eef6d00 so ownership is per agent.\n\n- each agent writes .pull_request_catalog.json beside its memory and attachment sidecars\n- opening one agent reads only that agent’s catalog; no shared cross-agent catalog is constructed\n- Catalog requires an explicit path, so callers cannot silently fall back to a shared file\n- metadata refresh and diff fetch update the owning agent’s sidecar\n- concurrent refreshes of the same PR across two agents still share one GitHub metadata/patch fetch, then each caller writes its own catalog\n- archive moves the catalog, backup, and lock sidecars and leaves no active copies\n\nRegression coverage now creates distinct agents with isolated catalogs and also exercises the same-PR coalescing follower path. Full bin/test, final bin/remote-ui-smoke, git diff --check, gitleaks, and both independent reviews pass. |
|
CI follow-up for eef6d00: both Ruby 3.4 jobs passed. Both initial Ruby 3.2 jobs hit the known test/cli_command_test.rb:568 agent-stop timing flake; rerunning the failed jobs produced one Ruby 3.2 pass and one repeat failure on the identical commit. Local bin/test passes. |
eef6d00 to
a5c8849
Compare
|
Updated the agent-owned PR catalog so each listed PR now uses the origin PR title and exposes its current state in both the list and detail header.
Validation: |
|
CI is green on |
|
Fixed slow PR-to-PR navigation in commit Root cause: selecting a PR started a forced agent conversation refresh and waited for conversation, skills, and project data before requesting the already-saved diff. Large agent histories could therefore delay the diff by minutes even though the snapshot was local. The per-agent PR route hydration now starts the catalog/saved-diff path concurrently with unrelated agent-shell data. The existing diff queue renders independently when the snapshot arrives, while diff DOM, selection form, and scroll preservation remain unchanged. The Chromium regression holds conversation loading behind an explicit gate and requires the selected diff request to occur before releasing it. This proves causal independence without a machine-speed threshold. Validation: |
|
CI is green on |
|
Follow-up performance fix is now in I reproduced this against the real Cookpad Pull Request Reviews agent with polling disabled. The agent had 27 catalog entries and 6 saved snapshots. The list API returned in about 230 ms and a diff API request in about 170 ms, but a cold browser switch took 3.5–3.6 s. A previously opened switch still took 1.62 s with no network request, which isolated the main bottleneck to browser DOM construction/layout rather than the poll or PR size alone. The Remote UI now:
Validation:
PR: #70 |
|
CI follow-up: the complete pull-request-triggered workflow is green on Ruby 3.2 and 3.4. The duplicate push-triggered Ruby 3.2 job still fails at the pre-existing flaky assertion |
Summary
docs/USAGE_METRICS.md; narrowly ignore regenerated usage reports.Root causes
Validation
bundle exec ruby test/remote_server_test.rbbin/testbin/remote-ui-smokegit diff --checkgitleaks detect --no-git --source . --redact --no-bannerCI note
Ruby 3.4 is green. The Ruby 3.2 job fails in the pre-existing remote-agent stop assertion in
test/cli_command_test.rb; the exact failure is also present on base commit9b277126in main run 31267294233. This PR does not change that lifecycle path. The full suite passes locally.Fizzy: #119, #127, #125