egatari 0.6.4-rc.1 → 0.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/CHANGELOG.md +82 -1
  2. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -8,6 +8,86 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
8
8
 
9
9
  <!-- Unreleased changes are fragments in changes/*.md (see CONTRIBUTING.md "Changelog"); node tools/changelog.mjs --release X.Y.Z moves them here. -->
10
10
 
11
+ ## [0.6.4] - 2026-11-04
12
+
13
+ ### Migration
14
+
15
+ - If you followed the old README and symlinked `~/.claude/skills/motion-*` (motion-slides, motion-slides-video, motion-components) to a clone,
16
+ those links are dead after pulling and the skills disappear. The skills moved into the plugin: delete `~/.claude/skills/motion-*`,
17
+ then in Claude Code run `/plugin marketplace add egatari/egatari-studio`, `/plugin install egatari@egatari` and `/plugin install egatari-studio@egatari`.
18
+ 古い README どおり `~/.claude/skills/motion-*` を clone へシンボリックリンクしていた場合、pull するとリンクが切れてスキルが消えます。
19
+ `~/.claude/skills/motion-*` を消し、上の 3 つのコマンドを Claude Code で実行してください
20
+
21
+ ### Added
22
+
23
+ - Offer “Download the AI skill” in Studio’s New dialog and Help in Japanese and English; serve matching generated ZIPs from the running site, embed them in the offline editor, preserve them in frozen copies, and attach both language ZIPs to releases.
24
+ - Distribute two entries in the egatari marketplace: a generated light egatari plugin with only make and no Node requirement, and egatari-studio with the repository tools and one studio skill (#126).
25
+ - Generate egatari-make-skill.zip from the same make content using only Node built-ins; verify the plugin payloads and ZIP contents against the generator.
26
+ - Add a CLI entry point for exporting working folders or single files with existing audio as video, and a regression check for personal environment references in plugin documentation.
27
+ - Add `egatari sheet` and `egatari comment-shots` to the npm CLI, and let `egatari video <working folder | .ega.html>` build and export a lesson with its existing audio (tools/video.mjs); the package now carries these three tools.
28
+ - npm package `egatari` with the command `egatari` (`npx egatari new|build|check|dev|ids|portable|video|tts|doctor`, `--help`, `--version`);
29
+ relative paths are resolved from the current folder. `egatari doctor` reports Node, uv, ffmpeg and a browser, with install hints.
30
+ `egatari tts` keeps its Python environment in the user's cache folder (`UV_PROJECT_ENVIRONMENT` overrides it)
31
+ - Samples of all parts: a page with every part of the parts library working, grouped by what to convey (#158), at <https://studio.egatari.org/parts/v2.1.1/> for parts library 2.1.1, with a list of versions at `/parts/`. The editor's help and step 4 of “New…” link to it. `node tools/build-app.mjs --parts` builds it from the vendored release alone (`tools/parts-gallery.mjs`, with the parts library's `gallery.mjs --pack` vendored from a pinned commit in `vendor/components-gallery/`); like the editor's `/vX.Y.Z/`, each published version stays as first released.
32
+ - Components 2.0 lessons now use egatari/components **v2.1.0** by default (`components2.lock.json`; 2.0.0 stays available): the line icons library `icons` 1.0.0 (Tabler Icons 3.49.0, MIT) and `m-cards` 2.0.0, cards with an icon, title and text in a row or a 2×2 / 3×2 grid with optional step arrows (#142); `m-orbit` 2.0.0, the moon's phases with the view from above and from the Earth linked by one angle. A lesson embeds only the icons whose names its text uses (format spec §6.2 subset by name).
33
+ - `egatari doctor` reports `~/.claude/skills/motion-*` entries that are dead links or only a moved notice, with the same steps. It deletes nothing
34
+ - For this release, stub skills at the old paths `skills/motion-slides`, `skills/motion-slides-video` and `skills/motion-components` tell an agent
35
+ that finds them where to install the plugin
36
+ - Editor app: each part in New…'s parts list shows a small thumbnail of its demo (light and dark, with alt text),
37
+ generated from the parts' `demo.html` by `npm run thumbs` (`tools/part-thumbs.mjs`) and checked by `npm run gen:check`
38
+ - Components 2.0: subset by name (format §6.2, `match: "name"`, e.g. the icons library of components 2.1.0): only the members
39
+ whose key is a word of the lesson's text (and the entry's `keep`) are written, and the portable index records `subset.names`
40
+
41
+ ### Changed (API)
42
+
43
+ - `buildPack`, `assemble` and `packWithRequest` take `sets` (part set names, `'all'` or `'a,b'`) instead of `series` and `tools`, and `short` (free plan: the core four get only their catalogue line too); `PACK_CAP_KB` is `{free, paid}`; `seriesPart`, `seriesOf` and `seriesForDeck` are now `setPart`, `setOf` and `setsForDeck`. `node kit/llm-pack.mjs --sets` replaces `--series` and `--tools`, which are still read for one version (a series as its sets, any tool as the tools set).
44
+
45
+ ### Changed
46
+
47
+ - `node kit/llm-pack.mjs` fits the free-plan pack exactly as New… does (one shared `fitPlan`/`fitPack` in `kit/core/llm-pack-assemble.mjs`): over 40 KB the core four get only their catalogue line too, and if still over, specialized parts are left out, largest first. It says on stderr what was shortened or left out; `--no-fit` prints the pack as assembled. `--list` shows the fitted free size next to the unfitted one, and labels the paid pack with every set (over 120 KB) as a warning only. The size table of `npm run gen` uses the same fitted sizes.
48
+ - The AI instruction pack is built from part sets and tiers (#125): the standard parts are always in it, the specialized parts of a set only when that set is ticked (stats, math, maps, kokugo, english, music, business, tools, science), and extra parts (code tree, grouping answers) never; the make skill plans from standard and specialized parts and reads an extra part's README only when the material needs it. Tiers, sets and part descriptions come from the default parts library catalogue (2.1.0), so Cards (m-cards), Score (m-score) and Moon phases (m-orbit) are described too.
49
+ - On the free plan, the standard parts other than the core four (bar chart, flow diagram, contents, predict and check) get only their one-line catalogue entry, so New… with every standard part ticked now starts within the 40 KB limit (about 35 KB instead of 65 KB). The plan changes the limit and how much the pack says. When ticked sets push the free pack over 40 KB, New… first shortens the core four the same way (and says so under the meter); only if it is still over does it suggest unticking specialized parts, largest first, never standard ones.
50
+ - Move local checks, builds, audio, parts and video instructions into egatari-studio:studio; retain motion-slides, motion-components and motion-slides-video in descriptions for one release. Document installing both plugins for studio and updating each separately.
51
+ - egatari-studio:studio runs every command through the egatari npm package pinned to the Studio minor (`npx egatari@0.6.x …`), starting with `egatari doctor` and its install hints, instead of a repository checkout and `npm ci`; it only reads bundled files (parts catalogue, READMEs, contract) from the plugin folder.
52
+ - Separate chat authoring from CLI checks and audio setup, document the optional local speech server, and keep parts' Components 2.0 rewrite for #123. The detailed make/studio content redesign remains separate.
53
+ - Tests: browser tests whose child processes each launched a browser (`kit/check.mjs` per component demo, `kit/abcjs-node.mjs` per score, `tools/sheet.mjs`) start one browser for the whole test (`shareBrowser()` in `kit/browser.mjs`). test-app's preview audio checks are their own serial step, test-app-audio, so macOS CI runs `npm test -- --jobs 2`.
54
+ - The `@fontsource` fonts are dev dependencies; the package carries only the weights and WOFF2 files the build embeds, with their
55
+ OFL licences, in `fonts/@fontsource/` (made by `tools/fonts-vendor.mjs` before `npm pack`). The build reads that copy first
56
+ - Built players from an installed package write `+dev` without a commit when the player is not a released one: the build no longer
57
+ reads the commit of a git repository the package happens to be inside
58
+ - `m-keyboard` 2.0.1: when a step's keys fall outside the keyboard's range, the error lists them and names a range that covers every key (e.g. "use C4-D5"), or says to split them over two keyboards.
59
+ - Components 2.0 lessons now use egatari/components **v2.1.1** by default (`components2.lock.json`; 2.1.0 and 2.0.0 stay available). `m-orbit` 2.0.1: the person on Earth no longer spins a full turn on a step between two positions with the same observer angle (e.g. `start` 1 → `visit` [2] with 8 positions, both held at evening); a full turn is added only when the step passes position 0 (new moon). Every other part keeps the same version and the same `index.js` as 2.1.0. The parts library also fixed the `m-timer` and `m-tape` demo pages (the parts list's thumbnails) and relabelled a stale `CHANGELOG.md` line ("components 2.0, alpha; not for lessons yet" → "components 2.0.0-rc.1 and 2.0.0") carried by many 2.0.0-era parts; `tools/components2-update.mjs` now refreshes a part's vendored files when only this kind of ancillary text changes under an unchanged `index.js`, instead of silently keeping the first-ever copy forever (#142 follow-up).
60
+ - Components 2.0 lessons now use egatari/components **v2.1.2** by default (`components2.lock.json`; 2.1.1, 2.1.0 and 2.0.0 stay available). Fixes from an audit of all 38 element parts: 37 parts get a new patch version (`m-kakijun` is unchanged). Code only — no README text, `doc` prop or static shape changed, so this release's AI instruction pack matches 2.1.1 except for version strings. Highlights: `m-hissan` 2.0.1 wrote wrong digits (or NaN) for products past 2^53 (e.g. 123456789×987654321 ended in "…260" instead of "…269"); products are now exact. `m-boxplot` 2.0.1 rounded quartiles against its own README's table (6.25 shown as 6.3); they are now exact. `m-kobun` 2.0.1 with `tate` drew 0 wide and opened its card off the slide, and showed 接頭/接尾 as 接; this is now reported and drawn correctly. Several parts' final (printed) state was missing information: `m-collect` 2.0.1 now keeps what was collected instead of fading every chip to opacity 0; `m-quad` 2.0.2 keeps where a moved point started; `m-codetree` 2.0.1 draws every decoded path in its summary; `m-kanbun` 2.0.1 keeps the arcs and order numbers; `m-menu` 2.0.1 prints each card's target slide; `m-keyboard` 2.0.2 keeps earlier steps' labels with `cumulative`. Every part except `m-kakijun` (which already had one) now has a role and an accessible name stating its final state, with the svg hidden from assistive technology and an author's `aria-label` kept. The parts list's `m-tape` and `m-score` demos also changed (tape's rows are now labelled A/B, not colour names; the rhythm slide steps `by="measure"` so eighth notes keep their length).
61
+ - Editor app: New… step 4 lists the parts, grouped by what to convey (subject-specific forms last, first for a school lesson),
62
+ instead of the subject and tool tiles. Standard parts start ticked; a specialized set is ticked from the subcategory or the words of step 2, with the reason
63
+ - Editor app: the chat AI's plan no longer limits the choice to two subjects; it sets the suggested size limit (40 KB or 120 KB), shown on a meter
64
+ with the parts you could untick when the instructions are over it
65
+ - `studio.newDeck` records the ticked `parts` instead of `subjects`, `tools` and `purposesOff` (earlier records are still read)
66
+ - New lessons are built with parts library 2 (the default 2.x catalogue, which the chat AI's instructions describe since #125): New… (pasting an AI's output into a new lesson), `npm run new` / `npx egatari new` and the working folders the make skill writes get `egatari.json` with `"componentsCatalogue": "2"`. Lessons and folders without that setting keep parts library 1; nothing switches silently. When a 1.x working folder fails to build only because it uses parts that library 2 has (#165), the editor's error offers "Use parts library 2", which writes that one setting (other members byte for byte) and rebuilds. A pasted reply that cannot build in an open single file now gets the same message with the fix, in the editor's language.
67
+ - A parts library 2 lesson whose own `<script>` uses the player's 1.x helpers (`DECK.define`, `DECK.MotionElement`, `DECK.el`, …) keeps them in the built player, so such code still runs instead of failing silently; lessons that do not use them stay without them.
68
+ - The data shapes in the AI instructions (catalogue column "data shape") now give the type of every field, optional ones too, in a short form: `dash?:bool`, `diff?:str`, enums as `"a"|"b"`, lists as `T[]`, tuples as `[num,num]`. Models no longer guess (`dash?` written as `"dashed"`, `rows[].diff` as `true`). To keep the free plan within 40 KB, the six fields every part shares (label, tex, note, tone: str; step: int; at: num) are typed once at the start of §3 and written by name only. A component's data error in check and in the fix request shows every type in the same form (`kit/shape.js` `brief`).
69
+ - Egatari Player 1.2.0 (the bundled player that files carry, `player` in the index and `deck-meta`): minor release. Part sounds are scheduled ahead on the Web Audio clock at their exact times (the whole step when it starts, and in autoplay the next step too) and cancelled on back, jump, seek, mute, pause, a manual step and `ctx.extend`; autoplay follows one absolute clock instead of re-anchoring every step. A hand-made file carrying a 2.x part without the registry no longer throws `egatariParts is not defined`: the element is reported in `DECK.componentErrors` and shown as its text equivalent. Printing no longer adds a blank last page. A component's data error in the quality check gives the type of every field. Files from earlier versions keep their own player.
70
+ - Components 2.0 subset: the lesson's text follows format §6.2: text nodes and attribute values of the slide source parsed
71
+ as a document with parse5 and walked in tree order, part data read as JSON, the narration and `glyphs`; comments, tag and attribute
72
+ names, `<style>` and `<script>` no longer count
73
+ - Components 2.0 subset: a bad declaration (e.g. a non-string key, a missing block) is reported and the whole part is written
74
+ with no `subset` record, instead of subsetting the other blocks
75
+
76
+ ### Fixed
77
+
78
+ - `node tools/test-all.mjs --help` prints the usage instead of running every test, and `--only` with names that match no step says so and exits 1 (it crashed at the summary table).
79
+ - test-parts-host waits for autoplay to advance after shortening the step, instead of a fixed 80 ms (failed on slow macOS CI).
80
+ - test-app waits for the theme folder notice, and for the narration save's reply, before checking them (it read the state before they arrived when steps ran in parallel).
81
+ - Printing to PDF no longer adds a blank last page: `#deck-live` and other screen-reader-only (`.sr-only`) helpers are hidden in print, and the last slide no longer forces a trailing page break
82
+ - A lesson that uses an element its selected parts library does not provide is no longer built with the part silently missing (#165). An element only parts library 2.x has (e.g. `<m-score>`) in a 1.x lesson, an element from a newer 2.x catalogue than the one selected, the name of a library part, or a 1.x lesson pinning a part to a 2.x version now stops `build`, the single-file export and the editor, and `check --json` reports `component-not-in-catalogue` (English and Japanese), naming the element and the fix, e.g. set `"componentsCatalogue": "2"` in `egatari.json`. Elements the lesson defines itself are not affected; names in no catalogue stay a warning.
83
+ - The 1.x player no longer throws `egatariParts is not defined` when a hand-made file carries a 2.x part without the registry: the element is reported in `DECK.componentErrors` and shown as its text equivalent, and the parts after it still run.
84
+ - Quality check (CLI and the editor): on a slide where a component cannot draw its data (`compData`), its steps are unknown, so the check no longer reports missing or orphan narration there (`narrMissing`/`narrOrphan`, in the editor `noNarration`/`orphanNarration`). It says once, as info (`narrRecheck`), that the narration and step count are checked again after the data is fixed. The fix request therefore no longer asks the AI to delete correct narration.
85
+ - Tests: test-bar-hint counts "still shown after 3.6 s" from when the bar was shown (the time to open the page and take a screenshot was added on slow macOS CI), and test-check-contrast reads colours with a CPU canvas (`willReadFrequently`, as the quality check does): the GPU canvas read back zeros on a loaded macOS runner (contrast 1.00:1).
86
+ - Part sounds in live playback stay on one grid when the audio clock falls behind for a moment (a stalled audio device callback): the player keeps the mapping from its clock to the Web Audio clock while notes are scheduled and the lag is under a second, instead of renewing it and moving every later note (seen as a uniform 124 ms shift mid-piece on a loaded macOS runner). It still renews it when the audio clock runs ahead, after a long suspension, when nothing is scheduled, and once (only if they disagree) when a clock that read 0 after resuming first moves. Player files change.
87
+ - Tight timing for musical steps. Video: clip boundaries are the cumulative start times rounded to whole frames (each step within one frame of exact time, no drift over many steps; before, per-step rounding added up, e.g. 4 frames over 50 measures at ♩=88 in 2/4), and part sounds sit at the exact cumulative time. Live: part sounds are scheduled ahead on the Web Audio clock at their exact times, the whole step when it starts (rolling, up to 30 s ahead) and in autoplay the next step too, so a stalled main thread does not make a note late (before, up to one animation frame late), and what has not sounded yet is cancelled on back, jump, seek, mute, pause of autoplay, a manual step and `ctx.extend`. Autoplay: step ends follow one absolute clock (start + planned lengths + extensions) instead of re-anchoring every step, and the next step's first sounds are scheduled from the end of the current one. Player files change.
88
+ - Instructions for the AI: the academic and kokugo series packs no longer name `m-sweep`, `m-kanbun`, `m-kobun` or `m-gendai` when those parts are left out
89
+ - Egatari Viewer: a launch at the start screen while another window of the Viewer was still listed (the same tab's previous page still unloading on a slow device, or a window that closes during the launch) left the new version waiting until the next launch: the page now asks again each second while it launches. A takeover asked by the previous page just before the new one loaded now reloads the new page too (Windows CI, runs 41596890832 and 41605131017)
90
+
11
91
  ## [0.6.3] - 2026-11-01
12
92
 
13
93
  ### Added
@@ -966,7 +1046,8 @@ First public release.
966
1046
  - Docs: README (English and Japanese), the contract (`docs/contract.md`), a reference of every option, syntax and key (`docs/reference.md`, `docs/reference.ja.md`), guides for the dev server and video, CONTRIBUTING, SECURITY, issue forms
967
1047
  - Tests (`npm test`) and GitHub Actions running them on Node 22 and 24, plus a TTS dry-run through video export
968
1048
 
969
- [Unreleased]: https://github.com/egatari/egatari-studio/compare/v0.6.3...HEAD
1049
+ [Unreleased]: https://github.com/egatari/egatari-studio/compare/v0.6.4...HEAD
1050
+ [0.6.4]: https://github.com/egatari/egatari-studio/compare/v0.6.3...v0.6.4
970
1051
  [0.6.3]: https://github.com/egatari/egatari-studio/compare/v0.6.2...v0.6.3
971
1052
  [0.6.2]: https://github.com/egatari/egatari-studio/compare/v0.6.1...v0.6.2
972
1053
  [0.6.1]: https://github.com/egatari/egatari-studio/compare/v0.6.0...v0.6.1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "egatari",
3
- "version": "0.6.4-rc.1",
3
+ "version": "0.6.4",
4
4
  "license": "MIT",
5
5
  "homepage": "https://studio.egatari.org/",
6
6
  "repository": {