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.
- Set Master Volume to 0.42; verify reported value and state.changed.
- Set Master Mute true; verify reported value.
- Set Observation Viewport Active true, then false; verify reported values and native exhibit behavior within its single frame.
- Select Active Audio Preset / Interprise-G: Main Engineering; verify preset.selected and related changes share one resulting revision.
- Invoke Comm Badge Chime; verify action.executed (acceptance, not audio fidelity).
- Invoke Demat Cycle Impulse while in Starfleet; expect CAPABILITY_UNAVAILABLE.
- Select Active Sci-Fi Universe / Whataverse / Tardix, then invoke Demat Cycle Impulse; verify action.executed in that context.
- Inspect Speak Text Line and Display Ticker Message descriptors. A conformant
version declares an
argumentsarray 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. - 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.
- 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.