Skip to content

Receipts: the cockpit trust surface — live ledger of every governed decision#72

Merged
mdheller merged 2 commits into
mainfrom
feat/cockpit-receipts-surface
Jul 20, 2026
Merged

Receipts: the cockpit trust surface — live ledger of every governed decision#72
mdheller merged 2 commits into
mainfrom
feat/cockpit-receipts-surface

Conversation

@mdheller

Copy link
Copy Markdown
Contributor

The 5th cockpit surface (docs/cockpit-spec.md §2) and the trust differentiator: a live, verifiable ledger of every governed decision the enforcing bridge made, across all three surfaces. This is the "inspect agent intent + enforce policy" control Gartner says agentic browsers lack — made visible.

One stream, three surfaces

agent-control-bridge.py attests every decision to one evidence stream (reasoning-events.ndjson). This service reads it and unifies browser.* + iot.* + agent.* by event-type prefix.

  • scripts/bearbrowser-receipts.py — loopback read-only service: GET /receipts (filters: surface / decision / violations / since / limit), /receipts/summary, /receipts/stream (SSE live tail), /health. Loopback bind is the security boundary; no off-device egress.
  • scripts/tests/test_receipts.py — 7 receipts, 3 surfaces unified, 3 violations flagged, 4 permit / 3 deny. Live HTTP smoke verified.
  • docs/cockpit-receipts.md — design + API + how the client-vue Receipts panel consumes it.

Notes

🤖 Generated with Claude Code

mdheller added 2 commits July 19, 2026 20:48
…erned decision)

The 5th cockpit surface, and the differentiator Gartner says agentic browsers lack:
a live, verifiable ledger of every decision the enforcing bridge made across ALL
surfaces. agent-control-bridge.py attests each decision to one evidence stream
(reasoning-events.ndjson); this service reads it and unifies browser.* + iot.* +
agent.* by event-type prefix.

- scripts/bearbrowser-receipts.py: loopback read-only service —
  GET /receipts (filters: surface/decision/violations/since/limit),
  /receipts/summary (counts by surface/decision/class + violations),
  /receipts/stream (SSE live tail), /health. Loopback bind = the security boundary.
- scripts/tests/test_receipts.py: real browser+iot decisions + synthetic agent.* →
  7 receipts, 3 surfaces unified, 3 violations flagged, 4 permit / 3 deny. Live HTTP
  smoke verified.
- docs/cockpit-receipts.md: design + API + how the client-vue Receipts panel consumes it.

Reads only the local stream, serves loopback — no off-device egress. agent.* rows
appear automatically once Lane 4 (PR #71) lands (surface derived from the prefix).
Built in an isolated worktree off main; no collision with the parallel cockpit branch.
@mdheller
mdheller merged commit 0e8b386 into main Jul 20, 2026
17 checks passed
@mdheller
mdheller deleted the feat/cockpit-receipts-surface branch July 20, 2026 01:05
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.

1 participant