@takagaki/cortex-decisions-viewer 0.12.110 → 0.12.111

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 +27 -84
  2. package/package.json +1 -1
package/dist/render.js CHANGED
@@ -57,7 +57,6 @@ exports.nextMemoryReflectGoldAtMs = nextMemoryReflectGoldAtMs;
57
57
  exports.memoryReflectDoneAtMs = memoryReflectDoneAtMs;
58
58
  exports.memoryReflectTextOf = memoryReflectTextOf;
59
59
  exports.runLogUrlOf = runLogUrlOf;
60
- exports.lastSyncRunUrlOf = lastSyncRunUrlOf;
61
60
  exports.runSourceWordOf = runSourceWordOf;
62
61
  exports.fleetLastSyncOf = fleetLastSyncOf;
63
62
  exports.stateRefKey = stateRefKey;
@@ -2722,27 +2721,6 @@ function runLogUrlOf(row) {
2722
2721
  return "";
2723
2722
  return row.runUrl;
2724
2723
  }
2725
- /**
2726
- * 「最終同期: …」の横に出すリンク先(#560)。**その時刻を書いた run のときだけ。**
2727
- *
2728
- * 「最終同期」は `lastOkAt`(最後に取り込めた時刻)で、行の `runUrl` は**いまの status を
2729
- * 書いた run**のもの。いま `failed` の行の `lastOkAt` が最大なら、その `runUrl` は失敗した run
2730
- * を指すので出さない(間違った run へ送るより、無いほうがよい)。`ok` の行でも `lastOkAt` と
2731
- * `statusAt` が違う(履歴だけ先に進んだ)回は出さない。
2732
- *
2733
- * **クロージャを持たない純関数に保つこと**(`.toString()` でクライアントへ渡す)。
2734
- */
2735
- function lastSyncRunUrlOf(row) {
2736
- // **部分失敗の回も「取り込めた」(#634)。** ここを `status === "ok"` のままにすると、
2737
- // 「最終同期」の時刻は部分失敗の回のものになったのに、その時刻を書いた run へ行けない
2738
- // ——R9(その時刻を書いた run にだけリンクを出す)が、まさにこの便の対象の回で満たせない
2739
- if (!ingestSucceeded(row))
2740
- return "";
2741
- // 「最終同期」として出した時刻がこの行の `at` でないなら、リンク先の run は別の回のもの
2742
- if (row.lastOkAt && row.lastOkAt > row.at)
2743
- return "";
2744
- return runLogUrlOf(row);
2745
- }
2746
2724
  /**
2747
2725
  * `runUrl` の無い行に添える出どころの語(#560)。リンクが出る行・語の無い書き手は空文字。
2748
2726
  *
@@ -5716,10 +5694,6 @@ a.ds-tile:hover { text-decoration: none; }
5716
5694
  .ds-all-connected { color: var(--muted); }
5717
5695
  .ds-gate { display: inline-flex; align-items: center; gap: 5px; font-size: 12.5px; font-weight: 600; flex: 0 0 auto; }
5718
5696
  .ds-gate-at { font-size: 11px; color: var(--muted); flex: 0 0 auto; }
5719
- /* 実行ログへの導線(#560)。時刻の横の添え物なので .ds-gate-at と同じ弱さ。押せることだけ
5720
- 点線の下線で示す(目立たせない——案件リポジトリに入っていない人には開けない) */
5721
- .ds-run-link { font-size: 11px; color: var(--muted); flex: 0 0 auto; text-decoration: underline dotted; text-underline-offset: 2px; }
5722
- .ds-run-link:hover { color: var(--text); }
5723
5697
  /* run の無い書き手の行の出どころ(「中央の処理」「その場で確認」)。同じ弱さの文字 */
5724
5698
  .ds-run-src { font-size: 11px; color: var(--muted); flex: 0 0 auto; }
5725
5699
  /* 接続先1件ごとの「取り込み」(段C・2026-08-24)。**「最終同期」(.ds-sync・run単位)とは
@@ -6430,7 +6404,6 @@ ${nextMemoryReflectGoldAtMs.toString()}
6430
6404
  ${memoryReflectDoneAtMs.toString()}
6431
6405
  ${memoryReflectTextOf.toString()}
6432
6406
  ${runLogUrlOf.toString()}
6433
- ${lastSyncRunUrlOf.toString()}
6434
6407
  ${runSourceWordOf.toString()}
6435
6408
  var TILE_CAPS = ${JSON.stringify(TILE_CAPS)};
6436
6409
  var BAD_STATE_STATUSES = ${JSON.stringify(BAD_STATE_STATUSES)};
@@ -12901,12 +12874,11 @@ ${calendarAddUrl.toString()}
12901
12874
  var t = dsFmtTime(at || fleetSyncFallback(s) || "");
12902
12875
  if (!t) return null;
12903
12876
  var sync = el("span", { class: "ds-sync", text: "最終同期: " + t });
12904
- // その時刻を書いた run へ(#560)。**ストア由来の時刻のときだけ**——まとめ表の後詰めに
12905
- // run は無い。行は「ingestedAtOf」 と同じ選び方(「ingestedRowOf」)で取る。
12906
- // run の無い書き手(中央 Apps Script の会議・資料の取り込み)は出どころの語
12877
+ // run の無い書き手(中央 Apps Script の会議・資料の取り込み)は出どころの語を添える。
12878
+ // ストア由来の時刻のときだけ——まとめ表の後詰めには行が無い。行は「ingestedAtOf」 と
12879
+ // 同じ選び方(「ingestedRowOf」)で取る
12907
12880
  var row = at ? ingestedRowOf(LIVE_STATE, capId, refs) : null;
12908
- var url = lastSyncRunUrlOf(row);
12909
- var trail = url ? [runLogLink(url)] : row ? runTrailNodes(row, "") : [];
12881
+ var trail = row ? runTrailNodes(row) : [];
12910
12882
  return trail.length ? frag([sync].concat(trail)) : sync;
12911
12883
  }
12912
12884
 
@@ -14820,37 +14792,26 @@ ${calendarAddUrl.toString()}
14820
14792
  }
14821
14793
 
14822
14794
  /* -------------------------------------------------------------------------
14823
- * 実行ログへの導線(#560)
14795
+ * run の出どころの表示(#560・オーナー決定 2026-10-01: 「実行ログ ↗」は社内・お客様とも
14796
+ * 画面から外した)
14824
14797
  * -------------------------------------------------------------------------
14825
- * 行の 「runUrl」(その行を書いた Actions の run)があれば、時刻の横に小さな「実行ログ ↗」を
14826
- * 出す。run の無い書き手の行は、出どころを語で示す(「中央の処理」「その場で確認」)。
14827
- * どちらを出すかの判断は純関数(runLogUrlOf / runSourceWordOf)が持ち、ここは描くだけ。
14798
+ * run の無い書き手の行は、出どころを語で示す(「中央の処理」「その場で確認」)。run のある
14799
+ * 行(ingest / gold / nightly)は何も添えない——リンク先が実行用リポや案件リポの GitHub
14800
+ * Actions で、多くの利用者には開けないため。出すかどうかの判断は純関数
14801
+ * (runLogUrlOf / runSourceWordOf)が持ち、ここは描くだけ。
14828
14802
  * ----------------------------------------------------------------------- */
14829
14803
 
14830
- /** リンクの title。案件リポジトリに入っていない人には開けないので、押す前に分かるようにする */
14831
- var RUN_LINK_TITLE = "GitHub Actions の実行ログを開きます(プロジェクトリポジトリへのアクセスが要ります)";
14832
- /** 一覧(開始直後・run の番号がまだ無い)の title。飛び先が違うので文言も分ける */
14833
- var RUN_LIST_TITLE = "GitHub Actions の実行の一覧を開きます(プロジェクトリポジトリへのアクセスが要ります)";
14834
- var RUN_LIST_TEXT = "実行の一覧 ↗";
14835
-
14836
- /** 「実行ログ ↗」(新しいタブ・title つき)。一覧のときは文言と title を一覧のものにする */
14837
- function runLogLink(url, text) {
14838
- var list = text === RUN_LIST_TEXT;
14839
- return el("a", { class: "ds-run-link", href: url, target: "_blank", rel: "noopener", title: list ? RUN_LIST_TITLE : RUN_LINK_TITLE, text: text || "実行ログ ↗" });
14840
- }
14841
-
14842
14804
  /**
14843
- * 行の時刻の横に添えるもの(リンクか出どころの語)。**無ければ空配列。**
14805
+ * 行の時刻の横に添える出どころの語。**無ければ空配列。**
14844
14806
  * 「.ds-gate-at」「.ds-ingest」 の**兄弟**として置く(子にすると、文言の検査と
14845
14807
  * 「いま測った結果」への差し替えが崩れる)。
14846
14808
  *
14847
14809
  * @param kind どの時刻に添えたか(「gate」=「◯分前に確認」)。「いま測った結果」への差し替えは
14848
- * **この印のものだけ**消す——「取り込み: 〜に成功」の横のリンク(別の行の run)は残す
14810
+ * **この印のものだけ**消す——「取り込み: 〜に成功」の横の語(別の行のもの)は残す
14849
14811
  */
14850
- function runTrailNodes(row, url, kind) {
14851
- var u = url === undefined ? runLogUrlOf(row) : url;
14852
- var word = u ? "" : runSourceWordOf(row);
14853
- var node = u ? runLogLink(u) : word ? el("span", { class: "ds-run-src", text: word }) : null;
14812
+ function runTrailNodes(row, kind) {
14813
+ var word = runSourceWordOf(row);
14814
+ var node = word ? el("span", { class: "ds-run-src", text: word }) : null;
14854
14815
  if (!node) return [];
14855
14816
  if (kind) node.setAttribute("data-trail", kind);
14856
14817
  return [node];
@@ -14864,11 +14825,11 @@ ${calendarAddUrl.toString()}
14864
14825
  }
14865
14826
 
14866
14827
  /**
14867
- * 「いま測った結果」に差し替えるとき、**「◯分前に確認」に添えた**古い run の導線を外す
14868
- * (同じ行が 2 つのことを言わない)。「取り込み: 〜に成功」の横のリンクは別の行の run なので残す
14828
+ * 「いま測った結果」に差し替えるとき、**「◯分前に確認」に添えた**古い出どころの語を外す
14829
+ * (同じ行が 2 つのことを言わない)。「取り込み: 〜に成功」の横の語は別の行のものなので残す
14869
14830
  */
14870
14831
  function removeRunTrail(scope) {
14871
- var old = scope.querySelectorAll('.ds-run-link[data-trail="gate"], .ds-run-src[data-trail="gate"]');
14832
+ var old = scope.querySelectorAll('.ds-run-src[data-trail="gate"]');
14872
14833
  for (var i = 0; i < old.length; i++) old[i].remove();
14873
14834
  }
14874
14835
 
@@ -14907,7 +14868,7 @@ ${calendarAddUrl.toString()}
14907
14868
  class: "ds-ingest" + (r.status === "failed" && !(f && f.partial) ? " ds-ingest-failed" : ""),
14908
14869
  text: text,
14909
14870
  });
14910
- // その行を書いた run へ(#560)。成功でも失敗でも、この時刻を書いた run のログ
14871
+ // run の無い書き手は出どころの語を添える(#560)。成功でも失敗でも同じ
14911
14872
  return frag([span].concat(runTrailNodes(r)));
14912
14873
  }
14913
14874
 
@@ -14966,8 +14927,8 @@ ${calendarAddUrl.toString()}
14966
14927
  row.appendChild(el("span", { class: "ds-gate " + gate.cls, text: gate.text }));
14967
14928
  var when = rtAgo(r.at);
14968
14929
  if (when) row.appendChild(el("span", { class: "ds-gate-at", text: when + "に確認" }));
14969
- // その行を書いた run へ(#560)。run の無い書き手は出どころの語
14970
- runTrailNodes(r, undefined, "gate").forEach(function (n) { row.appendChild(n); });
14930
+ // run の無い書き手は出どころの語を添える(#560)
14931
+ runTrailNodes(r, "gate").forEach(function (n) { row.appendChild(n); });
14971
14932
  return row;
14972
14933
  }
14973
14934
 
@@ -15116,28 +15077,15 @@ ${calendarAddUrl.toString()}
15116
15077
  at: (before && before.at) || "",
15117
15078
  startedAt: Date.now(),
15118
15079
  message: (j && j.message) || "",
15119
- // 起こした run(特定できた回)と一覧(#560)。描き直しでもリンクが消えないよう控える
15120
- runUrl: (j && RUN_URL_RE.test(String(j.runUrl || ""))) ? String(j.runUrl) : "",
15121
- runsUrl: (j && /^https:\\/\\/github\\.com\\/[^\\s"'<>]+$/.test(String(j.runsUrl || ""))) ? String(j.runsUrl) : "",
15122
15080
  };
15123
15081
  probeWaitNote(note, PROBE_WAITS[key]);
15124
15082
  // 待っているあいだは取り直しを回す(届いた行で一覧が描き直される)
15125
15083
  refreshStateTimer();
15126
15084
  }
15127
15085
 
15128
- /**
15129
- * 待ちの 1 文と、その横の導線(#560)。**その run を特定できていればそれ、無ければ一覧。**
15130
- * 開始直後は run の番号が無いことが多いので一覧へ。行が更新されて待ちが解けたら、
15131
- * 行側の「実行ログ ↗」(その run)に置き換わる。run の無い経路(固定 IP・中央)は何も出ない
15132
- */
15086
+ /** 待ちの 1 文(#548)。「同期を開始しました」等、サーバの文言をそのまま出す */
15133
15087
  function probeWaitNote(note, wait) {
15134
15088
  note.textContent = (wait && wait.message) || "";
15135
- if (!wait) return;
15136
- var link = wait.runUrl ? runLogLink(wait.runUrl) : wait.runsUrl ? runLogLink(wait.runsUrl, RUN_LIST_TEXT) : null;
15137
- if (link) {
15138
- note.appendChild(document.createTextNode(" "));
15139
- note.appendChild(link);
15140
- }
15141
15089
  }
15142
15090
 
15143
15091
  /**
@@ -15216,12 +15164,7 @@ ${calendarAddUrl.toString()}
15216
15164
  var phase = probeWaitPhaseOf(capId, ref);
15217
15165
  var wait = probeWaitOf(capId, ref);
15218
15166
  if (phase === "waiting") probeWaitNote(note, wait);
15219
- else if (phase === "timeout") {
15220
- // 15 分待って届かないなら見に行く番。**行き先を添える**(#560)——一覧でも run でも
15221
- note.textContent = PROBE_WAIT_TIMEOUT_TEXT;
15222
- var to = wait && (wait.runUrl || wait.runsUrl);
15223
- if (to) { note.appendChild(document.createTextNode(" ")); note.appendChild(runLogLink(to, wait.runUrl ? "実行ログ ↗" : RUN_LIST_TEXT)); }
15224
- }
15167
+ else if (phase === "timeout") note.textContent = PROBE_WAIT_TIMEOUT_TEXT;
15225
15168
  else note.hidden = true;
15226
15169
 
15227
15170
  checkBtn.addEventListener("click", async function () {
@@ -16545,7 +16488,7 @@ ${calendarAddUrl.toString()}
16545
16488
  // 起動できなかった案件(権限・スタブ未配布)ではリンクを出さない——押しても何も無い
16546
16489
  if (j.runsUrl) {
16547
16490
  msg.appendChild(document.createTextNode(" "));
16548
- msg.appendChild(el("a", { href: j.runUrl || j.runsUrl, target: "_blank", rel: "noopener", title: RUN_LINK_TITLE, text: "実行状況を見る →" })); // その run を特定できていればそれ(#560)、無ければ一覧
16491
+ msg.appendChild(el("a", { href: j.runUrl || j.runsUrl, target: "_blank", rel: "noopener", title: "GitHub Actions の実行ログを開きます(プロジェクトリポジトリへのアクセスが要ります)", text: "実行状況を見る →" })); // その run を特定できていればそれ、無ければ一覧
16549
16492
  }
16550
16493
  // **「反映の状況 →」のリンクは無くなった(#221・2026-08-25)。** 指していたのは
16551
16494
  // 「画面を追いつかせるための fleet-status の実行」で、その起動ごと撤去した
@@ -17131,8 +17074,8 @@ ${calendarAddUrl.toString()}
17131
17074
  var gateAtEl = s.gateAt
17132
17075
  ? el("span", { class: "ds-gate-at", text: rtAgo(s.gateAt) + "に確認" })
17133
17076
  : null;
17134
- // その行を書いた run へ(#560)。overlay が写した 「gateRunUrl」 / 「gateBy」 から決める
17135
- var gateTrail = s.gateAt ? runTrailNodes({ runUrl: s.gateRunUrl || "", by: s.gateBy || "" }, undefined, "gate") : [];
17077
+ // run の無い書き手は出どころの語を添える(#560)。overlay が写した 「gateRunUrl」 / 「gateBy」 から決める
17078
+ var gateTrail = s.gateAt ? runTrailNodes({ runUrl: s.gateRunUrl || "", by: s.gateBy || "" }, "gate") : [];
17136
17079
  var card = el("div", { class: "ds-card" }, [
17137
17080
  el("div", { class: "ds-card-main" }, [
17138
17081
  el("span", { class: "ds-icon", text: meta.icon }),
@@ -18424,7 +18367,7 @@ ${calendarAddUrl.toString()}
18424
18367
  // 起動できたときだけ、実行状況への導線を出す(鍵を入れた直後に効いたか確かめられる)
18425
18368
  if (j.runsUrl) {
18426
18369
  msg.appendChild(document.createTextNode(" "));
18427
- msg.appendChild(el("a", { href: j.runUrl || j.runsUrl, target: "_blank", rel: "noopener", title: RUN_LINK_TITLE, text: "実行状況を見る →" })); // その run を特定できていればそれ(#560)、無ければ一覧
18370
+ msg.appendChild(el("a", { href: j.runUrl || j.runsUrl, target: "_blank", rel: "noopener", title: "GitHub Actions の実行ログを開きます(プロジェクトリポジトリへのアクセスが要ります)", text: "実行状況を見る →" })); // その run を特定できていればそれ、無ければ一覧
18428
18371
  }
18429
18372
  // 入れた値は画面に残さない(肩越しに見えるのを防ぐ)
18430
18373
  input.value = "";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@takagaki/cortex-decisions-viewer",
3
- "version": "0.12.110",
3
+ "version": "0.12.111",
4
4
  "description": "Cortexの意思決定記録(Decisions/*.md)を静的サイトにビルドして閲覧する。各レコードに「Edit on GitHub」リンクを付与する。",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,