Repository navigation
Description
親: #2168(Neural Development Factory)。前提: #2171(実行ジョブの token の検証・進捗の受け口。閉じた)・#2186(実行の制御への再開。閉じた)。承認待ちの一覧(読むだけの画面と API の listApprovalRequests)は #2430 が作る(設計 PR #2570 はマージ済み。一覧を #2430 が受け持つことは利用者が了承済み)。この課題はその画面へ答える操作と通知を足す。受け入れ条件 1・3 の「対応待ち」の一覧と #2430 の一覧との関係は、着手の前に見直す(#2430 の未決 3)。画面の土台は #2382(閉じた)、オフラインで読む形は #2383、API と MCP の形は #2384(閉じた。委任の token は factory/api/src/delegations/ と factory/api/src/auth/resolve.ts にある)に合わせる。
形と契約は サービス全体の確定仕様 の「進捗の事象の種類と受け口」「実行ジョブの指示」と、契約の定義と型・進捗の受け口・実行ジョブの token、実行の制御とランナー にある。この課題は集約「承認の依頼」の持ち主で、gate.answered の書き手、承認の依頼の答えを読む経路(GET /run-jobs/approval-requests/{approvalRequestId}/answer)の実装、実行の制御への再開の要求(requestResume)の呼び手である(確定仕様の「受け持つ課題」の #2173 の行)。
依頼(原文)
- 承認ゲートで通知。Slack通知も設定可能
(書き手: 利用者、日付: 2026-10-30。#2168 の構想を伝えた会話の原文のうち、この課題が受け持つ行。全文は #2169 の「依頼(原文)」にある)
承認ゲート以外のユーザー問い合わせは原則hookで止めてAIが判断するように強制する必要があります。
どうしても判断が不可能な場合(金銭的コストがかかるなど)の場合のみ、AskUserQuestionを出して判断を求めます。
(書き手: 利用者、日付: 2026-10-31。#2206 の「依頼(原文)」。この課題の「判断」の扱いの出所)
承認ゲートに達したスプリントを利用者へ通知し、Web から承認して工程を続けられるようにする。
(書き手: 起票者、日付: 2026-10-30。この課題の旧本文の「何をするか」)
- 承認ゲート(設計 Pull Request のマージ・本番系へ届く操作)に達すると利用者へ通知が届く(Neural Development Factory: NDF を Web UI で操作できる Software Factory のサービスにする #2168 の条件 7)
- Slack の通知先を設定できる
- Web から承認すると工程が続く
- 承認ゲートの数は増やさない(2 つのまま)
判断(
gate.reachedの種類「判断」)は、NDF の hook が通した問い合わせだけになる(#2206、2026-10-31 の利用者の方針)。 費用がかかるなど AI が決められないものに限る。画面は承認と分け、判断しなかった理由と見込みの費用を先に出す(モック https://claude.ai/artifact/MYL6CPBTsm6JFTNgtiwY2J )
(書き手: 起票者、日付: 2026-10-30・2026-10-31。旧本文の「受け入れ条件(案)」。条件 1〜3 は上の利用者の原文と #2168 の受け入れ条件 7 の書き起こし、条件 4 は #2168 の方針の表から引いたもの)
- 承認の判断材料は必ず仕様書とコードまで辿れる。設計文書の節(決定の記録と依拠する確定仕様)は画面の中で開き、コードは GitHub の PR の差分へ飛ばす(差分の閲覧は作らない)。ゲート 2 は中身の行ごとに課題・差分・確定仕様へのリンクを持つ(モック https://claude.ai/artifact/MYL6CPBTsm6JFTNgtiwY2J の「承認ゲートで承認する」)
(書き手: 起票者、日付: 2026-10-31。旧本文の「画面の方針(2026-10-31 の利用者の指摘、モックで確かめる)」。利用者の指摘の原文は課題に無いため、利用者の文としては扱わず、指摘の中身(材料から仕様書とコードへ辿れる・差分の閲覧は作らない)を利用者の方針として読む)
利用者の指示で、マイルストーン「25 Neural Development Factory」の説明にスプリント MVV を置いた(操作性と UX 重視・画面先行・オフライン利用・AI からも人と同じく使える・国や地域を越えて使える。#2168 の方針の表にも同じ行がある)。この課題の画面は #2382(UX の土台)の上に作り、#2383(オフラインで読める)と #2384(API と MCP から画面と同じ操作)の形に合わせる。
(書き手: 起票者、日付: 2026-11-02。旧本文の「前提にする方針」。スプリント MVV そのものは利用者が承認済み)
起票者の推定
題・本文のうち、利用者の指示の原文に無く起票者が推して足した条件。承認ゲート 1 で利用者が確かめるまで、利用者の決定として扱わない。
| # | 条件 | 推した出所 | この要求での扱い |
|---|---|---|---|
| S1 | 通知する承認ゲートは「設計 Pull Request のマージ」と「本番系へ届く操作」の 2 つで、数は増やさない | #2168 の受け入れ条件 7 と方針の表、確定仕様の I11(ゲート 1 で利用者が承認済み) | 受け入れ条件 1・10 |
| S2 | 判断(gate.reached の種類「判断」)は承認と分けた画面で答え、判断しなかった理由と見込みの費用を先に出す |
旧本文の受け入れ条件(案)の後の段落と #2206 | 受け入れ条件 7・前提 6 |
| S3 | 承認の材料から設計文書の節を画面の中で開き、コードは GitHub の Pull Request の差分へ飛ばす。差分の閲覧は作らない | 旧本文の「画面の方針」 | 受け入れ条件 5・6・前提 7・含まない |
| S4 | ゲート 2 の材料は中身の行ごとに課題・差分・確定仕様へのリンクを持つ | 旧本文の「画面の方針」 | 受け入れ条件 6・前提 8 |
| S5 | attention と起票の代行の下書き(issue.request_resolved の drafted)も知らせとして通知する |
確定仕様の「進捗の事象の種類と受け口」の主な受け手に #2173 がある | 受け入れ条件 3・前提 4 |
| S6 | Web の通知は画面の中の「対応待ち」の一覧と件数で、ブラウザの押し出しの通知(Web Push)とメールは作らない | 起票者(この要求を書いた AI)の推定。#2172 が押し出しの通知を作らないと決めたことと、スプリント Value 6(費用の増える仕組みを足すときは理由を示す) | 前提 3・含まない |
| S7 | Slack の通知先は Slack の Incoming Webhook の URL で、アカウントごとに 1 つ持ち、秘密として保存する | 起票者の推定。確定仕様が Slack の Webhook の URL を秘密として扱うと定める(「秘密の置き場」) | 前提 5・受け入れ条件 11〜13 |
目的
- スプリントの実行が承認ゲートか判断で止まったことを、利用者が CLI のセッションの前にいなくても知れる状態にする(Neural Development Factory: NDF を Web UI で操作できる Software Factory のサービスにする #2168 の受け入れ条件 7)
- 利用者が Web の画面から、材料を読んで承認・差し戻し・判断への答えを確定でき、確定するとスプリントの実行が新しい実行ジョブで続く状態にする
- 承認を求める種類をゲート 1・ゲート 2 の 2 つのまま保ち、判断と知らせを承認と見分けられる状態にする
前提
- 前提 1: 承認の依頼は、進捗の記録に
gate.reachedが追記されたことを引き金に、この課題のサービスが 1 件作る。1 つのgate.reachedから作る依頼は 1 件で、同じ事象を 2 度読んでも 2 件目を作らない。追記を知る手段(表のストリーム・定期の読み出し)は設計で決める - 前提 2: 承認の依頼の種類は
gate1・gate2・decisionの 3 つで、答えを「承認か差し戻し」で求めるのはgate1・gate2だけである。decisionは指示の本文だけを答えとして受ける(確定仕様の I11 と「resume の手順」の表) - 前提 3: Web の通知は、画面の中の「対応待ち」(答えの無い承認の依頼と未読の知らせ)の一覧と、ナビゲーションに出す件数である。画面は開いている間 30 秒ごとに読み直す(NDF Factory: スプリントの一覧(フェーズ)と詳細(工程・PR・CI・承認ゲート) #2172 の前提 7 と同じ間隔の設定を使う)。ブラウザの押し出しの通知とメールは作らない
- 前提 4: 知らせは、答えを求めない通知である。対象は
attention、issue.request_resolvedのdrafted、decisionの承認の依頼の 3 つで、Slack と画面の両方へ出す。decision.delegated(AI が代わりに判断した記録)は知らせにしない(NDF Factory: スプリントの一覧(フェーズ)と詳細(工程・PR・CI・承認ゲート) #2172 が詳細に出す) - 前提 5: Slack の通知先は、アカウントごとに 1 つの Slack の Incoming Webhook の URL とする。URL は秘密として扱い、保存した後は画面と API に値を返さず、末尾の数字だけを見せる。保存の手段は持ち込んだキーの保存(NDF Factory: スプリントの実行の制御とランナー #2186 の
model-credential)と同じ形(Secrets Manager に置き、サービスは ARN だけを持つ)に合わせ、置き場の作成はインフラ(private リポジトリ)が持つ。チームのアカウントで通知先を設定・消去できるのは管理者だけで、個人のアカウントでは持ち主が行う - 前提 6: 判断の材料に出す「判断しなかった理由」と「見込みの費用」は、
gate.reached(decision)のmaterialの本文にあるものを出す。materialに無ければその欄に「記録なし」と出し、進捗の事象の形は変えない - 前提 7: 設計文書の節を画面の中で開く操作は、材料の本文にある、そのスプリントの実行のリポジトリの
.mdファイルへのリンク(GitHub の URL)だけに効く。読み出しは GitHub App の導入の token(NDF Factory: スプリントの実行の制御とランナー #2186 の GitHub の口)で、Pull Request の head のコミットのファイルを読み、Markdown として出す。ほかのリポジトリ・ほかの拡張子・外部の URL は新しいタブで開くリンクのまま出す - 前提 8: ゲート 2 の「中身の行ごとのリンク」は、NDF の承認資料(
development-workflowのreferences/approval-request.mdの「対象が複数あるとき」)が行ごとに書く生の URL をリンクとして出すことで満たす。材料の本文を構造へ読み替える解釈は持たない。NDF の承認資料の形は変えない - 前提 9: Web からの答えは、答えた人が
resolveAccountで解決できるアカウントのスプリントの実行の依頼に限り、チームのアカウントでは席を持つ人なら誰でも答えられる。gate.answeredの「答えた人のアカウント」は解決の結果のaccountIdを使う - 前提 10: 答えの確定はオンラインでだけ行う。オフラインで押した答えは確定させず、つながってから依頼がまだ答えを待っているかをサーバーで照らして確定する(スプリント Value 3)。端末への保存と同期の中身は NDF Factory: つながらないときも、最後に受け取ったスプリントの一覧・詳細・承認資料を端末で読める #2383 が持ち、この課題は画面が NDF Factory: つながらないときも、最後に受け取ったスプリントの一覧・詳細・承認資料を端末で読める #2383 の形を使うところまでを持つ
- 前提 11: 答えを確定できるのは人の Cognito の token だけである。NDF Factory: 画面で行える操作を API と MCP からも同じく行える(機能から起こした配列の入出力・委任の認証・追記だけの操作の記録) #2384 の委任の token(AI のエージェント・MCP のクライアント)は依頼と材料を読めるが、答えの確定は 403 になる(スプリント Value 4)。委任の token の見分けには NDF Factory: 画面で行える操作を API と MCP からも同じく行える(機能から起こした配列の入出力・委任の認証・追記だけの操作の記録) #2384 が入れた
factory/api/src/auth/resolve.tsのisDelegationAuthorizationを使う - 前提 12: 答えを保存した後の順序は、答えを依頼へ保存する →
gate.answeredを IAM ロールの署名で書く →requestResumeを呼ぶ、である。requestResumeがsprint_run_busyを返したら時間をおいて呼び直し、not_awaiting_approval・not_foundなら答えを保存したまま依頼を「再開できない」として画面に理由を出す - 前提 13: 1 つの依頼への答えは 1 つである。答え済みの依頼へ 2 度目の答えを送ると 409 を返し、先の答えを変えない
- 前提 14: Slack へ送れなかった通知は、画面の対応待ちには必ず出し、Slack へは決めた回数まで送り直す。回数と間隔は設計で決める。送れなかったことは通知先の画面に最後の失敗の日時として出す
- 前提 15: 画面の文言は国際化の仕組み(
factory/web/src/i18n/)で持ち、日時は UTC で受けて利用者の時刻帯で出す(スプリント Value 5)。Slack へ送る文の言語は日本語の 1 つとし、言語を足すときに送る側のコードを書き換えずに済む形にする
対象範囲
含む:
- 承認の依頼の集約(作成・保存・答え・状態)と、
gate.reachedから依頼を作る処理 - 知らせの作成(前提 4)と、画面の対応待ちの一覧・件数
- Slack の通知先の設定・消去・試しに送る操作と、Slack への送信
- 承認の画面(材料の表示・設計文書の節を開く・承認・差し戻し・判断への答え)と、一覧と詳細(NDF Factory: スプリントの一覧(フェーズ)と詳細(工程・PR・CI・承認ゲート) #2172)からの導線
- 答えの保存・
gate.answeredの書き込み・requestResumeの呼び出し - 答えを読む経路
GET /run-jobs/approval-requests/{approvalRequestId}/answerの実装と、進捗の受け口の保存済みの答えの口(factory/api/src/progress/saved-answers.tsのsavedAnswersFromEnv)を本物の読み出しへ替えること - これらの API の経路と OpenAPI(
factory/contracts/openapi/)。入出力は配列で受け渡す(スプリント Value 2) - 画面の地図(ndf-factory-screen-map.md)の「承認」の行を「未定・予定」から経路のある行へ直すこと
含まない:
- 承認ゲートの数と置き場所の変更(NDF の
development-workflowが持つ) - NDF の hook と
ask.jsonl(hook: 承認ゲートの外の問い合わせを止めて AI に判断させ、費用がかかる判断だけを人へ回す #2206。閉じた)、NDF の承認資料の形 - 差分の閲覧(GitHub の Pull Request へ飛ばす)
- ブラウザの押し出しの通知(Web Push)・メール・Slack 以外のチャットへの通知
- Slack App(OAuth でワークスペースへ入れる形)・Slack の画面から答えるボタン
- 端末への保存・暗号化・同期(NDF Factory: つながらないときも、最後に受け取ったスプリントの一覧・詳細・承認資料を端末で読める #2383)、MCP の接続と委任の token と操作の記録の仕組み(NDF Factory: 画面で行える操作を API と MCP からも同じく行える(機能から起こした配列の入出力・委任の認証・追記だけの操作の記録) #2384)
- 開発ループの人の判断待ちへの答え(開発ループの確定仕様 の決定どおりループの行に持ち、承認の依頼にしない)
- Secrets Manager の置き場・IAM ロール・DynamoDB の表・表のストリームなどインフラの定義(private リポジトリ)
ドメインイベント
| # | イベント | 引き金 | 失敗したとき | 順序の前提 |
|---|---|---|---|---|
| E1 | ランナーが gate.reached と job.finished(gate)を送った |
作業の報告の 判断が要る と承認資料 |
送れない → 実行の制御が job.finished(failed)を書き、依頼は作られない |
スプリントの実行が実行中 |
| E2 | 承認の依頼を作った | E1 の gate.reached の追記 |
作れない → 次の読み出しで作り直す。同じ事象から 2 件目は作らない(前提 1) | E1 |
| E3 | 知らせを作った | attention・issue.request_resolved(drafted)の追記、decision の依頼の作成 |
E2 と同じ | 該当の事象 |
| E4 | Slack へ通知を送った | E2・E3 と通知先の設定 | 送れない → 送り直し、画面には出す(前提 14) | E2 か E3、通知先が設定済み |
| E5 | 利用者が承認の画面を開き、材料を読んだ | 対応待ちの一覧・Slack のリンク・スプリントの詳細 | 他人のもの → 403。設計文書の節を読めない → その節に読めない旨を出し、GitHub へのリンクを残す | E2 |
| E6 | 利用者が答えた(承認・差し戻し・判断の本文) | 画面の操作 | 答え済み → 409。オフライン → 確定しない(前提 10)。委任の token → 403 | E5 |
| E7 | 答えを承認の依頼へ保存した | E6 | 保存できない → 5xx で gate.answered を書かない |
E6 |
| E8 | gate.answered を進捗の記録へ書いた |
E7 | 受け口が 403 か 503 → 再開を呼ばず、依頼を「再開できない」にして理由を出す | E7 |
| E9 | 実行の制御へ再開を求めた | E8 | sprint_run_busy → 送り直す。not_awaiting_approval・not_found → 「再開できない」(前提 12) |
E8、実行が承認待ち |
| E10 | ランナーが答えを読んだ | resume の実行ジョブ |
token が無効・別の実行の依頼 → 403、答えが無い → 409 | E9 |
| E11 | 利用者が Slack の通知先を設定・消去・試しに送った | 通知先の画面の操作 | URL の形が違う → 400。権限が無い → 403。試しの送信の失敗 → 失敗の理由を出す | ログイン済み |
用語
| 用語 | 意味 |
|---|---|
| 承認の依頼 | スプリントの実行が承認ゲートか判断で止まったときに作る、答えを待つ 1 件の記録。種類(ゲート 1・ゲート 2・判断)・材料・答えを持つ |
| 知らせ | 答えを求めない通知。attention・起票の代行の下書き・判断の依頼の作成を利用者へ伝える |
| 対応待ち | 答えの無い承認の依頼と未読の知らせを並べた、画面の中の一覧 |
| 通知先 | アカウントごとに 1 つの Slack の Incoming Webhook の URL |
受け入れ条件
承認の依頼と通知:
- 1.
gate.reached(kindがgate1)が追記されると、そのスプリントの実行の承認の依頼が 1 件でき、対応待ちの一覧に種類「ゲート 1」・リポジトリ・課題の番号・Pull Request の URL・止まった日時で出る。gate2も同じく「ゲート 2」で出る - 2. 同じ
gate.reachedを 2 度処理しても、承認の依頼は 1 件のままである - 3.
attention・issue.request_resolved(outcomeがdrafted)・gate.reached(decision)が追記されると、知らせが対応待ちに出る。decision.delegatedは対応待ちに出ない - 4. 通知先を設定したアカウントでは、条件 1 と 3 の承認の依頼と知らせごとに Slack へ 1 通送り、本文に種類・リポジトリ・課題の番号と承認の画面の URL が入る。材料の本文と秘密は入らない。通知先が無いアカウントでは送らず、対応待ちには出る
承認の画面:
- 5. 承認の画面に材料(
material)が Markdown で出て、本文の URL はリンクになる。Pull Request の差分へのリンクは GitHub を新しいタブで開き、画面に差分は出ない - 6. 材料にある、そのスプリントの実行のリポジトリの
.mdファイルへのリンクを押すと、Pull Request の head のコミットのその文書が画面の中に出る。ゲート 2 の材料の行ごとの URL(課題・差分・確定仕様)はそれぞれリンクとして出る - 7. 判断の依頼の画面は承認の画面と別の見出しを持ち、「判断しなかった理由」と「見込みの費用」の欄を答えの入力欄より上に出す。
materialに無い欄は「記録なし」と出る。判断の画面に承認と差し戻しのボタンは無く、指示の本文の入力欄と送るボタンだけがある - 8. ゲートの依頼で承認すると答え(
approved)が保存され、gate.answered(decisionがapproved、答えた人のアカウントはresolveAccountのaccountId)が 1 件残り、requestResumeが依頼の識別子で 1 度呼ばれる。差し戻しは本文を必須とし、rejectedで同じ流れになる - 9. 答え済みの依頼へ答えを送ると 409 で、保存済みの答えと
gate.answeredは変わらない。requestResumeがnot_awaiting_approvalを返すと、依頼は「再開できない」になり画面に理由が出る。sprint_run_busyなら送り直し、最後に通れば 1 度だけ再開される - 10. API は 3 つ目の種類の承認を受け付けない。
gate.reachedのkindがgate1・gate2・decisionのどれでもない値の依頼は作られず、承認を求める欄は画面に 2 種類だけある
通知先:
- 11. 個人のアカウントの持ち主とチームのアカウントの管理者は、通知先の URL を保存・消去でき、保存後の読み出しは URL の値を返さない(末尾の 4 字だけを返す)。チームの席の人の保存・消去は 403 になる
- 12.
https://hooks.slack.com/で始まらない URL は 400invalid_requestで、保存されない - 13. 「試しに送る」で Slack へ 1 通送り、Slack が 2xx 以外を返したら状態のコードを画面に出す。保存した URL の値は応答・ログ・進捗の事象に出ない
答えを読む経路と受け口:
- 14.
GET /run-jobs/approval-requests/{approvalRequestId}/answerは、実行ジョブの token のsprint_run_idと依頼の属する実行が一致し答えが保存済みのとき 200 でkind・decision・body・gateを返す。別の実行の依頼・存在しない依頼は同じ本文の 403、答えがまだ無いと 409、token が無効なら 401 を返す - 15. 進捗の受け口の
apiの経路は、保存済みの答えと一致するgate.answeredを 202 で残し、一致しないもの・未保存のものを 403 にする。今の 503 の既定は使われない - 16. 利用者の Cognito の token で
gate.answeredを受け口へ送ると拒まれる(確定仕様の I28 のまま)
認可・オフライン・委任:
- 17. 承認の依頼の一覧・材料・答えの経路は、他人のアカウント・存在しないアカウント・そのアカウントに属さない依頼・存在しない依頼のどれでも、403
forbiddenを同じ本文で返す - 18. つながりの状態がオフラインのとき、承認・差し戻し・送るのボタンは押せず「つながってから確定します」が出る(
ApprovalActionsの既存の振る舞い) - 19. NDF Factory: 画面で行える操作を API と MCP からも同じく行える(機能から起こした配列の入出力・委任の認証・追記だけの操作の記録) #2384 の委任の token(または、それを模した偽の token)で答えを送ると 403 で、答えは保存されない。依頼の一覧と材料は読める
- 20. API が 401 を返すと、画面は token を消してログインの画面へ移る
退行:
- 21.
factory/のnpm run check(CI のfactory-check)と境界の検査(python3 scripts/check-service-boundary.py)が通る - 22. 既存の経路(スプリントの一覧と詳細・実行の制御・開発ループの答え)の項目の名前と型は変わらない(足すだけ)。開発ループの人の判断待ちは承認の依頼を作らない
非機能の条件
| 大項目 | 条件 |
|---|---|
| 可用性 | Slack が応答しない・失敗しても、承認の依頼の作成と画面の対応待ちは止まらない(前提 14) |
| 性能・拡張性 | gate.reached の追記から Slack へ送るまでの時間の上限と、対応待ちの一覧の応答の時間の上限は、設計で追記を知る手段を決めるときに実測して決める |
| 運用・保守性 | 承認の依頼の種類は factory/contracts/ の GateKind の 1 か所から型を得る。Slack へ送れなかった回数をログに残す |
| 移行性 | 進捗の事象の形を変えない。すでに残った gate.reached からは依頼を作らない(この課題の配布より後の追記だけを対象にする)か、作るかを設計で決める(未決 2) |
| セキュリティ | 通知先の URL は秘密として ARN だけを持ち、値を応答・ログ・事象・Slack の本文に出さない。答えの確定は人の token だけ。他人の依頼の有無を本文・状態のコードで区別できない |
影響
| 対象 | 影響 |
|---|---|
| 公開インタフェース | 変わる。API の経路(承認の依頼の一覧と材料・答え・通知先)を足す(互換あり)。答えを読む経路は形が runs.yaml に既にあり、中身を実装する |
| データ | 承認の依頼と通知先の集約を足す。進捗の事象の形は変わらない |
| 既存の振る舞い | 進捗の受け口の api の経路が 503 から照合へ変わる。resume の実行ジョブが答えを読めるようになる。プラグイン(plugins/)の振る舞いは変わらない |
検証手段
| 項目 | 手段 |
|---|---|
| 起動 | factory/ で npm run dev -w web(ダミーの API クライアントの場面で承認の画面を見る) |
| テスト | factory/ で npm run check(vitest を含む) |
| 静的解析・型検査 | factory/ で npm run check。境界は python3 scripts/check-service-boundary.py |
| 手動確認 | リリース後テストで、実環境の 1 本のスプリントの実行をゲート 1 で止め、Slack に通知が届き、Web から承認して新しい実行ジョブが続くことを人が見る。承認の画面の見た目がモックに沿うかを人が見る |
前提とする取り決め
| 項目 | 参照先 / 決めたこと |
|---|---|
| プロジェクト構造 | factory/ の中だけ。plugins/ と .claude-plugin/marketplace.json から factory/ を参照しない(AGENTS.md・境界の検査)。API は factory/api/、画面は factory/web/、契約は factory/contracts/ |
| コーディング規約 | TypeScript。npm の workspaces、ロックファイルは factory/package-lock.json の 1 つ(factory/README.md の「パッケージの管理」)。エラーの本文は {"error": {"code", "message"}}、経路は OpenAPI を正にする。画面の文言は factory/web/src/i18n/ に置く |
| テスト戦略 | 依頼の作成(条件 1〜3・10)と答えの流れ(条件 8・9)は偽の保存と偽の実行の制御で単体テストにする。Slack への送信は偽の HTTP で縛り、本物の Slack は呼ばない。認可(条件 11・17・19・20)と答えを読む経路(条件 14)は API の経路のテスト。画面は部品と画面のテスト(条件 5〜7・18)。.md の文言のテストは書かない |
境界
| 区分 | 内容 |
|---|---|
| 常に行う | npm run check と境界の検査、factory/contracts/ からの型の生成、確定仕様と OpenAPI の同時の更新 |
| 確認してから行う(承認ゲート 1・2 で人が見る) | 秘密(通知先の URL)の保存の形(共通原則 C1)、答えを確定できる者の認可(C2)、API の経路の追加、依存パッケージの追加(Markdown の描画など。スプリント Value 6 に沿い理由と代わりの案を設計に書く) |
| 行わない | 承認ゲートの数を増やすこと、NDF の承認資料と hook の変更、インフラの定義、秘密の値のコミット、plugins/ の変更、差分の閲覧の実装 |
未決
| 項目 | 誰が決めるか | 期限 |
|---|---|---|
| 1. モック https://claude.ai/artifact/MYL6CPBTsm6JFTNgtiwY2J の「承認ゲートで承認する」と判断の画面を、要求を書いた時点で読めなかった(2026-11-02、この工程の実行環境で文書を読むツールの利用が許可されず拒まれた)。読める環境でモックの配置と項目を書き起こし、受け入れ条件 5〜7 を補う | conductor(読める環境で) | 承認ゲート 1 |
2. 配布より前に残った gate.reached から承認の依頼を作るか |
設計 | 設計 Pull Request |
| 3. 進捗の記録への追記を知る手段(DynamoDB の表のストリームか定期の読み出しか)と、Slack への送り直しの回数と間隔 | 設計(実測で決める) | 設計 Pull Request |
| 4. 承認の画面の経路(画面の地図の「承認」の行。依頼ごとの経路か、スプリントの詳細の中か) | 設計 | 設計 Pull Request |
| 5. Markdown の描画に使うライブラリと、材料の HTML を無害にする手段 | 設計 | 設計 Pull Request |
🤖 Generated with Claude Code
進行
モード: —
- 要求と受け入れ条件 — 2026-11-02 13:06
- 作業場所の用意
- 設計 — 2026-11-04 13:07
- 素材の収集と出典の確定
- ドキュメント再構成
- ドキュメントレビュー
- 計画
- 実装
- 構造改善
- 実装レビュー
- 完了判定
- Pull Request
- 確定仕様化
- 後片付け
- 配布
- 体裁レビュー
- リリース後テスト
- 振り返り
- 棚卸し
Activity
Docs: #2169 の契約で、答えの読み出しと gate.answered の受け付けを承認の依頼と照らす