feat(remote): advertise instance kind and process identity - #13565
Merged
Conversation
Contributor
Code Review SummaryStatus: No Issues Found | Recommendation: Merge Files Reviewed (4 files)
Previous Review Summary (commit e8a3ce1)Current summary above is authoritative. Previous snapshots are kept for context only. Previous review (commit e8a3ce1)Status: 1 Issue Found | Recommendation: Address before merge Overview
Issue Details (click to expand)SUGGESTION
Files Reviewed (9 files)
Reviewed by grok-4.6 · Input: 99.4K · Output: 6.3K · Cached: 230.4K Review guidance: REVIEW.md from base branch |
Collaborator
Author
|
(bot) The companion ingest PR is Kilo-Org/cloud#5666. Native verification remains pending on the complete mobile feature tip. |
This was referenced Aug 28, 2026
eshurakov
approved these changes
Sep 1, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No new behavior — this pull request prepares information for a separate interface update; it changes no screen or user action.
Implementation
Status A denotes an added file; M denotes a modified file. Sizes show added and removed lines from the accepted inventory.
RemoteProtocol.InstanceAdvertisementadds optionalkind,startedAt, andgitBranchfields while accepting older advertisements and retained relay attachments.kindacceptscliorremote;startedAtrequires a 24-character timestamp with milliseconds;gitBranchallows at most 24 code units.These fields must stay optional until older clients and retained attachments retire.
Files
packages/opencode/src/kilo-sessions/remote-protocol.ts— Source, M, +6/-0 lines: validates the optional metadata, includingz.iso.datetime({ precision: 3 }).length(24)for startup time.packages/opencode/test/kilocode/sessions/remote-protocol.test.ts— Test, M, +66/-0 lines: adds protocol tests.buildInstanceAdvertisementdefaults its optional producer-kind argument tocli;kilo remoteoverrides the stored advertisement withremote.startedAtcomes fromnew Date(performance.timeOrigin).toISOString()once, so all advertisements and reconnects share the process startup time.One-argument callers still work; name and project limits remain 64 characters, the version limit remains 32, and connection lifecycles stay unchanged.
Files
packages/opencode/src/kilo-sessions/instance-advertisement.ts— Source, M, +12/-3 lines: types the second argument from the advertisement kind and fixes startup time per process.packages/opencode/src/cli/cmd/remote.ts— Source, M, +1/-1 lines: passesremotebefore enabling the remote connection.packages/opencode/test/kilocode/cli/cmd/remote.test.ts— Test, M, +19/-6 lines: revises the remote command tests.KiloSessionsrefreshes instancegitBranchon each heartbeat using theVcs.Servicelookup already used for session rows.The instance value stops at 24 code units without a trailing high surrogate; session rows keep the full branch.
Missing or failed lookups clear the instance branch; copied advertisements preserve
kindandstartedAt, including reconnect heartbeats.Files
packages/opencode/src/kilo-sessions/kilo-sessions.ts— Source, M, +5/-1 lines: refreshes the copied advertisement with the bounded branch instead of sending the stored advertisement unchanged.packages/opencode/test/kilocode/kilo-sessions.test.ts— Test, M, +135/-20 lines: adds and revises KiloSessions integration tests.packages/opencode/test/kilocode/sessions/remote-ws.test.ts— Test, M, +60/-45 lines: revises the RemoteWS tests.testAllowraises the classifiedAppRuntimecount from 31 to 36 for theKiloSessionsintegration suite.The classification covers
Vcs.Servicebranch refresh, reconnects, limits, and failures, plusSession.Servicechecks that preserve complete session branches.The guard still rejects unclassified references and any count mismatch.
Files
script/check-opencode-promise-facades.ts— Source, M, +5/-2 lines: adjusts the exact reference allowance and explains the service use in integration tests.Release automation receives a minor-release request for
kilo-codebecause the heartbeat gains optional metadata.The release note covers instance kind, process startup time, and the current Git branch.
Files
.changeset/mobile-instance-metadata.md— Source, A, +5/-0 lines: adds the authored minor-release entry for the producer metadata.Tests: 4 files updated (+280/-71 lines):
remote.test.ts,kilo-sessions.test.ts,remote-protocol.test.ts, andremote-ws.test.ts.Generated: 0 files.
Issue
No issue number was supplied. This pull request implements the approved optional metadata slice.
Context
This pull request adds producer metadata for later mobile instance selection. It contains no cloud or mobile implementation changes.
Worktrees
/Users/igor/Projects/.worktrees/mobile-ux-ad6d-kilocode— contains all 10 changed files: 6 source files and 4 test files./Users/igor/Projects/.worktrees/mobile-ux-ad6d— cloud context only; no changes belong to this pull request.Both worktrees retain branch
mobile-ux-ad6d.Review range:
origin/main...mobile-ux-ad6d-s1; producer review head:bd5f1eb311ba977913490470aa468949da21e83c.The supplied statistics total 314 insertions and 78 deletions.
Companion pull requests
Screenshots / Video
Visual Changes: N/A
This producer pull request has no direct interface change. N/A also records the missing accepted attachment report for the complete section.
The companion mobile changes still affect the interface.
How to Test
Verification
No end-to-end (E2E) report is attached because the complete functional runtime loop has not passed.
Generation 21 completed producer startup and the final N04 observation; required functional native proof remains incomplete.
The owner-descoped visual variants do not block readiness.
The permitted G3, settings, and observer units are complete; no remaining functional flow has standalone native proof.
The preparation cap prevents the missing flow and observer implementation, so the complete required functional loop has no pass.
Manual/local verification
Recorded verification
These results come from earlier agents; this description round runs no product check or continuous integration (CI) job.
Retained B01–B04, N01, N02, N03-functional, and B05 have only their historical limited proof.
Carried proof and limits
backend-g4-baseline-r1-report.mdand decisions.e2e-backend-producers-g5-r2-p1M2tB/backend-producers-g5-r2-report.md; actual producer metadata and legacy compatibility.e2e-ios-zero-g5-r1-yyqmew/e2e-round.md:7–20;ios-baseline-zero-countspassed native empty counts, tab selection, and Home return.e2e-ios-baseline-r2-o8LO9w/e2e-round.md:13–29;ios-baseline-empty-historypassed empty history and Go back.e2e-ios-producers-g11-r9-TRx1yg/e2e-round.md:31;producer-n03-g8.jspassed genuine trio selection, checked identity, cancellation, and draft preservation.dce78998d885938e3f8bddcedd031f7f475776c9; no controlled-collision, keyboard, or current localized-label proof follows.e2e-ios-producers-g11-r9-TRx1yg/e2e-round.md:51–59; reconnect facts passed before the visual variant failed; Options expired was not reached.Historical proof heads for N03-functional and B05 only:
dce78998d885938e3f8bddcedd031f7f475776c9.e8a3ce11fdaf26dd395629f4d5ee3463f7e7ad2f.Earlier cases retain their own earlier evidence heads.
Historical N03 depends on spent producer inputs, stopped processes, and old coordination markers.
N01 and N02 cover completed criteria, not missing renewed flows; they justify neither an empty batch nor a new producer lifecycle.
Reviewer test steps
packages/opencode, run each suite in a separate Bun process:Blocked checks and substitute verification
Current native gate — generation 33
The permitted G3, settings, and observer units have completed their checks and reviews.
No remaining functional flow qualifies for the next batch.
No native lifecycle, resource start, new preparation unit, or historical replay occurred.
The current inventory records these initialized sources and verified published trees:
/Users/igor/Projects/.worktrees/mobile-ux-ad6d9f44255b82553cbae2aa2417e76a86d2cc505a9dfaab85b479373a2e454e492e922face4a3a3b453/Users/igor/Projects/.worktrees/mobile-ux-ad6d-kilocode31e293d15dc1af38f5c3f74cbe02bc45b90f24f2a779ae1f764e936b1865504cf826e4a151ec402cThe inventory records clean, pinned initialized branches and fresh passing
stack.sh verifyresults for both worktrees.These initialized source heads are not this pull request's review refs or native proof.
No current device claim, runtime lease, account readback, service identity, or fixture readiness is claimed.
All retained runtime identities are historical and stopped.
No new runtime pass, uploaded demo, human-ready, assignment, or product merge exists.
Final authorized lifecycle — generation 21
The single authorized lifecycle ran; startup succeeded, and functional verification remains incomplete.
0efb7d9f791354597699594ab493ce17cb07e314.paneIdentityrepair with unchanged identity guards.selectedProducerrepair with unchanged identity guards.Preparation retained these results:
E2E NOT READYat profile-settle after 90 seconds while Appium started.E2E READYand proved the account and four accessible choices.The verifier returned
DONE VERIFICATION FAILED; the native wrapper returnedCASE PASSfor collection only, not visual acceptance.OK; no code, flow, or environment file changed.Retained verifier record:
/Users/igor/Projects/.scratch/kilo-workflow-mobile-ux-ad6d.yql1or/e2e-ios-n04-last-g21-r1-FRm7mo/e2e-round.md.Observation root:
/Users/igor/Projects/.scratch/kilo-workflow-mobile-ux-ad6d.yql1or/producer-g20-n04-last-native.N04-header-pre-scroll.png.N04-scroll-visible.png.native-state.json.case/case.mp4.case/case-demo.mp4.case/case.log.The verifier and visual checkers inspected the images; the dispatcher did not.
These local files are retained evidence, not public uploads or an uploaded demo.
No E2E reporter ran because the complete functional runtime loop has not passed.
Owner-descoped criteria
These criteria do not block readiness and receive no new runtime attempt.
Functional accessibility labels, roles, identifiers, and default behavior remain required.
Remaining functional proof gaps
All listed scenarios remain unproved; default functional labels, roles, identifiers, checked state, keyboard focus, and localization remain required.
g30-native-picker-report.md:3–5,60–66,85–87contains no executable picker flow. G3 catalog compatibility is now approved, but no collision-selection flow or standalone proof exists.LP02 (criterion 1): No executable state flow exists. Approved G5 controls cannot substitute for native loading, real error, Retry progress, empty Refresh, or polling observations.
LP03 (criteria 1, 4): No executable expiry/bridge-loss flow exists. Historical cancellation is retained, but silent expiry and Options expired remain unproved.
LP04 (criterion 5): Keyboard helpers are host-tested only; actual key paths, selectors, focus, and same-caller return remain uncalibrated and unproved.
LH02 (criterion 16): No native proof of initial/cached failures, preserved query recovery, unmatched states, or stale/denied row actions exists. Empty N02 proof covers only its recorded narrow state.
LH03 (criterion 17): No native localized Share-label or unchanged Home/card comparison exists; locale wiring and real row observations remain pending.
g30-native-counts-report.md:3–5,61,69–74contains no executable count flow or complete runtime schema. Full scoped totals and cross-tab/scope behavior remain unproved.LC02 (criterion 20): No count flow exists. The reviewed observer inventory confirms no executable binding for actual committed unresolved organization state; the shared skeleton cannot distinguish it from request loading.
LC03 (criterion 20): No count flow exists. G7 restoration is host-approved only; actual selected-scope denial, committed removal history, exact restoration, and readbacks remain unproved.
LC04 (criterion 22): The locale module is host-approved, but picker/count integration and standalone native proof remain absent. All 15 reachable plural cases and eight group labels remain required.
C02 (criteria 6, 7, 11): Resume, the second nine-second false-source hold, HTTP 503 reachability, and retained content have no standalone native proof.
C03 (criteria 8, 10): Actual owned transport failure, delayed confirmation, immediate recovery, and exact localized invocations have no standalone native proof.
C04 (criteria 9, 10): The native three-second timeout and stale recovery order have no standalone proof. Host fixture tests cannot prove the native fetch deadline.
C05 (criterion 10): Native held actual outcomes, repeated sources, newer attempts, and out-of-order release remain unproved; complete invocation windows remain unavailable.
C06 (criteria 10, 11): Native destruction, quiet drainage, exact adapter restoration, and unmodified smoke remain unproved. No executable announcement observer exists through the full drain.
g32-native-settings-closure-report.md:104–112expressly records no standalone settings proof. Unknown cold boot, actual paused queries, Retry, and cached controls remain pending.S02 (criteria 12–14): Actual organization standalone recovery, retained owner/member roles, selector/focus calibration, and native request evidence remain pending.
S03 (criteria 12–14): Personal inline recovery lacks actual healthy same-owner G6 inventory/readbacks, exact native focus calibration, and standalone proof. No installation mutation is authorized.
S04 (criteria 12–14): Organization inline recovery lacks actual healthy same-owner G6 inventory/readbacks, restricted-role native evidence, and standalone proof.
S05 (criteria 10, 14): Settings native destruction, exact adapter/caller restoration, listener absence, and unmodified smoke remain unproved.
The intersection of remaining criteria, standalone-proved flows, and current valid prerequisites is empty.
This is an authorization/evidence constraint, not a new product defect, failed check, or runtime attempt.
The required complete native gate cannot hold under that cap.
The completed catalogs, scoped tests, CI, and reviews do not substitute for these functional native criteria.
No human-ready label, new assignment, reviewer request, or product merge is permitted while the functional gate remains incomplete.
Historical direct startup — generation 19
These results describe generation 19, not the final generation 21 lifecycle.
The historical visual criteria do not form the current blocking list.
ourcecommand did not invoke the producer.pending_pane_changedbefore the 240-second deadline./bin/bashtokilo.startup_orderbefore launch.Historical authorized startup — generation 17
These historical results come from the generation 17 lifecycle report.
poll_deadlineafter the approved 240-second discovery budget.Historical replacement startup — generation 16
wait_failed; its capture recordsWAIT TIMEOUT producer-start 60s, with no discovered advertisement.Historical failed startup — generation 14
During generation 14, terminal discovery returned
poll_deadlinebefore any advertisement.Generations 16 and 17 used these source identities; they do not change this pull request's review range:
9f44255b82553cbae2aa2417e76a86d2cc505a9d.31e293d15dc1af38f5c3f74cbe02bc45b90f24f2.e8a3ce11fdaf26dd395629f4d5ee3463f7e7ad2f.Generation 19 used these source identities without accepting a producer runtime identity.
N01's historical image-only review remained pending; its native labels did not prove screen-reader speech or external-keyboard focus.
The owner now descopes screen-reader presentation variants, but functional accessibility and keyboard focus remain required.
Human steps
The media steps apply to required functional/default proof, not to owner-descoped visual variants.
No product merge is performed in this round.
Notes
The permitted G3, settings, and observer preparation units are complete. No remaining functional flow has standalone native proof. The preparation cap prevents the missing flow and observer implementation. Required functional native verification remains blocked; no new native lifecycle ran.
Generation 21 completed producer startup and the final N04 observation. The header failed under dark extra-extra-large settings; scrolling remained inconclusive. These visual variants are owner-descoped. Required functional native proof remains incomplete.
Native bot verification is pending on the complete mobile feature tip. This PR only adds optional producer metadata.
Checklist
The handoff does not include the author's personal-review attestation.
Get in Touch
No contact handle was supplied.
Stacked PRs — merge bottom to top. Each level shows only its own diff.
Runtime verification (E2E, user advocacy, simplify) runs on the tip PR over every level.
Every level keeps its own checks, its own bot review, and its own threads; each one is answered on its own PR.
Each level is its own deliverable: it builds and passes its own checks alone.
A finding on a level is repaired on that level, then carried upward with stack.sh forward.
mobile-ux-ad6d-s1— feat(remote): advertise instance kind and process identity #13565 ← this PR