@takagaki/cortex-decisions-viewer 0.12.70 → 0.12.72
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 +193 -85
- package/package.json +1 -1
package/dist/render.js
CHANGED
|
@@ -20,6 +20,7 @@ exports.sanitizeStateNow = sanitizeStateNow;
|
|
|
20
20
|
exports.devExcludedSkip = devExcludedSkip;
|
|
21
21
|
exports.devExcludedRefs = devExcludedRefs;
|
|
22
22
|
exports.devExcludedLabel = devExcludedLabel;
|
|
23
|
+
exports.devExcludedBadgeVisible = devExcludedBadgeVisible;
|
|
23
24
|
exports.overlayStateOnFleet = overlayStateOnFleet;
|
|
24
25
|
exports.chatRowsToAdd = chatRowsToAdd;
|
|
25
26
|
exports.gchatRowsToAdd = gchatRowsToAdd;
|
|
@@ -567,8 +568,8 @@ const TOOL_KIND_ICONS = {
|
|
|
567
568
|
};
|
|
568
569
|
/**
|
|
569
570
|
* 状態の表示語と色。**5 語+「登録状況を確認中です」しか出さない**(読み取り中/
|
|
570
|
-
* 接続OK
|
|
571
|
-
* まだ測っていない行の「確認中」・#581 / #640)。
|
|
571
|
+
* 接続OK(活動を記録中)/承認待ち/停止中/未確認、そして登録簿にしか無く
|
|
572
|
+
* まだ測っていない行の「確認中」・#581 / #640 / #660)。
|
|
572
573
|
*
|
|
573
574
|
* 色は既存の `ds-gate-*` を流用する——同じ画面で「緑=読めている・橙=人の操作待ち・
|
|
574
575
|
* 灰=分からない」の意味を 2 通りに増やさない。
|
|
@@ -582,12 +583,17 @@ function toolStateLabel(state) {
|
|
|
582
583
|
if (state === "reading")
|
|
583
584
|
return { text: "読み取り中", cls: "ds-gate-ok" };
|
|
584
585
|
// 届いてはいるが、Gold の材料にしていない(#640・engine #399)。**「読み取り中」と
|
|
585
|
-
//
|
|
586
|
+
// 言わない**——決定・用語の材料にしないと決めた接続先なので、言えば画面が嘘をつく。
|
|
586
587
|
// **警告色にもしない**(`ds-gate-ok` のまま)——直すものが無い中立の事実で、橙にすると
|
|
587
588
|
// 直しに行かせる。状態名を `"excluded"` にしないのは、`liveToolItems` の中で
|
|
588
589
|
// `match.excluded`(登録簿の devExcluded =「停止中」)が別の意味で使われているため
|
|
590
|
+
//
|
|
591
|
+
// 🔴 **語は行の札・タイルと同じ「活動を記録中」(#660)。** 2026-09-18 のオーナー決定で
|
|
592
|
+
// ソースの性質は種類で固定になり、GitHub は「作業の記録」に固定された。「読み取りの
|
|
593
|
+
// 対象外」は**何もしていない**ように読めるが、実際は活動を記録している——engine #480 で
|
|
594
|
+
// Issues / Discussions の活動が毎晩の観測に載るので、「対象外」は事実としても古い
|
|
589
595
|
if (state === "ok_not_ingested")
|
|
590
|
-
return { text: "接続OK
|
|
596
|
+
return { text: "接続OK(活動を記録中)", cls: "ds-gate-ok" };
|
|
591
597
|
if (state === "waiting")
|
|
592
598
|
return { text: "承認待ち", cls: "ds-gate-warn" };
|
|
593
599
|
// 止めているものは警告色にしない(直す必要が無いので、橙にすると直しに行かせてしまう)
|
|
@@ -676,7 +682,7 @@ function regRowOfToolItem(item) {
|
|
|
676
682
|
* **クロージャを持たない純関数に保つこと**(`.toString()` でクライアントへ渡す)。
|
|
677
683
|
*/
|
|
678
684
|
function toolsFoldSummary(states) {
|
|
679
|
-
// 表示の順は状態の語と同じ(読み取り中→接続OK
|
|
685
|
+
// 表示の順は状態の語と同じ(読み取り中→接続OK(活動を記録中)→承認待ち→停止中→
|
|
680
686
|
// 未確認→登録状況を確認中です)。🔴 **新しい語をここへ足し忘れると、下の `order.indexOf`
|
|
681
687
|
// が `unknown` へ倒すので、畳んだ 1 行だけが「未確認」と言う**(開くと違う語が出る・#640)
|
|
682
688
|
var order = ["reading", "ok_not_ingested", "waiting", "stopped", "unknown", "pending"];
|
|
@@ -1315,23 +1321,55 @@ function devExcludedRefs(rows) {
|
|
|
1315
1321
|
return out;
|
|
1316
1322
|
}
|
|
1317
1323
|
/**
|
|
1318
|
-
*
|
|
1324
|
+
* 中立の行に添える札の語(#660。#640 では理由文から性質を切り出していた)。
|
|
1325
|
+
*
|
|
1326
|
+
* 🔴 **性質を括弧に入れない。** 2026-09-18 のオーナー決定(分類 A)で、ソースの性質は
|
|
1327
|
+
* 登録ごとの選択肢ではなくなり**種類で固定**された。GitHub は「作業の記録」に固定で、
|
|
1328
|
+
* 利用者が画面から変えられるものではない——変えられないものを行に出しても、
|
|
1329
|
+
* 「どうすればよいか」が一つも増えない(#356 の原則「行は一手」)。
|
|
1319
1330
|
*
|
|
1320
|
-
* 🔴
|
|
1321
|
-
*
|
|
1322
|
-
*
|
|
1323
|
-
*
|
|
1324
|
-
*
|
|
1325
|
-
*
|
|
1331
|
+
* 🔴 **「読み取りの対象外」とも言わない。** engine #480 から Issues / Discussions の活動は
|
|
1332
|
+
* **毎晩の観測として貯まる**ので、「対象外」=何もしていない、は事実として古い。
|
|
1333
|
+
* 出すのは「活動を記録中」の 1 語だけで、「決定の材料にはしない」はモーダルの見出し・
|
|
1334
|
+
* 注記・札の `title` が持つ(帯は症状・行は一手・繰り返さない・2026-09-02)。
|
|
1335
|
+
*
|
|
1336
|
+
* ⚠ **引数 `detail`(行の `ingestExcludedDetail`)は読まない**が、欄は残す——engine の理由文を材料にする実装へ
|
|
1337
|
+
* 戻すときに呼び出し側を触らずに済む。**旧文面(`性質が◯◯のため…`)と新文面
|
|
1338
|
+
* (`活動の記録として観測しています…`)のどちらでも同じ札**になることの番人は
|
|
1339
|
+
* `dev-activity-words.test.mjs`(印の判定から DOM まで通す形で見る)。
|
|
1326
1340
|
*
|
|
1327
1341
|
* **クロージャを持たない純関数に保つこと**(`.toString()` でクライアントへ渡す)。
|
|
1328
1342
|
*/
|
|
1329
|
-
function devExcludedLabel(
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1343
|
+
function devExcludedLabel(_detail) {
|
|
1344
|
+
return "活動を記録中";
|
|
1345
|
+
}
|
|
1346
|
+
/**
|
|
1347
|
+
* その行に「活動を記録中」の札を出すか(#660)。**判定を 1 本にするための関数。**
|
|
1348
|
+
*
|
|
1349
|
+
* 🔴 **アクセス不可の行には出さない。** 届いていない接続先に「記録中」と出すと、
|
|
1350
|
+
* **アクセス不可を直す一手より先に「問題ない」と読める**。#640 は「片方を隠すと
|
|
1351
|
+
* 『アクセス不可を直せば読まれる』と誤読させる」として常に出していたが、性質が
|
|
1352
|
+
* 種類で固定になった(=直せば読まれるようになる、という誤読の余地が消えた)いま、
|
|
1353
|
+
* 残るのは「届いていないのに記録していると言う嘘」のほうなので、発注書 #660 の
|
|
1354
|
+
* 「届くようにする一手が先」に倒す。タイル(規則2が規則3より先)と Home
|
|
1355
|
+
* (`v.status === "ok"` の中だけ)は元からこの倒し方で、行だけが例外だった(R10)。
|
|
1356
|
+
*
|
|
1357
|
+
* 🔴 **測れていない回(`gate` が空)は出す。** engine は中立の 2 行を同じ晩に書くが、
|
|
1358
|
+
* 片方しか届かない窓がある。そこを「出さない」に倒すと、画面が知っている事実を捨てる
|
|
1359
|
+
* (`overlayStateOnFleet` の項・#640)。隠すのは**測った結果が悪かったとき**だけ。
|
|
1360
|
+
*
|
|
1361
|
+
* 🔴 **「読み取り停止中」(人が `dev-sources.json` の exclude で止めた)にも出さない。**
|
|
1362
|
+
* 止めた行は engine が観測しなくなる=古い中立の行が永久に残るうえ、止めてある以上は
|
|
1363
|
+
* 記録もされない。灰色の札が 2 つ並ぶのも「繰り返さない」に反する(#640 実装レビュー🟡4)。
|
|
1364
|
+
*
|
|
1365
|
+
* **クロージャを持たない純関数に保つこと**(`.toString()` でクライアントへ渡す。
|
|
1366
|
+
* `probeSection` が押した結果でも同じ 1 本を呼ぶ——判定を 2 枚にしない)。
|
|
1367
|
+
*/
|
|
1368
|
+
function devExcludedBadgeVisible(s) {
|
|
1369
|
+
if (!s || s.ingestExcluded !== true || s.goldState === "excluded")
|
|
1370
|
+
return false;
|
|
1371
|
+
var g = String(s.gate == null ? "" : s.gate);
|
|
1372
|
+
return g === "" || g === "ok";
|
|
1335
1373
|
}
|
|
1336
1374
|
/**
|
|
1337
1375
|
* ストアの「届くか」を行に重ねる。**まとめ表の時刻とは比べない。**
|
|
@@ -1377,7 +1415,9 @@ function devExcludedLabel(detail) {
|
|
|
1377
1415
|
* **開発の行だけ、`ingested` の中立の行も載せる(#640)。** 「接続できる」と「Gold の
|
|
1378
1416
|
* 材料にしている」は別の状態で、`reachable: ok` だけを載せると、読みに行かないと決めた
|
|
1379
1417
|
* リポジトリが画面で「読み取り中」になる(engine #399 の申し送り)。載せる欄は
|
|
1380
|
-
* `ingestExcluded
|
|
1418
|
+
* `ingestExcluded`(併記の札を出しうるか)と `ingestExcludedDetail`(engine が書いた理由文の
|
|
1419
|
+
* 生値)。⚠ **理由文はいま画面に出ない**(#660 で札は engine の文面に依らない 1 語になった)
|
|
1420
|
+
* ——engine の文面を材料にする実装へ戻すときのために、欄だけ運び続ける。
|
|
1381
1421
|
* 🔴 **`goldState: "excluded"`(人が `dev-sources.json` の exclude で止めた)と別物。**
|
|
1382
1422
|
*/
|
|
1383
1423
|
function overlayStateOnFleet(view, rows) {
|
|
@@ -3199,11 +3239,18 @@ function deriveCapTile(cap, ctx) {
|
|
|
3199
3239
|
if (okSeen && sumFailed > 0) {
|
|
3200
3240
|
return { rule: 3, state: "ok", text: "接続OK(" + sumOk + " 件取り込み・" + sumFailed + " 件失敗)", keyMissing: false };
|
|
3201
3241
|
}
|
|
3202
|
-
//
|
|
3203
|
-
//
|
|
3204
|
-
//
|
|
3242
|
+
// **決定・用語の材料にしていない接続先があれば、そう言う(#640・#660)。** 「接続OK」の
|
|
3243
|
+
// 一言で丸めると「決定・用語の材料になっている」と読めるし、⚠️ に落とすと直すものが
|
|
3244
|
+
// 無いのに直しに行かせる。**帯は症状だけ**——詳しい説明はタイルを開いた先の見出しが持つ。
|
|
3245
|
+
//
|
|
3246
|
+
// 🔴 **件数は出さない(#660)。** #640 は「読み取りの対象外が N 件」と数えていたが、
|
|
3247
|
+
// 性質が種類で固定になった以上、GitHub の登録は**全件がこれ**で、N を出すと
|
|
3248
|
+
// 「残りは読んでいる」と読める(#640 の申し送りにオーナー判断として上げてあった)。
|
|
3249
|
+
// 語は行の札・Home と同じ「活動を記録中」に揃える(R10:タイルと行が違うことを言わない)。
|
|
3250
|
+
// **`excluded` は分岐の材料としてそのまま使う**——孤児の篩(#523 決定2)と鮮度の門
|
|
3251
|
+
// (`devExcludedRefs`)を通った件数が 0 なら、この枝に来てはいけない
|
|
3205
3252
|
if (okSeen && excluded > 0) {
|
|
3206
|
-
return { rule: 3, state: "ok", text: "接続OK
|
|
3253
|
+
return { rule: 3, state: "ok", text: "接続OK(活動を記録中)", keyMissing: false };
|
|
3207
3254
|
}
|
|
3208
3255
|
if (okSeen)
|
|
3209
3256
|
return { rule: 3, state: "ok", text: "接続OK", keyMissing: false };
|
|
@@ -5129,7 +5176,7 @@ a.ds-tile:hover { text-decoration: none; }
|
|
|
5129
5176
|
.ds-check-label, .ds-check-action, .ds-check-detail,
|
|
5130
5177
|
.ds-pipe-label, .ds-pipe-todo,
|
|
5131
5178
|
.ds-empty, .sec-how, .modal-desc, .ds-toggle-msg,
|
|
5132
|
-
.ds-drive-note, .ds-inactive-note, .ds-gate-help,
|
|
5179
|
+
.ds-drive-note, .ds-inactive-note, .ds-gate-help,
|
|
5133
5180
|
/* 案件カレンダーの行(#428)。**カレンダー ID は空白の無い長い連なり**で、
|
|
5134
5181
|
失敗の理由(detail)も長さが読めない。ここを外すと会議のモーダルが横に溢れる */
|
|
5135
5182
|
.mt-cal-banner, .mt-cal-note, .mt-cal-warn, .mt-cal-primary, .mt-cal-sub, .mt-cal-id .rt-copy-text,
|
|
@@ -5178,13 +5225,11 @@ a.ds-tile:hover { text-decoration: none; }
|
|
|
5178
5225
|
トグルを撤去したいま、読み取られていないことを示すのはこのバッジだけ。
|
|
5179
5226
|
**判断のバッジなので、由来や組織のバッジより強く出す** */
|
|
5180
5227
|
.badge.ds-excluded { background: #f3f4f6; color: #4b5563; border: 1px solid #d1d5db; }
|
|
5181
|
-
/*
|
|
5182
|
-
|
|
5183
|
-
|
|
5228
|
+
/* 「接続はできるが、決定・用語集の材料にしていない」印(#640・語は #660)。
|
|
5229
|
+
**「読み取り停止中」と同じ灰色**——どちらも「いまこの接続先がどう扱われているか」の印で、
|
|
5230
|
+
直すものが無い中立の事実。橙(警告)にすると、直しようのないものを直しに行かせる。
|
|
5231
|
+
届いていない回は 「hidden」 で伏せる(上の [hidden] の !important が inline-block に勝つ) */
|
|
5184
5232
|
.badge.ds-not-ingested { background: #f3f4f6; color: #4b5563; border: 1px solid #d1d5db; }
|
|
5185
|
-
/* その理由と、変えたいときの一手(1 行だけ)。**行の補足(.ds-gate-help)と同じ見た目**だが、
|
|
5186
|
-
「接続を確認」で隠される棚には置かない(押しても変わらない事実のため) */
|
|
5187
|
-
.ds-not-ingested-note { font-size: 12px; color: #6b7280; line-height: 1.6; margin: 4px 0 0; flex: 1 1 100%; }
|
|
5188
5233
|
/* 登録の由来(#118)。**薄く出す**——読み取りの可否や Gold 対象かより弱い情報で、
|
|
5189
5234
|
ここが目立つと「除外」「未宣言」の判断のバッジと同じ強さに見えてしまう */
|
|
5190
5235
|
/* どの Slack ワークスペースのチャンネルか(#104)。**由来のバッジと同じ強さにする**——
|
|
@@ -5462,6 +5507,19 @@ a.ds-tile:hover { text-decoration: none; }
|
|
|
5462
5507
|
.ops-card-icon { font-size: 22px; line-height: 1; }
|
|
5463
5508
|
.ops-card-title { font-size: 15px; font-weight: 700; color: var(--text); margin: 0; }
|
|
5464
5509
|
.ops-card-desc { color: var(--muted); font-size: 13px; line-height: 1.7; margin: 0; flex: 1 1 auto; }
|
|
5510
|
+
/* 手動投入のカードの「どう送ると良いか」(#663)。
|
|
5511
|
+
🔴 **margin: 0 を明示する**——.ops-card は column flex の gap: 10px なので、
|
|
5512
|
+
素の <p> だとブラウザ既定マージンが gap に上乗せされて段が離れる(.ops-card-desc と同じ理由)。
|
|
5513
|
+
**色を desc と同じ var(--muted) にしない**——地続きに見えて「段を分ける」意図が消える。
|
|
5514
|
+
左罫で説明文と役割が違うことを示す。**罫は var(--border) にしない**——#e3e6ea は白地に対して
|
|
5515
|
+
コントラスト比 1.15 で、実機ではほぼ見えない(実装レビュー🟡5)。
|
|
5516
|
+
🔴 **このルールは番人テストが見ている。** CSS は <style> に埋め込まれるので、
|
|
5517
|
+
丸ごと消す・display: none を足す形の退行は material-intake-wording.test.mjs が赤にする
|
|
5518
|
+
(「CSS は jsdom から見えない」は誤りだった・実装レビュー🔴1)。 */
|
|
5519
|
+
.ops-card-hint {
|
|
5520
|
+
margin: 0; font-size: 12.5px; line-height: 1.7; color: var(--text);
|
|
5521
|
+
border-left: 3px solid var(--accent); padding: 2px 0 2px 10px;
|
|
5522
|
+
}
|
|
5465
5523
|
.ops-card-btn {
|
|
5466
5524
|
align-self: flex-start; display: inline-flex; align-items: center; gap: 4px;
|
|
5467
5525
|
padding: 8px 16px; border-radius: 999px; border: 1px solid var(--accent);
|
|
@@ -5806,6 +5864,7 @@ ${sanitizeStateNow.toString()}
|
|
|
5806
5864
|
${devExcludedSkip.toString()}
|
|
5807
5865
|
${devExcludedRefs.toString()}
|
|
5808
5866
|
${devExcludedLabel.toString()}
|
|
5867
|
+
${devExcludedBadgeVisible.toString()}
|
|
5809
5868
|
${overlayStateOnFleet.toString()}
|
|
5810
5869
|
// Home の「使用ツール」(#275)。**判定と表示語の実体はビルド時の定義**——
|
|
5811
5870
|
// 画面側に書き写すと、状態の言い換えが 2 枚になって片方だけ直る。
|
|
@@ -8996,20 +9055,14 @@ ${calendarAddUrl.toString()}
|
|
|
8996
9055
|
// Issues と Discussions は同じ接続先(同じ dev 行)なので、理由・補足は1本目だけが
|
|
8997
9056
|
// 持つ(#346)。同じ長文が2行に並ぶと一覧が案内で埋まる
|
|
8998
9057
|
var seenRef = {};
|
|
8999
|
-
//
|
|
9000
|
-
//
|
|
9001
|
-
//
|
|
9002
|
-
//
|
|
9003
|
-
var shownExcluded = false;
|
|
9058
|
+
// ⚠ 「quietExcluded」(「材料にしていない」の補足を組織で 1 回だけ出す仕掛け)は
|
|
9059
|
+
// #660 で撤去した——補足そのものを撤去したので、畳む対象が無い。**足し戻すときは
|
|
9060
|
+
// 「1 本目かどうか」ではなく「実際に出した行があったか」で数えること**(1 本目が
|
|
9061
|
+
// 出さない行だったときにフラグだけ消費され、その組織のどの行にも出なくなる・#640 設計レビュー🟡5)
|
|
9004
9062
|
var cards = g.items.map(function (x) {
|
|
9005
9063
|
var again = !!(x.ref && seenRef[x.ref]);
|
|
9006
9064
|
if (x.ref) seenRef[x.ref] = 1;
|
|
9007
|
-
|
|
9008
|
-
//(同じ ref の 2 本目・「読み取り停止中」)でフラグを消費すると、**その組織の
|
|
9009
|
-
// どの行にも補足が出ない**(設計レビュー🟡5 と同じ罠。条件は 「extSourceCard」 と揃える)
|
|
9010
|
-
var quietExcluded = shownExcluded;
|
|
9011
|
-
if (!again && x && x.ingestExcluded === true && x.goldState !== "excluded") shownExcluded = true;
|
|
9012
|
-
return extSourceCard(x, DS_TYPE[x.type] || { icon: "🔗", label: x.type || "その他" }, { quietHelp: again, quietExcluded: quietExcluded });
|
|
9065
|
+
return extSourceCard(x, DS_TYPE[x.type] || { icon: "🔗", label: x.type || "その他" }, { quietHelp: again });
|
|
9013
9066
|
});
|
|
9014
9067
|
if (g.state === "warn") {
|
|
9015
9068
|
out.push(orgNoteBox(githubNotConnectedNodes(g), cards));
|
|
@@ -10357,7 +10410,11 @@ ${calendarAddUrl.toString()}
|
|
|
10357
10410
|
: " Cortex のアプリは、会話の読み取りと、通知先に設定したスペースへの確認・通知の投稿だけに使われます。読み取った会話は、本文そのものを保存するのではなく、決定事項・用語などの抽出結果としてプロジェクトの記録に反映されます。";
|
|
10358
10411
|
m.modal.appendChild(el("p", { class: "modal-desc", text: "ここに並んでいる" + chatNoun + "は、例外なく全て毎晩の Gold 昇格が読み取り、Decision・用語集の材料になります。読み取りを止めるには「登録を解除」してください。" + chatScope }));
|
|
10359
10412
|
} else if (cap === "開発") {
|
|
10360
|
-
|
|
10413
|
+
// 🔴 **開発の開示文は「記録に使う・決定の抽出には使わない」(#660)。** 2026-09-18 の
|
|
10414
|
+
// オーナー決定でソースの性質は種類で固定になり、GitHub は「作業の記録」に固定された。
|
|
10415
|
+
// **この 2 文が「決定の材料にはしない」を言う唯一の場所**——行の札は「活動を記録中」と
|
|
10416
|
+
// だけ言い、同じ文を行ごとに繰り返さない(帯は症状・行は一手・繰り返さない・2026-09-02)
|
|
10417
|
+
m.modal.appendChild(el("p", { class: "modal-desc", text: "ここに並んでいるリポジトリの Issues と PR の活動を、毎晩記録として読みます(誰が何をしているかの把握に使います)。決定・用語集の抽出には使いません。記録をやめるには「登録から削除」してください。" }));
|
|
10361
10418
|
}
|
|
10362
10419
|
// **なぜこの状態なのかを、押した先でも読めるようにする(#125②)。** タイルは常時出す
|
|
10363
10420
|
// ようになったので、未接続の能力を押したときに中身が空になる場面が増えた。
|
|
@@ -11528,8 +11585,11 @@ ${calendarAddUrl.toString()}
|
|
|
11528
11585
|
}
|
|
11529
11586
|
|
|
11530
11587
|
// 注記は全能力の後ろに1つ。**何が Gold の材料になるのかを1文で言う。**
|
|
11588
|
+
// 🔴 **GitHub を同じ文に混ぜない(#660)。** 性質が種類で固定になり、GitHub は
|
|
11589
|
+
// 決定・用語集の材料にしない。ひとまとめに「材料になります」と言うと、この注記だけが
|
|
11590
|
+
// 画面の他の全部(見出し・行の札・タイル)と食い違う
|
|
11531
11591
|
if (anyCap) {
|
|
11532
|
-
sec.appendChild(el("p", { class: "ds-note", text: "登録されている Slack チャンネル・Google Chat
|
|
11592
|
+
sec.appendChild(el("p", { class: "ds-note", text: "登録されている Slack チャンネル・Google Chat スペースは、毎晩の Gold 昇格が読み取り、Decision・用語集の材料になります。GitHub リポジトリは Issues と PR の活動を記録として読み、決定・用語集の材料にはしません。チャンネルとスペースは登録を解除すると、リポジトリは登録から削除すると、以後は読み取られません。" }));
|
|
11533
11593
|
}
|
|
11534
11594
|
|
|
11535
11595
|
if (pipes.length) {
|
|
@@ -11978,6 +12038,17 @@ ${calendarAddUrl.toString()}
|
|
|
11978
12038
|
var v = probeVerdict(s, j);
|
|
11979
12039
|
gateEl.className = "ds-gate " + v.cls;
|
|
11980
12040
|
gateEl.textContent = v.text;
|
|
12041
|
+
// 🔴 **「活動を記録中」の札も、押した結果で出し入れする(#660)。** ここを忘れると、
|
|
12042
|
+
// アクセス不可の行を直して押したときに**行は「接続OK」なのに札だけ消えたまま**に
|
|
12043
|
+
// なり、「決定の材料になっている」と読める(逆向きも同じで、届かなくなった行が
|
|
12044
|
+
// 「記録中」と言い続ける)。**判定は 「devExcludedBadgeVisible」 1 本**——
|
|
12045
|
+
// 描画時と押した後で別の条件を書くと、同じ行が 2 つのことを言う
|
|
12046
|
+
var exBadgeNow = card.querySelector(".badge.ds-not-ingested");
|
|
12047
|
+
if (exBadgeNow) {
|
|
12048
|
+
exBadgeNow.hidden = !devExcludedBadgeVisible({
|
|
12049
|
+
ingestExcluded: s.ingestExcluded, goldState: s.goldState, gate: j.gate,
|
|
12050
|
+
});
|
|
12051
|
+
}
|
|
11981
12052
|
// 古い「X分前に確認」を残さない(下に出るいまの結果と、時刻が2つ並ぶ)
|
|
11982
12053
|
var oldAt = card.querySelector(".ds-gate-at");
|
|
11983
12054
|
if (oldAt) oldAt.remove();
|
|
@@ -13942,7 +14013,10 @@ ${calendarAddUrl.toString()}
|
|
|
13942
14013
|
hint: [
|
|
13943
14014
|
{ text: "読み取りたいリポジトリがある組織に、Cortex の GitHub App を入れます(Issues の読み取りだけ)。", node: appInstallLink() },
|
|
13944
14015
|
"そのリポジトリを下の欄に入れて「追加」を押します(owner/repo でも、GitHub のURLでも構いません)。",
|
|
13945
|
-
|
|
14016
|
+
// #660: 「Gold 昇格の材料になります」は嘘になった(性質が種類で固定・GitHub は
|
|
14017
|
+
// 決定の抽出に使わない)。**手順の最終行が伝える重さは「記録に入る」**——
|
|
14018
|
+
// 追加が Gold 昇格の意思決定になるチャット(上の 2 つ)とは別の文にする
|
|
14019
|
+
"追加したリポジトリの Issues と PR の活動が、毎晩の記録に入ります(決定・用語集の材料にはしません)。やめるときは、その行の「登録から削除」を押します。",
|
|
13946
14020
|
],
|
|
13947
14021
|
build: function (repo, name) { return { op: "add-github-source", repo: repo, name: name }; },
|
|
13948
14022
|
adder: "github",
|
|
@@ -14628,11 +14702,7 @@ ${calendarAddUrl.toString()}
|
|
|
14628
14702
|
title: "このリポジトリは読み取り対象から除外されています(開発の登録ファイル dev-sources.json の exclude)。この画面からは戻せません。",
|
|
14629
14703
|
}));
|
|
14630
14704
|
}
|
|
14631
|
-
//
|
|
14632
|
-
//
|
|
14633
|
-
// **常に出す(gate の値で隠さない)。** 届かないことと材料にしていないことは別の事実で、
|
|
14634
|
-
// 片方を隠すと「アクセス不可を直せば読まれる」と誤読させる(#523・オーナー決定
|
|
14635
|
-
// 「操作タブは常に真実を表示する」)。
|
|
14705
|
+
// 「接続できる」と「決定の材料にしている」を別の状態として併記する(#640・#660)。
|
|
14636
14706
|
//
|
|
14637
14707
|
// 🔴 **「ds-gate」 ではなく 「badge」 で出す。** 行の「判定のバッジは 1 つ」を
|
|
14638
14708
|
// 「connection-probe.test.mjs」 が見張っており、「probeSection」 も 「gateEl」 の参照 1 本で
|
|
@@ -14641,17 +14711,32 @@ ${calendarAddUrl.toString()}
|
|
|
14641
14711
|
// ——どちらも「判定」ではなく「この接続先がいまどう扱われているか」の印。
|
|
14642
14712
|
//
|
|
14643
14713
|
// 🔴 **警告色にしない。** 直すものが無い中立の事実で、橙にすると直しに行かせる。
|
|
14644
|
-
//
|
|
14645
|
-
//
|
|
14646
|
-
//
|
|
14647
|
-
//
|
|
14648
|
-
//
|
|
14649
|
-
|
|
14650
|
-
|
|
14714
|
+
// 語は短く(長文を入れると行が折り返す)——「決定の材料にはしない」はモーダルの
|
|
14715
|
+
// 見出しと 「title」 が持つ(#660。行ごとに繰り返さない・2026-09-02)。
|
|
14716
|
+
//
|
|
14717
|
+
// 🔴 **要素は必ず作り、出し入れは 「hidden」 でやる(#660)。** 出す条件は
|
|
14718
|
+
// 「devExcludedBadgeVisible」 1 本だが、「probeSection」 は押した結果で 「.ds-gate」 しか
|
|
14719
|
+
// 差し替えない。作らずに条件分岐で消すと、**アクセス不可の行を直して「接続を確認」を
|
|
14720
|
+
// 押しても札が戻らない**(行は「接続OK」なのに札が無い=材料にしていると読める)。
|
|
14721
|
+
// 「[hidden]」 に 「display:none !important」 を当ててあるので、「.badge」 の
|
|
14722
|
+
// 「display:inline-block」 に負けない
|
|
14723
|
+
// 🔴 **作るかどうかも 「devExcludedBadgeVisible」 に決めさせる(判定を 2 枚にしない)。**
|
|
14724
|
+
// 「gate を ok にしたら出るか」=「この行はそもそも札を持ちうるか」。条件を書き写すと、
|
|
14725
|
+
// 「読み取り停止中」の扱いを片方だけ直した日に、**作られるが永久に伏せられる札**や
|
|
14726
|
+
// **止めてある行の札**が生まれる(実装レビュー🟡3)
|
|
14727
|
+
if (devExcludedBadgeVisible(Object.assign({}, s, { gate: "ok" }))) {
|
|
14728
|
+
var exBadge = el("span", {
|
|
14651
14729
|
class: "badge ds-not-ingested",
|
|
14652
14730
|
text: devExcludedLabel(s.ingestExcludedDetail),
|
|
14653
|
-
|
|
14654
|
-
|
|
14731
|
+
// ⚠ **「接続はできています」と書かない。** 到達性をまだ測れていない回(gate が空)も
|
|
14732
|
+
// 札は出るので、行の判定が「登録状況を確認中です」なのに title だけが接続を断言する
|
|
14733
|
+
//(同じ行が 2 つのことを言う・実装レビュー🟡2)
|
|
14734
|
+
title: "Issues と PR の活動を記録として読みます。決定・用語集の材料にはしません。",
|
|
14735
|
+
});
|
|
14736
|
+
// ⚠ 「el」 は属性で渡す(「setAttribute("hidden", false)」 は 「hidden="false"」 になり、
|
|
14737
|
+
// HTML では**存在するだけで真**)。真偽はプロパティで入れる
|
|
14738
|
+
exBadge.hidden = !devExcludedBadgeVisible(s);
|
|
14739
|
+
badges.appendChild(exBadge);
|
|
14655
14740
|
}
|
|
14656
14741
|
if (s.notify === true) badges.appendChild(notifyBadge());
|
|
14657
14742
|
// **どのワークスペースのチャンネルかを、必ず行に出す(#104・2026-08-20 に社内も)。**
|
|
@@ -14814,9 +14899,16 @@ ${calendarAddUrl.toString()}
|
|
|
14814
14899
|
// **「読み取りを止める」への案内は消した(2026-08-21)。** そのボタンごと
|
|
14815
14900
|
// 撤去したので、指す先が画面に無い。**代わりの手段は書かない**
|
|
14816
14901
|
//——削除がその手段そのもので、他に無い
|
|
14817
|
-
"
|
|
14902
|
+
"次回の夜間の処理から、このリポジトリの Issues と PR の活動は記録されません。",
|
|
14818
14903
|
"",
|
|
14819
|
-
|
|
14904
|
+
// 🔴 **不可逆性を必ず書く**(docs/setup-ui-spec.md の確認ダイアログの規則)。
|
|
14905
|
+
// #660 で「すでに作られた Decision・用語集は消えません。」は落とした
|
|
14906
|
+
//——GitHub は決定・用語集の材料にしないと画面が 4 か所で言い切る以上、
|
|
14907
|
+
// この 1 行だけが「GitHub が Decision を作った」と言うことになる。
|
|
14908
|
+
// **代わりに、いま本当に残るもの**を書く: 観測の台帳(engine の obs/)は
|
|
14909
|
+
// Delete が Deny で**誰にも消せない**ので、「記録中」と言い切るぶん
|
|
14910
|
+
// #640 のときより強い事実になっている
|
|
14911
|
+
"すでに記録した活動は消えません。",
|
|
14820
14912
|
"",
|
|
14821
14913
|
"削除しますか?",
|
|
14822
14914
|
];
|
|
@@ -14850,28 +14942,13 @@ ${calendarAddUrl.toString()}
|
|
|
14850
14942
|
if (reason) card.appendChild(neededNode(reason, "ds-gate-help ds-gate-reason"));
|
|
14851
14943
|
}
|
|
14852
14944
|
}
|
|
14853
|
-
//
|
|
14854
|
-
//
|
|
14855
|
-
//
|
|
14856
|
-
|
|
14857
|
-
|
|
14858
|
-
//
|
|
14859
|
-
//
|
|
14860
|
-
// 🔴 **その組織のグループで最初の 1 行にだけ出す(「opts.quietExcluded」)。** GitHub の
|
|
14861
|
-
// 既定は「作業物」なので、全行に出すと一覧が案内で埋まる(#356・オーナー却下の原則)。
|
|
14862
|
-
// 同じリポジトリの 2 本目(Discussions)にも出さない(「opts.quietHelp」 と同じ理由)
|
|
14863
|
-
if (s.ingestExcluded === true && s.goldState !== "excluded" && !(opts && (opts.quietHelp || opts.quietExcluded))) {
|
|
14864
|
-
// 🔴 **性質を直書きしない(実装レビュー🟡2)。** すぐ上の札は理由文が名指しした語だけを
|
|
14865
|
-
// 括弧に入れているのに、ここで「作業物」と書くと、engine が名指しを避けた回に
|
|
14866
|
-
// **同じ行が 2 つのことを言う**(札は「読み取りの対象外」・補足は「作業物」)。
|
|
14867
|
-
// 名指しできた回だけ性質を言い、できなかった回は事実だけを言う
|
|
14868
|
-
var exNature = devExcludedLabel(s.ingestExcludedDetail).replace(/^読み取りの対象外(?/, "").replace(/)$/, "");
|
|
14869
|
-
card.appendChild(el("p", {
|
|
14870
|
-
class: "ds-not-ingested-note",
|
|
14871
|
-
text: (exNature ? "この登録は「" + exNature + "」なので、" : "この登録は、")
|
|
14872
|
-
+ "決定・用語・メンバー・ルールの材料にしていません。議論の場として読ませるなら、登録簿で性質を「会話」にしてください",
|
|
14873
|
-
}));
|
|
14874
|
-
}
|
|
14945
|
+
// 🔴 **「材料にしていない」の補足(「ds-not-ingested-note」)は撤去した(#660)。**
|
|
14946
|
+
// #640 の文は「この登録は『作業物』なので…議論の場として読ませるなら、登録簿で性質を
|
|
14947
|
+
// 『会話』にしてください」で、**画面に定義の無い語で JSON を手で直せと言っていた**
|
|
14948
|
+
//(実測: 艦隊 49 案件・GitHub 登録 53 行で切り替えた案件は 0 件)。2026-09-18 の
|
|
14949
|
+
// オーナー決定で性質は種類で固定になり、**利用者が変えられる一手はもう無い**ので、
|
|
14950
|
+
// 行に長文を置く理由が消えた。言うべきことはモーダルの見出し(能力を開いた先の 2 文)と
|
|
14951
|
+
// 札の 「title」 が持つ。**足し戻さないこと**(行は一手・繰り返さない・2026-09-02)
|
|
14875
14952
|
// 「接続を確認」(2026-08-19)。**押せる人を絞らない**——読むだけで設定を変えないので、
|
|
14876
14953
|
// 気づいた人がその場で確かめられるほうがよい(オーナー判断)。書き込みになる
|
|
14877
14954
|
// 「表示名を更新する」は、押した結果の中から別のボタンとして出る(probeSection)。
|
|
@@ -15435,7 +15512,17 @@ ${calendarAddUrl.toString()}
|
|
|
15435
15512
|
return opsCard("🗒️", "会議の文字起こしを追加", "顧客主催の会議など、自動取り込みできない会議の文字起こしファイル(.txt / .docx 等)から議事録を生成します。ファイルを選ぶかテキストを貼って送信すると、数分で反映されます。", "transcript", "文字起こしを追加");
|
|
15436
15513
|
}
|
|
15437
15514
|
if (cap === "共有資料") {
|
|
15438
|
-
|
|
15515
|
+
// hint(#663): 文字の層が無い PDF(画面の印刷・スキャン・画像を貼ったもの)は
|
|
15516
|
+
// どの変換ツールでも文字が取れない。**「PDF が読めない」とは言わない**——読めないのは
|
|
15517
|
+
// 画面を保存したものとスキャン・写真から作ったものだけで、文字の層がある PDF は今までどおり読める。
|
|
15518
|
+
// **「画面を印刷した PDF」と書かない**(実装レビュー🟡4)——実際の操作は macOS の
|
|
15519
|
+
// 印刷ダイアログの「PDF として保存」で、当人は「印刷していない」と読む。「スキャンした画像」も
|
|
15520
|
+
// 同じで、スキャナの出力は普通 PDF なので「自分のは画像じゃない」と読まれる。
|
|
15521
|
+
// **Google のスライド・ドキュメントは書かない**——「元のファイル」がローカルに存在せず、
|
|
15522
|
+
// 書き出す時点で必ず形式を選ばされるので、指示どおりに行動できない(設計レビュー🔴3)。
|
|
15523
|
+
// その一手は docs/ops-ui-user-stories.md の Drive の節が持つ。
|
|
15524
|
+
return opsCard("📎", "共有資料を追加", "提案書・仕様書・議事メモなどの資料を Markdown 化して 共有資料 に取り込みます。ファイルを選ぶかテキストを貼って送信すると、数分で反映されます。", "material", "資料を追加",
|
|
15525
|
+
"PowerPoint・Word・Excel は、PDF にせず元のファイルのまま送ってください(そのほうが正確に読めます)。画面を「PDF として保存」したものや、スキャン・写真から作った PDF は、文字を取り出せないので中身が空になります。");
|
|
15439
15526
|
}
|
|
15440
15527
|
return null;
|
|
15441
15528
|
}
|
|
@@ -16200,7 +16287,17 @@ ${calendarAddUrl.toString()}
|
|
|
16200
16287
|
if (!mapAsOf) return;
|
|
16201
16288
|
wrap.appendChild(el("p", { class: "conn-map-asof", text: "設定と件数は " + mapAsOf + " 時点・接続状態は最新です。" }));
|
|
16202
16289
|
}
|
|
16203
|
-
|
|
16290
|
+
/**
|
|
16291
|
+
* 手動投入のカード。hint は任意(#663)。
|
|
16292
|
+
*
|
|
16293
|
+
* **説明文と同じ段落に混ぜない。** 1 段目(desc)は「押すと何が起きるか」、
|
|
16294
|
+
* 2 段目(hint)は「どう送ると良いか」で役割が違う。渡さなければ段ごと出ないので、
|
|
16295
|
+
* 会議のカードは 1 文字も変わらない。
|
|
16296
|
+
*
|
|
16297
|
+
* ⚠ この関数は埋め込み JS(テンプレートリテラル)の中にある。**コメントにバッククォートを
|
|
16298
|
+
* 書かない**——その場でリテラルが閉じて、離れた行が構文エラーになる。
|
|
16299
|
+
*/
|
|
16300
|
+
function opsCard(icon, title, desc, kind, btnLabel, hint) {
|
|
16204
16301
|
var btn = el("button", { class: "ops-card-btn", text: "+ " + btnLabel });
|
|
16205
16302
|
btn.addEventListener("click", function () { openIntakeModal(kind); });
|
|
16206
16303
|
return el("div", { class: "ops-card" }, [
|
|
@@ -16209,6 +16306,7 @@ ${calendarAddUrl.toString()}
|
|
|
16209
16306
|
el("h3", { class: "ops-card-title", text: title }),
|
|
16210
16307
|
]),
|
|
16211
16308
|
el("p", { class: "ops-card-desc", text: desc }),
|
|
16309
|
+
hint ? el("p", { class: "ops-card-hint", text: hint }) : null,
|
|
16212
16310
|
btn,
|
|
16213
16311
|
]);
|
|
16214
16312
|
}
|
|
@@ -16353,9 +16451,19 @@ ${calendarAddUrl.toString()}
|
|
|
16353
16451
|
var mk = makeModal(isT ? "会議の文字起こしを追加" : "共有資料を追加", false);
|
|
16354
16452
|
var overlay = mk.overlay;
|
|
16355
16453
|
var modal = mk.modal;
|
|
16454
|
+
// 🔴 **資料の案内はカードだけでは届かない**(#663・設計レビュー🔴2)。makeModal は
|
|
16455
|
+
// 前のオーバーレイを必ず閉じるので、**ファイルを選ぶ瞬間、カードの hint は画面に無い**。
|
|
16456
|
+
// 事故(画面を印刷した PDF を投入して日本語 0 文字)が起きるのはこの文を読んでいる最中なので、
|
|
16457
|
+
// 症状と一手はここにも要る。**カードと同じ文は書かない**——「繰り返さない」は
|
|
16458
|
+
// 「同じ説明を段を変えて並べるな」であって、事故の瞬間に黙れという意味ではない。
|
|
16459
|
+
// **症状を括弧に落として一手を前に出す**(実装レビュー🟡3)。ただし症状そのものは消さない
|
|
16460
|
+
// ——元のファイルを持っていない人(Slack の画面を保存した人)には「元のファイルを優先」が
|
|
16461
|
+
// 一手にならず、自分の PDF が駄目だと分かるのは症状の側だけだから。
|
|
16462
|
+
// 列挙の先頭を PDF から元のファイルに入れ替えてある(**受け付ける拡張子は 1 つも変えていない**。
|
|
16463
|
+
// allowedExt は下のまま)。
|
|
16356
16464
|
modal.appendChild(el("p", { class: "modal-desc", text: isT
|
|
16357
16465
|
? "文字起こしファイル(テキスト・Word・PDF・字幕 等)を選んで送信してください。(送信後、数分で議事録が自動生成されます)"
|
|
16358
|
-
: "資料ファイル(
|
|
16466
|
+
: "資料ファイル(PowerPoint・Word・Excel・PDF・テキスト・画像 等)を選んで送信してください。元のファイルがあれば PDF より優先してください(画面を保存した PDF・スキャンした PDF からは文字を取り出せません)。(送信後、数分で内容が Markdown に変換されて取り込まれます)" }));
|
|
16359
16467
|
|
|
16360
16468
|
var selectedFiles = [];
|
|
16361
16469
|
var allowedExt = isT
|
package/package.json
CHANGED