@takagaki/cortex-decisions-viewer 0.12.69 → 0.12.70
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 +152 -38
- package/package.json +1 -1
package/dist/render.js
CHANGED
|
@@ -71,6 +71,8 @@ exports.liveRowVerdict = liveRowVerdict;
|
|
|
71
71
|
exports.liveRegistryOf = liveRegistryOf;
|
|
72
72
|
exports.liveToolKey = liveToolKey;
|
|
73
73
|
exports.liveToolItems = liveToolItems;
|
|
74
|
+
exports.capabilityPipeRe = capabilityPipeRe;
|
|
75
|
+
exports.capabilityWarnSource = capabilityWarnSource;
|
|
74
76
|
exports.renderConnectionMap = renderConnectionMap;
|
|
75
77
|
const node_crypto_1 = require("node:crypto");
|
|
76
78
|
const google_chat_guide_images_1 = require("./google-chat-guide-images");
|
|
@@ -252,13 +254,20 @@ const CAP_STATE_TEXT = {
|
|
|
252
254
|
};
|
|
253
255
|
/** 状態の印。CAP_STATE_TEXT の前に付ける(マップは付けない——⚠️バッジと二重になる) */
|
|
254
256
|
const CAP_STATE_MARK = { ok: "● ", idle: "⦿ ", warn: "⚠️ ", off: "" };
|
|
257
|
+
/**
|
|
258
|
+
* 接続マップに並べる能力と、その絵文字。
|
|
259
|
+
*
|
|
260
|
+
* 🔴 **能力→パイプラインの対応表をここに持たない(#654)。** かつて `pipe:` の欄が
|
|
261
|
+
* あったが誰も読んでおらず(死んだ写し)、正本は `capabilityPipeRe` 1 本。
|
|
262
|
+
* 写しを置くと、次に触る人が「表はここにもある」と読んで 2 枚目を育てる。
|
|
263
|
+
*/
|
|
255
264
|
const CM_CAPS = [
|
|
256
|
-
{ cap: "課題管理", icon: "📋"
|
|
257
|
-
{ cap: "会議", icon: "🎙"
|
|
258
|
-
{ cap: "共有資料", icon: "📁"
|
|
259
|
-
{ cap: "デザイン", icon: "🎨"
|
|
260
|
-
{ cap: "チャット", icon: "💬"
|
|
261
|
-
{ cap: "開発", icon: "🐙"
|
|
265
|
+
{ cap: "課題管理", icon: "📋" },
|
|
266
|
+
{ cap: "会議", icon: "🎙" },
|
|
267
|
+
{ cap: "共有資料", icon: "📁" },
|
|
268
|
+
{ cap: "デザイン", icon: "🎨" },
|
|
269
|
+
{ cap: "チャット", icon: "💬" },
|
|
270
|
+
{ cap: "開発", icon: "🐙" },
|
|
262
271
|
];
|
|
263
272
|
/**
|
|
264
273
|
* ツールid→表示名(接続マップのノードラベル用)。
|
|
@@ -3705,17 +3714,78 @@ function liveToolItems(tools, registered, rows) {
|
|
|
3705
3714
|
}
|
|
3706
3715
|
return out;
|
|
3707
3716
|
}
|
|
3708
|
-
|
|
3709
|
-
|
|
3710
|
-
|
|
3711
|
-
|
|
3712
|
-
|
|
3717
|
+
/**
|
|
3718
|
+
* その能力を同期するワークフローの id を当てる正規表現(持たない能力は `null`)。
|
|
3719
|
+
*
|
|
3720
|
+
* 🔴 **能力→パイプラインの対応表はここが唯一の持ち主。** 呼び出し側に渡させると、
|
|
3721
|
+
* クライアント側(この関数を `.toString()` で受け取る側)が同じ表を書き写すことになり、
|
|
3722
|
+
* 書き忘れると warn 判定が丸ごと死ぬ——実データで、東京ヴェルディの課題管理が
|
|
3723
|
+
* マップは⚠️・タイルは「接続OK」になった。**この関数が読むものは、この関数が持つ。**
|
|
3724
|
+
*
|
|
3725
|
+
* 🔴 **この表を読む先は 2 つある(#654 設計レビュー🔴3)。** `capabilityWarnSource`
|
|
3726
|
+
* (直近の run が `failure`)と、`capabilityState` の `pipeSkipped`
|
|
3727
|
+
* (`applicable === false`=空振りした run の時刻を「繋がっている証拠」にしない)。
|
|
3728
|
+
* **warn 側だけ 1 本にして `pipeSkipped` に写しを残さないこと**——残すと、表を直した回に
|
|
3729
|
+
* 「⚠️ は消えたが『接続OK/未接続』だけ別物」という割れ方をする。
|
|
3730
|
+
*
|
|
3731
|
+
* 🔴 **表は関数の中に literal で置く(モジュール直下の `const` にしない)。** export した
|
|
3732
|
+
* 瞬間に tsc が `exports.X` へ書き換え、`.toString()` で客先へ渡った関数が
|
|
3733
|
+
* ブラウザで未定義を参照する——ライブ取得が丸ごと落ちて画面が静的表示に戻る
|
|
3734
|
+
* (`ingestFacts` の項と同じ穴)。
|
|
3735
|
+
*
|
|
3736
|
+
* **クロージャを持たない純関数に保つこと**(`.toString()` でクライアントへ渡す)。
|
|
3737
|
+
*/
|
|
3738
|
+
function capabilityPipeRe(cap) {
|
|
3713
3739
|
var PIPE = {
|
|
3714
3740
|
"課題管理": /sync-backlog/,
|
|
3715
3741
|
"会議": /ingest-minutes/,
|
|
3716
3742
|
"共有資料": /sync-materials/,
|
|
3717
3743
|
"デザイン": /sync-designs|update-design-notes/,
|
|
3718
3744
|
};
|
|
3745
|
+
return PIPE[cap] || null;
|
|
3746
|
+
}
|
|
3747
|
+
/**
|
|
3748
|
+
* その能力の⚠️が、**どの材料から立ったか**(#654)。`null` なら warn の材料が無い。
|
|
3749
|
+
*
|
|
3750
|
+
* - `"live"` … ライブ参照の行(`externalSources` の gate)。チャット・開発・その他。
|
|
3751
|
+
* `stateCtx()` が接続状態ストアを**重ねたあとの行**なので、まとめ表由来でも
|
|
3752
|
+
* **その晩の観測**まで追いついている
|
|
3753
|
+
* - `"pipeline"` … まとめ表の `pipelines`(ワークフローの run の結論)。課題管理・会議・
|
|
3754
|
+
* 共有資料・デザイン。**ビルド時に焼かれ、ライブで取り直されない**
|
|
3755
|
+
* (`stateCtx()` が上書きを当てるのは `externalSources` だけ)ので、一度赤くなると
|
|
3756
|
+
* **次のビルドまで赤いまま**になる
|
|
3757
|
+
*
|
|
3758
|
+
* 🔴 **この 2 つを混ぜないために切り出してある(#654)。** タイルには「導出(接続状態
|
|
3759
|
+
* ストア)が warn を降格しない」という門があるが、**焼いた `pipelines` の赤にまで
|
|
3760
|
+
* その門を効かせると、ストアが「たった今 取り込めた」と言っている能力に
|
|
3761
|
+
* 「⚠️ 同期が失敗しています」と出る**——gift-stvv が 2026-09-17 に踏んだ形で、
|
|
3762
|
+
* 同じページのモーダルと接続マップは「接続OK」と言っていた
|
|
3763
|
+
* (`ops-ui-controls-policy.md` R10「状態の出どころが複数あるときは、新しい方に揃える」)。
|
|
3764
|
+
*
|
|
3765
|
+
* **クロージャを持たない純関数に保つこと**(`.toString()` でクライアントへ渡す。
|
|
3766
|
+
* 引くのは `capabilityPipeRe` / `sourceMatchesAdapter` / `sourceNeedsAttention` / `CAP_OTHER`
|
|
3767
|
+
* の 4 つだけで、どれも関数宣言か `var`——**流し込む順は効かない**)。
|
|
3768
|
+
*/
|
|
3769
|
+
function capabilityWarnSource(cap, ctx, adapter) {
|
|
3770
|
+
// **ライブ参照かどうかは能力名で決める。** 行の有無で決めると、行が 0 件の回に
|
|
3771
|
+
// 「パイプライン由来」へ倒れる——チャット・開発には対応するパイプラインが無いので
|
|
3772
|
+
// 答えは同じ null だが、**判定の意味が変わる**(この関数の答えは門の可否に使われる)
|
|
3773
|
+
var isLive = cap === "チャット" || cap === "開発" || cap === CAP_OTHER;
|
|
3774
|
+
if (isLive) {
|
|
3775
|
+
// **アダプタが指定されたら、その行だけで数える(#153)。** チャットが2アダプタに
|
|
3776
|
+
// なったので、Slack のタイルの warn 判定に Google Chat の gate 落ちが混ざると、
|
|
3777
|
+
// 直す場所が違う方を指す。絞り方の正本は sourceMatchesAdapter
|
|
3778
|
+
return (ctx.externals || []).filter(function (s) { return sourceMatchesAdapter(s.type, cap, adapter); })
|
|
3779
|
+
.some(function (s) { return sourceNeedsAttention(s); }) ? "live" : null;
|
|
3780
|
+
}
|
|
3781
|
+
var re = capabilityPipeRe(cap);
|
|
3782
|
+
return (ctx.pipes || []).some(function (p) {
|
|
3783
|
+
return re != null && re.test(p.id) && p.applicable !== false && p.lastConclusion === "failure";
|
|
3784
|
+
}) ? "pipeline" : null;
|
|
3785
|
+
}
|
|
3786
|
+
function capabilityState(cap, ctx, adapter) {
|
|
3787
|
+
// **能力→パイプラインの対応は capabilityPipeRe が持つ(#654)。** ここに写しを
|
|
3788
|
+
// 作らない——写しがずれると「マップは⚠️・タイルは接続OK」が復活する
|
|
3719
3789
|
// **ライブ参照かどうかは、能力名ではなく渡された行から決める。** 名前で決めていたとき、
|
|
3720
3790
|
// 未知の種別を寄せた「その他」は行を2件持っているのに「未使用」と言い切っていた
|
|
3721
3791
|
// (読み手は未使用を信じて押さないので、行が消えるより悪い)
|
|
@@ -3725,7 +3795,10 @@ function capabilityState(cap, ctx, adapter) {
|
|
|
3725
3795
|
const liveExts = ctx.externals.filter(function (s) { return sourceMatchesAdapter(s.type, cap, adapter); });
|
|
3726
3796
|
const isLive = cap === "チャット" || cap === "開発" || cap === CAP_OTHER;
|
|
3727
3797
|
const internal = ctx.internals.filter(function (s) { return s.kind === cap; })[0];
|
|
3728
|
-
|
|
3798
|
+
// 🔴 **空振りした run(applicable: false)を篩うのにも同じ表を引く(#654 設計レビュー🔴3)。**
|
|
3799
|
+
const pipeRe = capabilityPipeRe(cap);
|
|
3800
|
+
// ⚠️ の材料と、その出どころ(#654)。**warn の判定はこの 1 本だけを通す**
|
|
3801
|
+
const warnSrc = capabilityWarnSource(cap, ctx, adapter);
|
|
3729
3802
|
// ---- #125②: 導出(capabilities)があるならそれが状態の正本 ----
|
|
3730
3803
|
//
|
|
3731
3804
|
// **ここが唯一の分岐点。** 導出の有無で描き分けるのはこの1箇所に閉じ、
|
|
@@ -3754,13 +3827,7 @@ function capabilityState(cap, ctx, adapter) {
|
|
|
3754
3827
|
if (derived === "broken")
|
|
3755
3828
|
return "warn";
|
|
3756
3829
|
if (derived === "on") {
|
|
3757
|
-
return
|
|
3758
|
-
? liveExts.some(function (s) { return sourceNeedsAttention(s); })
|
|
3759
|
-
: ctx.pipes.some(function (p) {
|
|
3760
|
-
return pipeRe != null && pipeRe.test(p.id) && p.applicable !== false && p.lastConclusion === "failure";
|
|
3761
|
-
}))
|
|
3762
|
-
? "warn"
|
|
3763
|
-
: "ok";
|
|
3830
|
+
return warnSrc ? "warn" : "ok";
|
|
3764
3831
|
}
|
|
3765
3832
|
// unset / empty / 未知の値。**未知を ok にも off にも寄せない**——どちらも嘘になる。
|
|
3766
3833
|
// 「まだ繋がっていない」側に倒すのが安全(繋がっていないのに線を引かない)。
|
|
@@ -3774,7 +3841,7 @@ function capabilityState(cap, ctx, adapter) {
|
|
|
3774
3841
|
// 状態が unset(engine がこのアダプタをまだ知らない移行期間)だからと黙らせると、
|
|
3775
3842
|
// 同じ行から描く接続マップだけが⚠️になり、「マップが⚠️・直下は静か」という
|
|
3776
3843
|
// 既知の最悪事故の変形が移行期間のデフォルトになる
|
|
3777
|
-
if (
|
|
3844
|
+
if (warnSrc === "live")
|
|
3778
3845
|
return "warn";
|
|
3779
3846
|
return "idle";
|
|
3780
3847
|
}
|
|
@@ -3803,14 +3870,8 @@ function capabilityState(cap, ctx, adapter) {
|
|
|
3803
3870
|
(isLive && liveExts.length > 0);
|
|
3804
3871
|
const off = (internal != null && internal.enabled === false) || !used;
|
|
3805
3872
|
// 問題あり: ライブ参照はgate≠okが1件以上、同期ソースは対応パイプラインの直近runがfailure
|
|
3806
|
-
|
|
3807
|
-
|
|
3808
|
-
? liveExts.some(function (s) {
|
|
3809
|
-
return sourceNeedsAttention(s);
|
|
3810
|
-
})
|
|
3811
|
-
: ctx.pipes.some(function (p) {
|
|
3812
|
-
return (pipeRe != null && pipeRe.test(p.id) && p.applicable !== false && p.lastConclusion === "failure");
|
|
3813
|
-
}));
|
|
3873
|
+
//(判定の実体は capabilityWarnSource 1 本・#654)
|
|
3874
|
+
const warn = !off && !!warnSrc;
|
|
3814
3875
|
// 「実際に繋がっている」の証拠は共通で次のどれか:
|
|
3815
3876
|
// - 一度でも同期が走った(lastSync)
|
|
3816
3877
|
// - 正本のURLが導出できる(url。設定ファイルが実在して初めて出る)
|
|
@@ -3970,7 +4031,11 @@ function renderConnectionMap(site) {
|
|
|
3970
4031
|
const sub = `<text class="cm-sync" x="${cx}" y="67" text-anchor="middle"` +
|
|
3971
4032
|
(statusTs ? ` data-ts="${escapeHtml(statusTs)}"` : "") +
|
|
3972
4033
|
`>${escapeHtml(statusText)}</text>`;
|
|
3973
|
-
|
|
4034
|
+
// 🔴 **6ノードに常時焼いて、表示だけを切り替える(線と同じ形・#654)。** warn の
|
|
4035
|
+
// ノードにだけ焼いていたときは、`applyStateToConnMap` が当て直せず
|
|
4036
|
+
// **「緑のノードに⚠️が付いたまま」**が残った——ライブで接続OKに直っても、
|
|
4037
|
+
// ビルド時に赤かった能力は次のビルドまで⚠️を出し続ける(#654 の症状の片割れ)
|
|
4038
|
+
const badge = `<text class="cm-badge${warn ? "" : " is-hidden"}" x="${cx + 62}" y="24" text-anchor="middle">⚠️</text>`;
|
|
3974
4039
|
// クリックでページ内の該当詳細カード(アンカー)へスクロールする
|
|
3975
4040
|
const anchor = `ds-${c.cap}`;
|
|
3976
4041
|
nodes.push(`<g class="cm-node ${state}" data-target="${anchor}" tabindex="0" role="link" aria-label="${escapeHtml(c.cap)}の詳細へ">` +
|
|
@@ -4969,6 +5034,7 @@ a.ds-name:hover { text-decoration: underline; }
|
|
|
4969
5034
|
.cm-sync { font-size: 10.5px; fill: var(--muted); font-variant-numeric: tabular-nums; }
|
|
4970
5035
|
.cm-node.cm-off .cm-sync { fill: #9ca3af; }
|
|
4971
5036
|
.cm-badge { font-size: 13px; }
|
|
5037
|
+
.cm-badge.is-hidden { display: none; }
|
|
4972
5038
|
/* 「入ってこない」ときに自分で確かめる口。一覧の直前に置く */
|
|
4973
5039
|
.ds-syncnow { display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; margin: 0 0 .6rem; }
|
|
4974
5040
|
.ds-syncnow-label { font-size: .82rem; color: var(--muted); }
|
|
@@ -5639,6 +5705,13 @@ ${capabilityDisplayState.toString()}
|
|
|
5639
5705
|
${pending_ops_1.backlogTargetOf.toString()}
|
|
5640
5706
|
${issuesRefOf.toString()}
|
|
5641
5707
|
${sourceNeedsAttention.toString()}
|
|
5708
|
+
// 能力→パイプラインの対応表(#654)と、⚠️ の出どころ。**並びは読みやすさのためで、
|
|
5709
|
+
// 依存の順ではない**——関数宣言はこの IIFE の中で巻き上がる(実装レビュー🟡4 で実測)。
|
|
5710
|
+
// 🔴 **効くのは「対応表をモジュール直下の const にしない」のほう**——そこへ出して
|
|
5711
|
+
// export すると、tsc が参照を書き換えて、流し込んだ関数がブラウザで未定義を見る
|
|
5712
|
+
//(番人は state-vocab-parity / ingest-partial-failure の「素の JS だけを渡す」検査)
|
|
5713
|
+
${capabilityPipeRe.toString()}
|
|
5714
|
+
${capabilityWarnSource.toString()}
|
|
5642
5715
|
${capabilityState.toString()}
|
|
5643
5716
|
// ライブ確認の見切り(#256)。**書き写さない**——テストが固定している値と
|
|
5644
5717
|
// 画面が使う値が割れると、「10秒で戻る」検査が通ったまま実機では戻らなくなる
|
|
@@ -11202,7 +11275,8 @@ ${calendarAddUrl.toString()}
|
|
|
11202
11275
|
// **unset を idle に短絡しない(#153)。** 短絡すると gate 異常(読めていない行)の
|
|
11203
11276
|
// warn 判定を一度も通らず、接続マップだけが⚠️になる。アダプタごとの状態の解決
|
|
11204
11277
|
//(adapters[] / 旧データの代表値の扱い)は capabilityState 自身が持つ
|
|
11205
|
-
var
|
|
11278
|
+
var stCtx = stateCtx();
|
|
11279
|
+
var st = capabilityState(cap, stCtx, adapter);
|
|
11206
11280
|
// 🔴 **状態の正本は「登録・実測からの導出」(0.12.0・#231 / #235 / #227)。**
|
|
11207
11281
|
// 設定が済んでいること(capabilities が on)と、実際に動いていることは別。
|
|
11208
11282
|
// 設定だけを見て「● 接続OK」と出すと、**画面が動いていないものを動いていると言う**
|
|
@@ -11223,8 +11297,17 @@ ${calendarAddUrl.toString()}
|
|
|
11223
11297
|
// 残る**——夜間がまだ一度も走っていない案件・ストアが読めなかった回。そこで
|
|
11224
11298
|
// fleet の行から出た warn を導出(規則4=idle)が上書きすると
|
|
11225
11299
|
// 「接続グラフは⚠️・タイルは静か」——この仕組みが殺したはずの食い違いが再発する
|
|
11226
|
-
|
|
11227
|
-
|
|
11300
|
+
//
|
|
11301
|
+
// 🔴 **ただし門が効くのは「ライブの行」から立った warn だけ(#654)。** まとめ表の
|
|
11302
|
+
// pipelines(ワークフローの run の結論)は**ビルド時に焼かれ、ライブで取り直されない**
|
|
11303
|
+
// ——stateCtx が接続状態ストアを重ねるのは externalSources だけなので、一度赤く
|
|
11304
|
+
// なると次のビルドまで赤いまま。そこに門を効かせると、**ストアが「たった今 取り込めた」と
|
|
11305
|
+
// 言っている能力のタイルだけが「⚠️ 同期が失敗しています」**になる(gift-stvv・
|
|
11306
|
+
// 2026-09-17。同じページのモーダルと接続マップは「接続OK」と言っていた)。
|
|
11307
|
+
// 出どころの判定は capabilityWarnSource 1 本——ここに写しを作らない
|
|
11308
|
+
var liveWarn = st === "warn" && capabilityWarnSource(cap, stCtx, adapter) === "live";
|
|
11309
|
+
if (derive && !(liveWarn && derive.state !== "warn")) st = derive.state;
|
|
11310
|
+
else if (derive) derive = null;
|
|
11228
11311
|
// **ロゴはタイルの左に独立して置く。** 名前の行に入れると名前の高さに
|
|
11229
11312
|
// 縛られて小さくなる。ロゴで能力を見分けられるのが一覧の主な用途
|
|
11230
11313
|
var logo = ADAPTER_ICONS[adapter];
|
|
@@ -11256,7 +11339,12 @@ ${calendarAddUrl.toString()}
|
|
|
11256
11339
|
// (意図的に止めた・設定が壊れている)で導出が止まった回にストアの ok で「接続OK」と
|
|
11257
11340
|
// 言うと、表 5 の優先順位(OFF・設定に異常が導出より先)を裏切る(実装レビュー🟡2)
|
|
11258
11341
|
var pendNow = pend && (derived == null || derived === "on" || derived === "unset") ? pendingTileVerdict(cap, adapter) : null;
|
|
11259
|
-
|
|
11342
|
+
// **判定の写しを 2 つにしないため liveWarn に寄せてある(#654)。** ここは
|
|
11343
|
+
// 実際には st === "warn" と等価——pendNow が立つのは derived が unset で導出を
|
|
11344
|
+
// 止めた経路だけで、その経路の warn はライブの行からしか立たない(実装レビュー🟡3)。
|
|
11345
|
+
// **「焼いた pipelines がここを通る」という経路は無い**ので、そう読んで条件を
|
|
11346
|
+
// いじらないこと
|
|
11347
|
+
if (pendNow && liveWarn && pendNow.cls === "ds-gate-ok") pendNow = null;
|
|
11260
11348
|
// 🔴 **初回のライブ確認が答えるまで、状態を断言しない(#256・設計v2 の5)。**
|
|
11261
11349
|
// この2行目は焼いた capabilities 由来の状態を先に言っていたので、図と同じ瞬き
|
|
11262
11350
|
// (旧状態を見せて1〜2秒後に訂正)をタイルでも起こしていた。**兄弟機能の同型の
|
|
@@ -15941,6 +16029,28 @@ ${calendarAddUrl.toString()}
|
|
|
15941
16029
|
if (capConfigState(cap)) { restoreBakedConnMap(cap); continue; }
|
|
15942
16030
|
var d = capDerivation(cap);
|
|
15943
16031
|
if (!d) { restoreBakedConnMap(cap); continue; } // 規則5: 材料が無い → 焼いた図のまま
|
|
16032
|
+
// 🔴 **図にもタイルと同じ門を効かせる(#654 実装レビュー🔴1)。** ライブの行から
|
|
16033
|
+
// 立った warn(ストアがまだ測っていない接続先の gate)は導出が降格しない
|
|
16034
|
+
//(#153)。タイルだけが門を持っていると「タイルは⚠️・図は無言」——R10 が
|
|
16035
|
+
// 殺したはずの食い違いの鏡像になる。門の材料はタイルと同じ 1 本
|
|
16036
|
+
//(capabilityWarnSource)で、焼いた pipelines の赤はここでも効かない
|
|
16037
|
+
var mapCtx = stateCtx();
|
|
16038
|
+
var mapLiveWarn = capabilityState(cap, mapCtx) === "warn" &&
|
|
16039
|
+
capabilityWarnSource(cap, mapCtx) === "live" && d.state !== "warn";
|
|
16040
|
+
if (mapLiveWarn) {
|
|
16041
|
+
// 焼いた表示(3行目の語)へ戻してから、状態だけ warn に固定する
|
|
16042
|
+
// ——図は幅が 148px しかなく、行と同じ語はタイルが持つ
|
|
16043
|
+
restoreBakedConnMap(cap);
|
|
16044
|
+
var wNode = wrap.querySelector('[data-target="ds-' + cap + '"]');
|
|
16045
|
+
if (wNode) {
|
|
16046
|
+
wNode.setAttribute("class", "cm-node cm-warn");
|
|
16047
|
+
var wBadge = wNode.querySelector(".cm-badge");
|
|
16048
|
+
if (wBadge) wBadge.setAttribute("class", "cm-badge");
|
|
16049
|
+
}
|
|
16050
|
+
var wLink = wrap.querySelector('.cm-link[data-cm-cap="' + cap + '"]');
|
|
16051
|
+
if (wLink) wLink.setAttribute("class", "cm-link cm-warn");
|
|
16052
|
+
continue;
|
|
16053
|
+
}
|
|
15944
16054
|
var node = wrap.querySelector('[data-target="ds-' + cap + '"]');
|
|
15945
16055
|
if (!node) continue;
|
|
15946
16056
|
node.setAttribute("class", "cm-node cm-" + d.state);
|
|
@@ -15960,6 +16070,11 @@ ${calendarAddUrl.toString()}
|
|
|
15960
16070
|
link.setAttribute("class", "cm-link cm-" + d.state
|
|
15961
16071
|
+ (d.state === "ok" || d.state === "warn" ? "" : " is-hidden"));
|
|
15962
16072
|
}
|
|
16073
|
+
// 🔴 **⚠️バッジも当て直す(#654)。** 当て直さないと、ビルド時に赤かった能力は
|
|
16074
|
+
// ライブで接続OKに直っても⚠️を出し続ける(「緑のノードに⚠️」)。線と同じ形で
|
|
16075
|
+
// 常時焼いてあるので、ここは表示の切り替えだけ
|
|
16076
|
+
var badge = node.querySelector(".cm-badge");
|
|
16077
|
+
if (badge) badge.setAttribute("class", "cm-badge" + (d.state === "warn" ? "" : " is-hidden"));
|
|
15963
16078
|
// 確定したので退避は要らない(設計v3)。**残すと、あとの取得が失敗したときに
|
|
15964
16079
|
// 確定済みの表示へ焼いた値が上書きされる**——訂正した嘘が戻ってくる
|
|
15965
16080
|
forgetBakedConnMap(node, link);
|
|
@@ -15982,11 +16097,10 @@ ${calendarAddUrl.toString()}
|
|
|
15982
16097
|
* derived が null / "on")。OFF・異常・未設置の語は設定そのものの話で、ライブが
|
|
15983
16098
|
* 届いても変わらない——確認中にしたら、応答が来ても戻す相手がいなくなる。
|
|
15984
16099
|
*
|
|
15985
|
-
* ⚠ **⚠️バッジ(cm-badge)は触らない。**
|
|
15986
|
-
*
|
|
15987
|
-
*
|
|
15988
|
-
*
|
|
15989
|
-
* 6ノードに常時バッジを焼いて表示を切り替える形(線と同じ)にする別便が要る。
|
|
16100
|
+
* ⚠ **⚠️バッジ(cm-badge)は触らない。** 確認中の間だけ隠すと、応答で warn が
|
|
16101
|
+
* 確定したときに**失敗が図から消えたまま**になる——「cm-warn を隠さない」の逆を
|
|
16102
|
+
* こちらの都合で作る。**応答が届いたあとは applyStateToConnMap が当て直す**
|
|
16103
|
+
* (#654 でバッジを 6 ノードに常時焼き、線と同じ「表示の切り替え」にした)。
|
|
15990
16104
|
*/
|
|
15991
16105
|
function showConfirmingConnMap() {
|
|
15992
16106
|
var wrap = app.querySelector(".conn-map");
|
package/package.json
CHANGED