Files
XZBT-NGN/test-fixtures/STEP5-VERIFICATION.md
T
2026-09-14 13:01:45 -07:00

8.7 KiB

Step 5 repeatable verification

Latest rerun (2026-09-14): the corrected SciFi text targets pass through the normal UI; NGN tests pass 25/25. The browser gate currently fails at 2/3 on Haunted House's haunt-level step, and publishing validation still fails. See completion report Q.

Run from the NGN repository root with Node.js 22+. Use npm start and the normal UI at http://127.0.0.1:4173/. No npm install, build, source edit, external mount, or test harness is required for operator use. Use the same origin/port for every exhibit. npm test runs the automated tests.

External SciFi-XZBT preparation

SciFi-XZBT is supplied separately. The run recorded here used the actual working copy at G:/.vibe/SciFi-XZBT, whose HEAD was 179b9db715aaa92999c5bfef451b6877f30079fe with local changes and untracked contract files. This is NOT evidence for that commit alone or for a released dist build. The original SHA-256 manifest evidence/step5-scifi-files.json identifies the initial 12 files tested. The authorized follow-up corrected the external adapter's two argument descriptors and matching validator. Its fresh copy is identified by evidence/step5-scifi-arguments-files.json; all 12 source/copy hashes match.

For this source layout, copy the runtime entry point and its relative assets without modifying them. Use a fresh destination name when repeating with a newer copy, to avoid mixing versions:

$exhibitSource = 'G:/.vibe/SciFi-XZBT'
$exhibitDestination = 'test-fixtures/local/scifi-arguments'
New-Item -ItemType Directory -Path $exhibitDestination
Copy-Item -LiteralPath (Join-Path $exhibitSource 'index.html') -Destination $exhibitDestination
Copy-Item -LiteralPath (Join-Path $exhibitSource 'js') -Destination $exhibitDestination -Recurse
Copy-Item -LiteralPath (Join-Path $exhibitSource 'css') -Destination $exhibitDestination -Recurse

test-fixtures/local/ is ignored by Git. Do not copy the external repository's credentials, .git, or development tooling into a served directory. A future self-contained distributable can instead be placed under public/ unchanged. The tested source copy uses only index.html, js/ and css/ for this workflow.

Enter /test-fixtures/local/scifi-arguments/index.html in the normal NGN UI, then select Load exhibit. Expected identity: SciFi-XZBT 5.2.0, Contract 5.2, 61 discovered targets. Inspect Session and exhibit metadata and Current persistent state. Controls below refer to labels discovered from this copy; they are test instructions, not product configuration.

  1. Set Master Volume to 0.42; verify reported value and state.changed.
  2. Set Master Mute true; verify reported value.
  3. Set Observation Viewport Active true, then false; verify reported values and native exhibit behavior within its single frame.
  4. Select Active Audio Preset / Interprise-G: Main Engineering; verify preset.selected and related changes share one resulting revision.
  5. Invoke Comm Badge Chime; verify action.executed (acceptance, not audio fidelity).
  6. Invoke Demat Cycle Impulse while in Starfleet; expect CAPABILITY_UNAVAILABLE.
  7. Select Active Sci-Fi Universe / Whataverse / Tardix, then invoke Demat Cycle Impulse; verify action.executed in that context.
  8. Inspect Speak Text Line and Display Ticker Message descriptors. A conformant version declares an arguments array and NGN shows its text field. Enter text and invoke; verify acceptance/event. The corrected copy passes this check: both fields appear and action.executed contains the exact submitted args.text. Speech declares maxLength 2000, ticker 512, both required strings. Correct the external source before copying; do not add a host workaround or patch only the served copy. The original copy's legacy args.text failure remains in old evidence.
  9. Inspect Incoming events: source, correlationId, monotonically increasing sequence and stateRevision. Reconnect while attached: new session, cleared event log/sequence baseline, same exhibit state and revision.
  10. Disconnect: no frame/catalog/cache remains. Reconnect: URL reloads, a new instance and session are discovered. Initial state/revision may differ from the removed instance. No source changes required.

Classify failures before changing NGN: host defect, external exhibit contract defect, conformant but awkward behavior, or environment limitation. Sound acceptance/events are covered; audible output and optional AI downloads are not certified. Text-argument failure blocks Step 5 acceptance.

Reference regression through the normal UI

Use these paths, changing only the URL field:

Exhibit URL Representative operations
Aquarium /test-fixtures/reference-exhibits/aquarium/index.html Population 16, Paused true, Species Blue Tang, Feed
Planetarium /test-fixtures/reference-exhibits/planetarium/index.html Azimuth 0.75, Sky frozen true, Constellation Cygnus, Advance time with Include minutes checked and minutes 30
Haunted House /test-fixtures/reference-exhibits/haunted-house/index.html Haunt level 0.5, Held true, Room Library, Manifest

Inspect reports and events, reconnect and confirm a new session. Disconnect and reload the remembered URL. Aquarium and Planetarium pass the representative flows. Haunted House emits Manifest's action event, but during the effect a snapshot can contain a haunt-level value off its declared 0.01 step; NGN reports INVALID_MESSAGE and preserves its previous cache. This is a pre-existing fixture limitation, not a new host regression. No fixture repair was made in Step 5.

The existing transport suite at /test-fixtures/host-verification.html remains a separate regression check: select Run verification, expect 3/3, and save the visible timestamped text or browser console output. The latest rerun produced 2/3, failing Haunted House's step validation. Its first impulse with no capability requirements is Manifest, and the fixture's continuous drift can also produce off-step snapshots. The earlier statement that this suite avoids Manifest was incorrect. Do not reinterpret a historical 3/3 as the current result or as complete fixture conformance certification.

Failure and cancellation checks

  • Start with no URL: useful disconnected controls/empty catalog.
  • Enter an off-origin URL: reject and preserve the current exhibit.
  • Enter a missing local URL: document-load timeout (15 seconds in the checked browser), or hello timeout (5 seconds if an error page finishes loading). Enter a valid path to recover.
  • Disconnect during loading or switch rapidly: old frame load callbacks must not attach to the new exhibit. Focused automated lifecycle tests cover this.
  • Refresh state reads current values. Logs can be cleared; prior diagnostics are timestamped and do not imply the current connection is failed.

Evidence and repeatability limits

evidence/step5-reference-suite.txt is the actual timestamped browser suite output. step5-scifi-session.json contains the actual discovered catalog, session metadata, events and failures. The three reference JSON files contain DOM-rendered runtime metadata/events; Haunted House also includes its errors. step5-operator.jpg shows the operator panel. Evidence was captured in local Chromium on 2026-09-14.

A fresh npm start succeeded on port 4175 because an existing service occupied 4173; the final browser transport suite ran on that fresh process. The normal UI ran on 4173. No separate pristine checkout was created; tests/startup use the current source tree without build products. SciFi repeatability requires the external files described above. Repository publishing validation has an existing malformed trailing record block in the Post Step 4 Completion devlog; see report.

Follow-up evidence is separate from those historical artifacts: step5-scifi-arguments-ui.json captures the corrected descriptors, text fields, and successful events; step5-scifi-arguments-files.json identifies the tested working copy; step5-acceptance-rerun-browser.txt records the current 2/3 failure. step5-scifi-arguments-ui-final.json records the repeated checks after line-ending cleanup, including a draft reset on speech capability rediscovery and successful ticker resubmission with the exact intended text. The follow-up started a fresh server on 4173 and performed the requested narrow SciFi checks, rather than repeating every earlier operator case above.

The optional external validator regression check is:

node test-fixtures/check-scifi-arguments.cjs G:/.vibe/SciFi-XZBT/js/contract-adapter.js

It checks descriptor arrays, required/type/unknown-key/length rejection before execution, maximum-length acceptance, and unchanged argumentless behavior. It supplements the real operator UI checks; it does not replace them.