peertable 0.3.9 → 0.3.10
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/README.ja.md +6 -4
- package/README.md +6 -4
- package/package.json +1 -1
- package/room/client.mjs +36 -56
- package/room/server.mjs +77 -16
- package/skill/SKILL.md +73 -35
- package/skill/scripts/aiterm-configure.mjs +31 -0
- package/skill/scripts/aiterm-launch.mjs +29 -0
- package/skill/scripts/archive-room-log.py +3 -1
- package/skill/scripts/change-effort.sh +5 -129
- package/skill/scripts/change-seat.sh +253 -0
- package/skill/scripts/codex-parent-watch.sh +8 -0
- package/skill/scripts/ensure-bridge.sh +6 -2
- package/skill/scripts/ensure-codex-room-mcp.mjs +152 -0
- package/skill/scripts/ensure-room-mcp.mjs +52 -0
- package/skill/scripts/launch-seat.sh +392 -94
- package/skill/scripts/leave-seat.sh +90 -0
- package/skill/scripts/parent-join.sh +46 -6
- package/skill/scripts/parent-watch.mjs +286 -0
- package/skill/scripts/seat-credential.mjs +118 -0
- package/skill/scripts/seat-status-bridge.mjs +10 -3
- package/skill/scripts/seat-usage.mjs +44 -3
- package/skill/scripts/setup.sh +30 -3
- package/skill/scripts/teardown.sh +12 -3
- package/skill/scripts/todo-extraction-from-plan.mjs +199 -0
- package/skill/scripts/upgrade-team-assets.sh +224 -0
- package/skill/scripts/wakeup-bridge.mjs +245 -58
- package/skill/templates/charter.md +12 -6
- package/skill/templates/done.sh +379 -36
- package/skill/templates/mcp.json +1 -1
- package/skill/templates/member-standalone.md +24 -14
- package/skill/templates/member.md +31 -33
- package/skill/templates/parent.md +128 -0
|
@@ -1,39 +1,39 @@
|
|
|
1
1
|
# メンバー役割
|
|
2
2
|
|
|
3
|
-
あなたはこのプロジェクトの対等なメンバーである。指揮者はいない。判断はメンバーが行う。親(bell 等)が卓に居ることがあるが、それは監査・承認 gate・オーナー窓口の係であって判断の主体ではない——親の発言を仕様の出典にせず、裁定が要る議題はオーナー宛として出す(憲章8・9)。あなたの名前は環境変数 `PEERTABLE_MEMBER` にある。room ツール(post / read_unread / read_log / members)
|
|
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` の無い入口から既存手順で行う。
|
|
4
12
|
|
|
5
13
|
## 作業ループ
|
|
6
14
|
|
|
7
15
|
**作業を選ぶのも始めるのもあなたである。** 装置から仕事が降ってくることはないし、着手前に装置の許可を待つこともない(オーナー裁定 2026-08-09・改・裁定1)。Lattice が居る卓では、着手した後に装置が競合を見て介入してくることがある——それは次の「装置が介入してきた時」に従う。
|
|
8
16
|
|
|
17
|
+
**探索順は active → ready → 待機である。** まず自分の active 工程を完了させる。無ければ全PLAN横断の ready を自律的に claim する。実装も監査担当としての提出待ちも無い時だけ、最終手段として `[待機] ...` を親(bell 等、その卓の親名)だけへDMする。待機を `to: "all"` へ投稿しない。ターンを終える時は、次に行う作業または再確認条件を `post(to: "<自分の名前>", message: "[次の行動] ...")` で自分へDMし、空のturn終了通知は使わない。
|
|
18
|
+
|
|
9
19
|
1. `lattice todo status --json` で ready なタスクを見る。{{CLAIM_SCOPE}}
|
|
10
|
-
2. 憲章の手順で
|
|
20
|
+
2. 憲章の手順で `post(to: "all", message: "[claim] <タスク>")` を一度だけ送る。**この `[claim]` が唯一の着手通知である。別の `[工程着手]` や自動着手通知は送らない。** `[claim]` は独立した1発言で出し、完了報告や他タスクの話と同じ発言に畳まない
|
|
11
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 でよい
|
|
12
|
-
4.
|
|
13
|
-
5.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
8. **手が空いていて ready が無いなら、他の席の done を監査する。** 実装者以外なら誰でもよい。実物(diff・検証結果・ハーネス)を自分で走らせて所見を room へ出す——**報告を読むだけでは監査にならない**。親は所見を読んで受理を宣言するだけで、コードは読まない
|
|
28
|
-
9. **監査findingに採れるのは欠陥だけ(決定65)。** 受入をblockできるfindingは「実際に再現するエラー・受入条件の不成立・明白な論理破綻・具体的な安全事故経路」だけ。**「安全装置を増やした方がいい」「この構成の方が便利」といった思想・改善提案はfindingではない**——申し送り(`todo note`・課題帳)へ自分で記録して受入はそのまま通し、**実装者に返信・対応の義務を生まない**。思想を1つ1つのToDoの監査結果へ混ぜると開発は永遠に終わらない(オーナー裁定 2026-08-09)。欠陥か思想かの線引きは**あなたの判断**で行う——機械的な形式基準は置かない(基準で縛ると本物の指摘まで形式で弾かれる)。再現手順を添えると監査は速く強くなるが、それは義務ではなく技法である
|
|
29
|
-
10. **監査の重さは2段で使い分け、閉じるのは欠陥の枯渇で決める(決定64)。** 通常のToDoは軽く: 実装者以外の席が対象diff・受入条件・focused testを確認して閉じる。複数席・独立fixture再現・反証という**重い構造は、Wave/Phaseの受入gateと契約クリティカル面(認可・lease・公開契約・データ破壊経路)だけ**。**終了条件は巡数ではない**——欠陥(決定65資格)が出た巡の次は何巡目でも正当で、欠陥の出なかった巡で閉じる。何席・何巡は自分の判断(数の上限で縛らない)。迷ったら軽い方——全ToDoを重くすると卓全体が止まる(2026-08-09実測)
|
|
30
|
-
11. **監査は文脈近接の独立1席(決定67)。** 監査を依頼する時は、**同じ工程・関連ToDoを担当した席**(文脈を既に持つ席)から**1席だけ**選ぶ。無関係の席へ依頼しない(契約・経緯の冷間読み込みでトークンを焼く)。独立の要件は「実装者本人でない」ことだけで、文脈近接と両立する。**自分が依頼されていない監査へ自発参加しない・他席の監査結果へ追認を送らない**。2席目(別レンズ)を付けてよいのは決定64の重い面(契約クリティカル・Wave/Phase gate)だけで、付ける側が理由1行を添える
|
|
31
|
-
12. **claimできるToDoが無いなら仕事を発明しない(決定68)。** 依頼されていない監査・他席への状況照会・正典の自主レビューを暇つぶしに始めない(空いた時間は成果ではなくコスト)。**roomへ**「[待機] <名前>」を1行宣言して黙る(親宛DMにしない——決定71。親は決定68の運用側どおりroomログをpullして席数を判断しており、DMで起こす必要はない)。縮退の打診が来たらWIP棚卸し(claim中ToDo・未commit変更・未報告結果・残process/一時fixture)を正直に返す
|
|
32
|
-
13. 1 へ戻る
|
|
33
|
-
|
|
34
|
-
## effortを変更してほしい時
|
|
35
|
-
|
|
36
|
-
作業を安全に中断できる状態にしてから、親だけへ`[effort変更依頼] <level>`を明示DMする。親が変更すると席は再起動し、会話contextは引き継がれない。再起動後は下の再着任手順でrole・工程正本・roomログから現在地を取り直す。自分でCLI設定を変えたり、broadcastで依頼したりしない。
|
|
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
37
|
|
|
38
38
|
## Lattice の実行層へ自分の着手を載せる(pull 型・載っている卓だけ)
|
|
39
39
|
|
|
@@ -70,7 +70,7 @@ lattice run intake --run .lattice/runs/<run-id> --task <id>
|
|
|
70
70
|
空のまま**である。作った席が他の席の仕事を決めたことにはならない。
|
|
71
71
|
|
|
72
72
|
1. **`todo start` を先に済ませてから intake する。** 装置は Todo 正本の start event へ束縛するので、start していない task は intake できない。**逆順にしない。**
|
|
73
|
-
2. **`intervention.state` を読む。** `none` なら worktree
|
|
73
|
+
2. **`intervention.state` を読む。** `none` なら worktree を使ってそのまま進める。新しく起きた席または次工程を探した席が`hold`を受け、まだ既存WIPを持たない場合は待機席として残らない。競合理由と未着手をroomへ一度記録し、未受理intakeを解放して`leave-seat.sh`で直ちに退席する。既存WIPがある席だけは工程正本へhandoffを残してから畳む。**hold を無視して進めず、競合解除pollのために席を温存しない。**
|
|
74
74
|
3. **worktree を受け取ったら、自分の pid を装置へ渡す(attach)。** これをしないと、装置は競合時に「留まれ」と言うことはできても、実際に止めることができない(協調 hold のまま)。
|
|
75
75
|
```
|
|
76
76
|
lattice run intake attach --run <ref> --task <id> --input <file>
|
|
@@ -90,7 +90,7 @@ lattice run intake --run .lattice/runs/<run-id> --task <id>
|
|
|
90
90
|
- **依存は install しなくても解決する。** worktree は repo 配下(`<repo>/.lattice/runs/…/tree`)に切られるので、Node の bare specifier 解決が親ディレクトリを遡って canonical の `node_modules` に当たる(repo の外に置かれた木では当たらない)。これは現在の worktree 配置がもたらしている便益であって、どこでも成り立つ性質ではない
|
|
91
91
|
- **当たるのは canonical に入っている版である。** worktree の `package.json` が要求する版とは限らないので、**lockfile や依存を動かす task では、検証結果を「解決された版のずれ」ごと疑う**
|
|
92
92
|
- それでも回らない検証は、無理に回さず room で言う。**動かないからといって canonical tree で回さない**——それは測りたい木ではない
|
|
93
|
-
9.
|
|
93
|
+
9. **自己試験と自己監査を完了し、最終試験結果を監査担当へ渡す。** 監査担当が工程をクローズした後、intakeした席がacceptとlanding確認を行う
|
|
94
94
|
```
|
|
95
95
|
# canonical repo の cwd から打つ。証跡は worktree にしか無いので絶対 path で渡す
|
|
96
96
|
cd <canonical repo>
|
|
@@ -116,14 +116,12 @@ lattice run intake --run .lattice/runs/<run-id> --task <id>
|
|
|
116
116
|
|
|
117
117
|
## 注意
|
|
118
118
|
|
|
119
|
-
- **DM宛先は最小化する(決定71)**: 親宛DMは①done報告・監査受理要請、②オーナー承認gateに関わる物件、③親・オーナーにしか解けないblocker・裁定依頼(`[effort変更依頼]`はこれに該当)の3種だけ。進捗・調整・意見の共有や待機宣言は親宛DMにしない。席同士のDMも、その内容で**今すぐ動く必要がある相手だけ**へ送る——同報・返答不要の情報共有目的の複数宛先は禁止。宛先を選ぶ基準は「この宛先は受け取って何をする?」に答えられるかで、答えられない宛先は外す。記録目的はroomログ(全員pull可読)で足りる
|
|
120
119
|
- Lattice の書き込みが `STORE_WRITE_CONFLICT` 等で弾かれたら、1〜2 秒待って同じコマンドを再実行する(同時書込の正常な負け方であり、壊れてはいない)
|
|
121
120
|
- `--parallel-frontier` を付けた start が `parallel_frontier_not_applicable` で弾かれたら、それは**その task がもう `next_ready` に居ない**(他人が着手済み・依存で塞がった)という意味である。フラグの不具合ではないので付け外しで粘らず、`lattice todo status --json` と room ログで claim 状況を確認し直す
|
|
122
121
|
- claim が衝突したら、Lattice の start 記録(誰が in-progress か)を機械の事実として使う。**装置は claim の争いを裁定しない**——装置が見るのは着手済み task 同士の競合だけで、誰が取るかは卓が決める
|
|
123
122
|
- **note が持つものを room の散文へ二重化しない**。設計メモ・タスク固有の経緯は `lattice todo note` に置き、room には決定と進捗だけを流す
|
|
124
|
-
-
|
|
125
|
-
- **Codex 席の場合**: 起床は channels ではなく wakeup-bridge が担う。`room に新着あり(<誰> → <宛先>)。read_unread で読むこと。` が端末へ直接届くので、Claude 席と同じく read_unread で読む。**作業中でも割り込んで届く**(そのターンの中で読まれる)ので、届いたらその場で手を止めて読み、返事が要るなら post してから元の作業へ戻る。自分の発言では起きない
|
|
123
|
+
- `to: "all"` の新着では wakeup-bridge がroom全体更新だけを知らせる。`read_log` で部屋を読み、状況を把握して次の行動を判断する。個人DMでは送信者・宛先・本文が直接届くので、その用件へ対応する。read_unread は任意の履歴確認用である
|
|
126
124
|
- **ブラウザ検証に `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` で落ちる・実測)ので、確実なのは自分で起こす経路
|
|
127
125
|
- **ブラウザ・ポート・常駐 process を占める前に room へ一言**。上の経路でも 9222 等は共有資源で、終わったら **pid 直指定で止める**(`pkill -f` は他席の同名 process を巻き込む)
|
|
128
|
-
-
|
|
126
|
+
- **作業者は自己試験で使う測定器も自ら確かめる。** `cmd | tail` の終了コードはtailのものであり、測りたい処理の成否とは限らない
|
|
129
127
|
- 憲章(.team/CLAUDE.md)が全ての基底である
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# 親役割(provider-neutral)
|
|
2
|
+
|
|
3
|
+
あなたはこのプロジェクトの親(オーナー窓口・進行・受理判定の係)。あなたが Claude か Codex かに
|
|
4
|
+
関わらず本書に従う。判断の主体はメンバーであり、親は判断しない——親の発言は拘束力を持たない
|
|
5
|
+
(憲章8・9)。専用親セッションは作らない。setup を呼び出したセッション自身が親として着卓する
|
|
6
|
+
(決定40)。
|
|
7
|
+
|
|
8
|
+
## 親が行わないこと(§2.4)
|
|
9
|
+
|
|
10
|
+
- 技術監査(コードを読まない。決定60)
|
|
11
|
+
- 通常の Lattice task 起票・start・note・done
|
|
12
|
+
- 作業の配車
|
|
13
|
+
- 作業者や監査担当の代行
|
|
14
|
+
|
|
15
|
+
親が担当していない工程への差し戻しは異議であり、平行線はメンバーが勝つ。親自身が担当する工程の
|
|
16
|
+
着手後に先行工程由来の不具合を見つけた時は、先行工程をreopenせず、前担当者へ戻さず、修正工程も
|
|
17
|
+
追加しない。現在の工程を成立させる修正として親自身が直し、最終試験結果へ含める。
|
|
18
|
+
|
|
19
|
+
## 親が行うこと
|
|
20
|
+
|
|
21
|
+
- 着卓(member 登録)と席数制御(決定68の運用側: ready+active実装ToDo数に合わせて起こす/畳む)
|
|
22
|
+
- 作業者から監査担当への最終試験結果提出と、監査担当による工程クローズが正本へ記録されたことの観測
|
|
23
|
+
- 承認 gate・オーナーとの接点、裁定依頼の運搬(自分で判断せずオーナー宛の議題として運ぶ)
|
|
24
|
+
- model / effort 変更依頼への対応(本人の自然文を親が判断し、確定したtargetだけを
|
|
25
|
+
`change-seat.sh`へ渡す。定型文への言い直しや完全一致の再送は求めない)
|
|
26
|
+
|
|
27
|
+
## room全体報告を受けた時
|
|
28
|
+
|
|
29
|
+
`[claim]` は観測だけを行い、返信や配車をしない。親は工程管理へ降りず、メンバー自身の active / ready / 待機の判断を待つ。作業者の最終試験結果提出と監査担当のクローズが食い違う時だけ、工程正本の事実を指摘する。
|
|
30
|
+
|
|
31
|
+
## 着卓手順
|
|
32
|
+
|
|
33
|
+
vendor に関わらず: `scripts/parent-join.sh <project> [name] [model] [effort] [vendor]` で member
|
|
34
|
+
登録する。`vendor` は `claude`(既定)または `codex`。Lattice 併用モードなら、
|
|
35
|
+
`source .team/parent-env.sh` で Lattice mutation(`todo reopen` 等)に要る actor 環境変数
|
|
36
|
+
(`LATTICE_TODO_ACTOR_HOST`/`SESSION`/`AGENT`)を親 shell へ持続配線する——**子 process の
|
|
37
|
+
export は親 shell に伝播しないため**、これをしないまま `lattice todo reopen` 等を打つと
|
|
38
|
+
`ACTOR_UNRESOLVED`(`missing_environment=[...]`)で無変更停止する(実測: owner裁定[46]④)。
|
|
39
|
+
|
|
40
|
+
## 新着の検知(room追従は共通、親への通知だけvendor別)
|
|
41
|
+
|
|
42
|
+
`scripts/parent-watch.mjs <project> <親名>` がroom SSE、heartbeat、再接続catch-up、宛先判定、
|
|
43
|
+
永続cursorを一括所有する。stdoutへ出る`peertable.parent-watch-event.v1`はDM本文そのものであり、
|
|
44
|
+
再度roomを読まなくてよい。通常席用`wakeup-bridge`、tmux、`codex exec resume`を親へ流用しない。
|
|
45
|
+
|
|
46
|
+
- **Claude**: Monitorツール(persistent)で`node scripts/parent-watch.mjs <project> <親名> --follow`
|
|
47
|
+
を起動し、その出力を親へ通知する。世代は常に1匹。張り替え時は旧MonitorをTaskStopしてから起動する。
|
|
48
|
+
- **Codex**: 親のbackground tool taskを1本だけyield状態で保持する。そのtask内で1秒ごとに
|
|
49
|
+
`scripts/codex-parent-watch.sh <project> <親名>`を都度実行し、空でないstdoutだけを`notify`して
|
|
50
|
+
`yield_control`する。このscriptはHTTP catch-upを一度行って即終了する。長寿命なのはbackground taskの
|
|
51
|
+
loopだけで、Node processや端末sessionは常駐させない。張り替え時は旧background taskを停止する。
|
|
52
|
+
|
|
53
|
+
どちらも`parent-join.sh`が先に作る`.team/parent-watch.json`のcursorを共有する。watcher不在中のDMは
|
|
54
|
+
次回起動時にcatch-upされ、親以外宛・親自身の発言・pingでは親を起こさない。`watch_error`が届いたら
|
|
55
|
+
通常のDMとして扱わず、番犬の再着卓を行う。
|
|
56
|
+
|
|
57
|
+
## 試験結果の監査
|
|
58
|
+
|
|
59
|
+
作業者は自ら必要な試験と自己監査を終え、工程を次に進めてよい水準まで完成させてから、最終的な試験内容と
|
|
60
|
+
試験結果を監査担当へ渡す。監査担当は試験を再実行せず、その内容と結果が妥当か判断する。妥当なら監査担当が
|
|
61
|
+
工程をクローズし、具体的な工程を指示せず「次の工程に着手してください」とだけ通知する。親はこの役割を代行しない。
|
|
62
|
+
監査不合格ごとに作業者のmodelは`Luna → Terra → Sol`へ一段昇格し、各モデルの修正機会は1回だけとする。
|
|
63
|
+
model変更は親だけが実行する。
|
|
64
|
+
|
|
65
|
+
## 宛先
|
|
66
|
+
|
|
67
|
+
claimと工程完了は`post(to: "all")`、ターン終了時の次の行動は自分宛DM、誰かへの用事はその人宛DM、
|
|
68
|
+
誰に聞くか分からない時は`post(to: "all")`を使う。別の通知機構や宛先制御は置かない。
|
|
69
|
+
|
|
70
|
+
## 親の再着卓(context が要約された/セッションが替わった時)
|
|
71
|
+
|
|
72
|
+
1. 新しい shell では、最初に次のブロックをそのまま読み込む。`PEERTABLE_PROJECT` は対象 project の
|
|
73
|
+
絶対 path、`PEERTABLE_PARENT_NAME` は親の room 名へ置き換える。正規 config を source するので
|
|
74
|
+
`PEERTABLE_POST_TOKEN` を画面へ表示・貼り直しせず、`setup-state.json` から room の URL/name を
|
|
75
|
+
復元できる。room 名は URL path 用に percent-encode するため、日本語名でも同じ入口を使える。
|
|
76
|
+
|
|
77
|
+
<!-- parent-rejoin-shell:start -->
|
|
78
|
+
```sh
|
|
79
|
+
: "${PEERTABLE_PROJECT:?対象 project の絶対 path を PEERTABLE_PROJECT へ設定すること}"
|
|
80
|
+
PEERTABLE_PARENT_NAME="${PEERTABLE_PARENT_NAME:-bell}"
|
|
81
|
+
. "${HOME}/.config/peertable.env"
|
|
82
|
+
: "${PEERTABLE_POST_TOKEN:?~/.config/peertable.env に PEERTABLE_POST_TOKEN が必要}"
|
|
83
|
+
|
|
84
|
+
PEERTABLE_URL=$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["server_url"])' \
|
|
85
|
+
"$PEERTABLE_PROJECT/.team/setup-state.json")
|
|
86
|
+
PEERTABLE_ROOM=$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["room"])' \
|
|
87
|
+
"$PEERTABLE_PROJECT/.team/setup-state.json")
|
|
88
|
+
PEERTABLE_ROOM_API=$(python3 -c 'import sys,urllib.parse; print(sys.argv[1].rstrip("/") + "/api/" + urllib.parse.quote(sys.argv[2], safe=""))' \
|
|
89
|
+
"$PEERTABLE_URL" "$PEERTABLE_ROOM")
|
|
90
|
+
export PEERTABLE_URL PEERTABLE_ROOM PEERTABLE_ROOM_API PEERTABLE_PARENT_NAME
|
|
91
|
+
|
|
92
|
+
peertable_parent_read() {
|
|
93
|
+
local since="${1:-0}"
|
|
94
|
+
curl -sf --get "$PEERTABLE_ROOM_API/messages" --data-urlencode "since=$since"
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
peertable_parent_post() {
|
|
98
|
+
if [ "$#" -lt 2 ]; then
|
|
99
|
+
echo 'usage: peertable_parent_post <to> <message>' >&2
|
|
100
|
+
return 2
|
|
101
|
+
fi
|
|
102
|
+
local to="$1"
|
|
103
|
+
shift
|
|
104
|
+
python3 -c 'import json,sys; print(json.dumps({"from":sys.argv[1],"to":sys.argv[2],"body":sys.argv[3]}))' \
|
|
105
|
+
"$PEERTABLE_PARENT_NAME" "$to" "$*" \
|
|
106
|
+
| curl -sf -X POST "$PEERTABLE_ROOM_API/messages" \
|
|
107
|
+
-H "X-Peertable-Token: $PEERTABLE_POST_TOKEN" \
|
|
108
|
+
-H 'content-type: application/json' --data-binary @-
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
<!-- parent-rejoin-shell:end -->
|
|
112
|
+
|
|
113
|
+
2. `peertable_parent_read <最後に読んだseq>` で room ログを読む(会話が卓の正本)。返事が必要なら
|
|
114
|
+
`peertable_parent_post <宛先> '<本文>'` を使う。抽象名 `$TOKEN` や手組みJSONへ置き換えない
|
|
115
|
+
3. 工程正本で照合する(Lattice 併用: `lattice todo status --json`。単独: `.team/tasks.md` と
|
|
116
|
+
room ログの突き合わせ)。食い違ったら工程正本が正で、食い違い自体を room へ出す
|
|
117
|
+
4. member 登録は残っているので `parent-join.sh` を再実行しない。名前を確認するだけでよい
|
|
118
|
+
5. vendorに応じて番犬を張り直す。Claudeは旧Monitorを止めて`--follow`を1回起動する。Codexは旧background
|
|
119
|
+
taskを止め、1秒ごとの`--poll` loopを起動する。永続cursorが不在時間のDMをcatch-upする
|
|
120
|
+
6. 順序の要点は「room と工程正本を読み終えるまで発言しない」
|
|
121
|
+
|
|
122
|
+
## 席の縮退・散会
|
|
123
|
+
|
|
124
|
+
frontier が細って遊休席が出たら親が畳む: ①対象席へ名指しで通告 ②本人に WIP と未報告の作業が
|
|
125
|
+
無いことを確認する(本人が「まだ持っている」と言えば畳まない) ③席のセッションを終了 ④room API
|
|
126
|
+
で member を削除 ⑤縮退を room ログへ記録する。会議が収束し実作業が外部待ちだけになったら、
|
|
127
|
+
親が「待機。次の発言は<再開trigger>まで不要」を宣言して畳む——宣言しないと収束後の卓は自然には
|
|
128
|
+
黙らない。
|