@takagaki/cortex-decisions-viewer 0.12.73 → 0.12.74
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 +5 -2
- package/dist/rederivation.js +49 -6
- package/dist/render.js +12 -5
- package/package.json +1 -1
package/dist/build.js
CHANGED
|
@@ -676,13 +676,16 @@ function attachRederived(records, recordsRel, ctx, nowIso) {
|
|
|
676
676
|
if (!ctx)
|
|
677
677
|
return records;
|
|
678
678
|
const pathOf = (r) => (recordsRel ? `${recordsRel}/${r.fileName}` : r.fileName);
|
|
679
|
+
// 🔴 **「確認済み」は `status` だけで決まる**(#667)。帯も並びも同じ `rstatus` を見る
|
|
680
|
+
// ——ここで別のものを渡すと、画面の札と食い違う(「未確認」の札が付いた記録に帯が出る)
|
|
681
|
+
const statusOf = (r) => r.rstatus;
|
|
679
682
|
for (const r of records) {
|
|
680
|
-
const band = (0, rederivation_1.rederivedBandOf)(pathOf(r), ctx.ledgers, ctx.identities, ctx.miss);
|
|
683
|
+
const band = (0, rederivation_1.rederivedBandOf)(pathOf(r), statusOf(r), ctx.ledgers, ctx.identities, ctx.miss);
|
|
681
684
|
// **帯が立たないレコードにはキーごと付けない**(空の器を通さない)
|
|
682
685
|
if (band)
|
|
683
686
|
r.rederived = band;
|
|
684
687
|
}
|
|
685
|
-
return (0, rederivation_1.orderByActivity)(records, pathOf, ctx.ledgers, nowIso);
|
|
688
|
+
return (0, rederivation_1.orderByActivity)(records, pathOf, statusOf, ctx.ledgers, nowIso);
|
|
686
689
|
}
|
|
687
690
|
/**
|
|
688
691
|
* AIからの更新提案(`.cortex/gold-proposals.json`)を読む。
|
package/dist/rederivation.js
CHANGED
|
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.emptyLedgers = exports.LEDGER_VERSION = void 0;
|
|
7
|
+
exports.isConfirmedStatus = isConfirmedStatus;
|
|
7
8
|
exports.parseLedger = parseLedger;
|
|
8
9
|
exports.readRederivationLedgers = readRederivationLedgers;
|
|
9
10
|
exports.parseInjectedNow = parseInjectedNow;
|
|
@@ -49,6 +50,24 @@ const ACTR_DECAY = 0.5;
|
|
|
49
50
|
* 0.5 日=「今日触れられた」を半日前として数える(ACT-R の実装で普通に使う丸め)。
|
|
50
51
|
*/
|
|
51
52
|
const MIN_ELAPSED_DAYS = 0.5;
|
|
53
|
+
/**
|
|
54
|
+
* その記録が「確認済み」か。**「AI生成・未確認」の札(`render.ts` の `draftBadge`)の裏返し**
|
|
55
|
+
* ——札が出ない記録が確認済み側(#667 のオーナー決定「確認済みは `status` だけで判断する」)。
|
|
56
|
+
*
|
|
57
|
+
* 🔴 **trim も小文字化もしない。** 札は `rec.rstatus === "draft"` の厳密比較なので、こちらを
|
|
58
|
+
* 1 文字でも緩めると「札は出ないのに未確認扱い」「札は出るのに確認済み扱い」が生まれる。
|
|
59
|
+
* `status` 欄が無い記録(`rstatus` が `""`)と `superseded` は**確認済み側**——札が出ないから。
|
|
60
|
+
*
|
|
61
|
+
* 🔴 **渡すのは `String()` 済みの `rstatus` だけ**(`build.ts:1048`)。生の frontmatter
|
|
62
|
+
* (`rec.fm.status`)を渡さない——YAML は真偽値も配列も返すので、札と同じ文字列にならない。
|
|
63
|
+
*
|
|
64
|
+
* ⚠️ **「確認済み」の門はもう 1 つある。** 削除の口の出し分けは `render.ts` の
|
|
65
|
+
* `humanConfirmedStatus`(`active|superseded|inactive` の列挙)で、`""` の扱いがここと逆。
|
|
66
|
+
* 揃えるかどうかは別の便(実データでは全 721 件が `status` を持つので今日の差は 0 件)。
|
|
67
|
+
*/
|
|
68
|
+
function isConfirmedStatus(status) {
|
|
69
|
+
return status !== "draft";
|
|
70
|
+
}
|
|
52
71
|
const emptyLedgers = () => ({
|
|
53
72
|
confirmation: new Map(),
|
|
54
73
|
rederivation: new Map(),
|
|
@@ -107,8 +126,11 @@ async function readRederivationLedgers(repoRoot) {
|
|
|
107
126
|
if (!confirmed)
|
|
108
127
|
continue;
|
|
109
128
|
// 🔴 **基準コミットが空の行も持つ**(実装レビュー)。帯は作れない(差分も戻すも
|
|
110
|
-
//
|
|
111
|
-
//
|
|
129
|
+
// 指す先が無い)が、行そのものは落とさずに持つ——落とす判断は帯の側
|
|
130
|
+
// (`rederivedBandOf`)に 1 か所で寄せる。
|
|
131
|
+
// ⚠️ #667 より前は「並びが『人が確認した』事実として使う」ためでもあったが、**並びは
|
|
132
|
+
// もう帳簿を見ない**(確認済みかどうかは `status` だけで決まる・`orderByActivity`)。
|
|
133
|
+
// この帳簿の役目は「どの版に戻すか」で、「確認済みかどうか」ではない
|
|
112
134
|
const commit = confirmed.commit != null ? String(confirmed.commit) : "";
|
|
113
135
|
const changedBy = Array.isArray(row?.changed_by)
|
|
114
136
|
? row.changed_by.map((s) => String(s)).filter((s) => s !== "")
|
|
@@ -233,6 +255,7 @@ function activityScore(entry, nowIso) {
|
|
|
233
255
|
*
|
|
234
256
|
* | 順 | 条件 | 結果 |
|
|
235
257
|
* | --- | --- | --- |
|
|
258
|
+
* | **0** | **その記録の `status` が `draft`(=「AI生成・未確認」の札が出る)** | **立てない**(#667) |
|
|
236
259
|
* | 1 | path が用語・メンバーのレコードでない | 立てない |
|
|
237
260
|
* | 2 | `confirmation` に行が無い/基準コミットが空/確認日が日時として読めない | 立てない |
|
|
238
261
|
* | 3 | `changed_by` が空 | 立てない |
|
|
@@ -246,9 +269,15 @@ function activityScore(entry, nowIso) {
|
|
|
246
269
|
* | 6 | 根拠は、帳簿の行の `commit` が `changed_by` に入っているときだけ出す | 出す/出さない |
|
|
247
270
|
* | 7 | 基準コミットが削除のコミットなら「戻す」を出さない(`baseDeleted`) | — |
|
|
248
271
|
*
|
|
272
|
+
* @param status その記録の `rstatus`(`String()` 済み)。**2 番目の必須引数**にしてある——
|
|
273
|
+
* 末尾の任意引数にすると、渡し忘れが「行 0 の門が静かに開く」になる(設計レビュー 🔴3)
|
|
249
274
|
* @param miss 立たなかった理由を数える器(呼び出し側で 1 つ作って全レコードで共有する)
|
|
250
275
|
*/
|
|
251
|
-
function rederivedBandOf(recordPath, ledgers, identities, miss) {
|
|
276
|
+
function rederivedBandOf(recordPath, status, ledgers, identities, miss) {
|
|
277
|
+
// 0. 「AI生成・未確認」の札が出る記録には帯を重ねない(#667)。**綴りは 1 か所**
|
|
278
|
+
//(ここで `status === "draft"` と直書きすると、判定が 2 つに増えて一致が崩れる)
|
|
279
|
+
if (!isConfirmedStatus(status))
|
|
280
|
+
return null;
|
|
252
281
|
if (!BAND_SECTION_RE.test(recordPath))
|
|
253
282
|
return null;
|
|
254
283
|
const conf = ledgers.confirmation.get(recordPath);
|
|
@@ -318,7 +347,11 @@ function rederivedBandOf(recordPath, ledgers, identities, miss) {
|
|
|
318
347
|
const baseDeleted = base ? commit_classify_1.DELETE_SUBJECT_RE.test(base.subject) : false;
|
|
319
348
|
return {
|
|
320
349
|
confirmedAt: conf.at,
|
|
321
|
-
|
|
350
|
+
// 🔴 **券の無い確認では名前を器に入れない**(設計レビュー 🟡4)。画面が出さないだけだと、
|
|
351
|
+
// 名前は `site-data` の JSON として全案件のページに配られ続ける(`commit-classify.ts`
|
|
352
|
+
// の `Operated-By`「値そのものを持ち回さない」と同じ流儀)。しかも engine の `by` は
|
|
353
|
+
// `confirmer || authorName` の合成で、**券が無ければ「ただ触った人」でしかない**
|
|
354
|
+
confirmedBy: conf.verified ? conf.by : "",
|
|
322
355
|
confirmedVerified: conf.verified,
|
|
323
356
|
baseCommit: conf.commit,
|
|
324
357
|
changedAt: newest.at,
|
|
@@ -329,13 +362,23 @@ function rederivedBandOf(recordPath, ledgers, identities, miss) {
|
|
|
329
362
|
/**
|
|
330
363
|
* 用語集の並び(#432 裁定 5-5)。**確認済みは先頭群・群の中は活性度の降順。**
|
|
331
364
|
*
|
|
365
|
+
* 🔴 **「確認済み」は `status` だけで決まる**(#667 のオーナー決定)。**帳簿は見ない**
|
|
366
|
+
* ——先頭群に来るのは「AI生成・未確認」の札が付かない記録で、画面の札と 1 文字も同じ判定
|
|
367
|
+
* (`isConfirmedStatus`)を使う。前は `ledgers.confirmation.has(p)`(=人が 1 度でも触ったか)
|
|
368
|
+
* で決めていたので、**札は「未確認」なのに先頭群に居る**記録が出ていた(実測: cortex-context
|
|
369
|
+
* の用語集で 25 件)。帳簿の役目は「どの版に戻すか」だけになった。
|
|
370
|
+
*
|
|
332
371
|
* - 活性度を持つレコードが 1 件も無い区画は **1 バイトも触らない**(帳簿が無い案件は従来順)
|
|
333
372
|
* - 活性度を知らないレコードは群の末尾へ、**元の並びのまま**(安定)
|
|
334
373
|
* - 用語集だけ(メンバーの並びは便 14・Decisions と Rules は対象外)
|
|
335
374
|
*
|
|
375
|
+
* ℹ️ `ledgers` は活性度のために引き続き受け取る(`ledgers.activity` だけを渡す形にすると
|
|
376
|
+
* 「帳簿の判定に戻す」退行がコンパイルで止まる代わりに、**変異検証でそれを実演できなくなる**)。
|
|
377
|
+
*
|
|
336
378
|
* @param records 区画のレコード(`repoPathOf` で引けるパスを持つもの。並びは変えずに新しい配列を返す)
|
|
379
|
+
* @param statusOf そのレコードの `rstatus`(`String()` 済み)を引く関数
|
|
337
380
|
*/
|
|
338
|
-
function orderByActivity(records, pathOf, ledgers, nowIso) {
|
|
381
|
+
function orderByActivity(records, pathOf, statusOf, ledgers, nowIso) {
|
|
339
382
|
if (!records.length)
|
|
340
383
|
return records;
|
|
341
384
|
// この区画が並べ替えの対象か(用語集で、活性度の行が 1 件以上あるか)
|
|
@@ -345,7 +388,7 @@ function orderByActivity(records, pathOf, ledgers, nowIso) {
|
|
|
345
388
|
return {
|
|
346
389
|
r: r,
|
|
347
390
|
i: i,
|
|
348
|
-
confirmed: inSection &&
|
|
391
|
+
confirmed: inSection && isConfirmedStatus(statusOf(r)),
|
|
349
392
|
score: inSection ? activityScore(ledgers.activity.get(p), nowIso) : null,
|
|
350
393
|
};
|
|
351
394
|
});
|
package/dist/render.js
CHANGED
|
@@ -6236,13 +6236,20 @@ ${calendarAddUrl.toString()}
|
|
|
6236
6236
|
* 「AI による最近の変更」が変わった行そのものを持っている。
|
|
6237
6237
|
*/
|
|
6238
6238
|
|
|
6239
|
-
/**
|
|
6239
|
+
/**
|
|
6240
|
+
* 帯に出す 1 行。**帯は起きたこと(機械が書き直した日)を言う。**
|
|
6241
|
+
*
|
|
6242
|
+
* 🔴 **確認した人と日は、券のある確認(confirmedVerified)のときだけ添える**(#667)。
|
|
6243
|
+
* 「確認済み」は frontmatter の status だけで決まるようになり、その大半は
|
|
6244
|
+
* 「AIで編集」か直接編集で active になったもの=**画面から確認したわけではない**。
|
|
6245
|
+
* そこに「○○さんが 9/1 に確認」と書くと、起きていないことを言い切ることになる。
|
|
6246
|
+
* 券があるときだけ名前と日を出すので、「自己申告」の断り書きは要らなくなった。
|
|
6247
|
+
*/
|
|
6240
6248
|
function rederivedMetaText(b) {
|
|
6241
6249
|
var parts = [];
|
|
6242
|
-
|
|
6243
|
-
|
|
6244
|
-
|
|
6245
|
-
parts.push("確認 " + ahDate(b.confirmedAt) + who);
|
|
6250
|
+
if (b.confirmedVerified) {
|
|
6251
|
+
parts.push("確認 " + ahDate(b.confirmedAt) + (b.confirmedBy ? "(" + b.confirmedBy + ")" : ""));
|
|
6252
|
+
}
|
|
6246
6253
|
parts.push("書き直し " + ahDate(b.changedAt));
|
|
6247
6254
|
// **「根拠」は言えるときだけ**(この帯のコミットの記録が帳簿に無ければ出さない)
|
|
6248
6255
|
if (typeof b.evidence === "number") parts.push("根拠 " + b.evidence + " 件");
|
package/package.json
CHANGED