Repository navigation
Tracker: consolidate security, policy, approvals and sandboxing into the tinysecurity bus module (+ tinybox audit) #7328
Description
Tracker
- tinysecurity module: Build tinysecurity: one bus module for policy, approvals, auto-approve, audit, redaction and sandbox planning tinysecurity#1
- tinybox sandbox-only scope: Make tinybox sandbox-only: capability honesty, resource limits, network policy, events, bus contract (Linux/macOS/Windows) tinybox#27
- This issue: OpenHuman integration and migration (below)
Phase order: 0 characterization tests → 1 module wiring → 2 config + policy → 3 redaction/SSRF/egress → 4 approvals + auto-approve → 5 sandbox (needs tinybox work) → 6 middleware consolidation → 7 audit + dead-code cleanup → 8 crypto → 9 docs. The tinysecurity and tinybox PRs for a phase merge and release first; only then is OpenHuman repinned (digests copied verbatim from the release checksum.toml, never from a local build).
Why
OpenHuman's security code is duplicated, partially unwired and confusing:
- 8+ redactors with independent secret-pattern lists:
security/core.rs,util/redact.rs,approval/redact.rs,security/scrub.rs,security/pii,core/log_redaction.rs,tools/registry/denials.rs,integrations/composio/tools/redact.rs,agent/tinyagents/middleware/credential_scrub.rs; plus five URL-redaction helpers. - 4 SSRF/private-host checks.
util/url.rs::host_is_localmisses 169.254.x (cloud metadata), CGNAT and IPv6 private/link-local;tinytools_std::url_guardis the complete one; two more loopback checks exist; no resolved-IP/DNS-rebinding check. - 3–4 tool-policy layers:
tools/agent_policy/,tools/rules/,agent/tool_policy.rs, and the middleware pairapproval.rs/tool_policy.rs;ToolPolicyPostureandpolicy_info_payloadcopyAutonomyConfig;disallowed_toolsis checked in three places. - 3 crypto stacks:
encryption/(AES-GCM + Argon2),keyring/crypto.rs,devices/crypto.rs. - Unenforced config:
max_cost_per_day_cents;Firejail/Bubblewrap+firejail_args+ emptyResourceLimitsConfig;SecurityConfig/DaemonConfig.security/AuditConfigunreachable fromConfig(audit not configurable, covers only shell);PrivacyMode::Sensitive==Standard;from_confighard-codesPrivacyMode::Standard. - Dead/confusing:
pii::scanhas no non-test caller;security/secrets.rsis a one-line alias;security.policy_infoexposes 6 of 13+ fields;#[allow(unused_imports)]re-exports hide dead items; overloaded names (core,rpc,policy). - tinybox barely used: only
tinybox-jail, one Docker one-shot and shell scanners. Cron shell jobs, tinymcp stdio, tinyruntime pools, command hooks, the tinyflows script runner,agent/host_runtime.rsand helper processes run with policy only.agent/host_runtime.rs:181hand-buildsdocker run. With no jail, commands run unconfined and reportInactive.
Target architecture
- Bus-only. OpenHuman depends on exactly one tinysecurity crate,
tinysecurity-bus. The module is a compiled native module loaded at boot (LoadPolicy::Boot), reached throughattested_proxy(tinybus attestation + registry digest). No tinysecurity library is linked into the host; no dependency is shared. A new CI check (besidescripts/ci/check-crate-chain.mjs) fails if any OpenHuman manifest depends on anothertinysecurity-*crate. - Host-served callbacks (the
modules/memory_host.rspattern): approval persistence on the storage backend, approval prompt/await, audit forwarding, keyring consent. Init config carries policy and the Jev judge endpoint/credential (resolved throughresolve_backend_credential, never in call args). - OpenHuman keeps: config schema and one translator to the module's
PolicyConfig; RPC namespaces (approval.*,security.*,sandbox.*,encryption.*, which are wire contracts and unchanged); oneTinySecurityMiddleware; credentials/auth; SaaS gateway/profiles; pairing UX; executing sandbox plans through tinybox. - Fail closed. Module missing/faulted/timed out ⇒ external-effect calls denied; no in-process retry of a faulted module. A tiny host-side deny-list of the credential-store floor remains only until the module is a mandatory boot dependency.
- Hot path. Every tool call and in-tool path/command check now crosses the bus. Mitigate with coarse
Evaluate, batchedCheck, and a host decision cache keyed by (policy generation, call fingerprint) invalidated onPolicyChanged. A latency benchmark gate (p50/p99, calls per turn) lands before any caller is migrated; if too slow the fix is batching/caching, not linking the library.
Step-by-step plan
Phase 0: Characterization tests (precondition for every move)
Add Rust tests that pin current behavior so migrations are provably neutral:
tests/json_rpc_e2e.rs-style coverage forapproval.*(list_pending, decide, preauthorize_flow, get_gate_state),security.policy_info,sandbox.*,encryption.*. Add[[test]]entries incrates/openhuman-cli/Cargo.toml(path = "../../tests/<name>.rs"),pnpm rust:layoutclean.- Gate behavior: allowlist short-circuit, park/decide/TTL (10 min; copilot/sub-agent 3 min) fail-closed, restart survival, cron origin denies external effects,
auto_approve_allbypass (document that it writes no audit row today), flow-trust grants. - Policy: command classes, forbidden/trusted roots, always-forbidden floor with autonomy disabled, rate limiter.
- Sandbox resolution: SaaS ⇒ sandboxed, env override, agent mode precedence, Noop ⇒
Inactive. - Redaction corpus: one shared fixture of secrets/PII/paths run against every existing redactor, recording what each catches (this becomes the acceptance corpus for the unified redactor and exposes the gaps).
- Bus latency baseline for the existing in-process path.
Phase 1: Module wiring (follows migrate-to-submodule)
git submodule add https://github.com/tinyhumansai/tinysecurity vendor/tinysecuritypinned to the released tag;.gitmodulesentry.- Registry record in
crates/openhuman-core/src/modules/registry/(copyrecords_docs_wallet.rsshape):bus_name = ai.tinyhumans.tinysecurity.Policy,object_path,version,release_url, 11PlatformAssets (sha256 verbatim fromchecksum.toml),load: LoadPolicy::Boot; wire intoregistry.rsALL; case inregistry_tests.rs. scripts/ci/check-module-pins.mjs: addtinysecurity: { submodule: "vendor/tinysecurity" }toPIN_MAP; runcheck-submodule-monotonic.mjs.crates/openhuman-core/Cargo.toml:tinysecurity-bus = { path = "../../vendor/tinysecurity/crates/tinysecurity-bus", optional = true }; featuresecurity-module = ["modules", "dep:tinysecurity-bus"]; forward throughopenhuman-embed,openhuman-tinyhumans,openhuman-rpc,openhuman-cli,openhuman-tuiand the app's forwarded set; add toscripts/ci/product-features.txt(it ships; consider default-on);check-feature-forwarding.mjsgreen; test gate on and off.- Host adapter
crates/openhuman-core/src/modules/security.rs(+security_tests.rs):ensure_loaded,attested_proxy, typed client overtinysecurity-busconstants (no string literals), init/reinit withPolicyConfig, host-callback server for store/prompt/audit/consent. - CI: build the native test module in
ci-full.ymlandtest-reusable.yml(as tinysearch does), export aTINYSECURITY_TEST_MODULEoverride; release-staging/production workflows list the bundled module version. - New CI check enforcing the bus-only dependency rule.
Phase 2: Config consolidation + policy
- One
[security]table (autonomy, sandbox, privacy, audit, approval TTLs, auto-approve/judge) with a single translator toPolicyConfigin the host; remove the unreachableSecurityConfig/DaemonConfig.security; exposeAuditConfiginConfig. Keep migrations inconfig/migrations/for renamed fields. - Fix
from_config(no hard-codedPrivacyMode::Standard); makesecurity.policy_inforeturn the complete effective policy from the module. - Replace
SecurityPolicy/ToolPolicyPosture/ policy copies with busEvaluate/Check; tools (shell, filesystem, network gates) callCheckthrough a small host client with the decision cache.tinybox_core::shell::{classify,scan}calls insecurity/policy/command_checks.rsgo away (moved into the module). - Decide
max_cost_per_day_cents: enforce in the module (needs a cost callback) or delete the field with a migration. live_policy.rsbecomes the init/reinit driver + generation counter for the cache.
Phase 3: Redaction, SSRF, egress/privacy
- Delete the 8+ redactors and URL-redaction helpers; route to bus
Redactwith a mode enum. Local helpers needed in hot logging paths (Sentryscrub_secrets,rpc_log) call the module through a cached, batched client or keep a minimal documented floor (decision recorded in an ADR). - Delete
util/url.rs::host_is_localand the extra loopback helpers; use busUrlGuardincl. resolved-IP check;tools/impl/network/host.rs,modules/browser.rs, composio loopback checks migrate. PrivacyMode::Sensitive: implement per the module spec or remove; egress descriptors/enforcement via busEgressCheck;web_chat/egress_surface.rsandinference/provider/factoryuse it.- Prompt-injection (
agent/bus.rs,session_host/runtime/run_loop.rs,mcp/registry) via busScanPrompt/ScanToolDefinition; reconcile withtinymcpsanitize andtinyskillsscan (call them from the module or document the split).
Phase 4: Approvals + auto-approve
- Migrate
ApprovalGate(security/approval/*, ~4.8k LOC): parking future stays host-side, state machine/TTL/log in the module;ApprovalStoreserved from the host storage backend (approval/store*.rsbecome the host callback impl); keepapproval.*RPC andApprovalRequested/ApprovalDecidedevents (bumpEVENTS_VERSIONonly if the event shape changes). ApprovalSecurityMiddleware→ callsEvaluate, parks onRequireApproval(request_id), resumes onDecide.- Auto-approve: move
autonomy.auto_approve,auto_approve_all, flow trust,approve_always_for_toolpersistence (config save + live reload) behind the module.auto_approve_allmust write audit rows. Add the Jev judge setting ([security.auto_approve.judge]: enabled, per-origin opt-in, thresholds, endpoint via backend credential); off by default; fail-to-human on any error; UI showsauto:jevdecisions in the log. - SaaS: today SaaS bypasses approval parking ("no per-user approval surface yet"). Decide and implement the SaaS approval path (per-user prompt channel or Jev-only with strict thresholds), documented.
- Frontend: approval log view shows judge verdicts; i18n for all locales (
useT(),pnpm i18n:check).
Phase 5: Sandbox (depends on tinyhumansai/tinybox#27)
- Module returns
SandboxPlan; host adapterSandboxPlan → tinybox BoxSpec/Placement(Resources,NetworkPolicy, grants incl. the credential-store floor).sandbox/ops.rsresolve_*logic moves to the module; execution (execute_in_sandbox,spawn_with) stays host-side. - Fail closed: untrusted tiers refuse
NoopusingSandboxCapabilities::is_suitable_for_untrusted_code(); surface insandbox.*RPC and UI. - Replace
agent/host_runtime.rsDockerRuntimehand-builtdocker runwithtinybox_docker::OneShot. - Wire
tinybox-linuxsoFirejail/Bubblewrapconfig values work (map to namespace) or remove them andfirejail_args/ResourceLimitsConfigwith migration. - Route unsandboxed spawners through the jail at minimum: cron
shell_job.rs, tinymcp stdio, tinyruntime pools/pyserver, command hooks, tinyflowsscriptrunner,install_tool; route untrusted sources (MCP-installed servers, downloaded skills) to microvm where KVM exists. Browser/tinycomputer processes: assess and document. OPENHUMAN_SANDBOX=off: never applies under SaaS (test pinssandbox/ops.rs:59ordering);boot_guardkeeps protecting it.
Phase 6: Middleware consolidation
One TinySecurityMiddleware (beside agent/tinyagents/middleware/approval.rs, registered before the other tinyagents middleware) maps module Decision → tinyagents PolicyDecision. Remove tools/agent_policy/, the duplicate parts of agent/tool_policy.rs, ToolPolicyMiddleware wrapper duplicates and the three disallowed_tools checks; keep ToolRules as the declarative input (built on tinytools, single copy). Upstream-first for anything generic (tinytools/tinyagents), per CLAUDE.md ownership.
Phase 7: Audit + dead-code cleanup
- One audit log (approvals, shell, sandbox decisions, judge verdicts, policy changes) through the module;
mcp/auditbecomes a facade or stays tinymcp-owned (decision recorded). - Delete:
pii::scan(unless adopted),security/secrets.rsalias,security/core.rs,#[allow(unused_imports)]re-exports, dead config from the list above; rename overloaded modules; remove each old test file with its code. - Wire
tinycomputerconsequence/payment gates andtinyskillsscan verdicts into the approval/policy path (or document why not).
Phase 8: Crypto/keyring/pairing
Move encryption/core, keyring backends/crypto, devices/crypto, pairing behavior into the module (tinysecurity T11); keep keychain consent UX, credentials/auth and device sockets host-side. web3 (web3/seams.rs, x402/seams.rs) calls encryption.* RPC unchanged.
Phase 9: Docs
CLAUDE.md submodule-ownership row for tinysecurity and the module/bus-contract table; gitbooks/developing/loadable-modules.md (record count, 11 builds), gitbooks/features/approval-gate.md, gitbooks/features/privacy-and-security.md; crates/openhuman-core/src/security/README.md and approval/README.md reduced to host adapters; platform/about_app/ for user-visible capability changes (Jev auto-approve); pnpm docs:generate + docs:check.
Cross-OS end-to-end tests (required)
Each phase's PR includes e2e on Linux, macOS and Windows using the real released module artifact (no mocking of the module or of OS isolation); mock backend only for network services. Matrix runs in CI Full (ubuntu-24.04, macos-15/macos-26, windows-2025; arm64 where the release matrix has it).
| Flow | Linux | macOS | Windows |
|---|---|---|---|
| Module load at boot | .so digest admission; tampered digest ⇒ deny external effects |
.dylib (+ quarantine/codesign) |
.dll; locked-file replacement on update |
| Approval round trip (RPC + UI event) | park → decide → TTL → restart survival | same | same, path/locking differences |
| Auto-approve + stub Jev judge | allow, low-confidence ⇒ human, timeout ⇒ human, Deny never overridden |
same | same |
| Path policy through tools | floor for ~/.ssh; symlink/.. escapes |
APFS case-insensitivity, /private/var |
drive/UNC/\\?\/8.3/reserved names |
| Shell tool classification | sh/bash | zsh | PowerShell + cmd quoting via platform_shell.rs |
| Sandbox execution through tinybox | Landlock/bwrap/microvm (KVM job)/docker | Seatbelt/docker | AppContainer/docker; untrusted tier refuses Noop |
| Redaction in logs/Sentry/approval rows | /home/x |
/Users/x |
C:\Users\x, %USERPROFILE% |
SSRF (http_request, browser) |
metadata IP, rebinding | same | same incl. IPv6 zone IDs |
| Keyring/crypto | Secret Service / file | Keychain | Credential Manager |
| Fail closed | module killed ⇒ external effects denied; no retry | same | same |
Frontend flows additionally get mocked-desktop e2e under app/test/e2e/specs/ (approval prompt, log, judge badge); E2E code uses helpers/element-helpers.ts.
Definition of done
- The only tinysecurity dependency is
tinysecurity-bus; CI enforces it. - One redactor, one URL guard, one policy/approval path, one audit log; the lists above are deleted.
- Every config field is enforced or removed;
policy_infois complete. - tinybox is used through
BoxSpec/plans for every untrusted spawner; no silent Noop for untrusted tiers. - Characterization suite green before and after each phase; three-OS e2e green;
pnpm rust:layout, pin/feature-forwarding checks,pnpm docs:checkgreen. - Bus latency budget met (benchmark committed).
Activity
senamakel commentedon Oct 14, 2026
Tool-policy placement note (from #7627, tinytools#66, OpenHuman #7726/#7773/#7787).
Current split, at the pins on main:
ToolPolicyEngine,ToolPolicySession, agent_policy vocabulary, registry types/denials, deferred exposure) lives intinytools(nestedvendor/tinyagents/vendor/tinytools). It is a kernel library: no bus contract, no [components] toggle, no registry record.tools/rules(operator deny/allow layers, deny-overrides, child inherits operator layers only),tools/policy_session.rs(builds the session from host config and traces under[tool-policy]), the approval gate, andAutonomyConfig.Proposed placement for #7328:
ToolPolicyEngine(posture and deny/allow rules in, classification out), not by reimplementing the engine.tinytools::ToolPolicyEnginerather than add a second engine.ToolPolicyPosture/policy_info_payloadcopyingAutonomyConfigshould be replaced by tinysecurity's config type in phase 2.Nothing further is needed in #7627. Closing it, with #7702 and #7541 whose checklists are done (#7623, #7624, #7627, #7628). Open follow-ups live in #7328.
test(approval): prove judge fallback matrix, auto_approve_all audit a…
feat(bus): ConsequenceHost review of approved irreversible and paying…
docs(security): document fail-closed TinySecurity module
senamakel commentedon Oct 15, 2026
Progress on PR #7331 (draft, Part of this issue). Done: phases 0 and 1 (characterization suite, module wiring, registry/pins, bus-only CI check, security-module default-on) and part of phase 2 (scoped policy via bus). Pinned to tinysecurity v0.7.0 and tinybox 0.1.34. Remaining: authenticated authority for RegisterPathPolicy, the measured latency gate, the shell/network gate migration, phases 3-9, three-OS e2e. No checklist items are ticked because none of the Definition of done items is fully met. Details in the PR body.
fix(approval): report the subject handle only to a registration that …
Merge pull request #113 from senamakel/epic-7328-p7-cleanup
senamakel commentedon Oct 18, 2026
Handoff, 2026-10-18. Draft PR #7331 is now at the fork epic tip
a58464dfc6, pinned to tinysecurity v0.14.0 (contract 1.21). Its body holds the full handoff: what has merged, the remaining steps in order, the rules, and the open decisions.Where it stands
Host code removed: the removal pass has merged into the epic branch: approval, policy, redact/egress and sandbox (fork PRs [Feature] Add first-class package manager install channels (brew, apt, npm, others) #128, [Bug] Service Required screen: Load failed and buttons disabled on app startup #129, feat(observability): add Sentry error reporting to Rust core #131, [Bug] Local model download fails: Ollama install script error and stuck progress #132).
Module gaps: the 13 gaps that blocked the remaining deletions are implemented in tinysecurity for contract 1.22: feat(sandbox): executor preference, workspace-less plans and the operator's planned host run (contract 1.22) tinysecurity#29, Enable the team to spin up the full backend + memory system using a single Docker Compose command. #30, Fix Memory Recall Failures in OpenHuman Integration #31 and Automate Daily DMG Build & Distribution #32, all merged.
Host branches waiting to be integrated: these are on
senamakel/openhumanwith no PR yet:epic-7328-gaps-sandbox@5330a03aedepic-7328-gaps-policy@c95d2de0f6epic-7328-gaps-approval@1adba7556eTogether they delete about 6,600 more host lines.
Next steps
release-and-repin.mjs --version 0.15.0.maininto the epic, push tosecurity-bus-7328, and mark feat(security): vendor TinySecurity and migrate filesystem authorization #7331 ready.Still open
secrets.enc, adding a tunnel-cipher member, and descoping pairing.senamakel commentedon Oct 18, 2026
core-shrink audit: rows handed to this tracker
The reworked #7390 audited every non-test file in
crates/openhuman-core/src/that no domain epic owns (198.6k lines, 2026-10-18 on maina48737721c). These rows match this tracker's tinysecurity target, so #7390 files no leaves for them. They are listed here so your phases can pick them up. Paths are relative tocrates/openhuman-core/src/.config/schema/channels.rsconfig/schema/security.rs(new name)config/schema/privacy.rstinysecurity_bus::egress::PrivacyMode(~/work/tinysecurity/crates/tinysecurity-bus/src/egress.rs:7)config/ops/sandbox.rsvendor/tinybox/crates/tinybox-jail/src/detect.rs::pick_backendsecurity/secret_storage/encrypted_file_backend/key_source.rs~/work/tinysecurity/crates/tinysecurity-crypto/src/keyring/mod.rs(MasterResolver,MasterMint,LegacySource) and tsd `file::{HexK...security/secret_storage/encrypted_file_backend.rsfile::{FileImportSource, prepare_file_import, cleanup_file_import, recover_file_import_source}(file/migration.rs) and `load_or_c...security/secret_storage/encrypted_store.rs~/work/tinysecurity/crates/tinysecurity-crypto/src/secretstore/mod.rs(SecretCipher: enc2, legacyenc:,decrypt_and_migrate) via ...security/approval/flow_surface.rstinysecurity-busapproval_scopes (RegisterApprovalScope2/RetireApprovalScope2), #7328 phase 4security/approval/gate_state.rstinysecurity-busDecide2/RecordExecution2/ListApprovals2/PreauthorizeFlow2security/approval/redact.rstinysecurity-busRedactMode::StructuredArguments/HomePath(module impl: `~/work/tinysecurity/crates/tinysecurity-redact/src/struc...security/approval/store_flow_trust.rstinysecurity-busPreauthorizeFlow2and theauto:flow-grantscopesecurity/approval/store_import.rstinysecurity-busImportApprovalHistory2security/audit.rstinysecurity-audit(sink.rs,event.rs,rotation.rs) viatinysecurity-busauditedsecurity/core.rstinysecurity-busRedactMode::LegacyMasksecurity/live_policy.rstinysecurity-moduleSDK reinit (generation plusPolicyChanged)security/policy/command_checks.rstinysecurity-policycommand_shell/*andcommand_registry.rssecurity/policy/path_checks.rstinysecurity-policypath.rs,path_scope.rs,scoped.rsvia busCheckPath/ValidatePath/RegisterPathPolicysecurity/policy/types.rsPolicyInfoand policy config, withSecurityPolicyas a thin host viewsecurity/scrub.rstinysecurity-busRedactMode(Text,CredentialsOnly)security/devices/crypto.rstinysecurity_crypto::device(KeyPair,SessionKeys,Role,seal/open,seal_handshake/open_handshake/seal_ack/open_ack) in `~/wo...security/egress/enforce.rstinysecurity_egress::privacy::checkandtinysecurity_bus::{PrivacyMode, EgressPolicy, ScopedEgressRequest}(#7328)security/encryption/core.rstinysecurity-crypto/src/password.rs(same Argon2id and AES-256-GCM scheme) if it is ever neededsecurity/prompt_injection/detector.rstinysecurity-redactpromptScanner,ScanPromptRequestandScanToolDefinitionRequestthroughtinysecurity-bus(`tinysecurity-bus...util/redact.rstinysecurity_redact::Redactor(#7328), ortinymemory_core::util::redactcore/log_redaction.rstinysecurity-redact(crates/tinysecurity-redact/src/patterns.rsandlib.rs::Redactor::redact), throughtinysecurity-buscore/rpc_log.rstinysecurity-redact(structured.rs, structured JSON redaction)integrations/composio/tools/redact.rs~/work/tinysecurity/crates/tinysecurity-redact/src/lib.rs(Redactor,RedactorConfig.secrets), reached viatinysecurity-bus(#7328)hosting/tools.rsvendor/tinyhosts/crates/tinyhosts-bus(launch and rollback orchestration);tinyagents-harness-tools(#8088) for theTooladapterFindings the audit adds for your phases:
tinyredact(in tinymemory, used bysecurity/scrub.rs) andtinysecurity-redact. Decide which one wraps the other before phase 3. The host has more copies on top:core/log_redaction.rs,core/rpc_log.rs,util/redact.rs,security/approval/redact.rs(a verbatim port already lives intinysecurity-redact/src/structured.rs) andintegrations/composio/tools/redact.rs.tinybox-core/src/shell,tinysecurity-policy/src/command_shellandsecurity/policy/command_checks.rs.security/policy/path_checks.rs,tinysecurity-policy/src/path.rs, andsandbox/local_grants.rs→ TinyBoxResolveLocalGrants. Grant admission is also implemented separately intinysecurity-sandbox/src/grants.rs.tinysecurityis not a dependency anywhere in the repo yet, so every row above waits on phase 1 (module wiring).senamakel commentedon Oct 18, 2026
Progress after the handoff:
d39799906d928ad118399b78c786613c380f8fb5; the authorized v0.15.0 release workflow is running. The host will use the published assets/checksums after publication is verified.TinySecurity #1, TinyBox #27, and TinyBus #76 remain open. None of the unfinished platform enforcement or migration work is being treated as complete.
senamakel commentedon Oct 18, 2026
TinySecurity v0.15.0 (contract 1.22) is published at
26db0d31d47a6d09d87e1095a53574da5379e5ba. Release run 39169878119 passed all 16 platform bundles and verification of the published module through TinyBus. All 16 archive hashes match the published checksum manifest and GitHub asset digests.The local host integration is re-pinned in
31bc1297fff3fc289ee71677d5141992d087b167; strict default Clippy, default/no-default core checks, documentation and static checks passed. This commit is not yet in #7331's published head, which remains draft ata58464dfc6.TinyBus #92 is merged and #76 closed; TinySecurity #38 consumes the fix and removes the advisory exceptions. TinySecurity #37 is also merged. Current-main integration has 133 conflicts and needs an upstream TinyAgents terminal-outcome hook for reliable failure/cancellation auditing.
Phase 8 remains full scope: existing paired channels need module-owned import of their distinct encrypted core keys, plus recovery of durable confirmations whose responses are lost. Both are being implemented before host migration. TinyBox #96 has one final availability regression being fixed; #98/#101 prepare the required deprecation release. TinyBox #27's actual platform enforcement remains unfinished. The expanded current-work section in #7331 records these details.
senamakel commentedon Oct 18, 2026
Current integration findings and owning-repository work:
The published OpenHuman PR remains a draft. Main integration preserves the newer hosted-layer and TinyAgents ownership extractions; the existing three-OS module policy fixture is only part of the epic’s required end-to-end coverage.
senamakel commentedon Oct 19, 2026
Progress on #7328:
PR #7331 remains draft. The complete original epic scope, including browser transport enforcement and the remaining platform/runtime flows, remains open.
senamakel commentedon Oct 19, 2026
Dependency and verification update:
3f0aa153f940eb83ad58179b0b181079bcb0966e; [Tech debt] Remove dynamic imports from app/src (static imports only) #102 is now merged at8bc076446708d667205a5a1fbab77cf9220c500d. Each had all 20 checks complete and no unresolved feedback before the pinned merges. These land native jail denial-root protections and systemd argument-expansion handling.82d1938f233d7441ab8d584fb602eacf92e9d4b7) passes an independent external-cwd loaded-module native run, including legacy import/recovery and lifecycle races. Verified module SHA256:028fe8842f86bcd0d16e4e4478244a680e3f0b452dab04f185038e6f4ccb4ade. Full native matrix/per-file coverage and host migration remain required.PR #7331 remains draft. Native resource containment, audit wiring, host/runtime migration, browser transport enforcement and the original cross-platform requirements remain open.
senamakel commentedon Oct 19, 2026
TinyBox v0.1.39 is published at
e8beaf1e42a2d0cc48bf611f48e4d2174ccb6312, including #96, #98 and #102. Release run 39183441172 passed all 17 platform package jobs and publication. All 17 archive hashes match both the published checksum manifest and GitHub asset digests. I also downloaded the Ubuntu 24.04 x86_64 archive, verified its hash, and loaded it through TinyBus with the verifier built from the exact tag. Native execution, Cancel/Close and child/descendant cleanup passed. The host pin update is assigned; it has not been pushed to OpenHuman #7331 yet.TinySecurity #35 is merged at
77b058046559df0545e7abd62bb35f05bcc487cdafter all 23 checks passed or completed neutrally and fresh feedback had no unresolved objections. #36 now merges canonical main at0300d0391b8ed80eabcd9882b64b53eb0cafe9a9and is ready for review: formatting, all 1,162 workspace tests and strict Clippy passed; hosted checks are running. Pairing #39 remains a dependent draft. Its Rust 1.99 test-assertion lint fix is pushed at279d751d7b142507c60b9af68b3e1cfbf49a0210; eight pairing tests and strict Clippy pass, with hosted CI rerunning.The current-main host merge compiles its core library. A real TinyHumans endpoint-resolution regression failed before the fix and passes afterward, including IPv4/IPv6 loopback and nonlocal/lookalike controls. Core test-target migration repairs still precede the remaining module-fault, combined policy gate, audit, egress and cron behavioral validation.
Native resource work now has passing full workspace tests and live resource/escape/cleanup proofs, but strict lint cleanup, final coverage/hosted CI and its owning PR remain unfinished. Browser connection-time enforcement is being implemented in TinyComputer with a minimal bus callback to TinySecurity; actual socket enforcement and platform containment remain required. TinyBox #27, TinyComputer #111 and the full Phase 8 host migration remain open scope. OpenHuman #7331 stays draft; its published head has not changed.
senamakel commentedon Oct 19, 2026
Resumed the remaining epic work and rechecked current sources and GitHub state.
51fd6cfa667d1d66c01c0fdd4490f01cfec66933has all hosted checks green, including required live Linux resource enforcement and the three-platform feature/module jobs. It remains a dependent draft on [Feature] Discord notifications for new GitHub releases (changelog / revision) #100 and the host adapter; this does not complete tinybox#27.94231ea5987f967fec241572fd1a32693369ce09still fails the Windows native contract: a prospective Microsoft credential-store path uses lowercase components instead of the native spelling. Its two review threads and the failure are being addressed before merge. fix: remove standalone bins from Cargo.toml to fix Tauri bundler failure #39 remains a dependent draft and also needs the Windows correction.OpenHuman #7331 remains a draft. Remaining host migration, crypto/pairing adoption, native containment, and the full required cross-OS matrix are not complete.