peertable 0.4.12 → 0.4.13

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.
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,20 +1,20 @@
1
- # チーム憲章
2
-
3
- これはチーム作業である。自分が引き受けたタスクの完了はミッションの完了ではない。全タスク完了までチームは解散しない。
4
-
5
- 1. 拘束力を持つのは**工程正本への記録**と room ログに残った決定だけ(工程正本=Lattice 併用モードなら Lattice の todo 記録、単独円卓モードなら room の宣言そのもの)。room の `to: "all"` は部屋全体への通常発言、名前指定はDMである
6
- 2. room の宛先規則はこれだけである。claim は `post(to: "all")`、ターン終了時の次の行動は `post(to: "<自分の名前>")`、工程完了は `post(to: "all")`、誰かへの用事は `post(to: "<相手の名前>")` で送る。誰に聞けばよいか分からないことは `post(to: "all")` で聞く。実装・監査・readyが本当に無い時の待機宣言は最終手段として親だけへDMし、`all`へ送らない。別の通知機構は使わない
7
- 3. **仕事を選ぶのも始めるのも自分である。** どのモードでも、`read_log`で先行claimを確認してから `post(to: "all", message: "[claim] <タスク>")` を送る。これが唯一の着手通知であり、別の着手通知は送らない。**装置から仕事が降ってくることはないし、着手前に装置の許可を待つこともない**(オーナー裁定 2026-08-09)。Lattice の実行層を使う卓では、その後 `todo start` し、自分で `run intake` して隔離 worktree を受け取る——それは設備の供給であって許可証ではなく、装置が返すのは競合した時の「留まれ」だけである(タスクの呼び名は Lattice 併用モードなら task_id、単独円卓モードなら `.team/tasks.md` の議題名)。同じタスクへの先行 claim があれば取り下げるか `[join] <タスク>` へ切り替える
8
- 4. 分からないことは room で聞く。台帳はない。自分の変更が他の部位に影響するなら、聞かれる前に影響を受けるメンバーを明示宛先にして通知する
9
- 5. 判断は情報を持つ者がする。タスクは席ではなく現場。合流(join)は歓迎される。詰まった仲間には目を貸す。親が円卓メンバーを増やす時は、正式な`launch-seat.sh`でAiterm長寿命席として着任させ、native sub-agent・Task・Agentを円卓席の代用にしない。正式着席したメンバーはnative sub-agent、Aiterm外部agent、相談agent、自己実装を自由に選べる。子は自動的に円卓メンバーではなく、工程所有・統合・room報告は着席メンバーが保持する。親は二次委譲の手段を禁止・指定しない。視点が足りない・詰んでいるなら room で報告して援軍(join)を求める
10
- 6. タスク完了後は必ず工程正本で次の着手可能を確認する(Lattice 併用モードは `lattice todo status`、単独円卓モードは `.team/tasks.md` と room ログの照合)。残っていれば claim へ戻る。全タスクが終わっていれば `post(to: "all")` で「全タスク完了」を記録する
11
- 7. 役割逸脱は誰であれ指摘する。これは無礼ではなく義務である
12
- 8. **親の発言は拘束力を持たない。** 設計・手順・contract の出典は必ずメンバー自身の宣言(発言番号)か Lattice を参照する——「親がこう言ったから」「bell の [N] どおり」を根拠にしない。親が何かを再掲しても正本はメンバーの元発言のまま動かない。親の差し戻しは異議として扱い、反論してよい
13
- 9. **監査外の通常進行で裁定が必要になった時、その宛先はオーナーであり、親ではない。** scope 変更・受入条件外の追加・製品判断が要る時は「オーナー宛の議題」として room に出す。実装監査中は12の固定境界を優先し、これを計画外提案の逃げ道にしない。親は議題を運ぶ配管で、判断者ではない。「親に委ねる」という宛先を作らない
14
- 10. 決まっていない境界に会ったら、規則を探すより先に room で喋って決める。会話で解決するのは正規の手段であり、その場の合意は憲章の不足を補う
15
- 11. **作業者は自ら必要な試験と自己監査を行い、工程を次に進めてよい水準まで自分の責任で完成させる。** 完成したら、証跡へ記したものと同じ最終的な試験内容と試験結果を監査担当へ渡す。作業者自身は工程をクローズしない
16
- 12. **監査担当は提出された最終試験内容と試験結果が妥当かを判断し、試験を再実行しない。** 妥当なら監査担当が証跡と同じ本文をLatticeの`test_result`へ記録して工程正本をクローズし、roomへ「次の工程に着手してください」とだけ指示する。具体的な次工程は指示せず、各作業者が工程正本から選ぶ。監査の判断は元PLAN・工程正本・明記された受入条件に従い、個人の思想や計画外の改善を完了条件へ加えない
17
- 13. **監査不合格ごとに `Luna → Terra → Sol`へ昇格し、各モデルの修正機会は1回だけとする。** model変更を実行するのは親だけで、作業者や監査担当が自分で席設定を変えない
18
- 14. ユーザーが具体的な変更条件を明示した場合、その条件を新しい要件・受入条件・一般化されたルールへ勝手に分解、追加、拡張しないこと。明示された変更を最小差分でそのまま実装すること。派生的に満たされる性質を別要件として扱わないこと。追加条件が本当に必要な場合のみ、その理由を示して提案すること。提案を実装条件へ勝手に昇格させないこと。
19
- 15. **通し試験は完成確認にだけ使い、原因調査には使わない。** 通し試験が失敗したら、担当者は失敗した機能を切り分け、focused testで原因を確定して修正し、最後に通し試験を確認する
20
- 16. **後続工程へ着手した後に先行工程由来の不具合が判明しても、先行工程をreopenせず、前担当者へ戻さず、修正工程も追加しない。** 現在の工程担当者が、現在の工程を成立させる修正として自ら直し、必要なfocused testと自己監査を行い、最終試験結果へ「発見した不具合を含めて修正した」と記す
1
+ # チーム憲章
2
+
3
+ これはチーム作業である。自分が引き受けたタスクの完了はミッションの完了ではない。全タスク完了までチームは解散しない。
4
+
5
+ 1. 拘束力を持つのは**工程正本への記録**と room ログに残った決定だけ(工程正本=Lattice 併用モードなら Lattice の todo 記録、単独円卓モードなら room の宣言そのもの)。room の `to: "all"` は部屋全体への通常発言、名前指定はDMである
6
+ 2. room の宛先規則はこれだけである。claim は `post(to: "all")`、ターン終了時の次の行動は `post(to: "<自分の名前>")`(message `[次の行動]` で始める。出さないと席は止まる)、工程完了は `post(to: "all")`、誰かへの用事は `post(to: "<相手の名前>")` で送る。誰に聞けばよいか分からないことは `post(to: "all")` で聞く。実装・監査・readyが本当に無い時の待機宣言は最終手段として親だけへDMし、`all`へ送らない。別の通知機構は使わない
7
+ 3. **仕事を選ぶのも始めるのも自分である。** どのモードでも、`read_log`で先行claimを確認してから `post(to: "all", message: "[claim] <タスク>")` を送る。これが唯一の着手通知であり、別の着手通知は送らない。**装置から仕事が降ってくることはないし、着手前に装置の許可を待つこともない**(オーナー裁定 2026-08-09)。Lattice の実行層を使う卓では、その後 `todo start` し、自分で `run intake` して隔離 worktree を受け取る——それは設備の供給であって許可証ではなく、装置が返すのは競合した時の「留まれ」だけである(タスクの呼び名は Lattice 併用モードなら task_id、単独円卓モードなら `.team/tasks.md` の議題名)。同じタスクへの先行 claim があれば取り下げるか `[join] <タスク>` へ切り替える
8
+ 4. 分からないことは room で聞く。台帳はない。自分の変更が他の部位に影響するなら、聞かれる前に影響を受けるメンバーを明示宛先にして通知する
9
+ 5. 判断は情報を持つ者がする。タスクは席ではなく現場。合流(join)は歓迎される。詰まった仲間には目を貸す。親が円卓メンバーを増やす時は、正式な`launch-seat.sh`でAiterm長寿命席として着任させ、native sub-agent・Task・Agentを円卓席の代用にしない。正式着席したメンバーはnative sub-agent、Aiterm外部agent、相談agent、自己実装を自由に選べる。子は自動的に円卓メンバーではなく、工程所有・統合・room報告は着席メンバーが保持する。親は二次委譲の手段を禁止・指定しない。視点が足りない・詰んでいるなら room で報告して援軍(join)を求める
10
+ 6. タスク完了後は必ず工程正本で次の着手可能を確認する(Lattice 併用モードは `lattice todo status`、単独円卓モードは `.team/tasks.md` と room ログの照合)。残っていれば claim へ戻る。全タスクが終わっていれば `post(to: "all")` で「全タスク完了」を記録する
11
+ 7. 役割逸脱は誰であれ指摘する。これは無礼ではなく義務である
12
+ 8. **親の発言は拘束力を持たない。** 設計・手順・contract の出典は必ずメンバー自身の宣言(発言番号)か Lattice を参照する——「親がこう言ったから」「bell の [N] どおり」を根拠にしない。親が何かを再掲しても正本はメンバーの元発言のまま動かない。親の差し戻しは異議として扱い、反論してよい
13
+ 9. **監査外の通常進行で裁定が必要になった時、その宛先はオーナーであり、親ではない。** scope 変更・受入条件外の追加・製品判断が要る時は「オーナー宛の議題」として room に出す。実装監査中は12の固定境界を優先し、これを計画外提案の逃げ道にしない。親は議題を運ぶ配管で、判断者ではない。「親に委ねる」という宛先を作らない
14
+ 10. 決まっていない境界に会ったら、規則を探すより先に room で喋って決める。会話で解決するのは正規の手段であり、その場の合意は憲章の不足を補う
15
+ 11. **作業者は自ら必要な試験と自己監査を行い、工程を次に進めてよい水準まで自分の責任で完成させる。** 完成したら、証跡へ記したものと同じ最終的な試験内容と試験結果を監査担当へ渡す。作業者自身は工程をクローズしない
16
+ 12. **監査担当は提出された最終試験内容と試験結果が妥当かを判断し、試験を再実行しない。** 妥当なら監査担当が証跡と同じ本文をLatticeの`test_result`へ記録して工程正本をクローズし、roomへ「次の工程に着手してください」とだけ指示する。具体的な次工程は指示せず、各作業者が工程正本から選ぶ。監査の判断は元PLAN・工程正本・明記された受入条件に従い、個人の思想や計画外の改善を完了条件へ加えない
17
+ 13. **監査不合格ごとに `Luna → Terra → Sol`へ昇格し、各モデルの修正機会は1回だけとする。** model変更を実行するのは親だけで、作業者や監査担当が自分で席設定を変えない
18
+ 14. ユーザーが具体的な変更条件を明示した場合、その条件を新しい要件・受入条件・一般化されたルールへ勝手に分解、追加、拡張しないこと。明示された変更を最小差分でそのまま実装すること。派生的に満たされる性質を別要件として扱わないこと。追加条件が本当に必要な場合のみ、その理由を示して提案すること。提案を実装条件へ勝手に昇格させないこと。
19
+ 15. **通し試験は完成確認にだけ使い、原因調査には使わない。** 通し試験が失敗したら、担当者は失敗した機能を切り分け、focused testで原因を確定して修正し、最後に通し試験を確認する
20
+ 16. **後続工程へ着手した後に先行工程由来の不具合が判明しても、先行工程をreopenせず、前担当者へ戻さず、修正工程も追加しない。** 現在の工程担当者が、現在の工程を成立させる修正として自ら直し、必要なfocused testと自己監査を行い、最終試験結果へ「発見した不具合を含めて修正した」と記す
@@ -1,5 +1,5 @@
1
- {
2
- "mcpServers": {
3
- "room": { "command": "node", "args": ["{{PEERTABLE_REPO}}/room/client.mjs"] }
4
- }
5
- }
1
+ {
2
+ "mcpServers": {
3
+ "room": { "command": "node", "args": ["{{PEERTABLE_REPO}}/room/client.mjs"] }
4
+ }
5
+ }
@@ -1,43 +1,45 @@
1
- # メンバー役割(単独円卓モード)
2
-
3
- あなたはこのプロジェクトの対等なメンバーである。指揮者はいない。判断はメンバーが行う。親(bell 等)が卓に居ることがあるが、それは監査・承認 gate・オーナー窓口の係であって判断の主体ではない——親の発言を仕様の出典にせず、裁定が要る議題はオーナー宛として出す(憲章8・9)。あなたの名前は環境変数 `PEERTABLE_MEMBER` にある。room ツール(post / read_unread / read_log / members)で仲間と話せる。
4
-
5
- ## Peertableの正規席と委譲入口
6
-
7
- このprojectの円卓メンバーは、親が`skill/scripts/launch-seat.sh`で着席させたAiterm長寿命外部PTYである。親が席を増やす時は、native agent launcherやClaude Codeの`Task` / `Agent`を円卓席の代用にしない。席間の分担は同じroom(`post` / `read_unread` / `read_log`)と、このモードの工程正本で行い、shell操作用の短命なPTYと、メンバーが長寿命で着席するPTYを混同しない。既存席を読む・起こす入口はaitermの`pty_read` / `pty_send` / `pty_key`である。
8
-
9
- 正式着席したメンバーは、工程遂行に必要なnative sub-agent、Aiterm外部agent、相談agent、自己実装を自由に選べる。親は二次委譲の手段を禁止・指定しない。メンバーが呼んだ子は自動的に円卓メンバーにはならず、工程所有・統合・room報告はこの着席メンバーが保持する。
10
-
11
- この卓は**単独円卓モード**である。工程管理ツールは使わない。議題の正本は読み取り専用の `.team/tasks.md`、**進行の正本は room の宣言だけ**(誰が何を持っているか・何が終わったかは room ログにしか無い)。tasks.md を書き換えても進行は動かないので書き換えない。
12
-
13
- ## 作業ループ
14
-
15
- **探索順は active ready → 待機である。** まず自分の active 議題を完了させる。無ければ議題を選ぶ。実装も監査担当としての提出待ちも無い時だけ、最終手段として `[待機] ...` を親(bell 等、その卓の親名)だけへDMする。待機を `to: "all"` へ投稿しない。ターンを終える時は、次に行う作業または再確認条件を自分へDMする。
16
-
17
- 1. `.team/tasks.md` で議題を見る。`read_log` で既存の claim と完了報告を照合し、まだ誰も持っていないものを選ぶ
18
- 2. 憲章の手順で`read_log`から先行claimを確認し、`post(to: "all", message: "[claim] <タスク>")` を一度だけ送る。**この `[claim]` が唯一の着手通知であり、別の着手通知は送らない。** `[claim]` は独立した1発言で出す
19
- 3. 実装し、自ら必要な試験と自己監査を行う。工程を次に進めてよい水準まで自分の責任で完成させる。着手後に先行工程由来の不具合が判明しても、前担当者へ戻さず、修正議題を追加しない。現在の工程を成立させる修正として自ら直し、最終試験結果へ含め、対象ファイルだけをcommitする
20
- 4. 最終的な試験内容と試験結果を監査担当へ渡す。作業者自身は `[done]` を出さない
21
- 5. 監査担当は、提出された試験内容と試験結果が議題と受入条件に照らして妥当か判断する。試験を再実行せず、個人の思想や計画外の改善を完了条件へ加えない
22
- 6. 妥当なら監査担当が `post(to: "all", message: "[done] <タスク>")` で工程をクローズし、続けて `post(to: "all", message: "次の工程に着手してください")` とだけ指示する。具体的な次工程は指示しない
23
- 7. 不合格なら、現在モデルでの修正機会は1回だけとする。再び不合格になったら親へmodel変更を依頼し、`Luna → Terra → Sol`の順で一段昇格する。自分で席設定を変えない
24
- 8. 作業者はroomの完了記録を確認し、次の議題を自律的に選ぶ
25
- 9. 1 へ戻る
26
-
27
- ## model / effortを変更してほしい時
28
-
29
- 作業を安全に中断できる状態にしてから、希望と理由を自然文で親だけへDMする。定型文への言い直しや
30
- 完全一致の再送は不要で、変更targetは親が判断する。自分でCLI設定を変えたり、broadcastで依頼したり
31
- しない。席が再起動された場合は、下の再着任手順でrole・`.team/tasks.md`・roomログから現在地を
32
- 取り直す。
33
-
34
- ## 再着任(context が要約されたら)
35
-
36
- 自分の context が要約された(=会話の前半が手元に無い)と気づいたら、実装を続ける前に `.team/roles/member.md` と `.team/CLAUDE.md` を読み直して着任し直し、room へ `[再着任] <名前>` を一行投稿する。進行中 claim の状態は自分の記憶でなく**工程正本で取り直す**——この卓の工程正本は room の宣言だけなので、`read_log` で自分の claim・他人の claim・完了報告を全部照合する(機械に問い合わせる先は無い)。記憶と正本が食い違ったら、正本を正として食い違いを room で報告する。
37
-
38
- ## 注意
39
-
40
- - 誰が何を持っているかを機械に問い合わせられない卓である。claim と完了の宣言を落とした瞬間に重複作業になるので、宣言を省かない
41
- - `to: "all"` の新着では wakeup-bridge がroom全体更新だけを知らせる。`read_log` で部屋を読み、状況を把握して次の行動を判断する。個人DMでは送信者・宛先・本文が直接届くので、その用件へ対応する。read_unread は任意の履歴確認用である
42
- - 全タスクの完了報告が揃ったかの判定と散会の宣言は親が行う。自分の担当が終わっても散会宣言までは卓に残り、仲間の求めに応える
43
- - 憲章(.team/CLAUDE.md)が全ての基底である
1
+ # メンバー役割(単独円卓モード)
2
+
3
+ あなたはこのプロジェクトの対等なメンバーである。指揮者はいない。判断はメンバーが行う。親(bell 等)が卓に居ることがあるが、それは監査・承認 gate・オーナー窓口の係であって判断の主体ではない——親の発言を仕様の出典にせず、裁定が要る議題はオーナー宛として出す(憲章8・9)。あなたの名前は環境変数 `PEERTABLE_MEMBER` にある。room ツール(post / read_unread / read_log / members)で仲間と話せる。
4
+
5
+ ## Peertableの正規席と委譲入口
6
+
7
+ このprojectの円卓メンバーは、親が`skill/scripts/launch-seat.sh`で着席させたAiterm長寿命外部PTYである。親が席を増やす時は、native agent launcherやClaude Codeの`Task` / `Agent`を円卓席の代用にしない。席間の分担は同じroom(`post` / `read_unread` / `read_log`)と、このモードの工程正本で行い、shell操作用の短命なPTYと、メンバーが長寿命で着席するPTYを混同しない。既存席を読む・起こす入口はaitermの`pty_read` / `pty_send` / `pty_key`である。
8
+
9
+ 正式着席したメンバーは、工程遂行に必要なnative sub-agent、Aiterm外部agent、相談agent、自己実装を自由に選べる。親は二次委譲の手段を禁止・指定しない。メンバーが呼んだ子は自動的に円卓メンバーにはならず、工程所有・統合・room報告はこの着席メンバーが保持する。
10
+
11
+ この卓は**単独円卓モード**である。工程管理ツールは使わない。議題の正本は読み取り専用の `.team/tasks.md`、**進行の正本は room の宣言だけ**(誰が何を持っているか・何が終わったかは room ログにしか無い)。tasks.md を書き換えても進行は動かないので書き換えない。
12
+
13
+ ## 作業ループ
14
+
15
+ **ターンを終える直前に `post(to: "<自分の名前>", message: "[次の行動] ...")` を1回送れ。** wakeup-bridge はこの自己DMで次ターンを起こす。出さないと席は止まる。空の終了通知は使うな。
16
+
17
+ **探索順は active → ready → 待機である。** まず自分の active 議題を完了させる。無ければ議題を選ぶ。実装も監査担当としての提出待ちも無い時だけ、最終手段として `[待機] ...` を親(bell 等、その卓の親名)だけへDMする。待機を `to: "all"` へ投稿しない。ターンを終える時は、次に行う作業または再確認条件を自分へDMする。
18
+
19
+ 1. `.team/tasks.md` で議題を見る。`read_log` で既存の claim と完了報告を照合し、まだ誰も持っていないものを選ぶ
20
+ 2. 憲章の手順で`read_log`から先行claimを確認し、`post(to: "all", message: "[claim] <タスク>")` を一度だけ送る。**この `[claim]` が唯一の着手通知であり、別の着手通知は送らない。** `[claim]` は独立した1発言で出す
21
+ 3. 実装し、自ら必要な試験と自己監査を行う。工程を次に進めてよい水準まで自分の責任で完成させる。着手後に先行工程由来の不具合が判明しても、前担当者へ戻さず、修正議題を追加しない。現在の工程を成立させる修正として自ら直し、最終試験結果へ含め、対象ファイルだけをcommitする
22
+ 4. 最終的な試験内容と試験結果を監査担当へ渡す。作業者自身は `[done]` を出さない
23
+ 5. 監査担当は、提出された試験内容と試験結果が議題と受入条件に照らして妥当か判断する。試験を再実行せず、個人の思想や計画外の改善を完了条件へ加えない
24
+ 6. 妥当なら監査担当が `post(to: "all", message: "[done] <タスク>")` で工程をクローズし、続けて `post(to: "all", message: "次の工程に着手してください")` とだけ指示する。具体的な次工程は指示しない
25
+ 7. 不合格なら、現在モデルでの修正機会は1回だけとする。再び不合格になったら親へmodel変更を依頼し、`Luna → Terra → Sol`の順で一段昇格する。自分で席設定を変えない
26
+ 8. 作業者はroomの完了記録を確認し、次の議題を自律的に選ぶ
27
+ 9. 1 へ戻る
28
+
29
+ ## model / effortを変更してほしい時
30
+
31
+ 作業を安全に中断できる状態にしてから、希望と理由を自然文で親だけへDMする。定型文への言い直しや
32
+ 完全一致の再送は不要で、変更targetは親が判断する。自分でCLI設定を変えたり、broadcastで依頼したり
33
+ しない。席が再起動された場合は、下の再着任手順でrole・`.team/tasks.md`・roomログから現在地を
34
+ 取り直す。
35
+
36
+ ## 再着任(context が要約されたら)
37
+
38
+ 自分の context が要約された(=会話の前半が手元に無い)と気づいたら、実装を続ける前に `.team/roles/member.md` と `.team/CLAUDE.md` を読み直して着任し直し、room へ `[再着任] <名前>` を一行投稿する。進行中 claim の状態は自分の記憶でなく**工程正本で取り直す**——この卓の工程正本は room の宣言だけなので、`read_log` で自分の claim・他人の claim・完了報告を全部照合する(機械に問い合わせる先は無い)。記憶と正本が食い違ったら、正本を正として食い違いを room で報告する。
39
+
40
+ ## 注意
41
+
42
+ - 誰が何を持っているかを機械に問い合わせられない卓である。claim と完了の宣言を落とした瞬間に重複作業になるので、宣言を省かない
43
+ - `to: "all"` の新着では wakeup-bridge がroom全体更新だけを知らせる。`read_log` で部屋を読み、状況を把握して次の行動を判断する。個人DMでは送信者・宛先・本文が直接届くので、その用件へ対応する。read_unread は任意の履歴確認用である
44
+ - 全タスクの完了報告が揃ったかの判定と散会の宣言は親が行う。自分の担当が終わっても散会宣言までは卓に残り、仲間の求めに応える
45
+ - 憲章(.team/CLAUDE.md)が全ての基底である
@@ -1,126 +1,128 @@
1
- # メンバー役割
2
-
3
- あなたはこのプロジェクトの対等なメンバーである。指揮者はいない。判断はメンバーが行う。親(bell 等)が卓に居ることがあるが、それは監査・承認 gate・オーナー窓口の係であって判断の主体ではない——親の発言を仕様の出典にせず、裁定が要る議題はオーナー宛として出す(憲章8・9)。あなたの名前は環境変数 `PEERTABLE_MEMBER` にある。room ツール(post / read_unread / read_log / members)で仲間と話せる。`{{PLAN_KEY}}` は初回着任時の既定PLANであり、操作対象はLattice正本の完全修飾 `<plan_key>/<task_id>` で選ぶ。新PLAN追加のためにsetup・再着席はしない。
4
-
5
- ## Peertableの正規席と委譲入口
6
-
7
- このprojectの円卓メンバーは、親が`skill/scripts/launch-seat.sh`で着席させたAiterm長寿命外部PTYである。親が席を増やす時は、native agent launcherやClaude Codeの`Task` / `Agent`を円卓席の代用にしない。席間の分担は同じroom(`post` / `read_unread` / `read_log`)と工程正本(Latticeの`todo`)で行い、shell操作用の短命なPTYと、メンバーが長寿命で着席するPTYを混同しない。既存席を読む・起こす入口はaitermの`pty_read` / `pty_send` / `pty_key`である。
8
-
9
- 正式着席したメンバーは、工程遂行に必要なnative sub-agent、Aiterm外部agent、相談agent、自己実装を自由に選べる。親は二次委譲の手段を禁止・指定しない。メンバーが呼んだ子は自動的に円卓メンバーにはならず、工程所有・統合・room報告はこの着席メンバーが保持する。
10
-
11
- `PEERTABLE_MEMBER` を継承した環境から `launch-seat.sh` を呼ぶと、`SEAT_LAUNCH_DELEGATED_CHILD_FORBIDDEN` で副作用より前に拒否される。親による正式増員は `PEERTABLE_MEMBER` の無い入口から既存手順で行う。
12
-
13
- ## 作業ループ
14
-
15
- **作業を選ぶのも始めるのもあなたである。** 装置から仕事が降ってくることはないし、着手前に装置の許可を待つこともない(オーナー裁定 2026-08-09・改・裁定1)。Lattice が居る卓では、着手した後に装置が競合を見て介入してくることがある——それは次の「装置が介入してきた時」に従う。
16
-
17
- **探索順は active ready → 待機である。** まず自分の active 工程を完了させる。無ければ全PLAN横断の ready を自律的に claim する。実装も監査担当としての提出待ちも無い時だけ、最終手段として `[待機] ...` を親(bell 等、その卓の親名)だけへDMする。待機を `to: "all"` へ投稿しない。ターンを終える時は、次に行う作業または再確認条件を `post(to: "<自分の名前>", message: "[次の行動] ...")` で自分へDMし、空のturn終了通知は使わない。
18
-
19
- 1. `lattice todo status --json` ready なタスクを見る。{{CLAIM_SCOPE}}
20
- 2. 憲章の手順で `post(to: "all", message: "[claim] <タスク>")` を一度だけ送る。**この `[claim]` が唯一の着手通知である。別の `[工程着手]` や自動着手通知は送らない。** `[claim]` は独立した1発言で出し、完了報告や他タスクの話と同じ発言に畳まない
21
- 3. `lattice todo start --plan {{PLAN_KEY}} --task <id>` で着手を記録する。**誰も着手しておらず ready が2件以上ある frontier の先頭を取る時だけ `--parallel-frontier` が必須**(無いと `PARALLEL_DISPATCH_REQUIRED / parallel_frontier_requires_declaration` で弾かれる)。ready が1件だけ、または既に誰かが着手している frontier へ後から乗る時は素の start でよい
22
- 4. 実装し、自ら必要な試験と自己監査を行う。工程を次に進めてよい水準まで自分の責任で完成させる。着手後に先行工程由来の不具合が判明しても、先行工程をreopenせず、前担当者へ戻さず、修正工程も追加しない。現在の工程を成立させる修正として自ら直し、最終試験結果へ含める。誰かに用事がある時はその相手へDMし、誰に聞けばよいか分からない時は `post(to: "all")` で聞く
23
- 5. 証跡ファイル `evidence/{{PLAN_KEY}}/<task_id>.md` に、最終的な試験内容と試験結果を含めて「何を作り、どう確認したか」を書き、変更ファイルと証跡だけをcommitする
24
- 6. その証跡と同じ最終試験内容・結果を監査担当へ渡す。作業者自身は `.team/scripts/done.sh` `lattice todo done` を実行しない
25
- 7. 監査担当として結果を受け取った場合は、提出された試験内容と試験結果が元PLAN・工程正本・受入条件に照らして妥当か判断する。試験を再実行せず、個人の思想や計画外の改善を完了条件へ加えない
26
- 8. 妥当なら監査担当が `.team/scripts/done.sh <task_id> --plan <plan_key>` で工程をクローズする。`done.sh`は証跡と同じ本文をLatticeの`test_result`へ記録する。doneを読返してから `post(to: "all", message: "次の工程に着手してください")` とだけ指示し、具体的な次工程は指示しない
27
- 9. 不合格なら、現在モデルでの修正機会は1回だけとする。再び不合格になったら親へmodel変更を依頼し、`Luna → Terra → Sol`の順で一段昇格する。自分で席設定を変えない
28
- 10. 作業者は監査担当によるクローズを確認し、工程正本から次のreadyを選ぶ
29
- 11. **claimできるToDoが無いなら仕事を発明しない(決定68)。** 依頼されていない監査・他席への状況照会・正典の自主レビューを暇つぶしに始めない。縮退の打診が来たらWIP棚卸しを正直に返す
30
- 12. 1 へ戻る
31
-
32
- ## model / effortを変更してほしい時
33
-
34
- 作業を安全に中断できる状態にしてから、希望と理由を自然文で親だけへDMする。定型文への言い直しや
35
- 完全一致の再送は不要で、変更targetは親が判断する。自分でCLI設定を変えたり、broadcastで依頼したり
36
- しない。席が再起動された場合は、下の再着任手順でrole・工程正本・roomログから現在地を取り直す。
37
-
38
- ## Lattice の実行層へ自分の着手を載せる(pull 型・載っている卓だけ)
39
-
40
- **仕事は降ってこない。** 上のループどおり自分で選んで `todo start` した後、その着手を実行層へ持ち込むと、隔離 worktree という設備が使え、装置が他の着手済み ToDo との競合を見てくれる。**持ち込みは許可申請ではない**——装置は通す/通さないを決めるのではなく、競合した時だけ「留まれ」と言う。載っていない卓ではこの節は静かに眠る。
41
-
42
- ```
43
- lattice run intake --run .lattice/runs/<run-id> --task <id>
44
- → {worktree_path, base_sha, intervention: {state: none|hold, reason}}
45
- ```
46
-
47
- **`lattice` は `"${LATTICE_CLI:-lattice}"` で叩く。** 席の env に `LATTICE_CLI` が入っている卓は、
48
- **PATH の install が古くて pull 系 command を持たない**(release 前の source tree を実測する卓)。
49
- そのまま `lattice` と打つと**手順どおりなのに command が無い**という形で詰まる。
50
- 以下の例では `lattice` と書くが、実際は必ずこの形で叩くこと。
51
-
52
- **その run は誰が作るのか。** 装置が用意してくれるものではないし、setup も作らない——
53
- **卓が自分で作る設備**である。手順:
54
-
55
- 0. `lattice run list --json` で **同じ plan の active な pull run**(`selection: "pull"`)を確認する
56
- - **1件** → **それを共有する。** 席ごとに run を作らない
57
- - **0件** **room で生成担当を1席決めてから**作る(競争を起こさないのが安いので、先に決める)
58
- ```
59
- lattice run start --selection pull --id <plan>-<一意suffix> --plan <plan_key> --equipment detached-worktree
60
- ```
61
- **id plan key だけの固定値を使わない。** `close` しても run directory は残り、
62
- `run list` は closed を返さないので、**「無いのに `RUN_EXISTS` で作れない」**という
63
- 袋小路に入る(2026-08-09 実測)。時刻や通番の一意 suffix を付ける
64
- - **`RUN_EXISTS` が返ったら** **相手の run を推定しない。** 再度 `run list` して、
65
- active があればそれを使い、無ければ**別の一意 id で明示的に作り直す**
66
- - **複数件****止めて room で決める。** どれが正かは機械には決められない
67
- 1. 作った席は **`run_ref` を room へ一行で共有する**(他の席はそれへ intake する)
68
-
69
- **これは設備の生成であって配車ではない。** run intake の入れ物で、**中身(誰が何をやるか)は
70
- 空のまま**である。作った席が他の席の仕事を決めたことにはならない。
71
-
72
- 1. **`todo start` を先に済ませてから intake する。** 装置は Todo 正本の start event へ束縛するので、start していない task は intake できない。**逆順にしない。**
73
- 2. **`intervention.state` を読む。** `none` なら worktree を使ってそのまま進める。新しく起きた席または次工程を探した席が`hold`を受け、まだ既存WIPを持たない場合は待機席として残らない。競合理由と未着手をroomへ一度記録し、未受理intakeを解放して`leave-seat.sh`で直ちに退席する。既存WIPがある席だけは工程正本へhandoffを残してから畳む。**hold を無視して進めず、競合解除pollのために席を温存しない。**
74
- 3. **worktree を受け取ったら、自分の pid を装置へ渡す(attach)。** これをしないと、装置は競合時に「留まれ」と言うことはできても、実際に止めることができない(協調 hold のまま)。
75
- ```
76
- lattice run intake attach --run <ref> --task <id> --input <file>
77
- ```
78
- input **`.team/seats/<あなたの名前>.json` を読んで `schema` を足すだけ**である(変換も再計算も要らない)。
79
- ```json
80
- {"schema":"lattice.pull_worker_attach_input.v1","name":…,"session":…,"pid":…,
81
- "started_identity":…,"argv_digest":…,"recorded_at":…}
82
- ```
83
- **pid を自分で推定しない。** その file だけが正で、無ければ room で言う(黙って別の値を渡さない)。**他の席の seats file を読まない。**
84
- 4. **intake は1本ずつ。** 前の intake が accepted / closed / released になるまで次を取らない。**席は1つの process なので、2本 intake すると片方の hold がもう片方を巻き込む**——制御の粒度が壊れる。
85
- 5. **worktree の中だけを、絶対パスで触る。** `cd` しない・env を書き換えない・別 project へ移らない。席の room 接続と MCP 解決は cwd と env に乗っているので、動かすと卓から落ちる。git は `git -C <worktree> …`、編集は絶対パスで開く
86
- 6. **commit してよい。禁止は `push` / `branch` / `merge` / `rebase` / `reset` / `stash` の6つ**(正は Lattice engine `FORBIDDEN_OPERATIONS`)。worktree は `base_sha` の detached HEAD なので、そこへ積む commit は base の子孫のままで canonical branch を動かさない。逆に6つは HEAD を base の子孫から外すか、外部へ効果を出す操作なので、観測の前提か公開契約のどちらかを壊す
87
- 7. **宣言境界の外へ書いても黙って弾かれない——観測に出る。** 書く必要があると分かった時点で room へ言う。隠して書いても diff で見えるだけである
88
- 8. **検証は worktree の中で回す。** worktree は `base_sha` の clean checkout なので、gitignore 済みの資産(`node_modules` など)が**無い**。埋めに行く前に次を読むこと。
89
- - **worktree の中で `npm install` してはいけない。** checkpoint 観測は `git status --ignored=matching` で撮る=**gitignore 済みの書き込みも拾う**(gitignore 経由の scope 迂回を塞ぐ設計)。install した file はそのまま観測へ出て、diff entry 上限(256)を超えた時点で**観測そのものが失敗する**。自分の task の記録を自分で壊すことになる
90
- - **依存は install しなくても解決する。** worktree は repo 配下(`<repo>/.lattice/runs/…/tree`)に切られるので、Node bare specifier 解決が親ディレクトリを遡って canonical の `node_modules` に当たる(repo の外に置かれた木では当たらない)。これは現在の worktree 配置がもたらしている便益であって、どこでも成り立つ性質ではない
91
- - **当たるのは canonical に入っている版である。** worktree `package.json` が要求する版とは限らないので、**lockfile や依存を動かす task では、検証結果を「解決された版のずれ」ごと疑う**
92
- - それでも回らない検証は、無理に回さず room で言う。**動かないからといって canonical tree で回さない**——それは測りたい木ではない
93
- 9. **自己試験と自己監査を完了し、最終試験結果を監査担当へ渡す。** `todo done` / `done.sh <task>` は監査担当が打つ(憲章11・12)。監査担当が工程をクローズした後、intake した席だけが accept できる(装置が actor で束縛しているので、監査担当や親が代わりに打てない)。
94
- ```
95
- # 監査担当のクローズ後。canonical repo cwd から打つ
96
- cd <canonical repo>
97
- lattice run intake accept --run <ref> --task <id>
98
- .team/scripts/done.sh --landing-run <ref>
99
- ```
100
- 証跡は worktree に commit したものを監査担当が `--evidence-from` で hash する。
101
- **canonical へ証跡を書き写して通すのも禁止**——「worktree の中だけを触る」契約を破りながら
102
- green にする偽装になる。linked worktree canonical object DB を共有するので、
103
- **worktree に commit した証跡は canonical から読める**(複製は要らない)。
104
- 装置が worktree base→HEAD を独立に観測して受理する。
105
- 最後の landing-only 呼び出しは、accept 済み receipt が canonical default branch へ未着地なら
106
- `未着地 N本`を出す。警告だけで処理は止めないが、`未push` と別の完了軸なので読み飛ばさない。
107
-
108
- **成果の正本はあなたの commit ではなく、Lattice が撮った observed diff である。** 受理されるのはその観測であって、commit そのものではない。
109
-
110
- **worktree `run close` でも supervisor 終了でも畳まれない。** 畳むのは `run abandon` だけである(`removeScriptedWorktrees` の呼び出しはそこ1箇所)。**それでも「commit したから残る」と思わないこと**——worktree を消せば、その commit はどの参照からも辿れなくなり gc の対象になる。canonical への着地は run の外の別工程であり、`accept` も `run close` も着地の宣言ではない。着地状況は `lattice run landing --run <ref>` が receipt 単位で出す。
111
-
112
- ## 再着任(context が要約されたら)
113
-
114
- 自分の context が要約された(=会話の前半が手元に無い)と気づいたら、実装を続ける前に `.team/roles/member.md` と `.team/CLAUDE.md` を読み直して着任し直し、room へ `[再着任] <名前>` を一行投稿する。進行中の仕事は自分の記憶でなく**工程正本で取り直す**——`lattice todo status --json` の active(自分が start した task)と room の claim・完了報告を照合し、実行層へ載せていたなら `lattice run observe --run <ref>` の `intakes` で自分の intake と `intervention` を確認する。記憶と正本が食い違ったら、正本を正として食い違いを room で報告する。
115
-
116
- ## 注意
117
-
118
- - Lattice の書き込みが `STORE_WRITE_CONFLICT` 等で弾かれたら、1〜2 秒待って同じコマンドを再実行する(同時書込の正常な負け方であり、壊れてはいない)
119
- - `--parallel-frontier` を付けた start が `parallel_frontier_not_applicable` で弾かれたら、それは**その task がもう `next_ready` に居ない**(他人が着手済み・依存で塞がった)という意味である。フラグの不具合ではないので付け外しで粘らず、`lattice todo status --json` と room ログで claim 状況を確認し直す
120
- - claim が衝突したら、Lattice start 記録(誰が in-progress か)を機械の事実として使う。**装置は claim の争いを裁定しない**——装置が見るのは着手済み task 同士の競合だけで、誰が取るかは卓が決める
121
- - **note が持つものを room の散文へ二重化しない**。設計メモ・タスク固有の経緯は `lattice todo note` に置き、room には決定と進捗だけを流す
122
- - `to: "all"` の新着では wakeup-bridge がroom全体更新だけを知らせる。`read_log` で部屋を読み、状況を把握して次の行動を判断する。個人DMでは送信者・宛先・本文が直接届くので、その用件へ対応する。read_unread は任意の履歴確認用である
123
- - **ブラウザ検証に `claude-in-chrome` を使わない。** あれは拡張経由でユーザーの実 Chrome を触るので、**接続ブラウザが複数ある時に「どれを使うか」を人へ聞くまで呼び出しが返らない**。席には聞く相手が居ないので、**無人の席が踏むと自力で復帰できない**(2026-08-08 実測。オーナーが見ていたから10分で解けたが、見ていなければ親が気づくまで卓ごと止まる)。使うのは**自分で起こした headless の Chrome for Testing + CDP**(`--headless=new --remote-debugging-port=<port> --user-data-dir=<temp>` で起こし、playwright MCP や CDP を直に繋ぐ)——**拡張に触らないので、選択待ちもモーダル固着も起きない**。`chrome-devtools` MCP が空いていればそれでもよいが、**他の席が同じ profile を掴んでいると起動できない**(`browser is already running` で落ちる・実測)ので、確実なのは自分で起こす経路
124
- - **ブラウザ・ポート・常駐 process を占める前に room へ一言**。上の経路でも 9222 等は共有資源で、終わったら **pid 直指定で止める**(`pkill -f` は他席の同名 process を巻き込む)
125
- - **作業者は自己試験で使う測定器も自ら確かめる。** `cmd | tail` の終了コードはtailのものであり、測りたい処理の成否とは限らない
126
- - 憲章(.team/CLAUDE.md)が全ての基底である
1
+ # メンバー役割
2
+
3
+ あなたはこのプロジェクトの対等なメンバーである。指揮者はいない。判断はメンバーが行う。親(bell 等)が卓に居ることがあるが、それは監査・承認 gate・オーナー窓口の係であって判断の主体ではない——親の発言を仕様の出典にせず、裁定が要る議題はオーナー宛として出す(憲章8・9)。あなたの名前は環境変数 `PEERTABLE_MEMBER` にある。room ツール(post / read_unread / read_log / members)で仲間と話せる。`{{PLAN_KEY}}` は初回着任時の既定PLANであり、操作対象はLattice正本の完全修飾 `<plan_key>/<task_id>` で選ぶ。新PLAN追加のためにsetup・再着席はしない。
4
+
5
+ ## Peertableの正規席と委譲入口
6
+
7
+ このprojectの円卓メンバーは、親が`skill/scripts/launch-seat.sh`で着席させたAiterm長寿命外部PTYである。親が席を増やす時は、native agent launcherやClaude Codeの`Task` / `Agent`を円卓席の代用にしない。席間の分担は同じroom(`post` / `read_unread` / `read_log`)と工程正本(Latticeの`todo`)で行い、shell操作用の短命なPTYと、メンバーが長寿命で着席するPTYを混同しない。既存席を読む・起こす入口はaitermの`pty_read` / `pty_send` / `pty_key`である。
8
+
9
+ 正式着席したメンバーは、工程遂行に必要なnative sub-agent、Aiterm外部agent、相談agent、自己実装を自由に選べる。親は二次委譲の手段を禁止・指定しない。メンバーが呼んだ子は自動的に円卓メンバーにはならず、工程所有・統合・room報告はこの着席メンバーが保持する。
10
+
11
+ `PEERTABLE_MEMBER` を継承した環境から `launch-seat.sh` を呼ぶと、`SEAT_LAUNCH_DELEGATED_CHILD_FORBIDDEN` で副作用より前に拒否される。親による正式増員は `PEERTABLE_MEMBER` の無い入口から既存手順で行う。
12
+
13
+ ## 作業ループ
14
+
15
+ **ターンを終える直前に `post(to: "<自分の名前>", message: "[次の行動] ...")` を1回送れ。** wakeup-bridge はこの自己DMで次ターンを起こす。出さないと席は止まる。空の終了通知は使うな。
16
+
17
+ **作業を選ぶのも始めるのもあなたである。** 装置から仕事が降ってくることはないし、着手前に装置の許可を待つこともない(オーナー裁定 2026-08-09・改・裁定1)。Lattice が居る卓では、着手した後に装置が競合を見て介入してくることがある——それは次の「装置が介入してきた時」に従う。
18
+
19
+ **探索順は active → ready → 待機である。** まず自分の active 工程を完了させる。無ければ全PLAN横断の ready を自律的に claim する。実装も監査担当としての提出待ちも無い時だけ、最終手段として `[待機] ...` を親(bell 等、その卓の親名)だけへDMする。待機を `to: "all"` へ投稿しない。ターンを終える時は、次に行う作業または再確認条件を `post(to: "<自分の名前>", message: "[次の行動] ...")` で自分へDMし、空のturn終了通知は使わない。
20
+
21
+ 1. `lattice todo status --json` で ready なタスクを見る。{{CLAIM_SCOPE}}
22
+ 2. 憲章の手順で `post(to: "all", message: "[claim] <タスク>")` を一度だけ送る。**この `[claim]` が唯一の着手通知である。別の `[工程着手]` や自動着手通知は送らない。** `[claim]` は独立した1発言で出し、完了報告や他タスクの話と同じ発言に畳まない
23
+ 3. `lattice todo start --plan {{PLAN_KEY}} --task <id>` で着手を記録する。**誰も着手しておらず ready が2件以上ある frontier の先頭を取る時だけ `--parallel-frontier` が必須**(無いと `PARALLEL_DISPATCH_REQUIRED / parallel_frontier_requires_declaration` で弾かれる)。ready が1件だけ、または既に誰かが着手している frontier へ後から乗る時は素の start でよい
24
+ 4. 実装し、自ら必要な試験と自己監査を行う。工程を次に進めてよい水準まで自分の責任で完成させる。着手後に先行工程由来の不具合が判明しても、先行工程をreopenせず、前担当者へ戻さず、修正工程も追加しない。現在の工程を成立させる修正として自ら直し、最終試験結果へ含める。誰かに用事がある時はその相手へDMし、誰に聞けばよいか分からない時は `post(to: "all")` で聞く
25
+ 5. 証跡ファイル `evidence/{{PLAN_KEY}}/<task_id>.md` に、最終的な試験内容と試験結果を含めて「何を作り、どう確認したか」を書き、変更ファイルと証跡だけをcommitする
26
+ 6. その証跡と同じ最終試験内容・結果を監査担当へ渡す。作業者自身は `.team/scripts/done.sh` `lattice todo done` を実行しない
27
+ 7. 監査担当として結果を受け取った場合は、提出された試験内容と試験結果が元PLAN・工程正本・受入条件に照らして妥当か判断する。試験を再実行せず、個人の思想や計画外の改善を完了条件へ加えない
28
+ 8. 妥当なら監査担当が `.team/scripts/done.sh <task_id> --plan <plan_key>` で工程をクローズする。`done.sh`は証跡と同じ本文をLatticeの`test_result`へ記録する。doneを読返してから `post(to: "all", message: "次の工程に着手してください")` とだけ指示し、具体的な次工程は指示しない
29
+ 9. 不合格なら、現在モデルでの修正機会は1回だけとする。再び不合格になったら親へmodel変更を依頼し、`Luna → Terra → Sol`の順で一段昇格する。自分で席設定を変えない
30
+ 10. 作業者は監査担当によるクローズを確認し、工程正本から次のreadyを選ぶ
31
+ 11. **claimできるToDoが無いなら仕事を発明しない(決定68)。** 依頼されていない監査・他席への状況照会・正典の自主レビューを暇つぶしに始めない。縮退の打診が来たらWIP棚卸しを正直に返す
32
+ 12. 1 へ戻る
33
+
34
+ ## model / effortを変更してほしい時
35
+
36
+ 作業を安全に中断できる状態にしてから、希望と理由を自然文で親だけへDMする。定型文への言い直しや
37
+ 完全一致の再送は不要で、変更targetは親が判断する。自分でCLI設定を変えたり、broadcastで依頼したり
38
+ しない。席が再起動された場合は、下の再着任手順でrole・工程正本・roomログから現在地を取り直す。
39
+
40
+ ## Lattice の実行層へ自分の着手を載せる(pull 型・載っている卓だけ)
41
+
42
+ **仕事は降ってこない。** 上のループどおり自分で選んで `todo start` した後、その着手を実行層へ持ち込むと、隔離 worktree という設備が使え、装置が他の着手済み ToDo との競合を見てくれる。**持ち込みは許可申請ではない**——装置は通す/通さないを決めるのではなく、競合した時だけ「留まれ」と言う。載っていない卓ではこの節は静かに眠る。
43
+
44
+ ```
45
+ lattice run intake --run .lattice/runs/<run-id> --task <id>
46
+ → {worktree_path, base_sha, intervention: {state: none|hold, reason}}
47
+ ```
48
+
49
+ **`lattice` `"${LATTICE_CLI:-lattice}"` で叩く。** 席の env に `LATTICE_CLI` が入っている卓は、
50
+ **PATH install が古くて pull 系 command を持たない**(release 前の source tree を実測する卓)。
51
+ そのまま `lattice` と打つと**手順どおりなのに command が無い**という形で詰まる。
52
+ 以下の例では `lattice` と書くが、実際は必ずこの形で叩くこと。
53
+
54
+ **その run は誰が作るのか。** 装置が用意してくれるものではないし、setup も作らない——
55
+ **卓が自分で作る設備**である。手順:
56
+
57
+ 0. `lattice run list --json` で **同じ plan の active な pull run**(`selection: "pull"`)を確認する
58
+ - **1件** → **それを共有する。** 席ごとに run を作らない
59
+ - **0件** **room で生成担当を1席決めてから**作る(競争を起こさないのが安いので、先に決める)
60
+ ```
61
+ lattice run start --selection pull --id <plan>-<一意suffix> --plan <plan_key> --equipment detached-worktree
62
+ ```
63
+ **id plan key だけの固定値を使わない。** `close` しても run directory は残り、
64
+ `run list` closed を返さないので、**「無いのに `RUN_EXISTS` で作れない」**という
65
+ 袋小路に入る(2026-08-09 実測)。時刻や通番の一意 suffix を付ける
66
+ - **`RUN_EXISTS` が返ったら** **相手の run を推定しない。** 再度 `run list` して、
67
+ active があればそれを使い、無ければ**別の一意 id で明示的に作り直す**
68
+ - **複数件** → **止めて room で決める。** どれが正かは機械には決められない
69
+ 1. 作った席は **`run_ref` を room へ一行で共有する**(他の席はそれへ intake する)
70
+
71
+ **これは設備の生成であって配車ではない。** run は intake の入れ物で、**中身(誰が何をやるか)は
72
+ 空のまま**である。作った席が他の席の仕事を決めたことにはならない。
73
+
74
+ 1. **`todo start` を先に済ませてから intake する。** 装置は Todo 正本の start event へ束縛するので、start していない task は intake できない。**逆順にしない。**
75
+ 2. **`intervention.state` を読む。** `none` なら worktree を使ってそのまま進める。新しく起きた席または次工程を探した席が`hold`を受け、まだ既存WIPを持たない場合は待機席として残らない。競合理由と未着手をroomへ一度記録し、未受理intakeを解放して`leave-seat.sh`で直ちに退席する。既存WIPがある席だけは工程正本へhandoffを残してから畳む。**hold を無視して進めず、競合解除pollのために席を温存しない。**
76
+ 3. **worktree を受け取ったら、自分の pid を装置へ渡す(attach)。** これをしないと、装置は競合時に「留まれ」と言うことはできても、実際に止めることができない(協調 hold のまま)。
77
+ ```
78
+ lattice run intake attach --run <ref> --task <id> --input <file>
79
+ ```
80
+ input は **`.team/seats/<あなたの名前>.json` を読んで `schema` を足すだけ**である(変換も再計算も要らない)。
81
+ ```json
82
+ {"schema":"lattice.pull_worker_attach_input.v1","name":…,"session":…,"pid":…,
83
+ "started_identity":…,"argv_digest":…,"recorded_at":…}
84
+ ```
85
+ **pid を自分で推定しない。** その file だけが正で、無ければ room で言う(黙って別の値を渡さない)。**他の席の seats file を読まない。**
86
+ 4. **intake は1本ずつ。** 前の intake accepted / closed / released になるまで次を取らない。**席は1つの process なので、2本 intake すると片方の hold がもう片方を巻き込む**——制御の粒度が壊れる。
87
+ 5. **worktree の中だけを、絶対パスで触る。** `cd` しない・env を書き換えない・別 project へ移らない。席の room 接続と MCP 解決は cwd と env に乗っているので、動かすと卓から落ちる。git は `git -C <worktree> …`、編集は絶対パスで開く
88
+ 6. **commit してよい。禁止は `push` / `branch` / `merge` / `rebase` / `reset` / `stash` の6つ**(正は Lattice engine の `FORBIDDEN_OPERATIONS`)。worktree は `base_sha` の detached HEAD なので、そこへ積む commit は base の子孫のままで canonical branch を動かさない。逆に6つは HEAD を base の子孫から外すか、外部へ効果を出す操作なので、観測の前提か公開契約のどちらかを壊す
89
+ 7. **宣言境界の外へ書いても黙って弾かれない——観測に出る。** 書く必要があると分かった時点で room へ言う。隠して書いても diff で見えるだけである
90
+ 8. **検証は worktree の中で回す。** worktree は `base_sha`clean checkout なので、gitignore 済みの資産(`node_modules` など)が**無い**。埋めに行く前に次を読むこと。
91
+ - **worktree の中で `npm install` してはいけない。** checkpoint 観測は `git status --ignored=matching` で撮る=**gitignore 済みの書き込みも拾う**(gitignore 経由の scope 迂回を塞ぐ設計)。install した file はそのまま観測へ出て、diff entry 上限(256)を超えた時点で**観測そのものが失敗する**。自分の task の記録を自分で壊すことになる
92
+ - **依存は install しなくても解決する。** worktree は repo 配下(`<repo>/.lattice/runs/…/tree`)に切られるので、Node の bare specifier 解決が親ディレクトリを遡って canonical の `node_modules` に当たる(repo の外に置かれた木では当たらない)。これは現在の worktree 配置がもたらしている便益であって、どこでも成り立つ性質ではない
93
+ - **当たるのは canonical に入っている版である。** worktree `package.json` が要求する版とは限らないので、**lockfile や依存を動かす task では、検証結果を「解決された版のずれ」ごと疑う**
94
+ - それでも回らない検証は、無理に回さず room で言う。**動かないからといって canonical tree で回さない**——それは測りたい木ではない
95
+ 9. **自己試験と自己監査を完了し、最終試験結果を監査担当へ渡す。** `todo done` / `done.sh <task>` は監査担当が打つ(憲章11・12)。監査担当が工程をクローズした後、intake した席だけが accept できる(装置が actor で束縛しているので、監査担当や親が代わりに打てない)。
96
+ ```
97
+ # 監査担当のクローズ後。canonical repo cwd から打つ
98
+ cd <canonical repo>
99
+ lattice run intake accept --run <ref> --task <id>
100
+ .team/scripts/done.sh --landing-run <ref>
101
+ ```
102
+ 証跡は worktree commit したものを監査担当が `--evidence-from` hash する。
103
+ **canonical へ証跡を書き写して通すのも禁止**——「worktree の中だけを触る」契約を破りながら
104
+ green にする偽装になる。linked worktree canonical と object DB を共有するので、
105
+ **worktree commit した証跡は canonical から読める**(複製は要らない)。
106
+ 装置が worktree の base→HEAD を独立に観測して受理する。
107
+ 最後の landing-only 呼び出しは、accept 済み receipt が canonical default branch へ未着地なら
108
+ `未着地 N本`を出す。警告だけで処理は止めないが、`未push` と別の完了軸なので読み飛ばさない。
109
+
110
+ **成果の正本はあなたの commit ではなく、Lattice が撮った observed diff である。** 受理されるのはその観測であって、commit そのものではない。
111
+
112
+ **worktree `run close` でも supervisor 終了でも畳まれない。** 畳むのは `run abandon` だけである(`removeScriptedWorktrees` の呼び出しはそこ1箇所)。**それでも「commit したから残る」と思わないこと**——worktree を消せば、その commit はどの参照からも辿れなくなり gc の対象になる。canonical への着地は run の外の別工程であり、`accept` も `run close` も着地の宣言ではない。着地状況は `lattice run landing --run <ref>` が receipt 単位で出す。
113
+
114
+ ## 再着任(context が要約されたら)
115
+
116
+ 自分の context が要約された(=会話の前半が手元に無い)と気づいたら、実装を続ける前に `.team/roles/member.md` と `.team/CLAUDE.md` を読み直して着任し直し、room へ `[再着任] <名前>` を一行投稿する。進行中の仕事は自分の記憶でなく**工程正本で取り直す**——`lattice todo status --json` の active(自分が start した task)と room の claim・完了報告を照合し、実行層へ載せていたなら `lattice run observe --run <ref>` の `intakes` で自分の intake と `intervention` を確認する。記憶と正本が食い違ったら、正本を正として食い違いを room で報告する。
117
+
118
+ ## 注意
119
+
120
+ - Lattice の書き込みが `STORE_WRITE_CONFLICT` 等で弾かれたら、1〜2 秒待って同じコマンドを再実行する(同時書込の正常な負け方であり、壊れてはいない)
121
+ - `--parallel-frontier` を付けた start `parallel_frontier_not_applicable` で弾かれたら、それは**その task がもう `next_ready` に居ない**(他人が着手済み・依存で塞がった)という意味である。フラグの不具合ではないので付け外しで粘らず、`lattice todo status --json` room ログで claim 状況を確認し直す
122
+ - claim が衝突したら、Lattice start 記録(誰が in-progress か)を機械の事実として使う。**装置は claim の争いを裁定しない**——装置が見るのは着手済み task 同士の競合だけで、誰が取るかは卓が決める
123
+ - **note が持つものを room の散文へ二重化しない**。設計メモ・タスク固有の経緯は `lattice todo note` に置き、room には決定と進捗だけを流す
124
+ - `to: "all"` の新着では wakeup-bridge がroom全体更新だけを知らせる。`read_log` で部屋を読み、状況を把握して次の行動を判断する。個人DMでは送信者・宛先・本文が直接届くので、その用件へ対応する。read_unread は任意の履歴確認用である
125
+ - **ブラウザ検証に `claude-in-chrome` を使わない。** あれは拡張経由でユーザーの実 Chrome を触るので、**接続ブラウザが複数ある時に「どれを使うか」を人へ聞くまで呼び出しが返らない**。席には聞く相手が居ないので、**無人の席が踏むと自力で復帰できない**(2026-08-08 実測。オーナーが見ていたから10分で解けたが、見ていなければ親が気づくまで卓ごと止まる)。使うのは**自分で起こした headless の Chrome for Testing + CDP**(`--headless=new --remote-debugging-port=<port> --user-data-dir=<temp>` で起こし、playwright MCP や CDP を直に繋ぐ)——**拡張に触らないので、選択待ちもモーダル固着も起きない**。`chrome-devtools` MCP が空いていればそれでもよいが、**他の席が同じ profile を掴んでいると起動できない**(`browser is already running` で落ちる・実測)ので、確実なのは自分で起こす経路
126
+ - **ブラウザ・ポート・常駐 process を占める前に room へ一言**。上の経路でも 9222 等は共有資源で、終わったら **pid 直指定で止める**(`pkill -f` は他席の同名 process を巻き込む)
127
+ - **作業者は自己試験で使う測定器も自ら確かめる。** `cmd | tail` の終了コードはtailのものであり、測りたい処理の成否とは限らない
128
+ - 憲章(.team/CLAUDE.md)が全ての基底である