deps: take extension-websocket 4.2.4, and drop the HTML5 patch #112

Merged
yuris merged 3 commits from docs-4-2-4 into main 2026-08-22 10:21:29 +00:00
Owner

extension-websocket 4.2.4 landed today and fixes
defold/extension-websocket#67,
the bug where the protocol option never reached the HTML5 handshake. That was
the only reason patches/ existed, so it is deleted, along with the three manual
steps a consumer had to perform for a browser build.

Also in here: the CI fix, the last open question from #111, and the README
quickstart moving to the wiki.

The patch is gone, and that is verified rather than assumed

dev/tools/html5-conformance.sh now builds against the plain dependency, in a
real Chromium, and passes. The handshake assertion is what proves the upstream
fix works:

[handshake] -> subprotocol=v2.bsatn.spacetimedb
[handshake] <- 101 Switching Protocols

Two things the harness simplification turned up, both measured both ways:

  1. resolve has to stay in bob's verb list. Dropping it looks free, since the
    block above already guarantees the archive is on disk, but bob then dies at
    100% Bundling in a NullPointerException out of
    BuildInputDataCollector.saveDataAsJson, with the wasm already compiled.
  2. A dist/html5-src left over from the vendoring era poisons the build. The
    bundle runs in $ROOT now and bob scans the tree for anything carrying an
    ext.manifest, so the stale copy links as a second websocket extension and
    fails on its missing headers. The script clears it. dist/ is gitignored, so
    only an upgrade hits this, which is the case a person meets and CI does not.
    Verified by planting the exact poison and watching the guard clear it.

CI was red on main

The conformance drift check, correctly. #111 fixed the stdb/protocol.lua
reference stamped into gen-schema.sh's header, and the committed fixture still
carried the old spelling, so generator and fixture disagreed by that one line.
Regenerated. The fixture was itself a v1 leftover pointing at a file deleted in
4.0.0.

The one open question from #111

db.tables / db.db / ctx.db, three names for one map. Keeping all three.
db.db is the official-SDK-shaped alias the wiki documents as deliberate parity,
so deleting it would break a claimed feature to save a line. What made the
redundancy bite was ctx.db.tables, the natural copy-paste, reading as a bare
nil and failing a line later. #111's raising __index already fixed that, and
there is now a test pinning the message so it cannot regress into a nil.

The README loses its quickstart

A tutorial belongs in the wiki, so that is where it went, expanded with the parts
the old wiki page carried that the README version lacked. The README keeps a
pointer. What is left is what a front page is for: what the SDK is, what it
needs, how to install it, what it supports, where the docs are.

The wiki is updated in the same pass, including API-Reference and Usage-Guide
against everything #111 changed.

Verification

  • lua dev/test/runner.lua 13/13
  • stylua --check clean
  • native conformance PASS
  • HTML5 conformance PASS, unpatched
  • headless example round trip PASS

Known gap

Six wiki pages still carry pre-existing em dashes in prose the workers only
patched rather than rewrote. No new ones were introduced and the rewritten pages
are at zero. Scrubbing the rest is a separate pass over your own prose, so I left
it.

extension-websocket **4.2.4** landed today and fixes [defold/extension-websocket#67](https://github.com/defold/extension-websocket/issues/67), the bug where the `protocol` option never reached the HTML5 handshake. That was the only reason `patches/` existed, so it is deleted, along with the three manual steps a consumer had to perform for a browser build. Also in here: the CI fix, the last open question from #111, and the README quickstart moving to the wiki. ## The patch is gone, and that is verified rather than assumed `dev/tools/html5-conformance.sh` now builds against the plain dependency, in a real Chromium, and passes. The handshake assertion is what proves the upstream fix works: ``` [handshake] -> subprotocol=v2.bsatn.spacetimedb [handshake] <- 101 Switching Protocols ``` Two things the harness simplification turned up, both measured both ways: 1. `resolve` has to stay in bob's verb list. Dropping it looks free, since the block above already guarantees the archive is on disk, but bob then dies at 100% Bundling in a NullPointerException out of `BuildInputDataCollector.saveDataAsJson`, with the wasm already compiled. 2. A `dist/html5-src` left over from the vendoring era poisons the build. The bundle runs in `$ROOT` now and bob scans the tree for anything carrying an `ext.manifest`, so the stale copy links as a second websocket extension and fails on its missing headers. The script clears it. `dist/` is gitignored, so only an upgrade hits this, which is the case a person meets and CI does not. Verified by planting the exact poison and watching the guard clear it. ## CI was red on main The conformance drift check, correctly. #111 fixed the `stdb/protocol.lua` reference stamped into `gen-schema.sh`'s header, and the committed fixture still carried the old spelling, so generator and fixture disagreed by that one line. Regenerated. The fixture was itself a v1 leftover pointing at a file deleted in 4.0.0. ## The one open question from #111 `db.tables` / `db.db` / `ctx.db`, three names for one map. Keeping all three. `db.db` is the official-SDK-shaped alias the wiki documents as deliberate parity, so deleting it would break a claimed feature to save a line. What made the redundancy bite was `ctx.db.tables`, the natural copy-paste, reading as a bare nil and failing a line later. #111's raising `__index` already fixed that, and there is now a test pinning the message so it cannot regress into a nil. ## The README loses its quickstart A tutorial belongs in the wiki, so that is where it went, expanded with the parts the old wiki page carried that the README version lacked. The README keeps a pointer. What is left is what a front page is for: what the SDK is, what it needs, how to install it, what it supports, where the docs are. The wiki is updated in the same pass, including API-Reference and Usage-Guide against everything #111 changed. ## Verification - `lua dev/test/runner.lua` 13/13 - `stylua --check` clean - native conformance PASS - HTML5 conformance PASS, unpatched - headless example round trip PASS ## Known gap Six wiki pages still carry pre-existing em dashes in prose the workers only patched rather than rewrote. No new ones were introduced and the rewritten pages are at zero. Scrubbing the rest is a separate pass over your own prose, so I left it.
Two follow-ups to #111.

The conformance drift check went red on main: #111 corrected the
`stdb/protocol.lua` reference stamped into gen-schema.sh's header, and
the committed fixture still carried the old spelling, so the generator
and the fixture disagreed by exactly that line. Regenerated with the
command the check prints. The fixture was itself a v1 leftover, pointing
at a file deleted in 4.0.0.

The review's remaining open question was `db.tables` / `db.db` /
`ctx.db`, three names for one map. Keeping all three: `db.db` is the
official-SDK-shaped alias the wiki documents as deliberate parity, so
deleting it would break a claimed feature to save a line. What made the
redundancy bite was `ctx.db.tables`, the natural copy-paste, reading as
a bare nil and failing a line later. #111's raising `__index` already
fixed that; this pins it, so the message that names the wrong hop cannot
regress into a nil.
deps: take extension-websocket 4.2.4, and drop the HTML5 patch
All checks were successful
ci / ci (pull_request) Successful in 20s
conformance / conformance (pull_request) Successful in 2m14s
2a5bfb506f
4.2.4 fixes defold/extension-websocket#67, the bug where the `protocol`
option never reached the HTML5 handshake, so SpacetimeDB answered
`400 no valid protocol selected` and no Lua-side configuration could
help. That is the only reason `patches/` existed. It is gone, and with it
the three manual steps a consumer had to perform for a browser build:
unpack the fetched extension into the project, apply the patch, remove
the remote dependency.

Verified rather than assumed. `dev/tools/html5-conformance.sh` now
builds against the plain dependency and passes, and the handshake
assertion in html5-conformance.mjs is what proves the upstream fix
works:

    [handshake] -> subprotocol=v2.bsatn.spacetimedb
    [handshake] <- 101 Switching Protocols

Two things the harness simplification turned up, both measured:

  * `resolve` has to stay in bob's verb list. Dropping it looks free,
    since the block above already guarantees the archive is on disk, but
    bob then dies at 100% Bundling in a NullPointerException out of
    BuildInputDataCollector.saveDataAsJson, with the wasm already
    compiled.
  * A `dist/html5-src` left over from the vendoring era poisons the
    build. The bundle now runs in $ROOT and bob scans the tree for
    anything carrying an `ext.manifest`, so the stale copy links as a
    second websocket extension and fails on its missing headers. The
    script clears it. `dist/` is gitignored, so only an upgrade hits
    this, which is the case a person meets and CI does not.

The README loses its Quickstart, which now lives in the wiki where a
tutorial belongs, and keeps a pointer to it. What is left is what the
front page is for: what the SDK is, what it needs, how to install it,
what it supports, where the docs are.

`release.yml` carried the last references to 4.2.3 and to the patching
instructions in its generated release notes; both corrected.
Author
Owner

Review: PR #112 — docs-4-2-4

REQUEST CHANGES — one blocking dead cross-reference, four nits. The shell
surgery itself is correct and the hazard it introduces is guarded.

Scope note: the PR is a single commit, 2a5bfb5. The fixture regeneration and
the ctx.db.tables pin are 5dd109f, which is the merge base and already on
main — not part of this diff. I verified 5dd109f anyway (brief item 4).


BLOCKING

The example's opening sentence points a reader at the README Quickstart, which
this PR moved to the wiki:

4:A minimal, openable Defold project that uses this SDK the way the [main
5:README's quickstart][quickstart] does: fetch the schema, connect, subscribe
...
75:[quickstart]: ../../README.md#quickstart

README.md now has no ## Quickstart heading (README.md:47 is
## Getting started, pointing at the wiki). The anchor resolves to the top of
the file, so the reader lands on the front page with no idea what they were
sent to read. dev/ is export-ignored, so this only hits someone who clones —
which is exactly the audience for the example project.

Fix: point it at the wiki Quickstart, the same URL README.md:96 already uses.


NITS

2. flake.nix:210-217 — pkgs.patch is now dead, and its comment describes removed behaviour

210:          # The HTML5 harness vendors extension-websocket and patches it. Both
211:          # tools existed only in an ambient user profile before, which is the
212:          # same leak that hid the missing libstdc++ from the engine's rpath.
216:          pkgs.unzip
217:          pkgs.patch

The harness no longer vendors or patches anything. pkgs.unzip is still live —
find_ext at html5-conformance.sh:51 shells out to it. pkgs.patch has no
remaining caller anywhere in the repo (defold-patch is the unrelated NixOS
rpath fixup, still used at conformance.yml:158). This is the "second job cut
with the first" the brief asked about: the entry existed only for the vendoring
step. flake.nix is in the conformance trigger paths, so dropping it is covered
by CI.

3. .gitattributes:5 — the entry count is stale, and the file calls that count the durable fact

 5:# Measured with `git archive`: 56 entries before, 13 after. The zip the forge

Measured now:

$ git archive main       | tar -t | wc -l   → 18
$ git archive docs-4-2-4 | tar -t | wc -l   → 16

The 13 was already wrong before this PR; removing patches/ moves it from
off-by-5 to off-by-3. The paragraph below it (:8-15) deliberately deleted the
byte figures because they rot, and declares "Entry counts are the stable fact" —
so the one number it kept is the one that is wrong. The PR touches this comment
block (:17) and is the natural place to correct it.

The prose claim itself is right: git archive docs-4-2-4 | tar -t yields
LICENSE, README.md, game.project and stdb/ + 12 files, nothing else.
README.md:106-108 states the same set and matches.

4. dev/tools/html5-conformance.sh:88 — the subshell cd is now a no-op

 18:cd "$ROOT"
...
 88:(cd "$ROOT" && bob --settings dev/example/harness.project \

Before, this was (cd "$WORK" && …) and the subshell was load-bearing: it
entered the scratch tree and kept $ROOT as cwd for everything after. Nothing
between line 18 and line 88 changes directory now, so both the cd and the
subshell that contains it are dead. Harmless, but it reads as if the build still
happens somewhere other than $ROOT, which is the one thing about this change a
reader needs to be clear on.

5. .forgejo/workflows/conformance.yml:28-47 — dev/example-chat/** triggers nothing, and this PR edits it

The trigger list covers dev/example/** (the harness) but not
dev/example-chat/**, while the job's last step builds and runs that project:

148:      - name: Example project (headless, live round trip)
151:          cd dev/example-chat

This PR changes dev/example-chat/game.project (the 4.2.4 bump) — a change the
example step is the only coverage for, and which on its own would not have run
it. Pre-existing (the step landed in #103 without extending the paths), not
introduced here, but it is the brief's "conformance job that stops running on a
change it covers", and this PR is the commit that makes it concrete. The step's
own comment argues the case: "The example is documentation that executes.
Nothing else runs it."

The removal of patches/** itself is clean — every remaining path in the list
still exists on disk (checked all 13).


Checked, fine

  • Fixture (5dd109f). dev/test/fixtures/chat_schema.lua diff is exactly
    one comment line, stdb/protocol.lua → stdb/protocol_v2.lua. No column,
    type or typespace movement. lua dev/test/runner.lua → 13 passed, 0 failed.
  • The dist/html5-src guard (html5-conformance.sh:35) is correct and
    sufficient. The old script built its vendored copy entirely inside that
    directory, so one rm -rf covers it. I checked the wider hazard the guard
    implies — a second ext.manifest anywhere under $ROOT:
    find . -name ext.manifest returns nothing on this tree, which has populated
    dev/example-chat/{build,.internal} and root {build,dist,.internal}. bob
    keeps extensions zipped in .internal/lib, so no other stale build output can
    reproduce the failure.
  • Working-tree artefacts. The build now writes $ROOT/build,
    $ROOT/.internal and $ROOT/dist/html5. All three are gitignored
    (.gitignore:2-4, plus the unanchored duplicates at :22-24), and
    git status --short is clean on a tree that has all of them. It does overwrite
    a developer's root build/ with a wasm-web debug build under
    harness.project settings, so the next editor run rebuilds — regenerable, not
    worth a guard.
  • No dangling variables or unreachable branches. $PATCH and $WORK are
    gone with all their uses; the patch did not apply exit path went with them.
    The stripped-game.project step (grep -v '^dependencies#') is correctly
    dropped — game.project:4 carries the remote dep and
    dev/example/harness.project declares no dependencies#, so there is no
    double-extension risk from building in place.
  • resolve kept in the verb list (:88-90) with the NPE it prevents
    documented at :83-86. Believable and cheap; not re-tested.
  • release.yml. No patches/ reference survives; the generated notes at
    :49-70 reference only the two dependency URLs and cannot name a missing
    directory. Version at :52 is 4.2.4.
  • Version consistency. 4.2.3 appears nowhere in tracked content — the only
    hits are inside the gitignored .internal/lib/*.zip blobs. 4.2.4 in
    game.project:4, dev/example-chat/game.project:4, README.md:24,36,44,
    release.yml:52,58, html5-conformance.sh:12,31,
    html5-conformance.mjs:264. The SDK's own version is untouched:
    game.project:3 is version = 4.0.0, matching README.md:35.
  • The HTML5 doc claim. README.md:43-44 ("Nothing further is needed for an
    HTML5 build; 4.2.4 sends the subprotocol on that target too") is correct and
    does not overreach. The ?token= workaround is handled inside the SDK, not by
    the consumer — stdb/init.lua:416-422 branches on M.is_html5() and moves the
    token into the query string, with the emscripten header limitation documented
    at :141-143 and :422. Nothing in the README or the Features table claims
    HTML5 is equivalent to native.
  • The handshake assertion (html5-conformance.mjs:261-264) is what turns an
    upstream regression into a named failure rather than a bare 400. Comment
    correctly re-pointed from patches/ to defold/extension-websocket#67.
# Review: PR #112 — `docs-4-2-4` **REQUEST CHANGES** — one blocking dead cross-reference, four nits. The shell surgery itself is correct and the hazard it introduces is guarded. Scope note: the PR is a single commit, `2a5bfb5`. The fixture regeneration and the `ctx.db.tables` pin are `5dd109f`, which is the merge base and already on `main` — not part of this diff. I verified `5dd109f` anyway (brief item 4). --- ## BLOCKING ### 1. `dev/example-chat/README.md:4,75` — link to a section this PR deleted The example's opening sentence points a reader at the README Quickstart, which this PR moved to the wiki: ``` 4:A minimal, openable Defold project that uses this SDK the way the [main 5:README's quickstart][quickstart] does: fetch the schema, connect, subscribe ... 75:[quickstart]: ../../README.md#quickstart ``` `README.md` now has no `## Quickstart` heading (`README.md:47` is `## Getting started`, pointing at the wiki). The anchor resolves to the top of the file, so the reader lands on the front page with no idea what they were sent to read. `dev/` is `export-ignore`d, so this only hits someone who clones — which is exactly the audience for the example project. Fix: point it at the wiki Quickstart, the same URL `README.md:96` already uses. --- ## NITS ### 2. `flake.nix:210-217` — `pkgs.patch` is now dead, and its comment describes removed behaviour ``` 210: # The HTML5 harness vendors extension-websocket and patches it. Both 211: # tools existed only in an ambient user profile before, which is the 212: # same leak that hid the missing libstdc++ from the engine's rpath. 216: pkgs.unzip 217: pkgs.patch ``` The harness no longer vendors or patches anything. `pkgs.unzip` is still live — `find_ext` at `html5-conformance.sh:51` shells out to it. `pkgs.patch` has no remaining caller anywhere in the repo (`defold-patch` is the unrelated NixOS rpath fixup, still used at `conformance.yml:158`). This is the "second job cut with the first" the brief asked about: the entry existed only for the vendoring step. `flake.nix` is in the conformance trigger paths, so dropping it is covered by CI. ### 3. `.gitattributes:5` — the entry count is stale, and the file calls that count the durable fact ``` 5:# Measured with `git archive`: 56 entries before, 13 after. The zip the forge ``` Measured now: ``` $ git archive main | tar -t | wc -l → 18 $ git archive docs-4-2-4 | tar -t | wc -l → 16 ``` The `13` was already wrong before this PR; removing `patches/` moves it from off-by-5 to off-by-3. The paragraph below it (`:8-15`) deliberately deleted the byte figures because they rot, and declares "Entry counts are the stable fact" — so the one number it kept is the one that is wrong. The PR touches this comment block (`:17`) and is the natural place to correct it. The prose claim itself is right: `git archive docs-4-2-4 | tar -t` yields `LICENSE`, `README.md`, `game.project` and `stdb/` + 12 files, nothing else. `README.md:106-108` states the same set and matches. ### 4. `dev/tools/html5-conformance.sh:88` — the subshell `cd` is now a no-op ``` 18:cd "$ROOT" ... 88:(cd "$ROOT" && bob --settings dev/example/harness.project \ ``` Before, this was `(cd "$WORK" && …)` and the subshell was load-bearing: it entered the scratch tree and kept `$ROOT` as cwd for everything after. Nothing between line 18 and line 88 changes directory now, so both the `cd` and the subshell that contains it are dead. Harmless, but it reads as if the build still happens somewhere other than `$ROOT`, which is the one thing about this change a reader needs to be clear on. ### 5. `.forgejo/workflows/conformance.yml:28-47` — `dev/example-chat/**` triggers nothing, and this PR edits it The trigger list covers `dev/example/**` (the harness) but not `dev/example-chat/**`, while the job's last step builds and runs that project: ``` 148: - name: Example project (headless, live round trip) 151: cd dev/example-chat ``` This PR changes `dev/example-chat/game.project` (the 4.2.4 bump) — a change the example step is the only coverage for, and which on its own would not have run it. Pre-existing (the step landed in #103 without extending the paths), not introduced here, but it is the brief's "conformance job that stops running on a change it covers", and this PR is the commit that makes it concrete. The step's own comment argues the case: "The example is documentation that executes. Nothing else runs it." The removal of `patches/**` itself is clean — every remaining path in the list still exists on disk (checked all 13). --- ## Checked, fine - **Fixture (`5dd109f`).** `dev/test/fixtures/chat_schema.lua` diff is exactly one comment line, `stdb/protocol.lua` → `stdb/protocol_v2.lua`. No column, type or typespace movement. `lua dev/test/runner.lua` → 13 passed, 0 failed. - **The `dist/html5-src` guard** (`html5-conformance.sh:35`) is correct and sufficient. The old script built its vendored copy entirely inside that directory, so one `rm -rf` covers it. I checked the wider hazard the guard implies — a second `ext.manifest` anywhere under `$ROOT`: `find . -name ext.manifest` returns nothing on this tree, which has populated `dev/example-chat/{build,.internal}` and root `{build,dist,.internal}`. bob keeps extensions zipped in `.internal/lib`, so no other stale build output can reproduce the failure. - **Working-tree artefacts.** The build now writes `$ROOT/build`, `$ROOT/.internal` and `$ROOT/dist/html5`. All three are gitignored (`.gitignore:2-4`, plus the unanchored duplicates at `:22-24`), and `git status --short` is clean on a tree that has all of them. It does overwrite a developer's root `build/` with a wasm-web debug build under `harness.project` settings, so the next editor run rebuilds — regenerable, not worth a guard. - **No dangling variables or unreachable branches.** `$PATCH` and `$WORK` are gone with all their uses; the `patch did not apply` exit path went with them. The stripped-`game.project` step (`grep -v '^dependencies#'`) is correctly dropped — `game.project:4` carries the remote dep and `dev/example/harness.project` declares no `dependencies#`, so there is no double-extension risk from building in place. - **`resolve` kept in the verb list** (`:88-90`) with the NPE it prevents documented at `:83-86`. Believable and cheap; not re-tested. - **`release.yml`.** No `patches/` reference survives; the generated notes at `:49-70` reference only the two dependency URLs and cannot name a missing directory. Version at `:52` is 4.2.4. - **Version consistency.** `4.2.3` appears nowhere in tracked content — the only hits are inside the gitignored `.internal/lib/*.zip` blobs. `4.2.4` in `game.project:4`, `dev/example-chat/game.project:4`, `README.md:24,36,44`, `release.yml:52,58`, `html5-conformance.sh:12,31`, `html5-conformance.mjs:264`. The SDK's own version is untouched: `game.project:3` is `version = 4.0.0`, matching `README.md:35`. - **The HTML5 doc claim.** `README.md:43-44` ("Nothing further is needed for an HTML5 build; 4.2.4 sends the subprotocol on that target too") is correct and does not overreach. The `?token=` workaround is handled inside the SDK, not by the consumer — `stdb/init.lua:416-422` branches on `M.is_html5()` and moves the token into the query string, with the emscripten header limitation documented at `:141-143` and `:422`. Nothing in the README or the Features table claims HTML5 is equivalent to native. - **The handshake assertion** (`html5-conformance.mjs:261-264`) is what turns an upstream regression into a named failure rather than a bare 400. Comment correctly re-pointed from `patches/` to defold/extension-websocket#67.
docs: fix the dead quickstart link and take the review nits
Some checks failed
ci / ci (pull_request) Successful in 20s
conformance / conformance (pull_request) Failing after 2s
2a93f78081
The example project's README pointed at `../../README.md#quickstart`, a
heading the 4.2.4 docs commit moved to the wiki. The anchor resolved to
the top of the front page, so a reader following it landed nowhere near
what they were sent to read — and `dev/` is export-ignored, so the only
people who see that link are the ones who cloned, which is exactly the
example's audience. It now points at the wiki Quickstart, the same URL
README.md already uses.

The rest is the review's nits:

- `pkgs.patch` in the conformance shell existed only for the vendoring
  step this branch deleted. Dropped, and the comment above `pkgs.unzip`
  now describes what unzip is actually for: `find_ext` reading the
  resolved extension archive's `ext.manifest`.
- `.gitattributes` claimed "56 entries before, 13 after". Both numbers
  were wrong. Measured: 18 before, 16 now, against 72 tracked paths.
- The bob call in `html5-conformance.sh` still wrapped itself in
  `(cd "$ROOT" && ...)`, load-bearing when the build happened in a
  scratch tree and dead since line 18 became the only `cd`. It read as
  if the build happened somewhere other than `$ROOT`, which is the one
  thing about that change a reader needs to be clear on.
- `conformance.yml` triggered on `dev/example/**` but not
  `dev/example-chat/**`, while its last step builds and runs
  example-chat and nothing else in CI touches it. This branch bumps
  `dev/example-chat/game.project`, so it is the commit that makes the
  gap concrete.
Author
Owner

Actioned the review in 2a93f78.

Blocking — dev/example-chat/README.md now points [quickstart] at the wiki Quickstart, and the opening sentence says "the wiki Quickstart" rather than "the main README's quickstart". Grepped the repo for other links into README.md# anchors: that was the only one.

Nits, all four taken.

  • flake.nix: dropped pkgs.patch, kept pkgs.unzip, and the comment now names its real caller (find_ext reading the resolved archive's ext.manifest).
  • .gitattributes: measured rather than copied. git archive main | tar -t | wc -l → 18, docs-4-2-4 → 16, against 72 tracked paths. Both of the old numbers were wrong; I stated the tracked-path count too, since "56 before" was clearly meant to be the pre-export-ignore figure and 18 is not that.
  • html5-conformance.sh:88: subshell and redundant cd removed. Verb list untouched, resolve still there.
  • conformance.yml: added dev/example-chat/** with a comment saying why.

Verification — all on this tree, after the edits:

  • lua dev/test/runner.lua → 13 passed, 0 failed
  • stylua --check stdb dev/test → clean
  • bash -n dev/tools/html5-conformance.sh → OK
  • dev/tools/html5-conformance.sh → [html5] PASS, phases 1-8, unpatched 4.2.4, subprotocol=v2.bsatn.spacetimedb / 101 on both handshakes
  • dev/tools/conformance.sh → [conformance] PASS

No re-review: every change is the reviewer's own fix, and the one place I went further than the review's wording (the third .gitattributes number) is a measured figure in a comment.

Actioned the review in 2a93f78. **Blocking** — `dev/example-chat/README.md` now points `[quickstart]` at the wiki Quickstart, and the opening sentence says "the wiki Quickstart" rather than "the main README's quickstart". Grepped the repo for other links into `README.md#` anchors: that was the only one. **Nits, all four taken.** - `flake.nix`: dropped `pkgs.patch`, kept `pkgs.unzip`, and the comment now names its real caller (`find_ext` reading the resolved archive's `ext.manifest`). - `.gitattributes`: measured rather than copied. `git archive main | tar -t | wc -l` → 18, `docs-4-2-4` → 16, against 72 tracked paths. Both of the old numbers were wrong; I stated the tracked-path count too, since "56 before" was clearly meant to be the pre-export-ignore figure and 18 is not that. - `html5-conformance.sh:88`: subshell and redundant `cd` removed. Verb list untouched, `resolve` still there. - `conformance.yml`: added `dev/example-chat/**` with a comment saying why. **Verification** — all on this tree, after the edits: - `lua dev/test/runner.lua` → 13 passed, 0 failed - `stylua --check stdb dev/test` → clean - `bash -n dev/tools/html5-conformance.sh` → OK - `dev/tools/html5-conformance.sh` → `[html5] PASS`, phases 1-8, unpatched 4.2.4, `subprotocol=v2.bsatn.spacetimedb` / `101` on both handshakes - `dev/tools/conformance.sh` → `[conformance] PASS` No re-review: every change is the reviewer's own fix, and the one place I went further than the review's wording (the third `.gitattributes` number) is a measured figure in a comment.
yuris merged commit 31efbf54c1 into main 2026-08-22 10:21:29 +00:00
yuris deleted branch docs-4-2-4 2026-08-22 10:21:29 +00:00
Sign in to join this conversation.
No description provided.