Skip to content

Implement triad process architecture - #135

Draft
josh-richardson wants to merge 169 commits into
masterfrom
triad-architecture
Draft

Implement triad process architecture#135
josh-richardson wants to merge 169 commits into
masterfrom
triad-architecture

Conversation

@josh-richardson

@josh-richardson josh-richardson commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

What changed

  • implements the Machine/Broker/Signer protocol and process boundaries
  • adds ceremony, custody, policy-update, revocation, trusted-time, audit-checkpoint, and release packaging behavior
  • extracts Broker and Signer into independently versioned public repositories:
  • adds Linux principal isolation and fail-closed release/installer gates
  • implements the root-requiring macOS Unix-principal profile with hidden service accounts, LaunchDaemons, authenticated Unix RPC, UID-scoped packet filtering, transactional enrollment/upgrades/config and identity rotation, recoverable uninstall, and retain/restore custody
  • preserves the rootless macOS architecture as an explicit future profile; no App-Group production claim is enabled

Why

The triad architecture moves authorization and custody out of the Machine process, removes direct/hash-only signing paths, and makes process, protocol, replay, audit, packaging, and operating-system isolation boundaries testable.

Validation

Local validation passed after merging the current default branch:

  • cargo fmt --all -- --check
  • cargo check --workspace --all-targets --locked
  • cargo clippy --workspace --all-targets --locked -- -D warnings
  • cargo test --workspace --locked
  • shell syntax and ShellCheck for the macOS installer and W0 harness

The non-privileged Linux W0 and macOS listener-retry CI lanes pass. The production macos-unix-principals claim remains deliberately disabled until the privileged destructive W0 workflow runs after this workflow is available on the default branch and its conformance evidence is recorded.

Checklist

  • Tests added or updated for behavior changes
  • Architecture docs (docs/architecture/) updated if contracts or behavior changed
  • Sealed Approval invariants respected (no signing outside a grant or bounded capability, no PRF/grant persistence, execution from sealed bytes) — see docs/architecture/Sealed Approvals.md
  • Agent Documentation updated — N/A: this changes triad custody/packaging and host isolation, not VFS agent-facing behavior or Petal interfaces

Related-Broker: 6e3985b
Related-Signer: 5c09a6a
Related-Signer: 5c09a6a

Related-Broker: ac7ef23
Related-Broker: ac7ef23

Related-Signer: 2fe667a
Related broker: 0bf0e81

Related signer: 2fe667a
Protocol 0bd5a9c; Signer 94170be; Broker 88cde7c.
Route Machine custody preparation through the authenticated Broker client, retire secret-bearing CLI and IPC surfaces, remove production Machine ceremony ownership, and fail closed for legacy signing and policy paths.\n\nCounterparts: bloom-broker 7715f62; bloom-signer efc9d5d.
Persist owner-readable ceremony projections, use the shared status/cancel/result surface, and implement Option A policy update prepare and receipt-only commit without adding RPC methods. The legacy direct policy-signing command remains absent.\n\nCompatible with Broker checkpoint 634ebbc and Signer checkpoint 89c691e.
Move durable ceremony and Option A policy orchestration onto the production bloom-machine binary, reconcile every structured and raw ceremony response before output, and enforce a keyless production dependency graph.\n\nCompatible with Broker checkpoint 634ebbc and Signer checkpoint 89c691e.
Restore the PrivateKeySigner import for legacy transaction test helpers while keeping it absent from production builds.
Related Broker checkpoint: 634ebbc
Related Signer checkpoint: 89c691e

Policy update and other generic custody workflows now require SUCCEEDED while wallet registration alone retains COMPLETED, per section 13.6.
Bind confirm, replace, and cancel signing to the exact unsigned transaction preimage, durable approval identity, and installer provenance catalog. Recover ambiguous completed signing operations by status before consulting exhausted approvals.

Cross-repo context: bloom-broker 1a6a5b1; bloom-signer bcc607b.
Implement Option A policy custody from the canonical VFS projection. Persist operation identity before prepare, reconcile shared ceremony state across restart and response loss, and permit commit only through the completed custody receipt.

Broker: 3b18a99

Signer: bcc607b
Moves real-chain confirm and replacement coverage onto the payload-bearing Machine-to-Broker contract, verifies the retired owner-session hash-only route fails closed without broadcast, and rejects the wrong effective UID before application authentication. Replacement ceremonies now supersede only completed prior exact-operation projections. This is partial W8 evidence; distinct-principal packaging remains a separate release gate.\n\nBroker boundary and revocation: f8c9900\nSigner boundary: 9995be8
Removes every ignored-test attribute. Local integration tests now run by default; credential, mount, and live-network tests self-skip behind explicit environment gates when their external prerequisite is absent. No test is hidden from cargo test discovery.
Add bounded listener diagnostics, launchd handover/retry conformance, non-transitive macOS sandbox groups, and fail-closed packaging sources for AC-31.

Broker listener implementation and cross-UID evidence: bloom-broker 79a9e6a. Signer process-boundary baseline: bloom-signer 9995be8.
Provision per-login Broker and Signer principals through systemd-owned named sockets, non-transitive ACL groups, private state roots, hardened services, and explicit AWS KMS egress rendering. Add static and privileged UID-isolation evidence while keeping host mutation confined to disposable Linux CI.
Pin platform-managed time sources, enforce synchronized OS readings, preserve suspend-aware monotonic anchors, and document the audited operator repair contract. Broker baseline: 79a9e6a. Signer baseline: 9995be8.
Select principal-private checkpoint roots on Linux and macOS, verify pinned peer journal-head signatures, and reject rollback, conflicts, tamper, symlinks, and noncanonical storage. Broker baseline: 7f20472. Signer baseline: 41cf596.
josh-richardson and others added 30 commits August 1, 2026 05:02
# Conflicts:
#	QUICKSTART.md
#	crates/bloom-proto/src/config.rs
* fix(macos): harden enrollment and activation startup

* fix(vfs): scope projection refresh to serve lifecycle

* fix(dev): support triad VFS without NFS mount

* fix: address triad lifecycle review findings

* docs: design services-only triad launcher

* feat(dev): run triad services without Machine

* docs: explain split triad development loop
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants