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
87c5eead65
build(orchestrator): pin FastAPI runtime dependencies
2026-07-27 04:16:56 +00:00
didericis-codex
6e46a9b191
fix(orchestrator): satisfy adapter type contracts
prd-number-check / require-numbered-prds (pull_request) Successful in 12s
lint / lint (push) Successful in 53s
test / image-input-builds (pull_request) Successful in 1m2s
test / integration-docker (pull_request) Successful in 58s
test / unit (pull_request) Successful in 46s
test / coverage (pull_request) Successful in 21s
tracker-policy-pr / check-pr (pull_request) Failing after 7s
2026-07-27 02:19:11 +00:00
didericis-codex
b8818948a0
feat(firecracker): enumerate running bottles
2026-07-27 02:19:11 +00:00
didericis-codex
b09952045a
fix(orchestrator): bound unauthenticated HTTP requests
2026-07-27 02:19:11 +00:00
didericis-codex
de192359ee
fix(security): authenticate persisted egress secrets
2026-07-27 02:19:11 +00:00
didericis-codex
7d9933edc0
fix(docker): fail closed on network address scan errors
2026-07-27 02:19:11 +00:00
didericis-codex
2bc9ef8ec0
fix(firecracker): abort cleanup on scan errors
2026-07-27 02:19:11 +00:00
didericis-codex
47b6bead69
refactor(backend): type enumeration failures
2026-07-27 02:19:11 +00:00
didericis-codex
15ecada022
fix(docker): surface enumeration failures
2026-07-27 02:19:11 +00:00
didericis-codex
e2222bd96b
fix(security): prohibit unauthenticated orchestrator
2026-07-27 02:19:11 +00:00
didericis-claude
ed9fc76f97
fix(docker): only heal on the ParseAddr poison signature, not any inspect error
...
prd-number-check / require-numbered-prds (pull_request) Successful in 5s
test / unit (pull_request) Successful in 50s
tracker-policy-pr / check-pr (pull_request) Successful in 6s
test / image-input-builds (pull_request) Successful in 59s
test / integration-docker (pull_request) Successful in 1m6s
test / coverage (pull_request) Successful in 42s
Update Quality Badges / update-badges (push) Successful in 49s
lint / lint (push) Successful in 1m2s
test / coverage (push) Successful in 24s
test / integration-docker (push) Successful in 1m3s
test / unit (push) Successful in 48s
test / image-input-builds (push) Successful in 2m44s
Address review: the self-heal classified every non-absence `network inspect`
failure as a poisoned network and force-removed the shared gateway. But
inspect also fails on transient daemon/API errors, permission failures,
timeouts, or a bad context — destroying a healthy gateway on that guess would
tear the network out from under every live bottle.
Now the destructive path runs only for the known poison signature (docker's
`ParseAddr` error from the malformed `::1/64` IPv6 gateway). The absent case
(`No such network`) still just creates; any other inspect failure raises a
clear GatewayError without mutating shared state.
Adds a regression test asserting a generic inspect error issues neither
`docker rm --force` nor `docker network rm` and surfaces the error.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-27 01:41:09 +00:00
didericis-claude
bd8a146a46
fix(docker): heal a poisoned IPv6 gateway network, not just avoid creating one
...
test / integration-docker (pull_request) Successful in 1m15s
test / image-input-builds (pull_request) Successful in 1m14s
lint / lint (push) Successful in 3m28s
tracker-policy-pr / check-pr (pull_request) Failing after 10m28s
test / unit (pull_request) Failing after 10m39s
prd-number-check / require-numbered-prds (pull_request) Failing after 10m45s
test / coverage (pull_request) Has been skipped
PR #515 stopped bot-bottle from *creating* a gateway network with a
malformed IPv6 subnet (--ipv6=false), but it can't recover a network that
is *already* poisoned. On a daemon that default-enables IPv6, the fixed-name
`bot-bottle-gateway` network gets an `fdd0::/64` subnet whose `::1/64`
gateway trips docker's own netip.ParseAddr, so `docker network inspect`/`ls`
exit non-zero — poisoning every command that reads networks.
Such a network can survive on a shared runner from a pre-fix or concurrent
launch. `_ensure_network` never healed it: its migrate/recreate branch only
ran when `network inspect` *succeeded*, but a poisoned network makes inspect
*fail*, so the code fell through to `network create`, which no-ops on
"already exists" — leaving the poison in place. The next subnet read then
failed with ConsolidatedLaunchError (test_multitenant_isolation), and a bare
`docker network ls` failed too (test_orphan_cleanup).
Fix, two parts:
- gateway.py: when `network inspect` fails for a reason other than "no such
network", treat the network as poisoned and force-remove + recreate it
IPv4-only. Absent-vs-poisoned is distinguished by the inspect stderr.
- test.yml: add an integration-docker preflight that drops the leftover
gateway network (and its container) before the suite, so direct `network
ls`/`inspect` calls in tests are clean even on a daemon where the in-code
heal can't run because inspect itself is what's broken.
Adds unit coverage for the poisoned-heal and the absent-create split.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-27 01:23:25 +00:00
didericis-claude
85fb6b0c98
fix(docker): disable IPv6 on the gateway network
...
test / coverage (push) Blocked by required conditions
test / unit (push) Successful in 55s
lint / lint (push) Successful in 1m5s
test / image-input-builds (push) Successful in 1m8s
test / integration-docker (push) Has been cancelled
Update Quality Badges / update-badges (push) Failing after 10m53s
On a docker daemon that default-enables IPv6 (default-address-pools),
creating the gateway network with only `--subnet` lets the daemon also
attach an fdd0::/64 IPv6 subnet. Its gateway is stored as `::1/64`,
which trips docker's own netip.ParseAddr in `network inspect`/`ls`:
ParseAddr("fdd0:0:0:6::1/64"): unexpected character, want colon
That poisons every `_network_cidr`/`network ls` read and fails the
docker integration suite intermittently (whichever run the runner's
IPv6 pool index lands on a broken network). bot-bottle attribution
pins IPv4 source IPs and has no IPv6 support, so pass `--ipv6=false`
explicitly at network create to keep the gateway network IPv4-only
regardless of the daemon default.
Note: an already-poisoned runner still needs a one-time
`docker network rm bot-bottle-gateway` (and possibly a daemon
restart) to clear the malformed network.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-26 18:33:48 -04:00
didericis-codex
902286dbc0
fix(build): key nested images by base content
refresh-image-locks / refresh (push) Successful in 36s
lint / lint (push) Successful in 1m2s
test / image-input-builds (push) Successful in 1m6s
test / integration-docker (push) Successful in 1m12s
Update Quality Badges / update-badges (push) Successful in 56s
test / unit (push) Successful in 2m19s
test / coverage (push) Successful in 15s
2026-07-26 17:30:36 -04:00
didericis-codex
73c566f3ff
fix(build): close remaining mutable image inputs
2026-07-26 17:30:36 -04:00
didericis-codex
33b7bcd082
build: centralize pinned base image arguments
2026-07-26 17:30:36 -04:00
didericis-codex
9e83ff1992
test: cover image input policy failure paths
2026-07-26 17:30:36 -04:00
didericis-codex
1d10595e5c
build: make pinned image inputs portable
2026-07-26 17:30:36 -04:00
didericis-codex
ff355f81de
test: narrow pinned base match for type checking
2026-07-26 17:30:36 -04:00
didericis-codex
e607af73ab
test: assert reproducible provider image inputs
2026-07-26 17:30:36 -04:00
didericis-codex
5083b45f42
ci: reject mutable image build inputs
2026-07-26 17:30:36 -04:00
didericis-codex
24aeba9676
build: freeze operating system package inputs
2026-07-26 17:30:36 -04:00
didericis-codex
10d295eaf6
build: pin and verify image inputs
2026-07-26 17:30:36 -04:00
didericis-claude
72165b5db5
fix(git-gate): reject AGit review refs in pre-receive
...
tracker-policy-pr / check-pr (pull_request) Successful in 12s
test / unit (pull_request) Successful in 54s
test / integration-docker (pull_request) Successful in 1m9s
test / coverage (pull_request) Successful in 17s
prd-number-check / require-numbered-prds (pull_request) Successful in 8s
test / unit (push) Successful in 54s
Update Quality Badges / update-badges (push) Successful in 54s
lint / lint (push) Successful in 1m4s
test / integration-docker (push) Successful in 1m9s
test / coverage (push) Successful in 38s
Gitea AGit accepts pushes to refs/for/*, refs/draft/*, and
refs/for-review/* and opens pull requests backed by server-managed
refs/pull/<n>/head refs rather than ordinary refs/heads/* branches.
That breaks the git-gate branch workflow: follow-up commits can't be
pushed back through the branch, and Gitea rejects later direct updates
to the generated review ref, so recovery means recreating the PR.
Add a Phase 0 guard to the shared pre-receive hook that rejects
creation or update of those AGit review refs before any gitleaks scan
or upstream forward, with a message pointing callers at the
branch-backed PR workflow. Deletions (new == zero) stay allowed so
legacy AGit refs can still be cleaned up; normal branches and tags are
untouched.
Closes #506
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-26 17:59:21 +00:00
didericis-codex
1827593b89
test(docker): authenticate multitenant egress probes
prd-number-check / require-numbered-prds (pull_request) Successful in 9s
test / unit (pull_request) Successful in 53s
test / integration-docker (pull_request) Successful in 1m7s
test / coverage (pull_request) Successful in 17s
tracker-policy-pr / check-pr (pull_request) Successful in 32s
test / unit (push) Successful in 57s
lint / lint (push) Successful in 1m4s
test / integration-docker (push) Successful in 1m11s
test / coverage (push) Successful in 21s
Update Quality Badges / update-badges (push) Successful in 56s
2026-07-26 08:41:00 +00:00
didericis-codex
73e70e326c
test(docker): wait for multitenant probe readiness
prd-number-check / require-numbered-prds (pull_request) Successful in 6s
tracker-policy-pr / check-pr (pull_request) Successful in 26s
test / unit (pull_request) Successful in 49s
lint / lint (push) Successful in 59s
test / integration-docker (pull_request) Failing after 1m1s
test / coverage (pull_request) Has been skipped
2026-07-26 08:38:16 +00:00
didericis-codex
d744bec7b1
fix(docker): configure the attributed gateway subnet
tracker-policy-pr / check-pr (pull_request) Successful in 12s
prd-number-check / require-numbered-prds (pull_request) Successful in 42s
lint / lint (push) Successful in 1m4s
test / unit (pull_request) Successful in 57s
test / integration-docker (pull_request) Failing after 1m5s
test / coverage (pull_request) Has been skipped
2026-07-26 08:35:37 +00:00
didericis-codex
f3fbfb3cc3
fix(ci): join control planes to the runner network
prd-number-check / require-numbered-prds (pull_request) Successful in 13s
tracker-policy-pr / check-pr (pull_request) Successful in 8s
test / integration-docker (pull_request) Failing after 35s
test / unit (pull_request) Successful in 52s
test / coverage (pull_request) Has been skipped
lint / lint (push) Successful in 1m7s
2026-07-26 08:30:57 +00:00
didericis-codex
b2245ae1f3
test(orchestrator): make wrong-key coverage deterministic
2026-07-26 08:30:57 +00:00
didericis-codex
1022247ce5
test(ci): cover assurance gate entry points
prd-number-check / require-numbered-prds (pull_request) Successful in 7s
tracker-policy-pr / check-pr (pull_request) Successful in 8s
lint / lint (push) Successful in 58s
test / unit (pull_request) Successful in 48s
test / integration-docker (pull_request) Failing after 19m28s
test / coverage (pull_request) Has been skipped
2026-07-26 08:14:00 +00:00
didericis-codex
671d91070e
docs(ci): document the assurance topology
2026-07-26 08:02:12 +00:00
didericis-codex
1c6d30ffd8
test(canary): verify the pinned gitleaks release
2026-07-26 08:01:07 +00:00
didericis-codex
583ff98b27
ci(docker): require the full integration suite
2026-07-26 08:00:15 +00:00
didericis-codex
fafb828bb7
ci(coverage): enforce the critical core contract
2026-07-26 07:50:44 +00:00
didericis-codex
7488110e71
chore: tighten upkeep boundaries and static checks
prd-number-check / require-numbered-prds (pull_request) Successful in 8s
test / integration-docker (pull_request) Successful in 12s
test / unit (pull_request) Successful in 49s
test / coverage (pull_request) Successful in 15s
tracker-policy-pr / check-pr (pull_request) Successful in 5s
test / integration-docker (push) Successful in 13s
test / unit (push) Successful in 48s
lint / lint (push) Successful in 56s
Update Quality Badges / update-badges (push) Successful in 50s
test / coverage (push) Successful in 13s
2026-07-26 06:55:49 +00:00
didericis-codex
22dde95561
fix(diagnostics): make optional failures observable and safe
2026-07-26 06:55:49 +00:00
didericis-codex
e29b79d517
refactor(backend): extract shared bottle preparation planner
2026-07-26 06:55:49 +00:00
didericis-codex
1d85acfd99
refactor(egress): make addon core a compatibility facade
2026-07-26 06:55:49 +00:00
didericis-codex
90defdc9cd
refactor(egress): separate matching, DLP, and context concerns
2026-07-26 06:55:49 +00:00
didericis-codex
2039ef635f
refactor: validate reconciliation inputs and neutralize CLI helpers
2026-07-26 06:55:49 +00:00
didericis-codex
c0493f0b01
ci(tracker): require one metadata owner per pull request
2026-07-26 02:54:56 -04:00
didericis-codex
5828f5e900
ci(tracker): allow labelled standalone pull requests
2026-07-26 02:54:56 -04:00
didericis-codex
d3370a88bb
ci(prd): require manual numbering before merge
prd-number-check / require-numbered-prds (pull_request) Successful in 10s
tracker-policy-pr / check-pr (pull_request) Successful in 14s
test / unit (pull_request) Successful in 54s
test / integration-docker (pull_request) Successful in 54s
test / coverage (pull_request) Successful in 18s
test / integration-docker (push) Successful in 16s
test / unit (push) Successful in 50s
lint / lint (push) Successful in 1m0s
test / coverage (push) Successful in 15s
Update Quality Badges / update-badges (push) Successful in 4m1s
2026-07-26 02:33:14 -04:00
didericis-codex
9c06702b32
docs(prd): number merged placeholder documents
prd-number / assign-numbers (push) Failing after 25s
lint / lint (push) Successful in 4m7s
Update Quality Badges / update-badges (push) Failing after 13m37s
test / coverage (push) Has been skipped
test / integration-docker (push) Failing after 13m51s
test / integration-firecracker (push) Failing after 13m48s
test / integration-macos (push) Failing after 13m54s
test / unit (push) Failing after 13m53s
test / publish-infra (push) Has been skipped
2026-07-26 06:06:04 +00:00