docs/superpowers/plans/2026-08-15-mysql84-binlog-g1-coverage.md
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Run the existing MySQL 8.4 binlog-reader TAP group under GCOV and upload its explicit LCOV result to Codecov.
Architecture: Add a v3.0 caller whose name mirrors mysql84-binlog-g1, then add its reusable GH-Actions implementation. The reusable workflow follows ci-mysql84-g5.yml: use the existing GCOV build handoff, start the group-specific binlog topology, collect one LCOV file, require it, and upload only it.
Tech Stack: GitHub Actions reusable workflows, Docker Compose test infrastructure, Bash, fastcov LCOV, Codecov Action v4.
TAP_GROUP exactly mysql84-binlog-g1.infra-dbdeployer-mysql84-binlog through the group environment; do not emulate binlog readers in a generic MySQL group.COVERAGE=1 and upload only the explicit .info file with plugins: noop and disable_search: true.Files:
.github/workflows/CI-mysql84-binlog-g1.ymltest/infra/control/validate-codecov-workflows.bashInterfaces:
Consumes: the reusable workflow sysown/proxysql/.github/workflows/ci-mysql84-binlog-g1.yml@GH-Actions.
Produces: the CI-mysql84-binlog-g1 check for CI-trigger workflow completions.
Step 1: Write the failing workflow-presence check
Run:
test -f .github/workflows/CI-mysql84-binlog-g1.yml
Expected: FAIL because the group-named caller does not exist.
Create a workflow_dispatch and workflow_run caller named
CI-mysql84-binlog-g1, use the same successful-CI-trigger guard and
write-all permission contract as CI-mysql84-g5.yml, and delegate with:
uses: sysown/proxysql/.github/workflows/ci-mysql84-binlog-g1.yml@GH-Actions
Run:
test -f .github/workflows/CI-mysql84-binlog-g1.yml
python3 - <<'PY'
import yaml
yaml.safe_load(open('.github/workflows/CI-mysql84-binlog-g1.yml'))
PY
Expected: both commands exit zero.
git add .github/workflows/CI-mysql84-binlog-g1.yml
git commit -m "ci: add mysql84 binlog coverage caller"
Files:
.github/workflows/ci-mysql84-binlog-g1.yml on a branch based on GH-Actionstest/infra/control/validate-codecov-workflows.bashInterfaces:
Consumes: trigger JSON from the v3.0 caller and build handoffs named with the real triggering SHA.
Produces: ci_infra_logs/ci-mysql84-binlog-g1/coverage-report/ci-mysql84-binlog-g1.info and a Codecov upload named tap-mysql84-binlog-g1-coverage.
Step 1: Write the failing workflow-presence check
Run on the GH-Actions checkout:
test -f .github/workflows/ci-mysql84-binlog-g1.yml
Expected: FAIL because the reusable binlog coverage workflow does not exist.
Copy the proven checkout, build-handoff, binary-verification, GHCR login,
cleanup and Codecov settings from ci-mysql84-g5.yml. Replace each group
value with mysql84-binlog-g1, including INFRA_ID, TAP_GROUP, artifact
paths and Codecov name. Set COVERAGE=1 in the test step.
Add the LCOV gate before upload:
- name: Require non-empty binlog coverage LCOV
if: ${{ !cancelled() }}
run: test -s proxysql/ci_infra_logs/ci-mysql84-binlog-g1/coverage-report/ci-mysql84-binlog-g1.info
Configure Codecov to upload that exact .info file with plugins: noop,
disable_search: true, root_dir: proxysql, use_oidc: true, name
tap-mysql84-binlog-g1-coverage, and flag integration-tests.
Run on the GH-Actions checkout:
test/infra/control/validate-codecov-workflows.bash .github/workflows/ci-mysql84-binlog-g1.yml codecov.yml
python3 - <<'PY'
import yaml
yaml.safe_load(open('.github/workflows/ci-mysql84-binlog-g1.yml'))
PY
Expected: both commands exit zero.
git add .github/workflows/ci-mysql84-binlog-g1.yml
git commit -m "ci: add mysql84 binlog coverage workflow"
git push -u origin ci/mysql84-binlog-g1-coverage
Open a PR against GH-Actions and merge it before relying on the v3.0 caller.
Files:
test/tap/tests/test_binlog_reader-t.cppInterfaces:
Consumes: the binlog group environment and the new reusable workflow contract.
Produces: a passing real binlog-reader TAP run and non-empty local LCOV data.
Step 1: Run the focused real workload
Run:
INFRA_ID=coverage-mysql84-binlog \
TAP_GROUP=mysql84-binlog-g1 \
TEST_PY_TAP_INCL=test_binlog_reader-t \
COVERAGE=1 \
test/infra/control/run-tests-isolated.bash
Expected: the existing TAP passes while exercising the actual reader processes supplied by the binlog infrastructure.
Run:
test -s ci_infra_logs/coverage-mysql84-binlog/coverage-report/coverage-mysql84-binlog.info
Expected: exit zero; an empty or missing report is a coverage-collection defect, not an acceptable skipped upload.
Run:
python3 test/tap/groups/lint_groups_json.py
python3 test/tap/groups/check_groups.py --source
test/infra/control/validate-codecov-workflows.bash
Expected: all commands exit zero.
git add .github/workflows/CI-mysql84-binlog-g1.yml
git commit -m "ci: run mysql84 binlog TAP coverage"
git push