Document Step 6.7 packaging verification

This commit is contained in:
2026-09-15 07:20:44 -07:00
parent 745912e451
commit 9884a5beb2
5 changed files with 465 additions and 16 deletions
+10 -4
View File
@@ -13,6 +13,10 @@ pass. Haunted House reports conformant values, and publishing validation passes.
Steps 6.16.3 established Contract 5.3 surface discovery and interoperability.
Step 6.4 adds local presentation panes; see the
[Step 6.4 report](docs/architecture/XZBT-NGN-Step6.4-Local-Surfaces.md).
Step 6.6 validates the reference exhibits, and Step 6.7 adds the SciFi-XZBT
Observation surface, including regenerated packaged-build verification; live
NGN Observation verification remains outstanding — see the
[Step 6.7 closure report](docs/reference/XZBT-NGN-Step6.7-Closure-Report.md).
## Run locally
@@ -120,10 +124,12 @@ tracking, reconnect and synchronization recovery. It has in-memory state only;
logs retain 200 entries. Idle polling is not enabled. The last connection URL is
remembered only until the page is reloaded. Contract 5.3 presentation-surface
discovery and local rendering (Section 31) are implemented and exercised by the
Museum Gallery reference exhibit; other maintained exhibits do not declare
multiple surfaces. Surface errors stay within the affected pane. Remote/cast
display assignment remains deferred. Shared-state synchronization proof remains
Step 6.5; this step adds no host-side surface communication.
Museum Gallery reference exhibit, and the SciFi-XZBT reference exhibit declares
a console surface plus an Observation surface (Step 6.7B); the other maintained
exhibits do not declare multiple surfaces. Surface errors stay within the
affected pane. Remote/cast display assignment remains deferred. Shared-state
synchronization proof remains Step 6.5; this step adds no host-side surface
communication.
Not implemented: casting/display endpoints, MIDI, MCP/webhooks,
scenarios/recording, telemetry acquisition, multi-exhibit orchestration,
@@ -0,0 +1,232 @@
# XZBT-NGN Step 6.7 — Closure Report
**Status: not fully closed.** As of 2026-09-15, Step 6.7's implementation, its
handshake defect resolution, the automated baseline, and the packaged
standalone-build verification are complete. The live NGN Observation
verification (Step 6.7B report §15, steps 113) has not been performed and is
the only remaining item. Step 6.8 has not been started.
- Step 6.7A (design, no code): [architecture report](../architecture/XZBT-NGN-Step6.7A-SciFi-Observation-Surface.md)
- Step 6.7B (implementation): [implementation report](XZBT-NGN-Step6.7-SciFi-Surface-Adaptation.md)
- Packaging evidence: [step6.7-packaging.txt](../../test-fixtures/evidence/step6.7-packaging.txt)
- Fixture provenance: [PROVENANCE.md](../../test-fixtures/PROVENANCE.md)
## 1. What this report closes
Three items were outstanding when the 6.7B session ended; all three are now
closed:
1. The five failing `tests/postmessage-interop.test.js` tests (the "handshake
gating mismatch") — resolved 2026-09-15, committed in `745912e` (§3).
2. The packaged standalone-build verification (6.7B report §K.14) — performed
2026-09-15 (§4).
3. Source/fixture provenance for the SciFi-XZBT fixture — re-verified, and
extended with the packaging record (§5).
Not closed by this report: live browser verification of the Observation
surface through NGN (6.7B report §15, steps 113) — see §9.
## 2. Step 6.7 delivery summary
SciFi-XZBT remains one document with two boot modes (`js/surface-mode.js`),
advertising a Contract 5.3 Observation presentation surface as a query-mode
view of its own `index.html` (`?surface=observation&xi=<instanceId>`, the
§31.4 form that keeps the surface inside the single-file build). Console mode
owns the single Contract 5.3 session, the one authoritative SciFi state, and
an instance-scoped `BroadcastChannel` bridge (`js/surface-bus.js`); an
Observation document attaches to that authority and never creates a second
one. Two new canonical targets (`view.pillars`, `view.warp-flight`) carry the
surface control path, and the heavy subsystems (WebLLM/Kokoro experience,
visualizer, control bus, contract adapter, hotkeys, sleep timer) remain
console-only, guarded by `isConsoleMode`.
NGN `src/**` was not modified by Step 6.7B: NGN renders whatever surface
catalog `describe()` advertises, generically. New focused coverage from 6.7B
is `tests/scifi-surfaces.test.js` (24 tests) and `tests/local-surfaces.test.js`
(20 tests, one driving SciFi's real descriptors); both are part of the
full-suite run recorded in §7.
## 3. Handshake defect: root cause and correction
**Root cause.** `js/contract-adapter.js`'s `_setupWindowBridge` admitted
inbound messages only when the advisory envelope field matched exactly:
`… e.data.xzbt !== '5.2'` → return. NGN's host stamps outgoing envelopes
`xzbt: '5.3'` (`src/host.js`, since Step 6.3). The adapter therefore silently
dropped the host's `hello` and every message after it; NGN's request timeout
produced four `hello timed out` interop failures. The fifth failure was the
existing static regression guard doing its job: an exact-string comparison
against the advisory field existed in a maintained file.
**Contributing defect.** The same adapter advertised `contractMinor = 2` and
product version `'5.2.0'` while already implementing the Contract 5.3-only
`surfaces` field in `describe()`, so the two interop assertions expecting
`contract.minor === 3` could not pass either.
**Correction** (in `G:/.vibe/SciFi-XZBT/js/contract-adapter.js`, then copied
verbatim into the fixture): the inbound filter now checks only the advisory
field's presence and type (`typeof e.data.xzbt !== 'string'`) — matching the
host's own envelope validation — and the adapter advertises
`contractMinor = 3` / `version = '5.3.0'`. Four lines in one file changed:
the header comment, `version`, `contractMinor`, and the filter. The outbound
advisory `xzbt: '5.2'` stamps were deliberately left unchanged (advisory
only; no receiver gates on the value; SciFi's own browser harness reads the
envelope as-is).
**Coverage.** The fix's behavior is pinned by `tests/postmessage-interop.test.js`'s
static guard ("no maintained bridge source gates on exact equality against the
advisory `xzbt` field") plus its two behavioral regression tests that
negotiate an *unexpected* advisory tag — the same tests that were failing.
No test was added or weakened for this correction.
## 4. Packaged standalone verification (this pass)
`tools/package.ps1` was run against the SciFi-XZBT source tree
(`powershell -ExecutionPolicy Bypass -File .\tools\package.ps1 -Force`, exit
code 0). It regenerated `dist/SciFiAmbientDisplay_V179b9db.html`, replacing a
pre-6.7B build (SHA-256
`B441820627D3FB23994D129B7425D781797E705867AC02967F96846B243435D4`; a
byte-identical copy of that pre-6.7B content is retained as
`dist/SciFiAmbientDisplay_Va723f46=1.html`). The new artifact:
- 920,730 bytes; 12 script blocks + 1 style block inlined
- SHA-256 `DFD9A91CB04CABD7BD6AAA53DA0FA7A641DBB21E3B3E11FAF3EC75946D6FA271`
- mirrored verbatim into `test-fixtures/reference-exhibits/scifi/dist/`
(both copies byte-identical)
Verification performed on the regenerated artifact:
- **Inlining** (6.7B report risk R7: inlining failure is silent): every one of
the 13 inputs is present as a contiguous byte-identical block after newline
normalization; the built file contains zero `<script src=`, `<link href=`,
or `<img src=` references; the two 6.7B scripts are inlined in `index.html`
order; the corrected handshake filter is present and no exact advisory
comparison remains anywhere in the file.
- **Standalone boot (`file://`)**: loads complete with 12 inline scripts
(none with `src`), zero `<link>` elements, and one inlined stylesheet; the
console UI renders (universe selector, 7 preset buttons, themed layout,
canvases); `window.xzbtContractAdapter` advertises contract 5/3, version
`5.3.0`, and the two-entry surface catalog.
- **Handshake over the served path**: served from
`http://127.0.0.1:4173/test-fixtures/reference-exhibits/scifi/dist/…` — the
same origin and tree NGN serves fixtures from — a same-origin host
simulation stamped `xzbt: '5.3'` completed `hello``describe`
`state.get`: contract `{major: 5, minor: 3}`, exhibit version `5.3.0`,
63 targets, both surfaces, and a state snapshot. This is precisely the
exchange the pre-fix build silently dropped.
- **Boundary observed**: from `file://` the same probe gets no reply, because
the adapter's origin guard rejects it (Chrome reports `e.origin` as
`"null"` for `file://` documents). That is the designed same-origin/self
safety filter — NGN attaches exhibits over `http://` only — not a defect,
and it was not changed.
Filename caveat: the artifact's name carries SciFi-XZBT's HEAD commit
`179b9db`, but the build reads the working tree, which is ahead of that
commit (that repo's contract work, including the adapter correction, is still
uncommitted there — §9). The artifact is a snapshot of the working tree, not
of a single commit.
Environmental note: an `npm start` server was already running on
`http://127.0.0.1:4173` and served the artifact; this pass neither started
nor stopped a server.
Raw outputs: [step6.7-packaging.txt](../../test-fixtures/evidence/step6.7-packaging.txt).
## 5. Source/fixture provenance check
Re-verified after the packaging pass:
- `test-fixtures/reference-exhibits/scifi/` and `G:/.vibe/SciFi-XZBT/` are
file-set identical for the deployable surface: the 13 `js/` + `css/` files
and `index.html`, no extras and no omissions, every file byte-identical
(per-file SHA-256 comparison).
- The regenerated `dist/` artifact is mirrored byte-identically (§4).
- The handshake correction is present in the authoritative adapter and the
fixture copy alike; the one-directional source → fixture flow, including
this packaging pass, is recorded in
[PROVENANCE.md](../../test-fixtures/PROVENANCE.md).
- One cosmetic artifact is mirrored along with the content: `index.html`
carries trailing whitespace on four script lines added by 6.7B. It predates
this pass, is byte-identical in both trees, and was left unchanged to
preserve that byte-identity.
## 6. Contract-policy confirmation
- Maintained contract: **major 5, minor 3**. NGN's host stamps the advisory
`xzbt: '5.3'` and admits exhibits on the negotiated contract fields
(`supportedContractMajors`, `contract.major`, integer `contract.minor`).
- The advisory `xzbt` field is **not** a compatibility gate anywhere in
maintained paths: a repo-wide static scan for exact comparisons against it
returns zero hits in `src/`, `tests/`, `public/`, `server/`, and the
maintained reference exhibit sources (generated `dist/` builds and the
git-ignored `test-fixtures/local/` copies excluded; the retained pre-6.7B
artifact still contains the old comparison but is a build, not a maintained
source path).
- Maintained exhibits advertise 5/3: the shared `contract-core.js` default,
Museum Gallery, and SciFi-XZBT. Aquarium, Haunted House, and Planetarium
declare no surface catalog (optional per §31; unchanged by 6.7).
- Compatibility with a genuine 5.2 exhibit remains the contract's own §28.2
guarantee and was not altered; no maintained exhibit is pinned to 5.2.
## 7. Verification totals (2026-09-15)
| Check | Result |
| --- | --- |
| NGN full suite (`node --test`) | **154 / 154** pass, 0 fail, 0 skipped |
| `tests/postmessage-interop.test.js` | **7 / 7** (was 2 / 7) |
| `tests/scifi-surfaces.test.js` (inside the full run) | 24 / 24 |
| `tests/local-surfaces.test.js` (inside the full run) | 20 / 20 |
| SciFi-XZBT contract harness | 21 / 21 |
| SciFi-XZBT real-adapter suite | 32 / 32 |
| `python devlog_editor.py --validate` | devlog is valid |
| `git diff --check` | clean for this pass's files |
| Packaged artifact, structural + runtime | §4 above |
## 8. Files changed by this closure pass
Documentation, evidence, and generated artifacts only (left uncommitted; no
commit was requested):
- `test-fixtures/PROVENANCE.md` — packaging record added; two stale statements
corrected (the resync's version-bump claim; the "dist/ not regenerated" note)
- `README.md` — Step 6.7 status line added; the SciFi surface declaration
corrected (it now declares two surfaces)
- `docs/reference/XZBT-NGN-Step6.7-SciFi-Surface-Adaptation.md` — dated status
updates in the header, §H, §J, §M, and the verdict
- `docs/reference/XZBT-NGN-Step6.7-Closure-Report.md` — this report
- `test-fixtures/evidence/step6.7-packaging.txt` — raw verification outputs
- `test-fixtures/reference-exhibits/scifi/dist/SciFiAmbientDisplay_V179b9db.html`
— regenerated (git-ignored artifact)
- `G:/.vibe/SciFi-XZBT/dist/SciFiAmbientDisplay_V179b9db.html` — regenerated
(outside this repository)
The handshake correction that this report closes was committed earlier as part
of `745912e` ("Steps 6.4-6.7B …"), pushed to `origin/main`.
## 9. Remaining work
**Step 6.7 remains open for one item: live NGN Observation verification**
(6.7B report §15, steps 113). Not performed in this pass:
1. Connect NGN to the SciFi fixture; confirm connected · synchronized, Contract 5/3, and the target catalog.
2. Confirm the Surfaces panel lists exactly two entries (`surface.console` primary, no Open button; `surface.observation`).
3. Open the Observation pane; confirm it renders the current universe/preset within ~1 s, shows no exit chrome, and is inert to background clicks.
4. Confirm the console does not black out and `view.observation` stays `false`.
5. Drive `set` from NGN for the seven listed targets (universe, preset, alert, viewport frame, activity, pillars, warp-flight); confirm both surfaces converge with advancing `stateRevision`.
6. Reload the pane; confirm it returns to current (not default) state, and close/reopen does not ratchet the participant count.
7. Press WATCH EXPERIENCE; confirm the pane is unaffected and `view.observation` toggles only the console overlay.
8. Inspect the pane's frame: no WebLLM/Kokoro network activity, no `window.generativeExperience`, no `AudioContext`.
9. Confirm transient activity events and AI announcements appear on console and pane at the same moment.
10. Disconnect/reconnect NGN; confirm clean pane release and rediscovery.
11. Standalone `index.html` opened directly with interaction (hotkeys, WATCH EXPERIENCE, audio) — only the packaged boot is evidenced so far (§4).
12. Standalone two-window mirroring (`index.html?surface=observation&xi=<real id>` with no NGN present).
13. `?surface=observation&xi=nonexistent` alone; confirm a waiting state with no invented authority.
Also outstanding, by design and outside Step 6.7:
- Step 6.8 has not been started.
- SciFi-XZBT's working tree remains uncommitted (its contract work, including
the adapter correction, is untracked in that repository); the packaged
artifact therefore reflects an uncommitted tree. A decision on committing
that repository is pending.
- The retained pre-6.7B artifact `dist/SciFiAmbientDisplay_Va723f46=1.html`
should not be distributed.
@@ -1,9 +1,10 @@
# XZBT-NGN Step 6.7B — SciFi Observation Surface Implementation
Status: PARTIAL PASS. Implementation, focused tests, and full NGN test suite are
complete against a pre-existing, out-of-scope defect. Live browser verification
(report §15) and the standalone packaged-build check were not performed in this
session.
Status: PARTIAL PASS at the time of writing. Superseded 2026-09-15 by the
[Step 6.7 closure report](XZBT-NGN-Step6.7-Closure-Report.md): the handshake
defect recorded in §J/§M is fixed (full suite now 154/154) and the standalone
packaged-build check in §H/§K.14 has been performed. Live NGN browser
verification (report §15, steps 113) remains outstanding at that date.
Step 6.7B implements the architecture selected by Step 6.7A (design-only, no
code changes) — Candidate A, narrow form: SciFi-XZBT remains one document, one
@@ -120,6 +121,10 @@ Deviations, below) — narrative timing is shared, exact pixel content is not.
## H. Standalone verification
Update (2026-09-15): performed — see the closure report and
`test-fixtures/evidence/step6.7-packaging.txt`. The paragraph below retains the
pre-verification state of this session.
Not run live in this session (see §K). By construction: `index.html` with no
query string resolves to console mode via `js/surface-mode.js`'s `resolve()`,
which is unchanged from today's single-mode behavior for that input, and no
@@ -145,6 +150,10 @@ step (source → fixture), matching the procedure Step 5 used.
| `tests/local-surfaces.test.js` | 20/20 pass |
| Full NGN suite (`npm test`) | 149/154 pass |
Update (2026-09-15): full suite **154/154** and `tests/postmessage-interop.test.js`
**7/7** — the five failures are resolved (see the closure report). The
paragraphs below are retained as this session's historical record.
The 5 failures are all in `tests/postmessage-interop.test.js` (`hello timed
out` ×4, one regex check), and are **not** caused by this step's changes.
Root cause: `contract-adapter.js`'s `_setupWindowBridge` gates inbound
@@ -188,8 +197,8 @@ remain to be run manually:
## M. Remaining limitations
- **Audio-reactive waveform is flat on the Observation surface**, as explicitly scoped out of 6.7B. No audio graph exists there; `observation-engine.js`'s pre-existing `am.analyser`-null guards degrade it gracefully. Deferred, not solved, per the governing report.
- **`postmessage-interop.test.js`'s 5 failures** (see §J) are a pre-existing `5.2`/`5.3` handshake-gating mismatch between this SciFi-XZBT change and an independent, prior `src/host.js` change, outside this step's edit scope. Needs separate resolution — likely a version-gating fix in `contract-adapter.js`'s `_setupWindowBridge`, but that edit was withheld here because the report marks it must-not-change for 6.7B.
- **Live browser verification and the packaged single-file build were not exercised** in this session (§K) — recommended before treating 6.7B as fully accepted.
- **`postmessage-interop.test.js`'s 5 failures** (see §J) are a pre-existing `5.2`/`5.3` handshake-gating mismatch between this SciFi-XZBT change and an independent, prior `src/host.js` change, outside this step's edit scope. Needs separate resolution — likely a version-gating fix in `contract-adapter.js`'s `_setupWindowBridge`, but that edit was withheld here because the report marks it must-not-change for 6.7B. **Resolved 2026-09-15** as a separate, explicitly authorized task: the inbound filter is now a presence/type check on the advisory field, and the adapter advertises contract minor 3 / version 5.3.0. See the closure report.
- **Live browser verification and the packaged single-file build were not exercised** in this session (§K) — recommended before treating 6.7B as fully accepted. Update (2026-09-15): the packaged build is regenerated and verified; live browser verification (report §15, steps 113) is still outstanding.
## Step 6.7 verdict
@@ -204,3 +213,10 @@ live NGN/browser and standalone/packaged-build verification in report §15
has not been performed. Recommend resolving the handshake mismatch and running
live verification before closing Step 6.7B, and explicitly deferring Step 6.8
until then, per this task's instructions.
Update (2026-09-15): the handshake mismatch is resolved and the full suite is
green (154/154); the packaged single-file build has been regenerated and
verified (fixture-consistent, structurally and behaviorally checked). See the
[Step 6.7 closure report](XZBT-NGN-Step6.7-Closure-Report.md). What remains
before Step 6.7 can be marked complete is the live NGN Observation
verification in report §15, steps 113.
+60 -6
View File
@@ -43,7 +43,9 @@ Copied files (byte-for-byte from source, no fixture-local corrections):
surface-attachment bus wiring, `view.pillars`/`view.warp-flight` routing
- `js/contract-adapter.js``surfaces`/`instanceId` constructor options,
the `view.pillars`/`view.warp-flight` targets, `onLocalChange`/`onLocalAction`
hooks, `describe()`'s conditional `surfaces` field, version bump to 5.3.0
hooks, `describe()`'s conditional `surfaces` field (the version bump this
bullet originally listed was not present in the resynced file; see the
handshake correction below)
- `js/observation-engine.js` — WARP/PILLARS dock buttons now route through
`onMutation` (matching the existing VIEWPORT/RED ALERT/PRESET pattern)
instead of mutating engine state directly
@@ -56,9 +58,9 @@ is a faithful mechanical copy of the source as it stood after Step 6.7B.
`js/audio.js`, `js/config.js`, `js/core-animations.js`, `js/visualizer.js`,
`js/observation-bezels.js`, `js/generative-experience.js`, and `js/control-bus.js`
were not touched by Step 6.7B and were not recopied. `dist/` was not
regenerated (no PowerShell available in the environment that performed this
resync); it still reflects a pre-6.7B build and should be rebuilt from
source before any test or procedure that opens the packaged file.
regenerated at resync time (no PowerShell available in the environment that
performed the resync); it reflected a pre-6.7B build then and has since been
rebuilt from source — see the Step 6.7 packaging pass below.
## SciFi adapter handshake correction (2026-09-15)
@@ -95,10 +97,62 @@ flow this file documents:
The outbound advisory `xzbt: '5.2'` stamps on this adapter's own envelopes were
deliberately left unchanged: §6.5 makes the value non-authoritative, Step 6.7B
documented the envelope as unchanged, and no receiver — NGN included — reads
that value for admission. `dist/` remains a stale generated artifact and was
not regenerated.
that value for admission. (`dist/` was rebuilt from source in the packaging
pass below.)
Resynced file (source and fixture byte-identical,
SHA-256 `10ED30527153D5B30F23557BA6EC427884D470AB6561AC33C47E7F17AFA28DD9`):
- `js/contract-adapter.js`
## Step 6.7 packaging pass (2026-09-15)
`tools/package.ps1` was run against the SciFi-XZBT source tree to regenerate
the standalone single-file artifact (that repo's one-input/one-output
distribution rule):
- Command: `powershell -ExecutionPolicy Bypass -File .\tools\package.ps1 -Force`
- Output: `G:/.vibe/SciFi-XZBT/dist/SciFiAmbientDisplay_V179b9db.html`
920,730 bytes (12 script blocks + 1 style block inlined), SHA-256
`DFD9A91CB04CABD7BD6AAA53DA0FA7A641DBB21E3B3E11FAF3EC75946D6FA271`
- Replaced: a pre-6.7B build of the same filename (SHA-256
`B441820627D3FB23994D129B7425D781797E705867AC02967F96846B243435D4`, dated
9/13, before the Step 6.7B source changes). Byte-identical content of that
pre-6.7B build is retained unchanged as
`dist/SciFiAmbientDisplay_Va723f46=1.html`.
- Filename caveat: the filename carries SciFi-XZBT's HEAD commit `179b9db`,
but the build reads the working tree, which is ahead of that commit — that
repo's contract work, including the handshake correction above, is still
uncommitted there. The artifact does not correspond to a single commit.
- Fixture mirror:
`test-fixtures/reference-exhibits/scifi/dist/SciFiAmbientDisplay_V179b9db.html`
was copied verbatim from the source build; the two files are byte-identical
at the hash above.
Verification of the regenerated artifact (raw output in
`evidence/step6.7-packaging.txt`):
- Structural: each of the 13 inputs (`css/style.css` and the 12 scripts) is
inlined verbatim — the built file contains every source file as a
contiguous byte-identical block after newline normalization; zero
`<script src=`, `<link href=` and `<img src=` references remain; the two
Step 6.7B scripts (`surface-mode.js`, `surface-bus.js`) are present in
`index.html` order; the corrected handshake filter
(`typeof e.data.xzbt !== 'string'`) is present and no exact advisory `xzbt`
comparison remains anywhere in the file.
- Runtime, `file://`: the document boots standalone — 12 inline `<script>`
elements, none with `src`, zero `<link>` elements, console UI renders
(`readyState: complete`, 4 canvases, theme classes applied), and
`window.xzbtContractAdapter` exists with `contractMinor: 3`,
`version: 5.3.0`, and the two-entry surface catalog.
- Runtime, served over `http://127.0.0.1:4173/test-fixtures/...` (the served
path NGN fixtures use): a same-origin host simulation stamped
`xzbt: '5.3'` negotiates — `hello.result` contract `{major: 5, minor: 3}`,
exhibit version `5.3.0`; `describe.result` reports 63 targets plus
`surface.console`/`surface.observation`; `state.result` returns. This is
the handshake/describe/state path the pre-fix build failed.
- Boundary note: from `file://`, a same-window `postMessage` cannot exercise
the handshake because the adapter's origin guard rejects it (Chrome reports
`e.origin` as `"null"` for `file://` documents while `window.location.origin`
is `file://`). That is the adapter's designed same-origin/self safety
filter, not a defect; NGN attaches exhibits over `http://` only.
@@ -0,0 +1,141 @@
Step 6.7 — packaged standalone-build verification (tools/package.ps1)
Date: 2026-09-15
Host: Windows (win32, Windows_NT 10.0.26200), PowerShell shell
Source tree: G:/.vibe/SciFi-XZBT (working tree; HEAD 179b9db + uncommitted 6.7B/contract work)
Artifact: G:/.vibe/SciFi-XZBT/dist/SciFiAmbientDisplay_V179b9db.html
Fixture mirror: G:/.vibe/XZBT-NGN/test-fixtures/reference-exhibits/scifi/dist/SciFiAmbientDisplay_V179b9db.html
Server: a pre-existing `npm start` server (node server/serve.js) was already running on
http://127.0.0.1:4173. A second instance started for this pass failed with
EADDRINUSE and exited; the served state was unchanged, and this pass neither
started nor stopped the server.
Method: the real build tool, then the artifact examined structurally, loaded from file://,
and handshaked over the same HTTP path NGN serves fixtures from. No test doubles.
====================================================================
1. Build
====================================================================
pre-build artifact (what the build replaces):
SciFiAmbientDisplay_V179b9db.html 890902 bytes 2026-09-13 19:48
sha256 B441820627D3FB23994D129B7425D781797E705867AC02967F96846B243435D4
(byte-identical content retained as dist/SciFiAmbientDisplay_Va723f46=1.html)
command:
powershell -ExecutionPolicy Bypass -File .\tools\package.ps1 -Force
log:
G:\.vibe\SciFi-XZBT\tools\package.ps1 : Output file already exists:
G:\.vibe\SciFi-XZBT\dist\SciFiAmbientDisplay_V179b9db.html
WARNING: -Force specified; overwriting existing file.
Packaging SciFi Ambient Display from G:\.vibe\SciFi-XZBT...
-> Commit: 179b9db
-> Inlining CSS: css/style.css
-> Inlining JS: js/audio.js
-> Inlining JS: js/config.js
-> Inlining JS: js/core-animations.js
-> Inlining JS: js/visualizer.js
-> Inlining JS: js/observation-bezels.js
-> Inlining JS: js/observation-engine.js
-> Inlining JS: js/control-bus.js
-> Inlining JS: js/surface-mode.js
-> Inlining JS: js/surface-bus.js
-> Inlining JS: js/generative-experience.js
-> Inlining JS: js/contract-adapter.js
-> Inlining JS: js/app.js
Build Successful!
Output: G:\.vibe\SciFi-XZBT\dist\SciFiAmbientDisplay_V179b9db.html (899.15 KB, 23514 lines)
exit code: 0 (the already-exists message is a non-terminating Write-Error)
post-build artifact:
SciFiAmbientDisplay_V179b9db.html 920730 bytes 2026-09-14 19:50
sha256 DFD9A91CB04CABD7BD6AAA53DA0FA7A641DBB21E3B3E11FAF3EC75946D6FA271
====================================================================
2. Structural verification (node, against the built file)
====================================================================
--- inlined block check (built file must contain each source file verbatim) ---
INLINED css/style.css 62183 chars @ 880
INLINED js/audio.js 238766 chars @ 84546
INLINED js/config.js 66319 chars @ 323336
INLINED js/core-animations.js 10765 chars @ 389679
INLINED js/visualizer.js 25230 chars @ 400468
INLINED js/observation-bezels.js 17163 chars @ 425722
INLINED js/observation-engine.js 132667 chars @ 442909
INLINED js/control-bus.js 1535 chars @ 575600
INLINED js/surface-mode.js 3475 chars @ 577159
INLINED js/surface-bus.js 9562 chars @ 580658
INLINED js/generative-experience.js 48465 chars @ 590244
INLINED js/contract-adapter.js 34834 chars @ 638733
INLINED js/app.js 223459 chars @ 673591
--- external asset references (must all be 0) ---
{"script_src":0,"link_href":0,"img_src":0}
script wrappers: 12 style wrappers: 1
--- fix markers in the packaged file ---
{"presence_type_check":true,"stale_exact_gate_absent":true,"contract_minor_3":true,
"version_530":true,"header_v53":true,"surface_mode":true,"surface_bus":true,
"doctype":true,"closes_html":true}
script order matches index.html order: true
all blocks byte-identical to source: true
sha256: DFD9A91CB04CABD7BD6AAA53DA0FA7A641DBB21E3B3E11FAF3EC75946D6FA271
====================================================================
3. Fixture mirror
====================================================================
copy: source dist -> test-fixtures/reference-exhibits/scifi/dist/ (same filename -Force)
source dist sha256: DFD9A91CB04CABD7BD6AAA53DA0FA7A641DBB21E3B3E11FAF3EC75946D6FA271
fixture dist sha256: DFD9A91CB04CABD7BD6AAA53DA0FA7A641DBB21E3B3E11FAF3EC75946D6FA271
byte-identical: True (920730 bytes)
====================================================================
4. Runtime verification (real browser)
====================================================================
4a. file:// load (standalone, no server, no NGN)
title: "Sci-Fi Ambience Generator - Publish Build v14co"
readyState: complete
globals: XZBTContractAdapter: function; XZBTSurfaceMode: object;
XZBTSurfaceBus: object; window.xzbtContractAdapter: present
adapter: contractMajor 5, contractMinor 3, version "5.3.0",
surfaces ["surface.console", "surface.observation"]
runtime self-containment: 12 <script> elements, 0 with src, 0 <link> elements,
1 stylesheet (the inlined <style>)
rendering: body themed ("theme-lcars-tng xzbt-tv-aspect xzbt-tv-letterbox"),
4 canvases (2 visible, e.g. 634x140 and 266x240), 8 visible buttons
(MUTE + 7 preset buttons), visible text includes
"STARFLIGHT / INTERPRISE-G: MAIN BRIDGE / STARSHIP PRESETS",
layout engaged (scroll dimensions > 200px)
handshake probe from file://: no reply - the adapter's origin guard rejects the
same-window self-post (Chrome reports e.origin "null" for file://
documents while window.location.origin is "file://"). Designed
same-origin/self safety filter, not a defect; NGN attaches
exhibits over http:// only.
4b. served over http://127.0.0.1:4173/test-fixtures/reference-exhibits/scifi/dist/...
sent (same-origin host simulation, advisory tag "5.3"):
{xzbt:'5.3', type:'hello', requestId:'pkg-hello-1', supportedContractMajors:[5]}
{xzbt:'5.3', type:'describe', requestId:'pkg-describe-1', sessionId:<from hello>}
{xzbt:'5.3', type:'state.get',requestId:'pkg-state-1', sessionId:<from hello>}
received (in order): hello.result, describe.result, state.result
hello.result: contract {major:5, minor:3}; exhibit.version "5.3.0";
sessionId present
describe.result: 63 targets; surfaces ["surface.console","surface.observation"];
contract.minor 3
state.result: ok; stateRevision 0; values present
adapter after handshake: contractMajor 5, contractMinor 3, sessionActive true,
mode "console"
(the pre-fix build dropped every one of these messages at the inbound gate)
====================================================================
5. Post-pass status (2026-09-15)
====================================================================
NGN full suite (node --test): 154 tests, 154 pass, 0 fail, 0 skipped
tests/postmessage-interop.test.js: 7 tests, 7 pass, 0 fail
SciFi-XZBT contract harness: 21 Tests | 21 Passed | 0 Failed
SciFi-XZBT real-adapter suite: 32 Tests | 32 Passed | 0 Failed
python devlog_editor.py --validate: devlog is valid
git diff --check (XZBT-NGN): clean (all pending changes, incl. this pass's files)
git diff --check (SciFi-XZBT): pre-existing trailing whitespace on four
6.7B-added script lines in index.html;
mirrored by design in the fixture copy,
not introduced or changed by this pass
source/fixture index.html identical: True