Skip to content

chore: finish upstream module roll-up integration - #8512

Merged
senamakel merged 398 commits into
tinyhumansai:mainfrom
senamakel:pr-8487-followup
Nov 3, 2026
Merged

senamakel merged 398 commits into
tinyhumansai:mainfrom
senamakel:pr-8487-followup

Conversation

@senamakel

@senamakel senamakel commented Oct 30, 2026 •

Copy link
Copy Markdown
Member

Summary

Follow-up integration for the changes merged in #8487. This updates OpenHuman’s adapters for current upstream module APIs, completes the async TinySecurity credential call sites, refreshes generated storage schemas, and adds native channel/storage projection regressions. Shared permission queries use TinySecurity’s audited API; artifact materialization reserves the full private workspace before writing. Prompt screening takes configuration from the owning request or supplied host config, and positive native tests run with explicit isolated host contexts.

This branch also fixes disabled-autonomy authorization so registered tools and shell commands do not require TinySecurity when [autonomy] enabled = false. Channel restrictions, unknown-tool denial, and scheduled-turn restrictions remain enforced. Scheduler agent test contexts now carry the config required by prompt screening. Failure recovery classifies the original tool outcome before redaction, while persisting only sanitized summaries, so withheld details cannot erase a terminal policy denial.

Upstream prerequisites

This remains a draft until module changes are merged and published as compatible releases. TinyAgents #590 has merged; the following remain open:

Local validation

Latest host batch: e809d5845250b5dd73c51b08a63dc59762d3a1ae. Normal push hooks pass (formatting, frontend lint/typecheck, strict core/CLI/TinyHumans/Tauri clippy, and UI tokens). Full local and hosted CI remain under repair.

  • Latest full product-core nextest: 10,368 passed, 263 failed, eight skipped. This clears 28 previous failures with no new failures against the previous full run. The run predates the final channel and session-fixture corrections below.
  • Current credential profile/activation slice: 70/70 passed. It exercises actual user activation and storage rebind, verifies the fixture creates no user database before sign-in, and checks that a failed destination write retains the source key. Document-owned profile normalization preserves its secret location without requesting keyring access; the new regression failed before the correction.
  • On the preceding host batch b9fe55f320, profile/channel/session nextest slice: 117/117 passed. This includes the actual native Telegram provider (typing before reply, exact reply text), all six host-pipeline cases, canonical encrypted profile storage, explicit secret ownership, keyring denial/rollback, cleanup preserving concurrent updates, native error scrubbing, and the cold-turn prompt contract.
  • Credential documents record their authoritative secret location with schema version 2. Removing a document-backed profile does not contact the keyring or rewrite unrelated rows. Unavailable keyring records remain opaque; denied access cannot fall back to another copy. Read-time migration cleanup publishes only when its input snapshot is still current.
  • Runtime ownership and SaaS ambient checks pass. Previous completed validation includes generated documentation, Rust layout, feature forwarding, workflow tests, and focused native permission/artifact/consent suites.
  • TinyChannels 6b0197ef: 1,798/1,798 workspace all-feature library tests, 69/69 bus tests without default features, strict all-target/all-feature clippy, the native dependency boundary and negative controls, official source-artifact build, and three real native artifact tests pass. The actor now sends text-only typed intents as provider text while retaining delivery identity; rich parts retain their envelope. All eight review threads were answered and resolved, and a new review requested.
  • TinySecurity 058ae8c: 1,313/1,313 nextest cases, strict all-target/all-feature clippy, and the exact CI 90% per-file coverage gate pass. Native master/cipher, device, and audited permission verifiers run from repository and external working directories. Permission vocabulary coverage is 100%; audited dispatch is 92.86%. Hosted macOS and Windows Rust jobs pass; Ubuntu was still pending at the last check.
  • TinyEventQueues refactor: update memory recall methods to return context as JSON values #16 and TinySearch Refactor socket orchestration to HTTP-first while keeping socket service #42 include their canonical roll-ups and have passing hosted build/test checks on their published revisions.

Still incomplete:

  • The remaining full-suite failures include unbound native security/credential fixtures, domain suites, and release-contract checks. Full tests and CI are not green.
  • Scripts self-tests: 908 passed, one failed, three skipped. Strict exact-source module release pins remain enforced.
  • TinyBox and TinyMCP local artifacts were rebuilt against the current bus API for local validation. These operator-trusted development artifacts do not replace canonical release checksums.
  • Full gates-off, offline embed examples, integration/E2E gates, and hosted checks still need passing verification on the final published revision.
  • TinyChannels [Bug] Google blocks OAuth when connecting Gmail skill ("This app is blocked") #164 has conflicts with canonical main, so no hosted build checks exist for its current head. Base integration and validation are the next module step. Compatible upstream module releases and their published checksum pins are required before this PR can become ready and merge.

@coderabbitai

coderabbitai Bot commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 369 files, which is 69 over the limit of 300.

To get a review, reduce the PR to 300 files or fewer by splitting it into smaller PRs or changing its base branch.

Usage-priced reviews support at most 300 files.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: dd18e84c-bc1c-42b5-bac8-6157c4524d09
Commits

Reviewing files that changed from the base of the PR and between 52385e6 and 694a086.

Files ignored due to path filters: 2
  • Cargo.lock is excluded by !**/*.lock
  • crates/openhuman-app/Cargo.lock is excluded by !**/*.lock
Files selected for processing: 369
  • app/src/lib/attachments.ts
  • app/src/lib/i18n/ar.ts
  • app/src/lib/i18n/bn.ts
  • app/src/lib/i18n/de.ts
  • app/src/lib/i18n/en.ts
  • app/src/lib/i18n/es.ts
  • app/src/lib/i18n/fr.ts
  • app/src/lib/i18n/hi.ts
  • app/src/lib/i18n/id.ts
  • app/src/lib/i18n/it.ts
  • app/src/lib/i18n/ja.ts
  • app/src/lib/i18n/ko.ts
  • app/src/lib/i18n/pl.ts
  • app/src/lib/i18n/pt.ts
  • app/src/lib/i18n/ru.ts
  • app/src/lib/i18n/tr.ts
  • app/src/lib/i18n/zh-CN.ts
  • crates/openhuman-cli/Cargo.toml
  • crates/openhuman-core/Cargo.toml
  • crates/openhuman-core/src/agent/bus.rs
  • crates/openhuman-core/src/agent/harness/artifact_offload/artifact_offload_tests.rs
  • crates/openhuman-core/src/agent/harness/artifact_offload/mod.rs
  • crates/openhuman-core/src/agent/harness/artifact_offload/policy.rs
  • crates/openhuman-core/src/agent/harness/tool_result_artifacts/mod_tests.rs
  • crates/openhuman-core/src/agent/harness/tool_result_artifacts/wiring_tests.rs
  • crates/openhuman-core/src/agent/host_agents.rs
  • crates/openhuman-core/src/agent/queued_turn_tests.rs
  • crates/openhuman-core/src/agent/session_host/builder/builder_tests.rs
  • crates/openhuman-core/src/agent/session_host/driver/execute.rs
  • crates/openhuman-core/src/agent/session_host/driver/grounded_close_tests.rs
  • crates/openhuman-core/src/agent/session_host/product_copy_tests.rs
  • crates/openhuman-core/src/agent/session_host/runtime/run_loop.rs
  • crates/openhuman-core/src/agent/session_host/runtime_adapter_tests.rs
  • crates/openhuman-core/src/agent/session_host/runtime_adapter_trace_tests.rs
  • crates/openhuman-core/src/agent/session_host/runtime_session/compact.rs
  • crates/openhuman-core/src/agent/session_host/runtime_session/memory_block_tests.rs
  • crates/openhuman-core/src/agent/session_host/runtime_session/tool_rules_tests.rs
  • crates/openhuman-core/src/agent/session_host/runtime_session_flow_prompt_tests.rs
  • crates/openhuman-core/src/agent/session_host/runtime_session_goal_tests.rs
  • crates/openhuman-core/src/agent/session_host/runtime_session_juice_tests.rs
  • crates/openhuman-core/src/agent/session_host/runtime_session_mcp_tests.rs
  • crates/openhuman-core/src/agent/session_host/runtime_session_prompt_tests.rs
  • crates/openhuman-core/src/agent/session_host/runtime_session_tests.rs
  • crates/openhuman-core/src/agent/session_host/runtime_session_turn.rs
  • crates/openhuman-core/src/agent/session_host/stop_summary_tests.rs
  • crates/openhuman-core/src/agent/session_host/test_support.rs
  • crates/openhuman-core/src/agent/tinyagents/host/bundle.rs
  • crates/openhuman-core/src/agent/tinyagents/host/bundle_tests.rs
  • crates/openhuman-core/src/agent/tinyagents/host/security_gate.rs
  • crates/openhuman-core/src/agent/tinyagents/host/security_gate/authorize.rs
  • crates/openhuman-core/src/agent/tinyagents/host/security_gate_impl.rs
  • crates/openhuman-core/src/agent/tinyagents/host/security_gate_screen_and_policy_tests.rs
  • crates/openhuman-core/src/agent/tinyagents/host/security_gate_tests.rs
  • crates/openhuman-core/src/agent/tinyagents/middleware/credential_scrub.rs
  • crates/openhuman-core/src/agent/tinyagents/middleware/failure_policy.rs
  • crates/openhuman-core/src/agent/tinyagents/middleware/repeated_failure.rs
  • crates/openhuman-core/src/agent/tinyagents/middleware/repeated_failure_tests.rs
  • crates/openhuman-core/src/agent/tinyagents/middleware_classified_failure_tests.rs
  • crates/openhuman-core/src/agent/tinyagents/turn_exec/drive.rs
  • crates/openhuman-core/src/agent/turn_host.rs
  • crates/openhuman-core/src/agent_runs/agent_chat/compact.rs
  • crates/openhuman-core/src/attachments/host_tests.rs
  • crates/openhuman-core/src/attachments/mod_access_tests.rs
  • crates/openhuman-core/src/attachments/provider.rs
  • crates/openhuman-core/src/channels/bus/delivery.rs
  • crates/openhuman-core/src/channels/bus/delivery_tests.rs
  • crates/openhuman-core/src/channels/callback_slot_tests.rs
  • crates/openhuman-core/src/channels/host/voice.rs
  • crates/openhuman-core/src/channels/module_fixture_tests.rs
  • crates/openhuman-core/src/channels/proactive.rs
  • crates/openhuman-core/src/channels/providers/relay/ops.rs
  • crates/openhuman-core/src/channels/providers/relay/ops_tests.rs
  • crates/openhuman-core/src/channels/routes_remote_reset_tests.rs
  • crates/openhuman-core/src/channels/routes_tests.rs
  • crates/openhuman-core/src/channels/routes_tests_telegram.rs
  • crates/openhuman-core/src/channels/runtime/dispatch/host_agent/dispatch_tests.rs
  • crates/openhuman-core/src/channels/runtime/dispatch/host_agent/dispatch_unbound_tests.rs
  • crates/openhuman-core/src/channels/runtime/dispatch/host_agent/turn.rs
  • crates/openhuman-core/src/channels/runtime/dispatch/native_runner.rs
  • crates/openhuman-core/src/channels/runtime/dispatch/native_runner_tests.rs
  • crates/openhuman-core/src/channels/runtime/dispatch/processor/admit.rs
  • crates/openhuman-core/src/channels/runtime/dispatch/processor/native_media.rs
  • crates/openhuman-core/src/channels/runtime/dispatch/processor/turn.rs
  • crates/openhuman-core/src/channels/runtime/startup/delivery_import_tests.rs
  • crates/openhuman-core/src/channels/runtime/startup/module_providers.rs
  • crates/openhuman-core/src/channels/runtime/startup/progressive_transport.rs
  • crates/openhuman-core/src/channels/runtime/startup_email_secret_tests_tests.rs
  • crates/openhuman-core/src/channels/runtime/startup_yuanbao_secret_tests_tests.rs
  • crates/openhuman-core/src/channels/runtime/test_support.rs
  • crates/openhuman-core/src/channels/tests/host_pipeline.rs
  • crates/openhuman-core/src/channels/tests/runtime_dispatch.rs
  • crates/openhuman-core/src/channels/tests/runtime_tool_calls.rs
  • crates/openhuman-core/src/config/mod.rs
  • crates/openhuman-core/src/config/schema/load/parse.rs
  • crates/openhuman-core/src/config/schema/load/parse_tests.rs
  • crates/openhuman-core/src/config/schema/load/secrets.rs
  • crates/openhuman-core/src/config/schema/mod.rs
  • crates/openhuman-core/src/core/agent_cli/debug/mod_tests.rs
  • crates/openhuman-core/src/core/agent_cli/debug/prompt_size_tests.rs
  • crates/openhuman-core/src/core/all_bound_controller_tests.rs
  • crates/openhuman-core/src/core/all_keyring_consent_controller_tests.rs
  • crates/openhuman-core/src/core/cli.rs
  • crates/openhuman-core/src/core/runtime/context_test_support.rs
  • crates/openhuman-core/src/core/runtime/subscribers_tests.rs
  • crates/openhuman-core/src/credentials/api_key.rs
  • crates/openhuman-core/src/credentials/api_key_tests.rs
  • crates/openhuman-core/src/credentials/core.rs
  • crates/openhuman-core/src/credentials/mod.rs
  • crates/openhuman-core/src/credentials/ops.rs
  • crates/openhuman-core/src/credentials/ops/credential_tests.rs
  • crates/openhuman-core/src/credentials/ops_credential_local_session_tests.rs
  • crates/openhuman-core/src/credentials/ops_credential_per_user_storage_tests.rs
  • crates/openhuman-core/src/credentials/ops_credential_tests.rs
  • crates/openhuman-core/src/credentials/ops_tests.rs
  • crates/openhuman-core/src/credentials/profiles.rs
  • crates/openhuman-core/src/credentials/profiles/keychain.rs
  • crates/openhuman-core/src/credentials/profiles/migration.rs
  • crates/openhuman-core/src/credentials/profiles/persistence.rs
  • crates/openhuman-core/src/credentials/profiles/readonly.rs
  • crates/openhuman-core/src/credentials/profiles/readonly_tests.rs
  • crates/openhuman-core/src/credentials/profiles/store_core.rs
  • crates/openhuman-core/src/credentials/profiles_behavior_tests.rs
  • crates/openhuman-core/src/credentials/profiles_keychain_error_tests.rs
  • crates/openhuman-core/src/credentials/profiles_storage_tests.rs
  • crates/openhuman-core/src/credentials/profiles_tests.rs
  • crates/openhuman-core/src/credentials/session_state_tests.rs
  • crates/openhuman-core/src/credentials/test_support/mod.rs
  • crates/openhuman-core/src/cron/channel_bridge.rs
  • crates/openhuman-core/src/cron/scheduler/agent_run_tests.rs
  • crates/openhuman-core/src/cron/scheduler_headless_descendants_tests.rs
  • crates/openhuman-core/src/cron/scheduler_host_agent_tests.rs
  • crates/openhuman-core/src/cron/scheduler_tests.rs
  • crates/openhuman-core/src/flows/caps_host/ops_tests.rs
  • crates/openhuman-core/src/flows/http_credentials_tests.rs
  • crates/openhuman-core/src/flows/ops_tests.rs
  • crates/openhuman-core/src/inbound/linked_fixture.rs
  • crates/openhuman-core/src/inbound/settings.rs
  • crates/openhuman-core/src/inbound/settings_tests.rs
  • crates/openhuman-core/src/inference/context_window_discovery_tests.rs
  • crates/openhuman-core/src/inference/context_window_tests.rs
  • crates/openhuman-core/src/inference/provider/factory/access_gates.rs
  • crates/openhuman-core/src/inference/provider/factory/cloud_slug.rs
  • crates/openhuman-core/src/inference/provider/factory/credentials.rs
  • crates/openhuman-core/src/inference/provider/factory_crate_native_cloud_tests.rs
  • crates/openhuman-core/src/inference/provider/factory_crate_native_defaults_tests.rs
  • crates/openhuman-core/src/inference/provider/factory_crate_native_diagnostics_tests.rs
  • crates/openhuman-core/src/inference/provider/factory_crate_native_jwt_tests.rs
  • crates/openhuman-core/src/inference/provider/factory_crate_native_tests.rs
  • crates/openhuman-core/src/inference/provider/factory_egress_fallback_tests.rs
  • crates/openhuman-core/src/inference/provider/factory_explicit_ctx_tests.rs
  • crates/openhuman-core/src/inference/provider/factory_local_only_endpoint_tests.rs
  • crates/openhuman-core/src/inference/provider/factory_model_gate_tests.rs
  • crates/openhuman-core/src/inference/provider/factory_route_resolution_tests.rs
  • crates/openhuman-core/src/inference/provider/factory_tests.rs
  • crates/openhuman-core/src/inference/registry_tests.rs
  • crates/openhuman-core/src/inference/turn_models_budget_media_tests.rs
  • crates/openhuman-core/src/inference/turn_models_native_tests.rs
  • crates/openhuman-core/src/inference/turn_models_summarizer_tests.rs
  • crates/openhuman-core/src/inference/turn_models_tests.rs
  • crates/openhuman-core/src/integrations/composio/action_tool_tests.rs
  • crates/openhuman-core/src/integrations/composio/client_tests.rs
  • crates/openhuman-core/src/integrations/composio/connected_integrations/cache_scope_tests.rs
  • crates/openhuman-core/src/integrations/composio/connected_integrations/cache_tests.rs
  • crates/openhuman-core/src/integrations/composio/execute_dispatch.rs
  • crates/openhuman-core/src/integrations/composio/flow_backend_tests.rs
  • crates/openhuman-core/src/integrations/composio/flow_gate_tests.rs
  • crates/openhuman-core/src/integrations/composio/identity_store_tests.rs
  • crates/openhuman-core/src/integrations/composio/module_client.rs
  • crates/openhuman-core/src/integrations/composio/module_client_test_support.rs
  • crates/openhuman-core/src/integrations/composio/ops/scope_prefs_tests.rs
  • crates/openhuman-core/src/integrations/composio/ops_fetch_integrations_and_triggers_tests.rs
  • crates/openhuman-core/src/integrations/composio/ops_no_session_and_cache_tests.rs
  • crates/openhuman-core/src/integrations/composio/ops_tests.rs
  • crates/openhuman-core/src/integrations/composio/tools/scope_gate_tests.rs
  • crates/openhuman-core/src/integrations/composio/tools_direct_mode_routing_tests.rs
  • crates/openhuman-core/src/integrations/composio/tools_host_credential_tests.rs
  • crates/openhuman-core/src/integrations/composio/tools_metadata_and_sandbox_tests.rs
  • crates/openhuman-core/src/integrations/composio/tools_tests.rs
  • crates/openhuman-core/src/memory/lifecycle/memory_block.rs
  • crates/openhuman-core/src/memory/lifecycle/session_hooks_tests.rs
  • crates/openhuman-core/src/modules/channel_runtime_tests.rs
  • crates/openhuman-core/src/modules/connectors_tests.rs
  • crates/openhuman-core/src/modules/ops.rs
  • crates/openhuman-core/src/modules/ops/list.rs
  • crates/openhuman-core/src/modules/registry/records_computer.rs
  • crates/openhuman-core/src/modules/registry/records_docs_wallet.rs
  • crates/openhuman-core/src/modules/registry/records_eventqueues.rs
  • crates/openhuman-core/src/modules/registry/records_extra.rs
  • crates/openhuman-core/src/modules/registry/records_flows.rs
  • crates/openhuman-core/src/modules/registry/records_mcp_connectors.rs
  • crates/openhuman-core/src/modules/registry/records_memory_juice.rs
  • crates/openhuman-core/src/modules/registry/records_search.rs
  • crates/openhuman-core/src/modules/registry/records_voice.rs
  • crates/openhuman-core/src/modules/security/client.rs
  • crates/openhuman-core/src/modules/security/device_pairing_store.rs
  • crates/openhuman-core/src/modules/security/device_pairing_store_tests.rs
  • crates/openhuman-core/src/modules/security/host_callbacks.rs
  • crates/openhuman-core/src/modules/security/policy.rs
  • crates/openhuman-core/src/modules/security/policy_tests.rs
  • crates/openhuman-core/src/modules/storage_grants_tests.rs
  • crates/openhuman-core/src/modules/tinybox/operations.rs
  • crates/openhuman-core/src/modules/wallet_host.rs
  • crates/openhuman-core/src/modules/wallet_host_trc20.rs
  • crates/openhuman-core/src/platform/socket/token_provider.rs
  • crates/openhuman-core/src/profiles/credentials_tests.rs
  • crates/openhuman-core/src/sandbox/ops.rs
  • crates/openhuman-core/src/sandbox/shell_exec.rs
  • crates/openhuman-core/src/sandbox/spawn_plan/facts_tests.rs
  • crates/openhuman-core/src/search/tools_tests.rs
  • crates/openhuman-core/src/security/approval/gate.rs
  • crates/openhuman-core/src/security/approval/native/history_import_tests.rs
  • crates/openhuman-core/src/security/approval/native/rows.rs
  • crates/openhuman-core/src/security/approval/native/scopes.rs
  • crates/openhuman-core/src/security/approval/native/secret_scope_tests.rs
  • crates/openhuman-core/src/security/approval/native/view.rs
  • crates/openhuman-core/src/security/credentials/api_key.rs
  • crates/openhuman-core/src/security/credentials/api_key_tests.rs
  • crates/openhuman-core/src/security/credentials/bus.rs
  • crates/openhuman-core/src/security/credentials/bus_tests.rs
  • crates/openhuman-core/src/security/credentials/core.rs
  • crates/openhuman-core/src/security/credentials/core_tests.rs
  • crates/openhuman-core/src/security/credentials/credential_ref.rs
  • crates/openhuman-core/src/security/credentials/credential_ref_tests.rs
  • crates/openhuman-core/src/security/credentials/http_creds.rs
  • crates/openhuman-core/src/security/credentials/http_creds_tests.rs
  • crates/openhuman-core/src/security/credentials/openai_oauth/flow.rs
  • crates/openhuman-core/src/security/credentials/openai_oauth/flow_tests_bearer_token_tests.rs
  • crates/openhuman-core/src/security/credentials/openai_oauth/flow_tests_lifecycle_tests.rs
  • crates/openhuman-core/src/security/credentials/openai_oauth/store.rs
  • crates/openhuman-core/src/security/credentials/ops.rs
  • crates/openhuman-core/src/security/credentials/ops/boot_env.rs
  • crates/openhuman-core/src/security/credentials/ops/boot_env_tests.rs
  • crates/openhuman-core/src/security/credentials/ops/composio.rs
  • crates/openhuman-core/src/security/credentials/ops/credential.rs
  • crates/openhuman-core/src/security/credentials/ops/credential_tests.rs
  • crates/openhuman-core/src/security/credentials/ops/gated_services.rs
  • crates/openhuman-core/src/security/credentials/ops/provider_credentials.rs
  • crates/openhuman-core/src/security/credentials/ops/secrets.rs
  • crates/openhuman-core/src/security/credentials/ops/session_query.rs
  • crates/openhuman-core/src/security/credentials/ops_credential_local_session_tests.rs
  • crates/openhuman-core/src/security/credentials/ops_credential_per_user_storage_tests.rs
  • crates/openhuman-core/src/security/credentials/ops_credential_tests.rs
  • crates/openhuman-core/src/security/credentials/ops_provider_oauth_tests.rs
  • crates/openhuman-core/src/security/credentials/ops_tests.rs
  • crates/openhuman-core/src/security/credentials/profiles.rs
  • crates/openhuman-core/src/security/credentials/profiles/lock.rs
  • crates/openhuman-core/src/security/credentials/profiles/migration.rs
  • crates/openhuman-core/src/security/credentials/profiles/persistence.rs
  • crates/openhuman-core/src/security/credentials/profiles/readonly.rs
  • crates/openhuman-core/src/security/credentials/profiles/store_core.rs
  • crates/openhuman-core/src/security/credentials/profiles_keychain_error_tests.rs
  • crates/openhuman-core/src/security/credentials/profiles_owner_only_tests.rs
  • crates/openhuman-core/src/security/credentials/profiles_persistence_migration_tests.rs
  • crates/openhuman-core/src/security/credentials/profiles_store_lock_tests.rs
  • crates/openhuman-core/src/security/credentials/session_support.rs
  • crates/openhuman-core/src/security/credentials/session_support_tests.rs
  • crates/openhuman-core/src/security/devices/schemas_tests.rs
  • crates/openhuman-core/src/security/policy/native_commands.rs
  • crates/openhuman-core/src/security/policy/native_commands_tests.rs
  • crates/openhuman-core/src/security/prompt_injection/detector.rs
  • crates/openhuman-core/src/security/prompt_injection/mod.rs
  • crates/openhuman-core/src/security/secret_storage/encrypted_store_tests.rs
  • crates/openhuman-core/src/security/secret_storage/file_store.rs
  • crates/openhuman-core/src/security/secret_storage/mod.rs
  • crates/openhuman-core/src/storage/boot.rs
  • crates/openhuman-core/src/storage/documents.rs
  • crates/openhuman-core/src/storage/local.rs
  • crates/openhuman-core/src/storage/schema.rs
  • crates/openhuman-core/src/storage/schema_tests.rs
  • crates/openhuman-core/src/threads/attachments/staged/native.rs
  • crates/openhuman-core/src/threads/store/bus.rs
  • crates/openhuman-core/src/threads/store/bus_tests.rs
  • crates/openhuman-core/src/threads/wire_schema.rs
  • crates/openhuman-core/src/threads/wire_schema_tests.rs
  • crates/openhuman-core/src/tools/ops_tests.rs
  • crates/openhuman-core/src/tools/ops_tests_catalog_fixture_tests.rs
  • crates/openhuman-core/src/triage/escalation_tests.rs
  • crates/openhuman-core/src/triage/routing_tests.rs
  • crates/openhuman-core/src/voice/reply_synthesis.rs
  • crates/openhuman-core/src/web_chat/ingress.rs
  • crates/openhuman-core/src/web_chat/ingress_tests.rs
  • crates/openhuman-core/src/web_chat/ops/start_chat.rs
  • crates/openhuman-core/src/web_chat/ops/state_tests.rs
  • crates/openhuman-core/src/web_chat/progress.rs
  • crates/openhuman-core/src/web_chat/progress_tests.rs
  • crates/openhuman-core/src/web_chat/progress_trace.rs
  • crates/openhuman-core/src/web_chat/runner.rs
  • crates/openhuman-core/src/web_chat/session_checkout_tests.rs
  • crates/openhuman-core/src/web_chat/session_routing_tests.rs
  • crates/openhuman-core/src/web_chat/surface_tests.rs
  • crates/openhuman-core/src/web_chat/turn_host.rs
  • crates/openhuman-core/src/web_chat/web_tests.rs
  • crates/openhuman-core/src/web_chat/web_tests_ptt_source_tests.rs
  • crates/openhuman-core/src/web_chat/web_tests_queue_acceptance_tests.rs
  • crates/openhuman-core/src/web_chat/web_tests_rate_limit_classification_tests.rs
  • crates/openhuman-core/src/web_chat/web_tests_session_and_concurrency_tests.rs
  • crates/openhuman-core/src/web_chat/web_tests_start_chat_ingress_tests.rs
  • crates/openhuman-core/src/web_chat/web_tests_timeout_classification_tests.rs
  • crates/openhuman-core/src/web_chat/web_tests_turn_lifecycle_tests.rs
  • crates/openhuman-embed/examples/host_tools.rs
  • crates/openhuman-embed/src/agent/spec.rs
  • crates/openhuman-embed/src/runtime/build.rs
  • crates/openhuman-embed/tests/session_store_lease.rs
  • crates/openhuman-rpc/src/host.rs
  • crates/openhuman-rpc/src/server/http/events_tests.rs
  • crates/openhuman-rpc/src/server/serve.rs
  • crates/openhuman-rpc/src/server/shims.rs
  • crates/openhuman-rpc/src/server/shims_tests.rs
  • crates/openhuman-rpc/src/server/socketio_tests.rs
  • crates/openhuman-rpc/tests/host_desktop.rs
  • crates/openhuman-rpc/tests/host_tui.rs
  • crates/openhuman-tinyhumans/src/backend/url.rs
  • crates/openhuman-tinyhumans/src/channels/delivery.rs
  • crates/openhuman-tinyhumans/src/channels/mod_tests.rs
  • crates/openhuman-tinyhumans/src/hosted/client_tests.rs
  • crates/openhuman-tinyhumans/src/hosted/test_support.rs
  • crates/openhuman-tinyhumans/src/inference/managed_embedding_tests.rs
  • crates/openhuman-tinyhumans/src/memory/mod_tests.rs
  • crates/openhuman-tinyhumans/src/runtime_tests.rs
  • crates/openhuman-tinyhumans/src/socket/port.rs
  • crates/openhuman-tinyhumans/src/socket/port_tests.rs
  • crates/openhuman-tinyhumans/src/transport/memory_bearer_tests.rs
  • crates/openhuman-tinyhumans/src/voice/cloud_transcribe_tests.rs
  • crates/openhuman-tinyhumans/src/voice/live_tests.rs
  • crates/openhuman-tinyhumans/src/voice/realtime_tests.rs
  • crates/openhuman-tinyhumans/src/voice/speech_providers_tests.rs
  • docs/gitbooks/en/developing/embed/concepts/tools.md
  • docs/gitbooks/en/developing/embed/guides/mock-backend-testing.md
  • docs/storage-schema.md
  • llms-full.txt
  • scripts/__tests__/module-build.test.mjs
  • scripts/__tests__/module-pin-status.test.mjs
  • scripts/__tests__/module-release-and-repin.test.mjs
  • scripts/__tests__/storage-bypass-debt.test.mjs
  • scripts/__tests__/test-module-installation.test.mjs
  • scripts/ci/agent-runtime-boundary-baseline.json
  • scripts/ci/check-dep-sim-calibration.sh
  • scripts/ci/check-gated-test-allowlist.sh
  • scripts/ci/check-module-pins.mjs
  • scripts/ci/check-openhuman-rust-layout.mjs
  • scripts/ci/check-storage-bypass.mjs
  • scripts/ci/ignored-test-baseline.json
  • scripts/ci/process-statics.json
  • scripts/ci/saas-ambient-baseline.json
  • scripts/ci/self-hosted/install-test-modules.sh
  • scripts/ci/self-hosted/test-module-assets.mjs
  • scripts/ci/storage-bypass-debt.mjs
  • scripts/ci/storage-bypass-relocations.json
  • scripts/ci/storage-bypass.md
  • scripts/kernel-floor.limits
  • scripts/lib/git-env.mjs
  • scripts/lib/module-pins.mjs
  • scripts/lib/module-repin.mjs
  • scripts/modules/pin-status.mjs
  • tests/cron_agent_pass_e2e.rs
  • tests/json_rpc_agent_team_e2e.rs
  • tests/support/config_auth_harness.rs
  • tests/support/rpc_e2e_harness.rs
  • tests/tinyflows_published_prompt_e2e.rs
  • vendor/tinyagents
  • vendor/tinybox
  • vendor/tinychannels
  • vendor/tinycomputer
  • vendor/tinyeventqueues
  • vendor/tinyflows
  • vendor/tinysearch
  • vendor/tinysecurity
  • vendor/tinyskills
  • vendor/tinywallet

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

CodeRabbit Verify

  • Run CodeRabbit Verify to test the changes in this pull request.

senamakel and others added 29 commits October 30, 2026 18:07
Removed the tinystoragedrivers-types dependency from the app's lockfile since nothing references it anymore, and updated the vendored tinywallet submodule to a newer commit.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Update the vendored tinywallet submodule to the latest upstream commit.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Bump the vendored tinywallet submodule to a newer commit.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Update the vendored tinywallet submodule to the latest upstream commit.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Wrap the repair-start barrier and turn join in ten-second timeouts so a regression that stalls cancellation fails the test instead of hanging the suite.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The cancellation test now reports the number of non-supplemental model calls when the supplemental repair fails to start, making intermittent failures easier to diagnose.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Added a total call counter to the gated repair model so the panic message reports both overall and non-supplemental model call counts, making it easier to diagnose why the supplemental repair never started.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The cancellation test waited only 10 seconds for the model to signal that repair had started, which could flake on slower CI machines. The timeout is now 60 seconds so the test waits for the signal rather than racing it.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
…uests

Adapt the channel tests to the reworked progressive transport API, replacing the boxed Send variant with SendTyped and supplying the new channel, conversation, and sequencing fields. The signed-in test helper is now awaited and output-event turn ids are non-optional, keeping the suite aligned with the updated request shapes.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Adjust the test imports so ChannelRef, ConversationKind, and ConversationRef come from the tinychannels_bus root rather than the module_progressive module, matching where those types now live.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
…tools example

The tools closure moved recorded_calls into the async block while also referencing it, which would not compile. Cloning it outside the async move lets the Ping tool take ownership without a borrow conflict.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The non-security-module build of provider_host_is_local previously always returned false, so localhost and private addresses were never treated as local. It now normalises the host and classifies loopback, private, link-local and unspecified IPv4/IPv6 addresses, with tests covering the new behaviour.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The fallback path in provider_host_is_local now returns false for every host when the security-module feature is disabled, instead of classifying loopback, private, and link-local addresses itself. The duplicated host parsing and its test were removed so local-host detection has a single implementation behind the security module.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Shortened the wait for the supplemental repair to start from 60s to 5s and added the turn's finished state to the panic message, so a stalled run fails fast and the diagnostic shows whether the turn already completed.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The shared config fixture now turns off secrets encryption so hosted-client tests can store credentials in disposable workspaces without booting the TinySecurity module that the encrypted store depends on.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
…heck

The local-model URL heuristic now also accepts localhost names and loopback, private, link-local, or unspecified IP literals directly, so it no longer depends on TinySecurity's module classifier being loaded while the host resolves its own API endpoint.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
…port

The hosted adapter tests no longer boot TinySecurity, and config() already disables config-secret encryption for their disposable workspace, so storing a session token needs no module-owned cipher scope. The one-time environment setup and master key initialization are removed as dead weight.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The unreachable embedder fixture now installs a lightweight egress guard that emits the host disclosure event directly, so the disclosure path can be exercised without loading a native TinySecurity artifact.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
…registry lock

Test configs now set secrets.encrypt to false so credential storage does not require an encryption key, and the registry lock is acquired through the async variant in async tests to avoid blocking the runtime.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The three cloud transcription tests each built the same Config by hand, so a test_config helper now centralises that setup and takes the optional API URL as a parameter. This removes the duplication and keeps the secret encryption setting consistent across the tests.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Updated the runtime tests to assert that controller extensions include the Inference domain group alongside Hosted, matching the current forwarding behaviour.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Test config helpers now set secrets.encrypt to false so tests don't depend on an encryption backend being available.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Reformatted two expressions to satisfy rustfmt and changed the realtime test to mutate the default config's secrets field instead of overriding the whole struct.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The self-hosted CI installer now stages the pinned TinySecurity module alongside the other test modules, and the asset list and installation test cover it. The core test suite exercises keyring and privacy decisions through this module, so it must be available on the verified local-file callback path.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Extend the CI installer test to verify that TinySecurity is resolved from the registry with a valid checksum and that the install command includes it alongside the other callback modules, so policy tests have the module they need.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The config-based store, get, and has helpers now delegate to AuthService instead of the state-dir variants, so API keys are persisted and read through the same profile path as other provider tokens. Blank keys are rejected up front and read failures are logged and treated as absent.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
…te-dir variants

The store, get, and has helpers that take a Config now delegate to their
existing state-dir counterparts instead of duplicating the AuthService
lookup logic, so all paths share one implementation.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
clear_api_key now builds the auth service from the configured state directory and encryption flag instead of from_config, so removal targets the same store that stored the key. Test fixtures disable secret encryption since they only need a local credential to satisfy model readiness.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
The helper that seeds a pending nudge now runs the failing shell call twice with distinct call ids, so the fixture matches the failure count the middleware expects before it nudges.

Auto-committed-on: cuttlefish
Co-authored-by: Medulla <medulla@tinyhumans.ai>
…t copy

wallet_host.rs carried its own copy of native_intent_matches_quote and
web3_approval_matches_request plus their helpers, identical to
tinywallet_bus::intent (which the wallet roll-up extracted from here).
Call the crate's matchers so a matcher fix lands in one place: the
TRC-20 binding fix (tinywallet#124) reaches the host with the next
vendor/tinywallet bump. No behaviour change at the current pin.
@M3gA-Mind

Copy link
Copy Markdown
Collaborator

Correction to the last bullet of the security/credentials note above. The two openhuman-app artifact_commands tests fail with "file is in a protected location" because TinySecurity does not load from the pinned release (v0.18.2), so the module-backed protected-path check fails closed, as intended. Confirmed on the self-hosted runner: with TinySecurity source-built from tinysecurity#49 (7caf242) and loaded, resolve_source_returns_the_file_in_the_files_folder passes. No code change is needed; both tests clear once records_security is re-pinned to a canonical #49 release.

@tinysweeper tinysweeper Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requesting changes: 1 lane(s) blocking, worst finding is high.

Fix or reply to the findings below and push. The next review clears this automatically once they are gone — you should not need to dismiss anything by hand.

Diagnostics

Total spend: $0.0174


#[test]
fn lookup_openai_bearer_token_returns_session_expired_error_when_refresh_fails_on_expired_token() {
#[tokio::test]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

priority high critique likely

Keep the refresh-failure tests out of a tokio runtime

This test is built entirely on the premise written in its own comment: "no tokio runtime available (so try_refresh_oauth_token returns Err)". Converting it to `#[tokio::test]` makes that premise false. The token is 5 minutes past expiry with `refresh_token: Some("refresh")`, so `lookup_openai_oauth_credentials` enters the refresh branch and calls `try_refresh_oauth_token`, which in `security/credentials/openai_oauth/store.rs` does `if let Ok(handle) = tokio::runtime::Handle::try_current()` — now `Ok` — and then `tokio::task::block_in_place(|| handle.block_on(refresh_access_token(&cfg, &refresh)))`. `#[tokio::test]` defaults to the current-thread flavor, where `block_in_place` panics ("can call blocking only when running on the multi-threaded runtime"), so the test panics instead of getting the `authentication token is expired` error it asserts on. The same applies to `lookup_openai_bearer_token_returns_ok_when_nearly_expiring_and_refresh_fails` if its profile also carries a `refresh_token` (that line is outside the diff, so I could not confirm it): 30 seconds to expiry is inside the 2-minute skew, so it would hit the same `block_in_place`. Only that test's expectation (`Ok(Some(..))`) differs, not the path taken. The fix is not to add `flavor = "multi_thread"`: that would let the refresh proceed and issue a real request to the OpenAI token endpoint, which the repository forbids ("Tests must not call real backend or third-party services; avoid time-based flakes and real network access in unit tests"). Give the refresh a deterministically failing target instead — set `OPENAI_CODEX_OAUTH_TOKEN_URL` (read only under `#[cfg(test)]` via `local_refresh_url_override`, loopback-only) to a `wiremock::MockServer` that answers 500, the way the mock-server test in this same file already does, and keep the test async.

[RULE] tokio-runtime-assumption ·


#[test]
fn disconnect_openai_oauth_clears_profile() {
#[tokio::test]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

priority high critique likely

Drop the nested runtime in the async disconnect test

The body of this test still contains ```rust runtime() .block_on(disconnect_openai_oauth(&config)) .unwrap(); ``` where `runtime()` is the file-local `tokio::runtime::Runtime::new()`. That was fine while the test was a plain `#[test]`; now that the function is an `async fn` driven by `#[tokio::test]`, the poll happens inside a runtime context and `Runtime::block_on` on a second runtime panics with "Cannot start a runtime from within a runtime". The test never reaches the `openai_oauth_status` assertions. Since `disconnect_openai_oauth` is already async, await it on the test's own runtime: replace that block with `disconnect_openai_oauth(&config).await.unwrap();`.

[RULE] tokio-runtime-assumption ·

@tinysweeper tinysweeper Bot added priority: p1 Next. Wrong behaviour a user will hit, or a security weakness behind a condition. and removed priority: p3 Whenever. Cosmetic, a nicety, or a cleanup with no user visible effect. labels Nov 2, 2026
…gain

Alpha's job runs every millisecond, so it is legitimately due again when the
second pass over the same agent starts. That pass dispatching it shows the
scope the first pass released was free; a refused scheduler start errors.
vendor/tinychannels moves from 6b0197ef to 8aca8d3, the TinyChannels #164
head, whose workspace version is 0.2.0, so the version requirements in
openhuman-core and openhuman-cli move from "0.1" to "0.2".

8aca8d3 restores the channel API shapes the base code was written for:
boxed progressive results, an optional output turn_id, the ClearHistory
session_scope, the Route capabilities and configured_channel, flat read
receipt and reaction actors, and the send error's unsupported flag.
Return those call sites and their tests to the base code. Edit outcomes
are again EditUnsupported only when the provider says so, so a single
Forbidden or BadFormat edit no longer disables progressive edits for the
whole provider. EditMessage now takes a boxed intent, and the bus
capabilities_for table is gone, so thread projection uses the host
table in channels::capabilities.
TinyChannels removed both configs (6b42fd5a). No provider ever served
them, and openhuman has no UI, docs or runtime path that reads them;
only the secret encrypt and decrypt pass touched their tokens. Remove
the re-exports and those secret branches. ChannelsConfig ignores
unknown keys, so an existing [channels.matrix] or [channels.webhook]
section still loads and is dropped on the next save.
Dropping the Matrix and Webhook configs makes serde ignore an existing
[channels_config.matrix] or [channels_config.webhook] section, and the
next save removes it. Log one warning per section at load naming it,
never its values, so the user knows why it disappears.
At the #164 head the progressive transport result is boxed again and
Delete, Typing and OutputEvent carry an optional turn_id. Box the hosted
callback's result as the base code did and update the channel tests.
The lib tests and two library sites still used the 6b0197ef shapes that
the #164 head (and the app's generated chatWire types) no longer have:

- user_error carries no message or error_retryable; the frontend's
  user_error type never had them, so cron stops setting them
- the turn timing payload reports total_ms, not elapsed_ms
- relay final-message parts are already outbound parts
- channel events use source_timestamp, a SenderRef actor and a reaction
  identity without the custom flag, so host_tests return to base
- the progressive transport result is boxed, the prepared inbound has
  history_key_ignores_thread, the delivery terminal result a receipt and
  the outbound intent its channel, conversation and turn references
…eanup

Regenerate both lockfiles for the tinychannels 0.2.0 repin. Its module
also pulls tinyvoice-bus from tinyvoice cf64444 by git, next to the
vendored copy. Drop the user_error message and error_retryable fields
from the embed facade test and the Matrix and Webhook imports from the
config harness, and rewrap the two re-export lists rustfmt now joins.

@tinysweeper tinysweeper Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requesting changes: 2 lane(s) blocking, worst finding is high.

Fix or reply to the findings below and push. The next review clears this automatically once they are gone — you should not need to dismiss anything by hand.

Diagnostics

Total spend: $0.0689

The tui had been narrowed to the 6b0197ef web events (output_chars on
tool results, no skill or display fields, nested test contexts, and no
sub-agent rows). At the #164 head the web events are back to the shapes
main's tui was written for, so restore crates/openhuman-tui to main.
…tions

The #164 head declares the legacy migration source collections next to
the dotted ones (tinychannels 3740b576), so docs:generate lists the
channel_remote_*, channels_delivery_* and unprefixed whatsapp_* names.
…e it

The bridge was a process-wide RwLock, so a cron test that installed an
empty bridge leaked into channel_origin_fails_when_the_channel_runtime_is_not_running,
which then saw 'configured channel module is unavailable'. HookSlot is
per-thread under cfg(test) and process-wide otherwise.
The pinned tinyagents (c3d7d32) derives JsonSchema on RunMode without
rename_all, so the thread wire schema named its variants Build/Plan and
chat-wire:check wanted to regenerate threadWire.generated.ts to match.
The runtime wire never serializes that type; it carries the mode_label
strings build/plan. Describe the schema with a local mirror that uses
those labels, and test that every schema value round-trips through
parse_mode_label. Remove the mirror once the pin includes tinyagents
bafab14.

@tinysweeper tinysweeper Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requesting changes: 2 lane(s) blocking, worst finding is high.

Fix or reply to the findings below and push. The next review clears this automatically once they are gone — you should not need to dismiss anything by hand.

Diagnostics

Total spend: $0.0933

Brings tinywallet#124's intent fixes to the host through
tinywallet_bus::intent: TRC-20 intents are bound to the quote's token,
recipient and amount, and EVM native recipients compare
case-insensitively. No manifest changes, so neither lockfile moves.

@tinysweeper tinysweeper Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requesting changes: 1 lane(s) blocking, worst finding is low.

Fix or reply to the findings below and push. The next review clears this automatically once they are gone — you should not need to dismiss anything by hand.

Diagnostics

Total spend: $0.0198

Resolves the wallet_host.rs conflict with tinyhumansai#8529 by keeping this branch's
use of tinywallet_bus::intent, and drops tinyhumansai#8529's host-side
wallet_host_trc20.rs: vendor/tinywallet ffe91c6 carries the same TRC-20
binding in the crate matcher. tinyhumansai#8529's native_trc20_* tests are kept.

Also applies rustfmt's import order to sandbox/ops.rs, which arrived
unformatted from main (tinyhumansai#8318).

@tinysweeper tinysweeper Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tinysweeper could not complete coverage (257 unanswered item(s)), so this is not an approval.

Diagnostics

Total spend: $0.0004

@tinysweeper tinysweeper Bot added priority: p3 Whenever. Cosmetic, a nicety, or a cleanup with no user visible effect. and removed priority: p1 Next. Wrong behaviour a user will hit, or a security weakness behind a condition. labels Nov 3, 2026
@senamakel
senamakel merged commit 0b46908 into tinyhumansai:main Nov 3, 2026
28 of 37 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

priority: p3 Whenever. Cosmetic, a nicety, or a cleanup with no user visible effect.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants