@takagaki/cortex-decisions-viewer 0.12.54 → 0.12.55
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 +197 -40
- package/package.json +1 -1
package/dist/render.js
CHANGED
|
@@ -3963,7 +3963,10 @@ a.ds-tile:hover { text-decoration: none; }
|
|
|
3963
3963
|
.ds-probe-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
|
|
3964
3964
|
/* いつ測った結果かを必ず添える。夜間のスナップショットと混ざると、どちらの話か読めない */
|
|
3965
3965
|
.ds-probe-at { font-size: 11.5px; color: var(--muted); }
|
|
3966
|
-
|
|
3966
|
+
/* flex: 1 1 100% は #548 で足した——「接続を確認」の即答は、この段を .ds-probe の中では
|
|
3967
|
+
なく**行(.ds-card)に直接**置く。付けないと ID と「外す」の横に押し込まれて折り返す
|
|
3968
|
+
(.ds-gate-help と同じ理由)。.ds-probe の中(display: block)では効かない */
|
|
3969
|
+
.ds-probe-help { flex: 1 1 100%; margin: 6px 0 0; font-size: 12px; line-height: 1.7; color: #6b7280;
|
|
3967
3970
|
min-width: 0; white-space: normal; overflow-wrap: anywhere; }
|
|
3968
3971
|
/* 「アクセス不可」の原因の候補(0.12.2)。**箇条書きにする**——候補が3つあるので、
|
|
3969
3972
|
一続きの文章にすると読む人が「自分がどれなのか」を自分で切り出すことになる
|
|
@@ -6617,18 +6620,48 @@ ${calendarAddUrl.toString()}
|
|
|
6617
6620
|
});
|
|
6618
6621
|
return p;
|
|
6619
6622
|
}
|
|
6623
|
+
/**
|
|
6624
|
+
* ボタンの detail が「機械語の痕跡」でしかない能力(#548・設計v2 🔴2)。
|
|
6625
|
+
*
|
|
6626
|
+
* この3つは中央が艦隊の鍵で叩く経路(gate)で、押した回の detail には判定の語そのもの
|
|
6627
|
+
* ("unreachable")や生のエラー("ratelimited")が入る。**それ以外の能力
|
|
6628
|
+
* (design / materials / issues)のボタンは、engine の取り込みと同じ判定器の
|
|
6629
|
+
* 同じ1文を書く**ので、出さないと「読めません」の理由が押した人に届かない。
|
|
6630
|
+
*/
|
|
6631
|
+
var GATE_BUTTON_CAPS = ["chat", "dev", "google-chat"];
|
|
6632
|
+
/**
|
|
6633
|
+
* 外部ソースの種別 → 接続状態ストアの能力 id。**上の除外を引くためだけに使う。**
|
|
6634
|
+
* 知らない種別は空文字(=除外に当たらない=理由を出す側に倒す)。
|
|
6635
|
+
*/
|
|
6636
|
+
function gateCapOfType(type) {
|
|
6637
|
+
var t = String(type || "");
|
|
6638
|
+
if (t === "slack") return "chat";
|
|
6639
|
+
if (t === "google-chat") return "google-chat";
|
|
6640
|
+
if (t.indexOf("github") === 0) return "dev";
|
|
6641
|
+
return "";
|
|
6642
|
+
}
|
|
6620
6643
|
/**
|
|
6621
6644
|
* 休止状態の行に出す「最後に測った理由」(表にエントリが無い状態のフォールバック)。
|
|
6622
6645
|
* needed(次の一手・URL 込み)を優先し、無ければ detail。
|
|
6623
6646
|
*
|
|
6624
|
-
* 🔴
|
|
6625
|
-
*
|
|
6626
|
-
*
|
|
6627
|
-
* needed の側。夜間(gold)の detail
|
|
6647
|
+
* 🔴 **gate 経路の書き手が button の detail は出さない。** Slack / GitHub / Google Chat の
|
|
6648
|
+
* ボタンは detail に判定の語そのもの("unreachable")や生のエラー("ratelimited")を
|
|
6649
|
+
* 書く——lastFailDetail を空で潰さないための痕跡で、表示用の値ではない(intake の
|
|
6650
|
+
* op=probe のコメント)。人向けの文を持つのは needed の側。夜間(gold)の detail は
|
|
6651
|
+
* 人向けの文なので出す。
|
|
6652
|
+
*
|
|
6653
|
+
* 🔴 **除外は能力で絞る(#548)。** Figma / Drive / Backlog のボタンは中央がその場で
|
|
6654
|
+
* 案件の鍵で叩いて、engine の取り込みと同じ判定器の同じ1文を detail に書く。
|
|
6655
|
+
* 「button なら出さない」と一律にすると、**押した人にだけ理由が届かない**
|
|
6656
|
+
* (夜間まで待てば同じ文が出る、という逆立ちした画面になる)。
|
|
6657
|
+
*
|
|
6658
|
+
* @param s needed / detail / gateBy に加えて **cap(接続状態ストアの能力 id)** を渡す。
|
|
6659
|
+
* cap を渡さない呼び方は「除外に当たらない」=理由を出す側に倒れる
|
|
6628
6660
|
*/
|
|
6629
6661
|
function stateReasonOf(s) {
|
|
6630
6662
|
if (s.needed) return String(s.needed);
|
|
6631
|
-
|
|
6663
|
+
var hidden = s.gateBy === "button" && GATE_BUTTON_CAPS.indexOf(String(s.cap || "")) >= 0;
|
|
6664
|
+
if (s.detail && !hidden) return String(s.detail);
|
|
6632
6665
|
return "";
|
|
6633
6666
|
}
|
|
6634
6667
|
/**
|
|
@@ -10879,22 +10912,26 @@ ${calendarAddUrl.toString()}
|
|
|
10879
10912
|
return row;
|
|
10880
10913
|
}
|
|
10881
10914
|
if (r.status === "ok" || r.status === "no_token" || r.status === "missing_scope" || r.status === "not_in_channel") return row;
|
|
10882
|
-
|
|
10915
|
+
// **cap を渡す(#548)。** この3能力(design / materials / issues)のボタンは
|
|
10916
|
+
// 判定器の1文を detail に書くので、gate 経路の除外に当てない(stateReasonOf の項)
|
|
10917
|
+
var reason = stateReasonOf({ needed: r.needed, detail: r.detail, gateBy: r.by, cap: capId });
|
|
10883
10918
|
// needed は Slack の行と同じ部品を通す(URL がリンクになる・スコープ名がラベル化される)
|
|
10884
10919
|
if (reason) row.appendChild(r.needed ? neededNode(reason, "ds-gate-help") : el("p", { class: "ds-gate-help", text: reason }));
|
|
10885
10920
|
return row;
|
|
10886
10921
|
}
|
|
10887
10922
|
|
|
10888
10923
|
/* -------------------------------------------------------------------------
|
|
10889
|
-
*
|
|
10924
|
+
* 「接続を確認」と「今すぐ同期」(#523 S3・#548・Backlog / Drive / Figma)
|
|
10890
10925
|
* -------------------------------------------------------------------------
|
|
10891
|
-
*
|
|
10892
|
-
*
|
|
10893
|
-
*
|
|
10926
|
+
* #548 までは、この3つは中央が鍵を読まない(#105 決定5)ので、押すとその案件の同期が
|
|
10927
|
+
* 1回起きるだけだった。オーナーがその境界を覆し、いまは「接続を確認」は Slack / GitHub と
|
|
10928
|
+
* 同じく**中央がその場で叩いて答えを返す**(即答・「showProbeVerdict」)。同期を1回
|
|
10929
|
+
* 起こす従来の動きは「今すぐ同期」(送る値に 「sync: true」)に移った。
|
|
10894
10930
|
*
|
|
10895
|
-
*
|
|
10931
|
+
* 待ちの仕組み(下)は「今すぐ同期」と、Backlog が IP 制限で叩けず夜間と同じ経路へ
|
|
10932
|
+
* 倒れた回のために残る:
|
|
10896
10933
|
* 1. 押す前にその行の 「at」 を控える(🔴2・壁時計を使わない)
|
|
10897
|
-
* 2.
|
|
10934
|
+
* 2. 「同期を開始しました」を出して、取り直し(op=state)を回す
|
|
10898
10935
|
* 3. 控えた 「at」 より新しい行が届いたら、待ちを解いて札を描き直す
|
|
10899
10936
|
* ——札そのものは 「appendReachableChip」 が描くので、ここは待ちの表示だけ
|
|
10900
10937
|
* ----------------------------------------------------------------------- */
|
|
@@ -10972,19 +11009,105 @@ ${calendarAddUrl.toString()}
|
|
|
10972
11009
|
}
|
|
10973
11010
|
|
|
10974
11011
|
/**
|
|
10975
|
-
*
|
|
11012
|
+
* 断られた回の後始末。**待ちに入れない**(出ない結果を15分待たせない)。
|
|
11013
|
+
* 文言はサーバのものをそのまま出す(回数制限・鍵未登録・未登録の接続先・
|
|
11014
|
+
* 登録簿が読めない・ロール未登録・起動失敗が、全部ここへ来る)。
|
|
11015
|
+
*/
|
|
11016
|
+
function probeDeclined(note, key, j) {
|
|
11017
|
+
note.textContent = (j && j.message) || "確認できませんでした。";
|
|
11018
|
+
delete PROBE_WAITS[key];
|
|
11019
|
+
}
|
|
11020
|
+
|
|
11021
|
+
/**
|
|
11022
|
+
* 従来の待ちに入る(同期が1回起きて、答えは接続状態ストアの行として後から届く)。
|
|
11023
|
+
* 通るのは2つ——「今すぐ同期」と、Backlog が IP 制限でこの場では叩けず
|
|
11024
|
+
* **夜間と同じ経路へ倒れた回**(#548)。
|
|
11025
|
+
*
|
|
11026
|
+
* 🔴 **控えた 「at」 で待つ(🔴2・壁時計を使わない)。** 押した時刻で見ると、
|
|
11027
|
+
* 端末の時計がずれている人には永久に届かない(または届く前に届いたことになる)。
|
|
11028
|
+
*/
|
|
11029
|
+
function probeEnterWait(note, key, capId, ref, before, j) {
|
|
11030
|
+
PROBE_WAITS[key] = {
|
|
11031
|
+
cap: capId, ref: ref,
|
|
11032
|
+
at: (before && before.at) || "",
|
|
11033
|
+
startedAt: Date.now(),
|
|
11034
|
+
message: (j && j.message) || "",
|
|
11035
|
+
};
|
|
11036
|
+
note.textContent = (j && j.message) || "";
|
|
11037
|
+
// 待っているあいだは取り直しを回す(届いた行で一覧が描き直される)
|
|
11038
|
+
refreshStateTimer();
|
|
11039
|
+
}
|
|
11040
|
+
|
|
11041
|
+
/**
|
|
11042
|
+
* 即答(#548 の direct)を行に映す。**「probeSection」 と同じ見た目にする**——
|
|
11043
|
+
* 夜間のスナップショットの判定といま測った判定を**同じ行に並べない**ため
|
|
11044
|
+
* (並べると「⚠️ と 接続OK が同時に出ている」になり、この節で何度も直してきた
|
|
11045
|
+
* 食い違いを画面の側から作ることになる)。置き換えたことが分かるよう、
|
|
11046
|
+
* いつ測ったかを必ず添える。
|
|
11047
|
+
*
|
|
11048
|
+
* 🔴 **札が無い行もある**(一度も測っていない接続先= 「appendReachableChip」 が
|
|
11049
|
+
* 何も足していない行)。その場合は札を作って**ボタンの前**に差し込む——後ろに置くと
|
|
11050
|
+
* 行の読み順(札 → ボタン)が崩れる。
|
|
11051
|
+
*
|
|
11052
|
+
* @param anchor 差し込む位置の目印(1つ目のボタン)
|
|
11053
|
+
*/
|
|
11054
|
+
function showProbeVerdict(row, capId, anchorIn, j) {
|
|
11055
|
+
var gate = dsGateForCap(capId, j.gate);
|
|
11056
|
+
// 差し込む位置は**行の最初のボタン**の前(「外す」が出る行では「外す」の前)。
|
|
11057
|
+
// 「接続を確認」の前に置くと、外せる行だけ「外す → 札 → ボタン」の並びになる(🟡10)
|
|
11058
|
+
var anchor = anchorIn;
|
|
11059
|
+
var btns = row.querySelectorAll(".ds-toggle-btn");
|
|
11060
|
+
for (var bi = 0; bi < btns.length; bi++) {
|
|
11061
|
+
// **行の直下にあるボタンだけ**が目印になれる(入れ子の中のボタンの前には差し込めない)
|
|
11062
|
+
if (btns[bi].parentNode === row) { anchor = btns[bi]; break; }
|
|
11063
|
+
}
|
|
11064
|
+
var chip = row.querySelector(".ds-gate");
|
|
11065
|
+
if (!chip) {
|
|
11066
|
+
chip = el("span", { class: "ds-gate" });
|
|
11067
|
+
row.insertBefore(chip, anchor);
|
|
11068
|
+
}
|
|
11069
|
+
chip.className = "ds-gate " + gate.cls;
|
|
11070
|
+
chip.textContent = gate.text;
|
|
11071
|
+
var at = row.querySelector(".ds-gate-at");
|
|
11072
|
+
if (!at) {
|
|
11073
|
+
at = el("span", { class: "ds-gate-at" });
|
|
11074
|
+
row.insertBefore(at, anchor);
|
|
11075
|
+
}
|
|
11076
|
+
at.textContent = "いま測った結果(" + (dsFmtTime(j.checkedAt) || "たった今") + ")";
|
|
11077
|
+
// **夜間の判定に添えてあった案内は隠す。** 置き換えた判定と食い違う案内が下に残ると、
|
|
11078
|
+
// 同じ行が2つのことを言う(probeSection の stale 処理と同じ)
|
|
11079
|
+
var stale = row.querySelectorAll(".ds-gate-help");
|
|
11080
|
+
for (var si = 0; si < stale.length; si++) stale[si].hidden = true;
|
|
11081
|
+
// **押し直しで段が増えないよう、前回の結果は消してから出す**(probeSection の札と同じ)
|
|
11082
|
+
var old = row.querySelectorAll(".ds-probe-help");
|
|
11083
|
+
for (var oi = 0; oi < old.length; oi++) old[oi].remove();
|
|
11084
|
+
// 次の一手は語の表(DS_GATE_CAP)が持っていればそれ。無ければ判定器の1文(detail)
|
|
11085
|
+
// ——どちらも**1段だけ**(帯は症状・行は一手・繰り返さない)
|
|
11086
|
+
var nodes = gateHelpNodes(gate, "ds-probe-help");
|
|
11087
|
+
if (!nodes.length && j.detail) nodes = [el("p", { class: "ds-probe-help", text: String(j.detail) })];
|
|
11088
|
+
nodes.forEach(function (n) { row.appendChild(n); });
|
|
11089
|
+
}
|
|
11090
|
+
|
|
11091
|
+
/**
|
|
11092
|
+
* 接続先1件の「接続を確認」「今すぐ同期」(2ボタン+その場の返事1文)を行に足す。
|
|
11093
|
+
*
|
|
11094
|
+
* **なぜ2つに割れたか(#548)。** 中央が案件の鍵で1回だけ叩けるようになった
|
|
11095
|
+
* (オーナーが #105 決定5 を覆した)ので、「接続を確認」は**その場で答えが返る**
|
|
11096
|
+
* ——押した人を数分〜十数分待たせない。一方「取り込みをやり直したい」は別の用事なので、
|
|
11097
|
+
* 同期を1回起こす従来の動きは「今すぐ同期」として残す(送る値は 「sync: true」)。
|
|
10976
11098
|
*
|
|
10977
11099
|
* **ボタンは行の中**(Slack の行と同じ・2026-08-20 の「1行が2段になる」を繰り返さない)。
|
|
10978
|
-
*
|
|
11100
|
+
* 🔴 **その場の返事(「.ds-probe-wait」)は2つのボタンで1つ・行の最後。** 2つ持つと
|
|
11101
|
+
* 行が2段になり、片方に古い返事が残る。「ds-gate-help」 は付けない——あれは
|
|
11102
|
+
* 「最後に測った理由」の1段で、行の補足が1段であることを見張る検査(#523 S1)が
|
|
11103
|
+
* 数えている。押した人へのその場の返事は別の話なので、専用の class を持たせる。
|
|
10979
11104
|
*/
|
|
10980
11105
|
function appendDispatchProbe(row, capId, ref) {
|
|
10981
11106
|
var type = dispatchProbeTypeOf(capId);
|
|
10982
11107
|
// **書き込み経路が無ければ出さない**(押しても何も起きないボタンを置かない)
|
|
10983
11108
|
if (!type || !SITE.intake || !ref) return row;
|
|
10984
|
-
var
|
|
10985
|
-
|
|
10986
|
-
// 行の補足が1段であることを見張る検査(#523 S1)が数えている。待ちの1文は
|
|
10987
|
-
// 別の話(押した人へのその場の返事)なので、専用の class を持たせる
|
|
11109
|
+
var checkBtn = el("button", { class: "ds-toggle-btn", type: "button", text: "接続を確認" });
|
|
11110
|
+
var syncBtn = el("button", { class: "ds-toggle-btn", type: "button", text: "今すぐ同期" });
|
|
10988
11111
|
var note = el("p", { class: "ds-probe-wait" });
|
|
10989
11112
|
var phase = probeWaitPhaseOf(capId, ref);
|
|
10990
11113
|
var wait = probeWaitOf(capId, ref);
|
|
@@ -10992,40 +11115,72 @@ ${calendarAddUrl.toString()}
|
|
|
10992
11115
|
else if (phase === "timeout") note.textContent = PROBE_WAIT_TIMEOUT_TEXT;
|
|
10993
11116
|
else note.hidden = true;
|
|
10994
11117
|
|
|
10995
|
-
|
|
10996
|
-
var endBusy = beginBusy(
|
|
11118
|
+
checkBtn.addEventListener("click", async function () {
|
|
11119
|
+
var endBusy = beginBusy(checkBtn, "確認中…");
|
|
10997
11120
|
note.hidden = false;
|
|
10998
11121
|
note.textContent = "確認中…";
|
|
10999
11122
|
// 🔴 **押す前に、いまの行の 「at」 を控える(🔴2)。** 行が無ければ空文字
|
|
11000
|
-
//(どんな 「at」
|
|
11123
|
+
//(どんな 「at」 が来ても「新しい」と読める)。使うのは IP 制限で倒れた回だけだが、
|
|
11124
|
+
// 応答が返ってからでは「押す前の行」を控えられない
|
|
11001
11125
|
var before = probeLatestRow(capId, ref);
|
|
11002
11126
|
var key = probeWaitKey(capId, ref);
|
|
11003
11127
|
try {
|
|
11004
11128
|
var res = await callIntake("probe", { type: type, ref: ref });
|
|
11005
11129
|
var j = await res.json().catch(function () { return {}; });
|
|
11006
11130
|
if (!res.ok || j.queued === false) {
|
|
11007
|
-
|
|
11008
|
-
note.textContent = j.message || "確認できませんでした。";
|
|
11009
|
-
delete PROBE_WAITS[key];
|
|
11131
|
+
probeDeclined(note, key, j);
|
|
11010
11132
|
endBusy();
|
|
11011
11133
|
return;
|
|
11012
11134
|
}
|
|
11013
|
-
|
|
11014
|
-
|
|
11015
|
-
|
|
11016
|
-
|
|
11017
|
-
|
|
11018
|
-
|
|
11019
|
-
|
|
11020
|
-
|
|
11021
|
-
|
|
11135
|
+
if (!j.gate) {
|
|
11136
|
+
// 語が返らない回=この場では叩けなかった回。Backlog の IP 制限
|
|
11137
|
+
//(「reason」 が 「ip-restricted」)で夜間と同じ経路へ倒したときと、
|
|
11138
|
+
// 即答をまだ知らない古い Lambda が相手のとき。どちらも従来どおり待つ
|
|
11139
|
+
probeEnterWait(note, key, capId, ref, before, j);
|
|
11140
|
+
endBusy();
|
|
11141
|
+
return;
|
|
11142
|
+
}
|
|
11143
|
+
// 即答。🔴 **待ちには入れない(🟡7)**——結果はもう行に出ているので、
|
|
11144
|
+
// 待ちに入れると「届いた行」を探して15分待つ空回りになる
|
|
11145
|
+
delete PROBE_WAITS[key];
|
|
11146
|
+
note.hidden = true;
|
|
11147
|
+
note.textContent = "";
|
|
11148
|
+
showProbeVerdict(row, capId, checkBtn, j);
|
|
11149
|
+
// ストアにも 「button」 の行が書かれている。**取りに行くのは1回だけ**——
|
|
11150
|
+
// 届いた行で一覧が描き直され、この行の札が正本の値に揃う
|
|
11151
|
+
loadLiveFleet();
|
|
11022
11152
|
} catch (e) {
|
|
11023
11153
|
note.textContent = "通信に失敗しました。";
|
|
11024
11154
|
delete PROBE_WAITS[key];
|
|
11025
11155
|
}
|
|
11026
11156
|
endBusy();
|
|
11027
11157
|
});
|
|
11028
|
-
|
|
11158
|
+
|
|
11159
|
+
syncBtn.addEventListener("click", async function () {
|
|
11160
|
+
var endBusy = beginBusy(syncBtn, "同期中…");
|
|
11161
|
+
note.hidden = false;
|
|
11162
|
+
note.textContent = "同期中…";
|
|
11163
|
+
// 押す前の 「at」 を控える(上と同じ理由・壁時計を使わない)
|
|
11164
|
+
var before = probeLatestRow(capId, ref);
|
|
11165
|
+
var key = probeWaitKey(capId, ref);
|
|
11166
|
+
try {
|
|
11167
|
+
var res = await callIntake("probe", { type: type, ref: ref, sync: true });
|
|
11168
|
+
var j = await res.json().catch(function () { return {}; });
|
|
11169
|
+
if (!res.ok || j.queued === false) {
|
|
11170
|
+
probeDeclined(note, key, j);
|
|
11171
|
+
endBusy();
|
|
11172
|
+
return;
|
|
11173
|
+
}
|
|
11174
|
+
probeEnterWait(note, key, capId, ref, before, j);
|
|
11175
|
+
} catch (e) {
|
|
11176
|
+
note.textContent = "通信に失敗しました。";
|
|
11177
|
+
delete PROBE_WAITS[key];
|
|
11178
|
+
}
|
|
11179
|
+
endBusy();
|
|
11180
|
+
});
|
|
11181
|
+
|
|
11182
|
+
row.appendChild(checkBtn);
|
|
11183
|
+
row.appendChild(syncBtn);
|
|
11029
11184
|
row.appendChild(note);
|
|
11030
11185
|
return row;
|
|
11031
11186
|
}
|
|
@@ -11034,7 +11189,7 @@ ${calendarAddUrl.toString()}
|
|
|
11034
11189
|
* 一覧に出ている接続先の「届くか」をひとつの文字列にする(描き直しの要否の判定用)。
|
|
11035
11190
|
*
|
|
11036
11191
|
* **待ちの相も混ぜる(#523 S3)。** 混ぜないと、15分の上限に達しても一覧が
|
|
11037
|
-
*
|
|
11192
|
+
* 作り直されず、「同期を開始しました」が出たまま止まる(待てば出ると言い続ける形)。
|
|
11038
11193
|
*/
|
|
11039
11194
|
function reachSigOf(capId, refs) {
|
|
11040
11195
|
var now = Date.now();
|
|
@@ -12921,7 +13076,9 @@ ${calendarAddUrl.toString()}
|
|
|
12921
13076
|
var restingParts = restingHelpPartsOf(s.type, s.gate);
|
|
12922
13077
|
if (restingParts) card.appendChild(restingHelpNode(restingParts, "ds-gate-help ds-gate-resting"));
|
|
12923
13078
|
else {
|
|
12924
|
-
|
|
13079
|
+
// **能力に畳んでから渡す(#548)。** ここへ来るのは Slack / GitHub / Google Chat の
|
|
13080
|
+
// 行だけなので、ボタンが書いた detail(判定語)は従来どおり出さない
|
|
13081
|
+
var reason = stateReasonOf({ needed: s.needed, detail: s.detail, gateBy: s.gateBy, cap: gateCapOfType(s.type) });
|
|
12925
13082
|
if (reason) card.appendChild(neededNode(reason, "ds-gate-help ds-gate-reason"));
|
|
12926
13083
|
}
|
|
12927
13084
|
}
|
|
@@ -12935,9 +13092,9 @@ ${calendarAddUrl.toString()}
|
|
|
12935
13092
|
// 判定と文面は infra/lambda/shared/github-gate.mjs 側(画面に分岐を持たせない)。
|
|
12936
13093
|
// **Google Chat は #347(同じ理由)。** スペースにアプリを追加した人が、その場で
|
|
12937
13094
|
// 直ったことを確かめられる。判定は infra/lambda/shared/google-chat-gate.mjs 側。
|
|
12938
|
-
// **Backlog / Figma / Drive は「接続を確認」の型が違う**(#523 S3・レジストリの
|
|
12939
|
-
// 「probe:
|
|
12940
|
-
//
|
|
13095
|
+
// **Backlog / Figma / Drive は「接続を確認」の型が違う**(#523 S3・#548・レジストリの
|
|
13096
|
+
// 「probe: direct」)。中央が案件の鍵で叩いて即答し、「今すぐ同期」も並ぶので、
|
|
13097
|
+
// ここではなくそれぞれの一覧の行が 「appendDispatchProbe」 で出す。
|
|
12941
13098
|
//
|
|
12942
13099
|
// **origin === "explicit" でも出す。** 確認は読むだけで、どの登録ファイル由来かに
|
|
12943
13100
|
// 関係なく効く(書き込みになる「表示名を更新する」だけが由来で出し分かれる)
|
package/package.json
CHANGED