Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1014 commits
Select commit Hold shift + click to select a range
b04f3be
feat(flows): add script gate capability for tinyflows
senamakel Oct 16, 2026
5ce6286
feat(tinyflows): gate script execution behind a jailed spawner
senamakel Oct 16, 2026
2045cfa
chore: files changed crates/openhuman-core/src/flows/tinyflows/caps/m…
senamakel Oct 16, 2026
187e8bb
feat(sandbox): add sandbox plan module behind security-module feature
senamakel Oct 16, 2026
2f28972
style: apply rustfmt formatting to sandbox and test code
senamakel Oct 16, 2026
eb10989
refactor(sandbox): drop unused backend from ExecutorNotWired
senamakel Oct 16, 2026
e9aa700
chore(registry): bump tinysecurity admission pins to v0.11.0
senamakel Oct 16, 2026
ef3dec5
chore(deps): bump tinysecurity-bus to 0.11.0
senamakel Oct 16, 2026
1fd36e4
docs(sandbox): document plan adapter, read floor, and ungated spawn s…
senamakel Oct 16, 2026
5a5991d
chore(deps): bump tinybox-bus and tinysecurity-bus
senamakel Oct 16, 2026
64432a6
chore(ci): lower legacy line limits for two rust files
senamakel Oct 16, 2026
c22c3fc
chore(registry): roll tinychannels module back to 0.1.34
senamakel Oct 16, 2026
5dbd399
test(security-gate): cover hourly budget and scheduled-turn restrictions
senamakel Oct 16, 2026
a3ad644
fix(sandbox): resolve shell exec fixture path relative to crate root
senamakel Oct 16, 2026
02c52b6
refactor(sandbox): restructure untrusted sandbox module
senamakel Oct 16, 2026
c190f34
fix(sandbox): restore untrusted sandbox module
senamakel Oct 16, 2026
004d1dc
feat(cron): run shell jobs through the sandbox
senamakel Oct 16, 2026
19ae438
chore: files changed crates/openhuman-core/src/cron/scheduler/shell_j…
senamakel Oct 16, 2026
ff5da60
refactor(hooks): run command hooks through the sandboxed spawner
senamakel Oct 16, 2026
c33f714
chore: files changed crates/openhuman-core/src/agent/tinyagents/host/…
senamakel Oct 16, 2026
0fb8a1c
refactor(hooks): reformat sandbox config load chain
senamakel Oct 16, 2026
c0f4be4
chore(vendor): add tinyagents dependency
senamakel Oct 16, 2026
661473e
chore(vendor): bump tinysecurity submodule
senamakel Oct 16, 2026
46d87eb
feat(security): add native approval scopes and audit stream
senamakel Oct 16, 2026
a68bcba
test(security): add audit stream tests for native approval
senamakel Oct 16, 2026
fbd495a
feat(sandbox): add shell exec fixture
senamakel Oct 16, 2026
d5607b5
fix(security): reject empty commands in security_command
senamakel Oct 16, 2026
2aeb18a
feat(security): block shell commands that bypass policy checks
senamakel Oct 16, 2026
be722e1
refactor(agent): simplify approval middleware control flow
senamakel Oct 16, 2026
e0c37d6
fix(security_gate): block shell commands that bypass the allowlist
senamakel Oct 16, 2026
9188653
refactor(tinyagents): extract tinysecurity middleware into its own mo…
senamakel Oct 16, 2026
aecc35e
fix(tinysecurity): stop blocking tool calls on benign channel messages
senamakel Oct 16, 2026
f46fcab
refactor(tinyagents): extract turn middleware into its own module
senamakel Oct 16, 2026
c63a969
chore: files changed crates/openhuman-core/src/agent/tinyagents/host/…
senamakel Oct 16, 2026
4d4e39e
feat(agent): stop turns when the token budget is exhausted
senamakel Oct 16, 2026
96d39d4
chore(tinyagents): remove unused imports from host bundle
senamakel Oct 16, 2026
0ac2ace
feat(sandbox): add run_host_with_stdin for host shell execution
senamakel Oct 16, 2026
19cc616
refactor(tinysecurity): extract module ask behind a trait
senamakel Oct 16, 2026
2785bd1
docs(sandbox): document command hooks reaching the jail gate
senamakel Oct 16, 2026
f444165
chore(vendor): bump tinyagents submodule
senamakel Oct 16, 2026
6baa4f6
test(tinysecurity): add coverage for security middleware
senamakel Oct 16, 2026
35c3dd6
test(tinysecurity): add module tests for tinysecurity middleware
senamakel Oct 16, 2026
81ae89f
fix(tinysecurity_channel): allow approval prompts to bypass channel f…
senamakel Oct 16, 2026
b8e398f
chore: files changed crates/openhuman-core/src/agent/tinyagents/host/…
senamakel Oct 16, 2026
3756ba3
test(tinyagents): add security gate host tests
senamakel Oct 16, 2026
67a2d94
feat(sandbox): add spawn plan facts module
senamakel Oct 16, 2026
25f0cd2
feat(sandbox): add spawn plan facts module
senamakel Oct 16, 2026
0b0f901
test(sandbox): add spawn plan facts tests
senamakel Oct 16, 2026
dc6e17f
feat(sandbox): add spawn plan executors
senamakel Oct 16, 2026
ea1cddb
refactor(sandbox): restructure spawn plan operation handling
senamakel Oct 16, 2026
e937648
feat(agent): add approval middleware for tinyagents nested calls
senamakel Oct 16, 2026
7c801f6
refactor(approval): route turn approvals through the resolver
senamakel Oct 16, 2026
6677e38
feat(security): add sandbox init config to module setup
senamakel Oct 16, 2026
5b19adf
style: apply rustfmt formatting across security and approval tests
senamakel Oct 16, 2026
55732ba
chore(vendor): bump tinysecurity submodule
senamakel Oct 16, 2026
89273e6
chore(vendor): bump tinyagents submodule
senamakel Oct 16, 2026
0c84e06
style: restore unrelated files rustfmt touched
senamakel Oct 16, 2026
5c0f6c1
feat(security): add sandboxed command execution
senamakel Oct 16, 2026
4cadfac
feat(sandbox): add spawn plan registry
senamakel Oct 16, 2026
a81890a
feat(sandbox): expose spawn plan module behind security feature
senamakel Oct 16, 2026
961af75
test(security): register host tool test module
senamakel Oct 16, 2026
3304a1c
fix(sandbox): hold the stream lock until the plan response arrives
senamakel Oct 16, 2026
8f43e8c
chore(deps): pin vendor/tinyagents to the async command spawner seam …
senamakel Oct 16, 2026
675606c
test(security): cover relayed module verdicts in the gate
senamakel Oct 16, 2026
ab820b3
refactor(sandbox): restructure spawn plan module
senamakel Oct 16, 2026
32ac69d
feat(sandbox): add spawn plan module
senamakel Oct 16, 2026
2ef765d
refactor(sandbox): restructure spawn plan module
senamakel Oct 16, 2026
66a1ab6
refactor(sandbox): restructure spawn plan module
senamakel Oct 16, 2026
f01896b
chore(sandbox): remove unused ops module
senamakel Oct 16, 2026
2031ba4
feat(sandbox): add untrusted sandbox module
senamakel Oct 16, 2026
4bf3f90
fix(sandbox): clone network ceiling before planning
senamakel Oct 16, 2026
f97fcf2
fix(sandbox): allow registry lookups for sandboxed spawn plans
senamakel Oct 16, 2026
88e801a
refactor(sandbox): route spawn plan calls through module proxy
senamakel Oct 16, 2026
b6fe06a
refactor(sandbox): carry executor facts on fixed module sources
senamakel Oct 16, 2026
ef7a394
test(sandbox): add integration test module for spawn plan
senamakel Oct 16, 2026
00fce2f
chore: files changed crates/openhuman-core/src/security/approval/gate.rs
senamakel Oct 16, 2026
bcbd947
feat(mcp): add stdio sandbox for MCP server processes
senamakel Oct 16, 2026
478eb41
feat(mcp): add MCP host module
senamakel Oct 16, 2026
c45c7e0
test(mcp): add host and stdio sandbox coverage
senamakel Oct 16, 2026
ea7e72b
refactor(agent): reuse tool resolution in external effect check
senamakel Oct 16, 2026
4404c9d
chore: files changed crates/openhuman-core/src/security/policy/native…
senamakel Oct 16, 2026
941bc43
test(security): reformat autonomy assertion in native command tests
senamakel Oct 16, 2026
efd149b
chore(vendor): bump tinysecurity submodule
senamakel Oct 16, 2026
5d5d864
docs(sandbox): document module-driven spawn planning
senamakel Oct 16, 2026
6aed744
fix(sandbox): correct untrusted sandbox test expectations
senamakel Oct 16, 2026
313b7df
refactor(sandbox): restructure untrusted sandbox tests
senamakel Oct 16, 2026
b368fc8
test(sandbox): fix PlanError path in untrusted tests
senamakel Oct 16, 2026
c44d533
feat(sandbox): add spawn plan facts
senamakel Oct 16, 2026
46797ed
test(sandbox): use neutral mount paths in spawn plan facts tests
senamakel Oct 16, 2026
be814e1
refactor(sandbox): extract spawn plan facts into dedicated module
senamakel Oct 16, 2026
a915815
test(sandbox): add coverage for sandbox ops
senamakel Oct 16, 2026
62e88ae
docs(security): document audit_stream in approval native module
senamakel Oct 16, 2026
f9bc04e
chore(vendor): bump tinybox submodule
senamakel Oct 16, 2026
59be268
chore: bump workspace crates to 0.1.36
senamakel Oct 16, 2026
5a7e616
chore(deps): add nix dependency to tinybox-module
senamakel Oct 16, 2026
9cea787
chore(deps): bump tinybox-bus to 0.1.36
senamakel Oct 16, 2026
a01a976
feat(registry): add extra module records
senamakel Oct 16, 2026
75307f9
feat(ci): validate module-owned spawn routes in the inventory
senamakel Oct 16, 2026
39d994d
docs(sandbox): document the stdio mcp server jail route
senamakel Oct 16, 2026
a837c40
test(sandbox): use crate-relative path for spawn plan error
senamakel Oct 16, 2026
a3d4f8a
chore(vendor): bump tinymcp submodule
senamakel Oct 16, 2026
99b83d3
build(deps): patch tinybox-bus to the in-tree copy
senamakel Oct 16, 2026
6e31e73
test(sandbox): cover inline stdin round trip and size limit
senamakel Oct 16, 2026
e5d5e09
chore(vendor): bump tinysecurity submodule
senamakel Oct 16, 2026
82a17ae
fix(sandbox): allow workspace grants under reserved names
senamakel Oct 16, 2026
2131a78
feat(registry): add MCP connector records
senamakel Oct 16, 2026
342dd02
test(registry): update expected tinymcp contract version
senamakel Oct 16, 2026
b1d753f
docs(security): document security module and tools layout
senamakel Oct 16, 2026
02f45a3
refactor(sandbox): extract spawn plan registry into its own module
senamakel Oct 16, 2026
324cfd2
test(sandbox): cover host scope eviction under pressure
senamakel Oct 16, 2026
2864d27
chore: files changed crates/openhuman-core/src/platform/about_app/cat…
senamakel Oct 16, 2026
408c7d1
chore(registry): bump tinysecurity module to 0.12.0
senamakel Oct 16, 2026
3557b04
chore(deps): bump tinysecurity-bus to 0.12.0
senamakel Oct 16, 2026
87373ae
chore(registry): bump tinysecurity module to 0.13.0
senamakel Oct 16, 2026
cce3137
chore(deps): bump tinysecurity-bus to 0.13.0
senamakel Oct 16, 2026
3bb2a82
fix(tinyagents): pass none for security gate config in live harness
senamakel Oct 16, 2026
2382cb3
style: apply rustfmt formatting across sandbox and mcp modules
senamakel Oct 16, 2026
e4f1a6b
style: apply rustfmt formatting to test files
senamakel Oct 16, 2026
511be0e
test(security): assert sandbox scopes are registered at runtime
senamakel Oct 16, 2026
f89e5d2
feat(subagent-host): track subagent lifecycle outcomes
senamakel Oct 17, 2026
35b8c2c
refactor(session-host): split runtime session tool surface into its o…
senamakel Oct 17, 2026
d4bc4fb
feat(web_chat): add progress bridge wire caps tests
senamakel Oct 17, 2026
9ed24fb
feat(web_chat): add progress bridge ledger
senamakel Oct 17, 2026
4c73f18
chore(ci): lower rust layout line-limit allowances
senamakel Oct 17, 2026
3228c03
feat(tools): add shell runtime and sandbox tests
senamakel Oct 17, 2026
1e69e20
refactor(subagent_host): fix mode path in cancelled outcome
senamakel Oct 17, 2026
4e86331
fix(flows): remove trailing whitespace in code cap
senamakel Oct 17, 2026
67dc410
test(cron): add scheduler tests
senamakel Oct 17, 2026
8682511
test(cron): attach allow gateway to scheduler test policies
senamakel Oct 17, 2026
b4b1e62
docs(security): add security module README
senamakel Oct 17, 2026
b816da4
chore(agent): add provider security tests
senamakel Oct 17, 2026
cd73530
test(attachments): reuse test config for warmup path resolution
senamakel Oct 17, 2026
f424ace
test(attachments): reorder fifo rejection test setup
senamakel Oct 17, 2026
3040114
chore: remove unused imports across core modules
senamakel Oct 17, 2026
2fab81a
feat(channels): add host adapter registry
senamakel Oct 17, 2026
31779f3
fix(session_host): prevent runtime session from dropping active turns
senamakel Oct 17, 2026
c9ca59d
chore: remove unused imports and silence unused variable warning
senamakel Oct 17, 2026
2fb07b8
refactor(core): drop redundant borrows of DispatchCtx
senamakel Oct 17, 2026
18bed27
chore: tidy formatting and satisfy newer clippy lints
senamakel Oct 17, 2026
2daded7
chore(core): remove unused imports across modules
senamakel Oct 17, 2026
a474cf2
chore: remove unused imports across core modules
senamakel Oct 17, 2026
93a2d66
test: gate feature-dependent tests behind cfg flags
senamakel Oct 17, 2026
fd1d1a9
chore(ci): raise pinned line limits for two rust files
senamakel Oct 17, 2026
169cd9f
test(shell): split shell tool tests into focused modules
senamakel Oct 17, 2026
c725dde
test(tinyflows): accept sandbox plan refusals in isolation test
senamakel Oct 17, 2026
d048ac3
test(startup): remove workspace migration test
senamakel Oct 17, 2026
a4474c1
Merge pull request #113 from senamakel/epic-7328-p7-cleanup
senamakel Oct 17, 2026
f689dd8
chore(vendor): add tinysecurity dependency
senamakel Oct 17, 2026
b2f29c8
feat(sandbox): add spawn plan facts module
senamakel Oct 17, 2026
fe2e2d0
feat(sandbox): add spawn plan facts module
senamakel Oct 17, 2026
1702f86
docs(sandbox): add README for the sandbox module
senamakel Oct 17, 2026
07a4485
test(sandbox): add coverage for spawn plan facts and integration
senamakel Oct 17, 2026
b0b2f3f
test(sandbox): expect unsupported denial for untrusted spawns
senamakel Oct 17, 2026
7e768bb
fix(security): restore missing security module
senamakel Oct 17, 2026
ce535af
chore(security): remove unused security module
senamakel Oct 17, 2026
522b1dc
fix(security): restore scoped security module
senamakel Oct 17, 2026
59446fa
style(sandbox): format regression tests
senamakel Oct 17, 2026
5e551e9
test(security_scoped): cover modules-disabled callers not faulting th…
senamakel Oct 17, 2026
9c8784f
docs(agents): document tinysecurity as the decision module
senamakel Oct 17, 2026
155b4e5
docs: add architecture and loadable modules guides
senamakel Oct 17, 2026
2ddd7b3
docs: add security architecture guide
senamakel Oct 17, 2026
28b90b2
docs: add gitbook pages for agent harness and mcp registry
senamakel Oct 17, 2026
7ef7965
docs: add agent harness architecture guide
senamakel Oct 17, 2026
8923e77
feat(about_app): add localai settings catalog for mobile
senamakel Oct 17, 2026
cf319aa
docs(sandbox): update credential read confinement notes
senamakel Oct 17, 2026
67a7878
fix(security_scoped): gate module proxy on module being enabled
senamakel Oct 17, 2026
6bf1ba3
chore(security): add temporary debug logging around proxy and fault l…
senamakel Oct 17, 2026
ad8377f
docs(embed): document turn steering and approval engine requirements
senamakel Oct 17, 2026
c9dc5e6
chore(security): log path authorization errors for debugging
senamakel Oct 17, 2026
8672444
chore(security): remove debug logging from proxy path
senamakel Oct 17, 2026
039cb5e
feat(core): add dispatch context tests
senamakel Oct 17, 2026
ecaa328
feat(config): add tests for ops loader and search
senamakel Oct 17, 2026
bfff3fb
fix(security): log native path validation failures at debug level
senamakel Oct 17, 2026
fc8b269
test(security): cover concurrent first calls with modules disabled
senamakel Oct 17, 2026
825a9d5
Merge pull request #115 from senamakel/epic-7328-p9-docs
senamakel Oct 17, 2026
5292046
test(memory): use File::create for empty config fixture
senamakel Oct 17, 2026
a546c31
chore(ci): allow test fixture config write in storage bypass check
senamakel Oct 17, 2026
04adf2f
Merge remote-tracking branch 'fork/epic/7328-security-bus' into epic-…
senamakel Oct 17, 2026
43b9fc6
Merge pull request #119 from senamakel/epic-7328-p7b-load-race
senamakel Oct 17, 2026
0482342
Merge fork/epic/7328-security-bus into epic-7328-p5-regressions
senamakel Oct 17, 2026
74565f7
chore(vendor): bump tinysecurity submodule
senamakel Oct 17, 2026
1e1a970
refactor(security): remove audit logger and its call sites
senamakel Oct 17, 2026
ece034c
refactor(security): remove workspace audit logger wiring from tool as…
senamakel Oct 17, 2026
d7bef8a
test(tools): remove unused audit logger import from ops tests
senamakel Oct 17, 2026
cb1be60
refactor(agent): drop unused audit argument from tool builder
senamakel Oct 17, 2026
101573c
test: drop audit logger from shell and topology test fixtures
senamakel Oct 17, 2026
422ceec
refactor(config): remove unused audit configuration
senamakel Oct 17, 2026
d2a4de2
chore(config): remove audit config remnants
senamakel Oct 17, 2026
6557d63
docs(config): remove stale audit config from schema table
senamakel Oct 17, 2026
5ad5df2
feat(security): add audit module
senamakel Oct 17, 2026
df7f5b9
refactor(security_audit): pass stream id into request builder
senamakel Oct 17, 2026
46a1ddd
test(security): avoid hardcoded secret in audit record test
senamakel Oct 17, 2026
82ea30e
refactor(shell): route command audit through security module stream
senamakel Oct 17, 2026
5883431
docs(security): document unified audit trail on the module stream
senamakel Oct 17, 2026
a892540
style: apply rustfmt formatting across config, security, and shell mo…
senamakel Oct 17, 2026
a3cd257
docs(security): update audit log docs to reflect module-owned stream
senamakel Oct 17, 2026
d4a2f13
chore(ci): lower legacy line limit for session host factory
senamakel Oct 17, 2026
d5d6bef
chore(ci): drop stale storage bypass baseline entry
senamakel Oct 17, 2026
d661e1d
test(config): drop redundant audit assertion from security policy test
senamakel Oct 17, 2026
d731f44
fix(security): avoid loading the module for audit rows
senamakel Oct 17, 2026
0b23664
test(security): cover audit rows without a serving module
senamakel Oct 17, 2026
beb1123
test(security_audit): rename shell rows test to drop redaction claim
senamakel Oct 17, 2026
d7a2e60
feat(security): add native approval engine
senamakel Oct 17, 2026
e04a708
feat(security): add approval gate for tool calls
senamakel Oct 17, 2026
70a925b
chore: I don't see an actual diff in your message — the "Diff:" secti…
senamakel Oct 17, 2026
9d50ad8
fix(sandbox): restore native jail path validation
senamakel Oct 17, 2026
af510e1
fix(deep_link_ipc): handle deep link IPC on Windows
senamakel Oct 17, 2026
da6c157
feat(deep-link): add windows ipc handling for deep links
senamakel Oct 17, 2026
07367d6
refactor(security): simplify approval park window computation
senamakel Oct 17, 2026
80da26a
test(security): add approval gate coverage for ttl, triage, and subag…
senamakel Oct 17, 2026
cba9629
test(approval): add coverage for approval engine and subagent gate
senamakel Oct 17, 2026
f4641d1
refactor(sandbox): return admitted policy and jail flag from backend …
senamakel Oct 17, 2026
e9bed0f
test(sandbox): add coverage for native jail and sandbox ops
senamakel Oct 17, 2026
d4ef45a
docs(core): document the boot-floor redaction decision
senamakel Oct 17, 2026
b259e7d
fix(security): reject paths that escape the workspace root
senamakel Oct 17, 2026
38ac1a4
fix(security): reject paths with null bytes in path checks
senamakel Oct 17, 2026
d670b14
fix(security): reject paths with parent directory traversal
senamakel Oct 17, 2026
d9a97b3
test(security): add tests for trusted roots policy
senamakel Oct 17, 2026
b999411
test(sandbox): add native jail tests
senamakel Oct 17, 2026
9981ce9
fix(cron): prevent shell job scheduler from dropping pending jobs
senamakel Oct 17, 2026
fb0c32e
feat(shell): add background process support to shell tool
senamakel Oct 17, 2026
bd8c997
refactor(security): derive default for policy types
senamakel Oct 17, 2026
639b17c
feat(shell): add platform-aware shell selection
senamakel Oct 17, 2026
c7ed832
docs(security): add READMEs for security module and policy submodule
senamakel Oct 17, 2026
30749ab
fix(security): allow policy actions to write into their own directory
senamakel Oct 17, 2026
3e062cd
fix(sandbox): treat docker runtime kind as requiring a sandbox
senamakel Oct 17, 2026
f32d180
test(shell): remove unused python utf8 defaults import
senamakel Oct 17, 2026
5f93f97
refactor(sandbox): extract sandbox operation helpers
senamakel Oct 17, 2026
9c76af7
test(sandbox): add open_jail helper for native jail tests
senamakel Oct 17, 2026
721efe1
fix(cron): prevent shell job scheduler from dropping output
senamakel Oct 17, 2026
7809f3c
test(security): import policy blocked marker in path check tests
senamakel Oct 17, 2026
486ca68
style: reformat long log lines and drop trailing blank line
senamakel Oct 17, 2026
f08484f
refactor(security): collapse ttl conversion into a single chain
senamakel Oct 17, 2026
b442d84
fix(shell): remove duplicate rate limit checks
senamakel Oct 17, 2026
bf4e09f
fix(agent): remove redundant borrow in attachments
senamakel Oct 17, 2026
4312da3
test(shell): remove stale cfg gate on HashMap import
senamakel Oct 17, 2026
71a5a91
fix(sandbox): derive Debug for the no-modules PlannedJail placeholder
senamakel Oct 17, 2026
0f49a8f
docs(sandbox): add README for the sandbox module
senamakel Oct 17, 2026
24ec837
test(shell): remove rate limit test
senamakel Oct 17, 2026
6b62435
Merge pull request #132 from senamakel/epic-7328-rm-sandbox-gates
senamakel Oct 17, 2026
fea183d
Merge pull request #128 from senamakel/epic-7328-rm-approval
senamakel Oct 17, 2026
724a256
Merge pull request #129 from senamakel/epic-7328-rm-policy
senamakel Oct 17, 2026
1066294
Merge pull request #131 from senamakel/epic-7328-rm-redact-egress
senamakel Oct 17, 2026
d425a97
chore(registry): bump tinysecurity module to 0.14.0
senamakel Oct 17, 2026
3525f69
chore(deps): bump tinysecurity-bus to 0.14.0
senamakel Oct 17, 2026
4d0e528
chore(deps): bump tinysecurity-bus to 0.14.0
senamakel Oct 17, 2026
268c920
chore: I don't see a diff in your message — the "Diff:" section is em…
senamakel Oct 17, 2026
2b72328
test(security): cover audit rows with no serving module
senamakel Oct 17, 2026
b53d29f
Merge fork/epic/7328-security-bus into epic-7328-p5-regressions
senamakel Oct 17, 2026
a58464d
Merge pull request #155 from senamakel/epic-7328-p5-regressions
senamakel Oct 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .github/workflows/ci-full.yml
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,9 @@ jobs:
touch .env
touch app/.env

- name: Exercise attested native security adapter and latency budget
shell: bash
run: bash scripts/ci/security-native-fixture.sh
- name: Install checksum-pinned native test modules
run: |
# Keep fixtures in a trusted tree and resolve their verified releases
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/pr-quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,9 @@ jobs:
id: link-check
continue-on-error: true
uses: lycheeverse/lychee-action@v2
env:
# Use authenticated API checks instead of anonymous GitHub page requests.
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
output: target/link-check/report.md
# Product Hunt denies GitHub-hosted runners (403) for the translated
Expand Down
91 changes: 91 additions & 0 deletions .github/workflows/security-native.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# Released-artifact integration checks: the fixture loads the published
# archive through the compiled registry digest (see security-native-fixture.sh).
name: Security Native

on:
pull_request:
branches: [main, release]
paths:
- .github/workflows/security-native.yml
- .gitmodules
- vendor/tinysecurity
- crates/openhuman-core/src/modules/security*.rs
- crates/openhuman-core/src/modules/registry/records_security.rs
- crates/openhuman-core/src/security/policy/**
- scripts/ci/security-native-fixture.sh
- Cargo.lock
workflow_dispatch: {}

permissions:
actions: read
contents: read

concurrency:
group: security-native-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
native:
name: Native policy (${{ matrix.os }})
strategy:
fail-fast: false
matrix:
os: [ubuntu-24.04, macos-15, windows-2025]
runs-on: ${{ matrix.os }}
timeout-minutes: 60
env:
CARGO_BUILD_JOBS: "2"
GH_TOKEN: ${{ github.token }}
steps:
- uses: actions/checkout@v7
with:
persist-credentials: false
submodules: recursive
- name: Install Linux inference prerequisites
if: runner.os == 'Linux'
run: sudo apt-get update && sudo apt-get install -y libasound2-dev pkg-config
- uses: Swatinem/rust-cache@v2
with:
workspaces: . -> target
key: security-native-${{ runner.os }}
- name: Exercise attested adapter and latency budget
shell: bash
run: bash scripts/ci/security-native-fixture.sh

latency-budget:
name: Release latency budget
runs-on: ubuntu-24.04
timeout-minutes: 90
env:
CARGO_BUILD_JOBS: "2"
GH_TOKEN: ${{ github.token }}
OPENHUMAN_SECURITY_PERF_BUDGET: "1"
OPENHUMAN_SECURITY_PERF_OUT: ${{ github.workspace }}/target/security-perf.json
steps:
- uses: actions/checkout@v7
with:
persist-credentials: false
submodules: recursive
- name: Install Linux inference prerequisites
run: sudo apt-get update && sudo apt-get install -y libasound2-dev pkg-config
- uses: Swatinem/rust-cache@v2
with:
workspaces: . -> target
key: security-native-latency-${{ runner.os }}
- name: Fail when native p50/p99 exceed the committed budget
shell: bash
run: bash scripts/ci/security-native-fixture.sh
- name: Record measured latency and calls per turn
if: always()
shell: bash
run: |
if [ -f "$OPENHUMAN_SECURITY_PERF_OUT" ]; then
cat "$OPENHUMAN_SECURITY_PERF_OUT"
{ echo '### Native security latency'; echo '```json'; cat "$OPENHUMAN_SECURITY_PERF_OUT"; echo; echo '```'; } >> "$GITHUB_STEP_SUMMARY"
fi
- uses: actions/upload-artifact@v4
if: always()
with:
name: security-perf
path: target/security-perf.json
if-no-files-found: ignore
38 changes: 38 additions & 0 deletions .github/workflows/test-reusable.yml
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,44 @@ jobs:
hosting::test::released_artifact_serves_providers_and_confidential_local_preparation \
-- --exact --ignored --test-threads=1

security-characterization:
if: inputs.run_rust_core
name: Security characterization (${{ matrix.os }})
strategy:
fail-fast: false
matrix:
os: [ubuntu-24.04, macos-15, windows-2025]
runs-on: ${{ matrix.os }}
timeout-minutes: 60
env:
CARGO_BUILD_JOBS: "2"
CARGO_PROFILE_DEV_DEBUG: line-tables-only
steps:
- uses: actions/checkout@v7
with:
ref: ${{ inputs.ref }}
persist-credentials: false
submodules: recursive
- name: Install Linux inference test prerequisites
if: runner.os == 'Linux'
run: sudo apt-get update && sudo apt-get install -y libasound2-dev pkg-config
- uses: Swatinem/rust-cache@v2
with:
workspaces: . -> target
key: security-characterization-${{ runner.os }}
- name: Pin current security wire and redaction behavior
shell: bash
run: bash scripts/ci-cancel-aware.sh cargo test -p openhuman-cli --no-default-features --test security_characterization_e2e
- name: Exercise private redactors with the shared corpus
shell: bash
run: bash scripts/ci-cancel-aware.sh cargo test -p openhuman --no-default-features --features inference,web3,modules shared_security -- --nocapture
- name: Exercise attested native security adapter and latency budget
shell: bash
run: bash scripts/ci/security-native-fixture.sh
- name: Record existing in-process latency baseline
shell: bash
run: bash scripts/ci-cancel-aware.sh cargo test -p openhuman-cli --no-default-features --test security_characterization_e2e in_process_policy_latency_baseline -- --nocapture

rust-core-tests-windows:
if: inputs.run_rust_core
name: Rust Core Tests (Windows — secrets ACL)
Expand Down
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,6 @@
[submodule "vendor/tinymemes"]
path = vendor/tinymemes
url = https://github.com/tinyhumansai/tinymemes.git
[submodule "vendor/tinysecurity"]
path = vendor/tinysecurity
url = https://github.com/tinyhumansai/tinysecurity
24 changes: 24 additions & 0 deletions .sdd-approval-task.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Owner Task7 — durable approvals and exact scoped grants
Dispatch after controller marks Task6 full review+gates clean. Own vendor/tinysecurity existing security-complete-7328 ONLY, ONE cumulative PR5. Record actual BASE before edits. Read ownerAGENTS, owner security-module spec approvals, HOST .sdd-approval-audit-acceptance.md and Task6 final public V2 contracts/nativefixture. Do not read wholeplan. Not alone preserve checkpoints/others; no nestedworktree/push/newPR/release/rootpins/reset/amend/squash. Controller finalreview/release follows allremainingengines.

New internal tinysecurity-approval crate focused state/store/grants/reply, siblingtests; bus approval.rs promote real implemented contracts keeping reserved strictpayload compatibility via explicit additive V2 shapes/interfaces where required; module actual dispatch/manifest/init/approvalintercept/nativefixture; workspace/internalumbrella/CI. Host normaldeps only tinysecurity-bus, bus serde+thiserror no I/O/runtime/transport/crypto/TinyTools. No hostengine or parkingfuture copiedinto owner. Mutable approvals not cacheable.

Reuse completed Task6 typed exact scoped CAS/load receipt validators plus redactor/audit/trustedpeer gate; implement the bounded authenticated ApprovalStoreClient load/CAS transport now (Task6 module currently has AuditClient only, no implemented store client). Persist pending durably BEFORE RequireApproval; every transition records exact scope/policygeneration/fingerprint/origin and returns only after confirmedCAS/audit phase. Failed callback/timeout/malformed/wrongpeer/wrongreceipt unavailable denies beforeexecution. Timeout indeterminate, retry SAME mutationidentity/reconcile persistedstate, no false rollback/repeatedwrite. No locks across callback await, reentrant Decide and concurrent waits must progress.

Full subject is verified user/workspace/agent ceiling from trusted host init + peer/contextadapter, not invocationJSON human/tenant/tier. Unique brokerconnection != authenticated human. Decide requires explicit trustedhost-authenticated human authority bound to exactowner/pendingrow/currentpolicy/origin. ModelParseReply parses intent ONLY never grants; none/unknown/unverifiedauthority deny. Legacy omitted agent_id processRPC projection remains hostcompatibility at authenticated boundary, never crossagentprivileges insideengine. Changed/disconnected peers cannot replace trustedidentity using wellknownname.

Record stable random requestid, exact ORIGINAL canonical callfingerprint (not redacted equivalent), immutable subject/policyid+generation, tool/class/argsfingerprint/origin/thread/flow/agent, created/expiry ms, lifecycle+attribution+terminaloutcome. Redacted args/summary/source correlation persisted/logged; no original secrets Debug/errors/events. Safe oldrecordimport: preserve history but never revive legacybroad grants lacking exact bindings. Do not advertise fullycomposedPolicyId until Task2; use strict currentimmutable scopes and later mechanicalcomposition hook, never pretend partialscope complete.

State pending→humanapproved/denied/expired/cancelled→execution terminal only for exactapproved action. CAS firstwinner, repeatedidenticaldecide receipt idempotent, conflictingdecision reject, terminalfirstwinner, cannot execute denied/expired/pending or alteredfingerprint. Restart reload durablerows/grants but orphan rows never execute in new hostsession automatically. TTL600default,180copilot/subagent calleronlyshortens; exactboundary denies; injectedclock rollbackfailclosed. Durable scope captured before cancellation to prevent ambienttenantmixing.

Allowonce singleexecutionreservation/consume; alwaysfortool persistent EXACTreviewedtool/class/fingerprint/scope/origin/currentpolicy ceiling; flowgrants exactreviewedfingerprints+flow and policygeneration. No wildcard argument escalation. Bounded preauthorizeflow validation legacy max100tools (typedfingerprints new), duplicategrant idempotent. Policygenerationchanges invalidate affectedgrants, no selfwideningactivation/humanreviewstub. Later Task2 generationactivation consumes actual approvalunderOLDpolicy.

Origin Cron readonly only externaldeny BEFORE ANYshortcut, including auto-all; SaaS uses real authenticatedper-userpromptcallback/no unconditionalbypass, missingprompt denies. Off-default judge nextTask8, do not add fakeRequireApproval without realpendingstore/prompt. Host owns parked futures/cancellation/ApprovalRequested+Decided eventrouting; owner stateTTLlog. Preserve legacy request/source/tool_call_id/agent_id optionalomissions; no publicsession_id; terminallegacy success/failure/aborted explicittranslation to new succeeded/failed/cancelled, not silent serdechange.

TDD actualbehavior RED→GREEN beforefix with logs: pending→decide→executed/rejectedwrongfingerprint, expiry600/180exactboundaries+clockrollback, restart/noorphanexecution, CAS concurrenthuman decisions/idempotence/conflictingreplay/terminalfirstwinner, wrongtenant/agent/origin/policygen grantsdeny, argumentschangeddeny, callbackfailure/malformedreceipt/scope, parsingnotauthority, Cronautoallowcannotbypass, SaaSmissingperuserpromptdeny, reentrantcallback no deadlock, nativecancel/expired eventsprojection. Real loadedcdylib hostcallbacks restart-surviving approvalroundtrip exactpersist/audit receipts; malicioussecondpeer and no-provenance oldhost denies. No thirdpartynet/timingflakes/operatorcredentials.

Sibling *_tests.rs start use super::*; declaration cfg/path; noinline/legacyfilename. Nativefixtureexplicit pipeline no silentlyignoredacceptance. Docs accurate implementedavailability. Selfreview stableatomiccheckpoint then FULL actualBASE..HEAD diff FILE HOST .sdd-evidence/task7-full.diff early for independentSPEC+QUALITY; subsequentfixrefresh entireoriginalrange. ALLfreshfmt/+1.99strictclippy/default+allworkspace/alltargetbuild/+1.88check/-Dwarningdocs/deny/actualperfile90/nativeLinuxworkspace+alternatecwd and realnative3OSCIwiring. Longcommands HOSTscripts/ci-cancel-aware.sh no CARGO_TARGET_DIR/tmpbuildoutput; evidence HOST/OWNER .sdd-evidence nottarget. Exact BASE/HEAD/commands/exits/REDGREENlimitations. RemainingTask8/9/10/2/wholeownerreview+release/hostmigration NOTcompletionclaimed.

Read HOST .sdd-evidence/full-policy-composition-preflight.md exact Task7-specific caveats: existing audited-permission digest hashes [request,decision] and arguments_json is a string, not stable canonical original-call identity. Add separate call-only domain, parse/sort bounded actual argument JSON, preserve significant array/header/shell ordering; include exact verified scope/policygen/origin/thread/flow/execution instance. Do not reuse old digest unchanged or globally dedup identical text. Single-row CAS does not make approval consume plus later policy activation a multi-store transaction; define reconciliation hooks for Task2 exact old-policy activation, no fake atomic promise.

Additional required read: HOST .sdd-evidence/task7-approval-interface-preflight.md exact current callback fingerprint validator requires32hex whereas existing audit digest64hex +decision. Use an explicitly versioned full-digest row or preserve32hex correlation with full cryptographic callbinding inside validated typed row; never silently truncate authority fingerprint. Human authority requires exact host-authenticated decision verification/ticket consumption bound to pendingrequest/scope/gen/origin, not uniquepeer or invocationJSON human field. Store CAS retries must recover original durable mutation receipt even after later row versions, not treat timeout asrollback. Real native persistent-store restart fixture required, current MemoryBus rows alone insufficient.
5 changes: 5 additions & 0 deletions .sdd-audit-manifest-fix.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Task6 fresh review batch: native manifest completeness
Work only /home/enamakel/work/openhuman/worktrees/security-bus-7328/vendor/tinysecurity on existing security-complete-7328. Role tdd-implementer. One cumulative PR5; no new PR/push/release/gitlink changes. You are not alone; preserve all others/checkpoints. No reset/amend/squash. Source ownership begins only after root confirms prior writer release. Record BASE actual HEAD; full Task6 ORIGINAL BASE87d909f6eaaa5500838efc3afc0470052baaff46.
Read owner AGENTS, HOST .sdd-evidence/task6-review-99f78737.md Important1 and .sdd-approval-audit-acceptance.md binding manifest requirement. Fix complete ONE review batch: exported module manifest omits implemented EvaluateAudited2 and CheckAudited2 although dispatch/names/PolicyInfo advertise them; optional inventory omits implemented AuditSink2 dependency. Advertise only implemented callback forwarding, not unfinished approval/store/prompt capabilities. Verify exact contract name/version/min-version against actual SDK metadata and existing implemented callbacks/forwarding interface.
Write genuine regression first: inspect actual loaded native artifact manifest and assert served method inventory agrees with real audited permission APIs and actual optional callback dependency. Confirm fails against unchanged source before minimal manifest-only behavior fix; no test just mirrors a hand-copied manifest list without testing loaded artifact. Existing actual loaded cdylib fixture should be used. Preserve immutable artifact hashes/actual runtime bind checks. Native Linux loaded fixture BOTH working directories via HOST scripts/ci-cancel-aware.sh; no temp build output/CARGO_TARGET_DIR. Sibling *_tests.rs no inline tests. All logs/evidence .sdd-evidence not target.
Do not touch current foreign account helper/Windows ACL/other audit source except regression placement needed. Current c494 encoding fix nativeCI pending; root will HOLD later pushes until exactc494 evidence captured. Root handles PR. Finish fresh fmt/strict clippy/relevant native tests/docs/deny/MSRV1.88 and provide direct exit evidence; do not infer gate from shell chained last exit. Provide exact BASE..HEAD narrow diff FILE .sdd-evidence/task6-manifest-fix.diff and refresh full ORIGINAL87..final FILE task6-full.diff; self-review, clean exact checkpoint, no pending commands, SOURCEOWNERSHIP RELEASE. Independent SPEC+QUALITY reviewer follows and genuine native3OS on combined final branch before Task6DONE. Remaining approvals/judge/sandbox/crypto/fullpolicy/host migration still required.
Loading
Loading