Kumiki 仕様
ここは Kumiki 言語とランタイムの正規(normative)仕様である。実装(packages/)と本仕様が食い違った場合、本仕様を正とし、どちらを直すかを PR に記録する。
通読する必要はない。書き始める前に読むべき文書は 言語コア だけで、残りはすでに手元にある疑問に答えるためにある。チュートリアルや how-to は仕様ではなく ガイド に置き、どの機能にも動く 1 ファイルが Examples にある。
文書
| 文書 | 内容 |
|---|---|
| 言語コア | 7 層(type / slot / effect / reducer / tile / fn / app)と式・文・パターン |
| 標準ライブラリ | List / Map / Set / Option / Result / Time / ドメイン型 |
| ルーティング | パターン、パラメータ、route.enter / route.leave、リダイレクト |
| スタイル | スタイル・レイアウト・テーマ |
| フォーム | フォーム、bind、バリデーション |
| HTTP / Storage | HTTP / Storage effects とポリシー(latest / debounce / once …) |
| ライフサイクル | ライフサイクル、ケイパビリティ、エラー境界、サスペンス |
| ランタイム | ランタイム実装ガイド(signal graph・mount・dispatch・dispose) |
| AI 編集 | AI 編集 API、CRDT op、参照整合性 |
| テスト | テスト戦略 |
| エラーコード | エラーコードカタログ(E0000..E08xx) |
索引
上の文書への相互参照。手書きではなく、コンパイラと examples から生成している。
層 × 機能マトリクス — 各機能が 7 層のどこに接するか
セルはその交点を規定するセクションへのリンク。— はその次元に層固有の規則が無いことを表す。
AI 編集の CRDT op(add / replace / remove / rename、§9.3.1)は全層の定義に一様に適用される。マトリクスの行には層固有のセクションのみを載せている。
診断コード — エラーコードの全コードを層と機能で分類
| コード | kind | 層 | 機能 |
|---|---|---|---|
| E0000 | parse-error | all | コア |
| E0001 | missing-404 | app | ルーティング |
| E0002 | duplicate-timer-name | app | ライフサイクル |
| E0003 | missing-app | app | コア |
| E0004 | duplicate-app | app | コア |
| E0005 | tile-cycle | tile | コア |
| E0006 | fn-cycle | fn | コア |
| E0007 | duplicate-definition | all | コア |
| E0008 | duplicate-clause / duplicate-key / duplicate-field / duplicate-param / duplicate-variant | all | コア |
| E0102 | undef-reducer | reducer | コア |
| E0103 | undef-ref / undef-slot | slot | コア |
| E0104 | undef-effect / init-not-effect-call | effect | コア |
| E0106 | undef-timer | reducer | ライフサイクル |
| E0105 | undef-tile | tile | コア |
| E0107 | undef-motion | tile | スタイル |
| E0108 | undef-member | fn | 標準ライブラリ |
| E0110 | unknown-token-group | tile | スタイル |
| E0109 | test-wildcard-misuse | reducer | テスト |
| E0111 | orphan-sub-routes | tile | ルーティング |
| E0112 | duplicate-sub-route | tile | ルーティング |
| E0113 | sub-routes-without-outlet | tile | ルーティング |
| E0114 | sub-routes-without-wildcard-parent | tile | ルーティング |
| E0115 | reserved-slot-name | slot | コア |
| E0116 | undef-call | fn | コア |
| E0117 | undef-type | type | コア |
| E0118 | undef-theme | app | スタイル |
| E0119 | route-bind-out-of-scope | reducer | ルーティング |
| E0120 | route-in-app-init | app | ルーティング |
| E0201 | type-mismatch | type | コア |
| E0202 | emit-arg-type-mismatch | reducer | コア |
| E0204 | effect-id-misuse | effect | HTTP/Storage |
| E0205 | bind-on-file-input | tile | フォーム |
| E0206 | file-only-prop | tile | フォーム |
| E0207 | pat-arity-mismatch | type | コア |
| E0208 | pat-type-mismatch | type | コア |
| E0209 | pat-unknown-variant | type | コア |
| E0210 | type-arity-mismatch | type | コア |
| E0211 | undef-tile-in-selector | reducer | コア |
| E0212 | selector-id-mismatch | reducer | コア |
| W0212 | ui-event-tile-mismatch | reducer | コア |
| E0213 | call-arity-mismatch | fn | コア |
| E0214 | missing-record-field | type | コア |
| E0215 | unknown-record-field | type | コア |
| E0216 | unknown-variant | type | コア |
| E0217 | int-literal-precision | type | コア |
| E0218 | for-over-non-list | type | コア |
| W0213 | handler-on-inert-tile | tile | コア |
| E0301 | missing-capability | effect | 標準ライブラリ |
| E0302 | unknown-capability | app | 標準ライブラリ |
| E0303 | invalid-cancel-target | effect | HTTP/Storage |
| E0304 | derived-slot | slot | コア |
| E0305 | fn-impurity | fn | コア |
| E0401 | motion-unknown-property | tile | スタイル |
| E0402 | motion-invalid-timing | tile | スタイル |
| E0403 | motion-malformed | tile | スタイル |
| E0601 | duplicate-write | reducer | コア |
| E0701 | a11y-button | tile | ライフサイクル |
| E0702 | a11y-image | tile | ライフサイクル |
| E0703 | a11y-link | tile | ライフサイクル |
| E0704 | unknown-icon | tile | スタイル |
| E0705 | a11y-label-for | tile | ライフサイクル |
| E0712 | episode-mock-invalid | effect | テスト |
| E0713 | test-shape-invalid | effect | テスト |
| E0801 | unimplemented-method | fn | 標準ライブラリ |
| E0802 | unimplemented-function | fn | 標準ライブラリ |
機能 example — マトリクスのセルごとに動く 1 ファイル
Layers はその example が中心に据える定義、Spec は実演しているセクション。
| Example | 層 | 機能 | 仕様 |
|---|---|---|---|
01-slot-and-reducer.kumiki | slot, reducer | コア | §1.4 §1.6 |
02-nominal-type.kumiki | type | コア | §1.3 |
03-union-and-match.kumiki | type | コア | §1.3 |
04-record-and-copy.kumiki | type | コア | §1.3 |
05-pure-fn.kumiki | fn | コア | §1.8 |
06-if-expression.kumiki | fn | コア | §1.9 |
07-list.kumiki | fn | 標準ライブラリ | §2.2.3 |
08-map.kumiki | fn | 標準ライブラリ | §2.2.1 |
09-set.kumiki | fn | 標準ライブラリ | §2.2.2 |
10-option.kumiki | fn | 標準ライブラリ | §2.2.4 |
11-time-and-duration.kumiki | fn | 標準ライブラリ | §2.2.8 |
12-layout.kumiki | tile | スタイル | §4.4 |
13-text-input-bind.kumiki | slot, tile | フォーム | §5.1 |
14-select.kumiki | tile | フォーム | §5.5.1 |
15-checkbox.kumiki | tile | フォーム | §5.3.1 |
16-conditional-ui.kumiki | tile | コア | §1.7 |
17-theme.kumiki | app | スタイル | §4.2 |
18-routing.kumiki | app, tile | ルーティング | §3.1 |
19-effect-http.kumiki | effect | HTTP/Storage | §6.2 |
20-effect-storage.kumiki | effect | HTTP/Storage | §6.7 |
21-timer.kumiki | reducer | ライフサイクル | §7.1.5 |
22-result.kumiki | type | 標準ライブラリ | §2.2.5 |
23-lifecycle-route-enter.kumiki | reducer | ルーティング | §3.4 |
24-fold.kumiki | fn | 標準ライブラリ | §2.2.3 |
25-stop-timer.kumiki | effect, reducer | ライフサイクル | §7.1.5 |
26-overlay.kumiki | tile | 標準ライブラリ | §2.3.7 |
27-custom-capability.kumiki | app, effect | 標準ライブラリ | §2.5 |
28-tests.kumiki | reducer | テスト | §8.1 |
30-motion.kumiki | tile | スタイル | §4.9 |
31-argless-methods.kumiki | fn | 標準ライブラリ | §2.2 |
32-panic-boundary.kumiki | tile, app | ライフサイクル | §7.3 |
33-field-vs-method.kumiki | fn, type | 標準ライブラリ | §2.2 |
34-builtin-tiles.kumiki | tile | 標準ライブラリ | §2.3 |
35-match-and-args.kumiki | tile, type | コア | §1.9 |
36-effect-indexed-db.kumiki | effect | HTTP/Storage | §6.7.4 |
37-lifecycle-events.kumiki | reducer | ライフサイクル | §7.1 |
38-confirm-leave-guard.kumiki | reducer | ルーティング | §3.5.2 |
39-effect-session.kumiki | effect | HTTP/Storage | §6.7.4 |
40-nested-routes.kumiki | app, tile | ルーティング | §3.6 |
40-token-refs.kumiki | tile | スタイル | §4.3 |
41-link-prefetch.kumiki | tile | ルーティング | §3.8 |
42-scroll-restoration.kumiki | app | ルーティング | §3.9 |
43-file-upload-preview.kumiki | tile | フォーム | §5.10 |
44-episode-test.kumiki | effect | テスト | §8.6 |
45-ui-key-hover-tuple.kumiki | reducer, tile | コア | §1.6 |
46-stdlib-paren-methods.kumiki | fn | 標準ライブラリ | §2.2 |
47-icon-set.kumiki | tile | スタイル | §4.8 |
48-effect-cancel.kumiki | effect | HTTP/Storage | §6.4 |
49-ui-focus-blur.kumiki | reducer, tile | コア | §1.6 |
50-match-pattern-integrity.kumiki | type | コア | §1.9 |
51-selector-id.kumiki | reducer | コア | §1.6.2 |
52-selector-id-arg.kumiki | reducer | コア | §1.6.2 |
53-keyed-list-identity.kumiki | tile | コア | §10.3.10 |
54-select-preserves-state.kumiki | tile | コア | §10.3.11 |
55-video-preserves-currenttime.kumiki | tile | コア | §10.3.11 |
56-details-preserves-open.kumiki | tile | コア | §10.3.11 |
57-editable-preserves-focus.kumiki | tile | コア | §10.3.11 |
58-unkeyed-conditional-rebuild.kumiki | tile | コア | §10.3.12 |
59-overlay-keyed-layers.kumiki | tile | コア | §10.3.10 |
60-empty-state-keyed-list.kumiki | tile | コア | §10.3.10 |
61-reserved-identifier-names.kumiki | fn, reducer | コア | §1.2 |
62-conditional-inline-tile-handlers.kumiki | tile, reducer | コア | §10.3.13 |
63-reducer-batch-atomicity.kumiki | slot, reducer | コア | §10.3.3 |
64-init-slot-argument.kumiki | app, effect | コア | §1.12 |
65-prefers-dark.kumiki | app, reducer | スタイル | §4.6.1 |
66-value-types.kumiki | type, slot, fn | コア | §1.9.4 |
67-self-reference.kumiki | tile, slot, fn | コア | §1.7.2 |
68-name-uniqueness.kumiki | type, slot, fn | コア | §1.3.1 |
69-builtin-effect-capabilities.kumiki | reducer, effect | 標準ライブラリ | §2.6 |
70-spec-grammar.kumiki | type, slot, fn, reducer | コア | §1.2 |
71-button-type.kumiki | slot, reducer, tile | フォーム | §5.2.2 |
72-time-format.kumiki | slot, fn, tile | 標準ライブラリ | §2.2.8 |
73-effect-policy-queue.kumiki | slot, effect, reducer | ライフサイクル | §10.4.3 |
74-common-tile-props.kumiki | slot, reducer, tile | スタイル | §2.3.10 |
75-paren-less-stdlib-constants.kumiki | slot, effect, reducer | HTTP/Storage | §6.1.4 |
76-conditional-adds-a-universal-handler.kumiki | slot, reducer, tile | コア | §10.3.11 |
77-int-float-math.kumiki | slot, reducer, tile | 標準ライブラリ | §2.2.7 |