@quolu/lattice 0.63.0 → 0.63.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +147 -147
- package/README.ja.md +378 -378
- package/README.md +303 -303
- package/bin/lattice-mcp.mjs +0 -0
- package/bin/lattice-scripted-adapter.mjs +0 -0
- package/bin/lattice-scripted-worker.mjs +0 -0
- package/bin/lattice-work-order-adapter.mjs +0 -0
- package/bin/lattice.mjs +3 -1
- package/docs/bridge-setup.md +248 -248
- package/docs/schemas/lattice.executor_packet.v1.schema.json +57 -57
- package/docs/schemas/lattice.executor_receipt.v1.schema.json +66 -66
- package/docs/schemas/lattice.phase_todo_revision.v3.schema.json +360 -360
- package/docs/schemas/lattice.plan_create_input.v1.schema.json +56 -56
- package/docs/schemas/lattice.plan_create_input.v2.schema.json +72 -72
- package/docs/schemas/lattice.plan_create_input.v3.schema.json +81 -81
- package/docs/schemas/lattice.plan_create_input.v4.schema.json +357 -85
- package/docs/schemas/lattice.plan_scope_review.v1.schema.json +55 -55
- package/docs/schemas/lattice.run_request.v1.schema.json +238 -238
- package/docs/schemas/lattice.runtime_adapter_capabilities.v2.schema.json +55 -55
- package/docs/schemas/lattice.runtime_adapter_registration_input.v1.schema.json +78 -78
- package/docs/schemas/lattice.runtime_adapter_registration_input.v2.schema.json +86 -86
- package/docs/schemas/lattice.todo_extraction.v2.schema.json +298 -298
- package/docs/schemas/lattice.todo_extraction.v3.schema.json +150 -150
- package/docs/schemas/lattice.todo_extraction.v4.schema.json +161 -161
- package/docs/schemas/lattice.todo_revision.v2.schema.json +260 -260
- package/docs/schemas/lattice.todo_revision_set.v3.schema.json +363 -363
- package/docs/schemas/lattice.todo_structure_binding.v1.schema.json +47 -47
- package/docs/schemas/lattice.todo_structure_realization.v1.schema.json +55 -55
- package/docs/schemas/lattice.todo_structure_set.v1.schema.json +264 -264
- package/package.json +109 -109
- package/sensor/LICENSE +21 -21
- package/sensor/NOTICE +19 -19
- package/sensor/dist/bin/lattice-sensor.js +9 -9
- package/sensor/dist/db/index.js +24 -24
- package/sensor/dist/db/migrations.js +41 -41
- package/sensor/dist/db/queries.js +164 -164
- package/sensor/dist/db/schema.sql +205 -205
- package/sensor/dist/directory.js +5 -5
- package/sensor/dist/extraction/wasm/tree-sitter-c_sharp.wasm +0 -0
- package/sensor/dist/extraction/wasm/tree-sitter-cfml.wasm +0 -0
- package/sensor/dist/extraction/wasm/tree-sitter-cfquery.wasm +0 -0
- package/sensor/dist/extraction/wasm/tree-sitter-cfscript.wasm +0 -0
- package/sensor/dist/extraction/wasm/tree-sitter-cobol.wasm +0 -0
- package/sensor/dist/extraction/wasm/tree-sitter-erlang.wasm +0 -0
- package/sensor/dist/extraction/wasm/tree-sitter-go.wasm +0 -0
- package/sensor/dist/extraction/wasm/tree-sitter-java.wasm +0 -0
- package/sensor/dist/extraction/wasm/tree-sitter-javascript.wasm +0 -0
- package/sensor/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
- package/sensor/dist/extraction/wasm/tree-sitter-pascal.wasm +0 -0
- package/sensor/dist/extraction/wasm/tree-sitter-python.wasm +0 -0
- package/sensor/dist/extraction/wasm/tree-sitter-tsx.wasm +0 -0
- package/sensor/dist/extraction/wasm/tree-sitter-typescript.wasm +0 -0
- package/sensor/dist/extraction/wasm/tree-sitter-vbnet.wasm +0 -0
- package/sensor/dist/mcp/liveness-watchdog.js +53 -53
- package/sensor/dist/mcp/server-instructions.js +95 -95
- package/sensor/package.json +56 -56
- package/src/project-cli.mjs +164 -24
- package/src/todo-authoring-input.mjs +35 -5
- package/src/todo-cli.mjs +2 -2
- package/src/todo-store.mjs +52 -21
package/README.ja.md
CHANGED
|
@@ -1,378 +1,378 @@
|
|
|
1
|
-
<p align="center">
|
|
2
|
-
<img src=".github/og.png" alt="Lattice — 閉ざされて見えた山岳地形から複数の進行経路が現れる" width="100%">
|
|
3
|
-
<br>
|
|
4
|
-
<sub><em>この画像は、閉ざされているように見えた場所から複数の進行経路が現れ、自律した実行者たちが協調して動き出す瞬間を表しています。</em></sub>
|
|
5
|
-
</p>
|
|
6
|
-
|
|
7
|
-
# Lattice
|
|
8
|
-
|
|
9
|
-
[kitepon.dev](https://kitepon.dev/)を運営する[クオ(@QLyun35332)](https://x.com/QLyun35332)が開発・メンテナンスしています。
|
|
10
|
-
|
|
11
|
-
[](https://www.npmjs.com/package/@quolu/lattice)
|
|
12
|
-
[](https://github.com/kitepon/Lattice/actions/workflows/ci.yml)
|
|
13
|
-
[](LICENSE)
|
|
14
|
-
[](https://nodejs.org/)
|
|
15
|
-
[](#特許)
|
|
16
|
-
|
|
17
|
-
[English](README.md) · **日本語**
|
|
18
|
-
|
|
19
|
-
> **見かけだけの競合で、作業を直列化しない。**
|
|
20
|
-
> Latticeはmulti-agent開発のためのschedulability compilerです。codebaseの実際の境界を観測して
|
|
21
|
-
> どのtaskが並列に走れるかを裏付け、本当に衝突している場合は**その境界をrefactorして
|
|
22
|
-
> planを再コンパイルし、並列に走れる形へ変えます**。
|
|
23
|
-
|
|
24
|
-
## なぜ要るのか
|
|
25
|
-
|
|
26
|
-
3つのagentに3つのtaskを渡すと、たいてい次のどちらかで失敗します。
|
|
27
|
-
|
|
28
|
-
- **直列にしすぎる。** 「どちらも`renderer.ts`を触るから順番に」——実際には*別々のsymbol*を
|
|
29
|
-
触っていて、同時に走れたかもしれない。
|
|
30
|
-
- **直列にしなさすぎる。** 依存を誰も宣言しなかったので並列で走らせ、両方が書いた後で衝突に気づく。
|
|
31
|
-
|
|
32
|
-
どちらも原因は同じで、**誰も境界を実測していない**ことです。task listの依存線は意図の主張であって、
|
|
33
|
-
codeについての証拠ではありません。
|
|
34
|
-
|
|
35
|
-
Latticeはここを違う手で塞ぎます。競合を**検出する**だけでなく**取り除く**。2つのtaskが1つのfileを
|
|
36
|
-
奪い合っているなら、切り方を導出し、隔離worktreeで適用し、五条件で検証し、変換後のsourceに対して
|
|
37
|
-
planを再コンパイルします。共有面が共有でなくなるので、競合辺そのものが消えます。
|
|
38
|
-
|
|
39
|
-
### 実例(このrepo自身)
|
|
40
|
-
|
|
41
|
-
2つの工程がどちらも`src/seam-commit.mjs`を変更する必要がありました。Latticeは宣言をcompileして
|
|
42
|
-
`conflict_count: 1`・`severability: code_seam`と判定し、切り方を提案し、隔離worktreeで適用。
|
|
43
|
-
五条件をすべて満たしたので、fileは工程ごとの所有面+共有面+残余面へ分割されました。
|
|
44
|
-
再コンパイルは`conflict_count: 0`を返し、両工程は同じparallel groupに入りました。
|
|
45
|
-
|
|
46
|
-
人が手で切ったのではありません。**工程を並列化するために製品が切りました。**
|
|
47
|
-
|
|
48
|
-
### 設計メモと作業記憶はToDoと一緒に渡る
|
|
49
|
-
|
|
50
|
-
新しいToDoは、実装方針・調査結果・採用/棄却理由・注意・未解決事項をMarkdownで書いた
|
|
51
|
-
`design_memo`を必ず持ちます。空欄やファイル参照だけでは登録できません。本当に何も考えていない場合だけ、
|
|
52
|
-
正確なsentinel `NO_PLAN`を本文にします。Latticeはauthoring時に次の問いを返し、空欄のまま通しません。
|
|
53
|
-
|
|
54
|
-
> あなたがこのToDoに対して、何も考えていないならば、設計メモに `NO_PLAN` と書いてください
|
|
55
|
-
|
|
56
|
-
通常の`lattice todo show`と、成功するすべての`lattice todo start`は、この初期設計メモを自動で返します。
|
|
57
|
-
作業開始後に増えた方針、棄却案、調査結果、注意、未解決事項は、別のappend-only note chainへ追記できます。
|
|
58
|
-
同じ通常読取は元version/元task、訂正状態、note chain head、overflow、全履歴コマンドを含む最新の
|
|
59
|
-
bounded `note_context`も自動で返します。次のAIが別のnote読取コマンドを知っている必要はありません。
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
lattice todo note --plan <key> --task <id> --message "既存parserを使い、fallbackは追加しない"
|
|
63
|
-
lattice todo show --plan <key> --task <id> --json
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
動的工程表は、選択したToDoの右ペインへ初期設計メモと追記noteの本文を表示します。あわせて前提工程・
|
|
67
|
-
後続工程それぞれの状態(未着手/作業中/完了/ブロック中)と、その工程の並列可否を示します。
|
|
68
|
-
note本文はHTMLを描くすべての面へ載ります。project別HTMLの生成や再生成は不要です。
|
|
69
|
-
|
|
70
|
-
### ToDoのdataflowを実装前と実装後で照合する
|
|
71
|
-
|
|
72
|
-
codeを変更するplanだけ、plan定義後に論理dataflow検査を明示的に有効化できます。出版や運用など
|
|
73
|
-
code-dataflowを持たないplanへは適用しません。入力schemaはCLIから取得でき、planned sourceを保存しても
|
|
74
|
-
まだ有効化されません。clean worktreeでのauthoritative compileが`consistent`になった時だけ、
|
|
75
|
-
そのplan version専用のimmutable bindingが発行されます。
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
lattice todo structure --schema --json
|
|
79
|
-
lattice todo structure input --plan <key> --input structure.json --dry-run --json
|
|
80
|
-
lattice todo structure input --plan <key> --input structure.json
|
|
81
|
-
lattice todo structure compile --plan <key> --input .lattice/todo/structure/<key>.json
|
|
82
|
-
lattice todo structure --plan <key> --json
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
verdictは`consistent | inconsistent | unknown`の三値です。`unknown`を問題なしへ丸めず、findingはtask、
|
|
86
|
-
data port、code anchor、commitと次の操作を返します。plannedは不変で、実装後の形はtaskごとの
|
|
87
|
-
append-only realizationとして記録します。有効化済みplanのgraph taskはfresh realizationなしに
|
|
88
|
-
`todo done`できません。全task完了後は最終HEADで再compileし、freshかつconsistentなfinalizationが
|
|
89
|
-
できてからterminalを閉じます。
|
|
90
|
-
|
|
91
|
-
```bash
|
|
92
|
-
lattice todo structure realize --plan <key> --task <id> --input realization.json
|
|
93
|
-
lattice todo done --plan <key> --task <id> --evidence evidence.json
|
|
94
|
-
lattice todo structure finalize --plan <key> --json
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
動的dashboardの「構造検査」は工程依存図とは別の面です。task/data/code/external/commit provenance、
|
|
98
|
-
planned/realized/effective、findingと鮮度を表示します。工程依存線へdataflow edgeを混ぜません。
|
|
99
|
-
通常読取とdashboardは保存artifactだけを読み、暗黙にsensorを再実行しません。構造未適用planの
|
|
100
|
-
lifecycleとdashboardには、このgateも構造panelも追加されません。
|
|
101
|
-
|
|
102
|
-
### 変換の受入五条件
|
|
103
|
-
|
|
104
|
-
**5つすべて**を満たしたときだけ採用します。1つでも欠ければ棄却です。
|
|
105
|
-
|
|
106
|
-
| 条件 | 意味 |
|
|
107
|
-
|---|---|
|
|
108
|
-
| `behavior_equivalent` | 原pathの公開export面が保たれ、移した先が残余面のsymbolへ束縛なしで言及していない(切断参照の網) |
|
|
109
|
-
| `focused_tests_passed` | 影響testが変換後のsourceで実際に通る |
|
|
110
|
-
| `sensor_fresh` | 構造索引を取り直し、新しい面を収載している |
|
|
111
|
-
| `overlap_reduced` | 対象の競合が消え、**かつ**plan全体の競合対が増えていない |
|
|
112
|
-
| `parallelism_improved` | 実行段階数が減っている |
|
|
113
|
-
|
|
114
|
-
### 実行段階の二段構え
|
|
115
|
-
|
|
116
|
-
計画時に完全な分断は原理的に得られません(動的dispatch・実行時に決まるpath・外部状態)。
|
|
117
|
-
そのため実行中は宣言でなく**実際に変更された資源**を観測し、宣言scope外への書き込みや
|
|
118
|
-
進行中の他工程のscopeとの重なりを実行時競合として挙げます。処置は「一方をholdして他方を
|
|
119
|
-
確定→再開」か「双方停止→seam変換→双方再開」の二択で、どちらも実storeに対する
|
|
120
|
-
integration testで一気通貫に検証済みです。切断の重さは`lattice run seam profile`
|
|
121
|
-
(計画時は`todo seam-profile`)が数えられる事実だけで投影し、機械変換の可否は「確実の門」が
|
|
122
|
-
typed理由つきで分類します——宣言を直せば通るのか、操作AIへ渡すべきなのかまで返します。
|
|
123
|
-
|
|
124
|
-
## 所有境界
|
|
125
|
-
|
|
126
|
-
本repoはplan/ToDo/run store、Lattice sensor、schema、migration、release、diagnosticsを
|
|
127
|
-
所有します。[dotagents](https://github.com/kitepon-rgb/dotagents)はkitepon.devを支える内部
|
|
128
|
-
toolchainであり、製品横断の工程利用・導入・host統合を所有します。
|
|
129
|
-
廃止済みの前身sensorは独立製品として配線せず、Lattice sensorだけを現役面とします。
|
|
130
|
-
MarkItDownは別区分の第三者CLIです。
|
|
131
|
-
|
|
132
|
-
現在の工程状態と完了証拠の正本は、このrepoのLattice storeです。文書の役割と現行導線は
|
|
133
|
-
[docs/README.md](docs/README.md)、製品思想は[PLAN.md](PLAN.md)、公開contractは
|
|
134
|
-
[docs/00_product-contract.md](docs/00_product-contract.md)を参照してください。
|
|
135
|
-
|
|
136
|
-
CLIの全体像は`lattice --help`、各公開namespaceの正規構文は
|
|
137
|
-
`lattice <plan|run|event|todo|sensor|factory-diagnostics|runtime-errors|bridge|hooks> --help`で確認できます。
|
|
138
|
-
個別操作は`lattice <namespace> <subcommand> --help`または`lattice help <namespace> <subcommand>`で
|
|
139
|
-
正規optionをstore非依存に確認できます。
|
|
140
|
-
|
|
141
|
-
## 開発
|
|
142
|
-
|
|
143
|
-
```bash
|
|
144
|
-
npm test
|
|
145
|
-
npm run check
|
|
146
|
-
npm run ci
|
|
147
|
-
node scripts/reap-orphan-test-daemons.mjs
|
|
148
|
-
lattice sensor sync . --json
|
|
149
|
-
spotter doctor
|
|
150
|
-
codex-sidecar diagnostics --project . --preset auditor --json
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
`reap-orphan-test-daemons.mjs`は、実daemonを起動するtestが取り残したprocessを一覧します。既定は表示
|
|
154
|
-
だけで何も停めません。停めるのは`--reap`を付けた時に限り、対象はargvが指すfixtureのdirectoryが既に
|
|
155
|
-
存在しないものだけです。実行中のtestを巻き込まないための条件なので、fixtureが残ったまま死んだ実行を
|
|
156
|
-
含めたい場合だけ`--older-than-hours=<n>`で起動時刻による許可を明示します。
|
|
157
|
-
|
|
158
|
-
未初期化projectで`sensor sync`した場合は`LATTICE_SENSOR_NOT_INITIALIZED`と正規`next_action`を返します。
|
|
159
|
-
その他のsensor失敗もexit code、signal、bounded stderrをtyped detailへ残し、原因を隠しません。
|
|
160
|
-
|
|
161
|
-
Node.js 22.13以上、ただし25.xを除きます(`engines: >=22.13 <25 || >=26`。Node 25.xはV8 turboshaft
|
|
162
|
-
WASM JITの不具合で同梱sensorが壊れるため、bannerを出して起動を止めます)。境界観測は配布物に同梱したLattice sensorだけを使い、PATH上の
|
|
163
|
-
廃止済みruntimeや旧cache/dataへfallbackしません。Spotterはproject単位で生成stateの所有境界を守ります。
|
|
164
|
-
|
|
165
|
-
どのrepoでも、Latticeの導入状態はdirectoryの有無を推測せず、最初に次のtyped discoveryで判定します。
|
|
166
|
-
|
|
167
|
-
```bash
|
|
168
|
-
lattice status --json
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
`state`は`uninitialized | ready | active_run | invalid`のいずれかです。`uninitialized`は
|
|
172
|
-
正常な未初期化状態で、`next_action`が正規の初期authoring入口を返します。新規planはPhase監査と
|
|
173
|
-
ToDo schedulingを分離し、全ToDoに設計メモを持つ`lattice.plan_create_input.v4`のcanonical
|
|
174
|
-
JSON+LFを用意し、次で作成します。既存のv1〜v3は互換契約として維持され、`--schema-version`で取得できます。
|
|
175
|
-
|
|
176
|
-
```bash
|
|
177
|
-
lattice plan create --schema-version 4 --json # v4のJSON Schemaを取る(作成はしない)
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
```bash
|
|
181
|
-
lattice plan create --input .lattice/plan-create.json
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
`invalid`をMarkdown fallbackへ丸めず、`next_action`に従ってstoreを診断してください。
|
|
185
|
-
discoveryと初期transactionの不変条件は
|
|
186
|
-
[ADR 0058](docs/adr/0058-project-discovery-and-initial-authoring.md)が正です。
|
|
187
|
-
|
|
188
|
-
## 実行runを端から端まで動かす
|
|
189
|
-
|
|
190
|
-
compileしたrunを実際にdispatchするには、executor adapterを登録してからactivateします。
|
|
191
|
-
参照実装の`lattice-scripted-adapter`を配布しているため、公開CLIと配布binだけで
|
|
192
|
-
実write・receipt受理・closeまで到達できます。
|
|
193
|
-
|
|
194
|
-
```bash
|
|
195
|
-
lattice run adapter register --schema --json # 登録入力のJSON Schema
|
|
196
|
-
lattice run adapter register --input adapter.json
|
|
197
|
-
lattice run adapter list --json
|
|
198
|
-
lattice run activate --run .lattice/runs/<id>
|
|
199
|
-
lattice run status --run .lattice/runs/<id> # accepted に子が入る
|
|
200
|
-
lattice event verify --run .lattice/runs/<id>
|
|
201
|
-
lattice run close --run .lattice/runs/<id>
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
digestは手で計算しません。binary・config・capabilities・自己digestは登録時にCLIが導出します。
|
|
205
|
-
|
|
206
|
-
`plan compile`が`BOUNDARY_UNKNOWN`を返す場合は、まず`git status --short`が空かを確認してください。
|
|
207
|
-
未追跡ファイルがあるとsensor statusが`stale`になり、witnessが未解決unknownへ落ちます。
|
|
208
|
-
作業ツリーをcleanにすると同じrequestがそのまま通ります。
|
|
209
|
-
|
|
210
|
-
TODO工程storeの読取は`lattice todo status`、`compile_binding`付きTaskの投影は
|
|
211
|
-
`lattice todo bindings`、検証は`lattice todo verify`、表示は動的dashboardを使います。
|
|
212
|
-
個別HTMLの生成や再生成は不要です。topology/source reconciliationは
|
|
213
|
-
`lattice todo revise --plan <key> --input <canonical-revision.json>`、Phase付きplanは
|
|
214
|
-
`lattice todo revise-phase --plan <key> --input <canonical-phase-revision.json>`でsuccessor発行します。
|
|
215
|
-
cross-plan topologyを同時に切り替える場合は
|
|
216
|
-
`lattice todo revise-set --input <canonical-revision-set.json>`を使い、Phase revisionを含む集合は
|
|
217
|
-
`lattice.todo_revision_set.v3`で通常revisionと混在できます。
|
|
218
|
-
Phase付きv5 planでは、通常ToDoの開始順はToDo DAGだけで決まり、Phase前後関係は重監査の順序だけを
|
|
219
|
-
制御します。特定ToDoがPhase受理を本当に必要とする場合だけ`phase_accept_dependencies`で明示します。
|
|
220
|
-
`lattice todo status --json`の`dispatch_frontier`はready全件を同時dispatchする既定を示します。
|
|
221
|
-
readyが複数でも、最初の`todo start`はflagなしで通ります。並列で始めるなら
|
|
222
|
-
`--parallel-frontier`を付けられます。subsetだけを直列着手する場合は
|
|
223
|
-
`--override-reason <reason>`で理由を残せます。どちらも門ではなく記録です。
|
|
224
|
-
|
|
225
|
-
```bash
|
|
226
|
-
lattice todo start --plan <key> --task <id>
|
|
227
|
-
lattice todo start --plan <key> --task <id> --parallel-frontier
|
|
228
|
-
lattice todo start --plan <key> --task <id> --override-reason <reason>
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
記録があるのに対象工程が未宣言・失効なら`todo start`は`INDEPENDENCE_UNVERIFIED`で拒否します。
|
|
232
|
-
`independence compile`は`next_ready`がwitnessに無いとき`INDEPENDENCE_READY_UNDECLARED`で拒否します。
|
|
233
|
-
remainingのA工程は同じwitnessへ含めます。競合の同時起動は助言のままです。
|
|
234
|
-
|
|
235
|
-
`--serial-confirmed`と`--serialization-reviewed`は古い手順の互換として受理しますが、
|
|
236
|
-
再実行の条件ではありません。直列理由の文言を審査して拒否することもありません。
|
|
237
|
-
|
|
238
|
-
`lattice plan create`と`lattice todo migrate`は依存グラフから
|
|
239
|
-
`dispatch_shape`(`task_count`/`critical_path_length`/`max_frontier_width`/
|
|
240
|
-
`serialization_ratio`)を計算して結果へ載せます。直列度が閾値を超えても作成は通ります。
|
|
241
|
-
|
|
242
|
-
`--parallel-frontier`はhostへ並列dispatch方針を伝える記録です。Lattice自身がAI hostのagentを
|
|
243
|
-
起動するものではなく、実際のdispatchはhostが行います。ready全件が着手されたかは
|
|
244
|
-
`active_set`と`next_ready`で観測できます。
|
|
245
|
-
ToDo完了は軽量確認までで、所属ToDoが全てdoneになったPhaseは`gate_ready`となり、`todo phase review`後に
|
|
246
|
-
required evidenceを束縛した`todo phase accept`で重監査の判断を記録します。監査回数やPhase数を自動追加する
|
|
247
|
-
機能ではありません。
|
|
248
|
-
|
|
249
|
-
**監査の既定は「有り」です。** phaseを持たないplanも終端に重監査が要ります(予約Phase
|
|
250
|
-
`terminal-audit`を暗黙に1つ持ちます)。全taskがdoneになった状態は「完走」ではなく`gate_ready`=
|
|
251
|
-
**監査待ち**であり、工程図のlive scopeはそのplanのToDoを畳みません——完走扱いで図から消えることが
|
|
252
|
-
「閉じた」の可視表現なので、監査の記録なしにそこへ行かせません。作成時に拒否はせず、
|
|
253
|
-
`todo migrate`/`plan create`の結果と最後のdoneのadvisoryで`terminal_audit_required`を通知します。
|
|
254
|
-
**終端監査はToDoのdispatch可否へ影響しません**(Phaseは重監査の順序だけを制御し、開始順はToDo DAGが決めます)。
|
|
255
|
-
規約は[ADR 0147](docs/adr/0147-audit-is-on-by-default.md)が正です。
|
|
256
|
-
|
|
257
|
-
```bash
|
|
258
|
-
lattice todo phase status --plan <key> # phase無しplanでも暗黙Phaseを返す(implicit: true)
|
|
259
|
-
lattice todo phase review --plan <key> --phase terminal-audit --reason <text>
|
|
260
|
-
lattice todo phase accept --plan <key> --phase terminal-audit --input <file>
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
**過去の工程は監査できません。** 監査対象のコードが既に変化しているためです。そこで
|
|
264
|
-
「監査なしで閉じた」という状態を別に持ちます——`accepted`(監査を通った)へは絶対に化けず、
|
|
265
|
-
記録は永久に区別できます。工程図では畳まれるので監査待ちの札は外れます。
|
|
266
|
-
|
|
267
|
-
```bash
|
|
268
|
-
lattice todo phase close-unaudited --plan <key> --phase terminal-audit --reason <text>
|
|
269
|
-
lattice todo phase baseline --reason <text> --except <監査したいplan_key> # 一括
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
一括の入口は、現在監査待ちで一度も監査に触れていないPhaseだけを対象にします。**自動では
|
|
273
|
-
実行しません**——どれを監査し、どれを歴史として畳むかは人が決め、Latticeは宣言を受け取って
|
|
274
|
-
記録するだけです。`--except`は「最近の作業でコードも生きているので本当に監査したい」planを
|
|
275
|
-
残すための口です。規約は[ADR 0148](docs/adr/0148-history-closes-unaudited-not-audited.md)が正です。
|
|
276
|
-
|
|
277
|
-
誤ってphase無しで作ったplanへ後からPhaseを被せる場合は、`revise-phase`の
|
|
278
|
-
`state_policy: acquire_phase`でdone状態を保ったまま獲得できます(未割当→割当の向きだけを許し、
|
|
279
|
-
既にphaseを持つtaskの付け替えは拒否します)。
|
|
280
|
-
|
|
281
|
-
契約のJSON Schemaは各入口から取れます。入力が合わないときは、違反フィールドのpathが
|
|
282
|
-
error detailの`violation_path`へ載ります(配列のソート違反は`/tasks/1`のようにindexまで名指しします)。
|
|
283
|
-
|
|
284
|
-
```bash
|
|
285
|
-
lattice plan create --schema --json # 既定は最新v4
|
|
286
|
-
lattice todo revise-phase --schema --json
|
|
287
|
-
lattice plan show <plan_key> --json # planのtask・依存・phase・状態を1コマンドで読む
|
|
288
|
-
```Phase状態は
|
|
289
|
-
`lattice todo phase status --plan <key>`、閲覧中に進捗が更新される工程表は
|
|
290
|
-
`lattice todo gantt serve --port 0`で確認できます。live viewerはloopback-only、read-onlyで、
|
|
291
|
-
`/projects/<project_id>/`というproject固有URLを返します。別projectからそれぞれ起動すれば、独立port・独立SSE経路で同時表示できます。
|
|
292
|
-
session開始時のtyped discoveryで使う`lattice status --json`と、actor環境変数を持つ通常のTODO操作は
|
|
293
|
-
active projectを自動登録し、一つのloopback dashboard daemonを再利用します。
|
|
294
|
-
`/projects/`の一覧からproject固有の工程図を開け、各projectのSSE更新は互いに分離されます。
|
|
295
|
-
dashboardはmanifestのfile identityが変わらない間のstable store readを再利用します。
|
|
296
|
-
巨大工程図のrender中にhealth応答が遅れても、生存中dashboardを新daemonで置き換えず
|
|
297
|
-
`DASHBOARD_DAEMON_UNRESPONSIVE`としてtyped拒否します。
|
|
298
|
-
最近のsession activityが1週間を過ぎても、Lattice storeの`active_set`が非空なproject、
|
|
299
|
-
または監査待ちPhaseがあるprojectは一覧へ残ります。
|
|
300
|
-
長時間の外部処理中にCLI呼出しが途切れても進行中projectを休眠扱いしません。
|
|
301
|
-
LANや外部reverse proxyから閲覧するoptional bridgeは既定で無効です。明示したIPにだけbindする初回設定、
|
|
302
|
-
再設定、停止方法は[bridge setup](docs/bridge-setup.md)を参照してください。reverse proxy hostへsshで
|
|
303
|
-
到達できる場合は、LANへbindせずloopbackだけを逆トンネルで公開する構成も選べます。
|
|
304
|
-
工程図の既定表示は、後続に作業中・未着手が残っていない完了工程を図から除きます。まとめnodeも置かないため、
|
|
305
|
-
完走したplanは図の場所を取りません。除いた工程は凡例の件数、右ペインの「全工程」一覧、各工程の詳細から
|
|
306
|
-
辿れ、詳細の前提・後続は除外前の依存関係を示します。総数・進捗・最長依存鎖は除外前の全工程で数えます。
|
|
307
|
-
凡例の件数バッジを押すと全工程を描いた図へ切り替わります。表示規約は
|
|
308
|
-
[ADR 0066](docs/adr/0066-gantt-live-scope-drops-finished-work.md)が正です。
|
|
309
|
-
|
|
310
|
-
右ペインは概要・選択工程・全工程の3面で、いずれもToDo storeを表示します(元plan Markdown本文は
|
|
311
|
-
再表示しません。元文書へは各工程の詳細が持つ行対応から辿ります)。全工程一覧は動いているplanを
|
|
312
|
-
最終活動の新しい順で上に、全工程が図から外れた完走planを古い順で下にまとめ、plan内は登録順です。
|
|
313
|
-
決着済みPhaseと図から外した工程は既定で畳み、開けば読めます。規約は
|
|
314
|
-
[ADR 0067](docs/adr/0067-right-pane-shows-the-store-and-orders-by-activity.md)が正です。
|
|
315
|
-
|
|
316
|
-
`lattice todo gantt`と`lattice todo gantt status`による静的工程表は廃止済みで、呼ぶと
|
|
317
|
-
`STATIC_GANTT_RETIRED`が動的dashboardを案内します。
|
|
318
|
-
dashboard daemonは起動時に読み込んだ版数をhealthで名乗り、installされた版と食い違えば`lattice status`の
|
|
319
|
-
たびに新版daemonへ置き換わります。publishしただけで配信面が古いまま残ることはありません。
|
|
320
|
-
入れ替えは新daemonが登録済み全projectのstoreを読み終えるまで待つため、`lattice status`の応答が
|
|
321
|
-
その間伸びます(実測: 8 project登録で約50秒台)。待ち時間は固定秒数ではなく、spawnした子が生きている
|
|
322
|
-
間だけ待ち、子が死ねば即座に`DASHBOARD_DAEMON_UNAVAILABLE`を返します。既定120秒の上限は、応答を
|
|
323
|
-
返さない子に対するbackstopであって正常な起動時間の見積りではありません。
|
|
324
|
-
daemonの生死はdescriptor 1枚では持ちません。daemonは自分のpidの記録を書き、起動のたびに死んだ記録を
|
|
325
|
-
掃除して、descriptorから外れた生存daemonを再認証のうえ停止します。入れ替えの途中でCLI側が落ちても、
|
|
326
|
-
旧daemonが観測されないまま生き残ることはありません。descriptorだけを失った場合は2本目を建てず、
|
|
327
|
-
配信を続けているdaemonを引き取ります。signalを送るのはその場で再認証を通った相手だけで、応答しない
|
|
328
|
-
pidへは送りません(pid再利用で無関係のprocessを止めうるためです)。規約は
|
|
329
|
-
[ADR 0157](docs/adr/0157-dashboard-daemons-are-discoverable-by-record.md)が正です。
|
|
330
|
-
状態を書き込む`start / block / unblock / done / evidence promote / reopen / note / independence mode /
|
|
331
|
-
revise / revise-phase / revise-set / phase review|accept|reject|reopen|close-unaudited|baseline /
|
|
332
|
-
dashboard adopt`では、監査actorとして次の3環境変数を渡せます。未設定ならhost/`session`/USERから
|
|
333
|
-
defaultします。渡した値がidentifierとして不正なら`ACTOR_UNRESOLVED`です。
|
|
334
|
-
|
|
335
|
-
```bash
|
|
336
|
-
export LATTICE_TODO_ACTOR_HOST=<host-id>
|
|
337
|
-
export LATTICE_TODO_ACTOR_SESSION=<session-id>
|
|
338
|
-
export LATTICE_TODO_ACTOR_AGENT=<agent-id>
|
|
339
|
-
```
|
|
340
|
-
|
|
341
|
-
`todo done`は`--evidence`にdescriptor JSONでも証拠本文でも渡せます。`--message`なら本文から
|
|
342
|
-
blobを書きます。flagの順は問いません。空の設計メモは拒否します。無策なら`NO_PLAN`と書いてください。
|
|
343
|
-
|
|
344
|
-
authoring入口と閉じる口の契約は
|
|
345
|
-
[ADR 0181](docs/adr/0181-authoring-entry-accepts-drafts.md)を参照してください。
|
|
346
|
-
|
|
347
|
-
## 特許
|
|
348
|
-
|
|
349
|
-
本repositoryの設計は日本国特許出願の対象です。
|
|
350
|
-
|
|
351
|
-
| | |
|
|
352
|
-
|---|---|
|
|
353
|
-
| 出願番号 | 特願2026-178950 |
|
|
354
|
-
| 出願日 | 2026-07-27 |
|
|
355
|
-
| 発明の名称 | 情報処理装置、ソフトウェア開発制御方法及びプログラム |
|
|
356
|
-
| 請求項 | 12項 |
|
|
357
|
-
|
|
358
|
-
非商用利用は下記Licenseの範囲で許諾します。
|
|
359
|
-
**商用利用には別途の商用ライセンスが必要です。**
|
|
360
|
-
|
|
361
|
-
## License
|
|
362
|
-
|
|
363
|
-
**[PolyForm Noncommercial License 1.0.0](LICENSE)** — 非商用利用は無償です。
|
|
364
|
-
|
|
365
|
-
- **無償:** 個人のproject、学習・研究、趣味やアマチュアの制作、慈善団体、教育機関、
|
|
366
|
-
公的研究機関、政府機関
|
|
367
|
-
- **許諾が必要:** 商用利用。Lattice自体を再配布するかどうかに関わらず、企業の業務や製品の
|
|
368
|
-
中で使う場合を含みます
|
|
369
|
-
|
|
370
|
-
**商用利用には**、別途の商用ライセンスが必要です。
|
|
371
|
-
問い合わせは[kitepon@gmail.com](mailto:kitepon@gmail.com)へのメールで受け付けます。
|
|
372
|
-
許諾するかどうか、どのような条件にするかは個別に判断します。
|
|
373
|
-
|
|
374
|
-
同梱の構造sensor([`sensor/`](sensor/))は本repositoryへ吸収した第三者成果物で、
|
|
375
|
-
**MIT License**のままです。upstreamの出自と帰属表示は[`sensor/NOTICE`](sensor/NOTICE)、
|
|
376
|
-
license本文は[`sensor/LICENSE`](sensor/LICENSE)が持ちます。上記の条件はこれを変更しません。
|
|
377
|
-
|
|
378
|
-
© 2026 quolu (kitepon-rgb)
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src=".github/og.png" alt="Lattice — 閉ざされて見えた山岳地形から複数の進行経路が現れる" width="100%">
|
|
3
|
+
<br>
|
|
4
|
+
<sub><em>この画像は、閉ざされているように見えた場所から複数の進行経路が現れ、自律した実行者たちが協調して動き出す瞬間を表しています。</em></sub>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
# Lattice
|
|
8
|
+
|
|
9
|
+
[kitepon.dev](https://kitepon.dev/)を運営する[クオ(@QLyun35332)](https://x.com/QLyun35332)が開発・メンテナンスしています。
|
|
10
|
+
|
|
11
|
+
[](https://www.npmjs.com/package/@quolu/lattice)
|
|
12
|
+
[](https://github.com/kitepon/Lattice/actions/workflows/ci.yml)
|
|
13
|
+
[](LICENSE)
|
|
14
|
+
[](https://nodejs.org/)
|
|
15
|
+
[](#特許)
|
|
16
|
+
|
|
17
|
+
[English](README.md) · **日本語**
|
|
18
|
+
|
|
19
|
+
> **見かけだけの競合で、作業を直列化しない。**
|
|
20
|
+
> Latticeはmulti-agent開発のためのschedulability compilerです。codebaseの実際の境界を観測して
|
|
21
|
+
> どのtaskが並列に走れるかを裏付け、本当に衝突している場合は**その境界をrefactorして
|
|
22
|
+
> planを再コンパイルし、並列に走れる形へ変えます**。
|
|
23
|
+
|
|
24
|
+
## なぜ要るのか
|
|
25
|
+
|
|
26
|
+
3つのagentに3つのtaskを渡すと、たいてい次のどちらかで失敗します。
|
|
27
|
+
|
|
28
|
+
- **直列にしすぎる。** 「どちらも`renderer.ts`を触るから順番に」——実際には*別々のsymbol*を
|
|
29
|
+
触っていて、同時に走れたかもしれない。
|
|
30
|
+
- **直列にしなさすぎる。** 依存を誰も宣言しなかったので並列で走らせ、両方が書いた後で衝突に気づく。
|
|
31
|
+
|
|
32
|
+
どちらも原因は同じで、**誰も境界を実測していない**ことです。task listの依存線は意図の主張であって、
|
|
33
|
+
codeについての証拠ではありません。
|
|
34
|
+
|
|
35
|
+
Latticeはここを違う手で塞ぎます。競合を**検出する**だけでなく**取り除く**。2つのtaskが1つのfileを
|
|
36
|
+
奪い合っているなら、切り方を導出し、隔離worktreeで適用し、五条件で検証し、変換後のsourceに対して
|
|
37
|
+
planを再コンパイルします。共有面が共有でなくなるので、競合辺そのものが消えます。
|
|
38
|
+
|
|
39
|
+
### 実例(このrepo自身)
|
|
40
|
+
|
|
41
|
+
2つの工程がどちらも`src/seam-commit.mjs`を変更する必要がありました。Latticeは宣言をcompileして
|
|
42
|
+
`conflict_count: 1`・`severability: code_seam`と判定し、切り方を提案し、隔離worktreeで適用。
|
|
43
|
+
五条件をすべて満たしたので、fileは工程ごとの所有面+共有面+残余面へ分割されました。
|
|
44
|
+
再コンパイルは`conflict_count: 0`を返し、両工程は同じparallel groupに入りました。
|
|
45
|
+
|
|
46
|
+
人が手で切ったのではありません。**工程を並列化するために製品が切りました。**
|
|
47
|
+
|
|
48
|
+
### 設計メモと作業記憶はToDoと一緒に渡る
|
|
49
|
+
|
|
50
|
+
新しいToDoは、実装方針・調査結果・採用/棄却理由・注意・未解決事項をMarkdownで書いた
|
|
51
|
+
`design_memo`を必ず持ちます。空欄やファイル参照だけでは登録できません。本当に何も考えていない場合だけ、
|
|
52
|
+
正確なsentinel `NO_PLAN`を本文にします。Latticeはauthoring時に次の問いを返し、空欄のまま通しません。
|
|
53
|
+
|
|
54
|
+
> あなたがこのToDoに対して、何も考えていないならば、設計メモに `NO_PLAN` と書いてください
|
|
55
|
+
|
|
56
|
+
通常の`lattice todo show`と、成功するすべての`lattice todo start`は、この初期設計メモを自動で返します。
|
|
57
|
+
作業開始後に増えた方針、棄却案、調査結果、注意、未解決事項は、別のappend-only note chainへ追記できます。
|
|
58
|
+
同じ通常読取は元version/元task、訂正状態、note chain head、overflow、全履歴コマンドを含む最新の
|
|
59
|
+
bounded `note_context`も自動で返します。次のAIが別のnote読取コマンドを知っている必要はありません。
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
lattice todo note --plan <key> --task <id> --message "既存parserを使い、fallbackは追加しない"
|
|
63
|
+
lattice todo show --plan <key> --task <id> --json
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
動的工程表は、選択したToDoの右ペインへ初期設計メモと追記noteの本文を表示します。あわせて前提工程・
|
|
67
|
+
後続工程それぞれの状態(未着手/作業中/完了/ブロック中)と、その工程の並列可否を示します。
|
|
68
|
+
note本文はHTMLを描くすべての面へ載ります。project別HTMLの生成や再生成は不要です。
|
|
69
|
+
|
|
70
|
+
### ToDoのdataflowを実装前と実装後で照合する
|
|
71
|
+
|
|
72
|
+
codeを変更するplanだけ、plan定義後に論理dataflow検査を明示的に有効化できます。出版や運用など
|
|
73
|
+
code-dataflowを持たないplanへは適用しません。入力schemaはCLIから取得でき、planned sourceを保存しても
|
|
74
|
+
まだ有効化されません。clean worktreeでのauthoritative compileが`consistent`になった時だけ、
|
|
75
|
+
そのplan version専用のimmutable bindingが発行されます。
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
lattice todo structure --schema --json
|
|
79
|
+
lattice todo structure input --plan <key> --input structure.json --dry-run --json
|
|
80
|
+
lattice todo structure input --plan <key> --input structure.json
|
|
81
|
+
lattice todo structure compile --plan <key> --input .lattice/todo/structure/<key>.json
|
|
82
|
+
lattice todo structure --plan <key> --json
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
verdictは`consistent | inconsistent | unknown`の三値です。`unknown`を問題なしへ丸めず、findingはtask、
|
|
86
|
+
data port、code anchor、commitと次の操作を返します。plannedは不変で、実装後の形はtaskごとの
|
|
87
|
+
append-only realizationとして記録します。有効化済みplanのgraph taskはfresh realizationなしに
|
|
88
|
+
`todo done`できません。全task完了後は最終HEADで再compileし、freshかつconsistentなfinalizationが
|
|
89
|
+
できてからterminalを閉じます。
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
lattice todo structure realize --plan <key> --task <id> --input realization.json
|
|
93
|
+
lattice todo done --plan <key> --task <id> --evidence evidence.json
|
|
94
|
+
lattice todo structure finalize --plan <key> --json
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
動的dashboardの「構造検査」は工程依存図とは別の面です。task/data/code/external/commit provenance、
|
|
98
|
+
planned/realized/effective、findingと鮮度を表示します。工程依存線へdataflow edgeを混ぜません。
|
|
99
|
+
通常読取とdashboardは保存artifactだけを読み、暗黙にsensorを再実行しません。構造未適用planの
|
|
100
|
+
lifecycleとdashboardには、このgateも構造panelも追加されません。
|
|
101
|
+
|
|
102
|
+
### 変換の受入五条件
|
|
103
|
+
|
|
104
|
+
**5つすべて**を満たしたときだけ採用します。1つでも欠ければ棄却です。
|
|
105
|
+
|
|
106
|
+
| 条件 | 意味 |
|
|
107
|
+
|---|---|
|
|
108
|
+
| `behavior_equivalent` | 原pathの公開export面が保たれ、移した先が残余面のsymbolへ束縛なしで言及していない(切断参照の網) |
|
|
109
|
+
| `focused_tests_passed` | 影響testが変換後のsourceで実際に通る |
|
|
110
|
+
| `sensor_fresh` | 構造索引を取り直し、新しい面を収載している |
|
|
111
|
+
| `overlap_reduced` | 対象の競合が消え、**かつ**plan全体の競合対が増えていない |
|
|
112
|
+
| `parallelism_improved` | 実行段階数が減っている |
|
|
113
|
+
|
|
114
|
+
### 実行段階の二段構え
|
|
115
|
+
|
|
116
|
+
計画時に完全な分断は原理的に得られません(動的dispatch・実行時に決まるpath・外部状態)。
|
|
117
|
+
そのため実行中は宣言でなく**実際に変更された資源**を観測し、宣言scope外への書き込みや
|
|
118
|
+
進行中の他工程のscopeとの重なりを実行時競合として挙げます。処置は「一方をholdして他方を
|
|
119
|
+
確定→再開」か「双方停止→seam変換→双方再開」の二択で、どちらも実storeに対する
|
|
120
|
+
integration testで一気通貫に検証済みです。切断の重さは`lattice run seam profile`
|
|
121
|
+
(計画時は`todo seam-profile`)が数えられる事実だけで投影し、機械変換の可否は「確実の門」が
|
|
122
|
+
typed理由つきで分類します——宣言を直せば通るのか、操作AIへ渡すべきなのかまで返します。
|
|
123
|
+
|
|
124
|
+
## 所有境界
|
|
125
|
+
|
|
126
|
+
本repoはplan/ToDo/run store、Lattice sensor、schema、migration、release、diagnosticsを
|
|
127
|
+
所有します。[dotagents](https://github.com/kitepon-rgb/dotagents)はkitepon.devを支える内部
|
|
128
|
+
toolchainであり、製品横断の工程利用・導入・host統合を所有します。
|
|
129
|
+
廃止済みの前身sensorは独立製品として配線せず、Lattice sensorだけを現役面とします。
|
|
130
|
+
MarkItDownは別区分の第三者CLIです。
|
|
131
|
+
|
|
132
|
+
現在の工程状態と完了証拠の正本は、このrepoのLattice storeです。文書の役割と現行導線は
|
|
133
|
+
[docs/README.md](docs/README.md)、製品思想は[PLAN.md](PLAN.md)、公開contractは
|
|
134
|
+
[docs/00_product-contract.md](docs/00_product-contract.md)を参照してください。
|
|
135
|
+
|
|
136
|
+
CLIの全体像は`lattice --help`、各公開namespaceの正規構文は
|
|
137
|
+
`lattice <plan|run|event|todo|sensor|factory-diagnostics|runtime-errors|bridge|hooks> --help`で確認できます。
|
|
138
|
+
個別操作は`lattice <namespace> <subcommand> --help`または`lattice help <namespace> <subcommand>`で
|
|
139
|
+
正規optionをstore非依存に確認できます。
|
|
140
|
+
|
|
141
|
+
## 開発
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
npm test
|
|
145
|
+
npm run check
|
|
146
|
+
npm run ci
|
|
147
|
+
node scripts/reap-orphan-test-daemons.mjs
|
|
148
|
+
lattice sensor sync . --json
|
|
149
|
+
spotter doctor
|
|
150
|
+
codex-sidecar diagnostics --project . --preset auditor --json
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
`reap-orphan-test-daemons.mjs`は、実daemonを起動するtestが取り残したprocessを一覧します。既定は表示
|
|
154
|
+
だけで何も停めません。停めるのは`--reap`を付けた時に限り、対象はargvが指すfixtureのdirectoryが既に
|
|
155
|
+
存在しないものだけです。実行中のtestを巻き込まないための条件なので、fixtureが残ったまま死んだ実行を
|
|
156
|
+
含めたい場合だけ`--older-than-hours=<n>`で起動時刻による許可を明示します。
|
|
157
|
+
|
|
158
|
+
未初期化projectで`sensor sync`した場合は`LATTICE_SENSOR_NOT_INITIALIZED`と正規`next_action`を返します。
|
|
159
|
+
その他のsensor失敗もexit code、signal、bounded stderrをtyped detailへ残し、原因を隠しません。
|
|
160
|
+
|
|
161
|
+
Node.js 22.13以上、ただし25.xを除きます(`engines: >=22.13 <25 || >=26`。Node 25.xはV8 turboshaft
|
|
162
|
+
WASM JITの不具合で同梱sensorが壊れるため、bannerを出して起動を止めます)。境界観測は配布物に同梱したLattice sensorだけを使い、PATH上の
|
|
163
|
+
廃止済みruntimeや旧cache/dataへfallbackしません。Spotterはproject単位で生成stateの所有境界を守ります。
|
|
164
|
+
|
|
165
|
+
どのrepoでも、Latticeの導入状態はdirectoryの有無を推測せず、最初に次のtyped discoveryで判定します。
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
lattice status --json
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
`state`は`uninitialized | ready | active_run | invalid`のいずれかです。`uninitialized`は
|
|
172
|
+
正常な未初期化状態で、`next_action`が正規の初期authoring入口を返します。新規planはPhase監査と
|
|
173
|
+
ToDo schedulingを分離し、全ToDoに設計メモを持つ`lattice.plan_create_input.v4`のcanonical
|
|
174
|
+
JSON+LFを用意し、次で作成します。既存のv1〜v3は互換契約として維持され、`--schema-version`で取得できます。
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
lattice plan create --schema-version 4 --json # v4のJSON Schemaを取る(作成はしない)
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
lattice plan create --input .lattice/plan-create.json
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
`invalid`をMarkdown fallbackへ丸めず、`next_action`に従ってstoreを診断してください。
|
|
185
|
+
discoveryと初期transactionの不変条件は
|
|
186
|
+
[ADR 0058](docs/adr/0058-project-discovery-and-initial-authoring.md)が正です。
|
|
187
|
+
|
|
188
|
+
## 実行runを端から端まで動かす
|
|
189
|
+
|
|
190
|
+
compileしたrunを実際にdispatchするには、executor adapterを登録してからactivateします。
|
|
191
|
+
参照実装の`lattice-scripted-adapter`を配布しているため、公開CLIと配布binだけで
|
|
192
|
+
実write・receipt受理・closeまで到達できます。
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
lattice run adapter register --schema --json # 登録入力のJSON Schema
|
|
196
|
+
lattice run adapter register --input adapter.json
|
|
197
|
+
lattice run adapter list --json
|
|
198
|
+
lattice run activate --run .lattice/runs/<id>
|
|
199
|
+
lattice run status --run .lattice/runs/<id> # accepted に子が入る
|
|
200
|
+
lattice event verify --run .lattice/runs/<id>
|
|
201
|
+
lattice run close --run .lattice/runs/<id>
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
digestは手で計算しません。binary・config・capabilities・自己digestは登録時にCLIが導出します。
|
|
205
|
+
|
|
206
|
+
`plan compile`が`BOUNDARY_UNKNOWN`を返す場合は、まず`git status --short`が空かを確認してください。
|
|
207
|
+
未追跡ファイルがあるとsensor statusが`stale`になり、witnessが未解決unknownへ落ちます。
|
|
208
|
+
作業ツリーをcleanにすると同じrequestがそのまま通ります。
|
|
209
|
+
|
|
210
|
+
TODO工程storeの読取は`lattice todo status`、`compile_binding`付きTaskの投影は
|
|
211
|
+
`lattice todo bindings`、検証は`lattice todo verify`、表示は動的dashboardを使います。
|
|
212
|
+
個別HTMLの生成や再生成は不要です。topology/source reconciliationは
|
|
213
|
+
`lattice todo revise --plan <key> --input <canonical-revision.json>`、Phase付きplanは
|
|
214
|
+
`lattice todo revise-phase --plan <key> --input <canonical-phase-revision.json>`でsuccessor発行します。
|
|
215
|
+
cross-plan topologyを同時に切り替える場合は
|
|
216
|
+
`lattice todo revise-set --input <canonical-revision-set.json>`を使い、Phase revisionを含む集合は
|
|
217
|
+
`lattice.todo_revision_set.v3`で通常revisionと混在できます。
|
|
218
|
+
Phase付きv5 planでは、通常ToDoの開始順はToDo DAGだけで決まり、Phase前後関係は重監査の順序だけを
|
|
219
|
+
制御します。特定ToDoがPhase受理を本当に必要とする場合だけ`phase_accept_dependencies`で明示します。
|
|
220
|
+
`lattice todo status --json`の`dispatch_frontier`はready全件を同時dispatchする既定を示します。
|
|
221
|
+
readyが複数でも、最初の`todo start`はflagなしで通ります。並列で始めるなら
|
|
222
|
+
`--parallel-frontier`を付けられます。subsetだけを直列着手する場合は
|
|
223
|
+
`--override-reason <reason>`で理由を残せます。どちらも門ではなく記録です。
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
lattice todo start --plan <key> --task <id>
|
|
227
|
+
lattice todo start --plan <key> --task <id> --parallel-frontier
|
|
228
|
+
lattice todo start --plan <key> --task <id> --override-reason <reason>
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
記録があるのに対象工程が未宣言・失効なら`todo start`は`INDEPENDENCE_UNVERIFIED`で拒否します。
|
|
232
|
+
`independence compile`は`next_ready`がwitnessに無いとき`INDEPENDENCE_READY_UNDECLARED`で拒否します。
|
|
233
|
+
remainingのA工程は同じwitnessへ含めます。競合の同時起動は助言のままです。
|
|
234
|
+
|
|
235
|
+
`--serial-confirmed`と`--serialization-reviewed`は古い手順の互換として受理しますが、
|
|
236
|
+
再実行の条件ではありません。直列理由の文言を審査して拒否することもありません。
|
|
237
|
+
|
|
238
|
+
`lattice plan create`と`lattice todo migrate`は依存グラフから
|
|
239
|
+
`dispatch_shape`(`task_count`/`critical_path_length`/`max_frontier_width`/
|
|
240
|
+
`serialization_ratio`)を計算して結果へ載せます。直列度が閾値を超えても作成は通ります。
|
|
241
|
+
|
|
242
|
+
`--parallel-frontier`はhostへ並列dispatch方針を伝える記録です。Lattice自身がAI hostのagentを
|
|
243
|
+
起動するものではなく、実際のdispatchはhostが行います。ready全件が着手されたかは
|
|
244
|
+
`active_set`と`next_ready`で観測できます。
|
|
245
|
+
ToDo完了は軽量確認までで、所属ToDoが全てdoneになったPhaseは`gate_ready`となり、`todo phase review`後に
|
|
246
|
+
required evidenceを束縛した`todo phase accept`で重監査の判断を記録します。監査回数やPhase数を自動追加する
|
|
247
|
+
機能ではありません。
|
|
248
|
+
|
|
249
|
+
**監査の既定は「有り」です。** phaseを持たないplanも終端に重監査が要ります(予約Phase
|
|
250
|
+
`terminal-audit`を暗黙に1つ持ちます)。全taskがdoneになった状態は「完走」ではなく`gate_ready`=
|
|
251
|
+
**監査待ち**であり、工程図のlive scopeはそのplanのToDoを畳みません——完走扱いで図から消えることが
|
|
252
|
+
「閉じた」の可視表現なので、監査の記録なしにそこへ行かせません。作成時に拒否はせず、
|
|
253
|
+
`todo migrate`/`plan create`の結果と最後のdoneのadvisoryで`terminal_audit_required`を通知します。
|
|
254
|
+
**終端監査はToDoのdispatch可否へ影響しません**(Phaseは重監査の順序だけを制御し、開始順はToDo DAGが決めます)。
|
|
255
|
+
規約は[ADR 0147](docs/adr/0147-audit-is-on-by-default.md)が正です。
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
lattice todo phase status --plan <key> # phase無しplanでも暗黙Phaseを返す(implicit: true)
|
|
259
|
+
lattice todo phase review --plan <key> --phase terminal-audit --reason <text>
|
|
260
|
+
lattice todo phase accept --plan <key> --phase terminal-audit --input <file>
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
**過去の工程は監査できません。** 監査対象のコードが既に変化しているためです。そこで
|
|
264
|
+
「監査なしで閉じた」という状態を別に持ちます——`accepted`(監査を通った)へは絶対に化けず、
|
|
265
|
+
記録は永久に区別できます。工程図では畳まれるので監査待ちの札は外れます。
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
lattice todo phase close-unaudited --plan <key> --phase terminal-audit --reason <text>
|
|
269
|
+
lattice todo phase baseline --reason <text> --except <監査したいplan_key> # 一括
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
一括の入口は、現在監査待ちで一度も監査に触れていないPhaseだけを対象にします。**自動では
|
|
273
|
+
実行しません**——どれを監査し、どれを歴史として畳むかは人が決め、Latticeは宣言を受け取って
|
|
274
|
+
記録するだけです。`--except`は「最近の作業でコードも生きているので本当に監査したい」planを
|
|
275
|
+
残すための口です。規約は[ADR 0148](docs/adr/0148-history-closes-unaudited-not-audited.md)が正です。
|
|
276
|
+
|
|
277
|
+
誤ってphase無しで作ったplanへ後からPhaseを被せる場合は、`revise-phase`の
|
|
278
|
+
`state_policy: acquire_phase`でdone状態を保ったまま獲得できます(未割当→割当の向きだけを許し、
|
|
279
|
+
既にphaseを持つtaskの付け替えは拒否します)。
|
|
280
|
+
|
|
281
|
+
契約のJSON Schemaは各入口から取れます。入力が合わないときは、違反フィールドのpathが
|
|
282
|
+
error detailの`violation_path`へ載ります(配列のソート違反は`/tasks/1`のようにindexまで名指しします)。
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
lattice plan create --schema --json # 既定は最新v4
|
|
286
|
+
lattice todo revise-phase --schema --json
|
|
287
|
+
lattice plan show <plan_key> --json # planのtask・依存・phase・状態を1コマンドで読む
|
|
288
|
+
```Phase状態は
|
|
289
|
+
`lattice todo phase status --plan <key>`、閲覧中に進捗が更新される工程表は
|
|
290
|
+
`lattice todo gantt serve --port 0`で確認できます。live viewerはloopback-only、read-onlyで、
|
|
291
|
+
`/projects/<project_id>/`というproject固有URLを返します。別projectからそれぞれ起動すれば、独立port・独立SSE経路で同時表示できます。
|
|
292
|
+
session開始時のtyped discoveryで使う`lattice status --json`と、actor環境変数を持つ通常のTODO操作は
|
|
293
|
+
active projectを自動登録し、一つのloopback dashboard daemonを再利用します。
|
|
294
|
+
`/projects/`の一覧からproject固有の工程図を開け、各projectのSSE更新は互いに分離されます。
|
|
295
|
+
dashboardはmanifestのfile identityが変わらない間のstable store readを再利用します。
|
|
296
|
+
巨大工程図のrender中にhealth応答が遅れても、生存中dashboardを新daemonで置き換えず
|
|
297
|
+
`DASHBOARD_DAEMON_UNRESPONSIVE`としてtyped拒否します。
|
|
298
|
+
最近のsession activityが1週間を過ぎても、Lattice storeの`active_set`が非空なproject、
|
|
299
|
+
または監査待ちPhaseがあるprojectは一覧へ残ります。
|
|
300
|
+
長時間の外部処理中にCLI呼出しが途切れても進行中projectを休眠扱いしません。
|
|
301
|
+
LANや外部reverse proxyから閲覧するoptional bridgeは既定で無効です。明示したIPにだけbindする初回設定、
|
|
302
|
+
再設定、停止方法は[bridge setup](docs/bridge-setup.md)を参照してください。reverse proxy hostへsshで
|
|
303
|
+
到達できる場合は、LANへbindせずloopbackだけを逆トンネルで公開する構成も選べます。
|
|
304
|
+
工程図の既定表示は、後続に作業中・未着手が残っていない完了工程を図から除きます。まとめnodeも置かないため、
|
|
305
|
+
完走したplanは図の場所を取りません。除いた工程は凡例の件数、右ペインの「全工程」一覧、各工程の詳細から
|
|
306
|
+
辿れ、詳細の前提・後続は除外前の依存関係を示します。総数・進捗・最長依存鎖は除外前の全工程で数えます。
|
|
307
|
+
凡例の件数バッジを押すと全工程を描いた図へ切り替わります。表示規約は
|
|
308
|
+
[ADR 0066](docs/adr/0066-gantt-live-scope-drops-finished-work.md)が正です。
|
|
309
|
+
|
|
310
|
+
右ペインは概要・選択工程・全工程の3面で、いずれもToDo storeを表示します(元plan Markdown本文は
|
|
311
|
+
再表示しません。元文書へは各工程の詳細が持つ行対応から辿ります)。全工程一覧は動いているplanを
|
|
312
|
+
最終活動の新しい順で上に、全工程が図から外れた完走planを古い順で下にまとめ、plan内は登録順です。
|
|
313
|
+
決着済みPhaseと図から外した工程は既定で畳み、開けば読めます。規約は
|
|
314
|
+
[ADR 0067](docs/adr/0067-right-pane-shows-the-store-and-orders-by-activity.md)が正です。
|
|
315
|
+
|
|
316
|
+
`lattice todo gantt`と`lattice todo gantt status`による静的工程表は廃止済みで、呼ぶと
|
|
317
|
+
`STATIC_GANTT_RETIRED`が動的dashboardを案内します。
|
|
318
|
+
dashboard daemonは起動時に読み込んだ版数をhealthで名乗り、installされた版と食い違えば`lattice status`の
|
|
319
|
+
たびに新版daemonへ置き換わります。publishしただけで配信面が古いまま残ることはありません。
|
|
320
|
+
入れ替えは新daemonが登録済み全projectのstoreを読み終えるまで待つため、`lattice status`の応答が
|
|
321
|
+
その間伸びます(実測: 8 project登録で約50秒台)。待ち時間は固定秒数ではなく、spawnした子が生きている
|
|
322
|
+
間だけ待ち、子が死ねば即座に`DASHBOARD_DAEMON_UNAVAILABLE`を返します。既定120秒の上限は、応答を
|
|
323
|
+
返さない子に対するbackstopであって正常な起動時間の見積りではありません。
|
|
324
|
+
daemonの生死はdescriptor 1枚では持ちません。daemonは自分のpidの記録を書き、起動のたびに死んだ記録を
|
|
325
|
+
掃除して、descriptorから外れた生存daemonを再認証のうえ停止します。入れ替えの途中でCLI側が落ちても、
|
|
326
|
+
旧daemonが観測されないまま生き残ることはありません。descriptorだけを失った場合は2本目を建てず、
|
|
327
|
+
配信を続けているdaemonを引き取ります。signalを送るのはその場で再認証を通った相手だけで、応答しない
|
|
328
|
+
pidへは送りません(pid再利用で無関係のprocessを止めうるためです)。規約は
|
|
329
|
+
[ADR 0157](docs/adr/0157-dashboard-daemons-are-discoverable-by-record.md)が正です。
|
|
330
|
+
状態を書き込む`start / block / unblock / done / evidence promote / reopen / note / independence mode /
|
|
331
|
+
revise / revise-phase / revise-set / phase review|accept|reject|reopen|close-unaudited|baseline /
|
|
332
|
+
dashboard adopt`では、監査actorとして次の3環境変数を渡せます。未設定ならhost/`session`/USERから
|
|
333
|
+
defaultします。渡した値がidentifierとして不正なら`ACTOR_UNRESOLVED`です。
|
|
334
|
+
|
|
335
|
+
```bash
|
|
336
|
+
export LATTICE_TODO_ACTOR_HOST=<host-id>
|
|
337
|
+
export LATTICE_TODO_ACTOR_SESSION=<session-id>
|
|
338
|
+
export LATTICE_TODO_ACTOR_AGENT=<agent-id>
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
`todo done`は`--evidence`にdescriptor JSONでも証拠本文でも渡せます。`--message`なら本文から
|
|
342
|
+
blobを書きます。flagの順は問いません。空の設計メモは拒否します。無策なら`NO_PLAN`と書いてください。
|
|
343
|
+
|
|
344
|
+
authoring入口と閉じる口の契約は
|
|
345
|
+
[ADR 0181](docs/adr/0181-authoring-entry-accepts-drafts.md)を参照してください。
|
|
346
|
+
|
|
347
|
+
## 特許
|
|
348
|
+
|
|
349
|
+
本repositoryの設計は日本国特許出願の対象です。
|
|
350
|
+
|
|
351
|
+
| | |
|
|
352
|
+
|---|---|
|
|
353
|
+
| 出願番号 | 特願2026-178950 |
|
|
354
|
+
| 出願日 | 2026-07-27 |
|
|
355
|
+
| 発明の名称 | 情報処理装置、ソフトウェア開発制御方法及びプログラム |
|
|
356
|
+
| 請求項 | 12項 |
|
|
357
|
+
|
|
358
|
+
非商用利用は下記Licenseの範囲で許諾します。
|
|
359
|
+
**商用利用には別途の商用ライセンスが必要です。**
|
|
360
|
+
|
|
361
|
+
## License
|
|
362
|
+
|
|
363
|
+
**[PolyForm Noncommercial License 1.0.0](LICENSE)** — 非商用利用は無償です。
|
|
364
|
+
|
|
365
|
+
- **無償:** 個人のproject、学習・研究、趣味やアマチュアの制作、慈善団体、教育機関、
|
|
366
|
+
公的研究機関、政府機関
|
|
367
|
+
- **許諾が必要:** 商用利用。Lattice自体を再配布するかどうかに関わらず、企業の業務や製品の
|
|
368
|
+
中で使う場合を含みます
|
|
369
|
+
|
|
370
|
+
**商用利用には**、別途の商用ライセンスが必要です。
|
|
371
|
+
問い合わせは[kitepon@gmail.com](mailto:kitepon@gmail.com)へのメールで受け付けます。
|
|
372
|
+
許諾するかどうか、どのような条件にするかは個別に判断します。
|
|
373
|
+
|
|
374
|
+
同梱の構造sensor([`sensor/`](sensor/))は本repositoryへ吸収した第三者成果物で、
|
|
375
|
+
**MIT License**のままです。upstreamの出自と帰属表示は[`sensor/NOTICE`](sensor/NOTICE)、
|
|
376
|
+
license本文は[`sensor/LICENSE`](sensor/LICENSE)が持ちます。上記の条件はこれを変更しません。
|
|
377
|
+
|
|
378
|
+
© 2026 quolu (kitepon-rgb)
|