Skip to content

Release 1.54.0: first win and community - #520

Merged
AlexZ005 merged 38 commits into
mainfrom
feat/76-int
Nov 2, 2026
Merged

AlexZ005 merged 38 commits into
mainfrom
feat/76-int

Conversation

@AlexZ005

@AlexZ005 AlexZ005 commented Nov 2, 2026

Copy link
Copy Markdown
Collaborator

Release 1.54.0: roadmap 76, first win and community.

In it

Proof

  • Gates: ratchet 279/39, vitest 3624/3624, tokens, storage, zindex, build, scene-lint.
  • Full desk battery (GPU queue, 538 suites) at 5da1679 vs the v1.53.1 baseline: 522 green, 3 flaky, 10 pre-existing reds, 3 new. A/B against a clean v1.53.2 on the same slots:
    • ui-fixes-15lmno: the test, fixed (the GitHub link moved to the welcome card's foot).
    • tours: the same checks are red on v1.53.2, so it is a pre-existing flake.
    • game-loop-v4: red on v1.53.2 and green on v1.53.1, so it is a known 1.53.2 regression, fixed in the next patch.
  • Focused suites and the preview proof on preview-76.

🤖 Generated with Claude Code

AlexZ005 and others added 30 commits October 26, 2026 08:47
…W3a)

- one search field on every Templates tab: every word must match title, description,
  author or tags (communitySearch.matchesQuery) — the OSS GitHub gallery is searchable
  with no server; the query survives a tab switch, Escape clears it first
- provider `search: true` gets list({q}) debounced 300 ms; `sorts: [{id,label}]` render as
  chips beside the field (first = default, never sent); absent = absent, a 36-era provider
  is called list({force}) exactly as before
- a re-list keeps the grid up ("Searching…"), an older query's late answer is dropped,
  an empty answer reads "No scenes match"
- OPEN-CORE.md documents the additive members (no CLOUD_HOOKS_VERSION bump)
- unit communitySearch (7) + contentIndex memo pin; e2e community-search (OSS, 36-era and
  searching providers, stale-answer counterfactual, N6 folded + unfolded)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ls after the first Play

- Welcome asks one question — Play / Remix / Template / Describe it (empty scene stays as a quiet
  link) — and each answer leads straight into its own path (the Play path loads a game and
  starts it; Remix / Template list the bundled starters; Describe it runs the assistant or says
  how to set one up)
- the first-win quest rides the tours engine: change something → Play → invite someone, each
  step completed by doing it (an undo-worthy edit, Play starting, the invite link copied or a
  peer joining); a quiet ring, no dimming, hidden while the game runs; a template / remix starts
  it once the scene has loaded, Play starts it after the first game ends
- tour engine: `hideWhilePlaying` + `quiet` on a TourDef, `onAdvanced` listeners (an action
  completing a step, heard before the step moves on); TourCard notes Skip / Don't show
- index entries may carry a `quest` line; core keeps a default per bundled game and template
- progressive disclosure: on a first visit the advanced toolbar buttons (flow, animation, pivot,
  mode) wait in the » overflow and Modules / toolboxes / Layouts behind More until the first
  Play; Settings ▸ Interface ▸ "Show everything now" and "Start the first-win quest"
- the editor tour no longer starts after the Welcome — it is offered at the end of the quest
  and from the logo menu ("Tour the interface")
- unit: tests/unit/onboardingQuests.test.js; e2e: tests/e2e/onboarding.test.cjs (battery),
  tours.test.cjs follows the new start

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- onboarding/funnel.js: ob_view / ob_choice / ob_first_edit / ob_first_play (+ a time bucket) /
  ob_first_share / ob_quest_done / ob_tour_skip (+ the step), once per browser and only for a
  browser that met the Welcome; return_d1 / return_d7 / one return_w per later week for any
  browser (the G1 weekly-returning line); ob_waitlist for the plugin's feature-update opt-in
- closed vocabularies only — {e, c (the Welcome answer), b (release), d desktop|touch|vr, x};
  no id of any kind; the first-seen day stays in this browser
- Do Not Track / Global Privacy Control send nothing and store nothing; Settings ▸ Privacy ▸
  "Count my visits anonymously" (default on, local) appears once a plugin listens; under test
  nothing counts without `funnelUnderTest`
- cloudHooks `onFunnelEvent(fn)` + a 20-event boot queue; cloudApi `onFunnelEvent` /
  `funnelEvent('ob_waitlist')` (additive, typeof-probed); the open-source build sends nothing
- unit: tests/unit/onboardingFunnel.test.js (rules on a synthetic clock, guards with their
  counterfactuals, the seam); e2e: onboarding.test.cjs part F

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ty search, anonymous counts; version set at release)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…uttons

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ame / embed

76 FW1's Welcome loads the templates index whenever it opens, and startWhatsNew still opens
it (hidden under #editor-chrome) on an exported game's first visit, so the exported game
requested scenes@format-2/index.json from jsDelivr - export-zip 'no request left the game's
origin' red on preview-76, green on 1.44.0. Skip the fetch under embedMode.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
1.47.0

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

# Conflicts:
#	CHANGELOG.md
…e quest, Show everything rows; Reset tours also resets the first-game quest

lock-search re-recorded on the union (LOCK_RECORD=1, run-76-int @bd850661) and checked to differ by exactly 76's
rows (plus 'Show tours automatically' now describing the first-game quest instead of the editor tour). lock-settings:
Reset tours now clears tour.first-win too and counts 9 tour records (76 adds the quest tours). Both ALL PASS after.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n agrees

By default a visit that met the Welcome counts its steps from memory only (once per page), with no
storage. After the first successful Play a small card asks: Agree keeps the note (once per browser +
came-back counts), No thanks stops the counts and remembers only the answer. DNT / GPC and the
Settings switch still stop everything; switching off deletes the note. No card without a plugin.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bumps the build group with 1 update: [svelte](https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte).


Updates `svelte` from 5.57.2 to 5.57.3
- [Release notes](https://github.com/sveltejs/svelte/releases)
- [Changelog](https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/svelte/commits/svelte@5.57.3/packages/svelte)

---
updated-dependencies:
- dependency-name: svelte
  dependency-version: 5.57.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: build
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps the runtime-patch group with 2 updates: [@threlte/extras](https://github.com/threlte/threlte/tree/HEAD/packages/extras) and [three-mesh-bvh](https://github.com/gkjohnson/three-mesh-bvh).


Updates `@threlte/extras` from 9.22.3 to 9.22.4
- [Release notes](https://github.com/threlte/threlte/releases)
- [Changelog](https://github.com/threlte/threlte/blob/main/packages/extras/CHANGELOG.md)
- [Commits](https://github.com/threlte/threlte/commits/@threlte/extras@9.22.4/packages/extras)

Updates `three-mesh-bvh` from 0.9.16 to 0.9.17
- [Release notes](https://github.com/gkjohnson/three-mesh-bvh/releases)
- [Changelog](https://github.com/gkjohnson/three-mesh-bvh/blob/master/CHANGELOG.md)
- [Commits](gkjohnson/three-mesh-bvh@v0.9.16...v0.9.17)

---
updated-dependencies:
- dependency-name: "@threlte/extras"
  dependency-version: 9.22.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: runtime-patch
- dependency-name: three-mesh-bvh
  dependency-version: 0.9.17
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: runtime-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps the agent group in /tools/agent with 1 update: [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/typescript-sdk).


Updates `@modelcontextprotocol/sdk` from 1.32.1 to 1.32.2
- [Release notes](https://github.com/modelcontextprotocol/typescript-sdk/releases)
- [Commits](modelcontextprotocol/typescript-sdk@1.32.1...1.32.2)

---
updated-dependencies:
- dependency-name: "@modelcontextprotocol/sdk"
  dependency-version: 1.32.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: agent
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps the actions group with 1 update: [actions/upload-artifact](https://github.com/actions/upload-artifact).


Updates `actions/upload-artifact` from 4 to 7
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](actions/upload-artifact@v4...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
A script reads `elapsed`: seconds of the game round when one is running,
otherwise seconds since this peer last entered or left Play. `time` stays
the shared clock, so a pose written from it jumps at every press. It is a
global rather than a parameter, so a script with its own `const elapsed`
still compiles. The += warning and the agent notes now point at elapsed.

The particle node's gravity says it is an acceleration along world Y:
negative falls, positive rises.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A framed view (top, front, iso, focus) is 4:3 whatever the window is, so
an iso at size 700 is 700x525 instead of following a wide canvas down to
700x183; current keeps the canvas shape. New optional arguments: aspect,
from (a named side or yaw and pitch in degrees), camera (a free position
and target), uuids (frame several), zoom and margin. The result says the
camera it used and what it framed. A missing uuid is named in the error.
Read-only: it renders from its own camera, nobody's view moves.

tpAgent gains lastShot(), so TP_AGENT_VERSION is 1.5.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-up; a header button when a local model works signed out

Core draws the button (welcome card, or the header with a provider set up); the plugin's mount is now only the flag.
Phone: the AI sheet steps aside for the profile sheet. e2e connector-window follows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…from #516

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ndow header row names the close button

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ar on a tablet-wide screen (N6 unfolded) put its header under it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
AlexZ005 and others added 8 commits November 1, 2026 22:38
…w the default URL), the manual way under it with an icon copy button, How it works

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…able, its size is not 76's

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…timer

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… moved it)

The star-count checks looked for .welcome-btn only; FW1 made the GitHub link a
.welcome-link in the card's foot, so the button was not found and the
'hides the count' check passed on an empty string. Both checks now need the link.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@AlexZ005
AlexZ005 merged commit e315108 into main Nov 2, 2026
26 of 27 checks passed
@AlexZ005
AlexZ005 deleted the feat/76-int branch November 2, 2026 09:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant