@takagaki/cortex-decisions-viewer 0.12.120 → 0.12.121
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/build.js +4 -0
- package/dist/hands.js +52 -0
- package/dist/render.js +18 -7
- package/package.json +1 -1
package/dist/build.js
CHANGED
|
@@ -74,6 +74,7 @@ const repo_1 = require("./repo");
|
|
|
74
74
|
const engagement_1 = require("./engagement");
|
|
75
75
|
const story_1 = require("./story");
|
|
76
76
|
const ranking_1 = require("./ranking");
|
|
77
|
+
const hands_1 = require("./hands");
|
|
77
78
|
const rederivation_1 = require("./rederivation");
|
|
78
79
|
// 直近のGold昇格で追加されたレコードのパス集合。レコード生成の各所から参照するのでモジュールスコープに置く
|
|
79
80
|
// (引数で引き回すと呼び出し側の改修が広範囲になる)。build() の冒頭で1回だけ解決する。
|
|
@@ -2425,6 +2426,8 @@ async function build(opts) {
|
|
|
2425
2426
|
const engagement = await (0, engagement_1.readEngagementLedger)(repoRoot, ledgerDir);
|
|
2426
2427
|
// 目次と同じ順位(engine #551)。**読めないなら `null`** で、つながり画面の点は今までどおり一律
|
|
2427
2428
|
const memoryRanking = await (0, ranking_1.readMemoryRanking)(repoRoot, ledgerDir);
|
|
2429
|
+
// 人の手の表の写し(engine #1094 q-10)。あれば記憶 v2 の案件で、確認の印とボタンを出さない。**無い案件は今と 1 バイトも同じ**(キーごと無い)
|
|
2430
|
+
const memoryV2 = await (0, hands_1.readMemoryV2)(repoRoot, ledgerDir);
|
|
2428
2431
|
// 記録の id → リポジトリルート相対のパス(順位のファイルの鍵と突き合わせる。`repoRoot` 起点・cwd 起点にしない)
|
|
2429
2432
|
const recordRelPaths = new Map();
|
|
2430
2433
|
const relOf = (dir, fileName) => {
|
|
@@ -2577,6 +2580,7 @@ async function build(opts) {
|
|
|
2577
2580
|
home,
|
|
2578
2581
|
homeGrounding: homeGrounding,
|
|
2579
2582
|
homeUpdatedAt: homeUpdatedAt,
|
|
2583
|
+
...(memoryV2 ? { memoryV2: true } : {}),
|
|
2580
2584
|
sections,
|
|
2581
2585
|
graph,
|
|
2582
2586
|
categories,
|
package/dist/hands.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MEMORY_HANDS_VERSION = exports.MEMORY_HANDS_FILE = void 0;
|
|
7
|
+
exports.isMemoryHandsCopy = isMemoryHandsCopy;
|
|
8
|
+
exports.readMemoryV2 = readMemoryV2;
|
|
9
|
+
/**
|
|
10
|
+
* 人の手の表の写し(`.cortex/memory-hands.json`)を読む(cortex-engine #1094 q-10・仕様 1-6)。
|
|
11
|
+
*
|
|
12
|
+
* 仕様 1-6: **表があること自体が、その案件の記憶 v2 の印**。engine が栓 `human_touch_lock` が on の晩に、表が読めた晩だけ
|
|
13
|
+
* 目次と同じコミットで置く(engine `scripts/memory-hands-copy.mjs` の `HANDS_COPY_PATH`・`handsCopyText`)。ここは**印があるかを読むだけ**で、
|
|
14
|
+
* 記録ごとの欄(lock・touched …)はまだ画面の判定に使わない(残りは段 5・仕様の差 77)。
|
|
15
|
+
*
|
|
16
|
+
* v2 の案件では、画面から「AI生成・未確認」の札・警告帯・[確認済みにする]・「未確認のみ」を出さない(削除は残す)。
|
|
17
|
+
* 読めない・無い・版が違う案件は v2 でないものとして今のまま(`SiteData.memoryV2` はキーごと無い)。
|
|
18
|
+
*/
|
|
19
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
20
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
21
|
+
const ledger_dir_1 = require("./ledger-dir");
|
|
22
|
+
/** 置き場(engine `scripts/memory-hands-copy.mjs` の `HANDS_COPY_PATH` の `.cortex/` の下) */
|
|
23
|
+
exports.MEMORY_HANDS_FILE = "memory-hands.json";
|
|
24
|
+
/** 形の版(engine の `HANDS_COPY_VERSION`。違ったら v2 の印と読まない) */
|
|
25
|
+
exports.MEMORY_HANDS_VERSION = 1;
|
|
26
|
+
/** 中身が人の手の表の写しの形か(投げない)。版が違う・形が違う・壊れている → `false` */
|
|
27
|
+
function isMemoryHandsCopy(text) {
|
|
28
|
+
try {
|
|
29
|
+
const parsed = JSON.parse(text);
|
|
30
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
|
|
31
|
+
return false;
|
|
32
|
+
const o = parsed;
|
|
33
|
+
return o.version === exports.MEMORY_HANDS_VERSION && !!o.records && typeof o.records === "object" && !Array.isArray(o.records);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** 案件リポに写しがあり、読める形か。無い → `false`(黙る)・壊れている → `false`(build のログに 1 行) */
|
|
40
|
+
async function readMemoryV2(repoRoot, ledgerDir) {
|
|
41
|
+
let text;
|
|
42
|
+
try {
|
|
43
|
+
text = await promises_1.default.readFile(node_path_1.default.join((0, ledger_dir_1.ledgerDirOf)(repoRoot, ledgerDir), exports.MEMORY_HANDS_FILE), "utf8");
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
const ok = isMemoryHandsCopy(text);
|
|
49
|
+
if (!ok)
|
|
50
|
+
console.warn(`${exports.MEMORY_HANDS_FILE}: 読めないので、この案件は記憶 v2 でないものとして出します`);
|
|
51
|
+
return ok;
|
|
52
|
+
}
|
package/dist/render.js
CHANGED
|
@@ -6650,7 +6650,7 @@ ${calendarAddUrl.toString()}
|
|
|
6650
6650
|
}
|
|
6651
6651
|
// 未確認(status: draft = AI生成・人間未確認)の印。Gold層の4型(決定事項・用語集・メンバー・ルール)共通で、active・status無しには何も出さない
|
|
6652
6652
|
function draftBadge(rec) {
|
|
6653
|
-
return rec &&
|
|
6653
|
+
return rec && unconfirmed(rec) ? el("span", { class: "badge draft", text: "AI生成・未確認" }) : null;
|
|
6654
6654
|
}
|
|
6655
6655
|
// 直近のGold昇格で作られたレコードの印。レコードの date は決定日なので、日付順に並べても
|
|
6656
6656
|
// 「今回の実行で何が増えたか」は分からない。ビルド時に git から判定した結果(isLatest)を出す
|
|
@@ -6667,7 +6667,7 @@ ${calendarAddUrl.toString()}
|
|
|
6667
6667
|
// 同じ場面の同じ判断なので、口を離さない。**この帯は draft にしか出ない**ので、
|
|
6668
6668
|
// draft でない記録の削除の口は操作列の末尾(attachDeleteToEditRow)に置く。
|
|
6669
6669
|
function draftNote(rec) {
|
|
6670
|
-
if (!rec || !
|
|
6670
|
+
if (!rec || !unconfirmed(rec)) return null;
|
|
6671
6671
|
var path = promotableRecordPath(rec);
|
|
6672
6672
|
var note = el("div", { class: "draft-note" }, [
|
|
6673
6673
|
el("span", { text: "⚠️" }),
|
|
@@ -6832,7 +6832,7 @@ ${calendarAddUrl.toString()}
|
|
|
6832
6832
|
if (listState.status === RETIRED_FILTER) return rec && rec._kind === "decision" ? isRetired(rec) : true;
|
|
6833
6833
|
if (listState.status === RETRACTED_FILTER) return rec && rec._kind === "generic" && rec._section === "Rules" ? isRetracted(rec) : true;
|
|
6834
6834
|
// 「未確認のみ」は口に聞く(札と同じ答え)。それ以外の値は従来どおりの素の比較
|
|
6835
|
-
if (listState.status === "draft") return
|
|
6835
|
+
if (listState.status === "draft") return unconfirmed(rec);
|
|
6836
6836
|
return rec.rstatus === listState.status;
|
|
6837
6837
|
}
|
|
6838
6838
|
/* -------------------------------------------------------------------------
|
|
@@ -7090,7 +7090,7 @@ ${calendarAddUrl.toString()}
|
|
|
7090
7090
|
|
|
7091
7091
|
// 未確認が1件も無い一覧では絞り込みを出さない
|
|
7092
7092
|
function hasUnverified(items) {
|
|
7093
|
-
return (items || []).some(function (r) { return
|
|
7093
|
+
return (items || []).some(function (r) { return unconfirmed(r); });
|
|
7094
7094
|
}
|
|
7095
7095
|
|
|
7096
7096
|
// ---------- AI導線(Gold層への人間の書き込み口。claude.ai/code へのディープリンク) ----------
|
|
@@ -7200,6 +7200,14 @@ ${calendarAddUrl.toString()}
|
|
|
7200
7200
|
if (rec && rec._kind === "generic" && rec._section) return "Cortex/" + rec._section + "/";
|
|
7201
7201
|
return null;
|
|
7202
7202
|
}
|
|
7203
|
+
/**
|
|
7204
|
+
* 「AI生成・未確認」(機械の下書き)か。札・警告帯・[確認済みにする]・「未確認のみ」・削除の置き場は**全部これに聞く**。
|
|
7205
|
+
* 🔴 **記憶 v2 の案件(人の手の表の写しがある=SITE.memoryV2・cortex-engine #1094 q-10)では常に偽**。
|
|
7206
|
+
* 画面で人が押すのは記録の削除と名寄せの確定だけで、確認の印は出さない(削除は帯の外の操作列に出る)
|
|
7207
|
+
*/
|
|
7208
|
+
function unconfirmed(rec) {
|
|
7209
|
+
return !SITE.memoryV2 && !!rec && machineOwned(confirmPathOf(rec), rec.rstatus);
|
|
7210
|
+
}
|
|
7203
7211
|
/**
|
|
7204
7212
|
* 更新提案を AI に適用させるプロンプトの締め(status の扱い)。**3 つに分ける**(cortex-engine #1094 段 4):
|
|
7205
7213
|
* - 下書き(draft)…… 人が確かめて直したので active に上げさせる
|
|
@@ -7208,7 +7216,9 @@ ${calendarAddUrl.toString()}
|
|
|
7208
7216
|
* - それ以外(人の値)…… 据え置き(draft に戻させない)
|
|
7209
7217
|
*/
|
|
7210
7218
|
function statusKeepLine(rec) {
|
|
7211
|
-
|
|
7219
|
+
// 記憶 v2 の案件: status は確認の印ではない。どの値でも触らせない
|
|
7220
|
+
if (SITE.memoryV2) return "この記録の status の欄は変えないでください(足さない・書き換えない)。";
|
|
7221
|
+
if (unconfirmed(rec)) {
|
|
7212
7222
|
return "あなた(人間)が内容を確認して編集したので、status が draft なら active に上げてください。";
|
|
7213
7223
|
}
|
|
7214
7224
|
if (!rec.rstatus) return "この記録には status の欄がありません。status の欄は足さないでください。";
|
|
@@ -17715,7 +17725,8 @@ ${calendarAddUrl.toString()}
|
|
|
17715
17725
|
]));
|
|
17716
17726
|
});
|
|
17717
17727
|
sec.appendChild(what);
|
|
17718
|
-
|
|
17728
|
+
// 記憶 v2 の案件には確認の印もボタンも無いので、この説明は出さない(出すと「どこにも無い印」を探させる)
|
|
17729
|
+
if (!SITE.memoryV2) sec.appendChild(el("p", { class: "about-note", text:
|
|
17719
17730
|
"自動で追加されたものには「AI生成・未確認」と表示されます。内容を確認して、そのままでよければ「確認済みにする」を押してください。直したいところがあれば「AIで編集」から修正できます。どちらの場合も、その印は外れます。" }));
|
|
17720
17731
|
|
|
17721
17732
|
sec.appendChild(el("blockquote", { class: "about-quote", text:
|
|
@@ -19810,7 +19821,7 @@ ${calendarAddUrl.toString()}
|
|
|
19810
19821
|
* 見た目は控えめな文字のボタンのままにして、隣の実体のあるボタンと重さを分ける。
|
|
19811
19822
|
*/
|
|
19812
19823
|
function attachDeleteToEditRow(rec, editRow) {
|
|
19813
|
-
if (!rec ||
|
|
19824
|
+
if (!rec || unconfirmed(rec)) return null;
|
|
19814
19825
|
var del = buildDeleteControls(rec);
|
|
19815
19826
|
if (!del) return null;
|
|
19816
19827
|
editRow.appendChild(del.btn);
|
package/package.json
CHANGED