Commit Graph
10942 Commits
Author SHA1 Message Date
Jinwoo-H bc417e89e0 refactor(mobile): drop the orphaned provider-review repository state module
Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 16:39:05 -04:00
Jinwoo-H 3b81915a23 fix(mobile): reconcile the wave lanes after merging all ten
Restore the workspace hostSubscribe arm the browser and workspace merges
dropped between them, retire the settings capability the workspace lane
moved onto ui.get/ui.set, replace the task lane's page RPC sender with the
shared one, and re-pin the census, grant and correlation tests to the
merged registry.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 16:38:27 -04:00
Jinwoo-H 1bb84fe281 Merge branch 'ota-w-files' of /tmp/orca-fix/files into ota-wave-integrate
# Conflicts:
#	docs/reference/mobile-hybrid-webview-architecture.md
#	mobile/src/mobile-web/mobile-web-capability-authorities.ts
#	mobile/src/mobile-web/mobile-web-capability-broker.ts
#	mobile/src/mobile-web/mobile-web-capability-dispatch-census.test.ts
#	mobile/src/mobile-web/mobile-web-capability-execution-dependencies.ts
#	mobile/src/mobile-web/mobile-web-mutation-authorization-race.test.ts
#	mobile/src/mobile-web/mobile-web-mutation-reauthorization-census.test.ts
#	mobile/src/mobile-web/mobile-web-production-grants.ts
#	mobile/src/mobile-web/mobile-web-terminal-artifact-authority.test.ts
#	mobile/src/mobile-web/mobile-web-workspace-capability.ts
#	src/main/runtime/rpc/methods/mobile-web-host-rpc-allowlist.ts
#	src/mobile-web/src/mobile-web-markdown-request-client.test.ts
#	src/shared/mobile-web/bridge-operation-echo-census.test.ts
#	src/shared/mobile-web/bridge-operation-registry-census.test.ts
#	src/shared/mobile-web/bridge-operation-registry.ts
2026-09-07 16:32:14 -04:00
Jinwoo-H 3578831932 Merge branch 'ota-w-workspace' of /tmp/orca-fix/workspace into ota-wave-integrate
# Conflicts:
#	docs/reference/mobile-hybrid-webview-architecture.md
#	mobile/src/mobile-web/mobile-web-browser-operations.test.ts
#	mobile/src/mobile-web/mobile-web-browser-streams.test.ts
#	mobile/src/mobile-web/mobile-web-capability-broker.ts
#	mobile/src/mobile-web/mobile-web-capability-dispatch-census.test.ts
#	mobile/src/mobile-web/mobile-web-capability-execution-arms.ts
#	mobile/src/mobile-web/mobile-web-capability-execution-dependencies.ts
#	mobile/src/mobile-web/mobile-web-capability-subscriptions.ts
#	mobile/src/mobile-web/mobile-web-cross-workspace-mutation-race.test.ts
#	mobile/src/mobile-web/mobile-web-mutation-reauthorization-census.test.ts
#	mobile/src/mobile-web/mobile-web-production-grants.ts
#	mobile/src/mobile-web/mobile-web-shell-response-schema-corpus.test.ts
#	mobile/src/mobile-web/mobile-web-subscription-closure-frames.test.ts
#	mobile/src/mobile-web/mobile-web-subscription-error-code.test.ts
#	mobile/src/tasks/web-host-task-preference-operations.test.ts
#	mobile/src/tasks/web-host-task-preference-operations.ts
#	src/mobile-web/src/mobile-web-bridge-subscription-setup.ts
#	src/mobile-web/src/mobile-web-operation-response-correlation.test.ts
#	src/shared/mobile-web/bridge-operation-echo-census.test.ts
#	src/shared/mobile-web/bridge-operation-registry-census.test.ts
2026-09-07 16:31:14 -04:00
Jinwoo-H 17f8081b77 Merge branch 'ota-w-task' of /tmp/orca-fix/task into ota-wave-integrate
# Conflicts:
#	docs/reference/mobile-hybrid-webview-architecture.md
#	mobile/src/mobile-web/mobile-web-capability-dispatch-census.test.ts
#	mobile/src/mobile-web/mobile-web-mutation-reauthorization-census.test.ts
#	mobile/src/mobile-web/mobile-web-shell-response-schema-corpus.test.ts
#	mobile/src/mobile-web/mobile-web-task-read-roundtrip.test.ts
#	src/main/runtime/rpc/methods/index.ts
#	src/shared/mobile-web/bridge-operation-echo-census.test.ts
#	src/shared/mobile-web/bridge-operation-registry-census.test.ts
#	src/shared/mobile-web/bridge-operation-registry.ts
#	src/shared/mobile-web/shell-payload-tolerance-census.test.ts
2026-09-07 16:25:25 -04:00
Jinwoo-H 6d0827d31e Merge branch 'ota-w-browser' of /tmp/orca-fix/browser into ota-wave-integrate
# Conflicts:
#	docs/reference/mobile-hybrid-webview-architecture.md
#	mobile/src/mobile-web/mobile-web-capability-broker.ts
#	mobile/src/mobile-web/mobile-web-capability-dispatch-census.test.ts
#	mobile/src/mobile-web/mobile-web-capability-execution-dependencies.ts
#	mobile/src/mobile-web/mobile-web-mutation-reauthorization-census.test.ts
#	src/shared/mobile-web/bridge-operation-registry.ts
2026-09-07 16:24:53 -04:00
Jinwoo-H c77338c8c3 Merge branch 'ota-w-review' of /tmp/orca-fix/review into ota-wave-integrate
# Conflicts:
#	docs/reference/mobile-hybrid-webview-architecture.md
#	mobile/src/mobile-web/mobile-web-capability-dispatch-census.test.ts
#	mobile/src/mobile-web/mobile-web-capability-execution-arms.ts
#	mobile/src/mobile-web/mobile-web-cross-workspace-mutation-race.test.ts
#	mobile/src/mobile-web/mobile-web-mutation-reauthorization-census.test.ts
#	mobile/src/mobile-web/mobile-web-provider-review-creation.ts
#	mobile/src/mobile-web/mobile-web-provider-review-state.ts
#	src/main/runtime/rpc/methods/index.ts
#	src/main/runtime/rpc/methods/mobile-web-host-rpc-allowlist.ts
#	src/shared/mobile-web/bridge-operation-echo-census.test.ts
#	src/shared/mobile-web/bridge-operation-registry-census.test.ts
2026-09-07 16:24:13 -04:00
Jinwoo-H 3577dc2e15 Merge branch 'ota-w-git' of /tmp/orca-fix/git into ota-wave-integrate
# Conflicts:
#	mobile/src/mobile-web/hosted-ios-source-control-review-journey.test.ts
#	src/mobile-web/src/mobile-web-source-control-sync-request-client.test.ts
#	src/shared/mobile-web/bridge-operation-echo-census.test.ts
#	src/shared/mobile-web/bridge-operation-registry-census.test.ts
2026-09-07 16:23:01 -04:00
Jinwoo-H 11fa93854a refactor(mobile): delete the desktop handle ledgers for artifacts and history
A terminal artifact is now addressed by the tab plus the terminal text that
named it. The desktop re-resolves the path and re-earns the file grant on every
chunk, so a retired terminal cannot keep serving bytes and there is no token,
TTL or record cap to keep. `artifactRelease` has nothing left to release.

An agent session is addressed by the agent and provider session id the scan
already reports, and paging is a caller-supplied offset. The vault's own row id
embeds the transcript path, so the projection publishes the provider id instead
of the composite. The resume mutation key is derived from the session, and the
host's existing create-result TTL owns its lifetime.

The agent-history host calls now go through the typed runtime functions the
sibling RPC handlers call, with no dispatch by method name and no re-parsing.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 16:21:50 -04:00
Jinwoo-H 7f41268f05 Merge branch 'ota-w-native-store' of /tmp/orca-fix/native-store into ota-wave-integrate
# Conflicts:
#	mobile/app/hybrid.tsx
#	mobile/src/mobile-web/hosted-android-mobile-web-cache.test.ts
#	mobile/src/mobile-web/hosted-ios-build-activation.test.ts
#	mobile/src/mobile-web/hosted-ios-mobile-web-cache.test.ts
#	mobile/src/mobile-web/hosted-webview-cdp-session.test.ts
2026-09-07 16:12:50 -04:00
Jinwoo-H ee2edcfbb8 Merge branch 'ota-w-testprune' of /tmp/orca-fix/testprune into ota-wave-integrate
# Conflicts:
#	mobile/src/mobile-web/mobile-web-shell-response-schema-corpus.test.ts
2026-09-07 16:12:03 -04:00
Jinwoo-H 613dcabe00 Merge branch 'ota-w-hygiene' of /tmp/orca-fix/hygiene into ota-wave-integrate 2026-09-07 16:11:52 -04:00
Jinwoo-H e9e168c364 docs(mobile): record the page-side host sender and the declared deadline
Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 16:09:28 -04:00
Jinwoo-H 9193f4a7be fix(mobile): reset the page document during render, not after it
Clearing page readiness in an effect let one paint show the outgoing page's
readiness against the incoming document. Keying the state on the session and
view epoch resets it in the same render that changes them.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 16:07:30 -04:00
Jinwoo-H 05de821cb7 refactor(mobile): run workspace creation reads over the generic host lane
The page now drives the same desktop requests the native app makes, through
an RpcClient-shaped sender over workspace.hostRequest, so the shell's read and
source translators and their contracts are gone. Creation itself stays in the
shell: a workspace no catalog page has listed has no page handle, and only the
authority can mint one. Repo ids cross as host ids, so the re-lookups that
existed to re-resolve opaque repo handles are deleted with them.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 16:06:57 -04:00
Jinwoo-H cb06bc8454 feat(mobile): let the page declare its own host-request deadline
The shell capped every forwarded call at its 15s default, which is shorter
than an SSH connect needs. The envelope now carries an optional deadline the
caller sets through the same request options it already passes, clamped to
180s so a page cannot park a host call indefinitely.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 16:06:57 -04:00
Jinwoo-H d7d67b1e7f refactor(mobile): drive the package shell from one reducer and drop rollback
The download now buffers each asset in memory, verifies it, and hands the store
one complete file, so the chunk protocol and its per-chunk hashes go with the
stage ids. The session/recovery/refresh/capability hook chain collapses into one
reducer-driven hook with no prop-drilled refs, and A/B rollback goes with it:
there is no earlier generation to promote, so a page that cannot load makes the
shell delete that host's cache and download again, once per host selection.

That retires the health deadline, the process-failure tracker, the cached-build
probe, rejected build ids, and the whole recovery toolbar.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 16:02:29 -04:00
Jinwoo-H 296ff0f88f test(mobile): read committed generations instead of an activation file
The device harnesses polled `activation.json` to learn which build was live.
A host now keeps exactly one committed generation, so that directory is the
record. The crash-loop and corrupt-cache drills only ever asserted the A/B
rollback and are removed with it.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 16:02:29 -04:00
Jinwoo-H 5f782c948e refactor(mobile-web): replace the exact-JSON parser with the two checks it earned
A strict zod schema on a parsed value already rejects `__proto__`, unknown keys,
and unsafe numbers, so the 280-line hand-written scanner only ever bought two
things: a repeated key, which `JSON.parse` silently resolves before the schema
sees it, and an unpaired surrogate, which parses into a perfectly valid string.
The test states both, and the replacement checks only those.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 16:02:29 -04:00
Jinwoo-H b1edc9fec8 refactor(mobile-web): scope review payloads to the caller that sends them
The desktop was parsing the page's payload contract under a placeholder
workspace handle, because the contract named a workspace the desktop never
learns. Each payload is now built once per scope from one field shape: the page
keeps `workspaceId`, the desktop gets `worktree`. The wrappers declare the real
schema instead of a passthrough, and results carry no workspace handle at all.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 16:01:08 -04:00
Jinwoo-H 7193299c8f refactor(desktop): project provider review from the host's own types
The wrappers called the RPC dispatcher by method name and got `unknown` back, so
the projection rebuilt every field with typeof checks and regex before a final
parse. That is the shell's sanitizer moved rather than retired: the desktop is
where these values come from.

Each wrapper now calls the typed runtime command directly, so a review is
`HostedReviewInfo` plus a discriminated `GitHubWorkItemDetails` or
`GitLabWorkItemDetails`, and the projection is a field map with a provider split.
The clipping stays, because comment, file, check-job and diff-row counts are real
size caps the provider does not honour.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 16:01:08 -04:00
Jinwoo-H 7db9b1b13f fix(desktop): drop the deleted readability method from the mobile host allowlist
The Phase 1 merge kept the allowlist entry after the method itself was
deleted, so the gate test named a method nothing registers.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 16:00:37 -04:00
Jinwoo-H b31ac3c778 fix(shared): drop the redundant execution host union on project groups
Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:59:53 -04:00
Jinwoo-H ad39cc22c5 refactor(desktop): project mobile Source Control from typed Desktop results
The wrappers called sibling RPC handlers, whose return type is `unknown`, so
every projection rebuilt its result field by field out of `isRecord` checks and
per-field schema parses. They now call the runtime commands directly, which are
typed, and project by field mapping.

What survives is bounding, which is the only thing the page contract actually
needs from the Desktop: list caps, response budgets, text limits, and the
narrowing of a Git string into the object id, ref name or workspace-relative
path the page schema admits.

The projections are Desktop-only, so they no longer sit in the shared directory
the page package compiles.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:57:58 -04:00
Jinwoo-H 59dea46770 fix(mobile): keep the agent resume command a clientless terminal send
Naming a mobile client would claim the input floor on the freshly created
terminal, which the shell path it replaces never did.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:56:01 -04:00
Jinwoo-H a4d1b5fc09 refactor(shared): split ai vault resume host status from target resolution
The moved module exceeded the root 300-line ceiling, so the repo/folder/project
host-status derivation is its own concept file and the target module keeps only
the session-to-worktree resolution.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:55:05 -04:00
Jinwoo-H 0cfed794a8 refactor(mobile): move agent history reads and resume to the desktop
Session handles and page cursors are now desktop state keyed by connection, so
the page never sees a cwd, a transcript path or a provider session id. The pure
resume target, launch plan, scope-path and session-worktree modules move to
src/shared so the desktop and the released native app run one implementation.

A cross-workspace resume no longer navigates: the page can only route to a
workspace it already holds a shell-minted handle for, so the desktop reports
whether the resume landed in the current workspace instead of naming another.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:51:29 -04:00
Jinwoo-H f0a007c289 fix(mobile): identify a hosted bridge error by the Desktop method it named
The Source Control journey looked for a `sourceControl.reviewOpen` bridge
error, which the generic host lane no longer reports under that name. The
observation now records the method a host request named, and the journey
matches on it.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:45:28 -04:00
Jinwoo-H 0018fd041f refactor(mobile): delete the workspace and account contracts nothing imports
Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:43:19 -04:00
Jinwoo-H 6a44e5129c docs(mobile): record Source Control on the generic host lane
Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:39:21 -04:00
Jinwoo-H ec05bd0545 refactor(mobile-web): parse shell payloads with the plain contract schema
The tolerant rewrite existed to absorb skew between a shell and a page that
ship separately, but the protocol version is the compat gate and hybrid has no
released users. Deleting it means the host must emit exactly what the page
declares, so the mobile-web transcript read reshapes blocks to the contract
instead of relying on the page to strip host-only detail. Two gaps the rewrite
was hiding are now closed in the contract: the pending-snapshot flag the shared
chat view consumes, and the block fields the page never named.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:29:49 -04:00
Jinwoo-H d440e03eec docs(mobile): record Hosted Tasks on the generic host lane
Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:27:18 -04:00
Jinwoo-H ccf7ba5f74 refactor(mobile): drop the task opaque handle from the page
Nothing issues a task targetId now that the shell no longer mediates, so the
target builders, view state and result schemas stop carrying a field that is
always absent.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:25:48 -04:00
Jinwoo-H fb69f030af docs(mobile): record what the workspace translator still owns
Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:25:31 -04:00
Jinwoo-H a6c2ee1ea9 refactor(mobile): delete the shell's Source Control translators
The shell no longer knows what a Source Control operation is. Sixteen
translator modules, their preflights, the branch-compare continuation cache and
the capability grants they needed are gone; forwarding, the byte envelope and
the workspace-handle rewrite are all that is left, and they are the generic
host lane's job.

Commit-message generation keeps its operation. Hosted review creation still
reads the repository in the shell, so the read it shared with Source Control
moves into the provider module that still needs it.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:23:37 -04:00
Jinwoo-H 298375cbdd refactor(mobile): move the account domain onto the host lane
accounts.list, the three selection methods and accounts.subscribe now reach
the desktop through the generic lane, and the page parses the snapshot with
its own schema. The shell keeps only the reset-credit arms, which mint a
native idempotency key and so cannot be a plain forward.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:23:32 -04:00
Jinwoo-H e568c6acf4 docs(mobile): record the desktop-owned provider review lane
Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:20:12 -04:00
Jinwoo-H aea6158ad4 refactor(mobile-web): serve provider review from the desktop host lane
The shell no longer knows what a review is. `mobileWeb.review.*` reads the
branch's hosted review, projects the provider work item into the page contract,
and runs every comment, management, submission and creation action; the page
reaches all nine through the generic host request and parses the answer with the
same shared contracts. GitHub and GitLab split only inside the desktop handlers.

Check-run job logs and review file diffs are the two unbounded results, so both
are clipped on the desktop rather than sanitized twice on the way across.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:20:12 -04:00
Jinwoo-H 26f181890c refactor(mobile): move terminal artifacts and markdown tabs to the desktop
The artifact token registry now lives on the desktop keyed by connection, so
host paths and terminal file grants never reach the page. Markdown tab reads
and saves resolve the tab, clip past the edit ceiling, and fall back to disk
on the desktop; only device-local drafts stay in the shell.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:19:25 -04:00
Jinwoo-H d1f3d4e1bf refactor(shared): drop the task schemas the shell was the only caller of
Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:14:10 -04:00
Jinwoo-H ac3ab84e58 refactor(mobile): mirror the two-call package store on Android
Same shape as iOS: writeStagedAsset/commitGeneration/abortGeneration replace the
stage protocol, the manifest is the canonical document the build id hashes, and
the host keeps one generation under a four-host LRU cap. Drops the activation
record, the cache quota policy, and the exact-JSON scanner with them.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:11:48 -04:00
Jinwoo-H 842cf65ff2 refactor(mobile): delete the shell task translator layer
The shell no longer knows a task operation, an opaque work-item handle or a
project-table cursor. The desktop socket gate is the only allowlist, and the
page addresses repositories, work items and projects by their host ids.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:10:23 -04:00
Jinwoo-H 490c08669e docs(mobile): record the desktop-owned browser lane
Also ends the stream on a frame the page contract cannot describe, which is what
an error event means on this lane.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:09:24 -04:00
Jinwoo-H 671aecd4ff test(mobile): retire the shell echo checks the host lane no longer performs
The page synthesizes its own workspace handle for activate/update/remove now,
so there is no shell echo left to mismatch.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:08:50 -04:00
Jinwoo-H f09f618f3b refactor(mobile-web): put the transport connection state on the wire
The shell collapsed six transport states into four, and every page route
expanded them back. Both mappings are gone; the page reads the state the
transport reported.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:08:45 -04:00
Jinwoo-H b80e9264e9 refactor(mobile-web): call the Desktop directly for Source Control
Each Source Control call now names the Desktop method and parses the answer
against its contract, so the page no longer depends on a shell translator to
reshape a result it already knows how to read.

The optimistic-concurrency fields the page sent only so the shell could re-read
Desktop state before writing are gone; the Desktop reauthorizes the write and
reports the refusal. Commit-message generation keeps its shell operation
because it outlives the host lane's request deadline and needs a cancel.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:08:30 -04:00
Jinwoo-H 4bb3f2e6e6 refactor(mobile): delete the shell browser translators, streams and grants
The browser capability is gone from the bridge registry, so the shell no longer
names a browser RPC, sanitizes a tab URL or chunks a frame. hostRequest carries
pointer traffic now, so its bucket takes over the retired pointer grant's rate.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:07:47 -04:00
Jinwoo-H f6d32ea7cf refactor(mobile): move browser input and the screencast onto the host lane
The page addresses the browser page id directly through requestMobileWebHost and
parses each result with the shared contract, so no browser translator remains
between it and the desktop.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:07:41 -04:00
Jinwoo-H 418bb65e1c refactor(mobile): move workspace reads and mutations onto the host lane
worktree.activate/set/sleep/rm, repo.list and ui.get/ui.set now reach the
desktop through workspace.hostRequest, and a mobileWeb.workspace.subscribe
wrapper reduces the client-event firehose to bare catalog change types. The
shell keeps only the worktree.ps catalog read that mints workspace handles;
repo handles are gone from that path, so the page addresses repos by host id.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:07:28 -04:00
Jinwoo-H cb14aeb33e feat(desktop): serve mobile Source Control history, compare and review from the host lane
The shell translated every Source Control operation, so the page's own
projections lived on the phone and the Desktop answered raw Git. Move the
bounding and the mobile projection to the Desktop, where the result can be
clipped before it crosses the bridge, and expose the writes the page reaches
directly through the generic host allowlist.

Branch compare answers in one clipped response, so the shell's continuation
cache and its revision handshake have nothing left to do.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
2026-09-07 15:03:22 -04:00