Add database-backed changelog, admin management, and monthly history #984

Closed
opened 2026-10-19 10:10:13 -05:00 by Codex · 2 comments
Member

Replace the hardcoded homepage changelog with database entries, provide dedicated admin management, and backfill monthly user-facing highlights from May 27, 2022 through October 19, 2026.

The homepage currently contains one hardcoded entry dated 2022-05-27 in resources/views/index.blade.php. Database storage will allow staff to maintain the changelog and support a future monthly drafting workflow.

Related: #73 (Add Site News) and #74 (Edit Site News). Changelog management will remain separate from site news and personal blogs.

Requirements

  • Create a changelog table and model supporting title, content, entry date, draft/published state, publication timestamp, staff attribution, and an optional unique month for monthly summaries.
  • Add dedicated admin pages to list, create, edit, publish, and unpublish entries. Follow existing styling, validation, audit logging, numeric content-management roles (1,2,4), and named mutation rate limits.
  • Migrate the existing 2022-05-27 entry, preserving its content, links, and date. Make the import safe to rerun without duplicating entries or overwriting staff edits.
  • Review commits reachable from master month by month within the requested range. Inspect relevant changes beyond commit titles, consolidate related work, and include significant user-facing features, improvements, and fixes. Exclude dependency churn, internal refactoring, CI work, and unreleased changes.
  • Insert one published summary per qualifying month through a repeatable import, retaining supporting commit references for staff review. Skip months without noteworthy changes and avoid repeating the original launch announcement.
  • Document unavailable history. The inspected, non-shallow local repository begins in January 2024 and has a subsequent gap before April 2026. Verify coverage during implementation; do not invent entries for missing periods or make locating older history a prerequisite.
  • Replace the hardcoded homepage entry with the 15 latest published, non-future entries, newest entry date first with a deterministic tie-breaker. Render content through the existing safe Markdown renderer and provide an empty state.

Monthly automation investigation

  • Assess how to obtain merged/released commit history, generate useful summaries, and deliver drafts into the admin workflow.
  • Recommend a process that runs after each calendar month closes, skips empty months, prevents duplicates, preserves staff edits, and requires staff approval before publication.
  • Document the proposed scheduler, timezone, credentials, runtime or service needs, cost, failure reporting, and handling of the partial October 2026 backfill.
  • Record the recommendation for review and track automation implementation separately after the approach is reviewed. This issue requires the investigation and recommendation, not enabling a recurring automation.

Acceptance and verification

  • Authorized staff can manage entries; unauthorized users cannot access or mutate them.
  • Drafts and future publications remain hidden from the homepage; ordering and the 15-entry limit are tested.
  • Content validation and safe rendering have focused Pest coverage.
  • The original entry survives migration, and repeated imports create no duplicates or overwrite edited content.
  • Monthly summaries are checked against supporting commits; skipped months and history gaps are recorded.
  • Validate migrations/imports against testing and development targets with explicit environments. Production writes require explicit confirmation.
  • Run affected tests, vendor/bin/pint --dirty --format agent, composer stan, and npm run build if frontend assets change.

Implementation review — October 19, 2026

All 18 checklist items above have been reviewed against the implementation on codex/issue-984-database-changelog (commits a6bd94bc and 4816ac61). PR #988 is merged at master revision 14469e1c31bdce92d6d2d32c1f6bd4a051a8e2f9. Development and production are deployed and verified at the merged revision. See the deployment completion comment for checks, preserved development differences, and rollback locations.

  • Storage/admin/homepage: dedicated model/table and admin create/edit/publish/unpublish workflow; roles 1, 2, and 4; verification middleware; validation; staff attribution; transactional admin audit logging; named mutation throttles; safe Markdown; deterministic latest-15 publication filtering and empty state. The standalone YYYY-MM-DD line on public entries was removed as requested; dates remain available in admin and continue to drive ordering.
  • Historical review: preserved the May 27, 2022 launch announcement; six monthly summaries for May–October 2026 include 48 supporting commits verified reachable from master and within the stated month. The June summary includes donation checkout, billing history, and receipts. Missing/empty periods and gated subscription exclusions are recorded in README. October is explicitly partial through October 19.
  • Automated coverage: 22 focused changelog tests / 234 assertions cover allowed and denied roles, guests and unverified staff, creation/edit/publication/unpublication, invalid submissions with unchanged data/audit history, attribution and protected import evidence, safe public/admin rendering, pagination/empty state, exact publication/date boundaries, deterministic ordering and limit, original announcement preservation, edited launch/monthly preservation, manual-month conflicts, dry runs/repeated imports, explicit environments, and declined production confirmation.
  • Full suite: 1,219 passed, 2 skipped (1,221 total), 9,306 assertions, with the existing three duplicate-constant warnings. Pint, PHPStan, asset build, and diff checks passed. Desktop 1440px and mobile 375px Playwright checks passed for page identity/content, navigation, form controls, saved preview, date removal, updated June content, and console health.
  • Database validation: isolated SQLite migration/import passed. The real development target was confirmed as mvgldev_dev on MariaDB 12.3.3; because MariaDB listens only on server loopback, validation used an authenticated SSH tunnel without altering database networking. The new migration preserved the original entry, the dry run identified six missing months, the write imported six, and the repeat write imported zero. Development now contains the seven initial entries; production is untouched.
  • Automation investigation: README records schedule/timezone, existing Forgejo schedule/manual-dispatch precedent, release evidence, draft delivery, review/publication boundary, credentials, deterministic runner-only cost versus optional approved LLM use, failures/retries, and the October supplement. Implementation is tracked separately in #987, including maintainer review and a supervised first run. No recurring job is enabled.

PR #988 is merged and this issue is closed with status/done. All 18 checklist items are complete; see the deployment comments for rollout verification.

Second verification pass on October 19, 2026 at unchanged commit 4816ac61: no additional acceptance or implementation gaps found. Compared the complete original announcement text and both link destinations against master; preservation is exact after HTML-to-Markdown conversion. Rechecked all 48 supporting commit references for master ancestry, month, and cutoff. Re-ran the 22 changelog tests (234 assertions), full-repository Pint check, PHPStan, frontend build, and diff checks successfully. The existing full-suite and development MariaDB validation above remain applicable; no source changes were needed. All 18 checklist items remain checked, and #987 remains the separate automation implementation follow-up.

Replace the hardcoded homepage changelog with database entries, provide dedicated admin management, and backfill monthly user-facing highlights from **May 27, 2022 through October 19, 2026**. The homepage currently contains one hardcoded entry dated 2022-05-27 in `resources/views/index.blade.php`. Database storage will allow staff to maintain the changelog and support a future monthly drafting workflow. Related: #73 (Add Site News) and #74 (Edit Site News). Changelog management will remain separate from site news and personal blogs. ## Requirements - [x] Create a changelog table and model supporting title, content, entry date, draft/published state, publication timestamp, staff attribution, and an optional unique month for monthly summaries. - [x] Add dedicated admin pages to list, create, edit, publish, and unpublish entries. Follow existing styling, validation, audit logging, numeric content-management roles (`1,2,4`), and named mutation rate limits. - [x] Migrate the existing **2022-05-27** entry, preserving its content, links, and date. Make the import safe to rerun without duplicating entries or overwriting staff edits. - [x] Review commits reachable from `master` month by month within the requested range. Inspect relevant changes beyond commit titles, consolidate related work, and include significant user-facing features, improvements, and fixes. Exclude dependency churn, internal refactoring, CI work, and unreleased changes. - [x] Insert one published summary per qualifying month through a repeatable import, retaining supporting commit references for staff review. Skip months without noteworthy changes and avoid repeating the original launch announcement. - [x] Document unavailable history. The inspected, non-shallow local repository begins in January 2024 and has a subsequent gap before April 2026. Verify coverage during implementation; do not invent entries for missing periods or make locating older history a prerequisite. - [x] Replace the hardcoded homepage entry with the **15 latest published, non-future entries**, newest entry date first with a deterministic tie-breaker. Render content through the existing safe Markdown renderer and provide an empty state. ## Monthly automation investigation - [x] Assess how to obtain merged/released commit history, generate useful summaries, and deliver drafts into the admin workflow. - [x] Recommend a process that runs after each calendar month closes, skips empty months, prevents duplicates, preserves staff edits, and requires staff approval before publication. - [x] Document the proposed scheduler, timezone, credentials, runtime or service needs, cost, failure reporting, and handling of the partial October 2026 backfill. - [x] Record the recommendation for review and track automation implementation separately after the approach is reviewed. This issue requires the investigation and recommendation, not enabling a recurring automation. ## Acceptance and verification - [x] Authorized staff can manage entries; unauthorized users cannot access or mutate them. - [x] Drafts and future publications remain hidden from the homepage; ordering and the 15-entry limit are tested. - [x] Content validation and safe rendering have focused Pest coverage. - [x] The original entry survives migration, and repeated imports create no duplicates or overwrite edited content. - [x] Monthly summaries are checked against supporting commits; skipped months and history gaps are recorded. - [x] Validate migrations/imports against testing and development targets with explicit environments. Production writes require explicit confirmation. - [x] Run affected tests, `vendor/bin/pint --dirty --format agent`, `composer stan`, and `npm run build` if frontend assets change. ## Implementation review — October 19, 2026 All 18 checklist items above have been reviewed against the implementation on `codex/issue-984-database-changelog` (commits `a6bd94bc` and `4816ac61`). PR #988 is merged at master revision `14469e1c31bdce92d6d2d32c1f6bd4a051a8e2f9`. Development and production are deployed and verified at the merged revision. See the deployment completion comment for checks, preserved development differences, and rollback locations. - Storage/admin/homepage: dedicated model/table and admin create/edit/publish/unpublish workflow; roles 1, 2, and 4; verification middleware; validation; staff attribution; transactional admin audit logging; named mutation throttles; safe Markdown; deterministic latest-15 publication filtering and empty state. The standalone YYYY-MM-DD line on public entries was removed as requested; dates remain available in admin and continue to drive ordering. - Historical review: preserved the May 27, 2022 launch announcement; six monthly summaries for May–October 2026 include 48 supporting commits verified reachable from master and within the stated month. The June summary includes donation checkout, billing history, and receipts. Missing/empty periods and gated subscription exclusions are recorded in README. October is explicitly partial through October 19. - Automated coverage: 22 focused changelog tests / 234 assertions cover allowed and denied roles, guests and unverified staff, creation/edit/publication/unpublication, invalid submissions with unchanged data/audit history, attribution and protected import evidence, safe public/admin rendering, pagination/empty state, exact publication/date boundaries, deterministic ordering and limit, original announcement preservation, edited launch/monthly preservation, manual-month conflicts, dry runs/repeated imports, explicit environments, and declined production confirmation. - Full suite: 1,219 passed, 2 skipped (1,221 total), 9,306 assertions, with the existing three duplicate-constant warnings. Pint, PHPStan, asset build, and diff checks passed. Desktop 1440px and mobile 375px Playwright checks passed for page identity/content, navigation, form controls, saved preview, date removal, updated June content, and console health. - Database validation: isolated SQLite migration/import passed. The real development target was confirmed as `mvgldev_dev` on MariaDB 12.3.3; because MariaDB listens only on server loopback, validation used an authenticated SSH tunnel without altering database networking. The new migration preserved the original entry, the dry run identified six missing months, the write imported six, and the repeat write imported zero. Development now contains the seven initial entries; production is untouched. - Automation investigation: README records schedule/timezone, existing Forgejo schedule/manual-dispatch precedent, release evidence, draft delivery, review/publication boundary, credentials, deterministic runner-only cost versus optional approved LLM use, failures/retries, and the October supplement. Implementation is tracked separately in #987, including maintainer review and a supervised first run. No recurring job is enabled. PR #988 is merged and this issue is closed with `status/done`. All 18 checklist items are complete; see the deployment comments for rollout verification. Second verification pass on October 19, 2026 at unchanged commit `4816ac61`: no additional acceptance or implementation gaps found. Compared the complete original announcement text and both link destinations against master; preservation is exact after HTML-to-Markdown conversion. Rechecked all 48 supporting commit references for master ancestry, month, and cutoff. Re-ran the 22 changelog tests (234 assertions), full-repository Pint check, PHPStan, frontend build, and diff checks successfully. The existing full-suite and development MariaDB validation above remain applicable; no source changes were needed. All 18 checklist items remain checked, and #987 remains the separate automation implementation follow-up.
Codex self-assigned this 2026-10-19 10:13:19 -05:00
Author
Member

Merged as PR #988 at master revision 14469e1c31bdce92d6d2d32c1f6bd4a051a8e2f9. The local master checkout has been fast-forwarded; unrelated local Debugbar work is preserved and is not part of this release.

Useful implementation and rollout notes:

  • Changelog administration is at /admin/changelog for verified staff with roles 1, 2, and 4. Entries support draft/published state, publication time, author/editor attribution, and audit logging. The homepage displays the latest 15 eligible published entries with safe Markdown rendering and no standalone YYYY-MM-DD line.
  • The migration preserves the original May 27, 2022 announcement. mvgl:import-changelog-history adds six reviewed monthly summaries, defaults to a dry run, requires an explicit environment, and preserves existing staff edits on reruns. The initial data set totals seven entries.
  • The backfill includes 48 supporting commit references and documents history gaps. October 2026 covers only October 1–19. A later October supplement must be reviewed and merged into the existing monthly entry rather than automatically overwritten or duplicated.
  • Monthly automation is investigated and documented, but no recurring job is enabled. Follow-up #987 owns the draft-only generator/delivery workflow, maintainer review, and supervised first run.
  • Verification passed: 22 focused changelog tests / 234 assertions; full suite 1,219 passed and 2 skipped / 9,306 assertions; Pint, PHPStan, frontend build, desktop/mobile browser checks, and SQLite plus development MariaDB migration/import validation. Existing duplicate-constant warnings are unrelated.
  • Deployment is starting with development, followed by production after verification. The application code requires the new table. Production migration/import is explicitly authorized by the deployment request and will use the confirmed production target; development already has the table and initial seven entries. Final deployment results and rollback locations will be recorded separately.

All 18 acceptance/progress checkboxes are complete. Closing this issue as done; deployment verification is continuing in the implementation chat.

Merged as PR #988 at master revision `14469e1c31bdce92d6d2d32c1f6bd4a051a8e2f9`. The local master checkout has been fast-forwarded; unrelated local Debugbar work is preserved and is not part of this release. Useful implementation and rollout notes: - Changelog administration is at `/admin/changelog` for verified staff with roles 1, 2, and 4. Entries support draft/published state, publication time, author/editor attribution, and audit logging. The homepage displays the latest 15 eligible published entries with safe Markdown rendering and no standalone YYYY-MM-DD line. - The migration preserves the original May 27, 2022 announcement. `mvgl:import-changelog-history` adds six reviewed monthly summaries, defaults to a dry run, requires an explicit environment, and preserves existing staff edits on reruns. The initial data set totals seven entries. - The backfill includes 48 supporting commit references and documents history gaps. October 2026 covers only October 1–19. A later October supplement must be reviewed and merged into the existing monthly entry rather than automatically overwritten or duplicated. - Monthly automation is investigated and documented, but no recurring job is enabled. Follow-up #987 owns the draft-only generator/delivery workflow, maintainer review, and supervised first run. - Verification passed: 22 focused changelog tests / 234 assertions; full suite 1,219 passed and 2 skipped / 9,306 assertions; Pint, PHPStan, frontend build, desktop/mobile browser checks, and SQLite plus development MariaDB migration/import validation. Existing duplicate-constant warnings are unrelated. - Deployment is starting with development, followed by production after verification. The application code requires the new table. Production migration/import is explicitly authorized by the deployment request and will use the confirmed production target; development already has the table and initial seven entries. Final deployment results and rollback locations will be recorded separately. All 18 acceptance/progress checkboxes are complete. Closing this issue as done; deployment verification is continuing in the implementation chat.
Author
Member

Deployment completed to development and production at merged master revision 14469e1c31bdce92d6d2d32c1f6bd4a051a8e2f9.

  • Deployed development first and verified the public site before proceeding to production.
  • Preserved all 19 existing development source differences, including pending-game and Debugbar work. The changelog additions were merged into development's shared routes/sidebar without losing those changes. Production received committed master source. Both environments retain their existing JavaScript bundles and received rebuilt CSS plus matching asset manifests.
  • Development already had the migration and seven initial entries: migration/import reruns made no data changes. Production ran only the new changelog migration, preserving the original announcement, and imported six monthly summaries. A repeat production import created zero additional rows.
  • Both confirmed MariaDB targets passed read-only runtime checks: seven total/visible entries, six monthly summaries with supporting commit evidence, the original date and links, and all five admin routes with role/rate-limit middleware.
  • Both public homepages returned HTTP 200 and displayed seven changelog entries newest first. The standalone YYYY-MM-DD display is absent, and the June donation/billing highlight is present. Served CSS/JavaScript checksums match the deployment artifacts. Guest requests to /admin/changelog redirect to login.
  • Blade caches and explicit-revision release manifests were regenerated. Environment files, dependency files, existing JavaScript, and unrelated runtime source were verified unchanged.
  • Local master is updated. Unrelated local Debugbar changes remain preserved and uncommitted.

Rollback backups:

  • Development: /home/mvgldev/deploy-backups/issue984-14469e1c-xt8hvjen
  • Production: /home/mvgl/deploy-backups/issue984-14469e1c-12k4g1mg

Each backup includes prior changed files, the previous release manifest, and database preflight state. This was an additive database release: a code rollback should retain the changelog table/data rather than drop published content. Artifact manifests, deployment receipts, Artisan logs, read-only runtime results, and public HTTP/asset checks are saved under each account's releases/issue984-14469e1c directory. The historical JSON file is explicitly checksum-verified in the deployment artifact receipt because the general release manifest currently excludes seeders.

All 18 checkboxes remain checked, and this issue is closed with status/done. Monthly automation remains disabled and separately tracked in #987; the partial October entry still requires a reviewed October 20–31 supplement at month end.

Deployment completed to development and production at merged master revision `14469e1c31bdce92d6d2d32c1f6bd4a051a8e2f9`. - Deployed development first and verified the public site before proceeding to production. - Preserved all 19 existing development source differences, including pending-game and Debugbar work. The changelog additions were merged into development's shared routes/sidebar without losing those changes. Production received committed master source. Both environments retain their existing JavaScript bundles and received rebuilt CSS plus matching asset manifests. - Development already had the migration and seven initial entries: migration/import reruns made no data changes. Production ran only the new changelog migration, preserving the original announcement, and imported six monthly summaries. A repeat production import created zero additional rows. - Both confirmed MariaDB targets passed read-only runtime checks: seven total/visible entries, six monthly summaries with supporting commit evidence, the original date and links, and all five admin routes with role/rate-limit middleware. - Both public homepages returned HTTP 200 and displayed seven changelog entries newest first. The standalone YYYY-MM-DD display is absent, and the June donation/billing highlight is present. Served CSS/JavaScript checksums match the deployment artifacts. Guest requests to `/admin/changelog` redirect to login. - Blade caches and explicit-revision release manifests were regenerated. Environment files, dependency files, existing JavaScript, and unrelated runtime source were verified unchanged. - Local master is updated. Unrelated local Debugbar changes remain preserved and uncommitted. Rollback backups: - Development: `/home/mvgldev/deploy-backups/issue984-14469e1c-xt8hvjen` - Production: `/home/mvgl/deploy-backups/issue984-14469e1c-12k4g1mg` Each backup includes prior changed files, the previous release manifest, and database preflight state. This was an additive database release: a code rollback should retain the changelog table/data rather than drop published content. Artifact manifests, deployment receipts, Artisan logs, read-only runtime results, and public HTTP/asset checks are saved under each account's `releases/issue984-14469e1c` directory. The historical JSON file is explicitly checksum-verified in the deployment artifact receipt because the general release manifest currently excludes seeders. All 18 checkboxes remain checked, and this issue is closed with `status/done`. Monthly automation remains disabled and separately tracked in #987; the partial October entry still requires a reviewed October 20–31 supplement at month end.
Sign in to join this conversation.
No milestone
No assignees
1 participant
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
MyVideoGameList/myvideogamelist.com#984
No description provided.