Repository navigation
Releases: egatari/egatari-studio
Release list
v0.6.3
Egatari Studio v0.6.3
Egatari 1.0 Working Draft wd-2026-11-01 に従います。
v0.6.3 は、録音を続けて進められるようにし、パーツの効果音と、発表中の見る人の入力を加えた版です。先生が気づく変更から先に書きます。
先生にとって変わること
1. 録音を続けて録れます
録音モードに「続けて録る」が加わりました(初めはオン。この端末に覚えます)。
- Enter でテイクを残すと、整えて保存してから、音声のない次のステップを続けて録り始めます。
- 今の台本に合う音声があるステップでは待ちます。最後のステップで止まります。
- オフにすると、ステップごとに待ちます。
- ステップを替えても、音声や効果音は鳴りません。
- 録り始めと録り終わりのキーやトラックパッドのクリック音を取り除きます。マイクの遅れ(ヘッドセットなど)も見込みます。
2. パーツの効果音
ベル・チャイム・音符を鳴らすパーツが使えます。
- 発表(talk)と学習(learn)で、前へ進んだときだけ鳴ります。戻る・跳ぶ・印刷では鳴りません。動画には音が入ります。
- ツールバーの「効果音を消す」で消せます(この端末に覚えます)。このボタンは、効果音を持つパーツがある教材にだけ出ます。
- 録音モードの間は、この設定によらず鳴りません。
3. 発表者ビューから、予想の数とタイマーを操作できます
発表者ビューの「今の画面」で、m-predict の数を入れたり、タイマーの +1 分/−1 分 で時間を変えたりできます。
- 本体にも同じ数と延長が出て、本体での変更も発表者ビューに映ります。
- 同じスライドの中では、ステップを進めても戻しても残ります。別のスライドから入ったときや、スライドへ跳んだときに作者の値へ戻ります。
- −1 分は、残り時間が 0 になったところで止まります。延長は 1 時間までです。
- 作者の指定した時間・タイムライン・動画・印刷は変わりません。
4. 台本に発表者向けのメモを書けます
台本に {note:…} と書くと、発表者ビューにだけ出ます。読み上げ・字幕・動画・印刷には入りません。書き方の誤りは品質チェックが知らせます。
5. パーツライブラリ 2.0(試し。教材ごとに選ぶ)
egatari.json に "componentsCatalogue": "2" と書いた教材は、パーツライブラリ v2.0.0 のパーツで組みます。ほかの教材は今までどおりです。
- 楽譜(ABC)と数式を、組み立てのときに描いてファイルに入れます。
- 書き順(
m-kakijun)などのデータは、教材が使う字の分だけ入ります。 - 足りないパーツがある教材は組めません(品質チェックが
component-requires-missingで知らせます)。そうしたファイルも開けて、台本・音声・タイミングは直して保存できます。スライドの編集・テーマの切り替え・差し替えはできません。
技術的なこと
- 形式:Egatari 1.0(Working Draft wd-2026-11-01、規格 0fcc556)。
- プレーヤー:Egatari Player 1.1.0(minor。
kit/player.lock.json)。2.0 のパーツの ctx(ctx.extend)、効果音と消音、発表者ビューからの入力(#110)、録音モードの消音。前の版で作ったファイルは、そのファイルのプレーヤーのまま再生されます。 ctx.live:この版では休眠です。poll()はいつも null を返し、ライブの集計はまだ出ません。- パーツライブラリ:1.x は 1.13.1 のまま既定。2.x はカタログ v2.0.0(m-timer・m-predict・m-flow・m-quad・m-cycle は 2.0.1)。
components2.lock.json。 - 描画:KaTeX 0.19.1、abcjs 6.7.2(組み立てのときだけ。教材には SVG だけが入る)。
- チャットの AI への指示:指示の版は
2dcad2a6。 - Colab:ノートブックは v0.6.3 を取得する(
COLAB.ref)。 - 配布物:サンプルの Egatari ファイルと、編集アプリの凍結した写し
editor-site-v0.6.3.tar.gz。写しは/v0.6.3/で配られ、下の sha256 で照らされる。 - 全部の変更は CHANGELOG.md(下に同じ節を載せる)。
Egatari Studio v0.6.3
Follows Egatari 1.0 Working Draft wd-2026-11-01.
v0.6.3 lets you record step after step, and adds sound effects in parts and viewer input during a talk. Changes teachers will notice come first.
What changes for teachers
1. Keep recording
Recording mode has a "Keep recording" option (on at first; remembered on this device).
- When you keep a take with Enter, it is processed and saved, then the next step without audio starts recording.
- Steps whose audio matches the current script wait. The last step stops.
- Turn it off to wait at every step.
- Changing steps plays no audio and no sound effects.
- Key and trackpad clicks at the start and end of a take are removed, allowing for microphone delay (headsets and the like).
2. Sound effects in parts
Parts can ring bells, chimes and notes.
- In talk and learn they sound only when you move forward; not on back, jumps or printing. Videos include them.
- "Mute sound effects" on the toolbar turns them off (remembered on this device). The button appears only in lessons with parts that have sounds.
- Recording mode is always silent, whatever this setting says.
3. Predictions and timers from the presenter view
In the presenter view's current pane you can enter m-predict counts and change a timer with +1 min / −1 min.
- The stage shows the same counts and extension, and changes on the stage show in the presenter view.
- They stay while you move between steps on a slide, and go back to the author's values when you enter the slide from another one or jump to it.
- −1 min stops when no time is left. Extensions go up to one hour.
- Authored durations, the timeline, video and print do not change.
4. Presenter notes in the script
Write {note:…} in the script to show a note only in the presenter view. Notes are left out of narration, captions, video and print. The quality check reports malformed notes.
5. Components 2.0 (preview; chosen per lesson)
A lesson whose egatari.json has "componentsCatalogue": "2" is built with the parts of components v2.0.0. Other lessons build as before.
- Music (ABC) and formulas are drawn at build time and stored in the file.
- Data such as stroke order (
m-kakijun) is included only for the characters the lesson uses. - A lesson with a missing part cannot be built (the quality check reports
component-requires-missing). Such files still open; you can edit and save the script, audio and timing, but not the slides, theme or replacement.
Technical notes
- Format: Egatari 1.0 (Working Draft wd-2026-11-01, spec 0fcc556).
- Player: Egatari Player 1.1.0 (minor;
kit/player.lock.json): the 2.0 parts' ctx (ctx.extend), sound effects and mute, viewer input from the presenter view (#110), and silence in recording mode. Files from earlier versions keep their own player. ctx.live: dormant in this release.poll()always returns null; no live counts are shown yet.- Components: 1.x stays at 1.13.1 as the default. 2.x uses catalogue v2.0.0 (m-timer, m-predict, m-flow, m-quad and m-cycle are 2.0.1);
components2.lock.json. - Rendering: KaTeX 0.19.1; abcjs 6.7.2 (build time only; lessons carry SVG).
- Instructions for the chat AI: pack version
2dcad2a6. - Colab: the notebook fetches v0.6.3 (
COLAB.ref). - Assets: the example Egatari files, and
editor-site-v0.6.3.tar.gz, a frozen copy of the editor served at/v0.6.3/and checked against the sha256 below. - The full list is in CHANGELOG.md (the same section follows).
CHANGELOG [0.6.3]
[0.6.3] - 2026-11-01
Added
- Forward viewer counts and timer extensions from the presenter view's current pane to the stage, and mirror stage changes back. Keep input across steps on a slide and reset it only on slide entry or a jump, including a jump to the current slide. Preserve the author's values in the next pane, video and print.
- Reserve keys inside viewer input parts and fields for those controls; keep digits available for page navigation outside parts. Mouse timer clicks leave Space available to advance. Carry the manifest's
viewerInputcapability into built players and portable component entries. - Support presenter stage directions
{note:…}in scripts, shown inline in presenter view and omitted from narration, captions, video, print and audio hashes. The checker reports malformed notes. - Add component sound synthesis for bells, chimes and notes, with deterministic PCM rendering and video audio mixing that preserves notes across steps. In talk and learn playback, sound only forward time crossings after a user gesture; preserve note tails on forward step entry and stop them on back, jump or seek. Re-time live events for viewer step extensions.
- Add a keyboard-accessible “Mute sound effects” toolbar toggle, shown when a component declares sounds or implements
events(k), with a saved device preference. Temporarily silence component sounds in editor recording mode without changing that preference. Bundle both sound modules into built lessons and the editor. - Components 2.0 lessons can be exported as portable
.ega.htmlfiles. The index records the parts actually written, including libraries in dependency order, exact versions and requirements, embedded part metadata, licenses, build-time renderer records and subset hashes. Unpacking, rebuilding and tier A edits preserve those records. - The editor bundle carries the Components 2.0 catalogue and host. Parts use the shared
components.lock.jsoncontent table andresolveComponent()to findvendor/components/sha256/<hash>/; existing 1.x defaults stay unchanged. - Quality checks show a part's layout reports as warnings in Japanese and English, with the part's name, its explanation and a suggestion to give it more space or show less content. The editor preview uses the same warning categories.
- Components 2.0
build.fieldsnow renders ABC scores with pinned abcjs 6.7.2:abcSvg,abcMap, note/beam/measure/arc tags and renderer version/options in the data and portable index. The CLI uses Chromium through a synchronous helper; the editor's build worker requests main-thread rendering over RPC, and exports use the same renderer. Output follows the vendored rendered-markup allow-list, omits abcjs text, and leaves the ABC source with a build warning when rendering is unavailable or fails. abcjs is bundled only for editor rendering, with its MIT notice; lessons carry SVG without the abcjs runtime. - Components 2.0 (preview, opt-in per lesson): Studio vendors egatari/components v2.0.0 (tag commit dd4d4f0; m-timer, m-predict, m-flow, m-quad and m-cycle are 2.0.1) next to 1.13.x (
components2.lock.json,tools/components2-update.mjs; code sharesvendor/components/sha256/and the content table incomponents.lock.json). A lesson uses it only whenegatari.jsonhas"componentsCatalogue": "2"(or a catalogue version) or the build is given--components-catalogue 2; every other lesson builds with 1.x exactly as before. - For a 2.0 lesson the build writes the parts registry (
egatariParts, format spec §6.1) and then the parts in dependency order with exact versions, renders the declaredtexfields with KaTeX at build time (texHtml,renderers; spec §6.2), and keeps only the characters the lesson uses in subset blocks (e.g.m-kakijunstroke data): the whole slide source including attribute values, the narration, the data passed to parts and the part'sglyphs, each declared entry on its own in declared order. - Every part's meta is read from its text without running it and must be a static object literal (spec §6.1); an embedded part whose meta is not is reported and left out. A lesson whose parts need two definitions of one element name (two versions of one part, or two differently named parts) is refused with the conflict reported. The registry's
status()returns `{defined, failed: [{name, ve...
v0.6.2
Egatari Studio v0.6.2
Egatari 1.0 Working Draft wd-2026-10-28 に従います。
v0.6.2 は、テーマと字体を増やし、ペンの色を見やすくした版です。先生が気づく変更から先に書きます。
先生にとって変わること
1. テーマが 7 つになりました
新しく作る教材で、7 つのテーマから選べます。名前は日本の色の名前で、何に向くかの一言が付きます。
| テーマ | 向くもの |
|---|---|
| 藍(既定) | 研究・講義 |
| 墨 | 報告・提案 |
| 国語 | 国語・和の題材 |
| 常盤 | 理科・自然・学校 |
| 江戸紫 | 研究・一般の講演 |
| 焦茶 | 人文・歴史・地域 |
| 浅葱 | 小学校・広報・案内 |
- どのテーマも、文字と背景の明るさの差と、色覚の違う人にも色が見分けられることを、テストで確かめています。
- 「ビジネス」は新しくは選べなくなりました。ビジネスや提案の資料には「墨」を勧めます。「ビジネス」を使っている教材は、今までどおり組めて再生できます。
- チャットの AI への指示も、場面に合わせてテーマを勧めるようになりました(報告・提案は墨、国語は国語、それ以外は藍)。
2. 字体を選べます
テーマごとに、決まった一覧から字体を選べます。
- 日本語:BIZ UDPゴシック(既定)、BIZ UDP明朝、しっぽり明朝、Zen 丸ゴシック、Klee One
- 英語:Source Sans 3(既定)、Source Serif 4、Andika、Atkinson Hyperlegible Next
- 等幅:Source Code Pro
教材のファイルには、選んだ字体のうち、使っている文字の分だけが入ります。英語の斜体も、斜体を使ったときだけ入ります。どの端末にも入っていない字体を使うと、品質チェックが知らせます。
3. ペンの色が、どのテーマでもはっきり見えます
発表中に書き込むペンの色は、テーマに合わせて変わっていました。テーマによっては、青と黒の見分けがつきにくいことがありました。ペンの色は、テーマによらず次の 3 色に決めました。
- 赤
#FF4B00 - 青
#005AFF - 黒
赤と青は、カラーユニバーサルデザインの色です。再生器 Egatari Player は 1.0.2 になりました。前の版で作ったファイルは、そのファイルのプレーヤーのまま再生されます。
4. 図の中の字の重なりを、品質チェックが知らせます
図(SVG)の中で、字と字が重なっていると警告が出ます。どの字とどの字が重なっているかと、直し方の一言が出ます。直し方は、図の作り方(m-flow、m-quad、ほかのパーツ、手で書いた SVG)に合わせて変わります。わざと重ねている字は、data-overlap="ok" を付ければ警告が出ません。
5. 最初の画面
「新規作成…」のボタンと、その下の説明を、題やファイルを置く欄と同じく中央にそろえました。
技術的なこと
- 形式:Egatari 1.0(Working Draft wd-2026-10-28)。v0.6.1 と同じ。
- プレーヤー:Egatari Player 1.0.2(patch。
kit/player.lock.json)。ペンの色だけが変わる。 - テーマ:一覧は
kit/core/themes-list.mjs。見出し・表紙・結論の行の形は決まった CSS の断片(kit/core/theme-shapes.mjs)で、theme.jsonのlookに記録する。新しいテーマは 1.0.0。 - 字体:一覧は
FONT_LIST(kit/core/build-core.mjs)。テーマはtheme.jsonのfontsで選ぶ。オフラインの編集アプリは既定の 2 つだけを持つ。品質チェックfontNotEmbeddedを追加。 - 品質チェック:SVG の字どうしの重なり(
kit/core/layout-scan.mjs)。字の形が占める範囲だけを比べる。 - チャットの AI への指示:指示の版は
ecca7b6f。 - Colab:ノートブックは v0.6.2 を取得する(
COLAB.ref)。 - 配布物:サンプルの Egatari ファイルと、編集アプリの凍結した写し
editor-site-v0.6.2.tar.gz。写しは/v0.6.2/で配られ、下の sha256 で照らされる。 - 全部の変更は CHANGELOG.md(下に同じ節を載せる)。
Egatari Studio v0.6.2
Follows Egatari 1.0 Working Draft wd-2026-10-28.
v0.6.2 adds themes and fonts and makes the pen colours easy to see. Changes teachers will notice come first.
What changes for teachers
1. Seven themes
New lessons can use one of seven themes. Each has a Japanese colour name and a short note on what it suits.
| Theme | Suits |
|---|---|
| Indigo 藍 (default) | Research and classes |
| Ink 墨 | Reports and proposals |
| Kokugo 国語 | Japanese language arts |
| Evergreen 常盤 | Science, nature and schools |
| Edo purple 江戸紫 | Research and public talks |
| Dark brown 焦茶 | Humanities, history and local studies |
| Teal 浅葱 | Primary schools, publicity and guides |
- Tests check every theme for text contrast and for colours that stay distinct under different colour vision.
- "Business" can no longer be chosen for new lessons; use Ink for business and pitch decks. Lessons that use Business still build and play as before.
- The instructions for the chat AI suggest a theme by situation (Ink for reports and proposals, Kokugo for Japanese language arts, Indigo otherwise).
2. Choosing fonts
A theme can choose fonts from a fixed list.
- Japanese: BIZ UDPGothic (default), BIZ UDPMincho, Shippori Mincho, Zen Maru Gothic, Klee One
- English: Source Sans 3 (default), Source Serif 4, Andika, Atkinson Hyperlegible Next
- Monospace: Source Code Pro
A lesson file carries only the chosen fonts, and only for the characters it uses. English italics go in only when the lesson uses italics. The quality check reports text in a font that no device is sure to have.
3. Pen colours that show on every theme
The pens for drawing during a talk took their colours from the theme, and on some themes Blue and Black were hard to tell apart. The pens are now the same three colours on every theme:
- Red
#FF4B00 - Blue
#005AFF - Black
The red and blue come from the Colour Universal Design set. The bundled player is now Egatari Player 1.0.2. Files from earlier versions keep their own player.
4. The quality check finds overlapping text in figures
When text inside a figure (SVG) overlaps other text, the quality check warns. It names both texts and suggests a fix that depends on how the figure was made (m-flow, m-quad, another part, or hand-written SVG). Text that is layered on purpose can opt out with data-overlap="ok".
5. Start screen
The New… button and the hint under it are centred, like the title and the drop area.
Technical notes
- Format: Egatari 1.0 (Working Draft wd-2026-10-28), as in v0.6.1.
- Player: Egatari Player 1.0.2 (patch;
kit/player.lock.json). Only the pen colours change. - Themes: the list is
kit/core/themes-list.mjs. Heading, cover and conclusion-line shapes are fixed CSS snippets (kit/core/theme-shapes.mjs) recorded intheme.jsonlook. The new themes are 1.0.0. - Fonts: the list is
FONT_LIST(kit/core/build-core.mjs); a theme chooses withtheme.jsonfonts. The offline editor carries only the two defaults. New quality checkfontNotEmbedded. - Quality check: overlapping SVG text (
kit/core/layout-scan.mjs), comparing only the glyphs' ink. - Instructions for the chat AI: pack version
ecca7b6f. - Colab: the notebook fetches v0.6.2 (
COLAB.ref). - Assets: the example Egatari files, and
editor-site-v0.6.2.tar.gz, a frozen copy of the editor served at/v0.6.2/and checked against the sha256 below. - The full list is in CHANGELOG.md (the same section follows).
CHANGELOG [0.6.2]
[0.6.2] - 2026-10-30
Added
- Fonts a lesson can choose (backlog #133): a fixed list of OFL fonts from
@fontsource(FONT_LISTinkit/core/build-core.mjs). Japanese: BIZ UDPGothic (default), BIZ UDPMincho, Shippori Mincho, Zen Maru Gothic, Klee One. English: Source Sans 3 (default), Source Serif 4, Andika, Atkinson Hyperlegible Next. Monospace: Source Code Pro.
Only the fonts a lesson chooses go into its file, subset to the files with the characters it uses. A theme chooses them withtheme.jsonfonts({"body": …, "heading": …}), or a theme or the slides name them in CSS. The offline editor carries only the two defaults. - English italic: Source Sans 3 italic goes in only for text the lesson sets in italic (
em,i,cite,font-style: italic, a part that draws italic text). 700 italic goes in only for italic inside bold, and each face only for the files with those characters. A lesson without italics does not grow; examples/tmlr2026-calibration grows by 21.4 KB (one 400-italic latin file). In Japanese lessons only Latin characters count, and Latin text inem,iandciteis set in that italic. - A theme whose body font is a Japanese font from the list (
asagi) embeds BIZ UDPGothic only for characters that font lacks, soasagilessons are no heavier thandefault(minimal 2,106,522 B vs 2,278,049 B). - Quality check
fontNotEmbedded(warning, once per lesson): slide text whose font is neither embedded nor generic, so it looks different on each device. - Seven bundled themes for new lessons (backlog #129), shown by Japanese colour names with a small note on what each suits: 藍 Indigo (
default), 墨 Ink (sumi, new), 国語 Kokugo (kokugo), 常盤 Evergreen (tokiwa, new), 江戸紫 Edo purple (murasaki, new), 焦茶 Dark brown (kogecha, new; base#3D3132, at least ΔE00 23 from the red under every simulated colour vision) and 浅葱 Teal (asagi, new, in Zen Maru Gothic); the new ones are 1.0.0. The list iskit/core/themes-list.mjs; the editor's New… ③ shows the note under the list and Change theme… next to each name.
Their heading, cover and conclusion-line shapes are fixed CSS snippets (kit/core/theme-shapes.mjs), copied intotokens.cssand recorded intheme.jsonlook, so the theme builder (#58) can offer the same shapes. Boxes do not move, and theme CSS is never wrapped in:where(). tools/test-themes.mjs(innpm test): every bundled theme builds a sample lesson with no contrast, divider, font or metrics warning; role colours reach 4.5:1 (also the conclusion line, divider, cover title and the heading on its band);--emphand--termstay ΔE*ab ≥ 35 apart under protan and deutan simulation (Machado 2009) and ΔE00 ≥ 20 for all four vision types; thelooksnippets match. Colour maths inkit/core/color-check.mjs.
Changed
- Player: the pen colours no longer come from the theme (
--emph,--term,--fg). They are fixed: the Colour Universal Design red#FF4B00and blue#005AFFand black#000000, still named Red, Blue and Black (backlog #132). On white they reach 3.4, 5.4 and 21:1 (lines need 3:1), and under simulated colour vision they stay at least ΔE*ab 61 apart; with the theme colours, Blue and Black were ΔE 8 apart insumi.
tools/test-themes.mjschecks the three pens on the ground of every bundled theme. The presenter view sends the new names; points sent with the old names are still accepted. This is Egatari Player 1.0.2. - Egatari Player 1.0.2 (patch; the bundled player that files carry,
playerin the index anddeck-meta): the fixed pen colours above. Files from earlier versions keep their own player. businesscan no longer be chosen for new lessons (editor lists,npm run new, which suggestssumi); it stays bundled, so lessons that name it or recorded its version build and play as before.- Instructions for the AI: the theme advice is per situation (business and pitch decks →
sumi, Japanese language arts →kokugo, otherwisedefault), and the business series pack and its worked example usesumi. Pack versionecca7b6f; the free kokugo single (ja) stays under its 40,960 B cap.
Fixed
- Start screen: the New card now centres its button and the hint under it, like the title, the lead line and the drop card. The hint wraps evenly (no single word or particle left alone on a line) on a phone. Th...
v0.6.1
Egatari Studio v0.6.1
Egatari 1.0 Working Draft wd-2026-10-28 に従います。
v0.6.1 は、v0.6.0 を実際に使って見つかったことを直した版です。先生が気づく変更から先に書きます。
先生にとって変わること
1. スマートフォンで教材が画面に収まります
- 縦に持ったスマートフォン(幅 390 px ほど)で、スライドの左右が切れなくなりました。スライドが画面の幅に合わせて縮みます。
- ツールバーが画面からはみ出さず、入りきらないボタンは 2 行目に回ります。
- タッチの端末では、最初の案内が「画面をタップすると、ツールバーが出ます」になります。
- 再生器 Egatari Player は 1.0.1 になりました。前の版で作ったファイルは、そのファイルのプレーヤーのまま再生されます。
2. 印刷から戻っても、パーツに入れたものが消えません
印刷のあと教材に戻ると、パーツに入れた値(m-predict の数、タイマーの延長など)が消えていました。直しました。スライドの一覧と品質チェックも同じです。
3. 画面の言葉を見直しました
- 最初の画面:「.ega.html ファイルをここにドラッグ&ドロップ」。サンプルの説明は「Egatari で作ったサンプルの教材です。開いて再生したり、直したりできます。」です。
- 「フォルダで作業する…」と「自分のテーマ…」は、ボタンとはっきり分かる形にし、それぞれに 1 行の説明を付けました。
- 個人情報の説明:「ファイルは、開いたファイルと選んだフォルダだけを読み書きし、どこにもアップロードしません。」AI 音声の 2 つの使い方(この PC で作る・クラウドで作る)で何をダウンロード・アップロードするかも書きました。
- 作業フォルダから書き出したファイルを開くと、警告ではなくお知らせとして「このファイルは、作業フォルダ(スライドと台本のファイルを入れたフォルダ)から書き出したものです。…」と出ます。配布しているサンプルには、このお知らせは出ません。
- 用語をそろえました:教材を開く機器は「端末」、教材を受け取る人は「参加者」(授業)または「学習者」。
4. 参照音声は教材に入りません
AI 音声がまねる「参照音声」の録音は、Egatari ファイルに保存・エクスポートされません。作業フォルダの中にあると、品質チェックが知らせます。
5. Egatari Viewer(viewer.egatari.org)
iPhone・iPad などで、受け取った Egatari ファイルを開いて再生するページです。
- 一度開けば、ネットワークがなくても動きます。新しい版は、次に開いたときから使われます(再生中に入れ替わることはありません)。
- パソコンでは、矢印・Space・PageUp/PageDown・Home/End で、どこを押したあとでも教材が進みます。
- ライブ(授業中の質問・投票)に参加できます。
6. そのほか
- 編集中にプレビューを読み込み直した直後、スライドの一覧と「スライド ▾」の操作が一瞬 1 枚目に向いていた不具合を直しました。
- 品質チェックのパネルで、組み立ての警告も数に入り、スライドの番号と題で出るようになりました。
- 音楽の指示:鍵盤(
m-keyboard)の範囲は「使う鍵を全部含め、1 オクターブ以上(例 C4-C5)。両端は白鍵、3 オクターブまで」。
技術的なこと
- 形式:Egatari 1.0(Working Draft wd-2026-10-28)。v0.6.0 と同じ。
- プレーヤー:Egatari Player 1.0.1(patch。
kit/player.lock.json)。 - 書き出しの印:
exportedFromが合っていても、組んだ教材と原稿が食い違う写しは「書き出したあと直した」とする(exportedState(…, {sourceMatches})、npm run portable -- compare)。サンプルは印なしで組む(build --portableは今までどおり印を書く)。 - チャットの AI への指示:指示の版が変わる(音楽の束の
m-keyboard)。 - リポジトリ:
tools/sync-spec.mjsはテストが読むものだけを写す(vendor/egatari-spec54 MB → 14 MB)。既定の参照音声はtts/voices/だけ。README の取得はgit clone --depth 1。 - Colab:ノートブックは v0.6.1 を取得する(
COLAB.ref)。 - 配布物:サンプルの Egatari ファイルと、編集アプリの凍結した写し
editor-site-v0.6.1.tar.gz。写しは/v0.6.1/で配られ、下の sha256 で照らされる。 - 全部の変更は CHANGELOG.md(下に同じ節を載せる)。
Egatari Studio v0.6.1
Follows Egatari 1.0 Working Draft wd-2026-10-28.
v0.6.1 fixes what we found using v0.6.0 in practice. Changes teachers will notice come first.
What changes for teachers
1. Lessons fit a phone screen
- On a phone held upright (about 390 px wide) the slide is no longer cut off at both sides; it scales to the screen width.
- The toolbar stays on the screen and wraps onto a second row.
- On touch devices the first hint reads "Tap the screen to show the toolbar".
- The bundled player is now Egatari Player 1.0.1. Files from earlier versions keep their own player.
2. Returning from print keeps what was entered in parts
After printing, values entered in parts (the counts in m-predict, a timer's extension) were reset. Fixed; the slide overview and the quality check behave the same way.
3. Clearer wording
- Start screen: "Drag a .ega.html file here". The Samples line reads "Sample lessons made with Egatari. Open one to play it or edit it."
- "Work in a folder…" and "My themes…" are now ordinary buttons, each with a one-line hint.
- Privacy: "Only the file you open and the folder you choose are read and written; nothing is uploaded." It also says what the two AI voice routes (on this computer, in the cloud) download or upload.
- A file exported from a working folder now shows an information line, not a warning: "This file was exported from a working folder (the folder that holds the slide and script files). …". The distributed samples no longer show it.
- Terms: the computer or tablet a lesson is opened on is a "device"; the people who receive it are "participants" (in class) or "learners".
4. Reference voices stay out of lessons
The reference recording that an AI voice imitates is never saved or exported into an Egatari file. The quality check reports one inside the working folder.
5. Egatari Viewer (viewer.egatari.org)
A page for opening and playing a received Egatari file on iPhone, iPad and other devices.
- Once opened, it works offline. A new version is used from the next launch, never while a lesson plays.
- On a computer, the arrow keys, Space, PageUp/PageDown and Home/End move the lesson wherever you clicked last.
- Participants can join Live (questions and polls in class).
6. Also
- In the editor, right after the preview reloads, the slide list and the Slide ▾ commands no longer point at slide 1 for a moment.
- The Quality check panel counts build warnings and shows them with the slide number and title.
- Music instructions: the
m-keyboardrange is "Include every key you use, at least one octave (e.g. C4-C5). Both ends on white keys, up to 3 octaves."
Technical notes
- Format: Egatari 1.0 (Working Draft wd-2026-10-28), as in v0.6.0.
- Player: Egatari Player 1.0.1 (patch;
kit/player.lock.json). - Exported-from mark: a copy whose compiled lesson no longer matches its source counts as edited even when
exportedFrommatches (exportedState(…, {sourceMatches}),npm run portable -- compare). Samples are built without the mark;build --portablestill writes it. - Instructions for the chat AI: the pack version changes (
m-keyboardin the music set). - Repository:
tools/sync-spec.mjscopies only what the tests read (vendor/egatari-spec54 MB → 14 MB); the default reference voices live only intts/voices/; the README clones withgit clone --depth 1. - Colab: the notebook fetches v0.6.1 (
COLAB.ref). - Assets: the example Egatari files, and
editor-site-v0.6.1.tar.gz, a frozen copy of the editor served at/v0.6.1/and checked against the sha256 below. - The full list is in CHANGELOG.md (the same section follows).
CHANGELOG [0.6.1]
Added
- Egatari Viewer (formerly Egatari Play;
play/,tools/build-play.mjs→_play/, at viewer.egatari.org): a web app page that opens an Egatari file on the device and plays it, for iPhone and iPad (no local HTML from the Files app), Androidcontent://trouble and chat previews that fail. The lesson runs in asandbox="allow-scripts"srcdoc frame behind Studio's trusted preview prefix; recent files stay on the device (OPFS, IndexedDB fallback) and can be deleted; Androidshare_target; a versioned service worker that caches only the page's own files. Not deployed yet (docs/viewer.md) - Egatari Viewer acts for the lesson in Live (format spec live §2A): the page shows Join in its own chrome and holds the WebSocket, learns the step from the lesson's position events and relays nothing into the lesson; endpoints the page does not allow get the join link. Links the lesson asks to open go through
kit/core/link-policy.mjsin the page's own box - Egatari Viewer stage 0: works offline once opened (the app shell is precached by its service worker; lessons are still read on the device only); a new version takes over on the next launch only, never while a lesson plays (no update button); the manifest names it "Egatari Viewer", "Ega Viewer" on the Home Screen, with the え icon. Config and docs move to viewer.egatari.org (
play/wrangler*.toml, Workeregatari-viewer; docs/viewer.md, docs/viewer-sharing.md on getting a file onto an iPhone or iPad and opening it in the Viewer) - Egatari Viewer on iPhone and iPad shows a one-line add-to-home-screen tip with iOS's own labels (Safari, or Chrome's 「表示を増やす」 and 「Web アプリとして開く」) in a browser tab, until dismissed; on Android, when the browser offers it, an Install button that calls
prompt(); nothing from the Home Screen or on a PC tools/studio-icons.mjsbuilds Egatari Studio's own tab and app icon 「す」 (assets/logo/studio/: the ico files, a light/darkfavicon.svg, the touch icon and the manifest icons) from the owner's SVGs inassets/logo/studio/src/;tools/test-viewer-webkit.mjschecks the Viewer in Playwright's WebKit at iPad sizes (a step ofnpm test; skipped where WebKit is not installed)
Changed
- LLM pack, music series: the
<m-keyboard>rangeguidance now reads "Include every key you use, at least one octave (e.g. C4-C5). Both ends on white keys, up to 3 octaves." (the Japanese pack and the part list row say the same). The pack version changes. tools/sync-spec.mjscopies only what the tests read (an allow-list), sovendor/egatari-specshrinks from 54 MB to 14 MB; the unread pre-1.0 document fixtures are no longer copied.- The default reference voices
alice.wavandbob.wavnow exist only intts/voices/; the identical copies inlab/voices/are removed. The Colab notebook reads them fromtts/voices/, andnpm run build:appcopies them into the site'slab/voices/for the in-browser voice. - README: the quick start clones with
git clone --depth 1. - Egatari Studio's favicon, touch icon and manifest icons are 「す」; its manifest
short_nameis "Egatari Studio". The え mark stays on the header, Egatari Viewer and exported.ega.htmlfiles - Egatari Viewer's messages end with what to do next (not an Egatari file, too large, read and parse errors, Live errors); joining a Live while offline says so at once; wording follows the terms (再生専用, 参加コード, 待機室, ステップ)
- Wording (glossary 2026-10-28,
docs/terms.json): the computer or tablet a lesson is opened on is called 端末 / device, not 機械 / machine, and the person who opens a lesson is 参加者 (participant) or 学習者 (learner), not 見る人 / viewer. In the Live panel the time note reads 「時刻はこの端末の時間帯で入れます」 ("Times are in this device's time zone"); an attachment warning names 「この端末のパス」 ("device-specific path"); without the Mincho font a build says the lesson 「開く端末の明朝で表示されます」. The docs follow (パソコン where a real PC is meant, such as a TTS server on another computer).lint:termschecks the new words; 機械学習 and the 4M (人・機械・方法・材料) of the m-fishbone exa...
v0.6.0
Egatari Studio v0.6.0
Egatari 1.0 Working Draft wd-2026-10-28 に従います。
v0.6.0 は、Egatari ファイルの形を 1.0 にし、教材を作る画面を作り直した版です。先生が気づく変更から先に書きます。
先生にとって変わること
1. Egatari ファイルが 1.0 の形になりました
- Egatari ファイル(
.ega.html)は、再生するプレーヤーを中に持ちます。ファイルは、どのプレーヤーで作られたか(player)と、どの Studio で作られたか(generator)を記録します。 - ファイルには、外へつながらない安全のポリシー(Content-Security-Policy)が入ります。配った教材が、知らないうちにどこかへ通信することはありません。ライブや埋め込みを使うときだけ、使う行き先がそのポリシーに加わります。
- 見た目と再生は、これまでと同じです。
2. 前の版のファイルは、読むだけで開き、お知らせが出ます
v0.4.8 までに作った Egatari ファイル(「前の版のファイル」)は、これまでどおり再生できます。編集アプリで開くと読むだけになり、編集と保存はできません(元のファイルは書き換わりません)。画面のお知らせに 2 つのボタンが出ます。
- 前の版の Studio で開く:その教材を作った版の Studio(
studio.egatari.org/v<版>/)が新しいタブで開きます。そこで直して保存してください。 - 移行の手引きを開く:新しい形に移すときの手順です(
docs/migrating-0.x.ja.md。人でも AI のコーディングエージェントでも順に進められるように書いてあります)。
前の版の作業フォルダ(どのスライドにも id がないもの)にも、同じお知らせが出ます。npm run ids で id を足すと消えます。今の版の教材に手でスライドを足しただけなら、お知らせは出ず、エクスポートのときに id が付きます。
3. 新しい画面
- 道具の列が 4 つになりました:ファイル ▾・スライド ▾・品質チェック・プレビュー ▾。ほかのアプリと同じ名前の並びです。保存は「保存」と「名前を付けて保存…」、配るときは ファイル ▾ → エクスポート ▸ → 参加者用(再生専用)… です。
- 品質チェックは、組み直すたびに自動で動きます(1 秒ほど待ちます)。見つかった数がボタンに出ます。
- **新規作成…**は、チャットの AI に頼む方法だけの、5 つの質問になりました:①どこで使うか ②何について、誰向けか ③見た目 ④チャットの AI に指示を送る ⑤AI の出力を貼る。答えた質問は 1 行にたたまれ、「変更」で戻れます。AI の出力は、スライドと台本の 2 つの欄に貼れば、まとめて貼っても振り分けられます。
- **ファイルの情報…**で、題名・ライセンス・作り手、形式、作った Studio の版を見られます。
- スライド ▾ → テーマを変更…で、開いている教材のテーマを替えられます(保存するまでは元に戻すで戻せます)。
- 長い教材(9 枚以上)は、構成案を先に作り、そのあと 6 枚ずつ頼む 2 段で作ります。
4. ツールバーの出し方が分かりやすくなりました
プレーヤーの下のツールバー(再生や発表の操作)は、これまで近づかないと出ず、出し方が分からない人がいました。
- 教材を開くと、ツールバーが約 5 秒見えます。その端末で初めて開いたときだけ、出し方を 1 行で案内します。
- ツールバーが隠れている間も、左下に小さな薄いボタンツールバーを表示が残ります。クリック・タップ・キーボードで出せます。動画と印刷には出ません。
- iPad やスマホでは、スライドをタップするとツールバーが戻ります(スライドは進みません)。Safari でもボタンが 1 回のタップで 1 回だけ効きます。
- 編集中は、ペン・レーザーポインター・自動再生などの発表の道具が自動で切れ、道具のボタンも隠れます(編集と発表の道具がぶつかる不具合を直しました)。
5. 無料のプランの分野に、音楽と英語が加わりました(選べるのは今までどおり 2 つ)
新規作成…の「内容の分野」に、音楽(鍵盤で音階・和音・音程)と英語(文型:S V O C M、句・節)が加わりました。無料のプランでは、分野と道具をあわせて 2 つまで選べます(選べる数は変わりません)。有料のプランでは全部の分野のパーツが入ります。チャットの AI が無料か有料かは、④で聞きます。
パーツライブラリのパーツも増えました:筆算・数直線・テープ図、鍵盤、ひらがなの書き順、英文の構造、ヒートマップ、世界地図、ほか。一部は有料のプランの指示にだけ入ります。
6. 章の扉が読めるようになりました
章の扉(<section class="slide sec">)の題を <h2> で書くと、字が地に溶けて読めませんでした(#128)。直しました。品質チェックも、扉の題が <h1> でないとき、字と地のコントラストが足りないときに知らせます。
7. 保存のとき、プレーヤーが変わるなら先に聞きます
別のプレーヤーを持つファイルを組み直して保存するとき、プレーヤーが変わりますと、今のプレーヤーと保存後のプレーヤーを見せて、保存するかキャンセルするか聞きます。同じプレーヤーの新しい版に変わるだけのときは聞きません。
8. そのほか
- 発表者ビューで、黒い画面(
b)の状態が見え、発表者ビューのbでも切り替えられます。 - 編集中にも、マーカー(
m)で円や矢印を描いてコメントを付けられます。 - 「授業」は表示のモードではなくなり、先のステップを薄く見せる(
l)のオプションになりました。現在のステップの蛍光ペン風の強調はなくなりました。 - 基調色のテーマ
default1.2.0:結論の行に左の太い線と薄い灰色の地を付けました(デザインの提案:@totasuko-lab)。テーマbusiness1.0.1、default1.1.0 も含みます。前の版の色のままの教材は、その色を保ちます(「テーマを更新」で新しい色にできます)。 - 画面とドキュメントの言葉を 1 つの用語集(
docs/terms.json)にそろえました(ステップ・台本・パーツ・Egatari ファイル・再生専用・エクスポートなど)。 - Colab で AI 音声を作る流れが、CPU でも使えるようになり、手順が画面に出ます。
技術的なこと
- 形式:Egatari 1.0(Working Draft wd-2026-10-28)。索引と
deck-metaにplayer(egatari-player1.0.0)とgenerator(egatari-studio、この版)を書く。contractsは{"source": 1}(contracts.runtimeは書かない・読まない)。playerのない索引は 1.0 より前の草案として読み、preDraftと知らせる。 - ファイルのポリシー:
<meta charset>の直後に Content-Security-Policy の<meta>(外へつながらない基準)。extensions.embedをdeck-extensionsに写し、宣言した行き先だけを該当のディレクティブに足す(embed はframe-src、Live はconnect-src)。ポリシーが欠けている・位置が違う・違うときは、読み手が適合しないと報告する。 - プレーヤー:Egatari Player 1.0.0 を最初のリリースとして固定(
kit/player.json、kit/player.lock.json、npm run player:check -- --strict)。中身が違うビルドは+dev.<commit>が付く。 - 保存:組み直さない保存(tier A)は
playerとgeneratorをバイトのまま保つ。組み直しで別のプレーヤーのファイルならplayerChangeを出す。egatari.jsonは、自分の項目だけを書き、ほかの項目はバイトのまま残す(updateConfig)。 - 書き出し:id のないスライドと台本の見出しに id を振り、作業フォルダへ書き戻す。1.0 の語彙の外(
blue・red・gray、data-steps、data-anim、data-mode="lecture")は品質チェックが警告する。教材の seed(data-egatari-seed)はもう書かない。 - パーツライブラリ:components v1.13.1 が既定(1.0.0 以降を記録した教材には、その版が残る)。新しい分野
music・english。m-kakijunのライセンスはMIT AND OFL-1.1(NOTICEに記載)。m-map-worldの地図は Natural Earth(パブリックドメイン)。 - チャットの AI への指示:無料のプランの大きさの上限は、分野 1 つで 40 KB、2 つで 50 KB。パーツの名前を出すのは、コピーした指示に入っているものだけ。
- セキュリティ:KaTeX 0.18.2 → 0.19.0(109 の数式で出力が同じことを確認)、@fontsource/source-sans-3 5.3.1、ajv 8.20.0(開発のみ)。Node は
^22.23.4 || ^24.22.1 || >=26.12.1。CI とリリースの配布物はnpm ci --ignore-scripts。Dependabot は 7 日(major は 14 日)待つ。 - 配布物:サンプルの Egatari ファイルと、編集アプリの凍結した写し
editor-site-v0.6.0.tar.gz。写しは/v0.6.0/で配られ、下の sha256 で照らされる。 - 全部の変更は CHANGELOG.md(下に同じ節を載せる)。
Egatari Studio v0.6.0
Follows Egatari 1.0 Working Draft wd-2026-10-28.
v0.6.0 moves Egatari files to the 1.0 shape and rebuilds the screens where you make a lesson. What you will notice comes first.
What changes for teachers
1. Egatari files now have the 1.0 shape
- An Egatari file (
.ega.html) carries its own player. It records which player (player) and which Studio (generator) made it. - Every file carries a security policy (a Content-Security-Policy) that connects nowhere. A lesson you hand out cannot quietly contact anything. Only when you use Live or an embed does the policy add the address that feature needs.
- How lessons look and play does not change.
2. Files from an earlier version open read-only, with a notice
Egatari files made up to v0.4.8 (a "File from an earlier version") still play as before. In the editor they open read-only: you cannot edit or save them, and the original is not changed. The notice offers two buttons:
- Open in the earlier Studio: the Studio that made the lesson (
studio.egatari.org/v<version>/) opens in a new tab. Edit and save there. - Open the migration guide: the steps for moving a lesson to the new shape (
docs/migrating-0.x.md, written so that a person or an AI coding agent can follow it step by step).
A working folder from an earlier version (no slide has an id) gets the same notice; adding ids with npm run ids makes it go away. A slide you add by hand to a current lesson gets no notice; export gives it an id.
3. The new screens
- Four items in the toolbar row of the editor: File ▾, Slide ▾, Quality check and Preview ▾, named like the menus of other apps. To hand a lesson out, use File ▾ → Export ▸ → For participants (play only)….
- Quality check runs by itself after each build (about a second later) and shows the number of findings on its button.
- New… is now the chat-AI way only, in five questions: ① where you will use it, ② what it is about and who it is for, ③ how it should look, ④ send the instructions to your chat AI, ⑤ paste the AI's output. Answered questions fold to one line with Change. The output goes into two fields, Slides and Script; pasting everything at once is sorted for you.
- File info… shows the title, license and creators, the format, and the Studio version that made the file.
- Slide ▾ → Change theme… changes the theme of an open lesson (Undo restores it until you save).
- Long lessons (more than 8 slides) are made in two passes: an outline first, then 6 slides at a time.
4. The toolbar is easier to bring back
The toolbar of the player (the playback and presentation controls) used to show only when you moved toward it, and some people could not find it.
- When a lesson opens, the toolbar stays for about 5 seconds. The first time on a device, one line says how to bring it back.
- While it is hidden, a small faint button, Show toolbar, stays at the bottom left. Click, tap or use the keyboard. It is not shown in video or in print.
- On iPads and phones, tapping the slide brings the toolbar back (the slide does not advance). In Safari, a button now acts exactly once per tap.
- While you edit, the presenting tools (pen, laser pointer, autoplay, and so on) turn off automatically and their buttons are hidden, so editing and presenting no longer fight.
5. Free subjects now include Music and English (still two choices)
In New…, the subjects now include Music (scales, chords and intervals on a keyboard) and English (sentence structure: S V O C M, phrases, clauses). On the free plan you can choose two subjects and tools in all, as before. The paid plan includes the parts of every subject. Step ④ asks whether your chat AI is on a free or a paid plan.
The parts library grew too: column arithmetic, number lines, tape diagrams, a keyboard, kana stroke order, sentence structure, heatmaps, a world map and more. Some are in the instructions of the paid plan only.
6. Chapter dividers are readable
A chapter divider (<section class="slide sec">) whose title was written with <h2> was unreadable, because the text kept the colour of ordinary titles on the divider's ground (#128). Fixed. Quality check now also warns when a divider's title is not an <h1> and when text and background do not have enough contrast.
7. Saving asks first when the player will change
When you rebuild and save a file that carried a different player, The player will change shows the file's player and the one the saved file will carry, and asks you to Save or Cancel. A newer version of the same player does not ask.
8. Also
- In the presenter view, the black screen (
b) state is shown, andbthere toggles it too. - While editing, the marker (
m) draws a circle or an arrow and opens a comment box. - "Lecture" is no longer a display mode; it is the option Show later steps faintly (
l). The highlighter on the current step is gone. - Theme
default1.2.0: the conclusion row gets a thick bar on its left and a light grey ground (design proposed by @totasuko-lab).business1.0.1 anddefault1.1.0 colours are included. A lesson that recorded the earlier colours keeps them (Update theme applies the new ones). - Words on screen and in the docs follow one termbase (
docs/terms.json). - Making A...
v0.4.8
Egatari 1.0 WD 2026-10-24b に従う / Follows Egatari 1.0 Working Draft 2026-10-24b
Added
- Theme versions, as for components:
themes/<name>/theme.jsonhas aversion, earlier versions stay invendor/themes/<name>/<version>/andthemes.lock.jsonlists their hashes and changed colors (npm run themes:check, innpm test).
A lesson that recordeddefault1.0.0 keeps it: the build warnstheme pinned: …with old → new colors,--update-themesupdates it, and the editor shows the colors with swatches and offers Update theme. Single files pinthemesin theiregatari.json. Documents at a theme's root (README*,LICENSE*,*.md) are never read or hashed; theLICENSE*of a user or lesson-local theme travels in the single file. - Player: Listen with read-aloud (not saved as audio) in the control bar reads a step without audio with a voice of the device
(localspeechSynthesisvoices only), shows “Reading aloud (this device's voice)”, and stops on the next step; never in video or print (format spec §5.6) - Editor app: the Audio panel can read the current step or the selected word aloud with the device voice, with
{x|y}readings, the reading dictionary
andjoin-num-counter@1; nothing is written.app/read-aloud.jsexportsreadAloud(text, lang)for the Pronunciation button (#101) kit/core/read-aloud.mjs: the text to speak and the local-only voice choice, shared by the player (DECK.ReadAloud) and the editor- Build: every
deck-narrationturn carriesttsParts, the spoken pieces with readings applied (theinputHashinput; format spec §4), so the player's
read-aloud says η as “イータ”; older files fall back to the display text with “Pronunciations not applied (older file)”. No audio becomes stale
Changed
- Components v1.1.0 is the default version (1.0.0–1.0.3 are kept for lessons that recorded them).
m-kanbun: reading-order numbers of two or more digits no longer spill out of their box (only their font size shrinks; one-digit numbers draw the same pixels as before), and every reading-order number carriesdata-annot, so the quality check no longer applies its 24 px minimum text size to them.m-kobun: the conjugation card the viewer opened also closes when a step is re-entered (ctx.reset).m-codetree: the DOM no longer depends on the order ofrendercalls (nothing visible changes). Release notes: egatari/components v1.1.0 - Theme
default1.1.0,--emph#C50516 → #BE3012: the orange-leaning red that CUD guidance recommends for P/D-type colour vision, darkened to text strength (5.80:1 on white, WCAG AA); protan ΔE00 to the ink 22.5 → 26.0.
The previous crimson leaned bluish, which CUD advises against, and was never a deliberate choice.--emph-tintfollows;kokugokeeps its own red. Reasons:themes/default/README.md. - Theme
default1.1.0,--muted#6E6E6E → #5C5853: 5.10 → 7.06:1 on white (WCAG AAA level), for projectors and small text.kokugoinherits the new grey.
Trade-off: muted–ink ΔE00 25.6 → 18.2, acceptable because muted text also differs from the ink by role and position.
Fixed
egatari.json: every Studio writer (export and unpack, Save and Save as new lesson, the Attachments and Live panels, Update theme,
Rebuild with a replacement version,--update-themes,npm run portable -- attach) now changes only its own members and keeps every
other member byte for byte, in place, through one helperupdateConfig(oldText, patch)(kit/core/config-file.mjs). Before, the file was
parsed and re-serialized, which reformatted other producers' members, rounded large integers, turned1e400intonulland moved numeric
member names first (format spec §3.3: other producers' members are preserved unchanged). A file that is not a JSON object is now refused
instead of being overwrittenindex.themes[].versionis always the theme's own version, never Studio's (format spec §3.8, §6):kokugoandbusinessare 1.0.0 in
themes.lock.jsonwith the hashes lessons already recorded (their files are unchanged), and a user or lesson-local theme without aversionin
itstheme.jsonis recorded as"local"withsource: "embedded"and identified by its sha256 when rebuilt. Before, these themes recorded the
Studio version (e.g.0.4.7), and user themes were not recorded at all.npm run themes:checknow requires every bundled theme to be in the lock- The single file's
egatari.jsonthemesnow pins exactly the entries ofindex.themeswith their versions, including the parent of a theme
thatextendsanother and"local"themes (before, only themes pinned inthemes.lock.jsonwere listed)
editor-site-v0.4.8.tar.gz sha256: 96eafc6690845672c0cb9305ada6fffa4a9911e084f4b4c095a88769536a32c0
v0.4.7
Egatari 1.0 WD 2026-10-24 に従う(§5.6 を除く) / Follows Egatari 1.0 Working Draft 2026-10-24, except §5.6
Added
- Editor app, Insert slide… → Have a chat AI write it (backlog #93): a short request of its own (
kit/core/llm-insert.mjs: “the next n slides after slide X” or “one slide here”, with only the list of headings and the slide before, not the whole deck; the instructions can be added for a new chat). The returned slides are inserted after the selected slide (after the last one when nothing is selected), get new ids the same way as the slide list, their narration sections go in the same order, and the quality check runs; Undo works as for the slide list. - Editor app: the two blocks of a reply can be pasted one at a time (copied with each block's own copy button, without the ``` lines). The editor tells
deck.htmlfrom `narration.md` by content (`pastePart` in `kit/core/llm-import.mjs`), keeps the first and says which one arrived and what to paste next, joins them in either order into the same result as the whole reply, and offers “Discard and start over”. Text with both but no fences, or with neither, is refused with how to copy instead. In Revise… and Insert slide…, “Import just this” brings in a reply that has only one block (a narration-only fix replaces just the sections with those ids). newDeckFiles({blank: true})(kit/templates/new-deck.mjs): a deck with only the title slide.- Live, one way: Distribute with Live makes the Live ID and join code itself (from a random setup secret,
crypto.getRandomValues; still no network request) and shows one string that the host pastes once on the host page, which creates exactly that Live (egatari/live PROTOCOL.md §2.1). The string holds a secret that is not in the exported file, so a copy of the file alone cannot be used to create the Live. Save the setup string downloads it asegatari-live-setup-<room>.txt(a host who closes the editor before pasting could otherwise never create the Live the handed-out files point at); the string is never written into the lesson,egatari.jsonor any export. The earlier way (create on the host page, paste its settings back) stays under a fold. The vendored protocol is updated to egatari/live 7f859c4 (main) - Live questions (draft): a ? at the bottom right opens the question box on any slide; a question carries the step on screen, the lesson's
sourceSha256(now written into the exported block aslive.sourceSha256, since a play-onlydeck-metahas none) and an optional circled region (Circle, normalised with the review-notes stroke rule). I don't follow (kindconfused) is a one-tap mark per step that can be taken back. The host's replies to the participant's own questions show in the pane. The editor's Distribute with Live offers I don't follow (on by default). The vendored protocol is updated to egatari/live 7f859c4 (main) - 写した仕様(vendor/egatari-spec)が従う日付の版(egatari-spec の
wd-YYYY-MM-DDのタグ)を SOURCE.json のsnapshotに残す。tools/sync-spec.mjs --ref wd-2026-10-24で写せる。タグでないコミットはsnapshot: nullになり、tools/spec-snapshot.mjs --check(test-all)が知らせる(知らせだけ) - 編集アプリの「使い方」に「形式:Egatari 1.0 WD 2026-10-24」と出す(ビルド時に SOURCE.json から読む)
npm run sheet -- <deck> --stepslays out every step of each slide that has a figure or component, side by side (one row per slide), to check a figure's constraints step by step;skills/motion-slidesnow asks for the constraints to be written down first and checked on that strip- The comments pane says, when a single file (.ega.html) is open, that notes are not saved there and disappear when it is closed
docs/distributing: a table of where a single file runs (and where it does not), and a reminder to give learners the play-only copy
Changed
- Editor app: a chat AI is now one way inside three ordinary commands, not a separate entry (“Paste AI output” is gone). New… offers Blank (a working folder with only a title slide), From a template (the sample deck) and Have a chat AI write it; Insert slide… (“Insert slide ▾” in the slide list, which replaces “+ Add ▾”) offers From a template and Have a chat AI write it; Revise… (at the top of the quality check panel) has a chat AI fix the current lesson. Each AI dialog explains first (open a chat AI in another tab, send what you copy, paste the reply in step 3) and has three steps; the command fixes how the reply is brought in (no mode choice). UI and docs say “AI's reply” (「AI の返事」) instead of “AI output”.
- Editor app, New… → Have a chat AI write it: 1. write what you want (A: a new lesson — topic, audience, length, language, speakers, examples; B: from what was discussed in this chat), 2. copy the instructions (the common body is shown as always included, series are added only when needed: with no deck open none is ticked and a hint suggests Academic for formulas, graphs or data charts; what you wrote replaces the blank “What I want” form at the end, so the pack can be sent even when the chat turns it into an attachment, and the dialog says so), 3. paste the reply and open it. The instructions themselves (
kit/core/llm-pack-data.mjs) are unchanged (kit/core/llm-request.mjs). - Editor app, Revise…: the fix request has the quality check findings, what you want changed and the open notes (
comments.json), and the reply replaces slides by id as before. The fix request button in the quality check panel leads to Revise… step 3. - Colab の確認した範囲に、固定した版(cuda13 の組)で GPU を通したこと(2026-10-24、T4、23 ステップを 42 秒)を記した。ノートブックが取得時に出す「HF_TOKEN を設定してください」の警告だけを消した(ほかの警告はそのまま)。
- Colab の音声を別の教材に取り込もうとしたときの断り書きを、「docId が違う」ではなく、台本を書き出した教材の題を出して次にすることまで言う文にした。題は tts-job.json に任意で入れ、ノートブックが records.json に写す(古い zip は題なしの文で断る)。inputHash などの検証は変わらない。
- Colab の Kokoro も T4 で確認した(2026-10-24、59 ステップを 30 秒)。Kokoro の実行プロバイダは CUDA と CPU だけを頼み(TensorRT を頼んで出ていた長い EP Error を出さない)、phonemizer の「words count mismatch」の警告も止めた(ほかの警告はそのまま)。
- vendor/egatari-spec を WD 2026-10-24(72f8821)に合わせる。Schema・試験用の入力は変わらず、SOURCE.json だけが変わる。RELEASING に、候補の前に最新の WD と揃えることと、リリースの説明に従う版を書くことを足す
- Fix requests (
kit/core/llm-fix.mjs) now also tell the AI not to use Canvas, slide-making or file features and to reply in the chat body with the two blocks - Lecture view: steps not yet reached are dimmed to 0.5 (was 0.28), set by the theme variable
--lecture-dim(default 0.5)
Fixed
- Importing live room results from a newer Live server no longer fails: members and kinds this Studio version doesn't know (members or kinds added by a later Live server) are ignored, and the import lists what it skipped, in the Attachments panel, in Distribute with Live, and in
npm run portable -- attach. The attached file keeps the original bytes; anything malformed in a known member is still refused
editor-site-v0.4.7.tar.gz sha256: 442b3d2a73245673c822c77504e65e6b44d43565d40141486370b2a5d11eb506
v0.4.6
Egatari 1.0 WD 2026-10-24 に従う(§5.6 と、live §3 で足された決まりを除く) / Follows Egatari 1.0 Working Draft 2026-10-24, except §5.6 and the additions to live §3
Added
- Quality check (command and editor): text inside an element with
data-annot(a deliberately small annotation, such as the reading-order numbers ofm-kanbun) is not reported as too small (smallText,smallSvgText). The attribute name lives inANNOT_ATTR(kit/core/layout-scan.mjs); contract §10 is its rule. The mark only counts when a component sets it at mount; the player removes everydata-annotwritten in the deck's own markup first. No other check and no rendering changes. - Colab notebook: an optional cell to use your own reference voice for Irodori (upload a WAV/MP3 of 3-30 s or give a Drive path). It is checked, converted to 48 kHz mono and used for every speaker; without it the built-in voices are used as before. Use only a voice you have the right to use; the file stays in your Colab runtime. Output format and
inputHashare unchanged - Built decks now carry a tab icon: the Egatari mark (the optical 32 px version of
assets/logo) as an inlinedata:SVG<link rel="icon">at the top of<head>. The same single SVG switches to the dark colours underprefers-color-scheme: dark, so it reads on light and dark tabs and is used by browsers that ignoremediaon<link>. It is added to the normal build,--portableand--play-onlyfiles (and the dev preview), needs no network and no change to the Live CSP (img-src data: blob:already allows it) - Turn it off with
<html data-favicon="off">; a deck that has its own<link rel="icon">(orshortcut icon) keeps it and nothing is added. The icon is added only to the built document, so the source files,sourceSha256and the theme hashes do not change - Live room results (draft, format extension
live§3): Import live room results… in the Attachments panel and in Distribute with Live (questions and polls)… adds the results JSON downloaded from the Live server as adataattachment (attachments/live-<room>-<date>.json, title with only the room and date). It is checked against the vendored egatari/live schema (a630478; activities may carry a displaylabel), the 10 MiB limit and the §3.8 content checks; a room that differs from the lesson's live settings is warned about but allowed; the first import shows a one-time privacy notice. The list marks it "Learners' responses" with the number of questions and the tally per poll, shown as text only - Results are never written into play-only copies. Exporting a single file that contains them warns and offers Export without the results;
npm run portable -- attach <dir> <results.json>adds them from the command line,packandbuild --portableprint a warning, and--without-live-resultsleaves them out - Components get
ctx.reset === trueinrenderon the first step entry after the viewer touched them (docs/contract.md §3) - Editor app: a slide list (the Slides tab at the left edge of the preview) with thumbnails of each slide's final step. Add a slide after the selected one from a template (title and body, two columns, figure, section divider, quote), duplicate it (narration copied, audio not), delete it (a dialog names the slide and warns that its narration and audio go too) and reorder by dragging, the ↑ ↓ buttons or Alt+↑ / Alt+↓. The editor assigns new ids, keeps the narration sections in slide order and the audio bound by key, rebuilds and runs the quality check; Undo takes back the last action until the next one or the next save of a single file. The list is a keyboard listbox with live-region announcements
- Template leftovers: the slide list's placeholder narration lines start with a fixed mark
✎and the template text is listed once (kit/core/template-text.mjs). The quality check (npm run checkand the editor) warns about a placeholder line (narrPlaceholder) and template text left on a slide (templateText); TTS (the editor's Audio panel and Colab job,tools/narration-json.mjsfortts/synth.py) and exports (--portable,--play-only, the editor's Egatari-file exports) list them first and still let you go on - Themes can declare their frame geometry with
metricsintheme.json("v": 1; body, conclusion line and vertical columns in stage pixels of 1280×720), inherited field by field throughextends. The quality checker (command and editor) derives the body limits (bodyBottom,bodyRight,tateBodyHead,bodyConclCol,bodyLeft) from it, so a theme that moves these boxes is checked against the right limits; margins, minimum text sizes and title and conclusion lengths do not change. Withoutmetricsthe defaults reproduce the previous limits exactly. Players never use it to draw, andtheme.jsoncounts toward the theme'ssha256(contract §12, reference) themeMetricsDrift(warning, once per deck): the rendered boxes differ from the theme's declaration by more than 1px, or a theme withoutmetrics(or the deck's own<style>) moves them. Unusablemetricsvalues are a build warning (theme-metrics: …, reported asthemeMetricsInvalid) and fall back to the parent's value- The boxes are measured only with the bundled fonts loaded, never with a fallback font; otherwise the comparison is skipped with one
metricsFontLoadwarning node tools/theme-metrics.mjs measure <theme>prints themetricsblock measured from the rendered theme, in whole pixels rounded outward to the more lenient limit (checkcompares it with the declaration).tools/test-theme-metrics.mjsfails when a bundled theme renders differently from its declared (or default) geometry
Changed
- Test and inspection screenshots no longer depend on the time between page load and capture:
kit/browser.mjsgainsstableCapture(page, opts)(hides the talk-mode control bar and toast, waits two animation frames, captures withanimations: 'disabled', caret: 'hide'),prepareForCapture(page),releaseCapture(page)andcaptureUrl(url, mode = 'video').tools/shot.mjs,smoke.mjs,sheet.mjs,comment-shots.mjs,flake.mjsand the seek-determinism checks use it; newtools/test-capture.mjschecks that a talk-mode capture at 0.5 s and 3 s after load is identical - Colab notebook: the packages are pinned in two sets chosen from the CUDA libraries cell 1 finds (one place,
COLAB_PINSintools/make-colab-notebook.mjs):cuda13whenlibcublasLt.so.13is there or there is no GPU (onnxruntime-node 1.30.0, @huggingface/transformers 4.3.1, onnxruntime-gpu and onnxruntime 1.31.0, kokoro-onnx 0.6.1: the set that ran on 2026-10-21),cuda12when onlylibcublasLt.so.12is (onnxruntime-node 1.24.3, @huggingface/transformers 4.2.0, onnxruntime-gpu and onnxruntime 1.26.0, kokoro-onnx 0.6.1), so a CUDA 12 image uses its GPU again. Cell 1 prints the environment (Python, Node, GPU and driver CUDA, the CUDA libraries found, the chosen set and its versions) and cell 3 the installed onnxruntime-node and the providers in use, to include in a problem report. The verified note now says: CPU verified on 2026-10-23; the GPU path failed that day and falls back to the CPU; GPU with the pinned versions not yet verified; Kokoro not yet - Colab: every record's
recipecarriesruntime, the pin set and the execution provider that actually ran (cuda12/cuda,cuda13/cpu, …; after the CPU fallback, not the requested list), for Irodori and Kokoro. The editor's zip import keeps it in the audio manifest'srecipe; it is not part ofinputHash, so existing audio does not go stale - Live player: the pane starts collapsed as a small Live marker at the top right (a button with
aria-expanded), and the slides use the whole window. Tapping the marker opens the notice and Join before joining, and the question box once connected, on any slide. On a step with a poll the pane opens by itself (announced in a live region, without taking the focus) and collapses again when that step is left, unless the learner pinned it (Keep open) or opened it from the marker. While connected the collapsed marker shows the state (a green dot, and text for screen readers); Disconnect is in the opened pane. When open, the pane is docked beside or below the slides as before, so it never covers them. The fold strip is gone; × or Esc collapses the pane. Reduced motion is respected, and the zero-network rules are unchanged - Live player: where it cannot connect (inside a frame such as an LMS, a viewer in a chat or file app, another kind of address), the pane offers Join in the browser, a link that opens the room's join page (
https://<endpoint host>/join#room=…&key=…, the key only in the fragment) in a new tab, with a short explanation and the room. Nothing is loaded before it is tapped. The editor's preview still shows only the room's address as text - Live room: polls are shown by a label such as “Slide 4 'XML の壁', step 1” (「4 枚目『XML の壁』・段階 1」) instead of the raw step key (
s-cjatth:0) in the editor's step suggestions and poll list, with the key in the tooltip. The editor writes it as the optionallabelof each poll (display text, at most 80 characters; keys unchanged), and Copy activities JSON includes it, so egatari/live's teacher and join pages show it too. Older polls get a label when the panel opens if their slide is still in the deck; otherwise, and in rooms without labels, the key is shown ass-cjatth · step 1(*as “whole lesson”). The vendored protocol is updated to egatari/live a630478 - Live screens use plain words: ライブ, 参加者, 待機室, ステップ, 参加コード, ホスト用リンク, ホストのページ, 全員に表示 (in English: Live, participants, waiting room, step, join code, host link, host page, show to everyone). Export ▾ → Distribute with Live (questions and polls)… (before: Distribute with a live ro...
v0.4.5
Added
- Quality check (command and editor): on every slide, warn when text goes off a slide without
.body(textOffSlide), when text boxes overlap each other or the cover's top band (textOverlap; on a cover or section divider the finding names the allowed children and where a subtitle goes), and when a short word in a table cell breaks across lines (cellWordBreak). All are R-fit warnings (backlog #64, #65). npm run sheet -- <deck folder | deck.html | built.html | .ega.html> [out.png] [--mode talk] [--cols 4] [--width 640] [--tiles](tools/sheet.mjs): a contact sheet of every slide at its final step in one PNG (numbered, with the slide key when short), for looking at what the quality check cannot see (a legend with the wrong meaning, points cut at an axis edge).--tilesalso writes the 1280×720 PNG of each slide. No new dependency.skills/motion-slidesgets a step for it, and a line on leaving a margin beyond the data range when embedding plots- Exported copies (format spec §3.1,
exportedFrom): an export from a working folder (--portable,npm run portable -- pack, the editor's Export single file) records the folder's source hash in the index (no time, path or name; exports stay byte-reproducible). Editor saves keep it, except Save as new lesson (newdocId), which drops it; the editor's notice on opening such a file says edits do not reach the folder, offers Export working folder… and says when the copy was edited since export. Unpacked folders carry no marker npm run portable -- compare <file> <dir>: says by source hash whether the exported copy, the folder or both were edited since the export (nothing is merged)- Live room (draft, format extension
live): Export ▾ → Distribute with a live room… adds a room of egatari/live (Q&A for the whole lesson, polls per step) to the play-only copy;node kit/build.mjs <deck> --play-only --live room.jsondoes the same. The copy gets a CSP<meta>whoseconnect-srcis exactly the room service, anextensionsblock and the live player (kit/live.js); copies without a room are byte-identical to before. The lesson keeps the settings without the key (extensions.liveinegatari.jsonand the index); the editor connects nowhere. The endpoint must behttps:(only the development player used by the tests accepts a loopbackhttp:endpoint) - Live player: a pane outside the stage (the stage is fitted into the rest), a notice and one tap on Join before the first connection, a persistent indicator with Disconnect, polls when their step is reached, reconnects inside the window following egatari/live's close-code table (backoff for network closes, ≥ 30 s after 4423, ≥ 60 s after 4429 and 4430, at the opening time after 4425; a manual Try again after 4441), a window of at most 3 hours in the editor, and no network at all outside the window, before Join, in previews and frames, in video mode, in print and in the presenter view.
tools/test-live.mjstests it against a local server speaking the vendored protocol (vendor/egatari-live-protocol/)
Changed
- The CLI writes
.ega.htmlexports at the top of the lesson folder, named from the lesson title, and prints the path (before:out/deck.ega.html)
editor-site-v0.4.5.tar.gz sha256: 35b229c790273b397603a068fbad911185eba08957ada75d0a4ab1d5058bcded
v0.4.4
Added
- Editor app: recording mode (
r, or Recording mode in the Audio panel): the step's narration in large type with the stage beside it, and keyboard-only recording: Space starts/stops (silence trimmed, used for the step right away), Enter keeps the take and goes to the next step, Backspace retakes, ← / → move,Cplaces the{cue}/{mark}times while you read (sync: "manual"; a wrong number of presses writes no cues), with a level meter, live-region announcements and a button for every key - Editor app: Make the audio in Colab (Audio panel, for computers without WebGPU, such as many school PCs, Safari and iPad): export the steps that need audio as
tts-job.json(after a privacy question: the narration text is processed in Google's environment), run the official notebookcolab/egatari-tts.ipynbin a free Colab (Irodori-TTS 500M-v3 for Japanese, Kokoro-82M for other languages; a T4 GPU is faster), and import the zip it returns. Only steps whoseinputHashmatches the current narration are applied, with the cue times measured from the audio (kind tts, sync auto); changed steps are listed for you to use or discard, and a zip made for another lesson is refused. Verified on 2026-10-21 with Irodori on a Colab T4 GPU; Kokoro and the CPU path are not verified yet colab/egatari_tts.py(the notebook's core, with a model-free--dry-run),colab/irodori_node.mjs(a long-lived Irodori worker: the models load once) andtools/make-colab-notebook.mjs(generates the notebook,npm run gen);kit/core/zip-read.mjs(a bounded zip reader that refuses zip bombs, zip64, encryption and CRC mismatches),kit/core/colab-core.mjsandkit/core/wav-core.mjs- Quality check: warnings (R-fit) for text cut off by an
overflowbox (textClipped), SVG text cut off by its viewBox or going off
the slide (svgTextOut), SVG text overflowing the box drawn around it (svgTextBox, e.g. anm-flowlabel) and text outside
.bodygoing off the slide or overlapping the heading, conclusion or page number (outsideBody); a slide that already has
bodyBottomdoes not also getsvgTextOutfor text inside.body data-clipon an element marks intended clipping; the four checks above skip text inside it (contract §10)
Changed (API)
- Components moved to their own repository, egatari/components (v1.0.0 is byte-identical to the former
components/; v1.0.1 adds anm-sweepdemo and fits them-kanbundemo; see Security for v1.0.2 and v1.0.3, the default). Studio carries copies of its releases invendor/components/<name>/<version>/, pinned incomponents.lock.json;npm run components:update -- vX.Y.Zbrings in a release (checks the tarball and every file against the release'smanifest.json, keeps every version),npm run components:checkchecks the copies offline (innpm testand CI). - A single file now records a registry component's
versionas the components release (1.0.0) instead of Studio's version. Rebuilding a single file uses the vendored version whoseindex.jsmatches the recorded SHA-256; a working folder may pin versions inegatari.json(components, format spec §3.3), which the single file's copy carries (the export writes the versions it used there; the working folder'segatari.jsonis unchanged) andnpm run portable -- unpackwrites from the recorded versions when a file has none. - Component and theme identity hashes (
index.components[].sha256,index.themes[].sha256,components.lock.json) are taken after normalizing line endings (CRLF and lone CR to LF, leading BOM removed; format spec §6,kit/core/identity-hash.mjs). Files written earlier from a Windows checkout (hashes of CRLF bytes) still resolve throughcrlfSha256in the lock, and the editor allows rebuilding them. Release tarballs stay byte-exact.
Changed
- Editor app: the browser quality check now runs the same layout code as
npm run check(kit/core/layout-scan.mjs), so it also
reports thelayout-tatelimits, a conclusion that overflows in height, small text inside SVG and a heading ending with a colon - The Egatari logo and icons use the new colours (紺藍 and 緋色)
vendor/components/CATALOG.mdreplacescomponents/CATALOG.md. Component proposals go to egatari/components issues (Studio's component issue templates are removed); themotion-componentsskill targets that repository.- The components' own tests (rendering, determinism, text size, overlap, shapes,
m-codetree/m-kanbun/m-kobun/m-gendaiparsing) moved with them; Studio keeps integration tests (tools/test-components.mjsbuilds and quality-checks every vendored demo,tools/test-shape.mjs,tools/test-kokugo-example.mjs), andtools/clean-env.mjsbuilds the demos in a clean environment.
Fixed
- TTS reads “1 歩” correctly: the space between an Arabic numeral and a following Japanese character is removed just before synthesis (rule
join-num-counter@1, in the browser TTS and the Colab notebook), recorded asrecipe.textNormalize.ttsPartsandinputHashare unchanged, and existing audio is not stale. The Audio panel lists TTS steps made with an older (or no) pre-processing and regenerates only the ones you choose - Authoring guide: the
data-clipsentence added to R-fit is removed again (the rule stays in contract §10 and in thetextClippedfix request); R-components no longer calls function formulas "JavaScript" (they are arithmetic expressions that are never run as code) - Authoring guide (pack builder): component README text is cleaned when it is copied into the pack: relative markdown links become plain text and version-history phrases ("v1.0.2 から", "since v1.0.2") are dropped; the
m-menulines no longer say ids come fromnpm run idsor show a link to another file (menus are added after import, the first draft uses a plain list).vendor/is not edited - Quality check: findings about duplicate slide keys (headings), narration headings that differ from the slide heading (
narrHeadingDiffers) and narration sections without a slide now carry the ruleR-headingsin--json(rulewas null) - Quality check: when the headless browser fails to launch or crashes,
npm run checkexits with code 2 (findings still exit 1) and--jsonprints"status": "crashed"with"ok": falseand no findings; the reason goes to stderr only - Quality check:
kit/core/check-result.mjs(parseCheck) readscheck --jsonand rejectsstatus: "crashed"and exit code 2; the tests that assert "0 errors" use it (test-layout-tate, test-llm, test-components), and the skills anddocs/referencesay exit code 2 is not "0 errors"
Security
- Components v1.0.2 is the default version (1.0.0 and 1.0.1 are kept for lessons that recorded them). Its
m-sweep(f) andm-curves(each series'f) no longer run formulas as JavaScript (new Function): they evaluate them with a small arithmetic parser (numbers, the component's variables, the listedMathfunctions and constants,+ - * / % **, comparisons,&& || !,? :, parentheses) and show the inline placeholder for anything else. Values of every formula in the examples and docs are unchanged. Grammar and audit: egatari/components SECURITY.md. The code scan (kit/core/code-scan.mjs) still treats formulas outside plain arithmetic as code, since a document may pin an older version, and the preview's CSP keeps'unsafe-eval'for those versions.tools/test-security.mjschecks that no formula runs with the default version. - Components v1.0.0 and v1.0.1 are yanked in favour of v1.0.2 (Egatari spec §6): components v1.0.3 lists them under
yankedinmanifest.json, andnpm run components:update -- v1.0.3records the yanked versions and the replacement incomponents.lock.json. v1.0.3 is the default (its code is that of v1.0.2). A deck that pins or records a yanked version builds as recorded and warns (yanked: m-sweep 1.0.0 …, also fromkit/check.mjs); the old versions are kept - Editor app: a lesson that records a yanked version gets a notice and a button Rebuild with 1.0.2; the version is never replaced silently, and after the rebuild a note lists which identity hashes changed. The lesson still plays meanwhile, only inside the sandboxed preview frame (no
allow-same-origin) - Editor app: the page's own Content-Security-Policy no longer has
'unsafe-eval'(only'wasm-unsafe-eval'remains, for the MP3 encoder's WebAssembly; hosted editor and single-fileeditor.html). The preview frame inherits it, so a yankedm-sweep/m-curvesshows its inline placeholder instead of evaluating its formula there.PREVIEW_CSPand the dev server's deck document keep'unsafe-eval'for yanked versions
editor-site-v0.4.4.tar.gz sha256: dfc76a4f5bfef9aa0633beb6df3f6bf170d242108e18c2ef02c0a6f142f08e4d
v0.4.3
Added
- Editor site: every release from v0.4.1 on stays at its own URL,
/vX.Y.Z/(e.g. https://studio.egatari.org/v0.4.2/), and the root
serves the latest. A frozen copy shows which version it is with a link to the latest; the root lists the versions (#32) tools/site-versions.mjs: builds the release asseteditor-site-vX.Y.Z.tar.gzfrom a tag, verifies it against the sha256 line
in the release notes, and assembles the Pages site from the new build and the earlier releases' assets
Changed
- One set of quality-control terms everywhere (editor, docs, AI instruction pack, skills): standards (R-fit, …),
quality check / quality checker (commandnpm run check, browser in the editor), finding, fix request;
Japanese 規格・品質チェック(コマンド版・ブラウザ版)・指摘・修正依頼. Rule ids, severities,check --jsonfields and commands are unchanged - Editor: the toolbar button and panel are Quality check (was Quick check); the fix request lists Findings and Standards
(Japanese 指摘・規格; was Problems / Rules, 問題・決まり) - AI instruction pack (Japanese): shorter wording, so common + business and common + kokugo are under 35 KB again; no rule dropped
- Browser TTS: only the latest editor (the site root) removes caches of other model revisions; frozen copies keep them
Fixed
- Editor app: autoplay started in the presenter view plays the narration audio (in the editor window's preview, once); the
browser used to block it because the key was pressed in the other window
editor-site-v0.4.3.tar.gz sha256: e6fa495133e4bee3161298beae4f7e827679fb2c1f52435f7deced7e676e7d97