đź§° 2026-08-31 corpus repair

Historical record — 2026-08-31

This page preserves the drive’s point-in-time observations and states later corrections or completion receipts explicitly. It is the execution half of the 2026-08-31 completion drive; the decision half is the 2026-08-31 corpus triage. Current work state lives on the program masterplan, the executable contract on the probe harness, and the row-by-row status on the open-work ledger.

Release boundary

releaseEligible: false. Every change recorded here lives on the WRDP bench and in its Gitea mirror. Nothing here is released, shipped to canonical source, or eligible for it; canonical release eligibility stays false until the release owner carries the source changes through the locked source and release pipeline. The initial authoring snapshot had all nine drive commits local: ./scripts/qwgit.sh status -sb reported ## main...origin/main [ahead 9] with an empty --porcelain status. A completion readback later on 2026-08-31 records ## main...origin/main: mirror main is pushed through closing catalog commit f79feb6. Nine commits cover seven slices plus one catalog refresh because slice H was implemented incorrectly once, rejected, and superseded inside the drive.

W0 baseline pins

Recorded before any file changed, so a later red assertion can be told apart from a pre-existing one.

PinObserved value
Backup snapshot/home/loca/backups/wrdp/20260831T015916Z, drwx------ root root, members content.tar.gz, db.sql.gz, manifest.sha256, meta.txt, nginx.tar.gz
Snapshot metadatawp_version=7.1, quizwizz_version=1.10.0, db_bytes=1796956, content_bytes=97454479, snapshot_table_count=41, snapshot_quizwizz_table_count=15, snapshot_quiz_count=107, snapshot_siteurl=https://wrdp.loca.zone
Pinned imageswordpress@sha256:b2ceeaabb8fa90e12f32fdf5c2479f4cef4508255fb406bd19aa23b1ce59bc46, mariadb@sha256:a794d9eb009e20de605858a11f32f63b4075cbd197c650436f0e3b457e4caed7
Shell gate./scripts/quizwizz-probe.sh --wave all returned 1..76 and # assertions=76 failures=0
Browser gate30/30, overallPass=true, consoleErrors=0, pageErrors=0, settings restored 10 to 10, editor row restored
Mirror shacf0753043e196c52d3a9df807a3a84ce895d9330 — Define missing Settings choice-card styles and accessible states, tree clean
Debug window originwc -c logs/debug.log = 7042962 bytes
Wiki rollback targetreadlink /home/loca/dev/wikis/wrdp/current = dist-1788129513.061920758-1839651

No separate row-level database preimage was taken because no product-content mutation was planned at W0; the backup above nevertheless contains the full db.sql.gz. The drive later restored probe-only zero-question draft 11622 as Wave 8’s control and created then deleted transient draft 11670 for the block-editor observation; neither rewrote the published question corpus. The backup run reported every step ok including its scratch-database restore drill.

One harness correction preceded the baseline and is on the record because it changed the measurement, not the product. scripts/quizwizz-browser-smoke.js:206 asserted the dirty-tab copy with an English-only regex; the bench administrator inherits German, so the correct screen-reader copy nicht gespeicherte Änderungen failed a green behaviour. The regex now accepts either locale — the installed line reads /unsaved|nicht gespeichert/i — and the suite went 29/30 to 30/30. No plugin file changed.

Assertions authored red before the fixes

Every contract below was written and run before its fix existed, so each proof is a real red-to-green transition rather than a tautology. Both harness files are Main-owned; no slice agent edited either.

Wave 11 is wave11() at scripts/quizwizz-probe.sh:2847, printing # Wave 11: corpus-repair contracts at :2848, dispatched by 11) wave11 ;; at :2911 and appended to the all) arm at :2912. The plan line is computed from $RESULTS at :2914, so no count literal exists to maintain. The installed wave now holds seventeen assertions at :2861-2894:

Assertion nameRow
empty actions are absent from top tablenavTOUR-02
question type helper is state-specificTOUR-06 markup
question type change updates helperTOUR-06 script
dashboard usable count has a singular branchTOUR-11
supply count column uses usable authorityTOUR-12
misspelled product name is absent from settings sourceTOUR-15
danger row exposes its active stateTOUR-16
portability export has visible copyTOUR-17
portability import has visible copyTOUR-17
portability download has visible copyTOUR-17
portability cancel has visible copyTOUR-17
pre-hydration player shell carries themeTOUR-24b
block editor removes duplicate Advanced panelTOUR-23, replacing a superseded slice-H assertion
site ceilings share one explanation3.2.1-CEIL
exposure controls qualify accessible names3.2.1-SCOPE
subjects screen registers supply views3.2.1-VIEWS
dashboard labels identify event basis3.2.1-RUNS

Sixteen of those were authored in W2 and all sixteen ran red: 1..16, failures=16. The seventeenth landed with Batch 2, which is why the Batch-1 aggregate plan was 1..92 and the closing plan is 1..93 — the W0 baseline 76 plus 17. That seventeenth slot then changed hands without changing the count: the assertion it originally held defended slice H’s wrong behaviour, and block editor removes duplicate Advanced panel replaced it in place, proved red against the pre-slice baseline f02cba9 and green after the fix was restored.

The durable browser suite gained its new contracts through the file’s own add() helper. The first run preserved every pre-existing check and both restoration paths and failed exactly eight new contracts: TOUR-01, TOUR-04, TOUR-05, TOUR-08, TOUR-16, TOUR-18, FL-001 and FL-002, with zero console and zero page errors.

Candidate contracts were dropped rather than kept as tautologies, each on a measurement:

  • FL-001’s candidate changed a source marker without changing observable picker behaviour. Its request-path premise was refuted, the candidate was removed from the browser suite, and no product fix was installed; the full disposition is below.
  • TOUR-07 did not reproduce at either viewport on 2026-08-31 — 0 of 9 anchor headings occluded, clearance 40.67 to 434.58 px on desktop and 38.67 to 91.11 px at 390 px.
  • TOUR-09 and TOUR-24a are design-class rows and were never eligible.
  • TOUR-20 has no live locked-quiz fixture on this bench, so no runtime assertion could observe it.
  • TOUR-23 has no durable selected-block fixture, so its duplicate-panel contract is a shell assert_not_match on source rather than a browser assertion; the rendered proof was taken once on a transient fixture, see slice H.
  • TOUR-18’s shell class check was already green before any fix, so only the computed-paint contract was kept.

Shipped fixes

Twenty-two plugin files were installed across seven slices, plus five translation catalogs in a closing refresh. Slice H took two commits because its first implementation was wrong. Anchors below were re-read from installed source for this page, not copied from the slice reports.

Slice A — admin lists and supply metrics, commit 92ea35894f69df414a96b99971f323fe93cf0f22

Five PHP files: includes/Admin/AdminStatistics.php, includes/Admin/DashboardPresenter.php, includes/Admin/ListTables.php, includes/Subject/SubjectAdminUi.php, includes/Subject/SubjectSupplyFilter.php.

  • TOUR-01 — the source badge is bounded inside its own column instead of by a global override: the column-width and badge-wrapping declarations sit in ListTables::styles() at includes/Admin/ListTables.php:363, giving .column-qw_source a fixed share and its badge max-width: 100%, white-space: normal and overflow-wrap: anywhere.
  • TOUR-02 — the empty-state block no longer renders into div.tablenav.top. The manage_posts_extra_tablenav registration is gone; stage_empty_state is now hooked on admin_head-edit.php at :38, and :317-323 records why the not-found placeholder cell is the only seam core leaves between thead and the rows.
  • TOUR-11 — _n() replaces the fixed plural: subject rows at includes/Admin/DashboardPresenter.php:69-72, language rows at :94-97, and the supply notice at includes/Subject/SubjectSupplyFilter.php:159-162.
  • TOUR-12 — the displayed count is now the usable authority the filter uses. qw_usable_count is registered at includes/Subject/SubjectSupplyFilter.php:25-26 and :213-218 with the renderer at :227-259, which links through qw_valid=1 and degrades to an explained em dash at :239 when the payload never counted a subject. The core term-relationship total is relabelled Published items at includes/Subject/SubjectAdminUi.php:65-74, with :54-60 stating that it counts every attached post type and is not the usable authority.
  • 3.2.1-VIEWS — views_edit-qw_subject is registered at includes/Subject/SubjectSupplyFilter.php:24, so the taxonomy screen carries its own supply views.
  • 3.2.1-RUNS — the dashboard activity segment states each number’s event basis: the comment at includes/Admin/AdminStatistics.php:735-741, the primary label Finished attempts at :745, and secondaries that name their own basis at :752, :757 and :762.

Slice B — settings markup, commit 6a28df691d3aaa64eea2c1983a3b2a42faa98e84

One file: includes/Admin/views/settings-page.php.

  • 3.2.1-CEIL — eight repeated ceiling labels collapse into one shared explanation. The sentence and its id are declared at :378-379, rendered once with data-site-ceiling-help at :388, and referenced by aria-describedby from the four named controls at :396, :400, :427, :448 and the four generated completion actions at :461. The $toggle closure gained the optional $describedby argument at :26 and emits it at :31-32, so no control lost its accessible name and no data-path moved.
  • 3.2.1-SCOPE — every repeated state word is now qualified by its row object. The $qualified() closure is at :44-46; data-exposure-label is emitted on the state buttons at :49, the choice select at :65 and the matrix default at :69.
  • TOUR-15 — the literal Wizzard is gone from executable source. The heading now reads QuizWizz for visitors at :826 and the toggle’s accessible name matches at :833, with the provisional-spelling note recorded in-source at :825 pending the owner’s canonical-name decision. The other name variants were deliberately untouched.
  • TOUR-16 markup half — the danger row publishes its own state: data-qw-danger is computed server-side at :887-888, off while content is preserved and on when uninstall would delete. No data-path changed.
  • TOUR-17 — the four portability controls carry visible text beside their icons: Create export at :900, Import JSON at :902, Download at :908, Cancel job at :909. Their existing aria-label values are preserved verbatim. The original finding’s wording is corrected on the record: the accessible names always existed, the visible labels did not.

Slice C — settings script, commit ebf4f2c3253c81d18c01880b005bfe9f52e17ff6

One file: assets/js/qwizz-admin-settings.js.

  • TOUR-08 — a query that only names a section now collapses to a single fallback row. The rationale and the single-entry construction are at :1134-1149 and the crumb emission at :1202-1205; direct control hits are still listed individually.
  • TOUR-16 attribute tracking — the row’s state attribute follows the toggle client-side at :412-417.
  • TOUR-07 script half — the sticky offset is read from the custom property instead of a literal, cached at :996-1005.
  • FL-002 — portability polling is bounded and cancellable: the attempt counter at :1582 and :1634, the ceiling exit at :1609-1612, an AbortController per request at :1635-1636, and the terminal-status contract at :1622-1627, which mirrors the server’s own three-attempt cap.

Slice E — settings stylesheets, commit f02cba973792f65f243daf0990bb9f39bd084841

Four files: assets/css/qwizz-admin-responsive.css, assets/css/qwizz-admin-settings-core.css, assets/css/qwizz-admin-settings-layout.css, assets/css/qwizz-admin-settings-workspace.css.

  • TOUR-07 CSS half — one custom property is now the single source of the offset. --qw-settings-shelf-clearance and --qw-settings-scroll-offset are declared together at assets/css/qwizz-admin-settings-workspace.css:19-22; consumers read it at :139 and :442, at assets/css/qwizz-admin-settings-core.css:164 and at assets/css/qwizz-admin-settings-layout.css:1002-1003, and the mobile two-row case derives from it at qwizz-admin-settings-workspace.css:523-527. The four competing literals are gone, and :7-13 records which one actually applied and why the other three were dead weight. The two remaining 132px and 154px occurrences in the settings stylesheets are unrelated grid minmax() values, not scroll offsets.
  • TOUR-10 nav half — at 600 px and below the anchor strip becomes a fixed three-column grid that shows all nine sections at once, at qwizz-admin-settings-workspace.css:487-491; the horizontally scrolling row remains for wider widths at :100 and :395-401 with snap alignment at :396 and :409.
  • TOUR-16 CSS half — the destructive border is scoped to .qwizz-danger-row[data-qw-danger="on"] at assets/css/qwizz-admin-settings-core.css:1690-1692, with the reasoning at :1677-1681; the safe state computes a neutral border.

Slice H — block editor script, superseded then replaced, commit 33989f99a170fcac0913c0373e7591dfc4ddcec7

One file: assets/js/qwizz-block-editor-enhance.js. This slice was installed twice, and the first attempt is on the record because it reached the bench and mirror before review rejected it.

The first commit, 8494823bba27d2248a582c0f2dd4b6e0b2d352b5, implemented the wrong behaviour. It installed read-only editor chrome exposing each enhanced block’s saved source attribute and left TOUR-23’s duplicate Advanced panel in place, so the craft inspector still emitted a second PanelBody titled Advanced. Its Wave 11 assertion, block editor exposes source identity, defended that wrong behaviour. Neither is claimed as a TOUR-23 fix anywhere on this page.

The superseding commit 33989f99a170fcac0913c0373e7591dfc4ddcec7, Merge craft controls into existing inspector, removes the source chrome and merges the Advanced controls into the existing plugin panel — one file, 10 insertions and 97 deletions per qwgit.sh show --stat 33989f9, installed www-data:www-data 644. Installed source now emits exactly one PanelBody in craftInspector(), at :502-503, titled Builder profile, with the merged Content, Generation, Presentation, Player and Completion groups inside it at :519-748. A search for title: __( 'Advanced' in that file returns no matches.

The Wave 11 assertion was replaced in step: block editor removes duplicate Advanced panel, an assert_not_match against title: __( 'Advanced' at scripts/quizwizz-probe.sh:2885-2886. The wave still holds seventeen assertions at :2861-2894, so the full plan is unchanged at 1..93.

ItemEvidence
Wave 11 after the replacement1..17, green, reported by Main
Mutation pairrestoring the pre-slice baseline f02cba9 reddened only assertion 13, block editor removes duplicate Advanced panel; restoring the fix returned 1..17 green
Rendered proofMain selected the craft block via list view on a transient draft page 11670: one core German Erweitert panel button, zero injected English Advanced buttons, Builder-Profil open and holding the five merged groups. The fixture was deleted afterwards
Full --wave all after the replacement1..93, # assertions=93 failures=0, observed after both 33989f9 and the catalog commit f79feb6
Block-editor catalog delta, measuredI18nRefresh regenerated from 33989f9 on a clean tree: the block-editor script catalogs go 94 to 93 messages against the pre-drive baseline, the single net removal being msgid Advanced. That is TOUR-23’s contract made catalog-visible — the injected duplicate panel no longer emits its own title — without needing a browser. POT references for assets/js/qwizz-block-editor-enhance.js: 100 pre-drive, 106 under 8494823, 99 now
Nothing German was lostThe three source-chrome msgids Source, No quiz selected and Every subject are confirmed absent from the regenerated block-editor JSON. Source and Advanced survive in the PO and MO because other files still use them — Source at includes/Admin/ListTables.php:51, :57 and :288, and Advanced at includes/Admin/SettingsPage.php:70 and includes/Admin/views/settings-page.php:972. Catalog totals at 33989f9: 1655 entries, 0 untranslated, 0 fuzzy. Net German delivered by this drive is 36 new msgids, not 38, because No quiz selected and Every subject were authored under 8494823 and retire with it

Slice F — editor and finetune, commit b3ee3dfedb330a4d7fcfc9511e5140a9fab50ada

Seven effective files per qwgit.sh show --stat b3ee3df: three PHP views, three stylesheets, one script.

  • TOUR-04 — the answer-review and answer-sheet labels and their helper sentences are separate elements: includes/Admin/views/quiz-editor.php:8-15 and :16-22, each helper a span.description outside its label.
  • TOUR-05 — every choice row carries its own visible Correct flag at includes/Admin/views/question-choice-row.php:2, with the resting card and selected emphasis defined in assets/css/qwizz-admin-editor.css:3.
  • TOUR-06 — one helper sentence per question type is rendered and only the selected type’s sentence stays visible: markup data-question-type-help at includes/Admin/views/question-editor.php:8, script assets/js/qwizz-admin-editor.js:49-52.
  • TOUR-10 index half — the narrow-width question row keeps its visible index; assets/css/qwizz-admin-editor.css:8-9 keeps the position column in the 520 px grid instead of dropping it.
  • TOUR-10 count-column half — assets/css/qwizz-admin-subjects.css:344-378 force-keeps td.column-qw_usable_count visible in the compact row, labelling it from the native data-colname so no new string is introduced. Description, slug and the core Published items total stay hidden at :173-174. The two halves share no selector, so slice E’s earlier nav work was not disturbed.
  • TOUR-18 — the remove action reads destructive at rest, with the reasoning at assets/css/qwizz-admin-editor.css:113-116.
  • TOUR-19 — resting opacity is 1 and only a genuinely unavailable operation is muted: assets/css/qwizz-finetune.css:515-518 and :566-568.

Slice G — player and embed, commit 2327946d7442157ba4aef1bd3b10e5d9843f804b

Three files: assets/css/qwizz-empty.css, assets/js/qwizz-player.js, includes/Frontend/QuizEmbed.php.

  • TOUR-24b — the server-rendered pre-hydration shell carries the quiz’s stored presentation: data-theme is emitted at includes/Frontend/QuizEmbed.php:49, and :51-56 records why the site case drops the attribute instead of emitting it blank. JS reconciliation on start data is preserved and documented at assets/js/qwizz-player.js:384-388.
  • TOUR-20 — the locked-embed CTA gains the sibling button chrome at assets/css/qwizz-empty.css:18: inline-flex, a 44 px minimum height, padding, radius and --qw-action-bg. Source-grounded only; see residue.

Matched mutation pairs

Each pair restored the slice’s pre-slice mirror state through /tmp/qwfix, observed the W2 assertion red, then restored the fix and observed it green. The restore point is always the pre-slice sha, never the W0 baseline, so a batch-1 slice landing on a shared file is never silently un-shipped.

SlicePre-slice shaRed on restoreGreen after restore
Acf075304Wave 11 assertions 1, 5, 15 and 16 redall green; 20 of 20 source badges clear at 1280, document width 1265 within 1280, empty card in tbody and absent from the top tablenav
B92ea358all eight slice contracts redall green; safe preserve state off, 34 of 34 exposure names unique, one shared ceiling help referenced by 8 controls, no rendered Wizzard
C6a28df626 section matches, backoff marker false, abort marker false1 section match, both markers true, danger state cycles off to on to off
Eebf4f2c3 of 9 nav anchors visible, 923 px scrollWidth, safe row painted red9 of 9 visible, 343 px width equal to scrollWidth, neutral safe border and red destructive border
Hf02cba9assertion 13 block editor removes duplicate Advanced panel red, and only that one1..17 green; installed source emits one PanelBody titled Builder profile, and Main’s transient-fixture check saw one core German Erweitert panel button and zero injected English ones
F8494823Wave 11 helper assertions redgreen; 4 of 4 correct flags visible against a 1 of 4 baseline, 5 px helper gap with distinct styling, remove red against a grey edit action where the baseline painted both grey, Boolean switch shows only the Boolean helper and reduces to two choices
Gb3ee3dfWave 11 theme assertion redgreen; raw pre-hydration HTML for quiz 413 carried data-theme="love"

Install and lint facts

Every file was staged under /tmp/qwfix/<slice>/ and installed with sudo -n install -o www-data -g www-data -m 0644; no live file was edited in place and no ownership or mode was loosened. All twenty-two installed plugin paths verify as www-data:www-data 644:

includes/Admin/AdminStatistics.php            includes/Admin/views/settings-page.php
includes/Admin/DashboardPresenter.php         assets/js/qwizz-admin-settings.js
includes/Admin/ListTables.php                 assets/css/qwizz-admin-responsive.css
includes/Subject/SubjectAdminUi.php           assets/css/qwizz-admin-settings-core.css
includes/Subject/SubjectSupplyFilter.php      assets/css/qwizz-admin-settings-layout.css
includes/Admin/views/question-choice-row.php  assets/css/qwizz-admin-settings-workspace.css
includes/Admin/views/question-editor.php      assets/js/qwizz-block-editor-enhance.js
includes/Admin/views/quiz-editor.php          assets/css/qwizz-admin-editor.css
includes/Frontend/QuizEmbed.php               assets/css/qwizz-admin-subjects.css
assets/css/qwizz-empty.css                    assets/css/qwizz-finetune.css
assets/js/qwizz-player.js                     assets/js/qwizz-admin-editor.js

The five catalogs installed by the closing refresh verify the same way — languages/quizwizz.pot, languages/quizwizz-de_DE.po, languages/quizwizz-de_DE.mo and the two quizwizz-de_DE-*.json script catalogs, all www-data:www-data 644. Every changed PHP file was linted in the container with sudo docker compose exec wordpress php -l wp-content/plugins/quizwizz/<file>.php and every changed script was syntax-checked, clean in each slice’s token window. vendor/, build/, release ZIPs, provenance outputs, QUIZWIZZ_VERSION and db_data/ were untouched, and no schema or bootstrap wiring changed.

Mirror commits and push state

Nine commits on main, oldest first, on top of the pre-drive baseline cf07530. Seven slices produced eight commits because slice H was implemented wrong once and superseded inside the drive; the ninth is the closing catalog refresh:

ShaSubjectSlice
92ea35894f69df414a96b99971f323fe93cf0f22Repair admin list and supply metricsA
6a28df691d3aaa64eea2c1983a3b2a42faa98e84Clarify settings controls and danger stateB
ebf4f2c3253c81d18c01880b005bfe9f52e17ff6Bound settings polling and collapse searchC
f02cba973792f65f243daf0990bb9f39bd084841Make settings navigation and danger state clearE
8494823bba27d2248a582c0f2dd4b6e0b2d352b5Expose block source identity in editorH — wrong behaviour, superseded by 33989f9
b3ee3dfedb330a4d7fcfc9511e5140a9fab50adaClarify question editor controlsF
2327946d7442157ba4aef1bd3b10e5d9843f804bPreserve player theme before hydrationG
33989f99a170fcac0913c0373e7591dfc4ddcec7Merge craft controls into existing inspectorH — the accepted slice-H commit
f79feb6f4f31eb4d7c03ea6083bed181eeab1294Refresh German catalogs for repaired UIcatalogs

The initial authoring snapshot had an empty ./scripts/qwgit.sh status --porcelain and -sb reported ## main...origin/main [ahead 9]. The final 2026-08-31 readback reports ## main...origin/main: all nine commits are pushed through f79feb6. 8494823 stays in the history because it existed, not because it was accepted; 33989f9 carries the accepted slice H. Post-push Gitea state: #1, #3, #4, #7 and #8 closed; #2 open with deferred — corpus replacement inbound; #5 open for its owner decision because OpenRouter is unconfigured. Issue #6 had already closed on the 2026-08-30 choice-card repair.

FL-001 was refuted, not shipped

The assigned premise was that a request path leaves the subjects icon picker focus-trapped, so aria-modal="true" at includes/Subject/SubjectAdminUi.php:124 was untruthful. Installed source contradicts it. assets/js/qwizz-admin-subjects.js contains no HTTP or Promise request path at all — no fetch, no XMLHttpRequest, no apiFetch — only two window.requestAnimationFrame focus deferrals at :42 and :128. The picker already saves the background’s inert and aria-hidden state and sets both when opening at :121-125, restores exactly what it saved at :108-113, and returns focus to the trigger at :114.

Measured baseline behaviour with open and close in a single frame retained focus on the trigger and hid the panel. The proposed guard would have changed only a source marker, not observable behaviour, so the marker assertion that would have defended it was tautological and was removed from the browser suite rather than kept as green decoration. Gitea loca/quizwizz#3 is closed as not reproduced with its source premise false. No FL-001 change is installed.

Closing gates

GateCommand or methodResult
Full shell plan./scripts/quizwizz-probe.sh --wave all1..93, # assertions=93 failures=0, observed after the slice-H replacement 33989f9 and the catalog commit f79feb6
3.2.7 contract regression./scripts/quizwizz-probe.sh --wave 61..14, failures=0
Canonical subject-tree digest./scripts/quizwizz-probe.sh --wave 91..17, failures=0, digest byte-identical
Browser smokedurable Chromium suite, authenticated administrator, cache disabled37/37, restoration green, 0 console errors, 0 page errors
Debug windowwc -c logs/debug.log against the W0 origin7042962 bytes, identical to the origin — zero bytes appended across the drive, so no QuizWizz fatal, warning or database error was logged

The 37 browser assertions are 29 single-call checks plus the four-assertion public-Builder block at scripts/quizwizz-browser-smoke.js:148-151, which runs twice from :489-490. Wave 6 staying green matters because slice E edits the same stylesheet that carries the 3.2.7 choice-card contract from cf07530; that contract’s own closure record is the 2026-08-30 choice-card prepend fix.

Two harness observations belong here rather than in a summary. During the W1 truth round wave 8 failed 1 of 4 because its zero-question control quiz was missing; a probe-only draft 11622 with qw_question_count=0 was restored and wave 8 re-ran 1..4 with failures=0. Separately, a pre-existing mobile-nav smoke assertion at scripts/quizwizz-browser-smoke.js:288 required the anchor strip to scroll; after slice E it accepts either all tabs visible or an internal scroller, because the fix makes all nine visible at 390 px. Both are Main-owned harness changes, not product changes.

Residue and limits

Recorded rather than smoothed over.

  • TOUR-07 did not reproduce live on 2026-08-31 at either viewport. The offset consolidation shipped anyway as source-debt removal, and no live-defect claim is made for it.
  • TOUR-20 shipped as CSS only. No locked-quiz fixture exists on this bench, so the computed paint of the locked-embed CTA was never observed on the standalone route.
  • TOUR-19 shipped as CSS only. There was no live fine-tune fixture, so resting opacity is source-grounded and not browser-observed.
  • TOUR-23’s proof is narrower than the other rows’. The durable browser suite has no selected-block fixture, so what defends the duplicate-panel absence is the Wave 11 assert_not_match against source plus the measured catalog delta; the rendered observation Main took was on a transient draft page that no longer exists. A future regression would be caught by those two, never by a repeatable rendered check.
  • Translation catalogs caught up in a closing commit rather than inside a slice, and their proof stops at the catalog. Executable source carries zero Wizzard and, after f79feb6f4f31eb4d7c03ea6083bed181eeab1294, so do the installed catalogs — a search across languages/ returns no matches, and no site ceiling msgid survives either. The TOUR-06 helper sentence now has German at languages/quizwizz-de_DE.po:7347-7348, with the source reference at languages/quizwizz.pot:2585 pointing back to includes/Admin/views/question-editor.php:8, and its Boolean sibling still resolves. The commit touches five files: the POT, the PO, the MO and the two block-editor JSON catalogs. The installed MO measures 149895 bytes, mtime 2026-08-31 05:45:47, and holds 1,656 records including its header: all 1,655 message entries are translated, with zero untranslated and zero fuzzy; 36 new German msgids landed, and placeholder and PO/MO consistency checks are green. Two honest limits: the MO size must be re-measured rather than trusted from a first reading, because an in-flight check caught a 33181-byte partially written file that would have supported a false broken-catalog claim; and the German helper is verified in the catalog, not observed as rendered paint, because no cache-disabled Chromium pass was run after the catalog install.
  • The designer pass returned SHIP with zero visually proven regressions, but only two of its four assets were decidable. The settings captures arrived at 291 by 1024 and 200 by 1024, roughly 0.18 and 0.51 linear, so no designer verdict covers TOUR-07, TOUR-08, TOUR-16 on desktop, 3.2.1-CEIL, 3.2.1-SCOPE or the 390 px nav. Five of those six concerns retain their own shell or browser assertion; TOUR-07 rests instead on its measured non-reproduction, with the competing source offsets consolidated separately. The designer also measured 486 empty CSS px of a 1000 px player viewport, which keeps TOUR-24a inside its previously recorded band and owner-decidable. The full report and the owner-decision rows are on the 2026-08-31 corpus triage.
  • Slice screenshots and staged mutation files were bench-local /tmp artifacts. They are not retained in this vault, so every paint claim above rests on the computed-style measurements and the mutation pairs rather than on a stored image.

Live-fetch receipts

The vault content root is a symlink: /home/loca/dev/wikis/wrdp/content resolves to /home/loca/dev/wrdp/q5vault, so this page is part of the wrdp vault and is served by the wiki. Two production builds ran on 2026-08-31. The first published dist-1788151241.661169809-3726447, failed its live no-leak assertion on one route, and was rolled back to the pre-drive dist dist-1788129513.061920758-1839651 — the same target read at W0. The second, separately approved after that rollback, published dist-1788153309.461633591-3913543, which is what current names now. Every live observation in the first-attempt table below therefore describes the first dist rather than the served one; what the served dist itself returned is recorded once, in the post-republish receipt at the end of this page.

The thirteen table-cell wikilinks were re-fetched under the drive’s own build, which is the durable receipt the plan asked for. The five pages holding them — 2026-07-30-release-readiness.md:50, 2026-08-17-launch-readiness.md:50, 2026-08-27-canonical-handoff.md:26-29, ux-atlas-audit.md:87 and design/masterplan.md:66-70 — each returned HTTP 200 with zero literal [[. They render correctly and must not be escaped, and the three slash aliases in the ledger serve working redirects. The pre-drive fetch recorded in the approved plan reached the same result, and so did the sweep of the final dist-1788153309.461633591-3913543, so all three observations agree across all three dists.

W7 publish receipts

The first approved build published, failed its live assertion, and was rolled back

Every cell below is an observation of the first attempt, not an inference, and it stays on the record as history — including its dist dist-1788151241.661169809-3726447 and its repair cause, one genuine unresolved table-cell wikilink emitted by the masterplan’s own W9-07 row. The production build the owner’s standing answer authorised was consumed: it ran, it published, its live no-leak assertion failed on that single route, and current was restored to the pre-drive dist. The vault source was then repaired. A second production build was separately approved, has since run and has succeeded, but nothing in this table describes it: the current-dist observations are in the post-republish receipt that follows this table.

StepExpected observationResult
Pre-publish lint, end of W5umask 022 && ./build.sh wrdp --check-only exits 0passed: 79 files parsed, 840 emitted, exit 0
Pre-publish lint, end of W6umask 022 && ./build.sh wrdp --check-only exits 0passed: 79 files parsed, 840 emitted, exit 0
Production buildumask 022 && ./build.sh wrdp, one approved run onlyran once and succeeded: 79 inputs built to 840 emitted files. This consumed the single approved slot
Swap and permissionsreadlink wrdp/current names a new dist; stat -c '%A' wrdp/current/index.html is -rw-r--r--current named dist-1788151241.661169809-3726447 and the mode read -rw-r--r--, so the swapped tree was nginx-readable
Route sweepevery route under audits/qwizz/ returns HTTP 200, enumerated from the final vault72 of 72 enumerated routes returned HTTP 200 — the 70 pre-drive pages plus the two new dated records
This page liveHTTP 200 with its own H1 and zero unresolved wikilink syntax200 with its own H1 while dist-1788151241.661169809-3726447 was current. That dist is no longer served; the post-republish receipt records this page under the dist that is
Gate figure livethe 1..93 figure served on the current-state pagesserved on the current-state pages under that dist, which is no longer current
Named needlesevery needle named in the plan present on its own routeall present: Fix-loop era plus the newest wave heading on the changelog, the gate figure on now, both new dated titles on the audit index, Completion classes on the open-work ledger, the rewritten wave-table header on the masterplan, Wave 11 on the probe harness, completion class on shared language, and the EgoVersusRelay default on /operations
Live no-leak assertionzero unresolved wikilink syntax on every asserted routefailed on exactly one route. /audits/qwizz/masterplan served one genuine unresolved table-cell wikilink, emitted from its W9-07 row. Every other literal [[ in the built output was a deliberate code or regex example rather than broken syntax: 1 in the legacy WXR regex, 1 historical example on the tasklist, 3 historical examples in the changelog, and 3 in this page’s own expected-observation prose as it stood at build time
Table-cell wikilink re-fetchthe five pages named above return 200 with zero literal [[all five returned HTTP 200 with zero literal [[, matching the pre-drive fetch
Rollbackrestore current to the recorded target on any live failureexecuted immediately per the plan: current was pointed at dist-1788129513.061920758-1839651, the pre-drive dist, which the public wiki then served until the second approved build swapped it
Source repairfix the failing construct in the vault rather than work around it livethe masterplan W9-07 row became a Markdown link in source. It was still unpublished when this table was written; the second approved build published it
Republicationa second production buildapproved after this rollback and since run: it succeeded, and current now names dist-1788153309.461633591-3913543. Its own observations belong to the receipt below, not to this attempt-one table

The approval sequence matters for reading this table: the first attempt failed and was rolled back before any second approval existed, and the fresh approval arrived afterwards. The rows above are therefore complete and final as the record of attempt one, and no cell in them may be read as describing the second dist, its current, or its live assertion. Those belong to the receipt below, which records them exactly once.

Post-republish receipt — the served dist

Appended after the successful swap; source-only, not republished

Every line of this section was written after current had already been swapped to dist-1788153309.461633591-3913543, so the section is source-only: no third production build ran, none is claimed, and none is requested. That ordering is deliberate rather than accidental — the receipt has to describe a completed swap, so it cannot exist in the artifact it describes. The behaviour and routes recorded below were observed live on that final current dist before this text existed, which makes each row an observation rather than a projection. A reader checking the served page will find this prose only once some later, separately approved build publishes it, and until then the served copy of this page ends at the attempt-one table above while the source copy carries the full truth.

StepExpected observationResult
Approvala fresh owner approval for exactly one second production buildrecorded after the first attempt’s rollback, and spent by the build below. Nothing here asks for another
Pre-build lintumask 022 && ./build.sh wrdp --check-only exits 0passed: 79 Markdown inputs parsed, 840 emitted, exit 0
Second production buildumask 022 && ./build.sh wrdp, the one newly approved runran once and succeeded: the same 79 Markdown inputs built to 840 emitted files
Swap and permissionsreadlink wrdp/current names a new dist; stat -c '%A' wrdp/current/index.html is -rw-r--r--current names dist-1788153309.461633591-3913543 and the index mode read -rw-r--r--, so the swapped tree is nginx-readable
Route sweepevery route under audits/qwizz/ returns HTTP 200, enumerated from the final vault72 unique Markdown routes were enumerated from the final audits/qwizz/ vault and 72 of 72 returned HTTP 200 — the 70 pre-drive pages plus the two new dated records
Named needlesevery needle named in the plan present on its own routeall ten named needle routes passed: Fix-loop era plus the newest wave heading on the changelog, the gate figure on now, both new dated titles on the audit index, Completion classes on the open-work ledger, the rewritten wave-table header on the masterplan, Wave 11 on the probe harness, completion class on shared language, the EgoVersusRelay default on /operations, and each of the two new dated pages under its own H1
Live no-leak assertionzero unresolved wikilink syntax on every asserted routepassed: zero unresolved wikilink syntax outside code, pre, script and style across every enumerated route. The W9-07 construct that failed attempt one now serves as a rendered Markdown link. The changelog and this page still hold deliberate literal [[ examples, and every one of them sat inside a code element, which is precisely why the assertion is scoped to non-code content instead of to the raw byte
Table-cell wikilink re-fetchthe five named pages return HTTP 200 with a literal [[ count of 0all five returned HTTP 200 with a literal [[ count of 0: 2026-07-30-release-readiness, 2026-08-17-launch-readiness, 2026-08-27-canonical-handoff, ux-atlas-audit and design/masterplan. Their thirteen table-cell wikilinks render correctly on the served dist and must not be escaped
Debug windowwc -c logs/debug.log unchanged against the W0 origin7042962 bytes, byte-identical to the W0 origin pinned at the top of this page: publishing the vault touched no bench runtime
Third production buildnonenot run, not requested, not claimed. This receipt is the drive’s last edit and stays source-only

Read the two receipt tables together and the publication history is complete: one attempt consumed, one failure diagnosed to a single construct, one source repair, one fresh approval, one successful republish, and no unrecorded build in between. Nothing in either table changes the bench’s disposition — every fix this page describes is still bench-local and releaseEligible: false, the corpus, taxonomy and census rows are still deferred — corpus replacement inbound, the issue dispositions are unchanged, and publishing a wiki page has never been a canonical release.