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

148 lines
8.7 KiB
Markdown

# 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:
```powershell
$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:
```powershell
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.