# Verification report and browser handoff

Version 2026-10-14.1 · checked 2026-10-14

## Release status
A complete, reviewable teaching package with source-level and Node verification. It is not yet browser-accepted, classroom-piloted or integrated into a live website. Do not infer browser behavior from Node or static-check results.

## Executed checks
- 51 Node tests passed using Node 24.19.0: pure labels/filter/toggle rules, fixture validation, impossible dates, fetch success/HTTP/network/parse/shape failures, storage corruption/access/write/clear failures, ID deduplication and delayed catalog reconciliation.
- All 21 JavaScript files passed node --check syntax verification, including the intentionally incomplete learner starter and browser harness files.
- Versions 01–05 executed in isolated Node VM contexts; observed Console values matched their documented numeric/string/collection results. This checks language execution, not their browser loading.
- Static HTML links/resources, fragment targets, language/title presence, duplicate IDs, fixture JSON and SVG XML were checked using tests/static_checks.py. See verification.json for the exact final counts.
- The four original teaching diagrams were rendered with Inkscape and visually inspected for readable labels, unclipped content and meaningful flow. This is asset-level visual QA, not page-layout verification.
- All 24 primary references were opened during preparation on 2026-10-14. No external images, fonts, scripts or API calls are required by the demos.

## Independent content and code review
All ten narratives and the examples, practice tasks, solutions and capstone received an independent review. It found substantive beginner explanations rather than topic-only coverage. Corrections included stable toggle labels, a preserved negative-count guard, explicit native/custom form-validation ordering, a guarded storage example, accurate accumulator scope practice, and preservation of saved IDs when an empty fixture loads before the normal catalog.

The final review found no remaining substantive defect within its inspected scope. It reran all 51 Node tests. It also confirmed that learner.html imports starter/core.js and that the unfinished starter passes only 5 of 19 checks, so initial failures are intentional. Reference test success does not certify learner work.

## Not executed in this packaging environment
Actual browser page loading, DOM interactions, keyboard behavior, native form bubbles, browser storage policy behavior, viewport layout, console/network acceptance and screen-reader output remain unverified. Direct Chromium startup failed under cloud sandbox socket restrictions; an escalated command failed with an environment-level bwrap error. A locally started server was not reachable from a separate tool command. The available cloud browser restricts local-file navigation. No restriction was bypassed, no public site was published and no user computer was used for this package.

Firefox, Safari, real mobile devices, 200%/400% zoom, print layout and assistive technologies have not been tested. The course has not had a human beginner pilot. Timing estimates and rubric thresholds are provisional. The supplied browser harness has syntax verification only; its output must be collected in an authorized browser environment before claiming it passed.

## Browser acceptance: exact starting steps
Extract the ZIP and serve its root on an authorized computer with `python3 -m http.server 8000 --bind 127.0.0.1` (Windows: `py -m http.server 8000 --bind 127.0.0.1`). Open http://127.0.0.1:8000/. Record operating system, browser and version. Use only fictional data. Test on a disposable local origin; do not use a signed-in external site.

Open tests/reference.html. Expected: 19/19 reference rule checks. Open tests/learner.html before editing the starter. Expected: 5/19 checks on the intentional TODO implementation; after a correct learner checkpoint 1, expect 19/19. These pages must not be confused.

Open tests/browser.html and activate Run browser checks. Expected: all displayed checks pass, with no “Harness stopped” or restore-storage failure. Save the exact summary and console output. The harness checks the supplied reference and restores its original app storage key. It does not certify the learner implementation. Intentional invalid fixtures produce expected error logs; distinguish them from unexpected exceptions.

## Manual browser cases and expected results
- Open each version 01–10. Versions 01–05 print the supplied expected values. Version 06 starts with three cards and filters to one per category. Version 07 rejects invalid synthetic fields and stays local on success. Version 08 displays seven places and no assertion failure. Version 09 recovers from all deliberate failure fixtures. Version 10 saves only its fictional event ID and clears only its own key.
- Open capstone/reference/index.html. Expected: six cards, three category options plus All, and an explicit practice-only notice.
- Type “ GARDEN ” in title search. Expected: one Garden morning result. Select Creative without clearing it. Expected: no matching events. Clear search. Expected: two creative cards. No unexpected focus move from the active filter.
- Reset category to All and activate Save Garden morning. Expected: the same button remains focused when keyboard-activated; its accessible label remains “Save Garden morning”; aria-pressed becomes true; status explains browser-only saving. Reload: the pressed choice is restored.
- Enable Saved only, then toggle the Garden save button off. Expected: its card disappears, the empty message appears and focus moves to Saved only if the removed card had focus. No keyboard trap.
- Try blank and whitespace-only names, malformed email and no event. Expected: no practice success. Correct to Demo Visitor, demo@example.com and Garden morning. Expected: a local success message that explicitly says nothing was sent, stored or booked.
- Inspect Network while submitting the valid synthetic form. Expected: no form request/navigation carrying field values. Inspect the app's storage key: only event IDs, never name/email. The full Repair café option is disabled; a tampered full/missing ID must not produce success.
- Choose Empty fixture. Expected: successful load with a distinct empty message and no cards. Choose Wrong structure, Malformed JSON and Missing file. Expected: failure status, no stale cards, retry controls enabled. Return to Normal after each failure. Expected: six cards again.
- Choose Markup-like title. Expected: angle-bracket text displayed literally; no image or injected handler appears in the card. Return to Normal.
- Put invalid JSON under harbor-together.saved.v1 in the local browser's storage inspector and reload. Expected: warning and a usable finder, not a crash. Clean up only this key afterward.
- Where browser controls permit, deny persistent storage on this local origin and retry Save. Expected: in-memory saved choice and a warning that reload may lose it. If only the supplied throwing-provider simulation is available, label that evidence simulated rather than a real browser-policy test.
- Regression case: save Garden morning, then temporarily rename events.json on the local test copy so the initial load fails. Load Empty, restore events.json, then load Normal. Expected: the previous Garden saved state survives. Restore the original filename before completing acceptance.
- With JavaScript disabled, the static baseline remains readable; the capstone shows static practice cards and a message that the interactive finder needs JavaScript. Its practice submit control stays disabled. Version 07's native fallback sends no field values because controls have no name attributes.

## Visual and accessibility acceptance
At 1280px and about 390px viewport widths, inspect all course navigation, each diagram, long code blocks and the capstone. Expected: readable content without page-wide clipping; horizontal scrolling is limited to code where necessary. Check browser zoom at 200% and 400% with no lost content or controls. Verify focus indicators and contrast in the actual rendered pages.

Use Tab, Shift+Tab, Enter, Space and native select keys. Confirm every action is reachable, labels are associated and focus remains predictable. With a screen reader, check heading order, result/status announcements, pressed-state announcements and correction messages. Automated DOM checks do not replace these steps. Review any live-site integration for its own inherited styles, scripts, storage keys and routing before approval.

## Classroom pilot
Ask at least one true beginner to complete setup, a function exercise, a DOM exercise and the capstone first checkpoint without the reference. Record points of confusion and actual timings. Revise explanations and pacing before making duration or learning-outcome claims. A code review cannot establish instructional effectiveness by itself.
