diff --git a/CHANGELOG.md b/CHANGELOG.md
index c660e5b..b2c32ff 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,21 @@
All notable changes to this package. Versions follow [Semantic Versioning](https://semver.org/).
+## Unreleased
+
+### Story products
+
+- Story loading, playback and authoring use `nnnotes.product/1` manifests with shared object resources and language-specific UI and fonts.
+- Home and live-result stories resolve their host prefabs, room geometry, Spine materials and animation bindings by object identity.
+- Data validation checks the story product graph, font bindings, shader variants, audio files and model dependencies. `--lang` selects an explicit language scope.
+- Node story loading accepts a manifest or a product layout containing exactly one story.
+
+### Bug fixes
+
+- Keep Spine index uploads from changing another renderer's vertex array.
+- Keep model and shared-object validation caches independent.
+- Clear loading text after language changes and display configured audio volumes in the controls.
+
## [0.1.7](https://github.com/empty-sekai/ournotes-player/compare/v0.1.6..v0.1.7) — 2026-10-14
### Features
@@ -159,5 +174,3 @@ All notable changes to this package. Versions follow [Semantic Versioning](https
- add performance.md: the CPU cost of a frame
- a file holds each controller and clip once; the validator checks every reference _(story)_
-
-
diff --git a/docs/data-format.md b/docs/data-format.md
index b24b525..55861fd 100644
--- a/docs/data-format.md
+++ b/docs/data-format.md
@@ -965,3 +965,9 @@ exactly the files the viewer and the story player read.
It needs Node.js 22 or later and no dependencies. The opt-in data tests (`OURNOTES_DATA=
npm run test:data`) go
further and run lives and charts through the player in Node (see [CONTRIBUTING.md](../CONTRIBUTING.md)).
+
+## Song and replay data
+
+The song catalog example reads `music-data.json` with format `nnnotes.music-data/1`. Replay presets read
+`nnnotes.deck-data/1` for the caller-provided deck capabilities, and the replay worker accepts
+`nnnotes.replay-manifest/1` references. These are separate inputs from the live, model and story product manifests.
diff --git a/docs/fidelity.md b/docs/fidelity.md
index e68e9cb..f442652 100644
--- a/docs/fidelity.md
+++ b/docs/fidelity.md
@@ -528,7 +528,6 @@ Every `ENGINE:` note in `src/`, by file. `npm test` checks that this list matche
- the ambient probe of a Flat ambient is built natively from the ambient colour; a white Flat ambient is taken as
- the default reflection of a Skybox-mode scene without a skybox material (and without a custom cube) is taken
- unity_LightData (native per-object light data): x the offset of the per-object light indices (0), y their
-- atlas page texture import settings are not in the data; bilinear, clamped, no mipmaps here.
- a Skybox clear without a skybox material clears to the background colour.
**`src/story/simple/home/room.js`**
diff --git a/docs/story-author.md b/docs/story-author.md
index 2d91e83..9515e21 100644
--- a/docs/story-author.md
+++ b/docs/story-author.md
@@ -11,7 +11,7 @@ The tool is experimental: the script format and the commands may change between
## Requirements
- Node.js 22 or later.
-- A story site with stories in the model manifest format (`ournotes.story-manifest/2`) and its `models.json`
+- A story site with stories in the story product format (`nnnotes.product/1`) and its `models.json`
([story-data-format.md](story-data-format.md)). Pass it with `--site ` or set `OURNOTES_SITE`.
- For pictures (`render`, `base --out`, `model --out`): Chrome, Chromium or Edge. The tool starts a headless browser
of its own with a temporary profile and ends it when the command ends. It draws with SwiftShader (WebGL2 on the
@@ -181,10 +181,11 @@ long auto mode then keeps the line before the next one (`_waitTalkTextUnitTime`
### build
-`build