Skip to content
Merged
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions TASKS.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ argos cluster. That is a G0 milestone, not full P1 completion (HA / backup
| T29 | Pooler TLS Secret auto-issuance — cert-manager `Certificate` CR + AutoTLS spec + self-signed fallback | Complete | 100% | T27 | F05 | 2026-05-13. **Stage 1+2** spec + controller. **Stage 3 cert-manager kind drill** → 6/6 PASS. **Stage 4 self-signed fallback**: `PoolerAutoTLSSpec.SelfSigned` field, `applyPoolerSelfSignedCertificate` generates RSA-2048 + x509 in-process (1-year validity, 30-day renewal skew), writes `tls.crt`/`tls.key`/`ca.crt` Secret, idempotent. CEL XValidation enforces "exactly one of {issuerRef, selfSigned}". Regression test `TestPoolerAutoTLS_SelfSignedCreatesSecretAndMirrorsNotAfter` + sample CR. **Stage 5 rotation observability**: `Pooler.Status.AutoTLSClientCertNotAfter` / `AutoTLSServerCertNotAfter` mirror Certificate.status.notAfter (cert-manager path) or parsed Secret cert (self-signed path); `priority=1` additionalPrinterColumns. T29 complete. |
| T31 | G1 라이브 drill 자동화 — replica rejoin (basebackup + pg_rewind) + sync replication RPO=0 | 완료 | 90% | T27, T30 | F-G1 | 2026-05-17. `hack/smoke.sh` 에 `SMOKE_REJOIN` + `SMOKE_REJOIN_MODE` + `SMOKE_SYNC` + `SMOKE_SYNC_KILL` 4 env var + 5 함수 (`drill_rejoin`, `drill_rejoin_basebackup`, `drill_rejoin_rewind`, `drill_sync`, `drill_sync_kill`) 추가. 라이브 evidence: **B.1~B.3 RPO=0 PASS** (`commit_lsn=0/3DA43A0 == flush_lsn=0/3DA43A0`, `pg_wal_lsn_diff=0`, commit dca3fa0); **A.1 basebackup rejoin PASS** (`quickstart-shard-0-1` standby PVC delete → fresh basebackup → `streaming sync_state=async lag=0` 회복). ROADMAP G1 `Replica rejoin` + `Synchronous replication` 양쪽 `[~]→[x]` 마감. **A.2 pg_rewind 라이브 + SMOKE_FAILOVER operator-driven promotion 라이브 trigger 회귀** = 별 task (`docs/g1-ha-election-fact-fix` 영역 위임). spec/plan = `docs/superpowers/{specs,plans}/2026-05-17-g1-rejoin-sync-drill-*.md`. |
| T30 | HA bootstrap fencing race — final fix | Complete | 100% | T27 | P1/G0 | 2026-05-13. Three-layer fix shipped: (i) `supervise.IsStandby(dataDir)` skip in handleStoppedLeading; (ii) `promotedAtLeastOnce atomic.Bool` flag; (iii) **standby-pod election downgrade** — a pod that boots with `standby.signal` on disk takes the Follower election (never contests the lease). The final architectural call: handleStoppedLeading is now side-effect-free. All fence / CreateStandbySignal / Stop logic on lease loss was removed — transient K8s API hiccups can no longer poison the data dir. Failover is exclusively operator-driven through `executeClusterPromotion` (exec into chosen replica → remove standby.signal → pg_ctl promote → kill the pod so the next boot crosses `bootedAsStandby=false` → Real elector). Regression tests: `TestHandleStoppedLeading_SkipsFenceAndDemoteForSingleMember`, `TestHandleStoppedLeading_SkipsFenceWhenNeverPromoted`, **new** `TestHandleStoppedLeading_NeverFencesOrDemotes` (T30 contract). **Live verification 2026-05-13**: PG18 SHARD_REPLICAS=1 5/5 PASS + WAL streaming verified; PG17 SHARD_REPLICAS=1 5/5 PASS + WAL streaming verified. SHARD_REPLICAS=0 PG18 + PG17 5/5 also re-confirmed (no regression). |
| T32 | Phase A' 통합 — 8 forward work branch sequential squash merge to stable + 100% cleanup + main FF sync | Complete | 100% | T31 | F-G1, F-G3, F-G5, F-G6 | 2026-05-17. `~/.claude/plans/1-swift-anchor.md` Rev 5/6 §Phase A' 라이브 evidence. 8 PR squash merge chain (target=`stable`, Rev 5 §A' 패턴): #61 d65-release-smoke ROADMAP D.6.5 drift 정정 (`1ba11bb`) → #62 G3 sharding-foundation-finalize ShardingMode/ShardsSpec/plugin [~]→[x] (`deeb79a`) → #63 ShardRange CRD type + manifests (`072d3fd`, ROADMAP G3 conflict union resolve) → #64 K8s Lease HA election lease.go + 2 unit test (`efb720b`, rebase 시 ROADMAP G1 conflict 이미 resolve) → #65 scatter-gather query path interface freeze (`8bdcb33`) → #66 ADR-0015 Accepted + 2PC skeleton (`2fe9825`, ROADMAP G5 conflict union resolve) → #67 cross-shard isolation matrix D.10.3 docs 완성 (`36227ad`, ROADMAP G5 conflict union resolve) → #68 sysbench/pgbench skeleton + baseline.md (`e403785`, ROADMAP G5 conflict union resolve). conflict 4건 모두 ROADMAP union resolution 패턴 (HEAD verbose markers + branch work additions). cleanup 100% — remote + local feat/postgres-* = 0/0 verified. stable → main fast-forward sync 완료 (`53dbdf0..e403785`, 9 commit advance). ArgoCD GitOps deploy trigger 활성. 9 ROADMAP marker 갱신: G2 D.6.5 (path 정정) + G3 4 sub-task ([~]→[x] + ShardRange CRD [x]) + G5 4 sub-task ([~] Scatter / [~] 2PC / [x] Isolation / [~] Benchmarks). WIP commit `72271d8 chore: pre-migration WIP (auto)` 8 branch 모두 rebase 시 drop (each PR body disclosure). Lesson codify: force-push 후 `sleep 4` GitHub mergeable 재계산 wait 의무, cleanup 은 `merged=true` 응답 확인 후만, PR auto-close → reopen + branch recreate retry 패턴. ADR-0015 v1.0 scope `{RC + 2PC}` only 정합 — distributed `{RR, SER}` = v2.0+ 별 RFC. |

## Previous phase record (P0 — 0.3.0-alpha redesign reset, commit df1f2e1)

Expand Down