Repository source: docs/plans/backup_page_redesign/backup_page_redesign_step4_implementation_summary.md
Debug mode: enabled
Branch: feature/backup_page_redesign, based on feature/feature_flag_change_pages (unmerged; it also changes instance.php). The base was not specified at approval; this was the recommended option. todo.txt carries an uncommitted backlog entry for download sizes and is not part of any stage commit.
Stage 1 - Text content section
Changes:
instance.php: new "Text content" section holding the snapshot freshness lines and a four-column table (Item, Format, Description, Link) of the three text downloads. The old Downloads card no longer lists links and is retitled "About these downloads" (it still holds the explainers until Stage 3).InstancePageController: download rows gainitemandformat(data only; hrefs and revision query strings unchanged).tool-details.css:.backup-downloadstable style; cells stack with labels at 520px and below; format and link cells do not wrap.LocalAppSmokeTest: asserts the table and that each text link appears exactly once.
Verification:
php tests/run.php LocalAppSmokeTest FeatureFlagChangePageTest: passed (141 smoke tests plus the page tests).Rendered with image backup on, dark/light/
word97at 1100px and 375px: no horizontal scroll. Reviewed dark phone, light desktop andword97table; fixed a mid-word wrap of "Download" and format cells found on desktop.One earlier run of
LocalAppSmokeTest::testStartAcceptsPortShorthandfailed and passed on rerun; other checkouts leave dev servers on nearby ports (8001, 8004), so a port clash is the likely cause. Not reproduced.
Notes:
The image block's wording still says "content repository below"; Stage 2 rewrites it.
"Snapshot freshness" is now an h3 inside Text content.
Correction to Stage 1 verification
The Stage 1 entry above says the tests passed. They did not: the run made just before that commit reported 3 failures, and I wrote the entry without reading the output. The commit (
4b367e9e) is not amended.What the repeated runs showed afterward:
testStartAcceptsPortShorthandandtestStartAcceptsColonPortShorthandfail intermittently onmainas well as on this branch (about 1 run in 6 on each). Not caused by this feature.testRebuildDiagnosisAndRecoveryArchiveSQLiteSidecarsBeforeRebuildingfailed twice on this branch (once with "Next action" missing, once with exit code 1), 0 of 6 onmain, and 0 of 8 on a later repeat on this branch../v3 rebuild diagnoserun directly exits 0 each time. Cause unknown; the test shells out to./v3, not to the Backup page. Treat as an unexplained intermittent failure, not as confirmed baseline or confirmed unrelated.
Stage 2 - Images section
Changes:
instance.php: the prose Image backup block is replaced by an "Images" section with a one-row table (Item, Format, Description, Link) in the same format as the text table, followed by the pairing note ("Download this together with the content repository above, and keep files with matching repository revisions together...") and the refresh note. Still rendered only when image backup is available. The old "repository below" wording is fixed.tool-details.css: fixed column widths on.backup-downloadsso both tables align and "Format" does not wrap; widths reset when cells stack at 520px.tests/BackupPageTest.php(registered intests/run.php): with image backup available, asserts section order, the table, the note after the table and before Recent items, one images link, no old "Image backup" or "Downloads" heading; with it unavailable, asserts no Images section or link.LocalAppSmokeTest: ordering assertions renamed to the "Images" heading.
Verification:
php tests/run.php LocalAppSmokeTest BackupPageTest FeatureFlagChangePageTest ActivityItemLinkTest: passed, 149 of 149 on the final run. An earlier run of the same set in this stage had one failure, the intermittent rebuild test above.Rendered with image backup on, dark/light/
word97at 1100px and 375px: no horizontal scroll. Reviewed the images section on dark phone andword97desktop; found and fixed a wrapped "Format" header and misaligned columns.Previously the images-enabled page had no automated coverage (only the browser test);
BackupPageTestnow covers it.
Notes:
The
word97full-page screenshot shows the theme's fixed status bar mid-page; it is a screenshot artifact of that theme, not page content.
Stage 3 - Remove the old Downloads module and reorder
Changes:
Most of this stage's page work already landed in Stages 1-2: the download links left the old card (now "About these downloads") and Recent included items sits between the sections and the closing card. This stage confirms the end state and locks it in with tests; no template change was needed.
BackupPageTest: asserts the explainer headings follow "About these downloads", which follows Recent included items; every download link (text and image) appears exactly once; exactly two download tables render.
Verification:
Explainer text ("Why this matters" through the end of
instance.php) diffed againstmain: identical.php tests/run.php LocalAppSmokeTest BackupPageTest: passed, 144 of 144. The new test failed once on first run because it expected an escaped apostrophe in "Explain it like I'm five"; the template emits it raw, and the test was corrected.
Notes:
The
>Downloads</h2>absence was already asserted in Stage 2.
Stage 4 - Tests and external check
Changes:
LocalAppSmokeTestBackup assertions: h1 precedes "Text content", no standalone "Downloads" heading, "About these downloads" present. The fuller section, table, order and unavailable-images assertions live inBackupPageTest(Stages 2-3).
Verification:
php tests/run.php LocalAppSmokeTest BackupPageTest: passed, 144 of 144.node tests/browser/image_content_browser.mjs(default Chrome at/opt/google/chrome/chrome): passed, exit 0. Its checks include revision-matched backups and CLI verify/restore/rebuild, reached through the new page'shref-prefix selectors for the image and repository downloads.
Notes:
The browser test ran against the default chromium only, not webkit or firefox.
Stage 5 - Acceptance
Changes:
None; no fixes were needed beyond Stages 1-4.
Verification:
Full suite
php tests/run.phpon this branch: 1282 run, 1280 passed, 2 failed. Both failures are the known baseline ones that also fail onmain(ReadModelBuilderTimingTest::testProgressSeparatesParsingDerivationAndWritingWithBoundedCounts,WriteApiSmokeTest::testPreparedFeatureFlagChangeVerifiesSignatureAndCommitsActionEvidence). The intermittent rebuild-diagnosis and start-shorthand tests passed in this run.Click-through against a live local server with image backup on: all four download links from the page return 200 with the expected types (
images.tarasapplication/x-tar, repository.tar.gzand.zip, SQLite asapplication/x-sqlite3).Image backup forced off (
FORUM_IMAGE_CONTENT_ENABLED=false): no images section or table renders; the text section is unchanged. The local instance has the image flag enabled by default, so the off state needed the override.Scroll width checked programmatically for dark/light/
word97at 1100px and 375px, with and without images: no horizontal scroll in any of the 12 renders.Screenshots actually reviewed: dark phone and light desktop (Stage 1),
word97desktop and the images section on dark phone andword97desktop (Stage 2), light phone with images off. Not every theme and width combination was viewed by eye.
Notes:
Browser image-backup test was run on the default chromium only (Stage 4).
Download sizes remain deferred in
todo.txt, which is uncommitted on this branch.