Skip to content

Pin octos main 39e22d45 - #350

Merged
ymote merged 1 commit into
mainfrom
chore/octos-39e22d45
Oct 7, 2026
Merged

ymote merged 1 commit into
mainfrom
chore/octos-39e22d45

Conversation

@ymote

@ymote ymote commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

octos-core, octos-cli and octos-research move together from 056173e8 to octos main 39e22d45 (still 2.0.3-rc.13). OctosCode pins the same revision (octos-org/octoscode-app#4), and inside OctoSense both must resolve one octos.

Stacked on #349; merge it after #349. Its base moves to main once #349 is in.

Changes since 056173e8 that matter here

  • octos#2692: a stdio connection never negotiates projection.envelope.v2. On such a connection, a turn's terminal now arrives after its queued envelopes; before, a client could see a turn end ahead of its last words.
  • octos#2697, #2695: if an erase entry fails, a purge now stops as peer_purge_incomplete, and the peer stays staged.
    • crates/app-peers/src/purge.rs already keeps the record on any error other than busy or not-found.
    • So the account stays suspended, and a later purge erases again.
  • octos#2677: option-like revisions are refused in workspace history show/diff.
  • octos#2704, #2709: keychain items are released with a deleted profile or sub-account.
  • octos#2666: a profile's open stores are handed to its replacement runtime.
  • octos#2667: the resolved model route is exported to skills.
  • octos#2465: context/state_reported, opt-in (context.state.v1). Nothing here requests it. AppCard's store and agent match every notification kind, so both now list it as never received (octos-app-store/src/state.rs, app/src/backend/octos_ui.rs).

What moves

  • Cargo.toml: the three revisions and the pin comment.
  • Cargo.lock: only the 17 octos crates' source lines. octos's manifests did not change between the two revisions, and cargo metadata --locked accepts the source-only edit. (A plain cargo update -p octos-* also re-resolved generator and iana-time-zone's Windows dependencies, so I kept the minimal lock.)
  • EXTERNAL_TURN_TOOLS in crates/kernel/src/system_tools.rs is unchanged: octos's list is the same at both revisions.
  • The nix patch stays at 18fcd3f1; octos main no longer vendors it.
  • Docs:
    • docs/architecture*.md: the octos links now read the new pin. Every linked path exists there.
    • ADR 0004's pin note.
    • crates/toolbox/README.md's tested-at-pin line.

Checks (on 7fce1e8, plus the AppCard lines on this head, 321676b)

  • cargo check --locked -p octosense, and from phone/ cargo check --locked -p octosense-home --features mobile-apps: pass. tools/check-shell-graph.sh -p octosense: one octos (39e22d45).

  • cargo test --locked:

    Package Features Passed Failed
    octosense-kernel default 56 0
    octosense-app-peers octos-core,ws 108 0
    octosense-toolbox default 83 0
    octosense-ai-host octos-core,llm 40 0
  • Real kernel: python3 tools/kernel-artifact.py --host --stage target/debug built octos 2.0.3-rc.13 (39e22d4). Against it, both suites pass, including the purge tests:

    • OCTOS_CORE_TEST_KERNEL=… cargo test -p octosense-kernel --test real_kernel: 7 passed;
    • OCTOS_APP_PEERS_TEST_KERNEL=… cargo test -p octosense-app-peers --features octos-core --test real_kernel: 15 passed.
  • The first local CI run (7fce1e8) failed in 7 steps on one error: AppCard's exhaustive matches missed ContextStateReported (E0004). After the fix, cargo clippy --locked -p octos-app -p octos-app-store -p octos-app-transport -p octos-app-render --all-targets --no-deps -- -D warnings passes, and cargo test --locked -p octos-app-transport -p octos-app-store passes (77 tests).

  • Not run: the Android kernel artifact (liboctos.so) at this revision, and any device. Unverified on a phone.

  • Local CI (tools/ci-local.sh --only all --linux-host) reruns on this head before the two PRs merge.

🤖 Generated with Claude Code

@ymote
ymote force-pushed the chore/octos-39e22d45 branch from 7fce1e8 to 321676b Compare October 7, 2026 00:17
ymote added a commit that referenced this pull request Oct 7, 2026
OctosCode (octos-org/octoscode-app) is itself an octos client. Inside
OctoSense it gets no listener, no token and no pairing. Instead it opens a
kernel port that the shell's router holds to a coding scope (ADR 0003, item
9; the person chose this over host authority and over a new octos token).

- makepad #101 (in makepad main 68d1f4ec, #349): Makepad's `OctosUiPort`,
  parked for the host the way a peer link is.
- Kernel router: scoped consumers.
  - Each request of a scoped consumer is checked first, and a refused one is
    answered by the router (`scope_denied`) and logged.
  - A session's frames wait for the scope's preparation (its exact tool
    list).
  - The consumer hears only its own sessions; a host-only frame about one of
    them goes to the shell instead.
  - Results pass the scope's filter, and so do the notifications it lets
    through (`Scope::rewrite`): octos repeats an opened session as a
    `session/open` notification with its whole capability list.
  - The consumer may answer only the kernel requests it was sent.
  - `serve_scoped` runs a port on the kernel's runtime, with `Reset` on a
    kernel restart.
- Shell: the module host claims ports per isolate, as it does peer links.
  native-apps.json `kernel: "coding"` grants one; any other port is closed
  with the reason. The coding scope (`coding_scope.rs`):
  - own sessions: `_main:api:code-<id>`, no topic, profile `_main`;
  - folders: its jail, or under a granted read-write root (home on a
    desktop), never OctoSense's or the kernel's data, a hidden top-level
    folder, or a folder holding any of them;
  - a coding client's methods only, and every list of supported methods it
    is told is trimmed to those;
  - each session's tool list is octos's external-turn list, so no command
    runs.
- Module host: point the preludes' `theme` at `mod.theme` before a module
  registers. A styled isolate's diverged, so a module's own theme roles
  never reached its widgets.
- OctosCode's entry: octoscode-app main 8039d44c (#4, built against octos
  39e22d45 like this repository, #350), default on desktop and phone,
  `home:rw`, `kernel: coding`. octoscript-render is patched to `.sources`
  like the rest of Octoscript-Makepad, whose pin #349 moved.
- Docs: ADR 0003 item 9; the architecture guides (App ↔ kernel, the native
  apps table); the README dependency table; AGENTS.md.

Tests:
- router 11, coding scope 4, module ports 2, kernel 62; tools 115;
- desktop shell 857 passed; phone shell 946 passed, including the
  reserved-name test (App Hub 7bb63ff9's contract reserves `octoscode`).

Verified in a hidden desktop shell (octos 39e22d45, OctosCode 8039d44c):
- the port was granted; both `session/open` frames list 53 methods;
- a `code-…` session in the picked folder ran read_file;
- answers streamed in full and the strip returned to Ready;
- the model picker lists the providers' models but cannot switch them
  (`profile/llm/select` changes the profile's model; Setup owns it).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
octos-core, octos-cli and octos-research move together from 056173e8 to
octos main 39e22d45 (still 2.0.3-rc.13), the revision OctosCode now pins
too (octoscode-app #4). Since 056173e8:
- #2692: on a stdio connection, which never negotiates
  projection.envelope.v2, a turn's terminal now arrives after its queued
  envelopes. Before, a client saw a turn end ahead of its last words.
- #2697 and #2695: a purge whose erase fails stops as
  peer_purge_incomplete and keeps the peer staged. app-peers already keeps
  the record on any error other than busy or not-found, so the account
  stays suspended and a later purge erases again.
- #2677: option-like revisions refused in workspace history show/diff.
- #2704 and #2709, keychain items released with a deleted profile or
  sub-account; #2666, a profile's open stores handed to its replacement
  runtime; #2667, the resolved model route exported to skills.
- #2465: context/state_reported, opt-in (context.state.v1), which nothing
  here requests. AppCard's store and agent match every notification kind,
  so both now list it as one they never receive.

octos's manifests did not change, so Cargo.lock moves only the 17 octos
crates' source. The external turn allowlist (EXTERNAL_TURN_TOOLS) is the
same at both revisions. The nix patch stays at 18fcd3f1: octos main no
longer vendors it. The architecture guide's octos links read the new pin.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ymote
ymote force-pushed the chore/runtime-makepad-68d1f4ec branch from 52932fd to 2bb2e29 Compare October 7, 2026 00:49
@ymote
ymote force-pushed the chore/octos-39e22d45 branch from 321676b to 15b0040 Compare October 7, 2026 00:49
@ymote
ymote changed the base branch from chore/runtime-makepad-68d1f4ec to main October 7, 2026 01:32
@ymote
ymote merged commit 2baa5c1 into main Oct 7, 2026
5 checks passed
@ymote

ymote commented Oct 7, 2026

Copy link
Copy Markdown
Contributor Author

Merged as a two-PR train (#349, then #350) on local CI. tools/ci-local.sh --only all --linux-host ran on 15b0040, the head of #350, which contains #349's 2bb2e29. Both were rebased on main 1eeedac after #351 landed. Result: PASSED in 36m09s, 37 steps passed and 0 failed, Linux-host jobs included. The 8 skipped steps are all rom.yml, which these PRs' paths do not trigger. The first run, on 7fce1e8, failed one compile step in 7 places: AppCard's exhaustive match missed octos's new ContextStateReported, now fixed in #350. Main's tree after both merges (2baa5c1) equals the tested tree.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant