@takagaki/cortex-decisions-viewer 0.4.37 → 0.4.39

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.
Files changed (2) hide show
  1. package/dist/render.js +72 -172
  2. package/package.json +1 -1
package/dist/render.js CHANGED
@@ -269,89 +269,53 @@ function tutorialChallenge4Prompt(decisions) {
269
269
  }
270
270
  /**
271
271
  * 書き込み・外部連携をともなうチャレンジのプロンプト。
272
- * リンク先はクラウド実行のセッションでエンジンのスキルがロードされないため、規約・手順を埋め込んで自己完結させる
273
- * AI導線ボタンのプロンプトと同じ方針)。スキルが使える環境ではそちらを優先させる旨を冒頭に添える。
272
+ * 規約はプロンプトに書き写さず、規約のあるファイル(README.md・template.md)をAIに読ませ、
273
+ * 中身は利用者に聞き返させる(AI導線ボタンのプロンプトと同じ方針)。
274
+ * 規約がどこにも無い手順(外部サービスへのつなぎ方・投稿経路の判定)だけを骨子として残す。
275
+ * スキルが使える環境ではそちらを優先させる旨を冒頭に添える。
274
276
  */
275
277
  const TUT_MEMBER_PROMPT = [
276
- "(update-member スキルが使える環境なら、そのスキルの手順を優先してください。使えない場合は以下に従ってください。)",
278
+ "(update-member スキルが使える環境なら、そのスキルの手順を優先してください。)",
277
279
  "",
278
- "Cortex/Members/records/ にある、わたし自身のメンバーレコードの表示名(title)を変更してください。Gold層へ書き込む練習です。名簿にわたしのレコードが無ければ、新規登録として1ファイル作ってかまいません。",
279
- "",
280
- "前提:",
281
- "- 名簿は更新型です。氏名・所属・役割が変わったら frontmatter・本文を直接更新してかまいません(変更履歴は git が持ちます)",
282
- "- 新しい表記揺れ(文字起こしの誤変換・呼称)は新規ファイルを作らず aliases に追記します",
283
- "- 本人やPMに確認が取れたら status: draft を active に上げます。確証が無い項目は推測で埋めず空のままにします",
284
- "- 離任しても削除せず status: inactive にします(過去の議事録・決定の人名正規化の根拠として残すため)",
285
- "",
286
- "手順:",
287
- "1. Cortex/Members/README.md(スキーマ)と、対象になるレコードを読む",
288
- "2. わたしのレコードが無ければ、ファイル名 records/{氏名(スペース無し)}.md・id member:{氏名(スペース無し)} で新規に作る",
289
- "3. frontmatter の必須は type: member / id(member:{氏名(スペース無し)}) / title / description / status。任意は yomi・aliases・org・side(cm | client | vendor)・role・email。README 定義以外のフィールドは追加しない",
290
- "4. 名簿に書くのは氏名・所属・役割・表記揺れだけ。人の評価・人事・単価・工数は書かない",
291
- "",
292
- "共通ルール:",
293
- "- 書き込む前に、作成・更新する内容を提示して承認を得てください",
294
- "- 同じ人に複数ファイルを作らないよう、既存レコードとの重複を必ず確認してください",
295
- "- relations の target にファイルパスは書かず、安定ID(member:{氏名} / 決定ID YYYYMMDD-NNN / 課題キー 等)で張ってください",
296
- "- 売上・単価・工数・人事評価などの内部限定情報は書かないでください(このリポジトリは顧客も閲覧します)",
280
+ "Cortex/Members/README.md と Cortex/Members/template.md を読んで規約を把握してから、Cortex/Members/records/ にあるわたし自身のメンバーレコードの表示名(title)を変更してください。Gold層へ書き込む練習です。名簿にわたしのレコードが無ければ、新規に1件作ってかまいません。",
281
+ "わたしが誰で、何をどう変えたいかは、まずわたしに質問してください。",
282
+ "あなた(人間)が内容を確認して編集したので、status が draft なら active に上げてください。",
283
+ "書き込む前に、作成・変更する内容を提示して承認を得てください。",
297
284
  ].join("\n");
298
285
  const TUT_BACKLOG_PROMPT = [
299
- "(backlog-push スキルが使える環境なら、そのスキルの手順を優先してください。使えない場合は以下に従ってください。)",
286
+ "(backlog-push スキルが使える環境なら、そのスキルの手順を優先してください。)",
300
287
  "",
301
288
  "Backlogの課題に、わたしの名義でコメントを1件投稿してください。Backlogの画面を開かずにAIから記票する練習です。",
289
+ "どの課題に何を書くかは、まずわたしに質問してください(課題は 課題管理/issues/ から選べます。課題キーは各ファイルの「基本情報 > 課題キー」)。",
302
290
  "",
303
- "Backlogのつなぎ方(本人名義で投稿するには Backlog MCP の接続が必要です):",
304
- "- 手元の Claude Code(CLI・デスクトップ)なら /mcp コマンドから backlog を選んで認証する",
305
- "- クラウドのセッション(claude.ai/code)なら、セッションのコネクタ設定で Backlog を有効にする",
291
+ "投稿経路は次の優先順で判定し、Backlog上の名義とあわせて先に伝えてください。",
292
+ "1. mcp__backlog__ で始まるツール(あなた本人の名義。手元にAPIキーは不要)",
293
+ "2. 環境変数 DOMAIN / PROJECT_KEY / BACKLOG_API_KEY があれば Backlog REST API を直接呼ぶ(キーの持ち主の名義)",
294
+ "3. 課題管理/backlog-proxy.json(url / projectKey / token)の中央プロキシ(共有bot名義になるため、本文の冒頭に自分の名前を記名する)",
295
+ "4. どれも無ければ、つなぎ方(手元の Claude Code なら /mcp コマンドから backlog、クラウドならセッションのコネクタ設定)を案内して止まる",
306
296
  "",
307
- "手順:",
308
- "1. どの経路で書き込むかを次の優先順で判定し、判定結果とBacklog上の名義を最初に伝える",
309
- " - mcp__backlog__ で始まるツールが使えるなら、それを使う(あなた本人の名義。手元にAPIキーは不要)",
310
- " - 使えない場合、環境変数 DOMAIN / PROJECT_KEY / BACKLOG_API_KEY が参照できるなら Backlog REST API を直接呼ぶ(キーの持ち主の名義)",
311
- " - どちらも無ければ 課題管理/backlog-proxy.json(url / projectKey / token)を読み、その中央プロキシ経由で投稿する(共有bot名義になるため、本文の冒頭に自分の名前を記名する)",
312
- " - 3つとも無ければ、上記のつなぎ方を案内して止まる",
313
- "2. 課題管理/issues/ からコメントする課題を1件選ぶ(候補を挙げて確認する)。課題キーは各ファイルの「基本情報 > 課題キー」にある",
314
- "3. 投稿する課題キー・本文・使う経路・Backlog上の名義を提示して、承認を得る",
315
- "4. 承認後に投稿し、投稿先のURLを報告する",
316
- "",
317
- "注意:",
318
- "- 今回はコメントの追加だけです。課題の削除・クローズ・属性変更はしないでください",
319
- "- 売上・単価・工数・人事評価などの内部限定情報は書かないでください(顧客も閲覧します)",
297
+ "投稿する前に、課題キー・本文・経路・名義を提示して承認を得てください。投稿後は投稿先のURLを報告してください。",
298
+ "今回はコメントの追加だけです。課題の削除・クローズ・属性変更はしないでください。",
320
299
  ].join("\n");
321
300
  const TUT_DESIGN_PROMPT = [
322
- "デザイン/inventory/ の画面インベントリから画面を1つ選び、それがどんな画面なのかを説明してください。",
323
- "",
324
- "手順:",
325
- "1. デザイン/inventory/ を一覧し、主要そうな画面を1つ選ぶ(1画面1ファイル。frontmatter に安定ID design:{fileKey}:{nodeId} とFigmaへのディープリンクがあります)",
326
- "2. その画面のファイルを読み、画面の役割・主な要素・前後の画面とのつながりを、読み取れる範囲で説明する",
327
- "3. 関連する決定(Cortex/Decisions/)・用語(Cortex/Glossary/)・課題(課題管理/issues/)があれば、安定IDをたどって補足する",
328
- "4. 最後に、Figmaで実物を開くリンクを提示する",
329
- "",
330
- "注意:",
331
- "- 読むだけです。ファイルの作成・更新はしないでください",
332
- "- インベントリはFigmaからの同期で上書きされる生成物です。手で編集しないでください",
301
+ "デザイン/inventory/ の画面インベントリから画面を1つ選び、それがどんな画面なのかを説明してください。1画面1ファイルで、frontmatter に安定ID(design:{fileKey}:{nodeId})とFigmaへのディープリンクがあります。",
302
+ "どの画面が見たいかは、まずわたしに質問してください(希望が無ければ主要そうな画面をあなたが選んでかまいません)。",
303
+ "画面の役割・主な要素・前後の画面とのつながりを説明し、関連する決定・用語・課題があれば安定IDをたどって補足し、最後にFigmaで実物を開くリンクを提示してください。",
304
+ "読むだけの練習です。インベントリはFigmaからの同期で上書きされる生成物なので、手で編集しないでください。",
333
305
  ].join("\n");
334
306
  const TUT_SLACK_PROMPT = [
335
307
  "Cortex のチュートリアルを完了したことを、この案件の Slack チャンネルに投稿してください。最後のステップです。",
336
308
  "",
337
- "Slackのつなぎ方:",
338
- "- 手元の Claude Code(CLI・デスクトップ)なら /mcp コマンドから slack を選んで認可する",
339
- "- クラウドのセッション(claude.ai/code)なら、セッションのコネクタ設定で Slack を有効にする",
340
- "- どちらもできない場合は、その旨とつなぎ方を案内して止まってください",
341
- "",
342
- "手順:",
343
- "1. チャット/channels.json を読み、登録されているチャンネル(name / url / description)から投稿先を選ぶ。複数あれば description を見て判断し、迷ったら確認する",
309
+ "1. チャット/channels.json を読んで投稿先のチャンネルを選ぶ(複数あれば description を見て判断し、迷ったらわたしに聞く)",
344
310
  "2. 次の雛形で本文を作る({名前} は Cortex/Members/records/ にあるわたしのレコードの表記に合わせる)",
345
311
  "",
346
312
  "🎉 {名前} さんが Cortex のチュートリアルを完了しました",
347
313
  "できるようになったこと: Gold層から案件を把握する・自分の情報を更新する・Backlogに記票する・資料を投入する",
348
314
  "使い方の質問はこのチャンネルへどうぞ",
349
315
  "",
350
- "3. 投稿先のチャンネルと本文をプレビューして、承認を得る",
351
- "4. 承認後に投稿し、投稿したメッセージのリンクを報告する",
316
+ "3. 投稿先と本文をプレビューして承認を得てから投稿し、メッセージのリンクを報告する",
352
317
  "",
353
- "注意:",
354
- "- 売上・単価・工数・人事評価などの内部限定情報は書かないでください",
318
+ "Slack につながっていない場合は、つなぎ方(手元の Claude Code なら /mcp コマンドから slack、クラウドならセッションのコネクタ設定)を案内して止まってください。",
355
319
  ].join("\n");
356
320
  const CSS = `
357
321
  :root {
@@ -974,150 +938,86 @@ const CLIENT_JS = `
974
938
  }
975
939
  // Gold型(ディレクトリ名)→ 書き込みプロンプトの対応。決定事項/用語集/メンバー/ルールの4型のみ。
976
940
  // レポート等スキルの無いディレクトリは対象外(ボタンを出さない)。
977
- // リンク先はクラウド実行のセッションでエンジンのスキルがロードされないため、プロンプトには規約を埋め込んで自己完結させる。
941
+ // プロンプトには規約を書き写さない。各区画の README.md(規約)と template.md(雛形)をAIに読ませ、
942
+ // 中身は利用者に聞き返させる(規約の二重定義を避け、READMEの更新がそのまま効くようにするため)。
978
943
  // スキルが使える環境(手元のCLI・デスクトップ等)ではそちらを優先させる旨を冒頭に添える。
979
944
  function aiHead(skill) {
980
- return "(" + skill + " スキルが使える環境なら、そのスキルの手順を優先してください。使えない場合は以下に従ってください。)\\n\\n";
945
+ return "(" + skill + " スキルが使える環境なら、そのスキルの手順を優先してください。)\\n\\n";
981
946
  }
982
- // 4型すべてに付ける共通の規律(承認・重複・安定ID・公開範囲)
983
- var AI_COMMON = [
984
- "",
985
- "",
986
- "共通ルール:",
987
- "- 書き込む前に、作成・更新する内容を提示して承認を得てください",
988
- "- 同じ対象に複数ファイルを作らないよう、既存レコードとの重複を必ず確認してください",
989
- "- relations の target にファイルパスは書かず、安定ID(決定ID YYYYMMDD-NNN / term:{代表表記} / rule:{slug} / member:{氏名} / 課題キー / minute:{定例名}:{YYYYMMDD})で張ってください",
990
- "- 売上・単価・工数・人事評価などの内部限定情報は書かないでください(このリポジトリは顧客も閲覧します)",
991
- ].join("\\n");
947
+ // 公開範囲の規律(内部限定情報を書かない等)は各区画の README.md に書いてあるので、プロンプトには重ねない。
948
+ // 顧客も押すボタンなので、内側の運用事情を文面に出さない。
949
+ var AI_COMMON = "";
992
950
  var GOLD_SKILL = {
993
951
  "Decisions": {
994
952
  skill: "update-decision",
995
953
  noun: "決定",
954
+ dir: "Cortex/Decisions",
996
955
  add: [
997
- "これから伝える決定事項を Cortex/Decisions/records/ 1決定1ファイルで記録してください。",
998
- "",
999
- "手順:",
1000
- "1. Cortex/Decisions/README.md(フィールド定義・カテゴリー一覧)と Cortex/Decisions/template.md を読む",
1001
- "2. 既存の records/ を一覧し、同じ決定が記録済みでないかと、決定日の連番の続きを確認する",
1002
- "3. ファイル名は YYYYMMDD-NNN-決定内容の要約.md(YYYYMMDD=決定日、NNN=同日内の連番)",
1003
- "4. frontmatter の必須は type: decision / id(YYYYMMDD-NNN) / title / date / sprint(スプリント運用が無ければフェーズ名) / category(ビジネス・技術選定・設計方針・運用ルール・インフラ・デザインから選ぶ) / deciders(Cortex/Members/records/ の正式表記に揃える。名簿に無い人名は「(要確認)」を付ける) / description(1文要約) / references(出典への人間向けリンク)。README 定義以外のフィールドは追加しない",
1004
- "5. 根拠がある場合は relations に rel: based_on で安定IDを張る(議事録は minute:{定例名}:{YYYYMMDD}、課題は課題キー)",
1005
- "6. 本文は「# タイトル」「## 背景」(なぜ必要になったか)「## 理由」(なぜその選択をしたか・他案との比較)",
1006
- "7. 過去の決定を変える内容なら、その記録は書き換えず新しい記録を作り、relations に rel: supersedes で元の決定IDを張る",
1007
- "8. 確定した決定だけを記録する(検討中・未確定の議論は記録しない)",
956
+ "Cortex/Decisions/README.md Cortex/Decisions/template.md を読んで記録の規約を把握してから、決定事項を1件記録してください。",
957
+ "何を記録するかは、まずわたしに質問してください。",
958
+ "書き込む前に、作成するファイルの内容を提示して承認を得てください。",
1008
959
  ].join("\\n"),
1009
- edit: function (target) {
960
+ edit: function (target, subject) {
1010
961
  return [
1011
- target + "について、これから伝える変更を反映してください。",
1012
- "",
1013
- "重要: 決定の内容そのものが変わる場合、この記録は書き換えません。Cortex/Decisions/records/ に新しいファイル(YYYYMMDD-NNN-決定内容の要約.md。YYYYMMDD=新しい決定日、NNN=同日内の連番)を作り、frontmatter の relations に rel: supersedes / target: 元の決定ID を張って、背景・理由に変更の経緯を書いてください。誤字・リンク切れなど決定の中身が変わらない訂正だけ、その場で直してかまいません。",
1014
- "",
1015
- "手順:",
1016
- "1. Cortex/Decisions/README.md(フィールド定義・カテゴリー一覧)と対象ファイルを読む",
1017
- "2. 新しい記録を作る場合は、既存の records/ で連番の続きと重複を確認する",
1018
- "3. frontmatter の必須は type: decision / id / title / date / sprint / category / deciders(Cortex/Members/records/ の正式表記に揃える) / description / references。README 定義以外のフィールドは追加しない",
1019
- "4. 本文は「# タイトル」「## 背景」「## 理由」の構成を保つ",
1020
- "5. あなた(人間)が内容を確認して編集したので、status が draft(AI生成・人間未確認)なら active に上げる。内容を確認せず表記・形式だけ直した場合は draft のままにする",
962
+ target + " を読んでから、" + subject + "を修正してください。",
963
+ "何を直すかは、まずわたしに質問してください。",
964
+ "決定の内容そのものが変わる場合は、この記録を書き換えず、supersedes で新しい記録を作ってください。",
965
+ "あなた(人間)が内容を確認して編集したので、status が draft なら active に上げてください。",
966
+ "書き込む前に、変更内容を提示して承認を得てください。",
1021
967
  ].join("\\n");
1022
968
  },
1023
969
  },
1024
970
  "Glossary": {
1025
971
  skill: "update-glossary",
1026
972
  noun: "用語",
973
+ dir: "Cortex/Glossary",
1027
974
  add: [
1028
- "これから伝える用語を Cortex/Glossary/records/ 1用語1ファイルで登録してください。",
1029
- "",
1030
- "手順:",
1031
- "1. Cortex/Glossary/README.md(スキーマ・除外用語リスト)と Cortex/Glossary/template.md を読む",
1032
- "2. 既存 records/ の title と synonyms を確認する。既存用語の表記揺れなら新規ファイルを作らず、その用語の synonyms に追記する。除外用語リストに載っている語は登録しない",
1033
- "3. ファイル名は records/{代表表記}.md、id は term:{代表表記}",
1034
- "4. frontmatter の必須は type: term / id / title / description(1文要約) / scope(project=案件固有 | organization=全社共通) / status / date(登録日)。任意は synonyms(表記揺れ)・source(この案件での出典)・references。README 定義以外のフィールドは追加しない",
1035
- "5. 案件固有語は社内の情報源(議事録・課題・資料)の記述だけを根拠に定義する(Web検索せず references も付けない)。Figma・OIDC のような一般公開のサービス・技術・規格は、Web で公式ドキュメント等の一次情報を確認してから定義し、そのURLを references に入れる。推測で書かない",
1036
- "6. 定義を人間と確認できた場合のみ status: active。確証が持てなければ status: draft(AI生成・人間未確認の印)にする",
1037
- "7. 本文にはこの案件における意味を1〜数段落で具体的に書く(一般的な意味に加え、この案件で特殊な使われ方があれば補足する)",
975
+ "Cortex/Glossary/README.md Cortex/Glossary/template.md を読んで登録の規約を把握してから、用語を1件登録してください。",
976
+ "何を登録するかは、まずわたしに質問してください。",
977
+ "書き込む前に、作成するファイルの内容を提示して承認を得てください。",
1038
978
  ].join("\\n"),
1039
- edit: function (target) {
979
+ edit: function (target, subject) {
1040
980
  return [
1041
- target + "について、これから伝える修正を反映してください。",
1042
- "",
1043
- "前提:",
1044
- "- 用語集は更新型です。定義が変わったら本文・frontmatter を直接更新してかまいません(変更履歴は git が持ちます)",
1045
- "- 新しい表記揺れは新規ファイルを作らず synonyms に追記します",
1046
- "- 定義を人間と確認できたら status: draft を active に上げます",
1047
- "- 使われなくなった用語は削除せず status: superseded にします",
1048
- "",
1049
- "手順:",
1050
- "1. Cortex/Glossary/README.md(スキーマ)と対象ファイルを読む",
1051
- "2. frontmatter の必須は type: term / id(term:{代表表記}) / title / description / scope / status / date。README 定義以外のフィールドは追加しない",
1052
- "3. 一般公開のサービス・技術・規格は Web で公式ドキュメント等の一次情報を確認してから定義を直し、references にそのURLを入れる。案件固有語は社内の情報源だけを根拠にし、推測で書かない",
1053
- "4. あなた(人間)が内容を確認して編集したので、status が draft(AI生成・人間未確認)なら active に上げる。内容を確認せず表記・形式だけ直した場合は draft のままにする",
981
+ target + " を読んでから、" + subject + "を修正してください。",
982
+ "何を直すかは、まずわたしに質問してください。",
983
+ "あなた(人間)が内容を確認して編集したので、status が draft なら active に上げてください。",
984
+ "書き込む前に、変更内容を提示して承認を得てください。",
1054
985
  ].join("\\n");
1055
986
  },
1056
987
  },
1057
988
  "Members": {
1058
989
  skill: "update-member",
1059
990
  noun: "メンバー",
991
+ dir: "Cortex/Members",
1060
992
  add: [
1061
- "これから伝えるメンバーを Cortex/Members/records/ 1人1ファイルで登録してください。",
1062
- "",
1063
- "手順:",
1064
- "1. Cortex/Members/README.md(スキーマ)と Cortex/Members/template.md を読む",
1065
- "2. 既存 records/ の title・aliases・side を確認する。既存メンバーの表記揺れなら新規ファイルを作らず、その人の aliases に追記する(同一人物に複数ファイルを作らない)",
1066
- "3. ファイル名は records/{氏名(スペース無し)}.md、id は member:{氏名(スペース無し)}",
1067
- "4. frontmatter の必須は type: member / id / title(氏名の正式表記。スペースを含んでよい) / description(何者かの1文) / status(active=在籍 | inactive=離任 | draft=AI生成・人間未確認)。任意は yomi・aliases・org・side(cm=開発側 | client=顧客 | vendor=ベンダー)・role・email。README 定義以外のフィールドは追加しない",
1068
- "5. 氏名・所属・side を推測で確定させない。確証が無い項目は空にし、確認が取れていないレコードは status: draft のままにする",
1069
- "6. 本文にも何者かを1〜2文書く(Viewer の個別ページに表示されるため空にしない)",
1070
- "7. 名簿に書くのは氏名・所属・役割・表記揺れだけ。人の評価・人事・単価・工数は書かない",
993
+ "Cortex/Members/README.md Cortex/Members/template.md を読んで登録の規約を把握してから、メンバーを1人登録してください。",
994
+ "誰を登録するかは、まずわたしに質問してください。",
995
+ "書き込む前に、作成するファイルの内容を提示して承認を得てください。",
1071
996
  ].join("\\n"),
1072
- edit: function (target) {
997
+ edit: function (target, subject) {
1073
998
  return [
1074
- target + "について、これから伝える修正を反映してください。",
1075
- "",
1076
- "前提:",
1077
- "- 名簿は更新型です。氏名・所属・役割が変わったら frontmatter・本文を直接更新してかまいません(変更履歴は git が持ちます)",
1078
- "- 新しい表記揺れ(文字起こしの誤変換・呼称)は新規ファイルを作らず aliases に追記します",
1079
- "- 本人やPMに確認が取れたら status: draft を active に上げます。確証が無い項目は推測で埋めず空のままにします",
1080
- "- 離任しても削除せず status: inactive にします(過去の議事録・決定の人名正規化の根拠として残すため)",
1081
- "",
1082
- "手順:",
1083
- "1. Cortex/Members/README.md(スキーマ)と対象ファイルを読む",
1084
- "2. frontmatter の必須は type: member / id(member:{氏名(スペース無し)}) / title / description / status。任意は yomi・aliases・org・side(cm | client | vendor)・role・email。README 定義以外のフィールドは追加しない",
1085
- "3. 名簿に書くのは氏名・所属・役割・表記揺れだけ。人の評価・人事・単価・工数は書かない",
1086
- "4. あなた(人間)が内容を確認して編集したので、status が draft(AI生成・人間未確認)なら active に上げる。内容を確認せず表記・形式だけ直した場合は draft のままにする",
999
+ target + " を読んでから、" + subject + "を修正してください。",
1000
+ "何を直すかは、まずわたしに質問してください。",
1001
+ "あなた(人間)が内容を確認して編集したので、status が draft なら active に上げてください。",
1002
+ "書き込む前に、変更内容を提示して承認を得てください。",
1087
1003
  ].join("\\n");
1088
1004
  },
1089
1005
  },
1090
1006
  "Rules": {
1091
1007
  skill: "update-rule",
1092
1008
  noun: "ルール",
1009
+ dir: "Cortex/Rules",
1093
1010
  add: [
1094
- "これから伝えるルール(案件で継続的に守る制約)を Cortex/Rules/records/ 1ルール1ファイルで登録してください。",
1095
- "",
1096
- "手順:",
1097
- "1. Cortex/Rules/README.md(スキーマ・除外ルールリスト)と Cortex/Rules/template.md を読む",
1098
- "2. Rule と Decision を判別する。Rule は「本番リリースは金曜禁止」のように今も効き続ける約束事だけ。一回きりの決定・単発のTODO・期限付きの依頼は Rule にしない(それは Cortex/Decisions/ の担当)",
1099
- "3. 既存 records/ の title を確認して重複を避ける。README の除外ルールに載っている制約は起票しない(除外リストは読むだけで編集しない)",
1100
- "4. ファイル名は records/{slug}.md、id は rule:{slug}(例: rule:本番リリース-金曜禁止)",
1101
- "5. frontmatter の必須は type: rule / id / title(制約の1行表現) / description(1文要約) / status(draft=AI生成・人間未確認 | active=確認済み)。README 定義以外のフィールドは追加しない",
1102
- "6. status は原則 draft。対話でユーザー本人が制約の内容に合意している場合だけ active にしてよい",
1103
- "7. 元になった決定があれば relations に rel: derived_from / target: 決定ID(YYYYMMDD-NNN)を、議事録・課題が根拠なら rel: based_on で安定IDを張る",
1104
- "8. 本文は「## 制約」「## 適用範囲」「## 違反するとどうなるか」「## 出典」で構成する",
1011
+ "Cortex/Rules/README.md Cortex/Rules/template.md を読んで登録の規約を把握してから、ルール(案件で継続的に守る制約)を1件登録してください。",
1012
+ "何を登録するかは、まずわたしに質問してください。",
1013
+ "書き込む前に、作成するファイルの内容を提示して承認を得てください。",
1105
1014
  ].join("\\n"),
1106
- edit: function (target) {
1015
+ edit: function (target, subject) {
1107
1016
  return [
1108
- target + "について、これから伝える修正を反映してください。",
1109
- "",
1110
- "前提:",
1111
- "- ルールは更新型です。制約の表現・適用範囲が変わったら frontmatter・本文を直接更新してかまいません(変更履歴は git が持ちます)",
1112
- "- 内容を人間と確認できたら status: draft を active に上げます(本人の合意が無いものを勝手に active にしない)",
1113
- "- 効かなくなったルールは削除せず、本文に失効を追記して元の決定から履歴をたどれるようにします",
1114
- "- 継続的な制約でなくなる内容(一回きりの決定)は Rule ではなく Cortex/Decisions/ の担当です",
1115
- "",
1116
- "手順:",
1117
- "1. Cortex/Rules/README.md(スキーマ・除外ルール)と対象ファイルを読む",
1118
- "2. frontmatter の必須は type: rule / id(rule:{slug}) / title / description / status。README 定義以外のフィールドは追加しない",
1119
- "3. 本文は「## 制約」「## 適用範囲」「## 違反するとどうなるか」「## 出典」の構成を保つ",
1120
- "4. あなた(人間)が内容を確認して編集したので、status が draft(AI生成・人間未確認)なら active に上げる。内容を確認せず表記・形式だけ直した場合は draft のままにする",
1017
+ target + " を読んでから、" + subject + "を修正してください。",
1018
+ "何を直すかは、まずわたしに質問してください。",
1019
+ "あなた(人間)が内容を確認して編集したので、status が draft なら active に上げてください。",
1020
+ "書き込む前に、変更内容を提示して承認を得てください。",
1121
1021
  ].join("\\n");
1122
1022
  },
1123
1023
  },
@@ -1141,10 +1041,10 @@ const CLIENT_JS = `
1141
1041
  var g = goldSkill(sectionName);
1142
1042
  if (!g) return null;
1143
1043
  var pathRef = repoPathOf(rec);
1144
- var target = pathRef
1145
- ? pathRef + " " + g.noun + "" + title + ""
1146
- : "この" + g.noun + "「" + title + "」(" + rec.id + ")";
1147
- var prompt = aiHead(g.skill) + g.edit(target) + AI_COMMON;
1044
+ // target=AIに読ませるファイル(対象レコード+規約のREADME)、subject=直す対象の呼び名
1045
+ var target = (pathRef ? pathRef + " " : "") + g.dir + "/README.md";
1046
+ var subject = "この" + g.noun + "「" + title + "" + (pathRef ? "" : "(" + rec.id + ")");
1047
+ var prompt = aiHead(g.skill) + g.edit(target, subject) + AI_COMMON;
1148
1048
  return el("a", { class: "ai-edit-btn", href: codeUrl(prompt), target: "_blank", rel: "noopener", text: "AIで編集" });
1149
1049
  }
1150
1050
  // 本文HTMLは bodies/<i>.html に外出しされている。詳細表示時にfetchして埋める(キャッシュ・失敗時フォールバック付き)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@takagaki/cortex-decisions-viewer",
3
- "version": "0.4.37",
3
+ "version": "0.4.39",
4
4
  "description": "Cortexの意思決定記録(Decisions/*.md)を静的サイトにビルドして閲覧する。各レコードに「Edit on GitHub」リンクを付与する。",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,