Let's push out a new release to prod #106

Closed
opened 2026-08-18 13:44:43 +00:00 by Grandiras · 2 comments
Owner
No description provided.
Collaborator

🤖 On it — follow along in the action run; the reply will link the full session transcript.

📜 Live transcript — updating every ~5 minutes while the task runs.

🤖 On it — follow along in [the action run](https://git.grandiras.net/Grandiras/claude-bot/actions/runs/279); the reply will link the full session transcript. <!-- claude-run:comment --> 📜 [Live transcript](https://git.grandiras.net/Grandiras/claude-bot/src/branch/claude-logs/transcripts/Grandiras/Ponente/issue-106/run-279.md) — updating every ~5 minutes while the task runs.
Collaborator

Released v2.4.0 — production is live on it.

Ran the release skill's remote path (dispatched from an issue, so no workstation and no server access — everything below was verified from the registry and the public HTTPS side).

What shipped

28 commits / 21 issues since v2.3.0 (2026‑07‑28). Six member-visible bullets were sitting in Changelog.Unreleased; features, so a minor:

  • multiple boards, with per-board access (#68, #76, #78, #84)
  • the general calendar across every board (#85)
  • share links for cards and boards, with link cards (#93, #96)
  • card/comment edit permissions (#98)
  • the redesigned account menu and the What's-new dialog (#71, #99, #101, #104)
  • the mobile-drag and board-load performance pass (#64, #91)

plus maintainer-only work that correctly got no changelog entry (#65, #69, #73, #74, #77, #79, #87).

What I did

  1. Confirmed dev was running the merged code before tagging. dev.ponente.app/app.css is byte-identical to main's (93e9c9a5…); production was serving v2.3.0's (ca81493e…). Registry agreed: :latest == :v2.3.0.
  2. Promoted the changelog with promote-changelog.py 2.4.0 — block moved into Releases, dated 2026‑08‑18, empty block left behind. Branch claude/issue-106PR #108, merged as c069880.
  3. Verified before merging: dotnet build -c Release clean, dotnet test 287/287 passed (this matters here — ChangelogTests pins the promoted copy). CI green on the PR and on the tag.
  4. Tagged v2.4.0 on the merge commit and pushed. Publish / build-and-push succeeded; registry digests match:
    v2.4.0   sha256:e6253020df0f8c0e49b06a61e4224d73f06dcee2e96239e67209e01695b604ed
    latest   sha256:e6253020df0f8c0e49b06a61e4224d73f06dcee2e96239e67209e01695b604ed
    
  5. The host deployed itself ~90 s after :latest moved — a brief 502 while ponente-app was recreated, then healthz 200 and production serving the new app.css. So production was not pinned; the timer is armed and stays armed.

Verified live on ponente.app

  • /healthz 200; /login, /signup, /request all render; www → apex 301; PDS untouched (0.4.5026).
  • app.css, manifest.json, favicon.svg, icon-maskable.svg all byte-identical to main; the three manifest PNGs serve.
  • The sharing work's Open Graph tags are now on /login (they were absent before).
  • Negative controls, so the checks mean something: the "you may already have an account" note is on /signup and /request?kind=invite but not on plain /request, exactly as intended; no board-switcher markup on an anonymous page.
  • Migration AddCommentEditedAt: I could not read the container log from here. What I can say is that DatabaseInitializer migrates before the host serves, so a failed migration is a container that does not come up — and it came up and is serving. Worth a glance at scripts/prod-podman.sh logs ponente-app | grep -i migrat next time you're at a workstation.

Notes

  • No new app configuration was needed. The only new env keys since v2.3.0 are deployment machinery (STACK_NAME, defaulted; ADMIN_DID_2, deliberately blank in production; SERVER_STATE_DIR), and the fact that the timer picked this release up proves they are already in place. docker-compose.yml, docker-compose.test.yml and appsettings.json are unchanged since the last tag, so nothing needed deploy.sh.
  • Small doc inconsistency, not blocking: deploy/docker-compose.prod.yml's header still says "Production has no .env on the server to keep in sync; the dev stack does" — superseded by SERVER_STATE_DIR in deploy/.env.example and by deploy/README.md. Happy to file it.
  • The e2e suite could not run here (no container engine in this job), so it is CI's build + 287 unit tests plus the public-side smoke tests above. dev.ponente.app has been running this code since each merge.

⏱ 8m 23s · 53 turns · tokens: 103.9k in / 21.6k out (+5189.9k cache-read)
📜 Full session transcript
→ Opened PR: #109

**Released `v2.4.0` — production is live on it.** Ran the release skill's remote path (dispatched from an issue, so no workstation and no server access — everything below was verified from the registry and the public HTTPS side). ## What shipped 28 commits / 21 issues since `v2.3.0` (2026‑07‑28). Six member-visible bullets were sitting in `Changelog.Unreleased`; features, so a **minor**: - multiple boards, with per-board access (#68, #76, #78, #84) - the general calendar across every board (#85) - share links for cards and boards, with link cards (#93, #96) - card/comment edit permissions (#98) - the redesigned account menu and the What's-new dialog (#71, #99, #101, #104) - the mobile-drag and board-load performance pass (#64, #91) plus maintainer-only work that correctly got no changelog entry (#65, #69, #73, #74, #77, #79, #87). ## What I did 1. **Confirmed dev was running the merged code before tagging.** `dev.ponente.app/app.css` is byte-identical to `main`'s (`93e9c9a5…`); production was serving `v2.3.0`'s (`ca81493e…`). Registry agreed: `:latest` == `:v2.3.0`. 2. **Promoted the changelog** with `promote-changelog.py 2.4.0` — block moved into `Releases`, dated 2026‑08‑18, empty block left behind. Branch `claude/issue-106` → **PR #108**, merged as `c069880`. 3. **Verified before merging:** `dotnet build -c Release` clean, `dotnet test` **287/287 passed** (this matters here — `ChangelogTests` pins the promoted copy). CI green on the PR and on the tag. 4. **Tagged** `v2.4.0` on the merge commit and pushed. `Publish / build-and-push` succeeded; registry digests match: ``` v2.4.0 sha256:e6253020df0f8c0e49b06a61e4224d73f06dcee2e96239e67209e01695b604ed latest sha256:e6253020df0f8c0e49b06a61e4224d73f06dcee2e96239e67209e01695b604ed ``` 5. **The host deployed itself** ~90 s after `:latest` moved — a brief 502 while `ponente-app` was recreated, then `healthz` 200 and production serving the new `app.css`. So production was **not pinned**; the timer is armed and stays armed. ## Verified live on ponente.app - `/healthz` 200; `/login`, `/signup`, `/request` all render; `www` → apex 301; PDS untouched (`0.4.5026`). - `app.css`, `manifest.json`, `favicon.svg`, `icon-maskable.svg` all byte-identical to `main`; the three manifest PNGs serve. - The sharing work's Open Graph tags are now on `/login` (they were absent before). - Negative controls, so the checks mean something: the "you may already have an account" note is on `/signup` and `/request?kind=invite` but **not** on plain `/request`, exactly as intended; no board-switcher markup on an anonymous page. - **Migration `AddCommentEditedAt`:** I could not read the container log from here. What I can say is that `DatabaseInitializer` migrates before the host serves, so a failed migration is a container that does not come up — and it came up and is serving. Worth a glance at `scripts/prod-podman.sh logs ponente-app | grep -i migrat` next time you're at a workstation. ## Notes - **No new app configuration was needed.** The only new env keys since `v2.3.0` are deployment machinery (`STACK_NAME`, defaulted; `ADMIN_DID_2`, deliberately blank in production; `SERVER_STATE_DIR`), and the fact that the timer picked this release up proves they are already in place. `docker-compose.yml`, `docker-compose.test.yml` and `appsettings.json` are unchanged since the last tag, so nothing needed `deploy.sh`. - **Small doc inconsistency, not blocking:** `deploy/docker-compose.prod.yml`'s header still says *"Production has no .env on the server to keep in sync; the dev stack does"* — superseded by `SERVER_STATE_DIR` in `deploy/.env.example` and by `deploy/README.md`. Happy to file it. - The e2e suite could not run here (no container engine in this job), so it is CI's build + 287 unit tests plus the public-side smoke tests above. `dev.ponente.app` has been running this code since each merge. --- ⏱ 8m 23s · 53 turns · tokens: 103.9k in / 21.6k out (+5189.9k cache-read) 📜 [Full session transcript](https://git.grandiras.net/Grandiras/claude-bot/src/branch/claude-logs/transcripts/Grandiras/Ponente/issue-106/run-279.md) → Opened PR: https://git.grandiras.net/Grandiras/Ponente/pulls/109
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Grandiras/Ponente#106
No description provided.