Canopy作業日誌
2026年5月18日から31日ごろまでの作業ログ。 中心はCanopyというprojectional editor(構造編集エディタ)の実験で、周辺ライブラリのloom、incr、moondsp、js_engineも同時に触っている。 Canopyでは、テキストとしての編集と、プログラムの構造を直接触る編集を同じワークスペースで扱えるようにしたい。 さらに、そのワークスペースの状態をAIへ渡せるコンテキストとして整理し、編集作業とAI支援をつなげることを目指している。
かなり生の作業メモに近いので、細かいPRリンクもそのまま残している。 大まかには、前半はRabbitaとCodeMirrorの接続、途中からInspectorやLoom連携、後半はCognitionというAI用ナレッジベース機能の土台づくりに進んでいる。 その後はlambdaのscope graph、go-to-definition、typed spreadsheet demo、bytecode benchmarkなど、構造編集と周辺基盤を実際のUIや性能測定へつなぐ作業に広がっている。 incrについては、Build Systems à la Carteを読みながら、自分のライブラリのAPIや評価モデルを整理していった時期でもある。
この記事に出てくる主なリポジトリ:
- Canopy: projectional editor(構造編集エディタ)とAI用ナレッジベース機能まわりの実験をしている中心リポジトリ。
- loom: incremental parserやCST projectionを扱うライブラリ。
- incr: incremental computation用の小さなライブラリ。
- moondsp: MoonBitでDSPや音楽記述用DSLの実験をしているリポジトリ。
- js_engine: MoonBitでのJavaScriptエンジンの実装。
本文でよく出てくる言葉:
- Rabbita: Canopyで使っているUI / editor側の実験的な仕組み。
- CodeMirror: テキストエディタ部分に使っている既存のエディタライブラリ。
- Cognition: Canopy上でAIに渡すコンテキストやプロバイダとの境界を扱うための実験。
- FFI: MoonBit側のコードとJavaScript / DOM側のコードをつなぐ境界。
- provider boundary: AIプロバイダへ渡す入力、返ってきた結果、キャンセルやretryを追跡するための境界。
この期間の大きな流れ:
- RabbitaとCodeMirrorの接続を安定させる。
- DOMの隠しボタン経由だった操作を、イベント購読や明示的な境界に寄せる。
- Inspectorやop logを整えて、内部状態を追いやすくする。
- Build Systems à la Carteを参照しながら、incrのAPIと評価モデルを整理する。
- Cognitionのワークスペース、コンテキストpacking、provider boundaryの土台を作る。
- ephemeral presenceやbyte codecを切り出して、共有部品として扱えるようにする。
- Lambdaのscope graphとgo-to-definitionを整え、Idealのscope annotationを同じ解決結果へ寄せる。
- incrのtyped spreadsheet demoとjs_engineのbytecode benchmarkを育て、実験用UIや性能確認の入口を増やす。
2026/5/18
incrのDatalogを使ってUI開発が出来ないかの実験をした。 DataScriptみたいなことが出来るかもしれない。 https://github.com/tonsky/datascript 関連PR: loom PR #124
RabbitaとCodeMirrorの連携するグルーコードを改善した。 現在はグチャグチャと混沌としたコードになっていてバグが多く、エディターを触っていると途中で動かなくなってしまうことがあったのが直った。 関連PR: Canopy PR #293、Canopy PR #296 https://claude.ai/share/ed68c575-c459-415d-bd19-b7965dd94e29
2026/5/19
Canopy
canopyでのrabbita_codemirror(CodeMirrorバインディング)の作成を続けた。 途中でバグが見つかって既存のコードを改修する必要が生まれてそれの改修に時間が掛かった。 関連PR: Canopy PR #297、Canopy PR #299、Canopy PR #300、Canopy PR #301、Canopy PR #302
プログラミング言語の変数の入れ替えをする機能をincrを使って出来るように環境を整えた。 関連PR: loom PR #126、loom PR #129
moondsp
AudioBuffer APIの改修をした。as_fixed_arrayで内部の fixed_array に直接アクセスしないといけなかったのをAudioBufferの構造体からall / anyなどのメソッドを直接呼べるようにした。
関連PR: moondsp PR #60、moondsp PR #62
トークンの使用量を減らす工夫
コーディングエージェントの使用するトークン量を減らすべく BAML を導入した。 どれくらい効果があるのかまだ分からないので実際に使ってみて確かめる必要がある。
2026/5/20
Canopy / Rabbita CodeMirror
関連PR: Canopy PR #303、Canopy PR #305、Canopy PR #306、Canopy PR #307
Canopyの examples/ideal で、RabbitaとCodeMirrorのバインディング移行を進めた。
移行が完了するまで既存実装と新しいバインディングを共存させられるようにし、マウント手順と、二重DOM、フラグ読み取り、undo記録まわりの問題を潰した。
CodeMirrorのselectionやextensionなどをCodeMirror専用のAPIとして閉じ込めずに、標準のSelection / Range APIやCodeMirror本体のAPIを薄いJS FFIとして扱う方向に決定した。
loom
Lambda exampleのAPIの整理をした 関連PR: loom PR #131、loom PR #132
incr
関連PR: incr PR #58、incr PR #59、incr PR #60
visualizationの機能を追加するために内部の整理をして EventBroadcastPhaseHook を追加した。
これ専用のpublic APIは増やさず、パフォーマンスを意識してRuntimeのコンストラクタに合わせてイベントをbufferしてから一気にbatch処理する、イベントリスナを使わない形にした。
benchmarkをとって数パーセントほど実行速度が向上していることを確認した。
moondsp
AudioBufferのwrite-time validationの設計を進めた。
new / filled / fill / set を共通のサンプル検証・正規化パスへ通す方針にし、adopt はゼロコピー契約上、採用後に外部ハンドルから変更された値まではMoonBit側で検証できないことを明確にした。
-1~+1以外の値を正規化するようにした。
関連PR: moondsp PR #63
js_engine
well-known symbolの所有権をrealm側へ移し、js_engine PR #130をマージした。setup_builtins(env, output, symbols, ...) を単体で呼ぶ場合も、渡された SymbolState でwell-known symbolsを割り当てるよう直した。
2026/5/21
Canopy
Canopyの examples/ideal で、RabbitaとDOMイベントの境界を整理した。
Canopy PR #312 でRabbitaに依存しないDOM boundary helperを追加し、Canopy PR #313 から Canopy PR #316 でoverlay、sync、structure modeのhidden buttonという名前で設定していた命令的なトリガーをRabbitaのcustom event経由のイベントサブスクリプションに寄せた。
DOMイベントサブスクリプションの失敗をログに出す変更も入れたので、Rabbita側のイベント登録で問題が起きたときに原因を追いやすくなった。 IdealのUI操作をDOMの隠しボタンに依存させるより、Rabbita側のイベント購読として扱う方が、あとから読んだときに責務の境界が分かりやすい。
loom
Loomではincremental parser reuseまわりのTODOを進めた。 削除時の左隣CST reuseや、削除後にoffsetがずれたnodeを再利用するケースをテストで固定し、現在のinvariantはparser-ownedなtoken/subtree identityではなく、チェック済みのCST subtree reuseであることを確認した。 関連PR: loom PR #134、loom PR #135、loom PR #136
incr
incrではpublic APIの命名とread helperの整理を続けた。
readまわりのpermissiveなhelperをrenameし、理想的なAPIへの移行計画を作った。
関連PR: incr PR #61、incr PR #62、incr PR #63
js_engine
js_engineではwell-known symbol lookupの移行を進めた。
js_engine PR #131 と js_engine PR #132 で、runtimeやstdlibの残っていたno-argument symbol getter系を明示的なrealm-owned WellKnownSymbols accessへ移し、互換用のlegacy pathを削除した。
2026/5/22
Canopy
CanopyでRabbita側のundo/redoショートカットもhidden button経由から外した。
Canopy PR #318 でCodeMirror側が request-undo / request-redo custom eventをdispatchし、Rabbita側がそれを Undo / Redo に変換する形になった。
これで前日から続いていたhidden button経由のトリガー削除が一段落した。
その後、examples/web と examples/ideal に対する tsc --noEmit のCI jobを追加し、Inspectorにincr runtime snapshotを表示する作業も入った。
関連PR: Canopy PR #320、Canopy PR #321
incr
incrではtarget API facadeの作業が進んだ。 incr PR #68 で理想的なAPIのfacadeを追加し、その後runtime read helperのdeprecation、input freshness facade、map relation facadeが続いた。 Canopy側から使うAPIを薄く整えながら、古いread helperに直接依存しない方向へ寄せた。 関連PR: incr PR #69、incr PR #70、incr PR #71、incr PR #72
js_engine
iterator cacheやprimitive wrapper prototypeの状態を RealmState に移した。
js_engine PR #133 と js_engine PR #134 がこの流れの中心で、factory/prototype系の状態をmodule globalからrealm-owned stateへ移す作業を続けた。
注: RealmsとはECMAScriptの仕様です。
2026/5/23
Canopy
CanopyではInspectorまわりの作業を続けた。
InspectorにPatch panelを追加し、view_op_log / view_patch のguard、Op Log label formatの統一、SourceMap::nodes_at_position の範囲制約の修正を入れた。
Idealを触りながら内部状態を確認するための道具立てが増え、op logやpatchを見て原因を追いやすくなった。
関連PR: Canopy PR #323、Canopy PR #324、Canopy PR #327、Canopy PR #329
incr
incrではAPI migrationに向けたドキュメントとexamplesを増やした。 architectureやcookbook、API referenceの例を新しいAPI名に合わせて更新し、Build Systems à la Carteを読みながら、自分の実装がどの評価戦略や依存関係モデルに近いのかをdocsに記録した。 関連PR: incr PR #73、incr PR #74、incr PR #75、incr PR #76、incr PR #77、incr PR #78、incr PR #79
moondsp
moondspではLoomを使ったmini記法の検証を進めた。
specs/loom-mini-cst のgrammar parityに向けて、checked target API examplesやloom-mini-cstのdocsを更新し、Loom側のAPI driftをspecで拾える状態にした。
production parserへすぐ切り替えるのではなく、まずspec側でLoomの挙動を固定していく方針になっている。
js_engine
js_engineではprototype移行を続けた。
object function、Promise、WeakMap / WeakSet、Map / Set、Array prototypeなどのlookupやstorageを順に RealmState に寄せ、module globalに残っていたprototype参照を減らした。
関連PR: js_engine PR #135、js_engine PR #136、js_engine PR #137、js_engine PR #138、js_engine PR #139
2026/5/24
Canopy / loom
Loom issue #147 の移行をCanopy側まで進めた。
text_change と moji をCanopy配下ではなくLoom monorepo側のtop-level moduleへ移す方針を決めた。
実装としては loom PR #149 で text_change / moji がLoom側へ移り、Canopy側では Canopy PR #341 で ./loom/text-change と ./loom/moji を参照するようにした。
Canopy内の lib/text-change と lib/moji、使われていなかった valtio submoduleも整理した。
Loomを単体でbuildしやすくするための移行で、Canopy側に置かれていた共通部品をLoom側の責任範囲へ戻した。
incr
incrは incr PR #81 でv0.6.0のreleaseを行った。 その後、CanopyやLoom側の利用に合わせて、ファイル名やskillの記述を新しいAPIの名前へ寄せた。 関連PR: incr PR #82、incr PR #83
moondsp
moondspではLoom mini CSTの改良を続けた。 moondsp PR #75 でquickcheckを0.14.0へ上げ、moondsp PR #76 でloom-mini-cstのgrammarを広げた。
この時点でもproduction parserはLoomへ切り替えておらず、Loomはまだspecと回帰テスト側で使う位置づけ。 関連PR: moondsp PR #71、moondsp PR #73、moondsp PR #74、moondsp PR #79
js_engine
RealmState移行をさらに進めた。
runtimeのMap / Set、boxed primitive、Array、WeakMap / WeakSet、ArrayBuffer storageなどを順に RealmState 側へ寄せ、CI workflowのNode.js runtime更新とdeprecatedな moon install 呼び出しの削除も行った。
関連PR: js_engine PR #140、js_engine PR #142、js_engine PR #143、js_engine PR #144、js_engine PR #146、js_engine PR #147、js_engine PR #148、js_engine PR #149、js_engine PR #151
2026/5/25
Canopy
Lambda metadataをeditor / ワークスペース / FFIの境界に通す変更を進めた。
ffi/lambda のrouting、ワークスペース coordination、Editor側のmetadata受け渡し、typed workflow port handlerが追加され、Lambda exampleをCognition側の流れに接続する準備が進んだ。
Lambda exampleを単なるサンプルとしてではなく、ワークスペースやCognitionの実験台として使えるようにする作業だった。
関連PR: Canopy PR #345、Canopy PR #347、Canopy PR #348、Canopy PR #349、Canopy PR #350
loom
Loomでは Memo から Derived への用語・API整理に合わせて、examples/lambda を更新した。
また、seamにdirect CST query helperを追加し、CST projection guideをdocsに追加した。
関連PR: loom PR #152、loom PR #154、loom PR #155、loom PR #156
moondsp
moondspではLoom mini CSTからprojection method IRを検証する作業を行った。 moondsp PR #80 でprojection method IRをvalidateし、apply-editの自動テストやloop expression style guidanceも追加した。 関連PR: moondsp PR #81、moondsp PR #83、moondsp PR #84、moondsp PR #85、moondsp PR #87
js_engine
js_engineではconstruct / callコンテキストの明示化を進めた。
ArrayBufferを RealmState に移した後の流れとして、construction stateを明示的なcallコンテキストへ移し、ambient interpreter context fallbackを削除した。
関連PR: js_engine PR #152
2026/5/26
Canopy
CanopyではCognitionまわりの基盤を進めた。 ワークスペースfilesを追跡する Canopy PR #357、minimal incremental reactive layer、コンテキストpacking API、provider boundaryの計画とdocsを追加し、削除ファイルの依存関係を掃除する修正も入った。 関連PR: Canopy PR #355、Canopy PR #358、Canopy PR #359、Canopy PR #360、Canopy PR #363、Canopy PR #364
同じ流れで、Lambda側はLoomの LambdaAnalysis attachmentを使う形へ寄せた。
Cognitionが参照するファイル、依存関係、コンテキストを明示的に扱えるようにすることで、後続のプロバイダ連携へ進む土台を作った。
関連PR: Canopy PR #362
incr
incrではAPIの大きな整理を続けた。 safe incremental refactorとしてtypesとcorrectnessを整理し、pipeline traitsをdeprecateした。 expr formula APIの設計もdocsに残した。 関連PR: incr PR #87、incr PR #89
moondsp
moondspではLoom mini CSTのcoverageを広げた。 slow postfix projection、degrade / euclid projection、dollar stack parity、sub-notation postfix parity、callback method projectionなどを追加し、Loom miniがどこまでproduction miniの構文に追いつけるかを確認した。 関連PR: moondsp PR #88、moondsp PR #89、moondsp PR #90、moondsp PR #91、moondsp PR #92、moondsp PR #93、moondsp PR #94、moondsp PR #95
js_engine
js_engineではborrowed built-in realm routingを修正した。 js_engine PR #153 の変更として、built-in realmの扱いを明示的なroutingへ寄せた。
2026/5/27
Canopy
Canopyではprovider boundaryの設計を実装側へ進めた。 provider boundary domainを追加し、provider boundary planをretargetした。 前日までのrecompute cleanupやコンテキストpackingの作業を受けて、Cognitionが外部プロバイダへ渡す境界を整理している段階になった。 外部プロバイダの結果をそのまま受け入れるのではなく、どの入力とコンテキストに対する結果なのかを追える形にする必要があった。 関連PR: Canopy PR #365
incr
incrではPhase 3a facade migrationのdocsを入れ、evaluation strategyをkernelから切り出した。 incr PR #94 では現在のincrのモデルをdocsにまとめている。 関連PR: incr PR #90、incr PR #91、incr PR #92、incr PR #93、incr PR #96
moondsp
moondspではLoom mini CSTのknown edgeをcharacterizeした。 moondsp PR #99 でmode-incompatibleなmini atomをrejectする挙動や、known edge follow-upの状態をdocsに残した。 関連PR: moondsp PR #96、moondsp PR #97、moondsp PR #100、moondsp PR #102
js_engine
js_engineではstartup benchmark stagingとbenchmark summary renderingの整理を行った。 js_engine PR #154 でJS startup benchmarkの足場を追加し、js_engine PR #155 でbenchmark dashboardの表示を整理した。
2026/5/28
Canopy
Canopyではprovider planningとLambda semantic側の作業を続けた。
provider planningとlambda semantic overlayを追加し、ワークスペースmemoのsmoke test、ワークスペースmemo lifecycle API、reactive provider boundary driverまで進めた。
lib/cognition/provider_boundary_store.mbt と lib/cognition/reactive.mbt にprovider planning graphを接続し、cancellation、completion、retry classification、driver actionを @incr の内部状態として扱う方向が固まってきた。
関連PR: Canopy PR #367、Canopy PR #368、Canopy PR #372、Canopy PR #379
provider cancellationのidempotency、driver shutdown時にpending requestを観測できること、file removalやbudgeted context変更後のstale completionを拒否するテストも追加されている。 プロバイダの応答が遅れて返ってきたときに、古いコンテキストの結果を現在の状態へ混ぜないための整理になっている。 Lambda、JSON、MarkdownのFFI read accessorもcoordinator経由のprotected readへ寄せた。 ワークスペースの更新中に外側から半端な状態を読まないようにするための変更で、Cognitionのプロバイダ連携を進める前に境界を固める作業になった。 関連PR: Canopy PR #370、Canopy PR #374、Canopy PR #375、Canopy PR #376、Canopy PR #377、Canopy PR #378
incr
incrではruntime evaluation event APIまわりを進めた。
internal runtime evaluation eventsとevaluation strategy bundleを追加し、static derived fast pathのbenchmarkも取った。
honest read-error ownershipの設計をdocsに残し、Derived::fallible / DerivedMap::fallible を追加した。
関連PR: incr PR #95、incr PR #97、incr PR #98
moondsp
moondspではloom-mini-cstのprovenance matrix coverageとcontrol method projection parityを追加した。 Loom移行に向けて、upstreamへ要求する挙動やrecovery stateをdocsに分け、回復処理のevidenceも増やした。 関連PR: moondsp PR #101、moondsp PR #104、moondsp PR #106、moondsp PR #107、moondsp PR #108
js_engine
js_engineではclosure-converted block bodiesの最適化を行った。 その後、opt-in bytecode prototypeを追加し、既存interpreterを残したままbytecode実行経路を育てる準備に入った。 関連PR: js_engine PR #156、js_engine PR #157
2026/5/29
Canopy
Canopyでは前日に固めたCognitionまわりから少し離れて、repo全体の再利用性と整理を進めた。 agent reuse protocolのdocsを追加し、レビュー指摘を受けてAPI mapやPR template、package overviewの型まわりも直した。
MoonBitのidiom sweepとして、core / projection、lang/json、lang/lambda、editorまわりでguardやpattern matching、loop idiom、ProjNode::id() の使い方を整理した。
tree-editorのfile splitも入り、後続の変更で触る範囲を読みやすくした。
関連PR: Canopy PR #381、Canopy PR #382、Canopy PR #383、Canopy PR #385
大きな変更としては、editor内にあったephemeral presence subsystemを dowdiness/canopy/ephemeral へ切り出した。
その後、wire primitiveを汎用の lib/byte-codec へ抽出し、relayのwire codecも共有byte codecへ移した。
presenceやrelayがそれぞれ似たようなwire処理を持つのではなく、低レベルのbyte列変換を共通部品として扱う方向になった。
関連PR: Canopy PR #387、Canopy PR #388、Canopy PR #390、Canopy PR #391、Canopy PR #392
Canvas側ではconnection drag中のpreview port compatibilityを追加した。 接続を引いている途中でもportの互換性を見ながらpreviewできるようになり、グラフ編集時の手触りを改善する変更になっている。 関連PR: Canopy PR #394
moondsp
moondspではLoom mini CST projectionのhelper利用を進めた。 projection identity helperとoptional-edit projection helperを使うようにし、Loom側に寄せたprojection APIでspecを保てるか確認している。 関連PR: moondsp PR #109、moondsp PR #110
js_engine
js_engineではbytecode実行経路を広げた。 short-circuit operatorとcomma expressionのbytecode対応を追加し、sloppy arguments formal binding、double super initialization、async generator functionのname / length、destructuring rest parameterの扱いを順に修正した。 関連PR: js_engine PR #158、js_engine PR #159、js_engine PR #160、js_engine PR #161、js_engine PR #162、js_engine PR #163
bytecodeはまだopt-inの段階だが、式や関数境界の細かい仕様ケースを通しながら、interpreterとの差分を潰していく流れになっている。
2026/5/30
Canopy
CanopyではLambdaのscope graphを本格的に実装側へ寄せた。
NodeId keyedなbinding indexを追加し、renameのbinder lookupを古い resolve_binder から @scope.declaration へ移した。
その後、残っていたcallerも @scope.declaration に移し、module binderの Decl.node_id に関するproduction contractやcross-pipeline resolution equivalenceをテストで固定した。
関連PR: Canopy PR #396、Canopy PR #397、Canopy PR #398、Canopy PR #399、Canopy PR #400、Canopy PR #401、Canopy PR #402
cross-pipeline PBTを通す中で、module binderの node_id が実際のprojection nodeを指していない問題もはっきりした。
この問題はgo-to-definitionを作るときに邪魔になるため、既存のSourceMap token spanを使ってbinder locationを引けるようにするOption Dの設計へ整理した。
関連PR: Canopy PR #403
loom
LoomではCanopy側のscope graphやprojection identityまわりを支える変更が進んだ。
CST tokenをsource spanとして保持し、parser-owned reuseのrebaseを取り戻し、source-span reuse APIを固めた。
さらに ProjectionIdentityTracker を追加し、projection identityを単発のhelperではなく、編集列をまたいで追跡できる部品として扱えるようにした。
関連PR: loom PR #188、loom PR #189、loom PR #190、loom PR #191、loom PR #192
incr
incrではtyped spreadsheet demoを実際に触れるUIへ育てた。 セル編集できるようにした後、50x50のfullscreen sheet、inline edit、trace / evidence overlay、night themeを備えたRabbita demoに広げた。 式の評価自体はMoonBit側に残し、Rabbitaは表示と操作の層に留める方針を保っている。 関連PR: incr PR #117、incr PR #118
moondsp
moondspではLoom側で増えたprojection identity helperをspec側へ取り込んだ。 Loom mini CST projectionをproduction parserへすぐ置き換えるのではなく、まずspecのprojection identityを上流APIに寄せて、移行時の前提を揃えている。 関連PR: moondsp PR #111
js_engine
js_engineではopt-in bytecode / VM prototypeのcoverageを大きく広げた。
演算子、property access、call / construct、destructuring、eval、super などの実行経路を既存runtime helperへ寄せながらbytecode側に通し、未対応の構文は明示的なunsupported診断で落とす形にした。
その後、bytecode performance microbenchmarkを追加し、不要なarguments object setupを避ける最適化も入った。
関連PR: js_engine PR #164、js_engine PR #171、js_engine PR #172
2026/5/31
Canopy
Canopyでは前日に設計したscope graphのbinder locationを実装した。
@scope.binder_span と @scope.go_to_definition を追加し、references を DeclId keyedに移すことで、module binderのsynthetic node_id に依存しない形にした。
incrementalとfull pipelineの差分テストも追加し、FlatProj reuseや @incr memo stackを通しても同じ解決結果になることを確認している。
関連PR: Canopy PR #404、Canopy PR #405、Canopy PR #406、Canopy PR #407、Canopy PR #408、Canopy PR #411
incr のread channelが ReadError を返すようになった流れに合わせて、coordinator側でもReadErrorを伝播するようにした。
scope graph側ではmodule editのreferenceをidentity basedにし、edit capture checkやIdealのscope annotationもcanonicalな @scope graphから導く形へ寄せた。
これでUIのhighlightとscope graph側の解決結果が別々のresolverを持つ状態から一歩抜けた。
関連PR: Canopy PR #409、Canopy PR #410、Canopy PR #412、Canopy PR #420、Canopy PR #426、Canopy PR #427
docs側ではrepository responsibility map、GUI layer integration report、module一覧と .gitmodules / moon.mod.json の整合性を整理した。
Structure modeのfallback documentもschema validに直している。
関連PR: Canopy PR #421、Canopy PR #431、Canopy PR #432、Canopy PR #433
loom
Loomでは前日の ProjectionIdentityTracker を、失敗したeditやmalformed damageをまたいでcomposeできるようにした。
また、incr側のtyped spreadsheet demo、ReadError、accumulator ReadErrorに合わせてsubmoduleを更新し、Canopyやmoondspが同じ基盤を参照できるようにした。
関連PR: loom PR #197、loom PR #198、loom PR #199、loom PR #200、loom PR #201、loom PR #204
incr
incrではhonest read-error ownershipのTier 2として、public read channelを CycleError から ReadError へ広げた。
これにより、直接disposeされたcellの読み取りをcatchできないabortではなく Err(Disposed(_)) として扱えるようになった。
Derived::fallible のrecipeやReachableDerived ADRもdocsに追加し、typed spreadsheet demo側ではGC rootingやper-edit evidence snapshotの上限も直した。
関連PR: incr PR #119、incr PR #120、incr PR #125、incr PR #126、incr PR #127、incr PR #132、incr PR #133、incr PR #134
その後、static Derived のprivate pathを通常経路へ昇格し、disposed cell idのdependent guard、Datalog relationのnet change publish、accumulator readの ReadError 対応も入った。
typed spreadsheet demoはCloudflare Pagesへdeployするworkflowを追加し、Node 24 actionsにも合わせた。
関連PR: incr PR #135、incr PR #136、incr PR #137、incr PR #141、incr PR #142、incr PR #144、incr PR #145
moondsp
moondspではLoomのtracker edit compositionをspec側で消費し、Loom promotion notesも現状に合わせて更新した。 web側ではlive UIからsong playbackを触れるようにし、multiline song helpやglobal BPMの説明も補った。 関連PR: moondsp PR #112、moondsp PR #113、moondsp PR #115、moondsp PR #116
js_engine
js_engineではbytecode prototypeの性能を測る入口を整えた。 PRごとにbase-vs-head benchmarkを出せるようにし、live benchmark dashboardを再設計して、commit dateやscan controlを見やすくした。 さらにplain object property helperやbytecode environment lookupのhot pathを最適化し、startup Hyperfine workflow、startup decomposition helper、startup phase breakdown benchmarkを追加した。 関連PR: js_engine PR #173、js_engine PR #174、js_engine PR #175、js_engine PR #176、js_engine PR #177、js_engine PR #178、js_engine PR #182、js_engine PR #183、js_engine PR #184