@takagaki/cortex-decisions-viewer 0.10.3 → 0.10.5

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 +43 -7
  2. package/package.json +1 -1
package/dist/render.js CHANGED
@@ -2168,6 +2168,8 @@ a.ds-name:hover { text-decoration: underline; }
2168
2168
  .rt-card { margin-top: 10px; }
2169
2169
  .rt-steps { margin: 0; padding-left: 1.4em; color: var(--text); font-size: 13px; line-height: 1.9; }
2170
2170
  .rt-steps li { margin: 2px 0; }
2171
+ /* 通知イベントのチェック名(10個)。1行に並べると読めないので、種別ごとに折る */
2172
+ .rt-steps li ul { margin: 2px 0 6px; padding-left: 1.1em; list-style: disc; color: var(--muted); line-height: 1.7; }
2171
2173
  /* URLは長いので、入力欄を伸ばしてボタンを右に置く(折り返しても崩れないように wrap) */
2172
2174
  .rt-url-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
2173
2175
  .rt-copy { margin: 6px 0 10px; }
@@ -7380,20 +7382,32 @@ ${nextStateDelay.toString()}
7380
7382
  */
7381
7383
  function realtimeSyncCard() {
7382
7384
  var rt = LIVE_REALTIME;
7383
- if (!rt) return null; // 取得前・取得失敗・Backlogを使わない案件
7384
- if (rt.supported === false) {
7385
+ // **未対応(固定IP経由の同期)だけは、手順ではなく理由を出す。** ここは索引の状態ではなく
7386
+ // 経路の話で、設定しても効かないことが確定している唯一の形。黙って欠けさせない
7387
+ if (rt && rt.supported === false) {
7385
7388
  return el("p", {
7386
7389
  class: "sec-how",
7387
7390
  text: "この案件は固定IP経由でBacklogを同期しているため、リアルタイム同期(Webhook)には未対応です。反映は毎晩の同期のタイミングになります。",
7388
7391
  });
7389
7392
  }
7390
7393
  var wh = SITE.backlogWebhook;
7391
- if (!rt.ready || !wh || !wh.url || !wh.token) return null;
7394
+ // **URLが無い案件には出さない。** 貼るものが無い手順は、一番読めない形になる
7395
+ if (!wh || !wh.url || !wh.token) return null;
7396
+ // **索引に行があるか(ready)でカードごと隠さない(2026-08-24 オーナー決定)。**
7397
+ // それまでは「手順どおり設定すれば実際に効く案件だけに出す」としていたが、
7398
+ // ready の材料(ルーティング索引の行)は**設定を始める前には揃わない**ので、
7399
+ // これから設定する人ほど手順に辿り着けなかった。索引がまだ追いついていない案件も、
7400
+ // 取得前・取得失敗(rt が null)も、手順は出す——URLは案件専用で、先に貼っておいても
7401
+ // 困らない。ready のときだけ受信実績の行を足す
7402
+ var ready = !!(rt && rt.ready);
7392
7403
  var url = wh.url + (wh.url.indexOf("?") === -1 ? "?" : "&") + "t=" + encodeURIComponent(wh.token);
7393
7404
  // 接続先ごとの受信実績(#123)。**配列で受ける**——1案件=複数 Backlog プロジェクトは
7394
7405
  // 確定した将来要件(#107)で、今日は必ず1件。**時刻が読めない値は稼働中に数えない**
7395
7406
  // ——「最終受信: NaN分前」を出すくらいなら、未設定と同じ手順の画面のほうがまだ読める
7396
- var targets = (rt.targets || []).map(function (t) {
7407
+ // **ready でないうちは受信実績を読まない。** ready の材料は索引の行(=自リポ宛だと
7408
+ // 確かめられた行)で、それが無いのに lastEventAt だけ来ている応答を信じると、
7409
+ // **届いていない案件に「✓ 稼働中」を出す**——一番出してはいけない嘘になる
7410
+ var targets = (ready && rt.targets ? rt.targets : []).map(function (t) {
7397
7411
  return { projectKey: t && t.projectKey ? String(t.projectKey) : "", ago: t && t.lastEventAt ? rtAgo(t.lastEventAt) : "" };
7398
7412
  });
7399
7413
  var live = targets.some(function (t) { return t.ago; });
@@ -7428,7 +7442,20 @@ ${nextStateDelay.toString()}
7428
7442
  el("ol", { class: "rt-steps" }, [
7429
7443
  el("li", { text: "Backlog のプロジェクト設定 → インテグレーション → Webhook を開く" }),
7430
7444
  el("li", { text: "「WebHook URL」に下の案件専用URLを貼り付ける" }),
7431
- el("li", { text: "通知イベントで「課題の追加」「課題の更新」「課題にコメント」等にチェックを入れて保存する" }),
7445
+ // **チェック名は受信側が処理する10種を全部並べる。** 「等」で省くと、担当者は
7446
+ // 課題の3つだけにチェックして「設定した」と思い、Wikiとドキュメントの更新は
7447
+ // 夜間まで届かない(画面は稼働中と出るので、欠けていることに気づけない)。
7448
+ // ここを増減するときは受信側(backlog-webhook/logic.mjs の HANDLED_TYPES)と
7449
+ // 揃える——ずれると realtime-sync-card.test.mjs が赤くなる。
7450
+ // **「他はチェック不要」とは言い切らない。** 未対応の type(ドキュメントの更新等)は
7451
+ // 「無視した」ログから見つける設計なので、外させると発見の経路が塞がる
7452
+ el("li", { text: "通知イベントで次の10個にチェックを入れて保存する(他のイベントはチェックしても取り込まれません)" }, [
7453
+ el("ul", {}, [
7454
+ el("li", { text: "課題:「課題の追加」「課題の更新」「課題にコメント」「課題の削除」「課題をまとめて更新」" }),
7455
+ el("li", { text: "Wiki:「Wikiページを追加」「Wikiページを更新」「Wikiページを削除」" }),
7456
+ el("li", { text: "ドキュメント:「ドキュメントの追加」「ドキュメントの削除」" }),
7457
+ ]),
7458
+ ]),
7432
7459
  ]),
7433
7460
  el("div", { class: "rt-url-row" }, [field, copyBtn]),
7434
7461
  msg,
@@ -7473,7 +7500,9 @@ ${nextStateDelay.toString()}
7473
7500
  ]);
7474
7501
  }
7475
7502
 
7476
- return el("div", { class: "ops-card rt-card" }, [
7503
+ // まだ受け入れ体制が整っていない案件(接続先がこれから・索引が追いついていない)には、
7504
+ // **次の一手だけを1行足す。** 担当者への連絡は促さない——この画面で完結する話だから
7505
+ var head = [
7477
7506
  el("div", { class: "ops-card-head" }, [
7478
7507
  el("span", { class: "ops-card-icon", text: "⚡" }),
7479
7508
  // **稼働中の枝と同じ見出しにする**(上の ⚠ 参照。片方だけ直すと、
@@ -7481,7 +7510,14 @@ ${nextStateDelay.toString()}
7481
7510
  el("h3", { class: "ops-card-title", text: "リアルタイム同期(任意)" }),
7482
7511
  ]),
7483
7512
  el("p", { class: "ops-card-desc", text: "Backlog で課題やコメントが変わったときに、その内容をすぐ取り込みます(毎晩の同期を待たずに反映されます)。Backlog 側で一度だけ設定してください。" }),
7484
- ].concat(steps));
7513
+ ];
7514
+ if (!ready) {
7515
+ head.push(el("p", {
7516
+ class: "sec-how",
7517
+ text: "上の「接続先」を先に設定してから貼り付けてください。設定した直後は、この画面が追いつくまで少し時間がかかることがあります。",
7518
+ }));
7519
+ }
7520
+ return el("div", { class: "ops-card rt-card" }, head.concat(steps));
7485
7521
  }
7486
7522
 
7487
7523
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@takagaki/cortex-decisions-viewer",
3
- "version": "0.10.3",
3
+ "version": "0.10.5",
4
4
  "description": "Cortexの意思決定記録(Decisions/*.md)を静的サイトにビルドして閲覧する。各レコードに「Edit on GitHub」リンクを付与する。",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,