Skip to content
Merged
Show file tree
Hide file tree
Changes from 47 commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
ed8ad09
feat: add Docker daemon config renderer for network policy
Nickfost Aug 29, 2026
48509ec
feat: add Docker daemon network policy apply engine stage
Nickfost Aug 29, 2026
eb131ce
fix: make Docker network policy apply transaction safe
Nickfost Aug 29, 2026
c8848aa
fix: require safe drain and report rollback failures
Nickfost Aug 29, 2026
5ca6e04
fix: harden Docker network policy file transaction
Nickfost Aug 29, 2026
5a12d4a
fix: close Docker policy verification gaps
Nickfost Aug 29, 2026
be86098
fix: restore prior Docker policy on desired-state removal
Nickfost Aug 29, 2026
17bedc2
fix: harden Docker policy command boundaries
Nickfost Aug 29, 2026
ebfbc27
fix: preserve Docker policy file durability
Nickfost Aug 29, 2026
42775b6
fix: verify Docker policy runtime transitions
Nickfost Aug 29, 2026
eed2bec
fix: preserve Docker settings on policy removal
Nickfost Aug 29, 2026
c21a620
docs: document Docker policy rollout gates
Nickfost Aug 29, 2026
11ca1ce
fix: preserve warning health fixtures in CI
Nickfost Aug 29, 2026
88ab763
fix: preserve health operational controls
Nickfost Aug 29, 2026
e20c894
fix: validate network policy inputs before drain
Nickfost Aug 29, 2026
e789a8a
fix: verify capacity after network policy removal
Nickfost Aug 30, 2026
a0fb1a5
fix: enforce trusted network policy paths
Nickfost Aug 30, 2026
4b81478
fix: retain durable network policy recovery state
Nickfost Aug 30, 2026
e5ffbdc
fix: resume controller after failed policy drain
Nickfost Aug 30, 2026
12707b1
fix: persist interrupted policy removal state
Nickfost Aug 30, 2026
89cf008
fix: separate policy checkpoint and daemon paths
Nickfost Aug 30, 2026
e76fcae
fix: validate rendered network policy capacity
Nickfost Aug 30, 2026
82d02a0
fix: abort policy apply on daemon conflicts
Nickfost Aug 30, 2026
53b829d
fix: trust rendered policy environment paths
Nickfost Aug 30, 2026
2e1e220
fix: persist durable policy rollback recovery
Nickfost Aug 30, 2026
035c16a
fix: abort policy removal on daemon conflicts
Nickfost Aug 30, 2026
ebdb964
fix: open installer lock through trusted path
Nickfost Aug 30, 2026
1615e2d
fix: recover safe interrupted policy removal
Nickfost Aug 30, 2026
452aede
fix: reject explicit empty network policy
Nickfost Aug 30, 2026
91a25b3
fix: validate network policy transaction paths
Nickfost Aug 30, 2026
fe04f50
fix: harden network policy recovery
Nickfost Aug 30, 2026
c131467
fix: serialize network policy recovery
Nickfost Aug 30, 2026
f0eb7e5
fix: redact rendered network policy failures
Nickfost Aug 30, 2026
f08cbc0
fix: close network policy recovery gaps
Nickfost Aug 30, 2026
6aeae2e
fix: close network policy recovery lock gaps
Nickfost Aug 30, 2026
4ac9ec7
fix: harden network policy retry rollback
Nickfost Aug 30, 2026
ba6cf53
test: make daemon metadata regression portable
Nickfost Aug 30, 2026
94268a2
fix: harden network policy recovery durability
Nickfost Aug 30, 2026
37212a2
fix: harden network policy recovery ordering
Nickfost Aug 30, 2026
ed928a3
fix: harden network policy reapply consistency
Nickfost Aug 30, 2026
18070a2
fix: harden network policy rollback recovery
Nickfost Aug 30, 2026
b020855
fix: preserve network policy removal provenance
Nickfost Aug 30, 2026
9d20100
fix: harden network policy reconciliation
Nickfost Aug 30, 2026
95d8bcc
fix: bound network policy transaction inputs
Nickfost Aug 30, 2026
abf1a84
fix: complete network policy recovery validation
Nickfost Aug 30, 2026
148f0d2
fix: close network policy validation gaps
Nickfost Aug 30, 2026
777af29
fix: complete network policy validation closure
Nickfost Aug 30, 2026
78de795
fix: reject daemon paths within checkpoints
Nickfost Aug 30, 2026
3aa7fa7
fix: close network policy recovery gaps
Nickfost Aug 31, 2026
240f70b
fix: redrain before interrupted recovery fallback
Nickfost Aug 31, 2026
5db6b72
fix: parse rendered health environment safely
Nickfost Aug 31, 2026
05ca901
fix: make first-apply recovery crash consistent
Nickfost Aug 31, 2026
4fc3f98
fix: close network policy verification gaps
Nickfost Aug 31, 2026
032bed9
fix: preserve network policy trust and recovery
Nickfost Aug 31, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 20 additions & 8 deletions docs/DESIRED-STATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,9 @@ Active and drained controllers reserve their configured maximum against the pool

The Docker network policy uses IPv4 CIDR `base` values and a Docker subnet
prefix `size` no longer than `/29`, which leaves enough addresses for an
ordinary Compose network. Validation rejects malformed or overlapping pools,
allocation prefixes broader than their base, and active or drained policies with fewer subnets than
ordinary Compose network. A policy may declare at most 64 pools. Validation
rejects malformed or overlapping pools, allocation prefixes broader than their
base, and active or drained policies with fewer subnets than
`max_runners * networks_per_runner + reserve_subnets + 1`. The final subnet is reserved for the
persistent controller Compose network. Disabled controllers do not reserve
runner subnet capacity, but their retained policy must still cover the reserve
Expand All @@ -70,12 +71,23 @@ reconciliation. Once present, the policy requires current evidence naming the
selected engine and declaring `docker_network_policy_config: true`; remove the
policy before selecting an engine without that evidence.

This phase renders the policy solely for read-only health inspection. It does
not write `daemon.json`, restart Docker, create or remove networks, prune
resources, drain runners, or alter controller scale. Circuit breaking,
frequent orphan reconciliation, daemon configuration rollout, transactional
exhausted-pool recovery, and downstream-consumer label changes remain later
issue #81 slices.
This accepted phase permits the executable policy stage to apply or remove the
managed `default-address-pools` key on an isolated ordinary-CI controller only
from validated desired state. Before mutation, the stage must persist a
root-only checkpoint with prior-key provenance, acquire the shared installer
lock for serialized mutation, and drain the controller and managed runners. It
must atomically and durably write or remove only the managed key, restart
Docker, run the bounded capacity probe, resume the controller to its intended
state, and verify health against the exact candidate rendered environment.

On interruption or failure, rollback must restore the managed key and prior
rendered environment from the checkpoint, restart Docker, resume the prior
controller state, and verify prior health. A failed rollback must retain its
recovery checkpoint. Rollout requires exact-head CI and proof for the reviewed
engine and desired-state commits before any host mutation. No deployment occurs
in this PR. This scope does not create or remove networks, prune resources,
alter controller scale, change downstream-consumer labels, or authorize
application production deployment.

Managed prewarmed runners are not currently supported: `min_runners` is fixed at zero in schema, semantic validation, rendering, and preflight. This keeps idle privileged workers absent and prevents reviewed configuration from passing validation only to fail host adoption.

Expand Down
Loading