feat(kernel): realign DomainGroup with the family directories - #5332
Conversation
The runtime axis was the half of kernelization the flat tree had been blocking. With `src/openhuman/` now one directory per family (tinyhumansai#5328), `DomainGroup` can name each one instead of sweeping half the controller surface into `Platform`. Adds seven variants — Inference, Integrations, Automation (cron + subconscious), Runtimes (runtime + sandbox), Desktop, Hosted, Relay (tinyplace) — and retags 33 of the 45 `Platform` push sites. `Platform` now holds only the kernel surfaces with no family of their own: platform/, tools/, http_host/, test_support/. This is not cosmetic. It fixes two defects the catch-all was hiding: 1. `harness()` claimed "agent + memory + threads + config + security" but silently dropped ten namespaces into `Platform`: agent::{agentbox, harness_init, artifacts, learning}, security::{credentials, devices}, config::{workspace, migration_helpers}, memory::people, skills::webhooks. An agent harness that never registers `harness_init` is a latent bug. 2. `StoreInitPlan.people` keyed on `Platform` while `people` moved under `memory/` and its controllers are tagged `Memory`. Left alone, harness() would register the people RPC surface with no store behind it. `embedded()` no longer sets `platform: true` just to reach credentials and config — Desktop and Hosted are their own families now and stay off, which is what an embedded host actually wants. Also splits `DomainSubscriberPlan.platform`, which bundled subscribers now owned by four different families (webhooks→Skills, notifications→Desktop, composio + task_sources→Integrations, devices→Security, learning→Agent). Learning gets its own idempotency token rather than `group_first_time(DomainGroup::Agent)`: the Agent block already consumes that token, so whichever ran second would have silently skipped. `tool_group()` gains matching rules for the new families. A missing entry there leaks a gated tool under a custom DomainSet — the tinyhumansai#4808 review finding — and it is not compiler-enforced, so it is called out in AGENTS.md alongside the store and subscriber plan keys. New: `DomainSet::kernel()` (threads + config + security; agent and memory OFF, because they are the two largest subsystems and the ones an alternative driver would replace) and `examples/embed_kernel.rs`, which was run, not just compiled — it prints memory serving requests and `agent_list_definitions` returning "unknown method", demonstrating that absence, not a failing stub, is the contract. Verified: default, --all-targets, gates-off, Tauri-shell builds clean; clippy -D warnings clean in both Cargo worlds; fmt clean in both; core:: 681 gates-on / 561 gates-off (up from 676/556 — the five new tests); tools 866 passed with --test-threads=1. The parallel-run failures in `all_tools_executes_*_family_against_fake_backend` are pre-existing shared-port interference, reproduced on the base commit. Co-authored-by: Medulla <medulla@tinyhumans.ai>
There was a problem hiding this comment.
senamakel has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.
|
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in: 59 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (8)
📝 WalkthroughWalkthroughThe PR reorganizes domain families across ChangesDomain family model and runtime presets
Registration and ownership alignment
Estimated code review effort: 4 (Complex) | ~45 minutes Possibly related PRs
Sequence Diagram(s)sequenceDiagram
participant Example as embed_kernel
participant Domains as DomainSet
participant Runtime as CLI runtime
participant Core as Core and Memory namespaces
participant Agent as Agent subsystem
Example->>Domains: select kernel() and enable memory
Domains->>Runtime: build with kernel domains
Runtime->>Core: call core.version and memory namespace
Runtime->>Agent: call disabled agent method
Agent-->>Runtime: return unknown-method error
Suggested labels: Suggested reviewers: Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 42fe6d7d60
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
src/core/jsonrpc.rs (1)
2114-2118: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUpdate the stale "Platform:" block comment.
Line 2117 says "// Platform: webhook + notification bridge + composio trigger + task-sources proactive ingestion + device tunnel." The four
if plan.Xblocks immediately below (Lines 2119-2189) gate these subscribers onSkills,Desktop,Integrations, andSecurityrespectively — none of them readsplan.platform. This is a leftover from before the split and now describes the wrong owning group for every subscriber it lists.📝 Proposed comment fix
- // Platform: webhook + notification bridge + composio trigger + task-sources - // proactive ingestion + device tunnel. + // Carved-out families: webhook (Skills), notification bridge (Desktop), + // composio + task-sources (Integrations), device tunnel (Security). if plan.skills {🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/core/jsonrpc.rs` around lines 2114 - 2118, Update the stale “Platform:” block comment in the gated domain subscribers section to describe the actual owning groups used by the following Skills, Desktop, Integrations, and Security plan checks; remove the incorrect platform ownership claim while preserving the subscriber descriptions.src/core/runtime/context.rs (1)
390-400: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winFix the stale domain name in the people-store skip log.
plan.peopleis now derived fromDomainGroup::Memory(Line 330), notPlatform. Line 399 still logs "Platform domain disabled" when the people store init is skipped. This diagnostic now names the wrong domain, which defeats grep-friendly troubleshooting of domain-gating issues — exactly the class of bug this PR's realignment is meant to catch.📝 Proposed fix
} else { - log::debug!("[boot] people::store init SKIPPED — Platform domain disabled"); + log::debug!("[boot] people::store init SKIPPED — Memory domain disabled"); }As per coding guidelines,
**/*.{rs,ts,tsx}requires "verbose, grep-friendly diagnostics for entry/exit, branches, external calls, retries/timeouts, state transitions, and errors" for changed flows; a diagnostic naming the wrong gating domain fails that bar.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/core/runtime/context.rs` around lines 390 - 400, Update the skip diagnostic in the people-store initialization branch of the runtime context flow so it names the Memory domain rather than the Platform domain. Keep the existing people::store gating and debug-level logging unchanged, modifying only the stale domain label in the else branch.Source: Coding guidelines
src/core/all.rs (1)
727-735: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUpdate the stale "Classified Platform" comment.
The comment at Line 728 says: "Classified Platform (always-on): TokenJuice is the token-compression content router". The code now tags this push as
DomainGroup::Inference, notPlatform. Update the comment so it explains theInferenceclassification instead of the oldPlatformrationale. Otherwise, a future reader concludes TokenJuice must always stay on, whenharness()and anyDomainSetwithinference: falsenow gate it off.📝 Proposed comment fix
- // TokenJuice content-router debug controllers (detect / compress / cache_stats / retrieve). - // Classified Platform (always-on): TokenJuice is the token-compression content - // router that runs on every agent tool output, not a crypto surface — despite - // `#4802` listing it under the web3 gate. Flagged for `#4802` re-scope. + // TokenJuice content-router debug controllers (detect / compress / cache_stats / retrieve). + // Classified Inference: TokenJuice is the token-compression content router + // that runs on every agent tool output, not a crypto surface — despite + // `#4802` listing it under the web3 gate. Note the always-on compaction path + // itself is installed unconditionally in `register_domain_subscribers`'s + // INFRA block; only these debug/inspection controllers are gated here. push( &mut controllers, DomainGroup::Inference, crate::openhuman::inference::tokenjuice::all_tokenjuice_registered_controllers(), );🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/core/all.rs` around lines 727 - 735, Update the stale comment above the TokenJuice controller registration in the controllers setup to describe its DomainGroup::Inference classification rather than calling it Platform or always-on. Mention that harness() and DomainSet configurations with inference disabled can gate TokenJuice off, while preserving the existing `#4802` context only if still accurate.src/core/runtime/builder.rs (1)
289-334: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick winEnable
Integrationsfor the documented embedded surface.
DomainSet::embedded()disablesDomainGroup::Integrations, so Composio and task-source controllers are unavailable under its active context. Setintegrations: trueand add a test assertion. If this scope change is intentional, remove the task-source claims from the preset documentation.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/core/runtime/builder.rs` around lines 289 - 334, Update DomainSet::embedded() to set integrations: true so the documented embedded surface includes Composio and task-source controllers, and add or update a test asserting the Integrations domain is enabled. Remove any embedded-preset documentation claims that task sources are excluded.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/core/runtime/builder.rs`:
- Around line 210-226: Move the “Everything not in a named family — always on in
`full()`” doc comment from above `pub inference: bool` to immediately above `pub
platform: bool` in the `DomainSet` field definitions, leaving the other field
comments unchanged.
---
Outside diff comments:
In `@src/core/all.rs`:
- Around line 727-735: Update the stale comment above the TokenJuice controller
registration in the controllers setup to describe its DomainGroup::Inference
classification rather than calling it Platform or always-on. Mention that
harness() and DomainSet configurations with inference disabled can gate
TokenJuice off, while preserving the existing `#4802` context only if still
accurate.
In `@src/core/jsonrpc.rs`:
- Around line 2114-2118: Update the stale “Platform:” block comment in the gated
domain subscribers section to describe the actual owning groups used by the
following Skills, Desktop, Integrations, and Security plan checks; remove the
incorrect platform ownership claim while preserving the subscriber descriptions.
In `@src/core/runtime/builder.rs`:
- Around line 289-334: Update DomainSet::embedded() to set integrations: true so
the documented embedded surface includes Composio and task-source controllers,
and add or update a test asserting the Integrations domain is enabled. Remove
any embedded-preset documentation claims that task sources are excluded.
In `@src/core/runtime/context.rs`:
- Around line 390-400: Update the skip diagnostic in the people-store
initialization branch of the runtime context flow so it names the Memory domain
rather than the Platform domain. Keep the existing people::store gating and
debug-level logging unchanged, modifying only the stale domain label in the else
branch.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: a65fcd1f-7f98-4802-b15e-0e8439500afb
📒 Files selected for processing (10)
AGENTS.mddocs/specs/2026-08-02-core-kernel-domain-reorg.mdexamples/embed_kernel.rssrc/core/all.rssrc/core/all_tests.rssrc/core/jsonrpc.rssrc/core/jsonrpc_tests.rssrc/core/runtime/builder.rssrc/core/runtime/context.rssrc/openhuman/tools/ops.rs
…ed controllers The embedded runtime preset now enables the integrations domain so external connectors are available in long-lived embedded hosts, and the embedded preset test asserts this. The hosted orchestration controllers are reclassified from the Agent domain group to Hosted, and the TokenJuice debug controllers are clarified as inference-gated while the content-router subscriber remains always-on core infrastructure. The people store skip log now correctly references the Memory domain instead of Platform.
Move the hosted orchestration ingest subscriber registration out of the agent domain group into its own dedicated hosted flag, so that the tiny.place harness session DM ingestion can be enabled or disabled independently of the agent handlers and background delivery.
Realign tool grouping so artifact, learning, subagent, config, workspace, security, and credential tools are assigned to their respective domain families instead of defaulting to Platform. This keeps them available under the harness runtime while generic Platform tools continue to drop.
Reformatted the assertion for the harness plan's hosted subscriber to match the multi-line style used by other assertions in the test, improving readability and consistency.
The test comment now explains that the embedded preset differs from harness by leaving the Platform, Channels, and Integrations families enabled, rather than listing specific dropped components. The assertions are extended to verify that Integrations is also excluded from harness and included in embedded, closing a gap in the guard against future simplification.
There was a problem hiding this comment.
senamakel has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d3265230b7
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Agent-related startup steps (file-state coordinator, orphaned run settlement, task reconciliation, and definition registry) now run only when the Agent domain is enabled, with debug logs when skipped. Tool-to-domain classification was also corrected so agent workflow tools (ask_user_clarification, delegate, todo, wait, etc.) map to Agent, people_* tools to Memory, and session_*/oauth_* tools to Security, with tests covering the new mappings.
The comment block describing detached sub-agent TaskStore reconciliation was indented inconsistently with the surrounding code. This change aligns the comment indentation with the enclosing block for readability, with no behavioral impact.
There was a problem hiding this comment.
senamakel has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c0233046df
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
The tool group classifier was missing several recently added tools, causing them to fall through to the Platform group instead of their intended domains. Added spawn_parallel_agents to the Agent group, schedule to Automation, and polymarket to Integrations, with corresponding test coverage.
There was a problem hiding this comment.
senamakel has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 05aacc5cfe
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
The plan-review controller was registered under the Security domain group but is now correctly placed under Agent, matching its namespace mapping. Additional search and web tools are now classified as Integrations rather than falling through to Platform, ensuring they are properly grouped for tool routing and gating.
Condense the multi-line assertion for the "plan_review" namespace into a single line, matching the style of the surrounding assertions. This is a purely cosmetic change with no effect on test behavior.
There was a problem hiding this comment.
senamakel has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ec66e67c3e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| /// See `examples/embed_kernel.rs`. | ||
| pub fn kernel() -> Self { | ||
| Self { | ||
| agent: false, |
There was a problem hiding this comment.
Gate AgentBox setup for the agent-free kernel
When this preset is built in an environment containing the GMI_MAAS_* variables, CoreContext::init still unconditionally calls agent::agentbox::register_gmi_provider_if_present at src/core/runtime/context.rs:91. That call writes a GMI provider and API key into persisted configuration and rewrites every agent workload provider, so the new agent-free kernel mutates agent-owned state despite agent: false. Fresh evidence beyond the earlier bootstrap fix is that this separate pre-store AgentBox initialization remains unguarded; gate it on DomainGroup::Agent as well.
AGENTS.md reference: AGENTS.md:L254-L254
Useful? React with 👍 / 👎.
Summary
DomainGroupwith thesrc/openhuman/family directories now that the reorg (refactor(kernel): collapse 124 flat domains into 31 gate-aligned families #5328) gave each family a directory to be named after. Adds seven variants —Inference,Integrations,Automation,Runtimes,Desktop,Hosted,Relay— and retags 33 of the 45Platformpush sites.Platformcatch-all was hiding, both now pinned by tests:harness()silently dropped ten namespaces (includingharness_init) out of the families it claims to enable, andStoreInitPlan.peoplekeyed on a different group than its controllers.DomainSubscriberPlan.platform, which bundled subscribers now owned by four different families.DomainSet::kernel()— the floor a host opts subsystems back into — andexamples/embed_kernel.rs, which was run, not just compiled.full().Problem
DomainGroupis the runtime axis: every controller is tagged with one at its single registration site, and the live surface (controllers,/schema, dispatch, agent tools, stores, subscribers) is filtered by the ambientCoreContext::domains().Before this change, 45 of 90 push sites were tagged
Platform— not by design, but because the flat tree spread one capability across up to 13 sibling top-level directories, so there was no family to name.Platformhad stopped meaning "no family" and started meaning "we couldn't say".That produced two real defects, neither of which was visible under
full():harness()did not enable the families it claims. Its docstring says "agent + memory + threads + config + security", butagent::{agentbox, harness_init, artifacts, learning},security::{credentials, devices},config::{workspace, migration_helpers},memory::peopleandskills::webhooksall sat inPlatform, whichharness()sets tofalse. An agent harness that never registersharness_initis a bug, andexamples/embed_headless.rsships that preset.embedded()had to setplatform: trueto reach credentials and config — its own doc comment says so explicitly — which dragged the desktop and hosted-backend surfaces into every embedded host that has no use for either.Solution
Seven new variants, not the four originally planned.
Integrations,Automation(cron + subconscious),Runtimes(runtime + sandbox) andRelay(tinyplace) were the plan;Inference,DesktopandHostedare the additions, and they are what makeembedded()expressible — withDesktopandHostedas their own families it can stop reaching throughplatform: true.Platformnow holds only the kernel surfaces with no family of their own:platform/,tools/,http_host/,test_support/.Retagging is a behaviour change, deliberately. Ten namespaces that answered
Platformnow answer their real family, soharness()genuinely enables them.full()is unaffected (every group on), andnone()is unaffected (every group off).StoreInitPlan.peoplehad to move with it.peoplelives undermemory/and its controllers are now taggedMemory; leaving the store keyed onPlatformwould have registered the people RPC surface underharness()with no store behind it — a bug this PR would otherwise have introduced. The existing test assertingharness must skip people::store (Platform)is updated, with the reason recorded in the assertion message.DomainSubscriberPlan.platformis split intoskills(webhooks),desktop(notification bridge),integrations(composio trigger + task sources),security(device tunnel) andagent(learning). Learning needs its own idempotency token rather thangroup_first_time(DomainGroup::Agent): the Agent block already consumes that token, so whichever ran second would have silently skipped.tool_group()gains matching rules. A missing entry there leaks a gated tool under a customDomainSet— the #4808 review finding forwhatsapp_data. Tool names were extracted from the actualfn name()implementations per family rather than guessed.DomainSet::kernel()is threads + config + security, withagentandmemoryoff: they are the two largest subsystems and the ones an alternative driver would replace, so a host that wants them says so.examples/embed_kernel.rsdemonstrates opting one back in by field assignment, and it was executed — it prints memory serving a request andagent_list_definitionsreturning"unknown method", so the "absence, not a failing stub" contract is shown rather than asserted.Submission Checklist
src/core/all_tests.rs:carved_out_families_report_their_own_group(18 namespace→group assertions),platform_holds_only_kernel_surfaces(fails if a named family is left in the catch-all),harness_preset_registers_the_families_it_claims(the defect above),kernel_preset_is_the_floor,embedded_preset_excludes_desktop_and_hosted. Failure paths covered: each asserts the wrong tag fails, andplatform_holds_only_kernel_surfacesis the guard against a future missedpush(...)tag.allows(), the presets,tool_group()and the two plan builders, all directly exercised by the new tests plus the existingDomainSubscriberPlan/StoreInitPlansuites.core::runs 681 tests gates-on.N/A: no feature rows added, removed, or renamed. This changes runtime composition, not the feature surface.## Related—N/A: no matrix feature IDs affected.N/A: no dependency change. The kernel-floor ratchet is untouched.N/A: no release-cut surface touched.DomainSet::full()is the shipped desktop configuration and is unchanged in every axis.Closes #NNN—N/A: no dedicated tracking issue. This is the runtime-axis half of the kernelization program (compile-time half: epic Feature gates for core subsystems — tracking (lightweight harness builds) #4795; structural half: refactor(kernel): collapse 124 flat domains into 31 gate-aligned families #5328). Follow-ups are listed below.Impact
Runtime/platform: none for the shipped desktop app, which runs
DomainSet::full()— every group is on, so the registered surface,/schema, tool list, stores and subscribers are identical.The behaviour change is confined to the narrow presets, and in each case it is a fix:
harness()now registersagentbox,harness_init,ai(artifacts),auth(credentials),devices,workspace,people,webhooksand the learning subscribers — the families it always claimed.embedded()now excludesdesktop,hostedandrelay, which it never wanted.none()unchanged.Compatibility:
DomainSetgains public fields. It is constructed via presets in-tree and the struct ispub, so any out-of-tree literal construction would need the new fields — there is none in this repo, and the crate is unpublished.Security:
security::devicesandsecurity::credentialsmove fromPlatformtoSecurity, so aDomainSetenabling Security now gets the device-tunnel subscriber and credentials surface it implies. That is a widening underharness(), and intentional — a set that enablesSecurityshould not silently omit the credential store.Related
StoreInitPlan/DomainSubscriberPlan/tool_group()are not compiler-enforced againstDomainGroup. Adding a variant compiles fine while leaving a tool ungated or a store unkeyed. A drift test over the three would close it; AGENTS.md documents the hazard meanwhile.all_tools_executes_*_family_against_fake_backendfail under parallel execution and pass with--test-threads=1. Pre-existing — reproduced on the base commit, different tests each run, consistent with a shared fake-backend port. Not touched here.runtime-node(xz2+ static liblzma),contacts(objc2-contacts), and the cross-repomemory-git(needsvendor/tinycortexto carve its inert diff types out from behindgit-difffirst).docs/specs/kernel.mdon top of this axis.AI Authored PR Metadata (required for Codex/Linear PRs)
Linear Issue
Commit & Branch
domain-runtime-axis42fe6d7d6Validation Run
pnpm --filter openhuman-app format:check— Rust half verified directly:cargo fmt --all --checkclean in both Cargo worlds (root andapp/src-tauri), which is whatrust:format:checkruns. Prettier half isN/A: no frontend files changed.pnpm typecheck—N/A: no TypeScript changed.cargo test --lib core::→ 681 passed gates-on, 561 passed gates-off (up from 676/556 — the five new tests).cargo test --lib openhuman::tools:: -- --test-threads=1→ 866 passed, 0 failed.cargo run --example embed_kernelexecuted successfully.cargo check --lib,--all-targets, and--no-default-features --features tokenjuice-treesitterall clean;cargo clippy -p openhuman -- -D warningsclean.cargo checkandcargo clippy -- -D warningsclean onapp/src-tauri/Cargo.toml.Validation Blocked
command:noneerror:n/aimpact:n/a — every lane that gated the previous PR (clippy in both worlds,rust:format:checkacross both Cargo worlds) was run locally before pushing this time.Behavior Changes
DomainSetpresets.harness()now enables the ten namespaces it always claimed;embedded()now excludes desktop/hosted/relay.full()andnone()are unchanged.full(). Effect is on library embedders usingharness()/embedded(), both of which get the surface their preset documents rather than a subset.Parity Contract
full()registers the identical controller set, in the identical order (full_registration_is_byte_identicalstill passes), with identical stores, subscribers and agent tools.none()likewise registers nothing.platform_holds_only_kernel_surfacesfails if a future family is left in the catch-all;store_init_plan_harness_gates_by_owning_groupand theDomainSubscriberPlansuite pin the two plan builders.Duplicate / Superseded PR Handling
Summary by CodeRabbit
New Features
Bug Fixes
Documentation