Repository navigation
Repin octos to 056173e8 (reloaded tool rows show their tool's name) - #298
Merged
Merged
Conversation
The supervisor saw the kernel end (its stdout closing, or its exit status) and read the stderr tail at once, but stderr is copied into the tail by a task of its own. The line the kernel wrote just before it exited could still be in the pipe, so the reason lost it: CI's `a_kernel_that_dies_closes_its_connections_with_its_last_words` failed with "the kernel closed its output: fake kernel up", without the "asked to exit" the fake kernel wrote last. The tail is now read after the kernel is stopped and the stderr task has reached the end of the pipe (bounded at 2 s, for a process the kernel started that still holds the pipe). Failed reasons get the same complete tail. The test asks for the last words themselves, not just "exit". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… probes The glance tile tests register probe system apps (os.glancetile, os.glanceinput, os.glancequiet, os.glancesweep) in App Hub's system-app registry. That registry is process-wide, has no removal, and is the one `system_card_apps` lists, so a catalog test running after a glance test in the same process saw the probes as launcher rows: `bundled_apps_open_without_catalog_files_or_child_processes` failed its catalog comparison 7 of 10 times beside `glance_card::` on main, and `the_system_apps_ship_as_card_apps` compares the same list. Tests now register their system apps through `apps::test_system_apps::register`, which notes the id before it registers it, and the tests of the build's own catalog leave noted ids out. Production code is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`approvals::tests::the_relay_gets_decisions_made_before_it_was_installed` began with `init_memory()`, which replaces the shell's process-wide approvals with empty ones. Every consent a test running beside it had given was gone. `app_chat::tests::the_panel_opens_a_sharing_context_and_sends_person_turns_there` allows its app, then reads `agents::line()`, which reports a peer slug only while the app is allowed. Beside `approvals::` it failed 50 of 50 runs with `peer_slug: null`. The same test also installed its recording relay into the shared approvals, where it would take other tests' decisions. The relay seam (`approval_requested`, `set_relay`, `bus_requested`) is now methods on `Approvals`. The free functions call them on the shell's approvals, as before. The test builds `Approvals::memory()` and never touches the shared one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…the whole connect's `a_jail_only_app_reads_its_jail_and_is_refused_everything_else` failed on GitHub's macOS 14 runners with "the hub is reachable: " and nothing after it: the sandboxed `nc -z` exited 1 without a word, because nc prints why a connect failed only with `-v`. Its exit status says only that the connect did not complete. A sandbox refusal and a refusal past the sandbox (no listener on the port then, the network stack) look the same, though only the first is what this test is about. Closing the hub's listener before the probe reproduces the CI message exactly. The probe now runs `nc -v -n` and the test reads what nc says. The hub fails only on the sandbox's own refusal (EPERM from Seatbelt and seccomp, EACCES from Landlock), or when nc never reported a connect at all. A refusal past the sandbox is printed and passes. Any other port must now be refused by the sandbox itself, not just fail, which the old check could not tell apart. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
octos#2675 makes session/hydrate rows name their tool calls: a tool row carries tool_call_id and tool_name, an assistant row its tool_calls. The shell's system chat and "Ask <app>" panel already read tool_call_id and name/tool_name, and the broker's merged history passes rows through, so reloaded tool rows now show their tool's name instead of "tool". The two-lane scenario checks it against the real kernel: News's agent's news_share call in the panel's reloaded history, and the system chat's peer_send_input. The pin also brings #2261, #2664, #2665, #2669, #2671 and #2672. octos-core, octos-cli, octos-research and the kernel artifact move together; Cargo.lock changes only the 17 octos source lines. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ymote
force-pushed
the
chore/repin-octos-056173e8
branch
from
October 2, 2026 20:59
313caa2 to
db0e792
Compare
Contributor
Author
|
Merged in a merge train; local CI (Mac with rom toolchain + --linux-host) passed on the train head 72e5d55, which contains this PR.
The train was #291, #293, #297, #294, #298, #295, #296, #299, #300 and #292, on main f6678b5. After the last merge, main 301be0c has the tested head's tree. |
This was referenced Oct 2, 2026
Merged
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.
Moves OctoSense's one octos pin from
ae230ce0to056173e8, the merge of octos-org/octos#2675. That PR fixes the root cause behind #281's partial fix.The fix: reloaded tool rows name their tool. At
ae230ce0,session/hydraterows carried no tool name or call id. So after a reload, the system chat and the "Ask " panel showed every tool row as "⚙ tool · done". With octos#2675, a tool row carriestool_call_idandtool_name, and an assistant row carries itstool_calls. The fields reach every connection, including the shell's stdio link, which has no v2 envelopes. Both chat models already readtool_call_idandname/tool_name(system_chat/model.rs,app_chat/model.rs). The broker'smerged_historypasses rows through unchanged. No lookup change is needed. #281 (open) prefers a row's own name, so its turn-matching becomes a fallback for an older kernel. With this pin, a turn from before the shell's run is named too, which #281 alone could not do.Confirmed against the real kernel. The two-lane scenario (
host_tools::scenario_tests, step 3g) reloads both lanes at the new pin, with the scripted model that reusescall_1for every call:news_sharerow with its call id, andConversation::load_historyshows it asnews_share;ChatModel::load_history, shows the delegation aspeer_send_input.What else the pin brings
SessionOpenedgainsaccepted_client_commands, omitted when an open declares noclient_commands. OctoSense declares none (AppCard passesclient_commands: None) and builds noSessionOpened. No change.session/open'sclient_commands(UPCR-2026-037) and rewords the gateway-only slash reply. No wire change.AGENTS.md.OCTOS_*variables (such asOCTOS_AUTH_TOKEN) from the kernel's environment.auth/keychain.rs, which resolves thekeychain:markers AI providers may write into_main.json) refuses symlinked or non-regular credential files and writes atomically; a failed save through octos keeps the old credentials. AI providers writes_main.jsonitself, so nothing changes on its side.octos's dependencies are unchanged between the two revisions.
Files
The same set as the last octos repin (765dec2), minus the docs that no longer name a revision since #275:
Cargo.toml: the three octos revs and the pin's comment.Cargo.lock: only the 17 octossourcelines. A plaincargo update -p octos-*also reshuffled which already-lockedwindows-*versiongeneratorandiana-time-zoneuse. That churn is unrelated to octos and would collide with Repin the runtime to makepad 39a9de88 (OpenHarmony idle and input, GL GPU timing, terminal shortcuts) #289, so it is left out.cargo metadata --locked(setup.py --check --cargo) accepts the lock as is.tools/test_kernel_artifact.py:REV.kernel-artifact.py --host --plannow names056173e8.docs/adr/0004-native-apps-hosting-and-peers.mdandcrates/toolbox/README.md: the pin.crates/shell/src/host_tools/scenario_tests.rs: step 3g above.Overlap
#289 (the makepad repin) also edits
Cargo.tomlandCargo.lock, and merges first. This PR rebases after it and rerunssetup.py --check --cargo. The octos lines do not overlap the makepad ones.Verification
On the Linux build host (stable Rust,
CARGO_BUILD_JOBS=12), at31fec2bb. That is this commit before an amend that only updates the toolbox README's run record.cargo test --locked -p octosense-kernel: 50 passed. That is 30 unit tests and 13 against the stand-in kernel; the 7 real-kernel tests return early without a binary and are run below.cargo test --locked -p octosense-app-peers --features octos-core,ws: 104 passed (89 scripted; the 15 real-kernel tests returned early, run below).cargo test --locked -p octosense-ai-host --features octos-core,llm: 38 passed, 1 ignored.cargo test --locked -p octosense-toolbox: 83 passed (the README's run record now names this pin).phone/:cargo test --locked --features mobile-apps -p octosense-shell system_chat: 66 passed.... app_chat: 9 passed.python3 tools/kernel-artifact.py --host(7 min). It is cached on the host the way ci-local caches it (octos-kernel/Linux-x86_64-056173e8…/octos, under its per-revision lock).cargo test --locked -p octosense-kernel --test real_kernel -- --test-threads=1: 7 passed.cargo test --locked -p octosense-app-peers --features octos-core --test real_kernel: 15 passed.phone/:cargo test --locked --features mobile-apps -p octosense-shell --lib host_tools::scenario_tests -- --test-threads=1(the two-lane scenario, with step 3g): 5 passed.host_tools::real_kernel_tests(the shell's relay): 3 passed.ae230ce0kernel runs to the end, then fails at step 3g. Its merged history has two tool rows, and neither carriestool_name.phone.yml's main test step, run on Linux fromphone/withOCTOS_SHELL_TEST_KERNEL(cargo test --locked --features mobile-apps -p octosense-shell -p octosense-home -p octosense-app-policy -p octosense-app-hub -p octosense-appcard -p octosense-ai-host): 1128 passed, 1 failed. The failure wassandbox::tests::a_program_reached_through_a_link_outside_its_roots_starts, which hit "Text file busy": a probe was exec'd while a parallel test still held it open. Alone it passes 3 of 3 times, and all 23sandbox::tests pass.desktop.yml'scargo check --locked -p octosenseand--features mobile-apps, on Linux: pass.On the Mac:
python3 tools/setup.py --update, then--check --cargo, andpython3 tools/native_apps.py --checkpass.python3 -m unittest discover -s tools -p 'test_*.py': 90 passed.Not run (unverified): the
desktopandhomejobs on macOS (queued on GitHub),tools/ci-local.sh, the Android cross-build of the kernel artifact, and any device or instrument run.🤖 Generated with Claude Code