@takagaki/cortex-decisions-viewer 0.12.51 → 0.12.53

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/dist/render.js CHANGED
@@ -55,6 +55,7 @@ exports.renderConnectionMap = renderConnectionMap;
55
55
  const node_crypto_1 = require("node:crypto");
56
56
  const google_chat_guide_images_1 = require("./google-chat-guide-images");
57
57
  const meet_guide_images_1 = require("./meet-guide-images");
58
+ const figma_guide_images_1 = require("./figma-guide-images");
58
59
  // 操作タブの仮置き(#388)。判定の実体はあちら——ここは流し込みと配線だけ
59
60
  const pending_ops_1 = require("./pending-ops");
60
61
  /**
@@ -4675,6 +4676,10 @@ ${calendarAddUrl.toString()}
4675
4676
  var GCHAT_SHOT_STEP2 = "${google_chat_guide_images_1.GCHAT_APP_STEP2}";
4676
4677
  // 案件カレンダーに予定を作る手順の画像(#452)。理由は src/meet-guide-images.ts
4677
4678
  var MEET_SHOT_CREATE_EVENT = "${meet_guide_images_1.MEET_GUIDE_CREATE_EVENT}";
4679
+ // Figma の「発行のしかた」に載せる手順の画像(#547)。理由は src/figma-guide-images.ts
4680
+ var FIGMA_SHOT_STEP1 = "${figma_guide_images_1.FIGMA_GUIDE_STEP1}";
4681
+ var FIGMA_SHOT_STEP2 = "${figma_guide_images_1.FIGMA_GUIDE_STEP2}";
4682
+ var FIGMA_SHOT_STEP3 = "${figma_guide_images_1.FIGMA_GUIDE_STEP3}";
4678
4683
 
4679
4684
  function copyRow(text) {
4680
4685
  // **input と button を使わない。** 追加フォームの中に置くので、input を足すと
@@ -6737,7 +6742,14 @@ ${calendarAddUrl.toString()}
6737
6742
  no_token: { text: "管理者の設定が必要です", cls: "ds-gate-muted" },
6738
6743
  },
6739
6744
  issues: { no_token: { text: "APIキーが未登録です", cls: "ds-gate-muted" } },
6740
- design: { no_token: { text: "トークンが未登録です", cls: "ds-gate-muted" } },
6745
+ design: {
6746
+ no_token: { text: "トークンが未登録です", cls: "ds-gate-muted" },
6747
+ // 「アクセス不可」では、トークンの失効なのかキーの誤りなのかが行から辿れない(#523 S4)。
6748
+ // 直し方は書き手(engine の figma-gate の写し)が理由(「トークンが無効か…(HTTP 403)」/
6749
+ // 「ファイルが見つかりません(HTTP 404…)」)として運ぶので、**help は持たせない**
6750
+ // (持たせると理由と 2 段になり「繰り返さない」に反する。理由は appendReachableReason が出す)
6751
+ unreachable: { text: "ファイルを読めません", cls: "ds-gate-warn" },
6752
+ },
6741
6753
  };
6742
6754
  /**
6743
6755
  * その能力の行に出す「届くか」の語。**能力ごとの言い換えが無ければ 「DS_GATE」 のまま。**
@@ -7107,7 +7119,13 @@ ${calendarAddUrl.toString()}
7107
7119
  }
7108
7120
 
7109
7121
  if (cal.phase === "pending") {
7110
- box.appendChild(el("p", { class: "mt-cal-note", text: "作成中(最長 " + CALENDAR_WAIT_MIN + " 分。自動で更新されます)" }));
7122
+ // **承認された直後の人が最初に見る 1 行**(#540)。実際にかかるのはたいてい数分で、
7123
+ // 15 分ごとの便を 1 本待つと十数分になる。**最長だけを出すと「20 分待つのか」と読める**
7124
+ // ——待たされている感じを実際より大きくしない。止まったときは stale が別の文を出す
7125
+ box.appendChild(el("p", {
7126
+ class: "mt-cal-note",
7127
+ text: "作成中です(数分〜十数分。自動で更新されます)",
7128
+ }));
7111
7129
  return;
7112
7130
  }
7113
7131
 
@@ -7189,7 +7207,9 @@ ${calendarAddUrl.toString()}
7189
7207
  // 画面が言い換えると 2 枚になる(片方だけ古くなる)
7190
7208
  if (!res.ok) return fail((res.j && res.j.message) || "依頼できませんでした。しばらくしてからもう一度お試しください。");
7191
7209
  msg.className = "ds-toggle-msg is-ok";
7192
- msg.textContent = "✓ 依頼しました。作成中(最長 " + CALENDAR_WAIT_MIN + " 分)です。";
7210
+ // 待ちの言い方は行から描く 1 行(pending)と揃える(#540)。
7211
+ // 片方だけ「最長 20 分」だと、同じ待ちが 2 通りに見える
7212
+ msg.textContent = "✓ 依頼しました。作成中です(数分〜十数分)。";
7193
7213
  // **押したことを覚える(#452)。** 下の取り直しで箱ごと作り直されると
7194
7214
  // この 1 行は消えるので、消えない側(行から描く 1 行)に引き継ぐ
7195
7215
  if (kind === "share") CALENDAR_SHARE_PRESSED = true;
@@ -7207,7 +7227,7 @@ ${calendarAddUrl.toString()}
7207
7227
  openConfirm(
7208
7228
  [
7209
7229
  "cortex-notetaker が「" + (SITE.title || "この案件") + "」のカレンダーを作り、案件の社内メンバーに予定作成の権限で共有します。",
7210
- "最長 " + CALENDAR_WAIT_MIN + " 分かかります。",
7230
+ "できるまで数分〜十数分かかります。",
7211
7231
  ],
7212
7232
  { okLabel: "作る", okDanger: false, returnTo: btn },
7213
7233
  ).then(function (yes) {
@@ -10933,8 +10953,8 @@ ${calendarAddUrl.toString()}
10933
10953
  * その接続先の**いちばん新しい行**(問いは問わない)。待ちの基準と到着の判定に使う。
10934
10954
  *
10935
10955
  * 🔴 **「届くか」の行だけを見ない。** 押すと起きるのは同期そのものなので、
10936
- * 届いた答えが 「reachable」 とは限らない——Figma は当面 「ingested」 しか書かれず
10937
- * (書き手は S4)、Backlog / Drive も回によっては片方しか動かない。
10956
+ * 届いた答えが 「reachable」 とは限らない——Backlog / Drive / Figma とも回によっては
10957
+ * 片方しか動かない(Backlog の webhook 起点は「取り込み」だけ、Drive の先出しは「届くか」だけ)。
10938
10958
  * 「届くか」だけを見ると、**同期が終わって行が更新されているのに15分待たせる**。
10939
10959
  */
10940
10960
  function probeLatestRow(capId, ref) {
@@ -11813,7 +11833,8 @@ ${calendarAddUrl.toString()}
11813
11833
  // このファイルの取り込みが最後にどうなったか(段C)。測っていなければ null
11814
11834
  ingestedEl(designIngestedStateOf(f.key), "デザイン"),
11815
11835
  ]);
11816
- // このファイルに届くか(#523 S1)。書き手は S4(いまは行が無いので何も出ない)。
11836
+ // このファイルに届くか(#523 S1)。書き手は engine の同期(#523 S4・engine #329)。
11837
+ // 行が無いファイル(まだ一度も同期していない)には何も出ない。
11817
11838
  // 理由の1段は行の最後に置く(appendReachableReason の項)
11818
11839
  appendReachableChip(row, "design", f.key);
11819
11840
  row.appendChild(removeButton({
@@ -11849,8 +11870,8 @@ ${calendarAddUrl.toString()}
11849
11870
  else delete figSending[f.key];
11850
11871
  },
11851
11872
  }));
11852
- // 「接続を確認」(#523 S3)。**行を書くのは S4(engine)** なので、いまは
11853
- // 押すとデザイン同期が1回起きるだけ——札が出るのは S4 の配布後。
11873
+ // 「接続を確認」(#523 S3)。押すとデザイン同期が1回起き、engine の同期が
11874
+ // 「届くか」と「取り込み」の行を書く(#523 S4・engine #329)。届いたら札が差し替わる。
11854
11875
  // 並びは Slack の行と同じ(外すボタンの後ろ)
11855
11876
  appendDispatchProbe(row, "design", f.key);
11856
11877
  appendReachableReason(row, "design", f.key);
@@ -13674,12 +13695,36 @@ ${calendarAddUrl.toString()}
13674
13695
  // 特に file_comments:read の欠落は「同期は緑なのに指摘だけ増えない」という
13675
13696
  // 気づきにくい壊れ方をする(コメント同期は後から足した機能で、この案内が追随していなかった)。
13676
13697
  // 書き込み権限は1つも要らない。files:read(非推奨・広範)は選ばせないこと。
13677
- how: "Figma → Settings → Security → Personal access tokens で発行。スコープは file_content:read と file_comments:read の2つにチェックを入れてください(どちらも読み取りのみ・書き込み権限は要りません)",
13698
+ // **画像内の番号(①〜⑧・下の shots)と、この文の言い回しの向きを揃える。**
13699
+ // 文の側には数字を振らない——振ると画像の丸数字と二重に採番することになり、
13700
+ // 「文の1番」と「画像の①」がずれたときに矛盾して見える(#547)
13701
+ how: "Figma の左上の名前 → Settings → Security タブ → Personal access tokens の Generate new token で発行します。名前は任意(例: cortex token)、期限は90日などにし、スコープは file_content:read と file_comments:read の2つだけにチェックを入れてください(どちらも読み取りのみ・書き込み権限は要りません)。",
13678
13702
  // **スコープが正しくても、招待が無いと読めない。** トークンは「そのアカウントが
13679
13703
  // 見られるファイル」しか読めないので、招待漏れは 404 になる。権限の問題に見えないため
13680
13704
  // 現場で切り分けに時間がかかる(実際に踏んだ)。入力欄の隣に書いておく。
13681
13705
  note: "発行したアカウントを、対象の Figma ファイルに閲覧者として招待しておいてください(招待が無いとトークンが正しくても読めません)。"
13682
13706
  + "発行するのは、対象ファイルのあるチームで Dev または Full の席を持つ方にしてください。閲覧席(View/Collab)のトークンは取得回数が月 20 回までで、夜間同期が数日で止まります。",
13707
+ // **手順の画像3枚(#547)。** Google Meet・Google Chat と同じ guideShot を通す
13708
+ // (幅の上限・クリックで原寸に戻る振る舞いを1か所に揃える)。見出しは画像の並び順
13709
+ // (1〜3枚目)、画像の中の丸数字(①〜⑧)は1枚の中の細かい手順——役割が別なので、
13710
+ // 見出し側に丸数字を混ぜない
13711
+ shots: [
13712
+ {
13713
+ src: FIGMA_SHOT_STEP1, width: "1000", height: "1114",
13714
+ heading: "1. 左上の名前 → Settings",
13715
+ alt: "Figma左上の自分の名前を押すとメニューが開き、その中のSettingsが赤枠で示されている。",
13716
+ },
13717
+ {
13718
+ src: FIGMA_SHOT_STEP2, width: "1200", height: "1145",
13719
+ heading: "2. Security タブ → Generate new token を押す",
13720
+ alt: "Settings画面のSecurityタブが赤枠で示され、下のPersonal access tokensにあるGenerate new tokenのリンクも赤枠で示されている。",
13721
+ },
13722
+ {
13723
+ src: FIGMA_SHOT_STEP3, width: "1100", height: "1428",
13724
+ heading: "3. 名前・期限・スコープを決めて発行する",
13725
+ alt: "Generate new tokenダイアログ。Token name欄・Expiration(90日)・file_comments:readとfile_content:readのチェックボックス・Generate tokenボタンが、それぞれ赤枠で示されている。",
13726
+ },
13727
+ ],
13683
13728
  },
13684
13729
  "backlog": {
13685
13730
  icon: "📋",
@@ -13883,6 +13928,15 @@ ${calendarAddUrl.toString()}
13883
13928
  // 発行のしかたを探している人がここを開く手掛かりを持てない(rt カードと同じ流儀)
13884
13929
  var guidanceBox = el("details", { class: "sec-fold" }, [el("summary", { text: "発行のしかた" })]);
13885
13930
  for (var gi = 0; gi < guidance.length; gi++) guidanceBox.appendChild(guidance[gi]);
13931
+ // **手順の画像(#547)。** 文章(guidance)の下に、見出し→画像の対を並びの順に足す。
13932
+ // shots を持たない種別(Backlog)ではこの節は素通りする
13933
+ if (meta.shots) {
13934
+ for (var si = 0; si < meta.shots.length; si++) {
13935
+ var shot = meta.shots[si];
13936
+ guidanceBox.appendChild(el("p", { class: "sec-how", text: shot.heading }));
13937
+ guidanceBox.appendChild(guideShot({ src: shot.src, width: shot.width, height: shot.height, alt: shot.alt }));
13938
+ }
13939
+ }
13886
13940
 
13887
13941
  // **押すまで入力欄を出さない(2026-08-21・オーナー指摘)。**
13888
13942
  // 「今のAPIキーのセクション、欄があると思うんだけど…押すとフォームだけ出てくる」。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@takagaki/cortex-decisions-viewer",
3
- "version": "0.12.51",
3
+ "version": "0.12.53",
4
4
  "description": "Cortexの意思決定記録(Decisions/*.md)を静的サイトにビルドして閲覧する。各レコードに「Edit on GitHub」リンクを付与する。",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,