Skip to content

feat(device): add typed remote device execution core - #421

Merged
lukemaj merged 4 commits into
feat/379-cross-machine-parityfrom
feat/383-remote-browser-device
Oct 18, 2026
Merged

lukemaj merged 4 commits into
feat/379-cross-machine-parityfrom
feat/383-remote-browser-device

Conversation

@lukemaj

@lukemaj lukemaj commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

What: The device core now executes typed commands through registered A-to-B MCP calls with exact session binding, current originating authority and native artifact receipts.
Why: A remote open previously returned a destination-local CLI launcher, and admission checks alone did not cover authority changes while waiting or between batch effects.
So what: This internal component is partial #383; #379 owns fresh exact-head reviews, CI, actual acceptance and integration before the remaining viewer/browser/client work and final outcome PR.

Requirements and who asked: Frozen #379 v5 and #383 require an app-owned remote device workflow, current ALL-contributor authority and truthful installed catalog/media behavior. Parent explicitly authorized this internal core boundary in #383 (comment).
Deleted: Arbitrary argv/shell/URL/config/daemon/session overrides, borrowing a B-local launcher or credential, cached support assumptions, destination authority substituted for the incoming action, and a duplicate production kernel.
Bottleneck: The native device owner must retain the original verified invocation through waits, replay and each effect; forwarding must authenticate typed discovery before opening the destination.
Checked myself: Real registered two-peer HTTP/auth/control/SQLite workflows with production DeviceService and deterministic external host/process/capture leaves; actual red/green observations are retained in the canonical #383 handoff. No device, browser, provider or product server was operated by this worker.

The public discriminated command contract lives in the existing device contract owner. DeviceService privately binds the pinned executable, config, target and session; validates actual target capabilities; preserves unknown outcomes and exact-session cleanup; and returns bounded trees/status or qualified digest/MIME/size artifact references. The adapter maps only validated variants to the pinned CLI and sanitizes its environment and diagnostic outputs. Recursive batches cannot add flags or bypass capability, artifact or effect checks.

PeerAuthority revalidates the original incoming record against the returned current ceiling, every original resource contributor, current source/destination modes, liveness, grants and current source/destination project capability settings. DeviceService owns checks after its lock and at effect boundaries. PeerForwarding prepares a separate authenticated READ device_commands action bound to the same original link generation before device_open, including for requests-v1 peers with an old device domain. Returned typed quickstart examples carry the destination routing fields and execute unchanged from A.

Compatibility: ordinary unkeyed local CLI guidance remains; remote peers without durable requests or the typed device domain fail before destination preparation. Missing pinned runtimes are refused without installing or falling back. Source pins are agent-device 0.21.25 and device-hub 0.15.3; current installed/running inventory is a separate parent observation, not worker execution proof. Physical-device/admin/credential/host-audio capabilities are not added.

Proof, exact source identity and remaining limits: see the canonical #383 handoff. Focused tests and deterministic leaves do not prove physical devices, OS process death, playable recordings or actual toolchain execution. Public source-owned viewer/tickets/relay, browser control, qualified artifact public acquisition/fetch, all-client navigation/reconnect/close/reopen and the final #383 outcome remain outstanding. The native input test proves consumption of a genuinely owner-verified reference; it does not supply a missing public reference-discovery workflow. No whole #383 completion, review, merge, acceptance or delivery is claimed.

Current PR head b809668235ee1a0a3add46e0308f0ad0dbacfa61, tree abf9ca0e7ecb6a557127d9ce88bdca2466d62258, base ecd06ef5e620191626d15b559dc663644ad59649 (integrated PR420). This normal repair commit follows immutable8c1 and addresses the single accepted shutdown mechanism in BOTH whole R2 reports. BOTH fresh whole MEDIUM reviews, current CI and primary actual acceptance remain pending. Complete new handoff: #383 (comment); mandatory full R1/author packet3836249750119, parent R2 aggregate3836249990267 and original implementation packet3836249438919 remain required prior appendices.

The shared shutdown owner rechecks the original authenticated invocation after readiness and immediately before either hub shutdown POST, outside iOS already-stopped recovery. Native UI/no-MCP compatibility, current ALL/source/target authority, started/unknown/no-repeat receipts and existing iOS recovery remain at their existing owners. Only DeviceService and the existing native workflow test change from8c1, with deterministic external hub observations for Android+iOS; no new API, grant, dependency, proxy or client scope.

Current Node24.18.0 author validation on final bytes:

  • Full native production-kernel workflow: 115 passed,335.82s, including lawful shutdown, readiness-time real grant retirement/no new shutdown, iOS stopped-device refusal not swallowed, restored-grant replay/no-repeat and later independent opening/click.
  • Device domain/catalog/client summaries/peer preservation: 156 passed in10files,31.45s, on identical production bytes. Real apps/server ../../node_modules/.bin/tsc-rs --noEmit: EXIT0, zero errors/warnings,261suggestions. Targeted lint/format and full fork-check --upstream upstream: EXIT0.
  • Genuine Android+iOS red2 at count2 versus1 before the owner change; green2 with the same assertions. First full115pass336.80s preceded the lint-required mechanical it.live.each registration repair and remains its separate source identity. The final full run above is a new execution, not a transferred result.
  • Sol R2's full112pass/1fixture-discovery failure and unchanged isolated1pass retain causeUNKNOWN; Grok's independent113pass at8c1 is distinct. Neither REQUEST_CHANGES verdict transfers. Both WHOLE reports and all parent decisions/responses are retained verbatim in the new handoff. Manual dependency preparation establishes no automatic-install defect or extra gate.

Historical proof below remains at its original source identity. The earlier custom scoped TypeScript check did not include the real Effect policy and was never CI-equivalent.

Validation used Node24.18.0 and the exact committed source bytes in 44f7b37 (base652289a86259c66dd6e756d01160f49b73d617ab):

  • vp test run apps/server/src/peer/PeerAuthority.workflow.test.ts: 110 passed,403.00s. Includes all94 incoming authority/request cases, seven transferred typed core cases and nine additional catalog/media/batch/effect/quickstart/preflight/source-policy cases.
  • Focused device/domain registration files: 47 passed in four files. PeerAuthority/PeerForwarding/McpToolAccess preservation: 57 passed in three files.
  • Scoped TypeScript, targeted lint (existing workflow schema-compile warnings), formatting, server export analysis,42-feature inventory and full fork-stack check passed.
  • Actual red/green retained for unusable public quickstart, between-effect grant retirement, lock-wait source mode change, requests-v1/old-device negotiation, host-preflight replay grant retirement and originating project policy retirement. The new source-policy native test uses A's production settings owner and a persisted project override, not a mocked capability result.

These are bounded author checks. Fresh exact-head independent reviews, current CI and actual device/client acceptance remain parent-owned and unclaimed. No repo-wide checks were run.

Upstream-first: searched current pingdotgg/t3code main 9c16146 and open PRs/Issues for device_commands and remote device. No matching typed device/current-authority fix was found. Read the complete PR 19972 diff (head c115c3c58bcc57050f890ad02d8e41bd0535d1fb); its SSH output diagnostic does not implement this boundary, so no port was used.

Authored through T3 Code, Codex harness, gpt-6.1-sol, medium reasoning effort. Retained finite workflow fixtures include the explicitly approved #369 owner artifacts; this candidate adds no moving #369 client work. Agent Observer cost: UNKNOWN, no supported attribution available.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Oct 18, 2026
@lukemaj
lukemaj force-pushed the feat/383-remote-browser-device branch from 0f0f277 to d8a768a Compare October 18, 2026 11:41
@lukemaj

lukemaj commented Oct 18, 2026

Copy link
Copy Markdown
Contributor Author

What: PR420 is internally merged with its exact reviewed/tested tree; PR421 core is aligned behind it and both independent MEDIUM reviews are running.
Why: Actual iOS acceptance exposed source request presentation/count defects; their reviewed repair is complete, and typed device core now needs current-base proof and exact independent assessment.
So what: Parent retains final379 acceptance/merge/shipment ownership, author383 revalidates the frozen core and both reviewers assess it; broader383/384/385/386 remain outstanding.

Current clean pushed integration ecd06ef5e620191626d15b559dc663644ad59649, tree f935cede0c57345e4620858cb64024bf6ea64ca5, one parent652289a. PR420 actual GitHub MERGED2026-10-18T11:39:32Z; stored source0237847/treef935 exactly equal merge tree. Source/currentCI/BOTHwholeMEDIUMapprovals and real web/iOS after proof3696249447089/PR6249447259 passed. Latest fingerprint39123987657 passed before actual merge (earlier in-progress observation retained). Authenticated newestreview/independentSUCCESSlukemaj; policy reports no protected requiredchecks on integration, but parent independently enforced completeCI/fork/fingerprint anyway, no bypass. Primary own branch fetched/fast-forwarded only; stale canonicalmain unchanged.420watchstopped, all workedPRs app-linked. Issue369OPENfinal.

Primary retained resource state: detached clean acceptance checkout /tmp/chromeria-369-client-acceptance-0237 exact0237/treef935; Aexec99985 port14247/web7478, B10656 port14248, Metro21093 port17891, same disposable369homes. Native helper ensure76291EXIT0/BUILD SUCCEEDED/developmentclient compatible rebuilttrue fingerprint90dfe9f2508b8ea4412c4efd9d6347d737023c5e. Reused already-reserved iPhone18Pro; no new simulator/device/session/grant installed for this step, Android unavailable. Real native question437->449one resolved11:33:57.471Z/real provider467completed/369_AFTER_RESULT=AFTER_ACCEPT_369; one waiting count on web+iOS, selected styling, Done/reopen, original/latestlabels/0pending actual. Actual PNGs inspected and7draftreleaseevidence uploads verifieddigest, draft remainsUNPUBLISHED. Runbook own checkpoint pushed8f03eda after unrelated remoteChromecast update caused first push rejection; inspected disjointremote delta, rebased ONLYownunpublishedrunbookdoccommit, normalpush/clean0/0. No productionChromeriaactivation, public release, physicalphone, permission widening or oldmobilecleanup.

PR421 original clean0f0f277e02/t69815918/base652authorfreeze verifiedterminalcompleted/nochildren. Parent preserved local+PUSHED rollback/383-pre-client-alignment-0f0f277. Parent rebased ONLY2corecommits ontoec d06 (fullbaseecd06ef5e620191626d15b559dc663644ad59649); twoforkfeature conflicts union BOTHpurposes/registrypaths/PR420+421, map/allowlist auto-merged. All14TypeScript files EXACTbyteequaloriginal0f0 (actualgitdiffexit0); no sourcefix by parent. Newhead d8a768ad052564548fa00bb80ca7d668d6d674b8, tree 09135416e20fdacb0bdfa5b7e39f53baf6381840, cleanorigin0/0, featureONLYexactlease expected0f0 push. No mainforce or sourcewriter overlap. Range-diff /tmp/chromeria-383-map/core-client-alignment-range-diff.txt retains doc-context changes. Original110/47/57proof remains originalcode/lowerbase, not currentexecutions. Same383job ordinal5 nowTEST-ONLYcurrentbase revalidation/fullnative+ProjectionStore/doman/preservation/types/fork, sourceFROZENunlessconcreterepairedfailure reported.

BOTH new wholeCORE first independent rounds: 379-383-core-review-r1-codex-medium-d8a768a and 379-383-core-review-r1-grok-medium-d8a768a. Native catalog supports/actual returned and thread configuration verifies codex/gpt-6.1-sol/MEDIUM and installedgrok/grok-4.7/MEDIUM, separate app-bound worktrees review-379-383-core-r1-{codex,grok}-d8a768a. Full88823char originalbrief /tmp/chromeria-383-core-r1-review-brief.txt includes WHOLE383body/frozen379contracts/originalcompletehandoff6249438919/ALLnativefailed-before+responses/parentalignment/currentbasependingprooflimits. No prior383CODEreview, historicaldesignapprovalnotcodeproof. No scope splitting/fallback/nesteddelegates. Parentaggregate exactd8areviewstatusPENDING.421linked/nativewatchactive. Nativeappworktrees againlackedvp; parentONLYexactreviewworktree cachedfrozenofflineignorescriptscopydeps processes35653/11497running; reviewersmayreadsourcebutnotexecuteuntilparentexit0confirmation. This manual recovery is NOTnativeautopreparationproof; existing386gapretained.

Whole383sourceviewer/resource-boundtickets/allowlistedhub+browserrelays/publicqualifiedacquisition+sourceauthfetch/allclients remain REQUIREDmap6248805292, outsideCOREacceptance. #384 remains paused pending sole-shared-owner sequencing; #385secrets and final386physical/client/migration/automation acceptance remain required. Physical386map6248996778 is recipe/prerequisites, no newfixturegrant authority. No newaccess/capability grants authorized. Current installed delivery targets unchanged; no finalapprovalPR/mainmerge/immutable-releaseartifact/ship/activation/liveverification. Retain ALL taskresources/rollback/evidence until final379acceptance.

Observer supportedpublish379->PR4206249436674: snapshot2f21b0fa... cutoff2026-10-18 11:03UTC,9sessions/4unpricedGrokresponses/costUNKNOWN;318excludedCodexresponses/$10.25partialexcludedprice,sharedwith2othertasks. Not wholecurrentoutcomecost or postreviewcoverage. Earlierpopulationchanges and native-worktree coverage remain Observer58unknown; spec$0 nevertotal. No manualrates/attribution.

Requirements and who asked: User379 requires native alltool/client delegated lifecycle, both independent exactMEDIUMreviews/currentCI/actualproof and eventual finalmerge+canonicalshipment.
Deleted: Packageversion bumps, approvaltransfer, fixturegrantassumptions, physicaltwo-localclaims, sourcewriter overlap and componentmerge-as-shipment.
Bottleneck: Current383CORE reviews/revalidation/primaryactualproof, then shared383viewer/384ownership and385/386combinedacceptance.
Checked myself: Actual420merge/time/tree/sourcebase/CI/reviewissuer, realweb/native/provider/oneansweroracles and uploadedPNGdigests, cleanexactworkspaces/currentcorealignment/TSbyteequality/rollback/exactlease, actualreviewerselections and prep gap. Finalstates remain separate.

@lukemaj

lukemaj commented Oct 18, 2026

Copy link
Copy Markdown
Contributor Author

What: PR421 current candidate d8a768a fails CI Typecheck with two concrete Effect-policy errors; the existing author owns both repairs.
Why: The author’s custom scoped TypeScript check passed without detecting the actual server-workspace Effect diagnostics.
So what: Same author repairs the existing Schema/Crypto owners and runs the real server-workspace check; both independent reviews continue on immutable d8a, with fresh rounds required after any source change.

Exact head d8a768a, baseecd06ef5e620191626d15b559dc663644ad59649. Actual failed Typecheck job. Parent retrieved completed job logs directly through supported gh after gh run view --log correctly reported the overall run still in progress. Retained /tmp/chromeria-383-core-ci-typecheck-d8a768a.log.

  • DeviceService.ts(1563,38) error TS377026 effect(preferSchemaOverJson): JSON.parse/stringify requires the existing Effect Schema JSON owner.
  • PeerAuthority.workflow.test.ts(4,29) error TS377057 effect(nodeBuiltinImport): Node crypto import requires the corresponding Effect Crypto owner.

These two are known source-policy failures. Other warnings/suggestions are not relabelled fatal; the later checkout submodule cleanup warning is not the typecheck cause. Existing author110/47/57 runtime proof stays bound to its exact source and configured coverage, not relabelled full server type acceptance. No timeout, diagnostic suppression, project config, gate weakening or blanket cast is authorized.

Sole author is authorized to fix these two existing owned files, preserve active check/source identities, then run ../../node_modules/.bin/tsc-rs --noEmit from apps/server plus meaningful affected native/domain and full fork proof. Both R1 reviewers received the COMPLETE actual errors and this parent response; they retain exact immutable d8a worktrees and whole-component scope, report independently, and do not follow a moving author branch. New candidate receives BOTH NEW delegate_task rounds including original brief, WHOLE reports, responses and unresolved limits. No older approval transfers, no merge.

Requirements and who asked: #379 requires current required CI and both independent exact-candidate reviews before integration.
Deleted: Treating custom type coverage as CI equivalence, blaming cleanup warnings, weakening Effect policy or transferring a review onto changed source.
Bottleneck: Real server-workspace diagnostics and their two existing owners, alongside independent whole-core assessment.
Checked myself: Actual completed job log and exact two errors; source identity, original scoped proof limitation and sole writer/reviewer boundaries. No new cause guessed or acceptance claimed.

@github-actions

github-actions Bot commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ℹ️ No successful main baseline artifact is available yet. This run establishes the initial measurement.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire — 5.0 KiB — 6.8 KiB ✅
Codex Thread snapshot wire — 3.8 KiB — 4.9 KiB ✅
Codex Live turn WebSocket wire — 1.2 KiB — 2.0 KiB ✅
Codex Live turn WebSocket decoded — 20.9 KiB — 29.3 KiB ✅
Codex Live turn messages — 2 — 8 ✅
Claude Total thread wire — 5.0 KiB — 6.8 KiB ✅
Claude Thread snapshot wire — 3.8 KiB — 4.9 KiB ✅
Claude Live turn WebSocket wire — 1.2 KiB — 2.0 KiB ✅
Claude Live turn WebSocket decoded — 21.2 KiB — 29.3 KiB ✅
Claude Live turn messages — 2 — 8 ✅

Baseline: unavailable · PR result: b809668 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 108.5 KiB
  • Claude decoded thread snapshot: 108.8 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

@lukemaj

lukemaj commented Oct 18, 2026

Copy link
Copy Markdown
Contributor Author

What: PR421 Server shard6 fails because the new published device_commands tool lacks its shared presentation definition.
Why: Native tool registration and the existing shared lifecycle/summary catalog are separate consumers; the core implementation added the tool without completing that catalog owner.
So what: Same #383 author owns the bounded catalog repair alongside the two accepted Effect-policy fixes; current d8a reviews remain immutable and a repaired candidate needs both new reviews/current CI.

Exact failed head d8a768a. Actual Server6 job, log /tmp/chromeria-383-core-ci-server6-d8a768a.log. src/mcp/toolkits/core.test.ts:127, publishes unique tool names with reference-free object-root inputs: AssertionError: device_commands: expected null not to be null from resolveT3McpToolDefinition(tool.name). One failed/1382passed/2skipped,112files(109passed/1failed/2skipped),301.40s. The aggregate Check reflects Typecheck and Server6, not another independently diagnosed defect. Cleanup submodule128 remains a later warning, not either cause.

Parent source inspection confirms existing shared device_list/open/screenshot/close entries but absent device_commands and device_execute entries. Explicit same-author finite write extension: packages/shared/src/t3McpToolPresentation.ts and its existing t3McpToolPresentation.test.ts for real lifecycle labels/category/branch/summary definitions and meaningful regression. Preserve the actual unchanged core registration assertion; do not accept null or weaken the catalog requirement. If a concrete client-runtime summary union/consumer also needs modification, report its exact path/hunk first. No other client or shared authority/file ownership transfers.

Author must retain a failing-before actual core/catalog observation, fix both actually published new device tools at their owner, validate their truthful read/write presentation, run the actual unchanged core test plus catalog/registration checks, and combine with already accepted Schema/Crypto repairs and real server-workspace typecheck. Both immutable d8a independent reviewers received the full failure/parent response and continue whole-component scope. No moving-source inspection or approval transfer; next review uses new delegate_task for BOTH required MEDIUM models with whole reports/responses.

Requirements and who asked: #379/#383 requires every permitted app-owned tool to behave natively, including its registered lifecycle/presentation consumers and current CI.
Deleted: Weakening the registration assertion, CI rerun without a source cause repair, inferred flakiness, broad consumer edits and hiding unknown tools.
Bottleneck: The existing shared tool catalog owner missed two new registrations; one same author now owns the finite repair.
Checked myself: Actual completed job log and assertion, existing shared device entries, exact current head, and disjoint grant/immutable review boundaries. No merge or whole383 acceptance.

@lukemaj

lukemaj commented Oct 18, 2026

Copy link
Copy Markdown
Contributor Author

What: Request changes on the #383 core candidate. The two new device tools are registered but missing from the shared presentation catalog, and the server typecheck fails on this exact head.

Why: device_commands and device_execute have no lifecycle definition, so the published-tool gate returns null, and two new Effect-policy violations fail Typecheck.

So what: The same #383 owner repairs these three defects on a new candidate. Both independent reviews start new rounds on that head. This verdict does not transfer. Parent owns aggregate status. No merge, push, or Issue change from this review.

Verdict

REQUEST_CHANGES for #421 at d8a768ad052564548fa00bb80ca7d668d6d674b8.

This is a whole-component review of the partial #383 core, not a lint-only pass and not whole-#383 acceptance. Viewer sessions, resource tickets, hub and preview relays, public artifact acquisition, browser control, and client lifecycle stay required and outside this candidate.

Elon record

Requirements and who asked: The user, through #379, required an independent Grok 4.7 medium review of the whole #383 core at this exact head. The parent required the live CI defects to be included.
Deleted: Split review lenses, following the author branch, tracked fixes, status or merge changes, weakened catalog assertions, and a whole-#383 acceptance claim.
Bottleneck: The published tool catalog and the real server typecheck fail closed on this head. Native workflow evidence from the older base does not replace that.
Checked myself: Read the 17-path diff and the command, authority, forwarding, session, artifact, and presentation owners. Read both CI logs. Confirmed this worktree's HEAD, tree, and merge-base, and the persisted Grok selection.

Identity

  • Reviewer: Grok CLI harness, persisted selection grok / grok-4.7 / reasoningEffort=medium. Live catalog includes that model. No model, effort, or harness fallback, and no delegated child.
  • Worktree: /Users/rocky/.t3/worktrees/chromeria/review-379-383-core-r1-grok-d8a768a, branch review/379-383-core-r1-grok-d8a768a.
  • HEAD: d8a768ad052564548fa00bb80ca7d668d6d674b8
  • Tree: 09135416e20fdacb0bdfa5b7e39f53baf6381840
  • Merge-base / PR base: ecd06ef5e620191626d15b559dc663644ad59649
  • Range: 17 paths, 5863 insertions, 307 deletions. Worktree clean. This review wrote no tracked files.
  • Local copy of this report: /tmp/chromeria-383-core-r1-grok-review-d8a768a.md

Findings

1. Blocking. Published catalog omits both new device tools

  • Location: packages/shared/src/t3McpToolPresentation.ts lines 258-269. Registered at apps/server/src/mcp/toolkits/device/tools.ts DeviceCommandsTool and DeviceExecuteTool. Gate: apps/server/src/mcp/toolkits/core.test.ts lines 125-127.
  • Trigger: Any walk of DeviceToolkit that resolves a presentation, including CI Server. device_commands is reached first.
  • Actual: T3_MCP_TOOLS defines device_list, device_open, device_screenshot, and device_close only. resolveT3McpToolDefinition("device_commands") and resolveT3McpToolDefinition("device_execute") are null. The same is true for the mcp__t3-code__ and T3-code. spellings, and resolveT3McpToolPresentation / resolveT3McpToolSummaryAction stay null. Cards, activity rows, summaries, and provider identity recovery share this inventory, so those surfaces have no lifecycle labels, device icon, or device summary action for either tool.
  • Wanted: Add both names beside the existing device entries. Use icon device and summary action device. Give each four non-empty lifecycle labels. device_commands is the read discovery tool (Readonly, not open-world), in the same family as device_list. device_execute is the write tool (Readonly false, open-world), in the same family as device_open. Do not weaken core.test.ts.
  • Proof: Run 39124230959, job 117665956750, log /tmp/chromeria-383-core-ci-server6-d8a768a.log. FAIL src/mcp/toolkits/core.test.ts > publishes unique tool names with reference-free object-root inputs. AssertionError: device_commands: expected null not to be null at core.test.ts:127:41. 1 failed, 1382 passed, 2 skipped. 112 files (109 passed, 1 failed, 2 skipped). 301.40s. Source confirms device_execute is omitted as well. The test stops on the first missing name.

2. Blocking. Server typecheck rejects JSON.parse on capture JSON

  • Location: apps/server/src/device/DeviceService.ts lines 1561-1565, inside record/trace stop publication when the producer file extension is json.
  • Trigger: A typed record or trace stop whose bounded producer file is JSON. The real server workspace typecheck.
  • Actual: JSON.parse(text) is an error under preferSchemaOverJson (TS377026). The author's narrower tsconfig did not apply this server Effect rule.
  • Wanted: Decode with the existing Effect Schema JSON codec (Schema.fromJsonString(Schema.Unknown) or the codec already used for command envelopes) and keep the current refusal on invalid JSON. Do not suppress the rule.
  • Proof: Typecheck job 117665956662, run 39124230959, log /tmp/chromeria-383-core-ci-typecheck-d8a768a.log: src/device/DeviceService.ts(1563,38): error TS377026: This code uses JSON.parse or JSON.stringify... effect(preferSchemaOverJson).

3. Blocking. Workflow proof imports node:crypto

  • Location: apps/server/src/peer/PeerAuthority.workflow.test.ts line 4, used at the PNG, package, and recording digest sites (lines 2112, 2558, 2596, and 2702).
  • Trigger: The real server workspace typecheck of this test.
  • Actual: import * as NodeCrypto from "node:crypto" is TS377057 nodeBuiltinImport. This is test code. It does not change the production digest owner, and it still fails the candidate gate.
  • Wanted: Hash those fixtures with Effect Crypto. Do not suppress the rule or drop the digest checks.
  • Proof: Same Typecheck log: src/peer/PeerAuthority.workflow.test.ts(4,29): error TS377057: This module reference uses the crypto module, the corresponding Effect API is Crypto from effect. effect(nodeBuiltinImport). These are the only two error TS lines in that log.

Inspected and not filed

The command compiler builds one argv vector, appends -- before positionals, passes fill text on stdin, and scrubs the environment to a private cwd. Closed command schemas reject unknown keys. A durable device_open refuses a physical device. Capability decoding requires target: mobile and kind simulator or emulator, then the service matches device id and platform to the opening. Modern quickstart text is routed device_commands / device_execute JSON with environmentId and contextThreadId. The local executable quickstart remains only when there is no durable request and the caller is not a linked peer. PeerForwarding prepares a separate read-only device_commands call on the original grant generation and decodes DeviceCommandCatalog before a forwarded open. recheckInvocation reloads the original authority record, and validate narrows that record through current project settings before intersection. Execute replaces its scope with the returned ceiling. The opening stores the original request namespace and generation, and execute requires both. Capture publication checks a realpath inside the producer directory, writes with wx, and claims through the existing recording owner. The fork-feature sentence describes this typed core. It does not claim the remaining viewer, relay, or fetch work. No additional supported behavioral blocker met the evidence bar in those paths.

Limits

  • This review did not run vp or tsc. Parent prepared this worktree's node_modules from cache (vp is present now). The existing feat(peer): complete all-tool cross-machine workflows across web desktop and mobile #386 automatic setup gap is unchanged, and this review infers no cause. Deps log: /tmp/chromeria-383-core-r1-grok-deps.log.
  • The historical 0f0f277 native proof is a different base. It is not current-head proof. The author's current-base test revalidation was still in progress and is not evidence here.
  • The pinned agent-device parser was not executed here. End-of-options and stdin newline behavior are what the compiler emits, not a run of package 0.21.25.
  • No product server, browser, device, provider prompt, install, grant, or live user data was used.
  • A new push needs two new review rounds. This comment is not a status, merge, or blocker change.

@lukemaj

lukemaj commented Oct 18, 2026

Copy link
Copy Markdown
Contributor Author

What: REQUEST_CHANGES for the whole partial #383 device core at d8a768ad052564548fa00bb80ca7d668d6d674b8.
Why: A real native read capture survives observed grant retirement, typed input loses supported behavior, ordinary local mode policy changes, and the candidate fails published-tool and Effect type gates.
So what: The existing owner should repair the findings, retain the native protections, and submit the new exact candidate for both fresh MEDIUM reviews; #379 retains integration and acceptance ownership.

Requirements and who asked: The user's whole-component R1 brief, frozen #379 v5, and #383 require usable typed device commands with current original authority, native resource/receipt ownership, faithful supported runtime semantics and local compatibility.
Deleted: No new shell executor, proxy, policy model, acceptance claim, implementation rewrite, or demand to implement deferred viewer work. No source fixes, delegation, status changes, merges, pushes, installs or product resources were used by this reviewer.
Bottleneck: Close the actual capture authorization and command-semantic gaps, then pass the real catalog/type consumers and exact-candidate review.
Checked myself: Inspected all 17 changed paths and their relevant callers/consumers; ran 47 domain, 16 native typed workflow and 57 preservation cases; reproduced the catalog failure and added disposable native counterexamples using the existing registered fixture and real policy owners. Original tracked bytes were restored and verified clean.

Candidate and reviewer identity

  • HEAD d8a768ad052564548fa00bb80ca7d668d6d674b8; tree 09135416e20fdacb0bdfa5b7e39f53baf6381840.
  • Base and actual merge base ecd06ef5e620191626d15b559dc663644ad59649, intended PR base feat/379-cross-machine-parity. Live PR head still matched immediately before publication.
  • Separate app-bound branch review/379-383-core-r1-codex-d8a768a. I did not author the candidate. No other checkout or worktree was changed.
  • Actual selection: Codex harness, provider instance codex, model gpt-6.1-sol, reasoningEffort=medium. Live orchestrator_capabilities supports this exact selection. t3_thread_read returns this provider/model for this review run; a read-only query restricted to this review thread's persisted projection confirms modelSelection.options=[{"id":"reasoningEffort","value":"medium"}]. The catalog's low default was not substituted. No fallback or delegation occurred.
  • Node v24.18.0, /opt/homebrew/opt/node@24/bin; runner ./node_modules/.bin/vp. Dependencies were initially absent. I waited for the parent's explicit cached/offline/copy preparation exit0 before running checks. This does not establish that native automatic worktree preparation works; the existing feat(peer): complete all-tool cross-machine workflows across web desktop and mobile #386 gap remains.

Required findings

F1, P1: Read-only device capture skips the new current-authority check

Location: DeviceService.ts:238-242, reached from screenshot:1054-1058.

Trigger: An authorized A-only agent calls the existing registered device_screenshot for its B context. The real device grant is retired while B's external host readiness is completing, before capture. device_screenshot is classified read, so McpRouting.invoke does not create CurrentRequest. recheckAction therefore returns immediately, including at the capture boundary. Admission had authority, but no new current-authority check observes the actual retirement before the next private-media effect.

Observed native result: {"isError":false,"capturesBefore":1,"capturesAfter":2,"armed":false,"grantDevice":false}. A lawful preceding screenshot succeeded. The revocation used the real PeerAuthority.setGrant; the second capture still returned the registered PNG result. This is an effect after an observed policy change, not a claim of distributed atomic revocation.

Proof: /tmp/review383-codex/read-capture.log and read-capture.patch. The disposable test reuses the existing makeNode/registered source and destination HTTP/auth/control/SQLite fixture. Its only fixture adaptation invokes the existing external readiness hook before that leaf returns. A concurrent real keyed click is held with Deferred so the fixture's existing unconditional capture receipt assertion remains satisfied by a genuine started receipt; no assertion was removed or weakened. No authority, SQL result, resource service or permission result was substituted. The test fails on the required denial, with capture count increasing. All source/test bytes were restored afterwards.

Required correction: Separate availability of an authenticated invocation from availability of a mutation receipt. Reauthorize the original verified device invocation after readiness and immediately before read-only capture too; keep native UI/unkeyed local compatibility explicit. Add the lawful positive plus this native grant-retirement refusal to the existing fixture.

F2, P1: Both new published tools are absent from the shared tool-presentation inventory

Location: device/tools.ts:102-139, consumed by t3McpToolPresentation.ts:258-269.

Trigger: The complete registered catalog now publishes device_commands and device_execute. Neither has a shared definition. resolveT3McpToolDefinition returns null, so lifecycle labels, branding and summary-action lookup do not recognize them. This affects the common inventory used by activity/cards/summaries/provider identity recovery, including web/desktop and mobile consumers. This is required integration for the tools in this core, independent of deferred viewer work.

Proof: I independently ran the existing core.test.ts published-tool test. It fails at line127 with AssertionError: device_commands: expected null not to be null; source inspection confirms both new names are omitted. Log: /tmp/review383-codex/catalog.log.

Parent-supplied CI corroboration, inspected in full at the decisive failure: Server6 job, 1 failed / 1382 passed / 2 skipped across112 files,301.40s. Local retained CI log /tmp/chromeria-383-core-ci-server6-d8a768a.log. The parent accepted the omission and extended the same author's grant only to the existing shared presentation owner and its existing test. Add proper lifecycle labels/category/summary behavior for BOTH tools; retain the existing completeness assertion. This reviewer made no repair and has not reviewed the eventual fix.

F3, P1: The candidate fails the real server Effect type-policy gate

Locations: DeviceService.ts:1563 and PeerAuthority.workflow.test.ts:4.

The actual typecheck fails with TS377026 / effect(preferSchemaOverJson) for JSON.parse at DeviceService1563:38, and TS377057 / effect(nodeBuiltinImport) for the new node:crypto import at workflow4:29. The earlier scoped custom TypeScript proof omitted this real workspace Effect policy and is not a passing substitute.

Proof: Typecheck job, exit2; decisive errors inspected in /tmp/chromeria-383-core-ci-typecheck-d8a768a.log. The parent accepted both and authorized the same owner to use the actual Effect Schema/Crypto APIs and the real server workspace tsc-rs gate, without suppression. I did not rerun this known-failing gate or review the moving repair.

F4, P2: fill cannot clear a field and corrupts text ending in CR

Location: AgentDeviceCommand.ts:310-315.

Every fill is compiled to --text-stdin with command.text + "\n". The exact pinned0.21.25 stdin reader rejects an empty string after removing its line ending and strips a complete CRLF, not only LF. Consequently text:"" fails instead of clearing the field, while text:"abc\r" reaches the device boundary as "abc". This contradicts the literal-text public contract and the existing adapter test claiming empty input preservation. For the registered external-unknown owner, a parser rejection after dispatch also leaves an uncertain receipt instead of performing the intended clear.

Proof: /tmp/review383-codex/fill-parser.mjs, run-fill-probe.mjs, fill-parser.log. These import the exact extracted pinned cli-runner.js; the external interaction leaf only records the final parsed input and stops. No daemon/device is contacted. Empty input raises INVALID_ARGS: fill --text-stdin received no text.; normal abc and a literal newline are positive controls; abc\r becomes abc. The current unit test merely asserts stdin/argv against a fake process return and therefore passes despite this failure.

Required correction: Compile every allowed text value using a literal-preserving path supported by the pinned reader, including empty text and CR endings. Keep the private session/config binding and add parser-boundary regression coverage rather than only argv expectations.

F5, P2: The public typed contract omits supported deep-link opening

Location: device.ts:573-580, compiled at AgentDeviceCommand303-305.

The only open variant accepts an app identifier, with no URL/deep-link field, and its regex prohibits a scheme/colon/slash in app. An A-only agent cannot express the pinned native open <app> <deep-link-url> behavior at all. This behavior is explicitly in frozen #379's initial typed command variants and in the app-owned quickstart inspected for the core assignment. It is not an arbitrary URL fetch/proxy or deferred browser-viewer feature.

Proof: The exact candidate DeviceCommand decoder accepts {type:"open",app:"com.example.app"} and rejects both {type:"open",app:"com.example.app",url:"example://settings"} and {type:"open",app:"example://settings"}. The exact pinned command reader accepts the former app-plus-url intent and returns {"app":"com.example.app","url":"example://settings"}. Logs /tmp/review383-codex/open-schema.log and pinned-open-reader.log. No device action ran.

Required correction: Add the bounded typed deep-link intent and its explicit adapter mapping under the same target/session/capability policy. Do not route it through raw argv, generic URL retrieval or host shell instructions.

F6, P2: Keyed execution imposes a new full-access requirement on ordinary local device callers

Location: PeerAuthority.ts:1706-1713, reached by DeviceService recheckAction and executeCommand.

A normal local active thread with explicit device capability and current consent is now denied whenever its runtime is auto, even when its actual target is that same auto thread and there is no peer authority. The unconditional full-access/default test precedes the existing target-relative mode check. Existing local access uses the explicit capability plus live caller and target-relative policy; this is not an environment-wide mutation requiring an added full-access grant. It also makes eligibility depend on keyed versus legacy local entry.

Proof: A disposable case reuses the unchanged registered native makeNode fixture with no peer link or borrowed credential. A keyed local full-access open succeeds; the real thread service changes that same thread to auto; the next keyed local open returns Device host local is unavailable: The current device invocation is no longer authorized. The expected local-capability behavior fails. Logs /tmp/review383-codex/local-auto-keyed.log, exact appendix local-auto-keyed.patch. The auto source versus full-access remote target test already in the candidate is different: the existing target-relative comparison correctly denies that escalation without making every local caller full-access.

The earlier attempted legacy-positive branch of this probe hit the fixture's internal-error path and did not reach the discriminating keyed assertion. It is retained in local-auto.log as inconclusive, not advertised as a passing legacy runtime test. The local-policy comparison is supported by the unchanged requireThreadMcpCapability, McpToolAccess.actsAsCaller, threadAccess and prior DeviceService call path, plus the keyed native observation.

Required correction: Preserve ordinary local policy while intersecting current original and actual-target ceilings. Do not require a new runtime grant merely to retain a previously permitted local device capability. Add a real local positive at the permitted mode and keep the remote escalation refusals.

Whole-component coverage and preserved boundaries

Inspected all17 changed paths: public device.ts; adapter and adapter test; DeviceService and DeviceToolchain; registered device-domain test; both historical legacy fixture files; MCP device tools/handlers and toolkit test; PeerAuthority, PeerForwarding and the whole relevant native workflow changes; both fork/map docs and upstream-edit allowlist. Also traced the actual server layer composition, McpHttpServer registration/image handler, McpRouting, invocation/session registry, request identity/runtime/receipts, link/resource authorization and control transport, native attachment staging/upload/recording claim, local/SSH host bindings, shared presentation and client summary consumers.

The changed root-capability validation returns a narrowed ceiling. Existing checkThread, registry/current-scope and routing/accept consumers intersect that returned value; typed executeCommand consumes recheckInvocation's returned scope rather than replacing the incoming actor with the destination thread. The native source Settings test, grant retirement, lock wait, generation and contributor cases pass. F1 is the concrete read-family exception: a receipt-presence condition skips validation entirely before capture.

Authenticated discovery uses a distinct READ device_commands envelope tied to the original destination generation and decoded catalog. Actual requests-v1 old-domain refusal is tested, rather than relying only on requests-v0. Quickstart examples include destination environment/context and the exact snapshot example runs unchanged from A. I found no additional supported shell/config/session injection or cache fallback in these inspected paths.

The exact-opening target and original namespace/generation, started-before-external dispatch, unknown/no-reexecution receipts, bounded tree/media outputs, qualified artifact owner/manifest/digest checks, private producer path checks and native recording claims remain present. S7 keyed-discard retained bytes and S8 first-publication/claim guards remain at their existing owner; this candidate does not modify that owner. These observations do not prove OS process death, arbitrary host adversaries or every dependency behavior.

Web/desktop/mobile viewer sessions, source tickets, resource-bound hub/preview relays, public qualified-reference acquisition and source-authenticated fetch, browser controls and all-client lifecycle remain required downstream #383 work, as recorded in the accepted partial-core boundary. Their absence is not a finding against this internal component. The new tools' shared presentation omission is in scope because this core already publishes them. Provider consumers use the common registered toolkit; no provider adapter or new provider feature is claimed. No whole #383/#379 acceptance is claimed.

Executed proof and limits

All runner commands below used PATH=/opt/homebrew/opt/node@24/bin:$PATH and the reviewer's exclusive worktree:

./node_modules/.bin/vp test run apps/server/src/device/AgentDeviceCommand.test.ts apps/server/src/device/DeviceCommands.registered.test.ts apps/server/src/device/DeviceService.test.ts apps/server/src/mcp/McpDeviceToolkit.test.ts
  exit0,47 passed/4files,8.20s; /tmp/review383-domain.log
./node_modules/.bin/vp test run apps/server/src/peer/PeerAuthority.workflow.test.ts -t typed383
  exit0,16 passed/94 skipped,21.47s; /tmp/review383-native.log
./node_modules/.bin/vp test run apps/server/src/peer/PeerAuthority.test.ts apps/server/src/peer/PeerForwarding.test.ts apps/server/src/mcp/McpToolAccess.test.ts
  exit0,57 passed/3files,25.67s; /tmp/review383-preservation.log
./node_modules/.bin/vp test run apps/server/src/mcp/toolkits/core.test.ts -t 'publishes unique tool names'
  exit1,1 failed/16 skipped,6.82s; catalog.log; genuine catalog omission
./node_modules/.bin/vp test run apps/server/src/peer/PeerAuthority.workflow.test.ts -t review383-local-auto
  disposable appendix,exit1 at required keyed local positive,11.01s; local-auto-keyed.log
./node_modules/.bin/vp test run apps/server/src/peer/PeerAuthority.workflow.test.ts -t review383-read-capture
  disposable appendix plus external readiness hook,exit1 at required revoked capture refusal,12.78s; read-capture.log
/opt/homebrew/opt/node@24/bin/node /tmp/review383-codex/run-fill-probe.mjs
  exit0 as observation driver; records parser rejection/text mutation,not a passing product test
Candidate DeviceCommand decoder and pinned open reader,Node24 pure scripts
  lawful app positive,deep-link rejection versus supported pinned reader; open-schema.log,pinned-open-reader.log
git diff --check; git status --porcelain
  exit0; clean after exact restoration

The disposable appended cases are separate reviewer probes, not additions to the committed110 suite. They never changed production code and were removed by restoring the captured exact original test bytes. Final workflow SHA256 is e7ffc2bd6f34cc758dd58f9a37c57978c2677794c25a0952de5566237ace2483, matching the candidate. Scratch patches, logs, parser probes and digests are under /tmp/review383-codex; full local report /tmp/review383-codex/report.md.

I also inspected the author's current-base log tails reporting110 native cases/337.62s and41 ProjectionStore cases/3.95s under the d8a revalidation manifest. These are owner-run results, not my independently executed full-suite proof, and they do not override the actual CI failures. Historical0f0/652 logs and design approvals remain historical. No repo-wide checks, product servers, browser/device sessions, provider prompts, live-userdata writes, runtime installs, consent/grant expansion, source acceptance homes or other worktrees were used. Deterministic24-byte MP4 proof remains bounded-reference proof, not playable recording/live device proof. The direct pinned-parser probe is not installed-runtime acceptance.

Verdict applies only to the exact head/base/tree above. No aggregate status was changed. A source change requires both new delegated review rounds under the parent's workflow; this report does not transfer to the repair.

@lukemaj

lukemaj commented Oct 18, 2026

Copy link
Copy Markdown
Contributor Author

What: #383 core R1 aggregate is REQUEST_CHANGES on exactd8a768a; both whole independent MEDIUM reports require repairs.
Why: Sol reproduced private capture after grant retirement, literal fill loss, missing deep-link intent and keyed-local mode regression, while both reviewers confirmed catalog and Effect-policy gate failures.
So what: The same author repairs all six accepted finding mechanisms at existing owners, then submits one stable candidate for current CI and BOTH NEW independent whole-core MEDIUM rounds.

Exact head d8a768a/tree09135416e20fdacb0bdfa5b7e39f53baf6381840/baseecd06ef5e620191626d15b559dc663644ad59649. Sol #421 (comment); installedGrok #421 (comment). BOTH native tasks completed/no pendingchildren, actual selections previously and independently verified codex/gpt-6.1-sol/MEDIUM and grok/grok-4.7/MEDIUM. Both WHOLE unchanged reports follow below. Parent read both, immutable source owners, frozen379contract and decisive reviewer raw probes. This is adjudication against proof, not voting.

F1/P1 ACCEPTED. DeviceService recheckAction gates on CurrentRequest, but read-only registered device_screenshot has a verified incoming invocation without a mutation receipt. Real host readiness callback retires B device grant; capture still increments1->2 and returns PNG success. Recheck original current invocation after readiness and immediately before private capture regardless of receipt presence. Preserve native UI/unkeyed local owner compatibility, no new receipt/grant requirement or fake policy. Frozen379 specifically keeps private device media capability-protected even when read-only.

F2/P1 ACCEPTED, duplicates Grok1. Both published device_commands/device_execute need actual shared lifecycle/presentation definitions and truthful read/write summaries. Existing unchanged core registration assertion must pass; no null acceptance. Two shared owner files explicitly transferred under3836249580887.

F3/P1 ACCEPTED, duplicates Grok2/3. DeviceService JSON.parse and workflow Node crypto import violate actual server Effect policy. Schema/Crypto owner repairs required, no suppressions/config changes. Parent retains original custom-tsconfig proof as narrower coverage. Author subsequently established actual compiler0.7.0 warning-exit default and repaired12owned test-layer composition warnings, not the compiler/gate. Reported actual server tscrs0errors/0warnings/261suggestions EXIT0 and75domain/core/catalog pass remain current evolving-source claims until stablehandoff; no old review transfer.

F4/P2 ACCEPTED. Exact pinned0.21.25 reader rejects empty fill and strips CRLF, turning abc+CR intent into abc. Original adapter test only verifies emitted stdin/argv against fake success and misses this. Use a supported literal-preserving path, with exact parser-boundary controls for empty/CR/LF/CRLF/multiline/flag-like/unicode/quotes, private flags/session/end-of-options and byte bounds preserved. No unsupported flags, package change or generic shell.

F5/P2 ACCEPTED. Frozen379 initial typed command contract explicitly includes open-app/deep-link (currentbodyline150), and actual app-owned quickstart uses app+URL. Candidate decoder rejects both attempted URL shapes while pinned reader accepts app+url. Add bounded typed deep-link intent and literal adapter mapping under the same existing target/session/capability policy. This is an omitted settled CORE requirement, not a new generic URL fetch/proxy or expanded install/device permission.

F6/P2 ACCEPTED. recheckInvocation adds unconditional full-access/default before actual-target relative checks, denying an explicit-capability localauto caller acting on that sameauto context. Preserve existing local policy/current explicit capabilities and actual-target ceiling. Retain remoteauto->full escalation refusal and existing plan restrictions; no blanket mode ban or new blanket plan permission. Reviewer earlier legacy-positive setup branch was inconclusive and remains so; its real keyed-auto native denial and existing owners establish this case.

Preservation and proof: Sol120focused passing cases do not refute its additional actual failing counterexamples; Grok whole source/CI review did not execute tests and filed no extra behavior counterexample. No overlapping totals summed. Originald8a110/41/47/57 revalidation is retained under its own exactsource; passing tests are not absence-of-defects proof. All raworiginal probe files/digests/old failures remain. Later repairs require meaningful native/parser/domain tests, realservertypes, actual currentCI and both new exact-candidate reviews with this ENTIRE report/authorresponse record. No finalcandidate/whole383acceptance/internalmerge/ship claim. Both reviewers explicitly excluded deferred broader source viewer/media/fetch/client work from this CORE, which remains REQUIRED under map6248805292 and final379.

Requirements and who asked: User379/frozenv5/383 requires every permitted app-owned typed command to preserve current authority, actual supported semantics and existing local policy; both independent exactMEDIUM reviews are mandatory.
Deleted: Receipt-presence as read authority, parser-only argv expectations, missing settleddeep-link behavior, unsupported blanketmode elevation, missing catalog consumers, gate suppression and approval transfer.
Bottleneck: Same owner repairs native effect and pinned command semantics, then stable exactcandidate/currentCI/newwholecore reviews.
Checked myself: Both complete reports, original source/read and keyedlocal failing native outputs, pinned-parser clear/CR/deeplink observations, frozencontract102/150 and actual CI diagnostics. Known causes kept separate from older UNKNOWN404/discovery/timing/cost.

FULL unchanged Sol R1 report

What: REQUEST_CHANGES for the whole partial #383 device core at d8a768ad052564548fa00bb80ca7d668d6d674b8.
Why: A real native read capture survives observed grant retirement, typed input loses supported behavior, ordinary local mode policy changes, and the candidate fails published-tool and Effect type gates.
So what: The existing owner should repair the findings, retain the native protections, and submit the new exact candidate for both fresh MEDIUM reviews; #379 retains integration and acceptance ownership.

Requirements and who asked: The user's whole-component R1 brief, frozen #379 v5, and #383 require usable typed device commands with current original authority, native resource/receipt ownership, faithful supported runtime semantics and local compatibility.
Deleted: No new shell executor, proxy, policy model, acceptance claim, implementation rewrite, or demand to implement deferred viewer work. No source fixes, delegation, status changes, merges, pushes, installs or product resources were used by this reviewer.
Bottleneck: Close the actual capture authorization and command-semantic gaps, then pass the real catalog/type consumers and exact-candidate review.
Checked myself: Inspected all 17 changed paths and their relevant callers/consumers; ran 47 domain, 16 native typed workflow and 57 preservation cases; reproduced the catalog failure and added disposable native counterexamples using the existing registered fixture and real policy owners. Original tracked bytes were restored and verified clean.

Candidate and reviewer identity

  • HEAD d8a768ad052564548fa00bb80ca7d668d6d674b8; tree 09135416e20fdacb0bdfa5b7e39f53baf6381840.
  • Base and actual merge base ecd06ef5e620191626d15b559dc663644ad59649, intended PR base feat/379-cross-machine-parity. Live PR head still matched immediately before publication.
  • Separate app-bound branch review/379-383-core-r1-codex-d8a768a. I did not author the candidate. No other checkout or worktree was changed.
  • Actual selection: Codex harness, provider instance codex, model gpt-6.1-sol, reasoningEffort=medium. Live orchestrator_capabilities supports this exact selection. t3_thread_read returns this provider/model for this review run; a read-only query restricted to this review thread's persisted projection confirms modelSelection.options=[{"id":"reasoningEffort","value":"medium"}]. The catalog's low default was not substituted. No fallback or delegation occurred.
  • Node v24.18.0, /opt/homebrew/opt/node@24/bin; runner ./node_modules/.bin/vp. Dependencies were initially absent. I waited for the parent's explicit cached/offline/copy preparation exit0 before running checks. This does not establish that native automatic worktree preparation works; the existing feat(peer): complete all-tool cross-machine workflows across web desktop and mobile #386 gap remains.

Required findings

F1, P1: Read-only device capture skips the new current-authority check

Location: DeviceService.ts:238-242, reached from screenshot:1054-1058.

Trigger: An authorized A-only agent calls the existing registered device_screenshot for its B context. The real device grant is retired while B's external host readiness is completing, before capture. device_screenshot is classified read, so McpRouting.invoke does not create CurrentRequest. recheckAction therefore returns immediately, including at the capture boundary. Admission had authority, but no new current-authority check observes the actual retirement before the next private-media effect.

Observed native result: {"isError":false,"capturesBefore":1,"capturesAfter":2,"armed":false,"grantDevice":false}. A lawful preceding screenshot succeeded. The revocation used the real PeerAuthority.setGrant; the second capture still returned the registered PNG result. This is an effect after an observed policy change, not a claim of distributed atomic revocation.

Proof: /tmp/review383-codex/read-capture.log and read-capture.patch. The disposable test reuses the existing makeNode/registered source and destination HTTP/auth/control/SQLite fixture. Its only fixture adaptation invokes the existing external readiness hook before that leaf returns. A concurrent real keyed click is held with Deferred so the fixture's existing unconditional capture receipt assertion remains satisfied by a genuine started receipt; no assertion was removed or weakened. No authority, SQL result, resource service or permission result was substituted. The test fails on the required denial, with capture count increasing. All source/test bytes were restored afterwards.

Required correction: Separate availability of an authenticated invocation from availability of a mutation receipt. Reauthorize the original verified device invocation after readiness and immediately before read-only capture too; keep native UI/unkeyed local compatibility explicit. Add the lawful positive plus this native grant-retirement refusal to the existing fixture.

F2, P1: Both new published tools are absent from the shared tool-presentation inventory

Location: device/tools.ts:102-139, consumed by t3McpToolPresentation.ts:258-269.

Trigger: The complete registered catalog now publishes device_commands and device_execute. Neither has a shared definition. resolveT3McpToolDefinition returns null, so lifecycle labels, branding and summary-action lookup do not recognize them. This affects the common inventory used by activity/cards/summaries/provider identity recovery, including web/desktop and mobile consumers. This is required integration for the tools in this core, independent of deferred viewer work.

Proof: I independently ran the existing core.test.ts published-tool test. It fails at line127 with AssertionError: device_commands: expected null not to be null; source inspection confirms both new names are omitted. Log: /tmp/review383-codex/catalog.log.

Parent-supplied CI corroboration, inspected in full at the decisive failure: Server6 job, 1 failed / 1382 passed / 2 skipped across112 files,301.40s. Local retained CI log /tmp/chromeria-383-core-ci-server6-d8a768a.log. The parent accepted the omission and extended the same author's grant only to the existing shared presentation owner and its existing test. Add proper lifecycle labels/category/summary behavior for BOTH tools; retain the existing completeness assertion. This reviewer made no repair and has not reviewed the eventual fix.

F3, P1: The candidate fails the real server Effect type-policy gate

Locations: DeviceService.ts:1563 and PeerAuthority.workflow.test.ts:4.

The actual typecheck fails with TS377026 / effect(preferSchemaOverJson) for JSON.parse at DeviceService1563:38, and TS377057 / effect(nodeBuiltinImport) for the new node:crypto import at workflow4:29. The earlier scoped custom TypeScript proof omitted this real workspace Effect policy and is not a passing substitute.

Proof: Typecheck job, exit2; decisive errors inspected in /tmp/chromeria-383-core-ci-typecheck-d8a768a.log. The parent accepted both and authorized the same owner to use the actual Effect Schema/Crypto APIs and the real server workspace tsc-rs gate, without suppression. I did not rerun this known-failing gate or review the moving repair.

F4, P2: fill cannot clear a field and corrupts text ending in CR

Location: AgentDeviceCommand.ts:310-315.

Every fill is compiled to --text-stdin with command.text + "\n". The exact pinned0.21.25 stdin reader rejects an empty string after removing its line ending and strips a complete CRLF, not only LF. Consequently text:"" fails instead of clearing the field, while text:"abc\r" reaches the device boundary as "abc". This contradicts the literal-text public contract and the existing adapter test claiming empty input preservation. For the registered external-unknown owner, a parser rejection after dispatch also leaves an uncertain receipt instead of performing the intended clear.

Proof: /tmp/review383-codex/fill-parser.mjs, run-fill-probe.mjs, fill-parser.log. These import the exact extracted pinned cli-runner.js; the external interaction leaf only records the final parsed input and stops. No daemon/device is contacted. Empty input raises INVALID_ARGS: fill --text-stdin received no text.; normal abc and a literal newline are positive controls; abc\r becomes abc. The current unit test merely asserts stdin/argv against a fake process return and therefore passes despite this failure.

Required correction: Compile every allowed text value using a literal-preserving path supported by the pinned reader, including empty text and CR endings. Keep the private session/config binding and add parser-boundary regression coverage rather than only argv expectations.

F5, P2: The public typed contract omits supported deep-link opening

Location: device.ts:573-580, compiled at AgentDeviceCommand303-305.

The only open variant accepts an app identifier, with no URL/deep-link field, and its regex prohibits a scheme/colon/slash in app. An A-only agent cannot express the pinned native open <app> <deep-link-url> behavior at all. This behavior is explicitly in frozen #379's initial typed command variants and in the app-owned quickstart inspected for the core assignment. It is not an arbitrary URL fetch/proxy or deferred browser-viewer feature.

Proof: The exact candidate DeviceCommand decoder accepts {type:"open",app:"com.example.app"} and rejects both {type:"open",app:"com.example.app",url:"example://settings"} and {type:"open",app:"example://settings"}. The exact pinned command reader accepts the former app-plus-url intent and returns {"app":"com.example.app","url":"example://settings"}. Logs /tmp/review383-codex/open-schema.log and pinned-open-reader.log. No device action ran.

Required correction: Add the bounded typed deep-link intent and its explicit adapter mapping under the same target/session/capability policy. Do not route it through raw argv, generic URL retrieval or host shell instructions.

F6, P2: Keyed execution imposes a new full-access requirement on ordinary local device callers

Location: PeerAuthority.ts:1706-1713, reached by DeviceService recheckAction and executeCommand.

A normal local active thread with explicit device capability and current consent is now denied whenever its runtime is auto, even when its actual target is that same auto thread and there is no peer authority. The unconditional full-access/default test precedes the existing target-relative mode check. Existing local access uses the explicit capability plus live caller and target-relative policy; this is not an environment-wide mutation requiring an added full-access grant. It also makes eligibility depend on keyed versus legacy local entry.

Proof: A disposable case reuses the unchanged registered native makeNode fixture with no peer link or borrowed credential. A keyed local full-access open succeeds; the real thread service changes that same thread to auto; the next keyed local open returns Device host local is unavailable: The current device invocation is no longer authorized. The expected local-capability behavior fails. Logs /tmp/review383-codex/local-auto-keyed.log, exact appendix local-auto-keyed.patch. The auto source versus full-access remote target test already in the candidate is different: the existing target-relative comparison correctly denies that escalation without making every local caller full-access.

The earlier attempted legacy-positive branch of this probe hit the fixture's internal-error path and did not reach the discriminating keyed assertion. It is retained in local-auto.log as inconclusive, not advertised as a passing legacy runtime test. The local-policy comparison is supported by the unchanged requireThreadMcpCapability, McpToolAccess.actsAsCaller, threadAccess and prior DeviceService call path, plus the keyed native observation.

Required correction: Preserve ordinary local policy while intersecting current original and actual-target ceilings. Do not require a new runtime grant merely to retain a previously permitted local device capability. Add a real local positive at the permitted mode and keep the remote escalation refusals.

Whole-component coverage and preserved boundaries

Inspected all17 changed paths: public device.ts; adapter and adapter test; DeviceService and DeviceToolchain; registered device-domain test; both historical legacy fixture files; MCP device tools/handlers and toolkit test; PeerAuthority, PeerForwarding and the whole relevant native workflow changes; both fork/map docs and upstream-edit allowlist. Also traced the actual server layer composition, McpHttpServer registration/image handler, McpRouting, invocation/session registry, request identity/runtime/receipts, link/resource authorization and control transport, native attachment staging/upload/recording claim, local/SSH host bindings, shared presentation and client summary consumers.

The changed root-capability validation returns a narrowed ceiling. Existing checkThread, registry/current-scope and routing/accept consumers intersect that returned value; typed executeCommand consumes recheckInvocation's returned scope rather than replacing the incoming actor with the destination thread. The native source Settings test, grant retirement, lock wait, generation and contributor cases pass. F1 is the concrete read-family exception: a receipt-presence condition skips validation entirely before capture.

Authenticated discovery uses a distinct READ device_commands envelope tied to the original destination generation and decoded catalog. Actual requests-v1 old-domain refusal is tested, rather than relying only on requests-v0. Quickstart examples include destination environment/context and the exact snapshot example runs unchanged from A. I found no additional supported shell/config/session injection or cache fallback in these inspected paths.

The exact-opening target and original namespace/generation, started-before-external dispatch, unknown/no-reexecution receipts, bounded tree/media outputs, qualified artifact owner/manifest/digest checks, private producer path checks and native recording claims remain present. S7 keyed-discard retained bytes and S8 first-publication/claim guards remain at their existing owner; this candidate does not modify that owner. These observations do not prove OS process death, arbitrary host adversaries or every dependency behavior.

Web/desktop/mobile viewer sessions, source tickets, resource-bound hub/preview relays, public qualified-reference acquisition and source-authenticated fetch, browser controls and all-client lifecycle remain required downstream #383 work, as recorded in the accepted partial-core boundary. Their absence is not a finding against this internal component. The new tools' shared presentation omission is in scope because this core already publishes them. Provider consumers use the common registered toolkit; no provider adapter or new provider feature is claimed. No whole #383/#379 acceptance is claimed.

Executed proof and limits

All runner commands below used PATH=/opt/homebrew/opt/node@24/bin:$PATH and the reviewer's exclusive worktree:

./node_modules/.bin/vp test run apps/server/src/device/AgentDeviceCommand.test.ts apps/server/src/device/DeviceCommands.registered.test.ts apps/server/src/device/DeviceService.test.ts apps/server/src/mcp/McpDeviceToolkit.test.ts
  exit0,47 passed/4files,8.20s; /tmp/review383-domain.log
./node_modules/.bin/vp test run apps/server/src/peer/PeerAuthority.workflow.test.ts -t typed383
  exit0,16 passed/94 skipped,21.47s; /tmp/review383-native.log
./node_modules/.bin/vp test run apps/server/src/peer/PeerAuthority.test.ts apps/server/src/peer/PeerForwarding.test.ts apps/server/src/mcp/McpToolAccess.test.ts
  exit0,57 passed/3files,25.67s; /tmp/review383-preservation.log
./node_modules/.bin/vp test run apps/server/src/mcp/toolkits/core.test.ts -t 'publishes unique tool names'
  exit1,1 failed/16 skipped,6.82s; catalog.log; genuine catalog omission
./node_modules/.bin/vp test run apps/server/src/peer/PeerAuthority.workflow.test.ts -t review383-local-auto
  disposable appendix,exit1 at required keyed local positive,11.01s; local-auto-keyed.log
./node_modules/.bin/vp test run apps/server/src/peer/PeerAuthority.workflow.test.ts -t review383-read-capture
  disposable appendix plus external readiness hook,exit1 at required revoked capture refusal,12.78s; read-capture.log
/opt/homebrew/opt/node@24/bin/node /tmp/review383-codex/run-fill-probe.mjs
  exit0 as observation driver; records parser rejection/text mutation,not a passing product test
Candidate DeviceCommand decoder and pinned open reader,Node24 pure scripts
  lawful app positive,deep-link rejection versus supported pinned reader; open-schema.log,pinned-open-reader.log
git diff --check; git status --porcelain
  exit0; clean after exact restoration

The disposable appended cases are separate reviewer probes, not additions to the committed110 suite. They never changed production code and were removed by restoring the captured exact original test bytes. Final workflow SHA256 is e7ffc2bd6f34cc758dd58f9a37c57978c2677794c25a0952de5566237ace2483, matching the candidate. Scratch patches, logs, parser probes and digests are under /tmp/review383-codex; full local report /tmp/review383-codex/report.md.

I also inspected the author's current-base log tails reporting110 native cases/337.62s and41 ProjectionStore cases/3.95s under the d8a revalidation manifest. These are owner-run results, not my independently executed full-suite proof, and they do not override the actual CI failures. Historical0f0/652 logs and design approvals remain historical. No repo-wide checks, product servers, browser/device sessions, provider prompts, live-userdata writes, runtime installs, consent/grant expansion, source acceptance homes or other worktrees were used. Deterministic24-byte MP4 proof remains bounded-reference proof, not playable recording/live device proof. The direct pinned-parser probe is not installed-runtime acceptance.

Verdict applies only to the exact head/base/tree above. No aggregate status was changed. A source change requires both new delegated review rounds under the parent's workflow; this report does not transfer to the repair.

FULL unchanged Grok R1 report

What: Request changes on the #383 core candidate. The two new device tools are registered but missing from the shared presentation catalog, and the server typecheck fails on this exact head.

Why: device_commands and device_execute have no lifecycle definition, so the published-tool gate returns null, and two new Effect-policy violations fail Typecheck.

So what: The same #383 owner repairs these three defects on a new candidate. Both independent reviews start new rounds on that head. This verdict does not transfer. Parent owns aggregate status. No merge, push, or Issue change from this review.

Verdict

REQUEST_CHANGES for #421 at d8a768ad052564548fa00bb80ca7d668d6d674b8.

This is a whole-component review of the partial #383 core, not a lint-only pass and not whole-#383 acceptance. Viewer sessions, resource tickets, hub and preview relays, public artifact acquisition, browser control, and client lifecycle stay required and outside this candidate.

Elon record

Requirements and who asked: The user, through #379, required an independent Grok 4.7 medium review of the whole #383 core at this exact head. The parent required the live CI defects to be included.
Deleted: Split review lenses, following the author branch, tracked fixes, status or merge changes, weakened catalog assertions, and a whole-#383 acceptance claim.
Bottleneck: The published tool catalog and the real server typecheck fail closed on this head. Native workflow evidence from the older base does not replace that.
Checked myself: Read the 17-path diff and the command, authority, forwarding, session, artifact, and presentation owners. Read both CI logs. Confirmed this worktree's HEAD, tree, and merge-base, and the persisted Grok selection.

Identity

  • Reviewer: Grok CLI harness, persisted selection grok / grok-4.7 / reasoningEffort=medium. Live catalog includes that model. No model, effort, or harness fallback, and no delegated child.
  • Worktree: /Users/rocky/.t3/worktrees/chromeria/review-379-383-core-r1-grok-d8a768a, branch review/379-383-core-r1-grok-d8a768a.
  • HEAD: d8a768ad052564548fa00bb80ca7d668d6d674b8
  • Tree: 09135416e20fdacb0bdfa5b7e39f53baf6381840
  • Merge-base / PR base: ecd06ef5e620191626d15b559dc663644ad59649
  • Range: 17 paths, 5863 insertions, 307 deletions. Worktree clean. This review wrote no tracked files.
  • Local copy of this report: /tmp/chromeria-383-core-r1-grok-review-d8a768a.md

Findings

1. Blocking. Published catalog omits both new device tools

  • Location: packages/shared/src/t3McpToolPresentation.ts lines 258-269. Registered at apps/server/src/mcp/toolkits/device/tools.ts DeviceCommandsTool and DeviceExecuteTool. Gate: apps/server/src/mcp/toolkits/core.test.ts lines 125-127.
  • Trigger: Any walk of DeviceToolkit that resolves a presentation, including CI Server. device_commands is reached first.
  • Actual: T3_MCP_TOOLS defines device_list, device_open, device_screenshot, and device_close only. resolveT3McpToolDefinition("device_commands") and resolveT3McpToolDefinition("device_execute") are null. The same is true for the mcp__t3-code__ and T3-code. spellings, and resolveT3McpToolPresentation / resolveT3McpToolSummaryAction stay null. Cards, activity rows, summaries, and provider identity recovery share this inventory, so those surfaces have no lifecycle labels, device icon, or device summary action for either tool.
  • Wanted: Add both names beside the existing device entries. Use icon device and summary action device. Give each four non-empty lifecycle labels. device_commands is the read discovery tool (Readonly, not open-world), in the same family as device_list. device_execute is the write tool (Readonly false, open-world), in the same family as device_open. Do not weaken core.test.ts.
  • Proof: Run 39124230959, job 117665956750, log /tmp/chromeria-383-core-ci-server6-d8a768a.log. FAIL src/mcp/toolkits/core.test.ts > publishes unique tool names with reference-free object-root inputs. AssertionError: device_commands: expected null not to be null at core.test.ts:127:41. 1 failed, 1382 passed, 2 skipped. 112 files (109 passed, 1 failed, 2 skipped). 301.40s. Source confirms device_execute is omitted as well. The test stops on the first missing name.

2. Blocking. Server typecheck rejects JSON.parse on capture JSON

  • Location: apps/server/src/device/DeviceService.ts lines 1561-1565, inside record/trace stop publication when the producer file extension is json.
  • Trigger: A typed record or trace stop whose bounded producer file is JSON. The real server workspace typecheck.
  • Actual: JSON.parse(text) is an error under preferSchemaOverJson (TS377026). The author's narrower tsconfig did not apply this server Effect rule.
  • Wanted: Decode with the existing Effect Schema JSON codec (Schema.fromJsonString(Schema.Unknown) or the codec already used for command envelopes) and keep the current refusal on invalid JSON. Do not suppress the rule.
  • Proof: Typecheck job 117665956662, run 39124230959, log /tmp/chromeria-383-core-ci-typecheck-d8a768a.log: src/device/DeviceService.ts(1563,38): error TS377026: This code uses JSON.parse or JSON.stringify... effect(preferSchemaOverJson).

3. Blocking. Workflow proof imports node:crypto

  • Location: apps/server/src/peer/PeerAuthority.workflow.test.ts line 4, used at the PNG, package, and recording digest sites (lines 2112, 2558, 2596, and 2702).
  • Trigger: The real server workspace typecheck of this test.
  • Actual: import * as NodeCrypto from "node:crypto" is TS377057 nodeBuiltinImport. This is test code. It does not change the production digest owner, and it still fails the candidate gate.
  • Wanted: Hash those fixtures with Effect Crypto. Do not suppress the rule or drop the digest checks.
  • Proof: Same Typecheck log: src/peer/PeerAuthority.workflow.test.ts(4,29): error TS377057: This module reference uses the crypto module, the corresponding Effect API is Crypto from effect. effect(nodeBuiltinImport). These are the only two error TS lines in that log.

Inspected and not filed

The command compiler builds one argv vector, appends -- before positionals, passes fill text on stdin, and scrubs the environment to a private cwd. Closed command schemas reject unknown keys. A durable device_open refuses a physical device. Capability decoding requires target: mobile and kind simulator or emulator, then the service matches device id and platform to the opening. Modern quickstart text is routed device_commands / device_execute JSON with environmentId and contextThreadId. The local executable quickstart remains only when there is no durable request and the caller is not a linked peer. PeerForwarding prepares a separate read-only device_commands call on the original grant generation and decodes DeviceCommandCatalog before a forwarded open. recheckInvocation reloads the original authority record, and validate narrows that record through current project settings before intersection. Execute replaces its scope with the returned ceiling. The opening stores the original request namespace and generation, and execute requires both. Capture publication checks a realpath inside the producer directory, writes with wx, and claims through the existing recording owner. The fork-feature sentence describes this typed core. It does not claim the remaining viewer, relay, or fetch work. No additional supported behavioral blocker met the evidence bar in those paths.

Limits

  • This review did not run vp or tsc. Parent prepared this worktree's node_modules from cache (vp is present now). The existing feat(peer): complete all-tool cross-machine workflows across web desktop and mobile #386 automatic setup gap is unchanged, and this review infers no cause. Deps log: /tmp/chromeria-383-core-r1-grok-deps.log.
  • The historical 0f0f277 native proof is a different base. It is not current-head proof. The author's current-base test revalidation was still in progress and is not evidence here.
  • The pinned agent-device parser was not executed here. End-of-options and stdin newline behavior are what the compiler emits, not a run of package 0.21.25.
  • No product server, browser, device, provider prompt, install, grant, or live user data was used.
  • A new push needs two new review rounds. This comment is not a status, merge, or blocker change.

@lukemaj

lukemaj commented Oct 18, 2026

Copy link
Copy Markdown
Contributor Author

What: REQUEST_CHANGES for the whole partial #383 core at 8c1f43c4dc22be7c50891b1d57e6a10bb8743e19.
Why: The six R1 mechanisms are repaired, but the registered shutdown path still executes after readiness retires the real device grant.
So what: The existing owner should revalidate immediately before native shutdown, preserve the current protections, and submit the resulting candidate for both fresh reviews; #379 retains aggregate status, CI and acceptance ownership.

Requirements and who asked: The user's whole-component R2 brief, frozen #379 v5 and #383 require current original authority at real device effects, faithful pinned command semantics, native resource/receipt ownership and local compatibility. This supports Promachos and Drafters operating across environments.
Deleted: Split lenses, treating six repairs as exhaustive, transferred approvals, generic shell/proxy execution, source repairs, delegation and demands for deferred viewer implementation. No status, merge, push, installation or grant expansion was performed.
Bottleneck: Revalidate the original invocation after shutdown readiness and before the hub mutation, then obtain exact-candidate review and parent-owned proof.
Checked myself: Read all 19 cumulative changed paths and relevant consumers, the complete original brief/historical handoff, parent adjudication, both R1 reports and all responses. Independently ran native, domain/catalog/consumer, projection, exact pinned-parser and real server compiler checks. A separate native shutdown counterexample fails after a lawful positive. Candidate tracked bytes remain clean and unchanged.

Identity and authority

  • PR: feat(device): add typed remote device execution core #421, OPEN, base feat/379-cross-machine-parity. Live head matched before review and is rechecked at publication.
  • HEAD 8c1f43c4dc22be7c50891b1d57e6a10bb8743e19; tree 87deab604e5dee110a36db9e2317170fb346b49f.
  • Base and actual merge base ecd06ef5e620191626d15b559dc663644ad59649.
  • Exclusive app-bound workspace /Users/rocky/.t3/worktrees/chromeria/review-379-383-core-r2-codex-8c1f43c, branch review/379-383-core-r2-codex-8c1f43c. I did not author this candidate.
  • Actual reviewer selection: Codex harness, codex / gpt-6.1-sol / reasoningEffort=medium. Live catalog supports the requested selection; t3_thread_read reports the current run on that provider/model. A read-only query restricted to this thread's persisted projection independently returns modelSelection={"instanceId":"codex","model":"gpt-6.1-sol","options":[{"id":"reasoningEffort","value":"medium"}]}. No fallback or delegation occurred. The catalog's low default was not substituted.
  • PR421 was registered with link_pull_request; list_thread_pull_requests confirms the link. No aggregate review status was changed.
  • Dependencies were initially absent. Execution began only after the parent's explicit cached/offline/frozen-lockfile/ignore-scripts/copy preparation EXIT0 for this exact workspace. Log /tmp/chromeria-383-core-r2-codex-deps.log. This is manual preparation, not automatic setup proof. The corrected feat(peer): complete all-tool cross-machine workflows across web desktop and mobile #386 diagnosis supplies no demonstrated installer failure or additional automatic setup gate.

Required finding

R2 F1, P1: shutdown dispatch skips current authority after readiness

Location: DeviceService.ts:950, with the actual hub dispatch at DeviceService.ts:961. Reachable from registered device_close with shutdown:true, through close at lines 1013-1036.

An authorized A-only caller opens its permitted B emulator and calls device_close with shutdown:true. close checks authority before retiring the command session. shutdownDevice subsequently waits on readiness(hostId). Readiness checks before entering the external host's ensureReady, but shutdown performs no current invocation check after that wait and before POSTing the shutdown request. Retiring the real B device grant during that external readiness callback therefore does not prevent the new shutdown effect. The shared function covers both Android /api/devices/shutdown and iOS grid shutdown.

I reproduced this through the existing finite registered source/destination HTTP/auth/control/SQLite fixture and real native DeviceService/PeerAuthority/receipt owners. The only fixture extension was an external hub shutdown leaf that counts requests and returns its actual expected {ok:true} wire response. The existing readiness hook calls production PeerAuthority.setGrant({...grant,device:false}). No policy result, SQL result, native service or assertion was replaced or weakened. A lawful open/shutdown succeeds first and establishes shutdown count 1; after reopening, grant retirement occurs during the next readiness callback.

Observed result:

{"revoked":{"structuredContent":{},"isError":false,"content":[{"type":"text","text":"{}"}]},"armed":false,"device":false,"shutdowns":2}

The required invariant fails with no new shutdown after observed grant retirement: expected 2 to be 1. The second native shutdown request reached the external leaf and the public call reported success. This is an additional effect after a real policy change at a wait boundary, not a demand for distributed atomic revocation. The deterministic leaf proves dispatch, not physical device power state.

Required correction: reauthorize the original authenticated invocation after readiness and immediately before each shutdown dispatch, preserving native UI compatibility and the existing unknown/no-reexecution receipt owner. Keep authorization refusal outside the iOS already-stopped recovery that can otherwise turn a caught failure into success. Retain a lawful shutdown positive and the native revocation refusal.

Evidence: /tmp/review383-r2-codex/shutdown-native.log, shutdown-native.patch, shutdown-native.test.ts. The temporary sibling scratch test reused the unchanged fixture imports, ran only this additional case, and was removed afterwards. No tracked source or test bytes were edited. The source-only candidate and manifest still match the immutable head. Earlier attempts to run a copied fixture from /tmp failed module/mock setup before any tests; those are retained separately as setup failures and are not product failures.

R1 responses independently checked

  1. F1 read capture: repaired for the reported mechanism. recheckAction now obtains verified invocation independently of CurrentRequest, and screenshot rechecks after readiness immediately before capture. The native lawful PNG plus readiness-time grant retirement case passes without weakening the capture-started receipt assertion; its real held click remains. The new shutdown finding is a separate remaining lifecycle boundary, not a claim that the capture repair failed.
  2. F2 catalog and consumers: repaired. Both device_commands and device_execute have nonempty lifecycle labels, device icon and device summary action in the shared owner. The unchanged published-tool completeness gate passes. Provider aliases and existing client-runtime summaries pass. Discovery remains read-only/closed-world; execution remains mutating/open-world. Shared presentation covers web, desktop and mobile consumers without new client source changes.
  3. F3 real Effect gate: repaired. Production JSON parsing uses a module-hoisted Schema.fromJsonString(Schema.Unknown) decoder. Workflow digest observations use Effect Crypto/Hex. The registration fixture composes independent layers without the prior chained-provide warnings. I ran the actual apps/server workspace ../../node_modules/.bin/tsc-rs --noEmit: exit0, no errors or warnings, 261 suggestions. Compiler package is 0.7.0; the retained exact compiler source defaults ignore_effect_warnings_in_tsc_exit_code to false. No policy, config, dependency or suppression changes appear in the cumulative diff.
  4. F4 literal fill: repaired. Empty fill uses the supported empty positional after --. Nonempty fill appends CRLF to stdin; the exact pinned reader removes that framing while preserving the original ending. The independent run feeds current production compiler output into extracted agent-device0.21.25's real reader, with only the terminal interaction leaf recording the parsed text. Empty, ordinary text, CR, LF, CRLF, multiline, flag-like strings, quotes, Unicode and 16,384 multibyte characters all pass. Maximum tested input is 49,152 UTF-8 bytes plus 2 framing bytes, below 65,536. This is pure parser proof, not installed-runtime acceptance.
  5. F5 deep link: repaired. The bounded optional open.url maps literally alongside the app after private flags and --; the actual pinned reader accepts the produced pair. Registered native dispatch/replay and malformed URI InvalidParams cases pass. No fetch/proxy or new capability is introduced.
  6. F6 local mode: repaired. The unconditional full-access/default test is gone; target-relative comparison and current returned capability ceiling remain. The keyed same-thread local-auto positive passes, while remote auto-to-full and current-mode refusals remain covered. No blanket plan grant is introduced. The historical inconclusive legacy-positive probe remains inconclusive.

Original R1 reports, failures and adjudications remain historical evidence. No verdict or old test count is transferred to this head.

Whole-component coverage and remaining boundaries

Read all 19 cumulative paths: contracts device.ts; AgentDeviceCommand and its test; DeviceCommands.registered.test; DeviceService; DeviceToolchain; both LegacyDevice fixture files; McpDeviceToolkit.test; device handlers/tools; PeerAuthority and its whole workflow diff; PeerForwarding; shared presentation and its test; fork-features, map and upstream-edit allowlist. Reviewed the full cumulative implementation, not just the repair commit.

Traced current consumers at McpHttpServer registration/image output, toolkit composition and provider-facing names, McpToolAccess, McpRouting, McpSessionRegistry, request namespace/generation and receipts, native server composition, local/SSH device readiness/bindings, shared presentation/client summaries, and AttachmentStaging verification/publication/recording/discard owners. The original actor remains the invocation owner. Current source project settings narrow original root record capabilities before recursive ALL-owner intersection; checkThread returns the narrowed ceiling and registry/routing intersect it. executeCommand consumes recheckInvocation's returned scope. Created-work and environment-resource policy, contributor arithmetic, task-stop validation, generation and namespace semantics remain at their existing owners.

Authenticated pre-open discovery prepares a distinct READ device_commands envelope bound to the original link generation, decodes the actual catalog, and does not borrow the mutation envelope or cache support. Actual requests-v1/old-domain refusal and requests-v0 refusal remain in the native suite. Returned discovery/snapshot guidance carries destination environment/context and runs unchanged from A. Modern guidance does not expose B-local executable/config/daemon material; legacy local unkeyed guidance stays explicit.

Closed command schemas, exact host/device/platform/opening UUID, original request namespace/generation, lock/preflight checks, per-step revalidation, capability identity/platform/kind matching, started-before-external preparation, unknown/no-repeat receipts, old-opening denial after reopen, reconstruction/relink behavior, qualified artifact owner/digest/size/manifest checks and private producer containment remain present and covered by passing current tests. S7 retained keyed-discard bytes and S8 first-publication CAS/digest/owner/exclusive-copy guards remain at AttachmentStaging, unchanged by this candidate. No additional supported blocker emerged in those inspected paths. These observations do not erase the shutdown exception above.

This is partial #383 core only. Source-owned viewer sessions/tickets, resource-bound authenticated allowlisted hub/preview relays, browser control/media, public qualified input acquisition, source-authenticated artifact fetch, and web/desktop/mobile navigation/reconnect/close/reopen remain required downstream work under the accepted owner map. This review neither blocks core merely for that deferred work nor claims whole #383/#379 acceptance. Existing provider adapters consume the common toolkit; no harness-specific device feature or live provider behavior is claimed. Physical hardware, OS process death, playable recording and real source-only installed-runtime/client usability remain parent proof.

Independent execution and limits

Every command used Node v24.18.0 with PATH=/opt/homebrew/opt/node@24/bin:$PATH, in this review workspace. Logs are retained under /tmp/review383-r2-codex.

./node_modules/.bin/vp test run apps/server/src/peer/PeerAuthority.workflow.test.ts
  exit1,112 passed/1 failed of113,339.18s; workflow.log
  failure: round7 private webhook URLs, PeerLinkError during fixture linking:
  "Nothing at http://127.0.0.1:62589 answered as a T3 Code environment."
./node_modules/.bin/vp test run apps/server/src/peer/PeerAuthority.workflow.test.ts -t 'round7: private webhook URLs retain current originating runtime after source narrowing'
  exit0,1 passed/112 skipped,11.57s; webhook-rerun.log
./node_modules/.bin/vp test run apps/server/src/device/AgentDeviceCommand.test.ts apps/server/src/device/DeviceCommands.registered.test.ts apps/server/src/device/DeviceService.test.ts apps/server/src/mcp/McpDeviceToolkit.test.ts apps/server/src/mcp/toolkits/core.test.ts packages/shared/src/t3McpToolPresentation.test.ts apps/server/src/peer/PeerAuthority.test.ts apps/server/src/peer/PeerForwarding.test.ts apps/server/src/mcp/McpToolAccess.test.ts packages/client-runtime/src/t3ToolSummary.test.ts
  exit0,156 passed/10files,32.18s; domain.log
./node_modules/.bin/vp test run apps/server/src/orchestration-v2/ProjectionStore.test.ts
  exit0,41 passed,3.70s; projection.log
(cd apps/server) ../../node_modules/.bin/tsc-rs --noEmit
  exit0,0errors/0warnings/261suggestions; server-types.log
./node_modules/.bin/vp test run --config /tmp/review383-r2-codex/parser.config.ts
  exit0,10 passed,2.25s; parser.log
./node_modules/.bin/vp test run apps/server/src/peer/Review383R2Scratch.test.ts -t review383-r2-shutdown
  exit1,1 failed/113 skipped,12.00s; shutdown-native.log
  lawful shutdown passes; retired-grant shutdown reaches external leaf and returns success
bash scripts/fork-check.sh --upstream upstream
  exit0,42features; fork.log
 git diff --check; git status --porcelain
  exit0; clean after removing only the reviewer-created scratch file

The full native run is not reported as a passing 113-case run. Its one failure occurred at fixture peer discovery before the webhook policy assertion; the unchanged isolated rerun passes. I have no supported cause for that transient discovery failure and file no additional product finding from it. Parent must retain both observations when assessing proof. The 112 passing cases include the current read-capture, local-auto, typed literals and preservation cases. Totals are not summed into a fictitious single complete gate.

Candidate manifest: /tmp/review383-r2-codex/candidate-manifest.json binds all 19 paths. Full local report: /tmp/review383-r2-codex/report.md. All failing observations and scratch proof are retained. No repo-wide check, product server, browser, device session, provider prompt, live-userdata write, runtime install, new consent/grant, other-worktree write, merge, push, version change, Issue close or resource retirement was performed. Only this review thread's model-selection projection was read from live state, read-only. Scoped HTTP/auth/SQLite fixtures use disposable state and deterministic external leaves.

Verdict applies only to the exact head/tree/base above. Parent owns aggregate independent status and current CI; a source repair needs both new exact-candidate review rounds. Resources and evidence remain retained for final #379 acceptance.

@lukemaj

lukemaj commented Oct 18, 2026

Copy link
Copy Markdown
Contributor Author

What: Sol R2 requests changes on partial #383 core 8c1f43c4dc22be7c50891b1d57e6a10bb8743e19; the shutdown-after-readiness finding is accepted.
Why: The registered lawful shutdown positive succeeds, then a real device-grant retirement during readiness still permits the next hub shutdown and public success. The shared shutdown owner has no post-readiness authority check.
So what: The same sole #383 author repairs this bounded owner path while Grok finishes its immutable 8c1 whole review; both whole R2 reports and all responses must accompany the next candidate and two fresh reviews.

Requirements and who asked: Frozen #379/#383 and the original whole-component review brief require current original authority before each real device effect.
Deleted: Treating six R1 repairs or current CI success as sufficient acceptance; broad catches that turn authorization refusal into already-stopped success; changing immutable review heads or granting new consent.
Bottleneck: Add the missing shutdown-boundary authorization and faithful native regression, retain exact native receipts/unknown behavior and obtain both new independent exact-candidate verdicts.
Checked myself: Read the entire Sol report, actual shutdown source945-1042 and retained shutdown-native.patch/log. Lawful count1 is followed by actual grant device:false, public success and count2; the source awaits readiness before dispatch without recheck. No policy/SQL/native owner result was replaced. This is dispatch proof, not physical power-state proof.

Adjudication: ACCEPT R2 F1 P1. Reauthorize the original verified invocation after readiness and immediately before shutdown dispatch at the existing shared shutdown owner. Keep refusal OUTSIDE iOS already-stopped recovery so it cannot become success. Preserve UI/no-MCP compatibility, current contributor/source/target ceilings, started/unknown/no-repeat receipt semantics. Cover lawful positive, readiness-time revoke zero new shutdown, and iOS refusal not swallowed by the stopped-device recovery. Keep existing source ownership; no new generic API, grants, mode arithmetic, renderer/device/product operations, topology or downstream383 viewer scope. Author must reproduce before editing, retain red/green and revalidate actual server Effect policy plus affected/native preservation. Grok R2 remains a required immutable independent result, not replaced by this early acceptance.

Sol full report: #421 (comment) ; local /tmp/review383-r2-codex/report.md. All six R1 mechanisms independently checked repaired. Preserve separate native full112pass/1fixture-discovery failure and unchanged isolated1pass; causeUNKNOWN, not a new demonstrated product finding or a passing113 whole run. Owner current113green and CI remain their own records.

FULL UNCHANGED SOL R2 REPORT follows:

What: REQUEST_CHANGES for the whole partial #383 core at 8c1f43c4dc22be7c50891b1d57e6a10bb8743e19.
Why: The six R1 mechanisms are repaired, but the registered shutdown path still executes after readiness retires the real device grant.
So what: The existing owner should revalidate immediately before native shutdown, preserve the current protections, and submit the resulting candidate for both fresh reviews; #379 retains aggregate status, CI and acceptance ownership.

Requirements and who asked: The user's whole-component R2 brief, frozen #379 v5 and #383 require current original authority at real device effects, faithful pinned command semantics, native resource/receipt ownership and local compatibility. This supports Promachos and Drafters operating across environments.
Deleted: Split lenses, treating six repairs as exhaustive, transferred approvals, generic shell/proxy execution, source repairs, delegation and demands for deferred viewer implementation. No status, merge, push, installation or grant expansion was performed.
Bottleneck: Revalidate the original invocation after shutdown readiness and before the hub mutation, then obtain exact-candidate review and parent-owned proof.
Checked myself: Read all 19 cumulative changed paths and relevant consumers, the complete original brief/historical handoff, parent adjudication, both R1 reports and all responses. Independently ran native, domain/catalog/consumer, projection, exact pinned-parser and real server compiler checks. A separate native shutdown counterexample fails after a lawful positive. Candidate tracked bytes remain clean and unchanged.

Identity and authority

  • PR: feat(device): add typed remote device execution core #421, OPEN, base feat/379-cross-machine-parity. Live head matched before review and is rechecked at publication.
  • HEAD 8c1f43c4dc22be7c50891b1d57e6a10bb8743e19; tree 87deab604e5dee110a36db9e2317170fb346b49f.
  • Base and actual merge base ecd06ef5e620191626d15b559dc663644ad59649.
  • Exclusive app-bound workspace /Users/rocky/.t3/worktrees/chromeria/review-379-383-core-r2-codex-8c1f43c, branch review/379-383-core-r2-codex-8c1f43c. I did not author this candidate.
  • Actual reviewer selection: Codex harness, codex / gpt-6.1-sol / reasoningEffort=medium. Live catalog supports the requested selection; t3_thread_read reports the current run on that provider/model. A read-only query restricted to this thread's persisted projection independently returns modelSelection={"instanceId":"codex","model":"gpt-6.1-sol","options":[{"id":"reasoningEffort","value":"medium"}]}. No fallback or delegation occurred. The catalog's low default was not substituted.
  • PR421 was registered with link_pull_request; list_thread_pull_requests confirms the link. No aggregate review status was changed.
  • Dependencies were initially absent. Execution began only after the parent's explicit cached/offline/frozen-lockfile/ignore-scripts/copy preparation EXIT0 for this exact workspace. Log /tmp/chromeria-383-core-r2-codex-deps.log. This is manual preparation, not automatic setup proof. The corrected feat(peer): complete all-tool cross-machine workflows across web desktop and mobile #386 diagnosis supplies no demonstrated installer failure or additional automatic setup gate.

Required finding

R2 F1, P1: shutdown dispatch skips current authority after readiness

Location: DeviceService.ts:950, with the actual hub dispatch at DeviceService.ts:961. Reachable from registered device_close with shutdown:true, through close at lines 1013-1036.

An authorized A-only caller opens its permitted B emulator and calls device_close with shutdown:true. close checks authority before retiring the command session. shutdownDevice subsequently waits on readiness(hostId). Readiness checks before entering the external host's ensureReady, but shutdown performs no current invocation check after that wait and before POSTing the shutdown request. Retiring the real B device grant during that external readiness callback therefore does not prevent the new shutdown effect. The shared function covers both Android /api/devices/shutdown and iOS grid shutdown.

I reproduced this through the existing finite registered source/destination HTTP/auth/control/SQLite fixture and real native DeviceService/PeerAuthority/receipt owners. The only fixture extension was an external hub shutdown leaf that counts requests and returns its actual expected {ok:true} wire response. The existing readiness hook calls production PeerAuthority.setGrant({...grant,device:false}). No policy result, SQL result, native service or assertion was replaced or weakened. A lawful open/shutdown succeeds first and establishes shutdown count 1; after reopening, grant retirement occurs during the next readiness callback.

Observed result:

{"revoked":{"structuredContent":{},"isError":false,"content":[{"type":"text","text":"{}"}]},"armed":false,"device":false,"shutdowns":2}

The required invariant fails with no new shutdown after observed grant retirement: expected 2 to be 1. The second native shutdown request reached the external leaf and the public call reported success. This is an additional effect after a real policy change at a wait boundary, not a demand for distributed atomic revocation. The deterministic leaf proves dispatch, not physical device power state.

Required correction: reauthorize the original authenticated invocation after readiness and immediately before each shutdown dispatch, preserving native UI compatibility and the existing unknown/no-reexecution receipt owner. Keep authorization refusal outside the iOS already-stopped recovery that can otherwise turn a caught failure into success. Retain a lawful shutdown positive and the native revocation refusal.

Evidence: /tmp/review383-r2-codex/shutdown-native.log, shutdown-native.patch, shutdown-native.test.ts. The temporary sibling scratch test reused the unchanged fixture imports, ran only this additional case, and was removed afterwards. No tracked source or test bytes were edited. The source-only candidate and manifest still match the immutable head. Earlier attempts to run a copied fixture from /tmp failed module/mock setup before any tests; those are retained separately as setup failures and are not product failures.

R1 responses independently checked

  1. F1 read capture: repaired for the reported mechanism. recheckAction now obtains verified invocation independently of CurrentRequest, and screenshot rechecks after readiness immediately before capture. The native lawful PNG plus readiness-time grant retirement case passes without weakening the capture-started receipt assertion; its real held click remains. The new shutdown finding is a separate remaining lifecycle boundary, not a claim that the capture repair failed.
  2. F2 catalog and consumers: repaired. Both device_commands and device_execute have nonempty lifecycle labels, device icon and device summary action in the shared owner. The unchanged published-tool completeness gate passes. Provider aliases and existing client-runtime summaries pass. Discovery remains read-only/closed-world; execution remains mutating/open-world. Shared presentation covers web, desktop and mobile consumers without new client source changes.
  3. F3 real Effect gate: repaired. Production JSON parsing uses a module-hoisted Schema.fromJsonString(Schema.Unknown) decoder. Workflow digest observations use Effect Crypto/Hex. The registration fixture composes independent layers without the prior chained-provide warnings. I ran the actual apps/server workspace ../../node_modules/.bin/tsc-rs --noEmit: exit0, no errors or warnings, 261 suggestions. Compiler package is 0.7.0; the retained exact compiler source defaults ignore_effect_warnings_in_tsc_exit_code to false. No policy, config, dependency or suppression changes appear in the cumulative diff.
  4. F4 literal fill: repaired. Empty fill uses the supported empty positional after --. Nonempty fill appends CRLF to stdin; the exact pinned reader removes that framing while preserving the original ending. The independent run feeds current production compiler output into extracted agent-device0.21.25's real reader, with only the terminal interaction leaf recording the parsed text. Empty, ordinary text, CR, LF, CRLF, multiline, flag-like strings, quotes, Unicode and 16,384 multibyte characters all pass. Maximum tested input is 49,152 UTF-8 bytes plus 2 framing bytes, below 65,536. This is pure parser proof, not installed-runtime acceptance.
  5. F5 deep link: repaired. The bounded optional open.url maps literally alongside the app after private flags and --; the actual pinned reader accepts the produced pair. Registered native dispatch/replay and malformed URI InvalidParams cases pass. No fetch/proxy or new capability is introduced.
  6. F6 local mode: repaired. The unconditional full-access/default test is gone; target-relative comparison and current returned capability ceiling remain. The keyed same-thread local-auto positive passes, while remote auto-to-full and current-mode refusals remain covered. No blanket plan grant is introduced. The historical inconclusive legacy-positive probe remains inconclusive.

Original R1 reports, failures and adjudications remain historical evidence. No verdict or old test count is transferred to this head.

Whole-component coverage and remaining boundaries

Read all 19 cumulative paths: contracts device.ts; AgentDeviceCommand and its test; DeviceCommands.registered.test; DeviceService; DeviceToolchain; both LegacyDevice fixture files; McpDeviceToolkit.test; device handlers/tools; PeerAuthority and its whole workflow diff; PeerForwarding; shared presentation and its test; fork-features, map and upstream-edit allowlist. Reviewed the full cumulative implementation, not just the repair commit.

Traced current consumers at McpHttpServer registration/image output, toolkit composition and provider-facing names, McpToolAccess, McpRouting, McpSessionRegistry, request namespace/generation and receipts, native server composition, local/SSH device readiness/bindings, shared presentation/client summaries, and AttachmentStaging verification/publication/recording/discard owners. The original actor remains the invocation owner. Current source project settings narrow original root record capabilities before recursive ALL-owner intersection; checkThread returns the narrowed ceiling and registry/routing intersect it. executeCommand consumes recheckInvocation's returned scope. Created-work and environment-resource policy, contributor arithmetic, task-stop validation, generation and namespace semantics remain at their existing owners.

Authenticated pre-open discovery prepares a distinct READ device_commands envelope bound to the original link generation, decodes the actual catalog, and does not borrow the mutation envelope or cache support. Actual requests-v1/old-domain refusal and requests-v0 refusal remain in the native suite. Returned discovery/snapshot guidance carries destination environment/context and runs unchanged from A. Modern guidance does not expose B-local executable/config/daemon material; legacy local unkeyed guidance stays explicit.

Closed command schemas, exact host/device/platform/opening UUID, original request namespace/generation, lock/preflight checks, per-step revalidation, capability identity/platform/kind matching, started-before-external preparation, unknown/no-repeat receipts, old-opening denial after reopen, reconstruction/relink behavior, qualified artifact owner/digest/size/manifest checks and private producer containment remain present and covered by passing current tests. S7 retained keyed-discard bytes and S8 first-publication CAS/digest/owner/exclusive-copy guards remain at AttachmentStaging, unchanged by this candidate. No additional supported blocker emerged in those inspected paths. These observations do not erase the shutdown exception above.

This is partial #383 core only. Source-owned viewer sessions/tickets, resource-bound authenticated allowlisted hub/preview relays, browser control/media, public qualified input acquisition, source-authenticated artifact fetch, and web/desktop/mobile navigation/reconnect/close/reopen remain required downstream work under the accepted owner map. This review neither blocks core merely for that deferred work nor claims whole #383/#379 acceptance. Existing provider adapters consume the common toolkit; no harness-specific device feature or live provider behavior is claimed. Physical hardware, OS process death, playable recording and real source-only installed-runtime/client usability remain parent proof.

Independent execution and limits

Every command used Node v24.18.0 with PATH=/opt/homebrew/opt/node@24/bin:$PATH, in this review workspace. Logs are retained under /tmp/review383-r2-codex.

./node_modules/.bin/vp test run apps/server/src/peer/PeerAuthority.workflow.test.ts
  exit1,112 passed/1 failed of113,339.18s; workflow.log
  failure: round7 private webhook URLs, PeerLinkError during fixture linking:
  "Nothing at http://127.0.0.1:62589 answered as a T3 Code environment."
./node_modules/.bin/vp test run apps/server/src/peer/PeerAuthority.workflow.test.ts -t 'round7: private webhook URLs retain current originating runtime after source narrowing'
  exit0,1 passed/112 skipped,11.57s; webhook-rerun.log
./node_modules/.bin/vp test run apps/server/src/device/AgentDeviceCommand.test.ts apps/server/src/device/DeviceCommands.registered.test.ts apps/server/src/device/DeviceService.test.ts apps/server/src/mcp/McpDeviceToolkit.test.ts apps/server/src/mcp/toolkits/core.test.ts packages/shared/src/t3McpToolPresentation.test.ts apps/server/src/peer/PeerAuthority.test.ts apps/server/src/peer/PeerForwarding.test.ts apps/server/src/mcp/McpToolAccess.test.ts packages/client-runtime/src/t3ToolSummary.test.ts
  exit0,156 passed/10files,32.18s; domain.log
./node_modules/.bin/vp test run apps/server/src/orchestration-v2/ProjectionStore.test.ts
  exit0,41 passed,3.70s; projection.log
(cd apps/server) ../../node_modules/.bin/tsc-rs --noEmit
  exit0,0errors/0warnings/261suggestions; server-types.log
./node_modules/.bin/vp test run --config /tmp/review383-r2-codex/parser.config.ts
  exit0,10 passed,2.25s; parser.log
./node_modules/.bin/vp test run apps/server/src/peer/Review383R2Scratch.test.ts -t review383-r2-shutdown
  exit1,1 failed/113 skipped,12.00s; shutdown-native.log
  lawful shutdown passes; retired-grant shutdown reaches external leaf and returns success
bash scripts/fork-check.sh --upstream upstream
  exit0,42features; fork.log
 git diff --check; git status --porcelain
  exit0; clean after removing only the reviewer-created scratch file

The full native run is not reported as a passing 113-case run. Its one failure occurred at fixture peer discovery before the webhook policy assertion; the unchanged isolated rerun passes. I have no supported cause for that transient discovery failure and file no additional product finding from it. Parent must retain both observations when assessing proof. The 112 passing cases include the current read-capture, local-auto, typed literals and preservation cases. Totals are not summed into a fictitious single complete gate.

Candidate manifest: /tmp/review383-r2-codex/candidate-manifest.json binds all 19 paths. Full local report: /tmp/review383-r2-codex/report.md. All failing observations and scratch proof are retained. No repo-wide check, product server, browser, device session, provider prompt, live-userdata write, runtime install, new consent/grant, other-worktree write, merge, push, version change, Issue close or resource retirement was performed. Only this review thread's model-selection projection was read from live state, read-only. Scoped HTTP/auth/SQLite fixtures use disposable state and deterministic external leaves.

Verdict applies only to the exact head/tree/base above. Parent owns aggregate independent status and current CI; a source repair needs both new exact-candidate review rounds. Resources and evidence remain retained for final #379 acceptance.

@lukemaj

lukemaj commented Oct 18, 2026

Copy link
Copy Markdown
Contributor Author

What: REQUEST_CHANGES for the whole partial #383 core at 8c1f43c4dc22be7c50891b1d57e6a10bb8743e19.
Why: The six R1 repairs hold, and registered device_close with shutdown: true still dispatches the hub shutdown after external readiness without a current-authority check.
So what: The same owner rechecks the original invocation after readiness and before the shutdown POST, keeps that refusal outside the iOS already-stopped recovery, and sends the next head to both fresh reviews. Parent owns aggregate status. This review does not merge, push, or change Issues.

Verdict

REQUEST_CHANGES for #421 at 8c1f43c4dc22be7c50891b1d57e6a10bb8743e19.

This is a whole-component review of the partial #383 typed device core. It is not whole-#383 acceptance. Viewer sessions, resource tickets, hub and preview relays, public qualified fetch, browser control, and all-client lifecycle stay required downstream. Resources stay until final #379.

Elon record

Requirements and who asked: The user, through frozen #379 and #383, required this independent Grok 4.7 medium whole-core review at this exact head, including current originating authority before each real device effect.
Deleted: Treating the six R1 repairs or a green 113-case workflow as acceptance. Split lenses, tracked edits, status or merge changes, a new plan grant, and a demand to implement the deferred viewer in this candidate.
Bottleneck: shutdownDevice waits on readiness, then posts shutdown with no further recheckAction. The iOS already-stopped recovery can turn a caught failure into success, so the new check has to sit outside that recovery.
Checked myself: Read all 19 cumulative paths and the shutdown, close, readiness, screenshot, catalog, compiler, and authority owners. Ran the domain suite, real server tsc-rs, the workflow suite, and a pinned 0.21.25 parser probe in this worktree. HEAD, tree, and merge-base were rechecked clean before this comment.

Identity

  • Reviewer: installed Grok harness, persisted selection grok / grok-4.7 / reasoningEffort=medium from this thread's t3_thread_configuration. No model, effort, or harness fallback, and no delegated child.
  • PR: feat(device): add typed remote device execution core #421
  • Worktree: /Users/rocky/.t3/worktrees/chromeria/review-379-383-core-r2-grok-8c1f43c, branch review/379-383-core-r2-grok-8c1f43c. I did not author this candidate.
  • HEAD: 8c1f43c4dc22be7c50891b1d57e6a10bb8743e19
  • Tree: 87deab604e5dee110a36db9e2317170fb346b49f
  • Base and merge-base: ecd06ef5e620191626d15b559dc663644ad59649
  • Range versus that base: 19 files, 6036 insertions, 264 deletions.
  • Node: /opt/homebrew/opt/node@24/bin, v24.18.0.
  • Local copy: /tmp/chromeria-383-core-r2-grok/report.md

Finding

R2 F1, P1. Shutdown dispatch skips current authority after readiness

Location: apps/server/src/device/DeviceService.ts shutdownDevice (about lines 945-991). Registered entry: device_close in apps/server/src/mcp/toolkits/device/handlers.ts (about lines 341-363) calls devices.close with shutdown: true. close (about lines 1013-1036) rechecks once, retires command sessions, then calls shutdownDevice. The direct shutdown service method (about lines 1039-1042), used by WS_METHODS.deviceShutdown, enters the same function.

shutdownDevice starts with readiness(hostId). readiness (about lines 346-390) calls recheckAction and then host.ensureReady. The workflow fixture runs deviceReadinessHook inside ensureReady before readiness returns (PeerAuthority.workflow.test.ts about lines 965-971). After that wait, shutdownDevice builds postShutdown and POSTs /api/devices/shutdown or the iOS grid shutdown. hubJson only performs HTTP and schema decode. Nothing calls recheckAction between the return of ensureReady and that POST.

Screenshot was repaired on this head by calling recheckAction again after resolveDevice and immediately before the PNG HTTP (screenshot, about lines 1054-1058). Shutdown has no equivalent line.

The iOS branch wraps postShutdown in Effect.catch. When the follow-up device list reports booted === false, the caught failure becomes success. A denial placed inside that pipe can be reported as an already-stopped simulator. The check belongs after readiness returns and before either platform POST, so a refusal stays a refusal.

Reachable trigger: an authorized caller opens a permitted emulator, then calls registered device_close with shutdown: true. During ensureReady, the live device grant is retired (PeerAuthority.setGrant with device: false), the same hook the passing read-capture case uses. Readiness has already passed its pre-wait check. The shutdown POST is not checked again.

Actual: the hub mutation is reached under a grant that is no longer current. Wanted: reauthorize the original invocation after readiness and immediately before shutdown dispatch. Keep native UI compatibility when there is no MCP scope (recheckAction already returns in that case). Keep the refusal outside the iOS already-stopped recovery. Preserve started, unknown, and no-repeat receipt behavior.

Proof: source control flow above, on this exact head. The passing workflow run does not observe this POST. Its fixture answers non-screenshot hub URLs with a device list, not {ok:true}, and it does not count shutdowns. This review did not add that counter. The absence of the check is in the owner that screenshot now has.

R1 responses checked on this head

  1. Read capture: repaired for the reported mechanism. recheckAction uses McpInvocationContext and does not return early just because CurrentRequest is absent. screenshot rechecks after readiness and before the PNG HTTP. review383-read-capture passed in this run (603ms): the readiness hook retires the device grant, the call is an error, and deviceScreenshotCalls stays unchanged.
  2. Catalog: repaired. device_commands and device_execute have Discover/Discovering/Discovered and Execute/Executing/Executed, icon device, summary action device. Effect annotations keep discovery read-only and closed-world, and execution mutating and open-world. core.test.ts (17) and t3McpToolPresentation.test.ts (11) passed, including the mcp__t3-code__ names.
  3. Effect policy: repaired. Record and trace JSON uses module-hoisted Schema.decodeUnknownEffect(Schema.fromJsonString(Schema.Unknown)). The workflow test imports effect/Crypto and does not import node:crypto. Real server tsc-rs --noEmit exited 0 with 0 errors, 0 warnings, and 261 suggestions. No suppression was added for this repair.
  4. Literal fill: repaired. Empty text is the positional "" after --, with stdin omitted. Nonempty text uses --text-stdin and text + "\r\n". The pinned 0.21.25 reader strips one trailing CRLF, otherwise one trailing LF. This review fed that compiler shape into the real extracted runner. Empty, abc, abc\r, lone LF, CRLF, first\nsecond, --config /rival, quoted Unicode, lone CR, a\r\nb, and '界'.repeat(16384) all came back equal to the original text. The max case was 49154 stdin bytes, under 65536. typed383-literals passed (1588ms).
  5. Deep link: repaired. open appends the optional url after the app, after --. The pinned reader returned {app:"com.example.app", url:"example://settings?tab=one"} and accepted an 8192-character example:// URL. The public schema still rejects a flag-like url, a newline, and an oversize url (InvalidParams). The parser itself accepts a positional --config and an oversize URL. The schema is the bound.
  6. Local auto: repaired. recheckInvocation no longer requires unconditional full-access or default. It denies only when exceededDispatchModeLimit says the target runtime or interaction outranks the caller. Same-target auto remains allowed. Auto to full-access, and plan to default, stay denied. Plan versus plan is not an escalation. No new plan grant was added. review383-local-auto ran inside the 113-pass file.

Independent execution

Node v24.18.0 on PATH="/opt/homebrew/opt/node@24/bin:$PATH".

Domain, exit 0, log /tmp/chromeria-383-core-r2-grok/domain.log. 9 files, 133 passed, 28.17s, start 14:20:14. Files: t3McpToolPresentation.test.ts 11, AgentDeviceCommand.test.ts 9, DeviceService.test.ts 25, McpDeviceToolkit.test.ts 3, McpToolAccess.test.ts 46, core.test.ts 17, PeerForwarding.test.ts 4, DeviceCommands.registered.test.ts 11, PeerAuthority.test.ts 7.

./node_modules/.bin/vp test run \
  packages/shared/src/t3McpToolPresentation.test.ts \
  apps/server/src/device/AgentDeviceCommand.test.ts \
  apps/server/src/device/DeviceService.test.ts \
  apps/server/src/mcp/McpDeviceToolkit.test.ts \
  apps/server/src/mcp/McpToolAccess.test.ts \
  apps/server/src/mcp/toolkits/core.test.ts \
  apps/server/src/peer/PeerForwarding.test.ts \
  apps/server/src/device/DeviceCommands.registered.test.ts \
  apps/server/src/peer/PeerAuthority.test.ts

Server types, exit 0, log /tmp/chromeria-383-core-r2-grok/tsc.log, 113290 bytes. error TS 0, warning 0, suggestion lines 261.

(cd apps/server && ../../node_modules/.bin/tsc-rs --noEmit)

Workflow, exit 0, log /tmp/chromeria-383-core-r2-grok/workflow.log. 1 file, 113 passed, 343.40s, start 14:22:40. Named passes include review383-read-capture and typed383-literals. review383-local-auto emitted its registered stdout in that same run.

./node_modules/.bin/vp test run apps/server/src/peer/PeerAuthority.workflow.test.ts

Pinned parser: extracted /tmp/chromeria-383-map/pinned/package package.json version 0.21.25, observer /tmp/chromeria-383-map/pinned-parser-observer.mjs, no daemon and no fresh npm install. Argv and stdin were reconstructed from this worktree's AgentDeviceCommand.ts. Fill cases above returned parsed.result.text === text. Open returned the compiled app and url. Package bytes were not checked against the published tarball.

After the workflow command, git status --porcelain was empty, HEAD and tree matched the identity above. The same was true immediately before this comment.

Limits

  • No product server, browser, device, provider prompt, install, grant, or live user data.
  • Dependencies were parent-prepared in this worktree only (cached, offline, frozen lockfile, ignore-scripts, copy). node_modules/.bin/vp was present. Log /tmp/chromeria-383-core-r2-grok-deps.log. That preparation is not native setup proof. feat(peer): complete all-tool cross-machine workflows across web desktop and mobile #386 stays an unchanged known gap.
  • ProjectionStore, lint, fmt, fork-check, and repo-wide gates were not run. CI remains the parent gate.
  • The shutdown finding is source control flow. This review did not re-execute a shutdown counter fixture.
  • The parser probe is not installed-runtime acceptance.
  • No status, merge, push, or Issue edit.

Coverage boundary

Read the cumulative 19 paths, not only the repair commit: contracts device.ts, AgentDeviceCommand and its test, DeviceCommands.registered.test.ts, DeviceService, DeviceToolchain, both legacy device fixtures, McpDeviceToolkit.test.ts, device handlers and tools, PeerAuthority and the workflow test, PeerForwarding, shared presentation and its test, docs/fork-features.md, docs/map.md, and scripts/fork-upstream-edits.txt.

Existing batch, lock, generation, namespace, receipt, artifact, and returned-ceiling checks remain in the owners this candidate calls. commandCatalog still does not recheck a retired device grant. It returns static command names, not a capture, so it is not filed. type and clipboard text stay positionals after --, matching the pinned CLI. Doctor targetApp is a bounded string placed before private flags. This review did not start the daemon to probe last-wins parsing. Docs describe this typed core and do not claim the rest of #383 is done.

@lukemaj

lukemaj commented Oct 18, 2026

Copy link
Copy Markdown
Contributor Author

What: BOTH independent whole-core R2 reviews REQUEST_CHANGES at 8c1f43c4dc22be7c50891b1d57e6a10bb8743e19; one shared shutdown-authority mechanism is accepted.
Why: The existing shutdown owner waits on readiness, then dispatches without rechecking the original current authority. Sol reproduced actual hub dispatch after real grant retirement; Grok independently traced the same source boundary. All six R1 mechanisms are independently reported repaired.
So what: The same #383 owner completes the bounded shutdown repair and exact-candidate proof. Both fresh whole MEDIUM reviews, current CI and primary actual acceptance remain required on the new candidate; no merge or whole-#383 acceptance.

Requirements and who asked: User frozen #379 v5/#383 and original whole-component review briefs require current original authority before native effects and both independent exact-candidate reviews.
Deleted: Duplicate fixes for one mechanism, treating majority agreement as proof, old verdict transfer, iOS recovery swallowing authorization refusal, changing immutable reviewer heads and an unsupported universal automatic-install gate.
Bottleneck: Same-owner native shutdown repair/proof, then both fresh exact-candidate verdicts and actual primary acceptance.
Checked myself: Read BOTH complete reports below, Sol's actual shutdown-native patch/log and shared source945-1042. Native lawful count1 then device:false/count2/publicsuccess discriminates the defect; the source lacks the post-readiness check. Grok's finding is source evidence, not independently repeated shutdown execution. Both returned/persisted actual selections match requested MEDIUM; task results completed/no child runs.

Identity: HEAD8c1f43c4dc22be7c50891b1d57e6a10bb8743e19/tree87deab604e5dee110a36db9e2317170fb346b49f/baseecd06ef5e620191626d15b559dc663644ad59649. Sol #421 (comment) ; Grok #421 (comment) . Both whole reports remain unchanged below. Installed Grok CLI grok/grok-4.7/MEDIUM and Codex codex/gpt-6.1-sol/MEDIUM; no fallback. Parent owns authenticated aggregate failure status. No review or check from 8c1 transfers to a repair.

Adjudication: ACCEPT BOTH R2 F1 as ONE mechanism. Same existing shutdown owner must recheck original invocation after readiness and immediately before platform dispatch, OUTSIDE iOS already-stopped recovery. Retain UI/no-MCP compatibility, current ALL/source/target ceilings, native receipt started/unknown/no-repeat and later independent opening behavior. Parent authorized sole author via3836249923584; no API/policy/grant/namespace expansion, topology change or product fixture/device/provider operation. Retain actual Android+iOS lawful positive/revocation zero-new-dispatch and iOS bootedfalse refusal, restored-grant replay/no-repeat/later opening controls. Author-reported red2/green2 remain authored evolving-source observations until stable handoff and independent review. Mechanical it.live.each registration repair must retain original assertions and be proved on final exact source, not relabel the preceding115 run.

Proof disposition: Grok full113PASS343.40s, domain133PASS and actual server types exit0 apply immutable8c1 only. Sol full112PASS/1FAILED fixture discovery before policy assertion plus unchanged isolated1PASS remain separate; original failure causeUNKNOWN and not green113. Sol156focused/41projection/10parser/servertypes passes retain identities. Parent source CI success/transfer ceilings do not override rejected implementation. No physical shutdown or installed-runtime acceptance was executed by either reviewer.

Preparation clarification: Grok's unchanged report calls386 a known gap. The authoritative diagnosis #386 (comment) supersedes that unsupported automatic-installer assumption: linked-origin scripts intentionally skip and saved actions empty. Explicit parent prep is manual and succeeded; no configured installer failure or new automatic-install gate established. This wording correction neither edits their report nor clears unrelated physical/lifecycle acceptance.

Mandatory next-round inputs: original complete brief /tmp/chromeria-383-core-r1-review-brief.txt, complete R2 brief /tmp/chromeria-383-core-r2-review-brief.txt, original3836249438919/fullremainingmap6248805292, full R1/author packet3836249750119, BOTH reports below, full current parent decisions and author responses/limits/new proof. Final #383 viewer/relay/qualified acquisition-fetch/browser/all-client work stays required downstream partial core. Keep all evidence/resources until final379.

FULL unchanged Sol R2 report

What: REQUEST_CHANGES for the whole partial #383 core at 8c1f43c4dc22be7c50891b1d57e6a10bb8743e19.
Why: The six R1 mechanisms are repaired, but the registered shutdown path still executes after readiness retires the real device grant.
So what: The existing owner should revalidate immediately before native shutdown, preserve the current protections, and submit the resulting candidate for both fresh reviews; #379 retains aggregate status, CI and acceptance ownership.

Requirements and who asked: The user's whole-component R2 brief, frozen #379 v5 and #383 require current original authority at real device effects, faithful pinned command semantics, native resource/receipt ownership and local compatibility. This supports Promachos and Drafters operating across environments.
Deleted: Split lenses, treating six repairs as exhaustive, transferred approvals, generic shell/proxy execution, source repairs, delegation and demands for deferred viewer implementation. No status, merge, push, installation or grant expansion was performed.
Bottleneck: Revalidate the original invocation after shutdown readiness and before the hub mutation, then obtain exact-candidate review and parent-owned proof.
Checked myself: Read all 19 cumulative changed paths and relevant consumers, the complete original brief/historical handoff, parent adjudication, both R1 reports and all responses. Independently ran native, domain/catalog/consumer, projection, exact pinned-parser and real server compiler checks. A separate native shutdown counterexample fails after a lawful positive. Candidate tracked bytes remain clean and unchanged.

Identity and authority

  • PR: feat(device): add typed remote device execution core #421, OPEN, base feat/379-cross-machine-parity. Live head matched before review and is rechecked at publication.
  • HEAD 8c1f43c4dc22be7c50891b1d57e6a10bb8743e19; tree 87deab604e5dee110a36db9e2317170fb346b49f.
  • Base and actual merge base ecd06ef5e620191626d15b559dc663644ad59649.
  • Exclusive app-bound workspace /Users/rocky/.t3/worktrees/chromeria/review-379-383-core-r2-codex-8c1f43c, branch review/379-383-core-r2-codex-8c1f43c. I did not author this candidate.
  • Actual reviewer selection: Codex harness, codex / gpt-6.1-sol / reasoningEffort=medium. Live catalog supports the requested selection; t3_thread_read reports the current run on that provider/model. A read-only query restricted to this thread's persisted projection independently returns modelSelection={"instanceId":"codex","model":"gpt-6.1-sol","options":[{"id":"reasoningEffort","value":"medium"}]}. No fallback or delegation occurred. The catalog's low default was not substituted.
  • PR421 was registered with link_pull_request; list_thread_pull_requests confirms the link. No aggregate review status was changed.
  • Dependencies were initially absent. Execution began only after the parent's explicit cached/offline/frozen-lockfile/ignore-scripts/copy preparation EXIT0 for this exact workspace. Log /tmp/chromeria-383-core-r2-codex-deps.log. This is manual preparation, not automatic setup proof. The corrected feat(peer): complete all-tool cross-machine workflows across web desktop and mobile #386 diagnosis supplies no demonstrated installer failure or additional automatic setup gate.

Required finding

R2 F1, P1: shutdown dispatch skips current authority after readiness

Location: DeviceService.ts:950, with the actual hub dispatch at DeviceService.ts:961. Reachable from registered device_close with shutdown:true, through close at lines 1013-1036.

An authorized A-only caller opens its permitted B emulator and calls device_close with shutdown:true. close checks authority before retiring the command session. shutdownDevice subsequently waits on readiness(hostId). Readiness checks before entering the external host's ensureReady, but shutdown performs no current invocation check after that wait and before POSTing the shutdown request. Retiring the real B device grant during that external readiness callback therefore does not prevent the new shutdown effect. The shared function covers both Android /api/devices/shutdown and iOS grid shutdown.

I reproduced this through the existing finite registered source/destination HTTP/auth/control/SQLite fixture and real native DeviceService/PeerAuthority/receipt owners. The only fixture extension was an external hub shutdown leaf that counts requests and returns its actual expected {ok:true} wire response. The existing readiness hook calls production PeerAuthority.setGrant({...grant,device:false}). No policy result, SQL result, native service or assertion was replaced or weakened. A lawful open/shutdown succeeds first and establishes shutdown count 1; after reopening, grant retirement occurs during the next readiness callback.

Observed result:

{"revoked":{"structuredContent":{},"isError":false,"content":[{"type":"text","text":"{}"}]},"armed":false,"device":false,"shutdowns":2}

The required invariant fails with no new shutdown after observed grant retirement: expected 2 to be 1. The second native shutdown request reached the external leaf and the public call reported success. This is an additional effect after a real policy change at a wait boundary, not a demand for distributed atomic revocation. The deterministic leaf proves dispatch, not physical device power state.

Required correction: reauthorize the original authenticated invocation after readiness and immediately before each shutdown dispatch, preserving native UI compatibility and the existing unknown/no-reexecution receipt owner. Keep authorization refusal outside the iOS already-stopped recovery that can otherwise turn a caught failure into success. Retain a lawful shutdown positive and the native revocation refusal.

Evidence: /tmp/review383-r2-codex/shutdown-native.log, shutdown-native.patch, shutdown-native.test.ts. The temporary sibling scratch test reused the unchanged fixture imports, ran only this additional case, and was removed afterwards. No tracked source or test bytes were edited. The source-only candidate and manifest still match the immutable head. Earlier attempts to run a copied fixture from /tmp failed module/mock setup before any tests; those are retained separately as setup failures and are not product failures.

R1 responses independently checked

  1. F1 read capture: repaired for the reported mechanism. recheckAction now obtains verified invocation independently of CurrentRequest, and screenshot rechecks after readiness immediately before capture. The native lawful PNG plus readiness-time grant retirement case passes without weakening the capture-started receipt assertion; its real held click remains. The new shutdown finding is a separate remaining lifecycle boundary, not a claim that the capture repair failed.
  2. F2 catalog and consumers: repaired. Both device_commands and device_execute have nonempty lifecycle labels, device icon and device summary action in the shared owner. The unchanged published-tool completeness gate passes. Provider aliases and existing client-runtime summaries pass. Discovery remains read-only/closed-world; execution remains mutating/open-world. Shared presentation covers web, desktop and mobile consumers without new client source changes.
  3. F3 real Effect gate: repaired. Production JSON parsing uses a module-hoisted Schema.fromJsonString(Schema.Unknown) decoder. Workflow digest observations use Effect Crypto/Hex. The registration fixture composes independent layers without the prior chained-provide warnings. I ran the actual apps/server workspace ../../node_modules/.bin/tsc-rs --noEmit: exit0, no errors or warnings, 261 suggestions. Compiler package is 0.7.0; the retained exact compiler source defaults ignore_effect_warnings_in_tsc_exit_code to false. No policy, config, dependency or suppression changes appear in the cumulative diff.
  4. F4 literal fill: repaired. Empty fill uses the supported empty positional after --. Nonempty fill appends CRLF to stdin; the exact pinned reader removes that framing while preserving the original ending. The independent run feeds current production compiler output into extracted agent-device0.21.25's real reader, with only the terminal interaction leaf recording the parsed text. Empty, ordinary text, CR, LF, CRLF, multiline, flag-like strings, quotes, Unicode and 16,384 multibyte characters all pass. Maximum tested input is 49,152 UTF-8 bytes plus 2 framing bytes, below 65,536. This is pure parser proof, not installed-runtime acceptance.
  5. F5 deep link: repaired. The bounded optional open.url maps literally alongside the app after private flags and --; the actual pinned reader accepts the produced pair. Registered native dispatch/replay and malformed URI InvalidParams cases pass. No fetch/proxy or new capability is introduced.
  6. F6 local mode: repaired. The unconditional full-access/default test is gone; target-relative comparison and current returned capability ceiling remain. The keyed same-thread local-auto positive passes, while remote auto-to-full and current-mode refusals remain covered. No blanket plan grant is introduced. The historical inconclusive legacy-positive probe remains inconclusive.

Original R1 reports, failures and adjudications remain historical evidence. No verdict or old test count is transferred to this head.

Whole-component coverage and remaining boundaries

Read all 19 cumulative paths: contracts device.ts; AgentDeviceCommand and its test; DeviceCommands.registered.test; DeviceService; DeviceToolchain; both LegacyDevice fixture files; McpDeviceToolkit.test; device handlers/tools; PeerAuthority and its whole workflow diff; PeerForwarding; shared presentation and its test; fork-features, map and upstream-edit allowlist. Reviewed the full cumulative implementation, not just the repair commit.

Traced current consumers at McpHttpServer registration/image output, toolkit composition and provider-facing names, McpToolAccess, McpRouting, McpSessionRegistry, request namespace/generation and receipts, native server composition, local/SSH device readiness/bindings, shared presentation/client summaries, and AttachmentStaging verification/publication/recording/discard owners. The original actor remains the invocation owner. Current source project settings narrow original root record capabilities before recursive ALL-owner intersection; checkThread returns the narrowed ceiling and registry/routing intersect it. executeCommand consumes recheckInvocation's returned scope. Created-work and environment-resource policy, contributor arithmetic, task-stop validation, generation and namespace semantics remain at their existing owners.

Authenticated pre-open discovery prepares a distinct READ device_commands envelope bound to the original link generation, decodes the actual catalog, and does not borrow the mutation envelope or cache support. Actual requests-v1/old-domain refusal and requests-v0 refusal remain in the native suite. Returned discovery/snapshot guidance carries destination environment/context and runs unchanged from A. Modern guidance does not expose B-local executable/config/daemon material; legacy local unkeyed guidance stays explicit.

Closed command schemas, exact host/device/platform/opening UUID, original request namespace/generation, lock/preflight checks, per-step revalidation, capability identity/platform/kind matching, started-before-external preparation, unknown/no-repeat receipts, old-opening denial after reopen, reconstruction/relink behavior, qualified artifact owner/digest/size/manifest checks and private producer containment remain present and covered by passing current tests. S7 retained keyed-discard bytes and S8 first-publication CAS/digest/owner/exclusive-copy guards remain at AttachmentStaging, unchanged by this candidate. No additional supported blocker emerged in those inspected paths. These observations do not erase the shutdown exception above.

This is partial #383 core only. Source-owned viewer sessions/tickets, resource-bound authenticated allowlisted hub/preview relays, browser control/media, public qualified input acquisition, source-authenticated artifact fetch, and web/desktop/mobile navigation/reconnect/close/reopen remain required downstream work under the accepted owner map. This review neither blocks core merely for that deferred work nor claims whole #383/#379 acceptance. Existing provider adapters consume the common toolkit; no harness-specific device feature or live provider behavior is claimed. Physical hardware, OS process death, playable recording and real source-only installed-runtime/client usability remain parent proof.

Independent execution and limits

Every command used Node v24.18.0 with PATH=/opt/homebrew/opt/node@24/bin:$PATH, in this review workspace. Logs are retained under /tmp/review383-r2-codex.

./node_modules/.bin/vp test run apps/server/src/peer/PeerAuthority.workflow.test.ts
  exit1,112 passed/1 failed of113,339.18s; workflow.log
  failure: round7 private webhook URLs, PeerLinkError during fixture linking:
  "Nothing at http://127.0.0.1:62589 answered as a T3 Code environment."
./node_modules/.bin/vp test run apps/server/src/peer/PeerAuthority.workflow.test.ts -t 'round7: private webhook URLs retain current originating runtime after source narrowing'
  exit0,1 passed/112 skipped,11.57s; webhook-rerun.log
./node_modules/.bin/vp test run apps/server/src/device/AgentDeviceCommand.test.ts apps/server/src/device/DeviceCommands.registered.test.ts apps/server/src/device/DeviceService.test.ts apps/server/src/mcp/McpDeviceToolkit.test.ts apps/server/src/mcp/toolkits/core.test.ts packages/shared/src/t3McpToolPresentation.test.ts apps/server/src/peer/PeerAuthority.test.ts apps/server/src/peer/PeerForwarding.test.ts apps/server/src/mcp/McpToolAccess.test.ts packages/client-runtime/src/t3ToolSummary.test.ts
  exit0,156 passed/10files,32.18s; domain.log
./node_modules/.bin/vp test run apps/server/src/orchestration-v2/ProjectionStore.test.ts
  exit0,41 passed,3.70s; projection.log
(cd apps/server) ../../node_modules/.bin/tsc-rs --noEmit
  exit0,0errors/0warnings/261suggestions; server-types.log
./node_modules/.bin/vp test run --config /tmp/review383-r2-codex/parser.config.ts
  exit0,10 passed,2.25s; parser.log
./node_modules/.bin/vp test run apps/server/src/peer/Review383R2Scratch.test.ts -t review383-r2-shutdown
  exit1,1 failed/113 skipped,12.00s; shutdown-native.log
  lawful shutdown passes; retired-grant shutdown reaches external leaf and returns success
bash scripts/fork-check.sh --upstream upstream
  exit0,42features; fork.log
 git diff --check; git status --porcelain
  exit0; clean after removing only the reviewer-created scratch file

The full native run is not reported as a passing 113-case run. Its one failure occurred at fixture peer discovery before the webhook policy assertion; the unchanged isolated rerun passes. I have no supported cause for that transient discovery failure and file no additional product finding from it. Parent must retain both observations when assessing proof. The 112 passing cases include the current read-capture, local-auto, typed literals and preservation cases. Totals are not summed into a fictitious single complete gate.

Candidate manifest: /tmp/review383-r2-codex/candidate-manifest.json binds all 19 paths. Full local report: /tmp/review383-r2-codex/report.md. All failing observations and scratch proof are retained. No repo-wide check, product server, browser, device session, provider prompt, live-userdata write, runtime install, new consent/grant, other-worktree write, merge, push, version change, Issue close or resource retirement was performed. Only this review thread's model-selection projection was read from live state, read-only. Scoped HTTP/auth/SQLite fixtures use disposable state and deterministic external leaves.

Verdict applies only to the exact head/tree/base above. Parent owns aggregate independent status and current CI; a source repair needs both new exact-candidate review rounds. Resources and evidence remain retained for final #379 acceptance.

FULL unchanged Grok R2 report

What: REQUEST_CHANGES for the whole partial #383 core at 8c1f43c4dc22be7c50891b1d57e6a10bb8743e19.
Why: The six R1 repairs hold, and registered device_close with shutdown: true still dispatches the hub shutdown after external readiness without a current-authority check.
So what: The same owner rechecks the original invocation after readiness and before the shutdown POST, keeps that refusal outside the iOS already-stopped recovery, and sends the next head to both fresh reviews. Parent owns aggregate status. This review does not merge, push, or change Issues.

Verdict

REQUEST_CHANGES for #421 at 8c1f43c4dc22be7c50891b1d57e6a10bb8743e19.

This is a whole-component review of the partial #383 typed device core. It is not whole-#383 acceptance. Viewer sessions, resource tickets, hub and preview relays, public qualified fetch, browser control, and all-client lifecycle stay required downstream. Resources stay until final #379.

Elon record

Requirements and who asked: The user, through frozen #379 and #383, required this independent Grok 4.7 medium whole-core review at this exact head, including current originating authority before each real device effect.
Deleted: Treating the six R1 repairs or a green 113-case workflow as acceptance. Split lenses, tracked edits, status or merge changes, a new plan grant, and a demand to implement the deferred viewer in this candidate.
Bottleneck: shutdownDevice waits on readiness, then posts shutdown with no further recheckAction. The iOS already-stopped recovery can turn a caught failure into success, so the new check has to sit outside that recovery.
Checked myself: Read all 19 cumulative paths and the shutdown, close, readiness, screenshot, catalog, compiler, and authority owners. Ran the domain suite, real server tsc-rs, the workflow suite, and a pinned 0.21.25 parser probe in this worktree. HEAD, tree, and merge-base were rechecked clean before this comment.

Identity

  • Reviewer: installed Grok harness, persisted selection grok / grok-4.7 / reasoningEffort=medium from this thread's t3_thread_configuration. No model, effort, or harness fallback, and no delegated child.
  • PR: feat(device): add typed remote device execution core #421
  • Worktree: /Users/rocky/.t3/worktrees/chromeria/review-379-383-core-r2-grok-8c1f43c, branch review/379-383-core-r2-grok-8c1f43c. I did not author this candidate.
  • HEAD: 8c1f43c4dc22be7c50891b1d57e6a10bb8743e19
  • Tree: 87deab604e5dee110a36db9e2317170fb346b49f
  • Base and merge-base: ecd06ef5e620191626d15b559dc663644ad59649
  • Range versus that base: 19 files, 6036 insertions, 264 deletions.
  • Node: /opt/homebrew/opt/node@24/bin, v24.18.0.
  • Local copy: /tmp/chromeria-383-core-r2-grok/report.md

Finding

R2 F1, P1. Shutdown dispatch skips current authority after readiness

Location: apps/server/src/device/DeviceService.ts shutdownDevice (about lines 945-991). Registered entry: device_close in apps/server/src/mcp/toolkits/device/handlers.ts (about lines 341-363) calls devices.close with shutdown: true. close (about lines 1013-1036) rechecks once, retires command sessions, then calls shutdownDevice. The direct shutdown service method (about lines 1039-1042), used by WS_METHODS.deviceShutdown, enters the same function.

shutdownDevice starts with readiness(hostId). readiness (about lines 346-390) calls recheckAction and then host.ensureReady. The workflow fixture runs deviceReadinessHook inside ensureReady before readiness returns (PeerAuthority.workflow.test.ts about lines 965-971). After that wait, shutdownDevice builds postShutdown and POSTs /api/devices/shutdown or the iOS grid shutdown. hubJson only performs HTTP and schema decode. Nothing calls recheckAction between the return of ensureReady and that POST.

Screenshot was repaired on this head by calling recheckAction again after resolveDevice and immediately before the PNG HTTP (screenshot, about lines 1054-1058). Shutdown has no equivalent line.

The iOS branch wraps postShutdown in Effect.catch. When the follow-up device list reports booted === false, the caught failure becomes success. A denial placed inside that pipe can be reported as an already-stopped simulator. The check belongs after readiness returns and before either platform POST, so a refusal stays a refusal.

Reachable trigger: an authorized caller opens a permitted emulator, then calls registered device_close with shutdown: true. During ensureReady, the live device grant is retired (PeerAuthority.setGrant with device: false), the same hook the passing read-capture case uses. Readiness has already passed its pre-wait check. The shutdown POST is not checked again.

Actual: the hub mutation is reached under a grant that is no longer current. Wanted: reauthorize the original invocation after readiness and immediately before shutdown dispatch. Keep native UI compatibility when there is no MCP scope (recheckAction already returns in that case). Keep the refusal outside the iOS already-stopped recovery. Preserve started, unknown, and no-repeat receipt behavior.

Proof: source control flow above, on this exact head. The passing workflow run does not observe this POST. Its fixture answers non-screenshot hub URLs with a device list, not {ok:true}, and it does not count shutdowns. This review did not add that counter. The absence of the check is in the owner that screenshot now has.

R1 responses checked on this head

  1. Read capture: repaired for the reported mechanism. recheckAction uses McpInvocationContext and does not return early just because CurrentRequest is absent. screenshot rechecks after readiness and before the PNG HTTP. review383-read-capture passed in this run (603ms): the readiness hook retires the device grant, the call is an error, and deviceScreenshotCalls stays unchanged.
  2. Catalog: repaired. device_commands and device_execute have Discover/Discovering/Discovered and Execute/Executing/Executed, icon device, summary action device. Effect annotations keep discovery read-only and closed-world, and execution mutating and open-world. core.test.ts (17) and t3McpToolPresentation.test.ts (11) passed, including the mcp__t3-code__ names.
  3. Effect policy: repaired. Record and trace JSON uses module-hoisted Schema.decodeUnknownEffect(Schema.fromJsonString(Schema.Unknown)). The workflow test imports effect/Crypto and does not import node:crypto. Real server tsc-rs --noEmit exited 0 with 0 errors, 0 warnings, and 261 suggestions. No suppression was added for this repair.
  4. Literal fill: repaired. Empty text is the positional "" after --, with stdin omitted. Nonempty text uses --text-stdin and text + "\r\n". The pinned 0.21.25 reader strips one trailing CRLF, otherwise one trailing LF. This review fed that compiler shape into the real extracted runner. Empty, abc, abc\r, lone LF, CRLF, first\nsecond, --config /rival, quoted Unicode, lone CR, a\r\nb, and '界'.repeat(16384) all came back equal to the original text. The max case was 49154 stdin bytes, under 65536. typed383-literals passed (1588ms).
  5. Deep link: repaired. open appends the optional url after the app, after --. The pinned reader returned {app:"com.example.app", url:"example://settings?tab=one"} and accepted an 8192-character example:// URL. The public schema still rejects a flag-like url, a newline, and an oversize url (InvalidParams). The parser itself accepts a positional --config and an oversize URL. The schema is the bound.
  6. Local auto: repaired. recheckInvocation no longer requires unconditional full-access or default. It denies only when exceededDispatchModeLimit says the target runtime or interaction outranks the caller. Same-target auto remains allowed. Auto to full-access, and plan to default, stay denied. Plan versus plan is not an escalation. No new plan grant was added. review383-local-auto ran inside the 113-pass file.

Independent execution

Node v24.18.0 on PATH="/opt/homebrew/opt/node@24/bin:$PATH".

Domain, exit 0, log /tmp/chromeria-383-core-r2-grok/domain.log. 9 files, 133 passed, 28.17s, start 14:20:14. Files: t3McpToolPresentation.test.ts 11, AgentDeviceCommand.test.ts 9, DeviceService.test.ts 25, McpDeviceToolkit.test.ts 3, McpToolAccess.test.ts 46, core.test.ts 17, PeerForwarding.test.ts 4, DeviceCommands.registered.test.ts 11, PeerAuthority.test.ts 7.

./node_modules/.bin/vp test run \
  packages/shared/src/t3McpToolPresentation.test.ts \
  apps/server/src/device/AgentDeviceCommand.test.ts \
  apps/server/src/device/DeviceService.test.ts \
  apps/server/src/mcp/McpDeviceToolkit.test.ts \
  apps/server/src/mcp/McpToolAccess.test.ts \
  apps/server/src/mcp/toolkits/core.test.ts \
  apps/server/src/peer/PeerForwarding.test.ts \
  apps/server/src/device/DeviceCommands.registered.test.ts \
  apps/server/src/peer/PeerAuthority.test.ts

Server types, exit 0, log /tmp/chromeria-383-core-r2-grok/tsc.log, 113290 bytes. error TS 0, warning 0, suggestion lines 261.

(cd apps/server && ../../node_modules/.bin/tsc-rs --noEmit)

Workflow, exit 0, log /tmp/chromeria-383-core-r2-grok/workflow.log. 1 file, 113 passed, 343.40s, start 14:22:40. Named passes include review383-read-capture and typed383-literals. review383-local-auto emitted its registered stdout in that same run.

./node_modules/.bin/vp test run apps/server/src/peer/PeerAuthority.workflow.test.ts

Pinned parser: extracted /tmp/chromeria-383-map/pinned/package package.json version 0.21.25, observer /tmp/chromeria-383-map/pinned-parser-observer.mjs, no daemon and no fresh npm install. Argv and stdin were reconstructed from this worktree's AgentDeviceCommand.ts. Fill cases above returned parsed.result.text === text. Open returned the compiled app and url. Package bytes were not checked against the published tarball.

After the workflow command, git status --porcelain was empty, HEAD and tree matched the identity above. The same was true immediately before this comment.

Limits

  • No product server, browser, device, provider prompt, install, grant, or live user data.
  • Dependencies were parent-prepared in this worktree only (cached, offline, frozen lockfile, ignore-scripts, copy). node_modules/.bin/vp was present. Log /tmp/chromeria-383-core-r2-grok-deps.log. That preparation is not native setup proof. feat(peer): complete all-tool cross-machine workflows across web desktop and mobile #386 stays an unchanged known gap.
  • ProjectionStore, lint, fmt, fork-check, and repo-wide gates were not run. CI remains the parent gate.
  • The shutdown finding is source control flow. This review did not re-execute a shutdown counter fixture.
  • The parser probe is not installed-runtime acceptance.
  • No status, merge, push, or Issue edit.

Coverage boundary

Read the cumulative 19 paths, not only the repair commit: contracts device.ts, AgentDeviceCommand and its test, DeviceCommands.registered.test.ts, DeviceService, DeviceToolchain, both legacy device fixtures, McpDeviceToolkit.test.ts, device handlers and tools, PeerAuthority and the workflow test, PeerForwarding, shared presentation and its test, docs/fork-features.md, docs/map.md, and scripts/fork-upstream-edits.txt.

Existing batch, lock, generation, namespace, receipt, artifact, and returned-ceiling checks remain in the owners this candidate calls. commandCatalog still does not recheck a retired device grant. It returns static command names, not a capture, so it is not filed. type and clipboard text stay positionals after --, matching the pinned CLI. Doctor targetApp is a bounded string placed before private flags. This review did not start the daemon to probe last-wins parsing. Docs describe this typed core and do not claim the rest of #383 is done.

@lukemaj

lukemaj commented Oct 18, 2026

Copy link
Copy Markdown
Contributor Author

What: APPROVE the partial #383 typed device core at b809668235ee1a0a3add46e0308f0ad0dbacfa61.
Why: Shutdown now rechecks the original invocation after readiness and before either hub POST, outside the iOS already-stopped recovery, and the six R1 mechanisms still hold on this head.
So what: #379 owns aggregate status, current CI, and actual acceptance. Viewer sessions, resource tickets, allowlisted hub and preview relays, public qualified acquisition and source-authenticated fetch, browser control, and all-client lifecycle remain required. This review does not merge, push, or change Issues.

Elon record

Requirements and who asked: The user, through frozen #379 and #383, required this independent Grok 4.7 medium whole-core review of all 19 paths at this exact head, including the R2 shutdown repair and every prior R1 and R2 response.
Deleted: Transferred verdicts, split lenses, tracked edits, status or merge changes, a demand to build the deferred viewer in this candidate, and an installer-failure claim from manual dependency preparation.
Bottleneck: The new check has to sit after readiness and before both platform POSTs, so an iOS already-stopped recovery cannot turn a refusal into success.
Checked myself: Read all 19 cumulative paths and the shutdown, close, capture, catalog, compiler, forwarding, and authority owners. Ran the native workflow suite, the focused domain suite, and server tsc-rs in this worktree. Rechecked HEAD, tree, merge-base, live PR head, and the persisted selection.

Verdict

APPROVE for #421 at b809668235ee1a0a3add46e0308f0ad0dbacfa61.

This is a whole-component review of the partial #383 core. It is not whole-#383 acceptance. No required finding.

Identity

  • Reviewer: installed Grok harness. Persisted t3_thread_configuration is {"instanceId":"grok","model":"grok-4.7","options":[{"id":"reasoningEffort","value":"medium"}]}. Live catalog includes grok / grok-4.7. The catalog composer's displayed reasoning default is high; this thread's persisted option is medium. No model, effort, or harness fallback, and no delegated child.
  • Worktree: /Users/rocky/.t3/worktrees/chromeria/review-379-383-core-r3-grok-b809668, branch review/379-383-core-r3-grok-b809668. I did not author this candidate.
  • HEAD: b809668235ee1a0a3add46e0308f0ad0dbacfa61
  • Tree: abf9ca0e7ecb6a557127d9ce88bdca2466d62258
  • Base and merge-base: ecd06ef5e620191626d15b559dc663644ad59649
  • Live PR head immediately before this comment: the same SHA, OPEN, base feat/379-cross-machine-parity.
  • Range versus that base: 19 files, 6104 insertions, 218 deletions.
  • Versus prior immutable 8c1f43c4: only apps/server/src/device/DeviceService.ts and apps/server/src/peer/PeerAuthority.workflow.test.ts. The production delta is one yield* recheckAction after readiness and before the platform branch.
  • Node: /opt/homebrew/opt/node@24/bin, v24.18.0.
  • Local copy: /tmp/chromeria-383-core-r3-grok/report.md
  • PR 421 is linked on this thread.

R2 shutdown repair

shutdownDevice waits on readiness, which rechecks and then ensureReady. The new recheckAction runs after that wait returns and before postShutdown. The iOS Effect.catch wraps only the grid POST. A refusal therefore stays a refusal when the hub list would report booted === false. Android uses /api/devices/shutdown. Both device_close with shutdown: true and the direct shutdown service method enter this owner. recheckAction returns immediately when there is no MCP invocation, so native UI and unkeyed local shutdown keep their existing owner.

The registered workflow cases typed383-shutdown for android and ios do the required sequence: a lawful open and shutdown (count 1), a reopen, real setGrant({device:false}) inside the external readiness hook, and deviceHubBooted=false so an iOS recovery cannot hide the denial. The revoked close is a public error containing outcome_unknown, shutdown POSTs stay at 1, a started receipt remains, restoring the grant and replaying the same key does not POST again, a later opening's old close does not POST, and a typed click on the later opening succeeds.

Both cases passed in this run: android 983ms, ios 908ms.

Prior R1 mechanisms on this head

  1. Read capture: recheckAction reads McpInvocationContext and does not return early merely because CurrentRequest is absent. screenshot rechecks after resolveDevice and before the PNG HTTP. review383-read-capture passed (716ms). The device_screenshot failed warnings in that case are the denial (OrchestratorMcpFailure), and the test passed.
  2. Catalog: device_commands and device_execute have Discover/Discovering/Discovered and Execute/Executing/Executed, icon device, and summary action device. Discovery is read-only and closed-world. Execution is mutating and open-world. The focused suite includes core.test.ts, t3McpToolPresentation.test.ts, and t3ToolSummary.test.ts.
  3. Effect policy: record and trace JSON uses module-hoisted Schema.decodeUnknownEffect(Schema.fromJsonString(Schema.Unknown)). The workflow test does not import node:crypto. Server tsc-rs --noEmit exited 0 with 0 errors, 0 warnings, and 261 suggestions.
  4. Literal fill: empty text is the positional "" after --. Nonempty text uses --text-stdin and text + "\r\n". typed383-literals passed (1581ms). AgentDeviceCommand.ts is unchanged since 8c1f43c4. This round did not re-execute the extracted pinned 0.21.25 parser.
  5. Deep link: optional open.url is appended after the app, after --. The public schema bounds length, scheme, and whitespace. The literals case dispatches example://settings?tab=one and rejects flag-like, newline, and oversize URLs as InvalidParams before footprints change.
  6. Local auto: recheckInvocation denies only when exceededDispatchModeLimit says the target outranks the caller. There is no unconditional full-access test. review383-local-auto ran inside the same 115-pass file. The historical inconclusive legacy-positive probe remains inconclusive.

Whole-component coverage

Read the cumulative 19 paths: packages/contracts/src/device.ts, AgentDeviceCommand and its test, DeviceCommands.registered.test.ts, DeviceService, DeviceToolchain, both legacy device fixtures, McpDeviceToolkit.test.ts, device handlers and tools, PeerAuthority and the workflow test, PeerForwarding, shared presentation and its test, docs/fork-features.md, docs/map.md, and scripts/fork-upstream-edits.txt.

open rechecks again after readiness and before boot, and again before an already-booted iOS grid start. executeCommand rechecks after preflight, after agent readiness, before the private config write, before capabilities, and before each CLI, capture, and publish step, and it keeps the returned ceiling. commandCatalog still returns the static command list after preflight and does not capture. PeerForwarding prepares a distinct read-only device_commands envelope on the original generation and decodes DeviceCommandCatalog before a forwarded open. Durable device_open refuses a physical device. Modern quickstart text is device_commands / device_execute JSON carrying environmentId and contextThreadId. The local executable quickstart remains only when there is no durable request. Local-thread root records pass currentCapabilities before intersection, so an originating project device setting narrows that ceiling. The fork-feature sentence describes this typed core. Panel action and detail still perform their hub call after resolveDevice without a second post-readiness recheck. They are not the registered typed command path, and recheckAction does not apply when no MCP scope is present. I am not filing that older panel shape.

S7 keyed discard and S8 first-publication guards stay in AttachmentStaging, which this range does not modify. Source-owned viewer sessions, resource tickets, allowlisted hub and preview relays, public qualified acquisition, source-authenticated fetch, browser control, and all-client lifecycle remain required downstream.

Independent execution

Every command used PATH="/opt/homebrew/opt/node@24/bin:$PATH" and Node v24.18.0 in this worktree.

Workflow, exit 0, log /tmp/chromeria-383-core-r3-grok/workflow.log. 1 file, 115 passed, 333.39s, start 14:53:57. Named passes include both shutdown platforms, review383-read-capture, and typed383-literals.

./node_modules/.bin/vp test run apps/server/src/peer/PeerAuthority.workflow.test.ts

Domain, exit 0, log /tmp/chromeria-383-core-r3-grok/domain.log. 10 files, 156 passed, 31.27s, start 14:55:20.

./node_modules/.bin/vp test run \
  packages/shared/src/t3McpToolPresentation.test.ts \
  apps/server/src/device/AgentDeviceCommand.test.ts \
  apps/server/src/device/DeviceService.test.ts \
  apps/server/src/mcp/McpDeviceToolkit.test.ts \
  apps/server/src/mcp/McpToolAccess.test.ts \
  apps/server/src/mcp/toolkits/core.test.ts \
  apps/server/src/peer/PeerForwarding.test.ts \
  apps/server/src/device/DeviceCommands.registered.test.ts \
  apps/server/src/peer/PeerAuthority.test.ts \
  packages/client-runtime/src/t3ToolSummary.test.ts

Server types, exit 0, log /tmp/chromeria-383-core-r3-grok/tsc.log. error TS 0, warning TS 0, suggestion 261.

(cd apps/server && ../../node_modules/.bin/tsc-rs --noEmit)

After these commands, git status --porcelain was empty and HEAD, tree, and merge-base still matched the identity above. The same was true immediately before this comment.

Limits

  • No product server, browser, device, provider prompt, live user data, new grant, or runtime install by this review.
  • Dependencies were parent-prepared in this worktree (cached, offline, frozen lockfile, ignore-scripts, copy). /tmp/chromeria-383-core-r3-grok-deps.log ends with pnpm Done in 54.9s, downloaded 0. node_modules/.bin/vp was present afterward. That preparation is not automatic setup proof. No installer failure is claimed. feat(peer): complete all-tool cross-machine workflows across web desktop and mobile #386 stays outside this verdict.
  • Author 115-case and 156-case runs are the author's claims. The counts above are this worktree's runs. Sol's earlier 112-pass and 1 fixture-discovery failure, cause UNKNOWN, plus the isolated rerun, remain an 8c1f43c4 record.
  • ProjectionStore, lint, fmt, fork-check, repo-wide gates, and the extracted pinned parser were not run. CI remains the parent gate.
  • The workflow fixture proves hub dispatch and receipt state, not physical power, OS process death, or a playable recording.
  • No status, merge, push, version change, or Issue edit.

@lukemaj

lukemaj commented Oct 18, 2026

Copy link
Copy Markdown
Contributor Author

What: APPROVE the whole partial #383 device core at b809668235ee1a0a3add46e0308f0ad0dbacfa61.
Why: The six R1 mechanisms and R2 shutdown boundary are repaired, and this independent cumulative review found no remaining supported actionable blocker within the accepted core boundary.
So what: #379 retains both-review aggregation, current CI, actual acceptance and integration; the remaining whole-#383 viewer/browser/relay/fetch/client work is still required.

Requirements and who asked: The user's whole-component R3 brief, frozen #379 v5, #383 and the accepted core ownership transfer require faithful typed device intent, current original ALL-contributor authority, native exact resource/receipt ownership and local compatibility. This supports Promachos and Drafters working across environments.
Deleted: Split review lenses, approval transfer, limiting review to two repair files, generic shell/proxy execution, new authority or grants, tracked repairs, delegation and whole-#383 acceptance claims.
Bottleneck: Exact-candidate independent review and parent-owned current CI/actual acceptance, followed by the remaining #383 ownership and implementation.
Checked myself: All 19 cumulative changed paths and relevant owners/consumers, complete original R1/R2 briefs and supplied whole reports/responses, current contracts/ownership records, the shutdown/readiness/recovery path, focused native/domain/projection/parser checks and the real server compiler. Candidate tracked bytes stayed unchanged.

Verdict and identity

APPROVE applies only to this internal partial core, with no required finding in the inspected scope. It is not evidence that every possible dependency behavior is correct or that whole #383/#379 is complete.

  • PR: feat(device): add typed remote device execution core #421, OPEN, intended base feat/379-cross-machine-parity. Live PR head matches.
  • HEAD b809668235ee1a0a3add46e0308f0ad0dbacfa61.
  • Tree abf9ca0e7ecb6a557127d9ce88bdca2466d62258.
  • Base and actual merge base ecd06ef5e620191626d15b559dc663644ad59649.
  • Exclusive app-bound workspace /Users/rocky/.t3/worktrees/chromeria/review-379-383-core-r3b-codex-b809668, branch review/379-383-core-r3b-codex-b809668. Origin toolboxmd/chromeria, upstream pingdotgg/t3code; no configured branch upstream. I did not author the candidate.
  • Actual Color: native Codex harness, provider instance codex, model gpt-6.1-sol, reasoningEffort=medium. Live orchestrator_capabilities supports that selection; native t3_thread_read confirms this replacement run's provider/model/worktree, and t3_thread_configuration returns persisted modelSelection={"instanceId":"codex","model":"gpt-6.1-sol","options":[{"id":"reasoningEffort","value":"medium"}]}. Catalog default low was not substituted. No fallback or delegation.
  • PR421 was registered with link_pull_request; list_thread_pull_requests confirms the link. No aggregate status was changed.
  • Manifest /tmp/review383-r3b-codex/candidate-manifest.json binds all 19 paths. Every hash equals the author's retained final r2-each-source-manifest.json; this is identity corroboration, not proof transfer.

Prior findings checked independently

  1. R2 shutdown: repaired. DeviceService.shutdownDevice rechecks the original invocation after readiness and immediately before the platform branch, outside iOS Effect.catch. The same owner serves registered close-with-shutdown and direct shutdown. Both Android and iOS native cases retain a lawful open/shutdown count1, real grant retirement during external readiness, no second shutdown POST and public denial. The callback also reports booted=false, so the iOS case distinguishes authorization refusal from successful already-stopped recovery. Receipt remains started/public outcome_unknown after prior close/preparation; restoring the grant and replaying cannot repeat it. A later opening accepts its own click while replaying the old close remains unknown. These are actual registered HTTP/auth/control/SQLite paths with only external hub/device/process leaves. Existing direct no-MCP shutdown/close and lawful iOS recovery tests also pass.
  2. R1 F1 read capture: repaired. recheckAction gets verified invocation independently of mutation receipt presence. Screenshot checks after readiness before capture. The lawful PNG followed by readiness-time real grant retirement denies the new capture; the separate Deferred-held keyed click preserves the fixture's started-receipt assertion. Native UI/no-scope calls retain their owner.
  3. R1 F2 catalog: repaired. Both published tools have nonempty lifecycle labels, device icon and existing device summary action. The unchanged published-tool completeness gate and provider aliases pass, together with client-runtime summary behavior. Discovery remains read-only/closed-world; execution remains mutating/open-world. This shared owner reaches web, desktop and mobile presentation without requiring new client source changes in this core.
  4. R1 F3 Effect policy: repaired. Capture JSON uses module-hoisted Schema JSON decoding; workflow digest observations use Effect Crypto/Hex. Owned fixture layer composition preserves services without the prior chained-provide warnings. The actual server workspace compiler exits0 with zero errors and warnings, 261 suggestions. No compiler policy/config/suppression or dependency change appears in the diff. Earlier scoped-tsconfig success remains narrower historical proof.
  5. R1 F4 literal fill: repaired. Empty text uses the supported empty positional after --; nonempty text uses stdin with CRLF framing. This run feeds the current production compiler's captured payload into the extracted pinned 0.21.25 runner, with only its terminal interaction leaf recording parsed text. Empty, ordinary, CR, LF, CRLF, multiline, flag-like, quoted Unicode and 16,384 multibyte characters round-trip exactly. The maximum input is 49,152 UTF-8 bytes plus two framing bytes, below 65,536.
  6. R1 F5 deep link: repaired. Optional bounded URI intent is mapped literally after private flags and --; the pinned reader accepts the compiled app-plus-URI pair. Registered native dispatch/replay and malformed URI InvalidParams controls pass. No fetch/proxy or expanded capability is added.
  7. R1 F6 local mode: repaired. The extra unconditional full-access/default requirement is gone. Current original and target-relative modes/capabilities remain authoritative; keyed same-thread local-auto succeeds and remote escalation/current-mode denials remain covered. No blanket plan grant was added. The historical inconclusive legacy-positive probe stays inconclusive.

The complete prior R1/R2 reports and author responses remain at their original identities in the mandatory packets, including #383 (comment) and #383 (comment). All prior verdicts remain historical; none supplies this verdict.

Cumulative coverage

Inspected all 19 changed paths: packages/contracts/src/device.ts; AgentDeviceCommand and its test; DeviceCommands.registered.test; DeviceService; DeviceToolchain; both LegacyDevice fixture files; McpDeviceToolkit.test; device tools and handlers; PeerAuthority and its workflow test; PeerForwarding; shared tool presentation and its test; fork-features, feature map and upstream-edit allowlist.

Traced the registered toolkit/image transport, McpToolAccess/McpRouting, session registry and current narrowed ceilings, native server layer composition, original request namespace/generation, native receipt replay/dispatch, link/resource/current-source settings checks, local/SSH host binding, artifact verify/publication/recording/discard owners and shared presentation/client summaries. This review covers the cumulative base-to-head implementation, not only the R2 repair.

The original incoming action remains the actor. Root source project settings narrow original capabilities before recursive ALL-contributor intersection; callers consume the returned current ceiling. Execute rechecks after lock/preflight, before replay/preparation and at CLI/capability/capture/artifact/batch boundaries. No destination-thread grant substitutes for the incoming action. Existing task-stop/resource arithmetic, generation and namespace semantics remain at their owners.

Pre-open discovery is a distinct authenticated READ device_commands envelope tied to the same original generation and decoded as the actual catalog. Requests-v1 with the real historical device domain refuses before destination preparation; requests-v0 refusal remains separate. A-only returned discovery/snapshot examples include verified destination environment/context and execute unchanged. Modern guidance exposes no B-local launcher/config/daemon binding; ordinary local unkeyed guidance is explicit.

Closed typed inputs, actual target identity/platform/nonphysical capability checks, exact opening UUID plus original namespace/generation, private argv/config/environment binding, started-before-preparation receipts, unknown/no-repeat behavior, historical replay and reopened-target protection remain present. Native media/input cases check qualified environment/owner/name/digest/size/manifest and actual bytes, private producer containment, changed package bytes, lost replies and transport reconstruction. S7 keyed-discard retained bytes and S8 first-publication CAS/digest/owner/exclusive-copy guards remain at unchanged AttachmentStaging. No additional supported actionable finding emerged in these paths.

Independent commands and results

All checks used Node v24.18.0, PATH=/opt/homebrew/opt/node@24/bin:$PATH, and only this exclusive review worktree. Logs below live in /tmp/review383-r3b-codex.

./node_modules/.bin/vp test run apps/server/src/peer/PeerAuthority.workflow.test.ts
  exit0,115 passed,341.83s; workflow.log
./node_modules/.bin/vp test run apps/server/src/device/AgentDeviceCommand.test.ts apps/server/src/device/DeviceCommands.registered.test.ts apps/server/src/device/DeviceService.test.ts apps/server/src/mcp/McpDeviceToolkit.test.ts apps/server/src/mcp/toolkits/core.test.ts packages/shared/src/t3McpToolPresentation.test.ts apps/server/src/peer/PeerAuthority.test.ts apps/server/src/peer/PeerForwarding.test.ts apps/server/src/mcp/McpToolAccess.test.ts packages/client-runtime/src/t3ToolSummary.test.ts
  exit0,156 passed/10files,30.53s; domain.log
./node_modules/.bin/vp test run apps/server/src/orchestration-v2/ProjectionStore.test.ts
  exit0,41 passed,3.73s; projection.log
(cd apps/server) ../../node_modules/.bin/tsc-rs --noEmit
  exit0,0errors/0warnings/261suggestions; types.log
./node_modules/.bin/vp test run --config /tmp/review383-r3b-codex/parser.config.ts
  exit0,10 passed,2.16s; parser.log
/opt/homebrew/opt/node@24/bin/node --input-type=module
  pure pinned command-reader probe: find fill/type empty, type empty, clipboard write empty,
  install app/path and trace stop/path all preserve their literal reader inputs;
  no daemon/device/native effect, no separate behavioral acceptance claim
 git diff --check; git status --porcelain
  exit0; clean, with exact HEAD/tree/base unchanged

The parser config imports this worktree's Vite configuration and current compiler. The observer uses /tmp/chromeria-383-map/pinned/package agent-device0.21.25. This is extracted-source parser proof, not installed-runtime acceptance or a fresh published-tarball verification. No tracked scratch tests or source repairs were made.

The author's retained native115/335.82s and domain156/31.45s logs were inspected with their all19-path manifest. They remain author executions, distinct from this reviewer's commands. Sol R2's 112pass/1fixture-discovery failure plus unchanged isolated1pass remains causeUNKNOWN; Grok's113pass at8c1 and all earlier runs remain separate. No totals were combined into a fictional gate.

Native preparation history and limits

This is a new independent native replacement of the original UNSTARTED R3 Sol attempt, using the same required Color and candidate in its own bound worktree. The full /tmp/chromeria-386-r3-preparation-diagnosis.md was read. The original prepared-run.fail projection-load rejection occurred before worktree/provider start; parent reports native cancellation verified INTERRUPTED at13:02:46.552Z, activeRunId null/no pending child runs/no resource. The original failed attempt is retained. Replacement success neither diagnoses nor fixes its unknown underlying cause. No live SQL/projection writes, manual binding or shared restart occurred here.

Dependencies were initially absent. Execution began only after the parent's explicit cached/offline/frozen-lockfile/ignore-scripts/copy preparation EXIT0 for this exact bound workspace, log /tmp/chromeria-383-core-r3b-codex-deps.log (Done in54.6s). Intentional linked-origin script skipping and empty saved actions are separate from the original preparation failure; no configured automatic installer defect or new automatic-install gate is inferred. This reviewer installed or borrowed no dependencies.

No repo-wide checks, lint/format/fork gate, actual product server, browser, device/hardware session, provider prompt, live userdata, new grant/consent, acceptance home, other worktree, topology/source push, status, merge, version, Issue closure, blocker clearing or delivery was operated. Finite tests use disposable native HTTP/auth/control/SQLite state and deterministic external leaves with real policy/resource owners. Resources, scratch and evidence remain retained for final #379.

Source-owned viewer sessions/tickets, authenticated resource-bound allowlisted hub/preview relays preserving iOS AVCC/input WS and Android multiplex WS/backpressure, browser controls/media, public qualified-reference acquisition and source-authenticated fetch, plus all-client navigation/reconnect/close/reopen remain required downstream under #383 (comment). Their absence is not a blocker against the explicitly accepted partial core. Physical hardware, OS process death, playable recordings, actual installed runtime and source-only client/device usability remain parent-owned proof; synthetic24-byte MP4 is bounded-reference proof only. Current CI and the other required independent review remain separate parent gates. No whole #383/#379 completion or shipment is claimed.

Full local report /tmp/review383-r3b-codex/report.md. Verdict binds only the exact identity above.

@lukemaj

lukemaj commented Oct 18, 2026

Copy link
Copy Markdown
Contributor Author

What: BOTH required independent whole-component R3 reviewers APPROVE partial #383 core at exactb809668235ee1a0a3add46e0308f0ad0dbacfa61.
Why: Each independently checked the cumulative19 paths, all six R1 mechanisms and the R2shutdown boundary; no supported actionable blocker remains inside this accepted partial core.
So what: Parent #379 owns currentCI, primary actual runtime proof and internal integration, plus remaining whole383/384/385/386 and final combined reviews/acceptance/mainmerge/shipment. This is not whole383 or release acceptance.

Requirements and who asked: User379 requires BOTH exact-candidate whole reviews with codex/gpt-6.1-sol/MEDIUM and installedgrok/grok-4.7/MEDIUM, currentCI and isolated actual cross-machine/client proof for final outcome.
Deleted: Verdicttransfer, splitlenses, accepting summarywithoutreport/rawlog, deterministicfixture success as physicalpower/playablevideo/clientproof and skippedsetup as installerdefect.
Bottleneck: Refresh currentCI and primary actual proof within existingconsent; then internalintegration and remaining sourceviewer/relay/fetch/browser/allclient/sharedautonomy work.
Checked myself: BOTH full reports below; exactcleanreviewworktree HEAD/tree and actual raw115 logs; authorcleanhead/tree/base; native task terminals/nochildren and persisted MEDIUM selections. No code/runtimeconsent/release action inferred from approval.

Candidate HEADb809668235ee1a0a3add46e0308f0ad0dbacfa61/treeabf9ca0e7ecb6a557127d9ce88bdca2466d62258/baseecd06ef5e620191626d15b559dc663644ad59649. Fullauthor3836250086336 retains BOTH whole R2 +allresponses/limits; mandatoryfullR1packet3836249750119 and originalscope/remainingmap3836248805292 unchanged.

Sol fullreport #421 (comment) : native115PASS341.83s,156focusedPASS30.53s,41projectionPASS3.73s,10actualpinnedparserPASS2.16s, actualservertypesEXIT0/0errors0warnings261suggestions. Grok #421 (comment) : native115PASS333.39s,156focusedPASS31.27s,actualservertypesEXIT0/0errors0warnings261suggestions. Separate runs/candidates/limits preserved, no fabricated combined gate. Both actualselectedMEDIUM, nofallback/delegation. Sol originalunstartedR3failure was nativelyinterrupted before replacement verified; replacement success doesnotexplain/fix failedpreparation persistence3866250180559/6250255070. PriorSolR2discoveryfailure remainsUNKNOWN separatefromcurrent115green.

No required R3 finding. Grok olderpanelaction/detail observation stays in3836250293417 for downstreamallclientauthorityaudit; this candidate onlypartialregisteredcore. All remainingviewer/sessiontickets/resource-boundrelays/qualifiedacquisition/sourcefetch/browser/allclients/physical/providerproof remain required. No code/source/approval changes by reviewers and no mainmerge/build/ship/activation accepted. Preserveallresources/evidence untilfinal379.

FULL unchanged Sol R3 report

What: APPROVE the whole partial #383 device core at b809668235ee1a0a3add46e0308f0ad0dbacfa61.
Why: The six R1 mechanisms and R2 shutdown boundary are repaired, and this independent cumulative review found no remaining supported actionable blocker within the accepted core boundary.
So what: #379 retains both-review aggregation, current CI, actual acceptance and integration; the remaining whole-#383 viewer/browser/relay/fetch/client work is still required.

Requirements and who asked: The user's whole-component R3 brief, frozen #379 v5, #383 and the accepted core ownership transfer require faithful typed device intent, current original ALL-contributor authority, native exact resource/receipt ownership and local compatibility. This supports Promachos and Drafters working across environments.
Deleted: Split review lenses, approval transfer, limiting review to two repair files, generic shell/proxy execution, new authority or grants, tracked repairs, delegation and whole-#383 acceptance claims.
Bottleneck: Exact-candidate independent review and parent-owned current CI/actual acceptance, followed by the remaining #383 ownership and implementation.
Checked myself: All 19 cumulative changed paths and relevant owners/consumers, complete original R1/R2 briefs and supplied whole reports/responses, current contracts/ownership records, the shutdown/readiness/recovery path, focused native/domain/projection/parser checks and the real server compiler. Candidate tracked bytes stayed unchanged.

Verdict and identity

APPROVE applies only to this internal partial core, with no required finding in the inspected scope. It is not evidence that every possible dependency behavior is correct or that whole #383/#379 is complete.

  • PR: feat(device): add typed remote device execution core #421, OPEN, intended base feat/379-cross-machine-parity. Live PR head matches.
  • HEAD b809668235ee1a0a3add46e0308f0ad0dbacfa61.
  • Tree abf9ca0e7ecb6a557127d9ce88bdca2466d62258.
  • Base and actual merge base ecd06ef5e620191626d15b559dc663644ad59649.
  • Exclusive app-bound workspace /Users/rocky/.t3/worktrees/chromeria/review-379-383-core-r3b-codex-b809668, branch review/379-383-core-r3b-codex-b809668. Origin toolboxmd/chromeria, upstream pingdotgg/t3code; no configured branch upstream. I did not author the candidate.
  • Actual Color: native Codex harness, provider instance codex, model gpt-6.1-sol, reasoningEffort=medium. Live orchestrator_capabilities supports that selection; native t3_thread_read confirms this replacement run's provider/model/worktree, and t3_thread_configuration returns persisted modelSelection={"instanceId":"codex","model":"gpt-6.1-sol","options":[{"id":"reasoningEffort","value":"medium"}]}. Catalog default low was not substituted. No fallback or delegation.
  • PR421 was registered with link_pull_request; list_thread_pull_requests confirms the link. No aggregate status was changed.
  • Manifest /tmp/review383-r3b-codex/candidate-manifest.json binds all 19 paths. Every hash equals the author's retained final r2-each-source-manifest.json; this is identity corroboration, not proof transfer.

Prior findings checked independently

  1. R2 shutdown: repaired. DeviceService.shutdownDevice rechecks the original invocation after readiness and immediately before the platform branch, outside iOS Effect.catch. The same owner serves registered close-with-shutdown and direct shutdown. Both Android and iOS native cases retain a lawful open/shutdown count1, real grant retirement during external readiness, no second shutdown POST and public denial. The callback also reports booted=false, so the iOS case distinguishes authorization refusal from successful already-stopped recovery. Receipt remains started/public outcome_unknown after prior close/preparation; restoring the grant and replaying cannot repeat it. A later opening accepts its own click while replaying the old close remains unknown. These are actual registered HTTP/auth/control/SQLite paths with only external hub/device/process leaves. Existing direct no-MCP shutdown/close and lawful iOS recovery tests also pass.
  2. R1 F1 read capture: repaired. recheckAction gets verified invocation independently of mutation receipt presence. Screenshot checks after readiness before capture. The lawful PNG followed by readiness-time real grant retirement denies the new capture; the separate Deferred-held keyed click preserves the fixture's started-receipt assertion. Native UI/no-scope calls retain their owner.
  3. R1 F2 catalog: repaired. Both published tools have nonempty lifecycle labels, device icon and existing device summary action. The unchanged published-tool completeness gate and provider aliases pass, together with client-runtime summary behavior. Discovery remains read-only/closed-world; execution remains mutating/open-world. This shared owner reaches web, desktop and mobile presentation without requiring new client source changes in this core.
  4. R1 F3 Effect policy: repaired. Capture JSON uses module-hoisted Schema JSON decoding; workflow digest observations use Effect Crypto/Hex. Owned fixture layer composition preserves services without the prior chained-provide warnings. The actual server workspace compiler exits0 with zero errors and warnings, 261 suggestions. No compiler policy/config/suppression or dependency change appears in the diff. Earlier scoped-tsconfig success remains narrower historical proof.
  5. R1 F4 literal fill: repaired. Empty text uses the supported empty positional after --; nonempty text uses stdin with CRLF framing. This run feeds the current production compiler's captured payload into the extracted pinned 0.21.25 runner, with only its terminal interaction leaf recording parsed text. Empty, ordinary, CR, LF, CRLF, multiline, flag-like, quoted Unicode and 16,384 multibyte characters round-trip exactly. The maximum input is 49,152 UTF-8 bytes plus two framing bytes, below 65,536.
  6. R1 F5 deep link: repaired. Optional bounded URI intent is mapped literally after private flags and --; the pinned reader accepts the compiled app-plus-URI pair. Registered native dispatch/replay and malformed URI InvalidParams controls pass. No fetch/proxy or expanded capability is added.
  7. R1 F6 local mode: repaired. The extra unconditional full-access/default requirement is gone. Current original and target-relative modes/capabilities remain authoritative; keyed same-thread local-auto succeeds and remote escalation/current-mode denials remain covered. No blanket plan grant was added. The historical inconclusive legacy-positive probe stays inconclusive.

The complete prior R1/R2 reports and author responses remain at their original identities in the mandatory packets, including #383 (comment) and #383 (comment). All prior verdicts remain historical; none supplies this verdict.

Cumulative coverage

Inspected all 19 changed paths: packages/contracts/src/device.ts; AgentDeviceCommand and its test; DeviceCommands.registered.test; DeviceService; DeviceToolchain; both LegacyDevice fixture files; McpDeviceToolkit.test; device tools and handlers; PeerAuthority and its workflow test; PeerForwarding; shared tool presentation and its test; fork-features, feature map and upstream-edit allowlist.

Traced the registered toolkit/image transport, McpToolAccess/McpRouting, session registry and current narrowed ceilings, native server layer composition, original request namespace/generation, native receipt replay/dispatch, link/resource/current-source settings checks, local/SSH host binding, artifact verify/publication/recording/discard owners and shared presentation/client summaries. This review covers the cumulative base-to-head implementation, not only the R2 repair.

The original incoming action remains the actor. Root source project settings narrow original capabilities before recursive ALL-contributor intersection; callers consume the returned current ceiling. Execute rechecks after lock/preflight, before replay/preparation and at CLI/capability/capture/artifact/batch boundaries. No destination-thread grant substitutes for the incoming action. Existing task-stop/resource arithmetic, generation and namespace semantics remain at their owners.

Pre-open discovery is a distinct authenticated READ device_commands envelope tied to the same original generation and decoded as the actual catalog. Requests-v1 with the real historical device domain refuses before destination preparation; requests-v0 refusal remains separate. A-only returned discovery/snapshot examples include verified destination environment/context and execute unchanged. Modern guidance exposes no B-local launcher/config/daemon binding; ordinary local unkeyed guidance is explicit.

Closed typed inputs, actual target identity/platform/nonphysical capability checks, exact opening UUID plus original namespace/generation, private argv/config/environment binding, started-before-preparation receipts, unknown/no-repeat behavior, historical replay and reopened-target protection remain present. Native media/input cases check qualified environment/owner/name/digest/size/manifest and actual bytes, private producer containment, changed package bytes, lost replies and transport reconstruction. S7 keyed-discard retained bytes and S8 first-publication CAS/digest/owner/exclusive-copy guards remain at unchanged AttachmentStaging. No additional supported actionable finding emerged in these paths.

Independent commands and results

All checks used Node v24.18.0, PATH=/opt/homebrew/opt/node@24/bin:$PATH, and only this exclusive review worktree. Logs below live in /tmp/review383-r3b-codex.

./node_modules/.bin/vp test run apps/server/src/peer/PeerAuthority.workflow.test.ts
  exit0,115 passed,341.83s; workflow.log
./node_modules/.bin/vp test run apps/server/src/device/AgentDeviceCommand.test.ts apps/server/src/device/DeviceCommands.registered.test.ts apps/server/src/device/DeviceService.test.ts apps/server/src/mcp/McpDeviceToolkit.test.ts apps/server/src/mcp/toolkits/core.test.ts packages/shared/src/t3McpToolPresentation.test.ts apps/server/src/peer/PeerAuthority.test.ts apps/server/src/peer/PeerForwarding.test.ts apps/server/src/mcp/McpToolAccess.test.ts packages/client-runtime/src/t3ToolSummary.test.ts
  exit0,156 passed/10files,30.53s; domain.log
./node_modules/.bin/vp test run apps/server/src/orchestration-v2/ProjectionStore.test.ts
  exit0,41 passed,3.73s; projection.log
(cd apps/server) ../../node_modules/.bin/tsc-rs --noEmit
  exit0,0errors/0warnings/261suggestions; types.log
./node_modules/.bin/vp test run --config /tmp/review383-r3b-codex/parser.config.ts
  exit0,10 passed,2.16s; parser.log
/opt/homebrew/opt/node@24/bin/node --input-type=module
  pure pinned command-reader probe: find fill/type empty, type empty, clipboard write empty,
  install app/path and trace stop/path all preserve their literal reader inputs;
  no daemon/device/native effect, no separate behavioral acceptance claim
 git diff --check; git status --porcelain
  exit0; clean, with exact HEAD/tree/base unchanged

The parser config imports this worktree's Vite configuration and current compiler. The observer uses /tmp/chromeria-383-map/pinned/package agent-device0.21.25. This is extracted-source parser proof, not installed-runtime acceptance or a fresh published-tarball verification. No tracked scratch tests or source repairs were made.

The author's retained native115/335.82s and domain156/31.45s logs were inspected with their all19-path manifest. They remain author executions, distinct from this reviewer's commands. Sol R2's 112pass/1fixture-discovery failure plus unchanged isolated1pass remains causeUNKNOWN; Grok's113pass at8c1 and all earlier runs remain separate. No totals were combined into a fictional gate.

Native preparation history and limits

This is a new independent native replacement of the original UNSTARTED R3 Sol attempt, using the same required Color and candidate in its own bound worktree. The full /tmp/chromeria-386-r3-preparation-diagnosis.md was read. The original prepared-run.fail projection-load rejection occurred before worktree/provider start; parent reports native cancellation verified INTERRUPTED at13:02:46.552Z, activeRunId null/no pending child runs/no resource. The original failed attempt is retained. Replacement success neither diagnoses nor fixes its unknown underlying cause. No live SQL/projection writes, manual binding or shared restart occurred here.

Dependencies were initially absent. Execution began only after the parent's explicit cached/offline/frozen-lockfile/ignore-scripts/copy preparation EXIT0 for this exact bound workspace, log /tmp/chromeria-383-core-r3b-codex-deps.log (Done in54.6s). Intentional linked-origin script skipping and empty saved actions are separate from the original preparation failure; no configured automatic installer defect or new automatic-install gate is inferred. This reviewer installed or borrowed no dependencies.

No repo-wide checks, lint/format/fork gate, actual product server, browser, device/hardware session, provider prompt, live userdata, new grant/consent, acceptance home, other worktree, topology/source push, status, merge, version, Issue closure, blocker clearing or delivery was operated. Finite tests use disposable native HTTP/auth/control/SQLite state and deterministic external leaves with real policy/resource owners. Resources, scratch and evidence remain retained for final #379.

Source-owned viewer sessions/tickets, authenticated resource-bound allowlisted hub/preview relays preserving iOS AVCC/input WS and Android multiplex WS/backpressure, browser controls/media, public qualified-reference acquisition and source-authenticated fetch, plus all-client navigation/reconnect/close/reopen remain required downstream under #383 (comment). Their absence is not a blocker against the explicitly accepted partial core. Physical hardware, OS process death, playable recordings, actual installed runtime and source-only client/device usability remain parent-owned proof; synthetic24-byte MP4 is bounded-reference proof only. Current CI and the other required independent review remain separate parent gates. No whole #383/#379 completion or shipment is claimed.

Full local report /tmp/review383-r3b-codex/report.md. Verdict binds only the exact identity above.

FULL unchanged Grok R3 report

What: APPROVE the partial #383 typed device core at b809668235ee1a0a3add46e0308f0ad0dbacfa61.
Why: Shutdown now rechecks the original invocation after readiness and before either hub POST, outside the iOS already-stopped recovery, and the six R1 mechanisms still hold on this head.
So what: #379 owns aggregate status, current CI, and actual acceptance. Viewer sessions, resource tickets, allowlisted hub and preview relays, public qualified acquisition and source-authenticated fetch, browser control, and all-client lifecycle remain required. This review does not merge, push, or change Issues.

Elon record

Requirements and who asked: The user, through frozen #379 and #383, required this independent Grok 4.7 medium whole-core review of all 19 paths at this exact head, including the R2 shutdown repair and every prior R1 and R2 response.
Deleted: Transferred verdicts, split lenses, tracked edits, status or merge changes, a demand to build the deferred viewer in this candidate, and an installer-failure claim from manual dependency preparation.
Bottleneck: The new check has to sit after readiness and before both platform POSTs, so an iOS already-stopped recovery cannot turn a refusal into success.
Checked myself: Read all 19 cumulative paths and the shutdown, close, capture, catalog, compiler, forwarding, and authority owners. Ran the native workflow suite, the focused domain suite, and server tsc-rs in this worktree. Rechecked HEAD, tree, merge-base, live PR head, and the persisted selection.

Verdict

APPROVE for #421 at b809668235ee1a0a3add46e0308f0ad0dbacfa61.

This is a whole-component review of the partial #383 core. It is not whole-#383 acceptance. No required finding.

Identity

  • Reviewer: installed Grok harness. Persisted t3_thread_configuration is {"instanceId":"grok","model":"grok-4.7","options":[{"id":"reasoningEffort","value":"medium"}]}. Live catalog includes grok / grok-4.7. The catalog composer's displayed reasoning default is high; this thread's persisted option is medium. No model, effort, or harness fallback, and no delegated child.
  • Worktree: /Users/rocky/.t3/worktrees/chromeria/review-379-383-core-r3-grok-b809668, branch review/379-383-core-r3-grok-b809668. I did not author this candidate.
  • HEAD: b809668235ee1a0a3add46e0308f0ad0dbacfa61
  • Tree: abf9ca0e7ecb6a557127d9ce88bdca2466d62258
  • Base and merge-base: ecd06ef5e620191626d15b559dc663644ad59649
  • Live PR head immediately before this comment: the same SHA, OPEN, base feat/379-cross-machine-parity.
  • Range versus that base: 19 files, 6104 insertions, 218 deletions.
  • Versus prior immutable 8c1f43c4: only apps/server/src/device/DeviceService.ts and apps/server/src/peer/PeerAuthority.workflow.test.ts. The production delta is one yield* recheckAction after readiness and before the platform branch.
  • Node: /opt/homebrew/opt/node@24/bin, v24.18.0.
  • Local copy: /tmp/chromeria-383-core-r3-grok/report.md
  • PR 421 is linked on this thread.

R2 shutdown repair

shutdownDevice waits on readiness, which rechecks and then ensureReady. The new recheckAction runs after that wait returns and before postShutdown. The iOS Effect.catch wraps only the grid POST. A refusal therefore stays a refusal when the hub list would report booted === false. Android uses /api/devices/shutdown. Both device_close with shutdown: true and the direct shutdown service method enter this owner. recheckAction returns immediately when there is no MCP invocation, so native UI and unkeyed local shutdown keep their existing owner.

The registered workflow cases typed383-shutdown for android and ios do the required sequence: a lawful open and shutdown (count 1), a reopen, real setGrant({device:false}) inside the external readiness hook, and deviceHubBooted=false so an iOS recovery cannot hide the denial. The revoked close is a public error containing outcome_unknown, shutdown POSTs stay at 1, a started receipt remains, restoring the grant and replaying the same key does not POST again, a later opening's old close does not POST, and a typed click on the later opening succeeds.

Both cases passed in this run: android 983ms, ios 908ms.

Prior R1 mechanisms on this head

  1. Read capture: recheckAction reads McpInvocationContext and does not return early merely because CurrentRequest is absent. screenshot rechecks after resolveDevice and before the PNG HTTP. review383-read-capture passed (716ms). The device_screenshot failed warnings in that case are the denial (OrchestratorMcpFailure), and the test passed.
  2. Catalog: device_commands and device_execute have Discover/Discovering/Discovered and Execute/Executing/Executed, icon device, and summary action device. Discovery is read-only and closed-world. Execution is mutating and open-world. The focused suite includes core.test.ts, t3McpToolPresentation.test.ts, and t3ToolSummary.test.ts.
  3. Effect policy: record and trace JSON uses module-hoisted Schema.decodeUnknownEffect(Schema.fromJsonString(Schema.Unknown)). The workflow test does not import node:crypto. Server tsc-rs --noEmit exited 0 with 0 errors, 0 warnings, and 261 suggestions.
  4. Literal fill: empty text is the positional "" after --. Nonempty text uses --text-stdin and text + "\r\n". typed383-literals passed (1581ms). AgentDeviceCommand.ts is unchanged since 8c1f43c4. This round did not re-execute the extracted pinned 0.21.25 parser.
  5. Deep link: optional open.url is appended after the app, after --. The public schema bounds length, scheme, and whitespace. The literals case dispatches example://settings?tab=one and rejects flag-like, newline, and oversize URLs as InvalidParams before footprints change.
  6. Local auto: recheckInvocation denies only when exceededDispatchModeLimit says the target outranks the caller. There is no unconditional full-access test. review383-local-auto ran inside the same 115-pass file. The historical inconclusive legacy-positive probe remains inconclusive.

Whole-component coverage

Read the cumulative 19 paths: packages/contracts/src/device.ts, AgentDeviceCommand and its test, DeviceCommands.registered.test.ts, DeviceService, DeviceToolchain, both legacy device fixtures, McpDeviceToolkit.test.ts, device handlers and tools, PeerAuthority and the workflow test, PeerForwarding, shared presentation and its test, docs/fork-features.md, docs/map.md, and scripts/fork-upstream-edits.txt.

open rechecks again after readiness and before boot, and again before an already-booted iOS grid start. executeCommand rechecks after preflight, after agent readiness, before the private config write, before capabilities, and before each CLI, capture, and publish step, and it keeps the returned ceiling. commandCatalog still returns the static command list after preflight and does not capture. PeerForwarding prepares a distinct read-only device_commands envelope on the original generation and decodes DeviceCommandCatalog before a forwarded open. Durable device_open refuses a physical device. Modern quickstart text is device_commands / device_execute JSON carrying environmentId and contextThreadId. The local executable quickstart remains only when there is no durable request. Local-thread root records pass currentCapabilities before intersection, so an originating project device setting narrows that ceiling. The fork-feature sentence describes this typed core. Panel action and detail still perform their hub call after resolveDevice without a second post-readiness recheck. They are not the registered typed command path, and recheckAction does not apply when no MCP scope is present. I am not filing that older panel shape.

S7 keyed discard and S8 first-publication guards stay in AttachmentStaging, which this range does not modify. Source-owned viewer sessions, resource tickets, allowlisted hub and preview relays, public qualified acquisition, source-authenticated fetch, browser control, and all-client lifecycle remain required downstream.

Independent execution

Every command used PATH="/opt/homebrew/opt/node@24/bin:$PATH" and Node v24.18.0 in this worktree.

Workflow, exit 0, log /tmp/chromeria-383-core-r3-grok/workflow.log. 1 file, 115 passed, 333.39s, start 14:53:57. Named passes include both shutdown platforms, review383-read-capture, and typed383-literals.

./node_modules/.bin/vp test run apps/server/src/peer/PeerAuthority.workflow.test.ts

Domain, exit 0, log /tmp/chromeria-383-core-r3-grok/domain.log. 10 files, 156 passed, 31.27s, start 14:55:20.

./node_modules/.bin/vp test run \
  packages/shared/src/t3McpToolPresentation.test.ts \
  apps/server/src/device/AgentDeviceCommand.test.ts \
  apps/server/src/device/DeviceService.test.ts \
  apps/server/src/mcp/McpDeviceToolkit.test.ts \
  apps/server/src/mcp/McpToolAccess.test.ts \
  apps/server/src/mcp/toolkits/core.test.ts \
  apps/server/src/peer/PeerForwarding.test.ts \
  apps/server/src/device/DeviceCommands.registered.test.ts \
  apps/server/src/peer/PeerAuthority.test.ts \
  packages/client-runtime/src/t3ToolSummary.test.ts

Server types, exit 0, log /tmp/chromeria-383-core-r3-grok/tsc.log. error TS 0, warning TS 0, suggestion 261.

(cd apps/server && ../../node_modules/.bin/tsc-rs --noEmit)

After these commands, git status --porcelain was empty and HEAD, tree, and merge-base still matched the identity above. The same was true immediately before this comment.

Limits

  • No product server, browser, device, provider prompt, live user data, new grant, or runtime install by this review.
  • Dependencies were parent-prepared in this worktree (cached, offline, frozen lockfile, ignore-scripts, copy). /tmp/chromeria-383-core-r3-grok-deps.log ends with pnpm Done in 54.9s, downloaded 0. node_modules/.bin/vp was present afterward. That preparation is not automatic setup proof. No installer failure is claimed. feat(peer): complete all-tool cross-machine workflows across web desktop and mobile #386 stays outside this verdict.
  • Author 115-case and 156-case runs are the author's claims. The counts above are this worktree's runs. Sol's earlier 112-pass and 1 fixture-discovery failure, cause UNKNOWN, plus the isolated rerun, remain an 8c1f43c4 record.
  • ProjectionStore, lint, fmt, fork-check, repo-wide gates, and the extracted pinned parser were not run. CI remains the parent gate.
  • The workflow fixture proves hub dispatch and receipt state, not physical power, OS process death, or a playable recording.
  • No status, merge, push, version change, or Issue edit.

@lukemaj

lukemaj commented Oct 18, 2026

Copy link
Copy Markdown
Contributor Author

What: Primary booted exact reviewedb809668 as both full CLI environments against retained isolated A/B state and loaded the matching native iOS client bundle with its existing connection; successful typed device execution is NOT live-proved.
Why: Existing fixture policy disables agent device access by default and B's exact persisted grant has device:false. New browser-origin authentication is absent, an old standalone bearer is rejected, and simulator-driver text-entry/watchdog failures prevented even the intended unsent discovery prompt from being submitted.
So what: Retain these limits for final383/379 proof and obtain an already-authorized disposable target; add no account/access/capability grant. The reviewed partial core may integrate only as an unreleased internal checkpoint so remaining source-viewer/relay/fetch/browser/client work can continue. No final main/release/whole383 acceptance.

Requirements and who asked: User379 permits internal reviewed components and requires all current CI/both independent exact reviews plus isolated real machine/client proof before finalmainmerge/shipment; explicitly forbids new account/access/capability grants.
Deleted: Treating boot/migration compatibility or deterministic nativefixtures as live typed execution, minting credentials or enabling device access as a workaround, submitting a corrupted draft, broadprocesskill/sharedrestart and declaring a helper timeout a proven candidatebug.
Bottleneck: Existing authorized devicefixture identity and real primary proof; remaining unimplemented source-owned viewer/media/fetch/all-client outcome. Independent core review and currentCI are complete, not wholeacceptance.
Checked myself: Both complete R3APPROVE reports/rawnative115logs, cleanexactcandidate/tree/base, fullCLIdevrunner and publicenvironmentidentity on both ports, read-only tasksettings/defaultpolicy and actual Bgrant, compatible nativeclient ensure result, actual native UI/screenshot, no active/new provider runs, and only captured ownedprocess stop receipts.

Exactsource b809668/treeabf9ca0e7ecb6a557127d9ce88bdca2466d62258/baseecd. Primary fullCLI A14247/web8522 exec8573, B14248exec17021 from frozenauthorworktree, explicit homes /tmp/chromeria-369-acceptance-{a,b}. Preexisting0237A/B sessions99985/10656 stopped only after0active-run check. Coherent rollbackDB/settings/environment-id/secrets snapshots /tmp/chromeria-383-acceptance-b809-preupgrade; no liveuserdata server or SQLwrite. Existing envIDs preserved950a38f2-e2a5-4242-9171-c17e0cb8412c/ef047b58-1edf-4ad6-a1ba-44320188325c; publicdescriptors sameIDs, logs /tmp/chromeria-383-acceptance-{a,b}-b809.log. Startup/migration completed sufficiently for real UI/history; no complete protocol/migration proof inferred.

Existing retained iPhone18Pro7EB778D5-677E-49D8-8B43-3EC2F7AE65BD only, other17ProMaxuntouched, no new simulator. Installedhelper pins0.21.25/0.15.3 verified by native device_list; Android unavailablemissingEmulator, no install. Currentensure /tmp/chromeria-383-ios-ensure-b809.log compatible/rebuiltfalse/fingerprint90dfe9f2508b8ea4412c4efd9d6347d737023c5e. OldMetro21093 stopped; owncurrentMetro20596 sourceb80917891. Same existing source-only Aconnection retained, realnativehistory shows369_AFTER_RESULT=AFTER_ACCEPT_369/no pendingquestion. No freshpairing/clientcredential or Bsavedconnection added. Newbrowserorigin8522wasunpaired; old381standaloneMCPbearerHTTP401 is oldcredential failure, not a device-policy test. No raw token/log URL published.

Task A/Bsettings onlyprojectSettingsFolded, actual contracts default enableAgentDeviceAccess=false; native MCP routing removes device capability. B peer_authority_sessions persistedgrantcreated-work/onwardfalse/previewfalse/devicefalse. Primary read-only same-row proof, no fieldmutation. User text request now pending for an ALREADY-authorized disposable device fixture, not permission to add a grant. No typed remote success/actualpublicdevice denial is claimed from this static policy evidence alone.

Actual native driver failures: first unsubmitted long composerfill TEXT_ENTRY_MISMATCH, expectedfullprompt vs512characterobservedprefix (diagnosticmvduxdl4-f069ec27). Subsequent shorterreplacement with documented--delay-ms80 hitmain-threadwatchdog mvduygbl-47bc1b67; screen showed mixed/partiallyreplacedunsentdraft. No Send wasclicked. Ref/coordinate longpress both refused while runnerdraining (mvdv08wf-52a7bcd3,mvdv0m22-cdc41fa4). Devicepanel screenshot usedasvisualtruth. Only owncom.t3tools.t3code.dev simulatorapp was terminated/reopened via simctl/returnedCLI; no installedChromeriahost, helperdaemon, physicaldevice or othersimulator waskilled. A laternavigation returned afterdelay; no cause established. Preserve helper/composer observations independently of candidateMCP/parser proof. All unchanged deterministic typedliteral tests still their own evidence; no actuallongfillpass asserted.

Afterattempt: read-onlyA/BactiveRunCount0, latestrequestedAtA2026-10-18T11:34:00.823Z/B11:22:42.370Z, unchanged frompriorproof. Confirms no newprovider started fromunsentdraft. Ownappterminated to preventlateUIwrites, ownA8573/B17021 stoppedEXIT130 andMetro20596EXIT0 through capturedsessions before author sourcehandoff. State/worktrees/rollback/evidence remain intact; this is scoped repair/basehandoff, not finalresource retirement. Native Devicepanelresource retained. Do not restart oldsource automatically. Currentnativeappdriver/consent gaps stay in383/386finalproof.

Reviewaggregate3836250379542/PR6250379837 binds bothAPPROVE and honest limits. SourceCI39128678512SUCCESS, Fork39128678565SUCCESS, currentfingerprint39128738445SUCCESS supersedes oldercancel39128678558, allsameb809. Authenticatednewestreview/independentsuccessbyghaccount must stillfreshverifybeforeinternalmerge. Finalcombinedprotocol/migration/physicalclient/automation acceptance and canonical exactrelease build/digest/activation remainunperformed.

@lukemaj

lukemaj commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor Author

Agent work on this PR

Estimated cost unknown · 4 responses · 9 sessions · 4.5 h wall time

Model Responses Tokens Estimated cost
grok-4.7 (grok, medium) 4 9,711,492 unknown

Flags: 3 repeated commands · 41 repeated reads · 12 repeated skill loads · 4 unpriced responses

Details: snapshot, prices, coverage, counters
  • Task toolboxmd/chromeria#379: outcome unknown (recorded acceptance only; a finished process never implies it).
  • Proof: spec: native cross-machine control across linked environments #379
  • Snapshot 354a376fb5c2abb4ba302a6bfdc72df9d119cfbec3d451f72a67a698dc946172, records up to 2026-10-18 13:33 UTC.
  • 9 sessions on codex, grok; AgentsMD 17.1.1.
  • The total includes work shared with 2 other tasks, counted whole in each, so sums across PRs overlap.
  • Not counted: 318 responses ($10.25) in sessions shared with other PRs that worked in no single PR's checkout.
  • Totals reconcile with the measured sessions: yes. Evidence complete: yes.
  • Prices: list-price estimate from T3 local rate table (path withheld) as of 2026-10-15, schedule 4bbceca325defaf1d14c2afc6962d6284212fb7301f98bb4e70d147c680ddf28. Unknown prices stay unknown, never zero.
    • T3 LiteLLM rate table when present; bundled schedule covers the rest.
    • Model price sources: T3 local rate table (path withheld).
    • Unpriced: unknown model (4).
  • Harness-reported cost: none reported.
  • Usage totals are not billing. Subscription spending is separate and is never posted as spend.
  • Crashed runs are counted separately: 0.

Token counters by model (native counter semantics; never added across semantics):

  • grok-4.7 (grok, medium), grok counters: input includes cached, output includes reasoning: input 9,583,766; cache-read 9,058,048; cache-write 0; output 127,726; reasoning 105,202; harness total 9,711,492.

Generated tokens (reasoning and other output are disjoint; other output includes code, tool calls and replies):

Model Reasoning Other output Reasoning share Split known for
grok-4.7 (grok, medium) unknown unknown unknown 0 of 4

Selected rates (USD per million tokens). These rates value the report at the selected schedule date; they do not establish historical prices or subscription spending.

Model Input tier Input Cache read Cache write Other output Reasoning
grok-4.7 all unknown unknown unknown unknown unknown

Other output and reasoning are priced without double counting inclusive native output. Missing rates remain unknown.

Local measurement from native records; usage totals are not billing. Updated in place by agent-observer publish.

@lukemaj
lukemaj merged commit 11b68cc into feat/379-cross-machine-parity Oct 18, 2026
27 of 28 checks passed
lukemaj added a commit that referenced this pull request Oct 19, 2026
* feat(device): execute typed commands across peer links

* docs(map): link the typed device core component

* fix(device): preserve native authority and typed command semantics

* fix(device): recheck authority before native shutdown
lukemaj added a commit that referenced this pull request Oct 19, 2026
* feat(device): execute typed commands across peer links

* docs(map): link the typed device core component

* fix(device): preserve native authority and typed command semantics

* fix(device): recheck authority before native shutdown
lukemaj added a commit that referenced this pull request Oct 19, 2026
* feat(device): execute typed commands across peer links

* docs(map): link the typed device core component

* fix(device): preserve native authority and typed command semantics

* fix(device): recheck authority before native shutdown
lukemaj added a commit that referenced this pull request Oct 20, 2026
* feat(device): execute typed commands across peer links

* docs(map): link the typed device core component

* fix(device): preserve native authority and typed command semantics

* fix(device): recheck authority before native shutdown
lukemaj added a commit that referenced this pull request Oct 20, 2026
* feat(device): execute typed commands across peer links

* docs(map): link the typed device core component

* fix(device): preserve native authority and typed command semantics

* fix(device): recheck authority before native shutdown
lukemaj added a commit that referenced this pull request Oct 20, 2026
* feat(device): execute typed commands across peer links

* docs(map): link the typed device core component

* fix(device): preserve native authority and typed command semantics

* fix(device): recheck authority before native shutdown
lukemaj added a commit that referenced this pull request Oct 20, 2026
* feat(device): execute typed commands across peer links

* docs(map): link the typed device core component

* fix(device): preserve native authority and typed command semantics

* fix(device): recheck authority before native shutdown
lukemaj added a commit that referenced this pull request Oct 20, 2026
* feat(peer): preserve authority and native returns across environments (#391)

* feat(peer): return notices and delegate onward within durable authority

* fix(peer): retain authority through queued execution and recovery

* fix(peer): preserve active run authority across native operations

* fix(peer): retain authority for every accepted run input

* fix(peer): check every contributor against the actual target

* fix(peer): validate joint work against its actual resource

* docs(peer): inventory retained consent seams

* fix(peer): remove unused authority helper re-export

* fix(peer): bound private output by effective caller modes

* fix(ci): weight the measured peer authority workflow

* fix(peer): retain effective caller modes during task cancellation

* feat(peer): continue remote delegated jobs and stop later work (#392)

* feat(peer): retain remote delegated job lifecycle and durable Stop

* docs(map): link remote lifecycle component PR

* fix(peer): preserve Stop replay and source task navigation

* fix(peer): reconcile accepted attachment and bound session expiry

* fix(server): bind delegated lifecycle routes to production runtime

* fix(peer): preserve attachment bytes and native request acceptance (#410)

* fix(peer): preserve attachment bytes and native request acceptance

* docs(peer): link request recovery component review

* docs(peer): register attachment recovery review provenance

* fix(peer): declare device receipt owner in fork inventory

* fix(server): preserve scoped retries and scheduler acceptance

* fix(peer): preserve authorized manual admission and saved snapshot replay

* fix(peer): preserve native preview capability refusal

* fix(attachments): recover exact native discard acceptance

* fix(attachments): retain bytes after keyed discard acceptance

* fix(preview): reconcile native recording claims before replay

* feat(peer): answer remote descendant requests from the source (#416)

**What**: Exact #369 candidate42051c passed real source-only web and Codex peer request acceptance, including committed replay after both full CLI servers restarted.
**Why**: Independent tests cannot establish that the production composition, real provider callback and source-only client work together.
**So what**: The planner accepts this bounded internal component for integration into #379 after a fresh head/base/gate check; combined multi-machine/client acceptance and final shipment remain pending.

Requirements and who asked: User #379 mandates native delegated lifecycle and all permitted tools with two MEDIUM reviewers and real isolated client/provider proof.
Deleted: No fake provider, direct SQL mutation, injected browser RPC, capability expansion, alternate harness or duplicate callback.
Bottleneck: Current candidate integration; #383 shared device authority/discovery and #384/#385/#386 remain outstanding.
Checked myself: Primary planner drove actual source A browser, inspected native B events/provider results, restarted both CLI products, replayed exact original request, and reopened the same source-only result.

Identity: HEAD42051c47813c354682b80677009b199d86fef1a0, treef9efef2d7df1b8b91ac64b09018386e79ccc1d45, baseab1bf53640e2a6541a2ba9f316839cedf81d4f46. Clean author workspace /Users/rocky/.t3/worktrees/chromeria/feat-369-remote-pending-requests. Both full production servers ran that source, with meaningful copied task-owned history in NEW /tmp/chromeria-369-acceptance-a and -b; old382 homes/evidence remained untouched. Node24.18, A server14247/web7663, B14248, source incognito Browser connected ONLY to A950a38f2-e2a5-4242-9171-c17e0cb8412c. Actual B is ef047b58-1edf-4ad6-a1ba-44320188325c. No live userdata write, new grant, physical device or standalone worker server.

Human source-only flow: A actual Codex gpt-6.1-sol/MEDIUM delegated real async B task369-parent-native-question-v1 in existing B project/root. B actual Codex asked request_user_input_async, persisted pending at B sequence288. Primary opened source task viewer from transcript; browser URL stayed A, no B profile. The actual card displayed369 REAL REMOTE QUESTION, ACCEPT_369/DECLINE_369 and disabled Send answer until selection. Primary selected ACCEPT_369 and sent once. B durable request resolved at sequence290, command mcp:request:385bcb2f7e0a7415a3c0d1cda8a0cabb0b7204f83949b505a9f4fe4cb6482210:0, 2026-10-18T10:10:47.347Z. Real provider consumed the answer and completed369_REMOTE_ANSWER=ACCEPT_369. Source returned exact original result and zero pending requests. Not inferred from dispatch acceptance.

Agent tool flow: Separate deliberate B task369-parent-native-agent-answer-v1, same explicit Color. Native delegate mode wait returned on real pending question with waitTimedOut:false, requestCount1, actual qualified target/revision334. Source local list{} correctly returned[]; explicit remote descendant list returned its actual request. Native qualified read returned real369 REAL AGENT QUESTION/options/revision334. Source called t3_pending_request_respond with original target/route/expectedRevision334, answers{0:AGENT_ACCEPT_369}, stable key369-parent-agent-response-v1. Initial AND exact retry both returned sequence340. B request has exactly one pending334 and one resolved336 event; real provider completed369_AGENT_RESULT=AGENT_ACCEPT_369. Two B tasks intentionally created, each ordinal1 completed, no duplicate B run.

Restart proof: Read-only query found zero preparing/queued/starting/running/waiting runs in A/B. Primary stopped only captured own sessions47643/49402 (exit130), restarted same source and same NEW homes in sessions86505/9639. A actual Codex ordinal34 called ONLY the exact original respond input/key after reconstruction: sequence340 again. Postrestart B has no additional request resolution or provider run. Source previous-agent viewer reopened after both restarts with original human result, real accepted answer and zero pending requests. Actual client screenshot inspected before upload.

Evidence: local immutable/raw read-only oracles /tmp/chromeria-369-parent-actual-question-proof.json, /tmp/chromeria-369-parent-native-agent-tool-proof.json, /tmp/chromeria-369-parent-postrestart-proof.json. Full CLI logs /tmp/chromeria-369-acceptance-{a,b}-server.log and -restart.log retained. Native Browser screenshots in existing UNPUBLISHED draft evidence-379, never a public release:

![Real source-only pending question](https://github.com/toolboxmd/chromeria/releases/download/untagged-cf149e2fe74d54191ae2/browser-screenshot-localhost-mvdnzzmy-b8c7d28b.png)

![Real source-only completed result after reconstruction](https://github.com/toolboxmd/chromeria/releases/download/untagged-cf149e2fe74d54191ae2/browser-screenshot-localhost-mvdo5woi-469c18e9.png)

Both fresh exact-candidate independent MEDIUM reviews APPROVE: Sol #416 (comment) and installed Grok4.7 #416 (comment). Full aggregate #369 (comment). Current420 CI39116640008, Fork39116640150 and final fingerprint39116844636 SUCCESS; original canceled fingerprint retained separately. Authenticated newest review/independent SUCCESS by lukemaj. Neither review substitutes for the actual proof above. Full author/R1/R2 packet #369 (comment).

Limits: These are TWO isolated Rocky environments, web/source-only browser and actual Codex provider. No physical cross-machine/tunnel/mobile/native desktop/all-provider/real live approval, durable-dismiss or secret acceptance claim. Registered native tests retain their own broader and S1/S2 race/empty-choice proof. Earlier native initialization404 remains UNKNOWN; later tests/CI/actual positives do not diagnose it. Operational verification earlier used invalid exact=true locator syntax and a stale assumed web port; corrected to supported selectors/actual dev-runner7663 without alternate browser or product changes. Cost supported publish #416 (comment) is partial task379 coverage, not complete cost; old unplaced/unpriced usage remains unknown. Background supported sync still pending at this record, not presumed complete.

States: implemented YES; current focused/native tests YES under their exact records; BOTH reviewed YES; current CI YES; bounded primary product proof YES; internal integration NOT YET at this record; main merged/build/shipped/activated/live combined acceptance NO. No package bump. All rollback/evidence/workspaces retained under explicit #379 instruction until final acceptance.

* fix(client): clarify remote requests and count pending work once

* fix(client): make remote request choices readable and accessible

* docs(peer): track the remote request client repair

* fix(peer): count initial remote work once in sparse shells

* feat(device): add typed remote device execution core (#421)

* feat(device): execute typed commands across peer links

* docs(map): link the typed device core component

* fix(device): preserve native authority and typed command semantics

* fix(device): recheck authority before native shutdown

* wip: preserve native contexts and purpose metadata after main alignment

* fix(peer): preserve current-main request answering policy (#539)

* fix(peer): preserve current-main request answering policy

* fix(compat): restore inherited CI consumers

Reuse baseline-only repairs from the preserved #383 checkpoint d892050cb97854e08ca1ca427fc762caebbd69f7 under the #379 ownership transfer. Adapt the two web test fixtures for actual Chromium collection without changing production web behavior.

* test(prism): absorb native recovery observer fixture

Transfer the exact test blob authored in cdd4780 and preserved by PR537 at fcd3162. Await the native observer marker before measuring the live batch; preserve the duplicate assertion and production source.

* fix(client): hide remote children from default navigation (#546)

* wip: hide remote children from default navigation

* wip: register destination navigation component PR

* wip: retain user forks with remote provenance

* wip: cover phone and alternate sidebar navigation

* wip: declare phone and legacy carried upstream edits

* feat(peer): keep destination automations authorized offline (#555)

* feat(peer): retain destination automation authority offline

* docs(peer): link destination authority component PR

* wip: repair destination authority recovery and acceptance findings

* wip: fence schedule acceptance and preserve live birth permissions

* wip: preserve birth permission purpose and split native proof

* wip: preserve recovery routes and birth dependency lifetime

* wip: retain paired recovery routes through repeated unlink

* wip: wake exact automation disable recovery at known expiry

* feat(remote): view and control qualified browser and device resources (#534)

* wip: combine qualified resources with destination automation

* wip: bound mobile returned-resource row height

* wip: respect native top safe area for tool resources

* wip: preserve current-main cross-machine compatibility checkpoint

* wip: preserve linked research and tool policy identity across main alignment

* wip: repair vault authority and keyed MCP configuration replay

* test(server): validate credential refusal error envelopes (#566)

* fix(peer): render HTML from idle destination contexts (#563)

* fix(server): prepare HTML in idle peer resource contexts

* docs(map): track the open idle HTML component

* fix(orchestration): wake parents for remote pending requests (#531)

* fix(orchestration): wake parents for remote pending requests

* fix(orchestration): deliver held remote requests when parent waits end

* fix(peer): wait for request content before notifying parents

* fix(orchestration): catch up requests after remote original completion

* test(web): isolate panel keyboard tests from inherited pointer (#575)

* fix(peer): attribute remote follow-ups to the completing run (#582)

* fix(peer): attribute remote follow-ups to the completing run

* docs(map): link remote completion provenance repair

* fix(peer): use observed purpose for first remote completion

* fix(scheduled-tasks): record refused keyed manual runs as terminal failures

A keyed run_scheduled_task_now whose dispatch failed with a typed error and
left no native receipt returned outcome_unknown and kept the schedule marked
running forever. Record it as the request's failed outcome, release the
running reservation, and replay the same failure for the same key.
Interrupted or defective dispatches stay outcome_unknown.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(orchestration): accept blank optional answers in remote request admission

Remote pending-request answers with expectedRevision rejected a blank or
omitted optional choice-only question as an unoffered option. Skip blank
optional answers before validating options, matching the message-response
path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(fork): keep one owner for server shard weights

#581 registered shardWeights.json under run-groups while the integration
already owns it under fork-maintenance; fork-features requires one owner.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(server): weight typed peer effects by their CI time

PeerAuthority.typedEffects.workflow.test.ts takes about 197s in a CI shard
but was weighted 46.4s, so Test Server 8 exceeded its 10-minute limit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(peer): reopened parents follow their remote tasks again

Archiving a parent ended its remote follower, and nothing restarted it on
unarchive, so the reopened parent missed later remote results until a
server restart. The follower now stays registered and waits for the
parent's unarchive or deletion instead of exiting, so reopening resumes
observation without a new entry point or a duplicate follower.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(peer): threads read and answer their own questions again

The replacement pending-request service refused every "own" answerer, so a
thread reading or answering its own user-input question, or an ordinary
full-access MCP client doing so, got capability_denied. Own access is
restored for local, non-linked callers on threads not delegated from
another environment. Own approvals, dismiss, linked clients and remote
delegated children keep their existing refusals.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(web,mobile): remote request cards keep multiline editor answers

Remote pending-request cards rendered every custom answer as a single-line
field, so a multiline editor prefill displayed and was stored flattened.
Editor questions (those with an initialAnswer) now use the Textarea on web
and a multiline, newline-submitting field on mobile, as the local paths do.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(scheduled-tasks): keyed pause and resume replay their receipt

A keyed update_scheduled_task carries clientRequestId on its input, so the
enable-only shortcut never matched: a keyed pause or resume fell through to
the full definition update and was refused without a purposeIntent. The
shortcut now ignores routing fields, and setEnabled records and replays
the keyed mutation receipt like create, update and delete. A retried
keyed pause after a later resume replays instead of retiring the newer
automation certificate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(scheduled-tasks): post-admission recheck refusals release keyed manual runs

A typed refusal from the recheck after admission, or after the dispatch
claim, now records the key as failed and frees the schedule instead of
leaving it running. The stage-guarded claim keeps uncertain dispatches
outcome_unknown.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(childThreads): stop-disposed remote children stay pending background work

A parent interrupt disposes a delegated completion with disposedBy "stop"
without stopping the remote child. The sparse SQL remote arm dropped that
row while the local arm and pendingDelegatedChildTasks kept it, so shells,
auto-settlement and storage cleanup treated the parent as idle.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(scheduled-tasks): final recheck refusals no longer fail a concurrent same-key dispatch

The final live recheck ran after the prepared -> dispatching claim and
terminalized a refusal from the dispatching stage. For an existing-thread
schedule a same-key retry can read dispatching and send concurrently, so
the refusal failed the request and freed the schedule while that send was
accepted. The final recheck now precedes the claim, so a refusal is only
recorded through the prepared-stage compare-and-set.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(peer): finished remote jobs no longer hold back live Stops

A lifecycle-v1 follower keeps long-polling its job there after the result,
so a later Stop or follow-up is still observed. Each poll held one of the
eight shared peer permits for up to 20 s, so more than eight finished jobs
starved Stops and live observations of other jobs.

Followers whose job has nothing left to do there (result available, no
queued runs, questions or recovery wait, or a confirmed Stop) now wait on
their own semaphore. Stops, unconfirmed and acknowledged stops, live jobs
and follow-ups seen as working keep the existing eight permits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(peer): stopped remote jobs with new work there keep live permits

A confirmed Stop counted a job as settled whatever its latest snapshot
said, so fresh direct input on the destination child after the Stop
left its follower queued behind idle settled long-polls, also after a
restart.

A job is now settled only while its latest snapshot is quiet (result
available, no queued runs, questions or recovery wait); a confirmed Stop
also needs that quiet snapshot. Anything showing activity uses the
shared network permits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
lukemaj added a commit that referenced this pull request Oct 29, 2026
* feat(peer): preserve authority and native returns across environments (#391)

* feat(peer): return notices and delegate onward within durable authority

* fix(peer): retain authority through queued execution and recovery

* fix(peer): preserve active run authority across native operations

* fix(peer): retain authority for every accepted run input

* fix(peer): check every contributor against the actual target

* fix(peer): validate joint work against its actual resource

* docs(peer): inventory retained consent seams

* fix(peer): remove unused authority helper re-export

* fix(peer): bound private output by effective caller modes

* fix(ci): weight the measured peer authority workflow

* fix(peer): retain effective caller modes during task cancellation

* feat(peer): continue remote delegated jobs and stop later work (#392)

* feat(peer): retain remote delegated job lifecycle and durable Stop

* docs(map): link remote lifecycle component PR

* fix(peer): preserve Stop replay and source task navigation

* fix(peer): reconcile accepted attachment and bound session expiry

* fix(server): bind delegated lifecycle routes to production runtime

* fix(peer): preserve attachment bytes and native request acceptance (#410)

* fix(peer): preserve attachment bytes and native request acceptance

* docs(peer): link request recovery component review

* docs(peer): register attachment recovery review provenance

* fix(peer): declare device receipt owner in fork inventory

* fix(server): preserve scoped retries and scheduler acceptance

* fix(peer): preserve authorized manual admission and saved snapshot replay

* fix(peer): preserve native preview capability refusal

* fix(attachments): recover exact native discard acceptance

* fix(attachments): retain bytes after keyed discard acceptance

* fix(preview): reconcile native recording claims before replay

* feat(peer): answer remote descendant requests from the source (#416)

**What**: Exact #369 candidate42051c passed real source-only web and Codex peer request acceptance, including committed replay after both full CLI servers restarted.
**Why**: Independent tests cannot establish that the production composition, real provider callback and source-only client work together.
**So what**: The planner accepts this bounded internal component for integration into #379 after a fresh head/base/gate check; combined multi-machine/client acceptance and final shipment remain pending.

Requirements and who asked: User #379 mandates native delegated lifecycle and all permitted tools with two MEDIUM reviewers and real isolated client/provider proof.
Deleted: No fake provider, direct SQL mutation, injected browser RPC, capability expansion, alternate harness or duplicate callback.
Bottleneck: Current candidate integration; #383 shared device authority/discovery and #384/#385/#386 remain outstanding.
Checked myself: Primary planner drove actual source A browser, inspected native B events/provider results, restarted both CLI products, replayed exact original request, and reopened the same source-only result.

Identity: HEAD42051c47813c354682b80677009b199d86fef1a0, treef9efef2d7df1b8b91ac64b09018386e79ccc1d45, baseab1bf53640e2a6541a2ba9f316839cedf81d4f46. Clean author workspace /Users/rocky/.t3/worktrees/chromeria/feat-369-remote-pending-requests. Both full production servers ran that source, with meaningful copied task-owned history in NEW /tmp/chromeria-369-acceptance-a and -b; old382 homes/evidence remained untouched. Node24.18, A server14247/web7663, B14248, source incognito Browser connected ONLY to A950a38f2-e2a5-4242-9171-c17e0cb8412c. Actual B is ef047b58-1edf-4ad6-a1ba-44320188325c. No live userdata write, new grant, physical device or standalone worker server.

Human source-only flow: A actual Codex gpt-6.1-sol/MEDIUM delegated real async B task369-parent-native-question-v1 in existing B project/root. B actual Codex asked request_user_input_async, persisted pending at B sequence288. Primary opened source task viewer from transcript; browser URL stayed A, no B profile. The actual card displayed369 REAL REMOTE QUESTION, ACCEPT_369/DECLINE_369 and disabled Send answer until selection. Primary selected ACCEPT_369 and sent once. B durable request resolved at sequence290, command mcp:request:385bcb2f7e0a7415a3c0d1cda8a0cabb0b7204f83949b505a9f4fe4cb6482210:0, 2026-10-18T10:10:47.347Z. Real provider consumed the answer and completed369_REMOTE_ANSWER=ACCEPT_369. Source returned exact original result and zero pending requests. Not inferred from dispatch acceptance.

Agent tool flow: Separate deliberate B task369-parent-native-agent-answer-v1, same explicit Color. Native delegate mode wait returned on real pending question with waitTimedOut:false, requestCount1, actual qualified target/revision334. Source local list{} correctly returned[]; explicit remote descendant list returned its actual request. Native qualified read returned real369 REAL AGENT QUESTION/options/revision334. Source called t3_pending_request_respond with original target/route/expectedRevision334, answers{0:AGENT_ACCEPT_369}, stable key369-parent-agent-response-v1. Initial AND exact retry both returned sequence340. B request has exactly one pending334 and one resolved336 event; real provider completed369_AGENT_RESULT=AGENT_ACCEPT_369. Two B tasks intentionally created, each ordinal1 completed, no duplicate B run.

Restart proof: Read-only query found zero preparing/queued/starting/running/waiting runs in A/B. Primary stopped only captured own sessions47643/49402 (exit130), restarted same source and same NEW homes in sessions86505/9639. A actual Codex ordinal34 called ONLY the exact original respond input/key after reconstruction: sequence340 again. Postrestart B has no additional request resolution or provider run. Source previous-agent viewer reopened after both restarts with original human result, real accepted answer and zero pending requests. Actual client screenshot inspected before upload.

Evidence: local immutable/raw read-only oracles /tmp/chromeria-369-parent-actual-question-proof.json, /tmp/chromeria-369-parent-native-agent-tool-proof.json, /tmp/chromeria-369-parent-postrestart-proof.json. Full CLI logs /tmp/chromeria-369-acceptance-{a,b}-server.log and -restart.log retained. Native Browser screenshots in existing UNPUBLISHED draft evidence-379, never a public release:

![Real source-only pending question](https://github.com/toolboxmd/chromeria/releases/download/untagged-cf149e2fe74d54191ae2/browser-screenshot-localhost-mvdnzzmy-b8c7d28b.png)

![Real source-only completed result after reconstruction](https://github.com/toolboxmd/chromeria/releases/download/untagged-cf149e2fe74d54191ae2/browser-screenshot-localhost-mvdo5woi-469c18e9.png)

Both fresh exact-candidate independent MEDIUM reviews APPROVE: Sol #416 (comment) and installed Grok4.7 #416 (comment). Full aggregate #369 (comment). Current420 CI39116640008, Fork39116640150 and final fingerprint39116844636 SUCCESS; original canceled fingerprint retained separately. Authenticated newest review/independent SUCCESS by lukemaj. Neither review substitutes for the actual proof above. Full author/R1/R2 packet #369 (comment).

Limits: These are TWO isolated Rocky environments, web/source-only browser and actual Codex provider. No physical cross-machine/tunnel/mobile/native desktop/all-provider/real live approval, durable-dismiss or secret acceptance claim. Registered native tests retain their own broader and S1/S2 race/empty-choice proof. Earlier native initialization404 remains UNKNOWN; later tests/CI/actual positives do not diagnose it. Operational verification earlier used invalid exact=true locator syntax and a stale assumed web port; corrected to supported selectors/actual dev-runner7663 without alternate browser or product changes. Cost supported publish #416 (comment) is partial task379 coverage, not complete cost; old unplaced/unpriced usage remains unknown. Background supported sync still pending at this record, not presumed complete.

States: implemented YES; current focused/native tests YES under their exact records; BOTH reviewed YES; current CI YES; bounded primary product proof YES; internal integration NOT YET at this record; main merged/build/shipped/activated/live combined acceptance NO. No package bump. All rollback/evidence/workspaces retained under explicit #379 instruction until final acceptance.

* fix(client): clarify remote requests and count pending work once

* fix(client): make remote request choices readable and accessible

* docs(peer): track the remote request client repair

* fix(peer): count initial remote work once in sparse shells

* feat(device): add typed remote device execution core (#421)

* feat(device): execute typed commands across peer links

* docs(map): link the typed device core component

* fix(device): preserve native authority and typed command semantics

* fix(device): recheck authority before native shutdown

* wip: preserve native contexts and purpose metadata after main alignment

* fix(peer): preserve current-main request answering policy (#539)

* fix(peer): preserve current-main request answering policy

* fix(compat): restore inherited CI consumers

Reuse baseline-only repairs from the preserved #383 checkpoint d892050cb97854e08ca1ca427fc762caebbd69f7 under the #379 ownership transfer. Adapt the two web test fixtures for actual Chromium collection without changing production web behavior.

* test(prism): absorb native recovery observer fixture

Transfer the exact test blob authored in cdd4780 and preserved by PR537 at fcd3162. Await the native observer marker before measuring the live batch; preserve the duplicate assertion and production source.

* fix(client): hide remote children from default navigation (#546)

* wip: hide remote children from default navigation

* wip: register destination navigation component PR

* wip: retain user forks with remote provenance

* wip: cover phone and alternate sidebar navigation

* wip: declare phone and legacy carried upstream edits

* feat(peer): keep destination automations authorized offline (#555)

* feat(peer): retain destination automation authority offline

* docs(peer): link destination authority component PR

* wip: repair destination authority recovery and acceptance findings

* wip: fence schedule acceptance and preserve live birth permissions

* wip: preserve birth permission purpose and split native proof

* wip: preserve recovery routes and birth dependency lifetime

* wip: retain paired recovery routes through repeated unlink

* wip: wake exact automation disable recovery at known expiry

* feat(remote): view and control qualified browser and device resources (#534)

* wip: combine qualified resources with destination automation

* wip: bound mobile returned-resource row height

* wip: respect native top safe area for tool resources

* wip: preserve current-main cross-machine compatibility checkpoint

* wip: preserve linked research and tool policy identity across main alignment

* wip: repair vault authority and keyed MCP configuration replay

* test(server): validate credential refusal error envelopes (#566)

* fix(peer): render HTML from idle destination contexts (#563)

* fix(server): prepare HTML in idle peer resource contexts

* docs(map): track the open idle HTML component

* fix(orchestration): wake parents for remote pending requests (#531)

* fix(orchestration): wake parents for remote pending requests

* fix(orchestration): deliver held remote requests when parent waits end

* fix(peer): wait for request content before notifying parents

* fix(orchestration): catch up requests after remote original completion

* test(web): isolate panel keyboard tests from inherited pointer (#575)

* fix(peer): attribute remote follow-ups to the completing run (#582)

* fix(peer): attribute remote follow-ups to the completing run

* docs(map): link remote completion provenance repair

* fix(peer): use observed purpose for first remote completion

* fix(scheduled-tasks): record refused keyed manual runs as terminal failures

A keyed run_scheduled_task_now whose dispatch failed with a typed error and
left no native receipt returned outcome_unknown and kept the schedule marked
running forever. Record it as the request's failed outcome, release the
running reservation, and replay the same failure for the same key.
Interrupted or defective dispatches stay outcome_unknown.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(orchestration): accept blank optional answers in remote request admission

Remote pending-request answers with expectedRevision rejected a blank or
omitted optional choice-only question as an unoffered option. Skip blank
optional answers before validating options, matching the message-response
path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(fork): keep one owner for server shard weights

already owns it under fork-maintenance; fork-features requires one owner.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(server): weight typed peer effects by their CI time

PeerAuthority.typedEffects.workflow.test.ts takes about 197s in a CI shard
but was weighted 46.4s, so Test Server 8 exceeded its 10-minute limit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(peer): reopened parents follow their remote tasks again

Archiving a parent ended its remote follower, and nothing restarted it on
unarchive, so the reopened parent missed later remote results until a
server restart. The follower now stays registered and waits for the
parent's unarchive or deletion instead of exiting, so reopening resumes
observation without a new entry point or a duplicate follower.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(peer): threads read and answer their own questions again

The replacement pending-request service refused every "own" answerer, so a
thread reading or answering its own user-input question, or an ordinary
full-access MCP client doing so, got capability_denied. Own access is
restored for local, non-linked callers on threads not delegated from
another environment. Own approvals, dismiss, linked clients and remote
delegated children keep their existing refusals.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(web,mobile): remote request cards keep multiline editor answers

Remote pending-request cards rendered every custom answer as a single-line
field, so a multiline editor prefill displayed and was stored flattened.
Editor questions (those with an initialAnswer) now use the Textarea on web
and a multiline, newline-submitting field on mobile, as the local paths do.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(scheduled-tasks): keyed pause and resume replay their receipt

A keyed update_scheduled_task carries clientRequestId on its input, so the
enable-only shortcut never matched: a keyed pause or resume fell through to
the full definition update and was refused without a purposeIntent. The
shortcut now ignores routing fields, and setEnabled records and replays
the keyed mutation receipt like create, update and delete. A retried
keyed pause after a later resume replays instead of retiring the newer
automation certificate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(scheduled-tasks): post-admission recheck refusals release keyed manual runs

A typed refusal from the recheck after admission, or after the dispatch
claim, now records the key as failed and frees the schedule instead of
leaving it running. The stage-guarded claim keeps uncertain dispatches
outcome_unknown.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(childThreads): stop-disposed remote children stay pending background work

A parent interrupt disposes a delegated completion with disposedBy "stop"
without stopping the remote child. The sparse SQL remote arm dropped that
row while the local arm and pendingDelegatedChildTasks kept it, so shells,
auto-settlement and storage cleanup treated the parent as idle.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(scheduled-tasks): final recheck refusals no longer fail a concurrent same-key dispatch

The final live recheck ran after the prepared -> dispatching claim and
terminalized a refusal from the dispatching stage. For an existing-thread
schedule a same-key retry can read dispatching and send concurrently, so
the refusal failed the request and freed the schedule while that send was
accepted. The final recheck now precedes the claim, so a refusal is only
recorded through the prepared-stage compare-and-set.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(peer): finished remote jobs no longer hold back live Stops

A lifecycle-v1 follower keeps long-polling its job there after the result,
so a later Stop or follow-up is still observed. Each poll held one of the
eight shared peer permits for up to 20 s, so more than eight finished jobs
starved Stops and live observations of other jobs.

Followers whose job has nothing left to do there (result available, no
queued runs, questions or recovery wait, or a confirmed Stop) now wait on
their own semaphore. Stops, unconfirmed and acknowledged stops, live jobs
and follow-ups seen as working keep the existing eight permits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(peer): stopped remote jobs with new work there keep live permits

A confirmed Stop counted a job as settled whatever its latest snapshot
said, so fresh direct input on the destination child after the Stop
left its follower queued behind idle settled long-polls, also after a
restart.

A job is now settled only while its latest snapshot is quiet (result
available, no queued runs, questions or recovery wait); a confirmed Stop
also needs that quiet snapshot. Anything showing activity uses the
shared network permits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant