Compare commits

..

10 Commits

Author SHA1 Message Date
didericis-codex b7f503be29 fix(gateway): contain output pump shutdown races
test / integration-docker (pull_request) Has been cancelled
test / image-input-builds (pull_request) Failing after 12m38s
test / unit (pull_request) Failing after 12m41s
test / coverage (pull_request) Has been skipped
tracker-policy-pr / check-pr (pull_request) Successful in 10s
2026-07-27 04:16:56 +00:00
didericis-codex 511e8b6721 fix(gateway): bound stdlib HTTP request work
test / integration-docker (pull_request) Has been cancelled
test / image-input-builds (pull_request) Successful in 44s
test / unit (pull_request) Failing after 12m24s
test / coverage (pull_request) Has been skipped
tracker-policy-pr / check-pr (pull_request) Failing after 13m51s
2026-07-27 04:16:56 +00:00
didericis-codex 3bc618c264 fix(cleanup): revalidate destructive backend plans
test / unit (pull_request) Successful in 1m5s
test / coverage (pull_request) Has been skipped
test / integration-docker (pull_request) Has been cancelled
test / image-input-builds (pull_request) Successful in 1m10s
tracker-policy-pr / check-pr (pull_request) Failing after 12m1s
2026-07-27 04:16:56 +00:00
didericis-codex f409f4bc31 refactor(supervisor): separate MCP dispatch from transport
test / integration-docker (pull_request) Has been cancelled
test / unit (pull_request) Successful in 56s
test / coverage (pull_request) Has been skipped
test / image-input-builds (pull_request) Successful in 54s
tracker-policy-pr / check-pr (pull_request) Failing after 12m4s
2026-07-27 04:16:56 +00:00
didericis-codex af0db71c26 refactor(egress): extract outbound DLP request stage
test / integration-docker (pull_request) Has been cancelled
test / image-input-builds (pull_request) Failing after 12m10s
test / unit (pull_request) Failing after 12m15s
test / coverage (pull_request) Has been skipped
tracker-policy-pr / check-pr (pull_request) Failing after 11m58s
2026-07-27 04:16:56 +00:00
didericis-codex a1b2a87c1f refactor(egress): extract request policy stages 2026-07-27 04:16:56 +00:00
didericis-codex ca1bcf0ceb fix(orchestrator): bound streamed request bodies
test / image-input-builds (pull_request) Successful in 49s
test / integration-docker (pull_request) Has been cancelled
test / unit (pull_request) Successful in 1m4s
test / coverage (pull_request) Has been skipped
tracker-policy-pr / check-pr (pull_request) Failing after 12m11s
2026-07-27 04:16:56 +00:00
didericis-codex f8f6afaf78 fix(orchestrator): keep host client dependency-free 2026-07-27 04:16:56 +00:00
didericis-codex 71f13e513e refactor(orchestrator): replace manual HTTP dispatch with FastAPI 2026-07-27 04:16:56 +00:00
didericis-codex 87c5eead65 build(orchestrator): pin FastAPI runtime dependencies 2026-07-27 04:16:56 +00:00
@@ -13,9 +13,7 @@ resource-consuming boundary revalidate the assumptions it acts on. This
finishes the focused quality work begun under #444 without broad rewrites:
cleanup cannot act on stale identities, policy introspection cannot publish a
fabricated empty policy, gateway servers bound untrusted work, and daemon
shutdown does not emit uncaught background-thread failures. Shared
control-plane storage and gateway credential provisioning also enforce their
filesystem security contract before sensitive data is written.
shutdown does not emit uncaught background-thread failures.
## Problem
@@ -56,9 +54,6 @@ misleading behavior:
11. Git smart-HTTP can retain sixteen 100 MiB request bodies concurrently,
cleanup mutations have no subprocess deadline, and Firecracker signalling
failures bypass shared mutation accounting.
12. SQLite creates the shared control-plane database before its mode is
restricted, then suppresses permission-repair failures. Gateway transports
also differ in whether copied deploy-key modes are preserved.
These are one design problem: state used to authorize deletion, replacement,
or resource allocation must be authoritative at the point of use.
@@ -96,11 +91,6 @@ or resource allocation must be authoritative at the point of use.
- Git request bodies spool to disk behind a separate heavy-work semaphore;
cleanup commands have configurable deadlines; Firecracker signalling
failures aggregate while identity-verification uncertainty still aborts.
- The shared database directory and file are private before SQLite writes any
control-plane state; an inability to enforce those modes aborts startup.
- Gateway credential directories and files receive explicit private modes
inside the gateway, independent of Docker, Apple Container, or SSH copy
semantics.
- Unit tests cover PID/path reuse, partial backend enumeration, transient
policy resolution failure, slow bodies, concurrency saturation, and stream
closure races.
@@ -163,17 +153,6 @@ The gateway output pump catches only stream-closure exceptions expected after
the supervisor closes child pipes. Other I/O failures remain visible and are
reported through the supervisor's normal diagnostic channel.
### Shared filesystem security
The common SQLite store owns database creation for every backend. It creates
the parent directory and an empty database with private modes before opening
SQLite, repairs existing modes, verifies the resulting state, and propagates
every enforcement failure. Backend launchers do not duplicate this policy.
The backend-neutral gateway provisioner likewise applies directory and file
modes after transport copies complete. This avoids relying on copy behavior
that differs among Docker, Apple Container, and Firecracker's SSH transport.
## Implementation chunks
1. Existing fail-closed security and backend enumeration fixes.
@@ -189,8 +168,6 @@ that differs among Docker, Apple Container, and Firecracker's SSH transport.
and mutation accounting, and contained Git backend process failures.
10. Disk-spooled and separately bounded Git bodies, cleanup command deadlines,
and classified Firecracker signalling failures.
11. Fail-closed shared database creation and backend-neutral gateway credential
permissions.
## Open questions