zdd-1-generations
Zero-downtime deploys, plan 1 of 6: generations (dormant).
Every activator spawn takes a process-wide generation number and returns a handle. With the switch on, each generation binds its own bounded socket (/run/carlos/g/<h12>.<n>.sock, or app.<n>.sock in the nested layout). The edge proxy, scheduled delivery, the next-due probe and the status probe all reach the current generation through AppSocket. Edge idle pools are per socket and close when a generation retires. A retired generation's pool is never recreated. Cache entries are tagged with the serving route and generation. X-Carlos-Version comes from the serving generation. For processes outside the agent, the canonical socket path is a symlink to the current generation (spec rev 15 §7.1). swapCanonicalLink is the helper plan 3 calls at the switch.
Dormant: nothing on this branch calls activator.SetGenerations, and every path checks the Service's switch. Flag-off tests pin socket paths, argv, env, the proxy, the version header and the cache as they are today. Plan 5 wires CARLOS_SWAP.
Review:
- Each task had a Sonnet review.
- Astra's whole-branch review: round 1 was ACCEPT WITH FIXES, with one latent pool leak, fixed in eb942159. Round 2 was ACCEPT. Both are in docs/superpowers/plans/CODEX-FINDINGS-ZDD-IMPL-1*.md.
Spec: docs/superpowers/specs/2026-10-07-zero-downtime-deploys-design.md (rev 17) §7.1, §7.2, on the design-zero-downtime-deploys branch. Plan: docs/superpowers/plans/2026-10-07-zero-downtime-deploys-1-generations.md (same branch).
Not merged. Merging is Paul's call: amadan branch merge carlos/platform zdd-1-generations -squash -expect <sha>, once CI is green.
Discussions
- No discussions on this branch yet.
Tasks
- No tasks yet.
Activity
- claude agent, operated by paul@keymail.dev pushed 98d098671 zdd plan 1: Astra final review findings (r1 ACCEPT WITH FIXES, r2 ACCEPT)
- claude agent, operated by paul@keymail.dev pushed eb9421595 zdd plan 1 final review fix: a retired generation's pool is never recreated
- claude agent, operated by paul@keymail.dev pushed c8dbe3deb zdd plan 1 task 8: scheduled delivery and the status probe follow AppSocket
- claude agent, operated by paul@keymail.dev pushed 5ee624339 zdd plan 1 task 7: cache entries tagged with serving route and generation
- claude agent, operated by paul@keymail.dev pushed 9b3c3759d zdd plan 1 task 6: edge proxies managed routes through the current generation
- claude agent, operated by paul@keymail.dev pushed a014ebdd9 zdd plan 1 task 5: per-connection AppSocket dial and per-generation idle pools
- claude agent, operated by paul@keymail.dev pushed 43e325ad1 zdd plan 1 task 4: the canonical socket path is a symlink to the current generation
- claude agent, operated by paul@keymail.dev pushed b98eed71b zdd plan 1 task 3: the activator holds generation handles and answers AppSocket
- claude agent, operated by paul@keymail.dev pushed a744e0c8b zdd plan 1 task 2: exec backend spawns a generation on its own socket
- claude agent, operated by paul@keymail.dev pushed bd5bcb50b zdd plan 1 task 1: generation counter, Gen and bounded generation socket paths