Transmission #058: PDD planning — GitHub Actions CI

Started Prompt-Driven Development planning for GitHub Actions CI: artifacts live under .agents/planning/2026-04-30-gha-ci/ (rough-idea.md, idea-honing.md, and empty research/, design/, implementation/ trees). Next steps in that folder are interactive requirements honing, optional research, then detailed design and an implementation plan—before wiring workflows in-repo.

PDD: preliminary research (GHA CI)

Wrote first-pass research under .agents/planning/2026-04-30-gha-ci/research/: server Gradle and tests (JDK 25, test vs integrationTest, OpenAPI client generation, mismatch between README “offline” integrationTest and current ItemsApiIntegrationTest + JerseyLiveStackSupport requiring a live Jersey stack), publish/reload (registry images, helerion-remote-reload.sh and homelab networking limits for merge deploy), and GHA options (PR vs default-branch jobs, JaCoCo gap, compose vs tagging live tests, semver release sketch). Informs the later detailed design without committing workflows yet.

PDD: requirements clarification started

Resumed Prompt-Driven Development on GitHub Actions CI with requirements honing (option B): first question is recorded in .agents/planning/2026-04-30-gha-ci/idea-honing.md (how PR CI should run integrationTest given the live-Jersey dependency). Answers will be captured there one Q&A pair at a time.

PDD: idea honing Q1

Integration tests on PR: use Docker Compose in CI (server/docker-compose.yml), wait for Jersey, then ./gradlew integrationTest.

PDD: idea honing Q2

Coverage: JaCoCo reports as GHA artifacts (optional job summary); no Codecov unless needs change—easiest/cheapest default.

PDD: idea honing Q3

Merge → Release: phase 2 after PR CI; publish + reload run inside the release workflow triggered by merge (not a separate untagged merge deploy).

PDD: idea honing Q4

Semver on release: PR labels release:minor / release:major; default patch if neither applies.

PDD: idea honing Q5

Reload: manual after release; CI does tag + image publish only (no SSH reload from runners).

PDD: idea honing Q6

Default branch: main for release triggers and PR base.

PDD: idea honing Q7

PR CI: run server workflow only on changes under server/**, openapi.yaml, .github/workflows/** (extend later if needed).

PDD: idea honing Q8

Release on merge: every main merge → semver tag + GitHub Release; blog/server publish jobs path-gated inside that pipeline.

PDD: idea honing Q9

Bootstrap tag: 0.0.1 (no v prefix) when no prior release tags exist yet.

PDD: requirements honing complete

Interactive clarification for GHA CI planning is done (idea-honing.md). Next explicit branch: detailed design, more research, or reopen honing—awaiting choice before design/detailed-design.md.

PDD: detailed design

Added design/detailed-design.md: standalone spec covering PR CI (path filters, Compose, JDK 25, JaCoCo artifacts), release-on-main with semver from PR labels (plain X.Y.Z tags, bootstrap 0.0.1), path-gated blog/server docker publish, manual reload, architecture mermaid diagrams, error-handling (ambiguous labels fail; publish-before-tag recommendation), and appendices. Implementation still pending—next would be implementation/plan.md after explicit sign-off.

PDD: implementation plan + summary

Added implementation/plan.md (six checklist steps: JaCoCo → PR CI → Compose integration tests → release semver → blog publish → server publish + GitHub Release) and summary.md listing artifacts and next steps. Ready to execute the checklist in the main repo when you want live workflows.

Repo: GitHub Actions + JaCoCo landed

Implemented .github/workflows/server-ci.yml (PR path filters, Temurin 25, ./gradlew test + jacocoTestReport, Compose integrationTest, JaCoCo/test report artifacts) and .github/workflows/release.yml (main push → semver without v, PR-label bumps, path-gated registry.helerion.com blog/server pushes, gh release create, manual reload called out in notes). server/build.gradle: jacoco plugin + jacocoTestReport. Root README.md: Actions + secrets table; server/README.md: integration + JaCoCo pointers. Configure REGISTRY_USERNAME / REGISTRY_PASSWORD before merges that touch blog/** or server/** / openapi.yaml.

Repo: CI sparse checkout

Server CI and Release workflows use actions/checkout@v4 sparse checkout so runners only materialize server/, blog/ (release only), and repo-root openapi.yaml — Unity Assets/ and other large paths stay out of the job workspace (smaller disk / faster checkout).