Skip to content

feat(e3a): binlog enablement — gated PITR foundation (binary logging in compose.sh, ENABLE_PITR default off (Track E)#63

Merged
actools-pl merged 1 commit into
mainfrom
phaseE/E3a-binlog-enablement
Jun 30, 2026
Merged

feat(e3a): binlog enablement — gated PITR foundation (binary logging in compose.sh, ENABLE_PITR default off (Track E)#63
actools-pl merged 1 commit into
mainfrom
phaseE/E3a-binlog-enablement

Conversation

@actools-pl

Copy link
Copy Markdown
Owner

Fold the binlog volume + config mount directly into the canonical compose.sh db service, gated by a new ENABLE_PITR flag (default off -> no behavior change unless enabled). When on: the dedicated mariadb_binlogs named volume at /var/log/mysql plus the standalone 99-binlog.cnf mounted at /etc/mysql/mariadb.conf.d/99-binlog.cnf, declared in the top-level volumes:. actools.sh places 99-binlog.cnf beside my.cnf (gated). Default compose output stays byte-identical to today's (golden_drift 6/6; the gated fragments render to nothing when off).

Absorb + delete the docker-compose.binlog.yml overlay and the byte-identical dead-twin mariadb-binlog.cnf; repoint deploy-pitr.sh's one dangling ref to 99-binlog.cnf. Foundation only -- the full-backup producer (E3b), rotation (E3c), pitr CLI (E3d), and restore (E5) stay unwired drafts. REGISTERED stays 30.

New guard tests/guards/binlog_enablement_guard_test.bats (7/7, incl. an off-tree non-vacuity arm proving the ENABLE_PITR=false gating bites). Docs: backup-format-contract.md (C binlog foundation target->live; producer/restore still target; A/B byte-true), runtime-authority-map.md (inventory 34->32: 99-binlog.cnf unwired->wired, 2 drafts removed), the inventory manifest (34->32), and PHASE0_LEDGER.md (Entry 033 + ratify Entry 032).

Behavior-CHANGING (opt-in): branch e2e MUST be green before merge -- the new "Binlog enablement (E3a)" leg installs with ENABLE_PITR=true and asserts MariaDB ready. + log_bin=ON + a mysql-bin.NNNNNN file under /var/log/mysql.

Declared deviations: /var/log/mysql mount is a REPLACE not ADD (named volume swaps the ./logs/db bind when on; known named-volume-permission risk gated by e2e); printf inline-append fragment technique (not the redis service-heredoc) for byte-exact in-list rendering; SC_START/SC_END canary bump in capture_golden_outputs.sh (setup_cli shifted 521->528); ENABLE_PITR threaded as a consumed env var only (no summary line), per the E2 ENABLE_ENCRYPTED_BACKUP precedent.

… in compose.sh, ENABLE_PITR default off (Track E)

Fold the binlog volume + config mount directly into the canonical compose.sh db
service, gated by a new ENABLE_PITR flag (default off -> no behavior change unless
enabled). When on: the dedicated mariadb_binlogs named volume at /var/log/mysql plus
the standalone 99-binlog.cnf mounted at /etc/mysql/mariadb.conf.d/99-binlog.cnf,
declared in the top-level volumes:. actools.sh places 99-binlog.cnf beside my.cnf
(gated). Default compose output stays byte-identical to today's (golden_drift 6/6; the
gated fragments render to nothing when off).

Absorb + delete the docker-compose.binlog.yml overlay and the byte-identical dead-twin
mariadb-binlog.cnf; repoint deploy-pitr.sh's one dangling ref to 99-binlog.cnf.
Foundation only -- the full-backup producer (E3b), rotation (E3c), pitr CLI (E3d), and
restore (E5) stay unwired drafts. REGISTERED stays 30.

New guard tests/guards/binlog_enablement_guard_test.bats (7/7, incl. an off-tree
non-vacuity arm proving the ENABLE_PITR=false gating bites). Docs:
backup-format-contract.md (C binlog foundation target->live; producer/restore still
target; A/B byte-true), runtime-authority-map.md (inventory 34->32: 99-binlog.cnf
unwired->wired, 2 drafts removed), the inventory manifest (34->32), and
PHASE0_LEDGER.md (Entry 033 + ratify Entry 032).

Behavior-CHANGING (opt-in): branch e2e MUST be green before merge -- the new "Binlog
enablement (E3a)" leg installs with ENABLE_PITR=true and asserts MariaDB ready. +
log_bin=ON + a mysql-bin.NNNNNN file under /var/log/mysql.

Declared deviations: /var/log/mysql mount is a REPLACE not ADD (named volume swaps the
./logs/db bind when on; known named-volume-permission risk gated by e2e); printf
inline-append fragment technique (not the redis service-heredoc) for byte-exact
in-list rendering; SC_START/SC_END canary bump in capture_golden_outputs.sh (setup_cli
shifted 521->528); ENABLE_PITR threaded as a consumed env var only (no summary line),
per the E2 ENABLE_ENCRYPTED_BACKUP precedent.
@actools-pl actools-pl merged commit 67f9b96 into main Jun 30, 2026
11 of 12 checks passed
@actools-pl actools-pl deleted the phaseE/E3a-binlog-enablement branch July 1, 2026 12:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant