Skip to content

Releases: egatari/egatari-studio

v0.6.3

Choose a tag to compare

@moiku moiku released this 01 Nov 04:00

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 viewerInput capability 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.html files. 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.json content table and resolveComponent() to find vendor/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.fields now 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 shares vendor/components/sha256/ and the content table in components.lock.json). A lesson uses it only when egatari.json has "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 declared tex fields with KaTeX at build time (texHtml, renderers; spec §6.2), and keeps only the characters the lesson uses in subset blocks (e.g. m-kakijun stroke data): the whole slide source including attribute values, the narration, the data passed to parts and the part's glyphs, 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...
Read more

v0.6.2

Choose a tag to compare

@moiku moiku released this 30 Oct 08:12

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 in theme.json look. The new themes are 1.0.0.
  • Fonts: the list is FONT_LIST (kit/core/build-core.mjs); a theme chooses with theme.json fonts. The offline editor carries only the two defaults. New quality check fontNotEmbedded.
  • 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_LIST in kit/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 with theme.json fonts ({"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 in em, i and cite is 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, so asagi lessons are no heavier than default (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 is kit/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 into tokens.css and recorded in theme.json look, 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 (in npm 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); --emph and --term stay ΔE*ab ≥ 35 apart under protan and deutan simulation (Machado 2009) and ΔE00 ≥ 20 for all four vision types; the look snippets match. Colour maths in kit/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 #FF4B00 and blue #005AFF and 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 in sumi.
    tools/test-themes.mjs checks 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, player in the index and deck-meta): the fixed pen colours above. Files from earlier versions keep their own player.
  • business can no longer be chosen for new lessons (editor lists, npm run new, which suggests sumi); 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, otherwise default), and the business series pack and its worked example use sumi. Pack version ecca7b6f; 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...
Read more

v0.6.1

Choose a tag to compare

@moiku moiku released this 30 Oct 03:23

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-spec 54 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-keyboard range 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 exportedFrom matches (exportedState(…, {sourceMatches}), npm run portable -- compare). Samples are built without the mark; build --portable still writes it.
  • Instructions for the chat AI: the pack version changes (m-keyboard in the music set).
  • Repository: tools/sync-spec.mjs copies only what the tests read (vendor/egatari-spec 54 MB → 14 MB); the default reference voices live only in tts/voices/; the README clones with git 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), Android content:// trouble and chat previews that fail. The lesson runs in a sandbox="allow-scripts" srcdoc frame behind Studio's trusted preview prefix; recent files stay on the device (OPFS, IndexedDB fallback) and can be deleted; Android share_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.mjs in 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, Worker egatari-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.mjs builds Egatari Studio's own tab and app icon 「す」 (assets/logo/studio/: the ico files, a light/dark favicon.svg, the touch icon and the manifest icons) from the owner's SVGs in assets/logo/studio/src/; tools/test-viewer-webkit.mjs checks the Viewer in Playwright's WebKit at iPad sizes (a step of npm test; skipped where WebKit is not installed)

Changed

  • LLM pack, music series: the <m-keyboard> range guidance 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.mjs copies only what the tests read (an allow-list), so vendor/egatari-spec shrinks from 54 MB to 14 MB; the unread pre-1.0 document fixtures are no longer copied.
  • The default reference voices alice.wav and bob.wav now exist only in tts/voices/; the identical copies in lab/voices/ are removed. The Colab notebook reads them from tts/voices/, and npm run build:app copies them into the site's lab/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_name is "Egatari Studio". The え mark stays on the header, Egatari Viewer and exported .ega.html files
  • 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:terms checks the new words; 機械学習 and the 4M (人・機械・方法・材料) of the m-fishbone exa...
Read more

v0.6.0

Choose a tag to compare

@moiku moiku released this 28 Oct 10:45

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)のオプションになりました。現在のステップの蛍光ペン風の強調はなくなりました。
  • 基調色のテーマ default 1.2.0:結論の行に左の太い線と薄い灰色の地を付けました(デザインの提案:@totasuko-lab)。テーマ business 1.0.1、default 1.1.0 も含みます。前の版の色のままの教材は、その色を保ちます(「テーマを更新」で新しい色にできます)。
  • 画面とドキュメントの言葉を 1 つの用語集(docs/terms.json)にそろえました(ステップ・台本・パーツ・Egatari ファイル・再生専用・エクスポートなど)。
  • Colab で AI 音声を作る流れが、CPU でも使えるようになり、手順が画面に出ます。

技術的なこと

  • 形式:Egatari 1.0(Working Draft wd-2026-10-28)。索引と deck-meta に player(egatari-player 1.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, and b there 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 default 1.2.0: the conclusion row gets a thick bar on its left and a light grey ground (design proposed by @totasuko-lab). business 1.0.1 and default 1.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...
Read more

v0.4.8

Choose a tag to compare

@moiku moiku released this 24 Oct 12:02

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.json has a version, earlier versions stay in vendor/themes/<name>/<version>/ and themes.lock.json lists their hashes and changed colors (npm run themes:check, in npm test).
    A lesson that recorded default 1.0.0 keeps it: the build warns theme pinned: … with old → new colors, --update-themes updates it, and the editor shows the colors with swatches and offers Update theme. Single files pin themes in their egatari.json. Documents at a theme's root (README*, LICENSE*, *.md) are never read or hashed; the LICENSE* 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
    (local speechSynthesis voices 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
    and join-num-counter@1; nothing is written. app/read-aloud.js exports readAloud(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-narration turn carries ttsParts, the spoken pieces with readings applied (the inputHash input; 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 carries data-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 of render calls (nothing visible changes). Release notes: egatari/components v1.1.0
  • Theme default 1.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-tint follows; kokugo keeps its own red. Reasons: themes/default/README.md.
  • Theme default 1.1.0, --muted #6E6E6E → #5C5853: 5.10 → 7.06:1 on white (WCAG AAA level), for projectors and small text. kokugo inherits 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 helper updateConfig(oldText, patch) (kit/core/config-file.mjs). Before, the file was
    parsed and re-serialized, which reformatted other producers' members, rounded large integers, turned 1e400 into null and 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 overwritten
  • index.themes[].version is always the theme's own version, never Studio's (format spec §3.8, §6): kokugo and business are 1.0.0 in
    themes.lock.json with the hashes lessons already recorded (their files are unchanged), and a user or lesson-local theme without a version in
    its theme.json is recorded as "local" with source: "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:check now requires every bundled theme to be in the lock
  • The single file's egatari.json themes now pins exactly the entries of index.themes with their versions, including the parent of a theme
    that extends another and "local" themes (before, only themes pinned in themes.lock.json were listed)

editor-site-v0.4.8.tar.gz sha256: 96eafc6690845672c0cb9305ada6fffa4a9911e084f4b4c095a88769536a32c0

v0.4.7

Choose a tag to compare

@moiku moiku released this 24 Oct 06:46

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.html from `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 as egatari-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.json or 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 as live.sourceSha256, since a play-only deck-meta has none) and an optional circled region (Circle, normalised with the review-notes stroke rule). I don't follow (kind confused) 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> --steps lays 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-slides now 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

Choose a tag to compare

@moiku moiku released this 23 Oct 17:56

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 of m-kanbun) is not reported as too small (smallText, smallSvgText). The attribute name lives in ANNOT_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 every data-annot written 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 inputHash are unchanged
  • Built decks now carry a tab icon: the Egatari mark (the optical 32 px version of assets/logo) as an inline data: SVG <link rel="icon"> at the top of <head>. The same single SVG switches to the dark colours under prefers-color-scheme: dark, so it reads on light and dark tabs and is used by browsers that ignore media on <link>. It is added to the normal build, --portable and --play-only files (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"> (or shortcut icon) keeps it and nothing is added. The icon is added only to the built document, so the source files, sourceSha256 and 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 a data attachment (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 display label), 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, pack and build --portable print a warning, and --without-live-results leaves them out
  • Components get ctx.reset === true in render on 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 check and 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.mjs for tts/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 metrics in theme.json ("v": 1; body, conclusion line and vertical columns in stage pixels of 1280×720), inherited field by field through extends. 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. Without metrics the defaults reproduce the previous limits exactly. Players never use it to draw, and theme.json counts toward the theme's sha256 (contract §12, reference)
  • themeMetricsDrift (warning, once per deck): the rendered boxes differ from the theme's declaration by more than 1px, or a theme without metrics (or the deck's own <style>) moves them. Unusable metrics values are a build warning (theme-metrics: …, reported as themeMetricsInvalid) 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 metricsFontLoad warning
  • node tools/theme-metrics.mjs measure <theme> prints the metrics block measured from the rendered theme, in whole pixels rounded outward to the more lenient limit (check compares it with the declaration). tools/test-theme-metrics.mjs fails 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.mjs gains stableCapture(page, opts) (hides the talk-mode control bar and toast, waits two animation frames, captures with animations: 'disabled', caret: 'hide'), prepareForCapture(page), releaseCapture(page) and captureUrl(url, mode = 'video'). tools/shot.mjs, smoke.mjs, sheet.mjs, comment-shots.mjs, flake.mjs and the seek-determinism checks use it; new tools/test-capture.mjs checks 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_PINS in tools/make-colab-notebook.mjs): cuda13 when libcublasLt.so.13 is 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), cuda12 when only libcublasLt.so.12 is (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 recipe carries runtime, 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's recipe; it is not part of inputHash, 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 optional label of 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 as s-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...
Read more

v0.4.5

Choose a tag to compare

@moiku moiku released this 21 Oct 22:09

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). --tiles also writes the 1280×720 PNG of each slide. No new dependency. skills/motion-slides gets 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 (new docId), 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.json does the same. The copy gets a CSP <meta> whose connect-src is exactly the room service, an extensions block 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.live in egatari.json and the index); the editor connects nowhere. The endpoint must be https: (only the development player used by the tests accepts a loopback http: 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.mjs tests it against a local server speaking the vendored protocol (vendor/egatari-live-protocol/)

Changed

  • The CLI writes .ega.html exports 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

Choose a tag to compare

@moiku moiku released this 21 Oct 01:41

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, C places 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 notebook colab/egatari-tts.ipynb in 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 whose inputHash matches 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) and tools/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.mjs and kit/core/wav-core.mjs
  • Quality check: warnings (R-fit) for text cut off by an overflow box (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. an m-flow label) and text outside
    .body going off the slide or overlapping the heading, conclusion or page number (outsideBody); a slide that already has
    bodyBottom does not also get svgTextOut for text inside .body
  • data-clip on 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 an m-sweep demo and fits the m-kanbun demo; see Security for v1.0.2 and v1.0.3, the default). Studio carries copies of its releases in vendor/components/<name>/<version>/, pinned in components.lock.json; npm run components:update -- vX.Y.Z brings in a release (checks the tarball and every file against the release's manifest.json, keeps every version), npm run components:check checks the copies offline (in npm test and CI).
  • A single file now records a registry component's version as the components release (1.0.0) instead of Studio's version. Rebuilding a single file uses the vendored version whose index.js matches the recorded SHA-256; a working folder may pin versions in egatari.json (components, format spec §3.3), which the single file's copy carries (the export writes the versions it used there; the working folder's egatari.json is unchanged) and npm run portable -- unpack writes 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 through crlfSha256 in 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 the layout-tate limits, 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.md replaces components/CATALOG.md. Component proposals go to egatari/components issues (Studio's component issue templates are removed); the motion-components skill targets that repository.
  • The components' own tests (rendering, determinism, text size, overlap, shapes, m-codetree / m-kanbun / m-kobun / m-gendai parsing) moved with them; Studio keeps integration tests (tools/test-components.mjs builds and quality-checks every vendored demo, tools/test-shape.mjs, tools/test-kokugo-example.mjs), and tools/clean-env.mjs builds 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 as recipe.textNormalize. ttsParts and inputHash are 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-clip sentence added to R-fit is removed again (the rule stays in contract §10 and in the textClipped fix 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-menu lines no longer say ids come from npm run ids or 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 rule R-headings in --json (rule was null)
  • Quality check: when the headless browser fails to launch or crashes, npm run check exits with code 2 (findings still exit 1) and --json prints "status": "crashed" with "ok": false and no findings; the reason goes to stderr only
  • Quality check: kit/core/check-result.mjs (parseCheck) reads check --json and rejects status: "crashed" and exit code 2; the tests that assert "0 errors" use it (test-layout-tate, test-llm, test-components), and the skills and docs/reference say 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) and m-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 listed Math functions 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.mjs checks 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 yanked in manifest.json, and npm run components:update -- v1.0.3 records the yanked versions and the replacement in components.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 from kit/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-file editor.html). The preview frame inherits it, so a yanked m-sweep / m-curves shows its inline placeholder instead of evaluating its formula there. PREVIEW_CSP and the dev server's deck document keep 'unsafe-eval' for yanked versions

editor-site-v0.4.4.tar.gz sha256: dfc76a4f5bfef9aa0633beb6df3f6bf170d242108e18c2ef02c0a6f142f08e4d

v0.4.3

Choose a tag to compare

@moiku moiku released this 20 Oct 05:46

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 asset editor-site-vX.Y.Z.tar.gz from 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 (command npm run check, browser in the editor), finding, fix request;
    Japanese 規格・品質チェック(コマンド版・ブラウザ版)・指摘・修正依頼. Rule ids, severities, check --json fields 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