|
2 | 2 |
|
3 | 3 | すべての主要な変更をこのファイルに記録する。形式は [Keep a Changelog](https://keepachangelog.com/ja/1.1.0/)、バージョニングは [Semantic Versioning](https://semver.org/lang/ja/) に準拠する。 |
4 | 4 |
|
| 5 | +## [1.15.0] - 2026-09-02 — 納品物の裸数値に機械の網を張る:網は誤読コストの非対称な側にだけ張る |
| 6 | + |
| 7 | +数値に出所(実測なのか見込みなのか継承なのか)が添えられていないと、読み手はどの数を |
| 8 | +信じてよいか決められない。この「裸の数値」を拾う `lint-numbers` を足す。ただし拾うのは |
| 9 | +**同じ行に計器トークンがあるか**という presence だけで、対象も**納品物だけ**に絞る。 |
| 10 | + |
| 11 | +### 機序 |
| 12 | + |
| 13 | +**問題は表記ではなく注意の配分だった。** handoff 34 件の実測で裸率は 0〜58.3% に振れ、 |
| 14 | +降下と再発を 2 周した。表記の癖なら一度直せば収束する——振れるということは、書き手の |
| 15 | +注意が他へ向いた枠で再発するということである。ゆえにゼロを目標に置かない(残差は漸近 |
| 16 | +消滅しない)。網は「根絶する装置」ではなく「注意が逸れた枠で気づかせる装置」である。 |
| 17 | + |
| 18 | +**納品物側だけに張るのは、誤読コストが非対称だから。** handoff 側は分析ノート運用が現に |
| 19 | +効いており(分母が 30〜50 帯から 84/96/104 へ増えても裸は 4〜8 のまま)、効いている側に |
| 20 | +二重の関門を足すのは加算バイアスになる。一方、納品物は読み手が大環主とその先の第三者で、 |
| 21 | +誤読のコストが書き手に返ってこない——かつ裸率が一度も測られていなかった。 |
| 22 | + |
| 23 | +**presence だけを見るのは、正しさが形状に現れないから。** 除外規則(ID・日付を候補から |
| 24 | +外す)を書き始めた瞬間、それは妥当性判定の入口になり、決定論の世界に置くべきでない判断が |
| 25 | +コードへ漏れる。数字を含む行はすべて候補とし、linter は当たり付けどまりに留める。 |
| 26 | +**偽陰性 > 偽陽性**——偽陽性は読み直し一回で済むが、偽陰性は「緑を信じる」危険に直結する |
| 27 | +ので、一文字・高頻度語は計器トークンに採らない(迷ったら外す=偽陽性側へ倒す)。 |
| 28 | + |
| 29 | +### Added |
| 30 | + |
| 31 | +- `lint-numbers <path>` — 納品物(原稿 md)の裸数値スキャン。JSON 1 行で stdout |
| 32 | + (`path` / `number_lines` / `covered` / `bare` / `bare_lines`)。read-only で config / |
| 33 | + lease / レジストリに触れない。**裸 0 件でも 1 行出す**(黙る計器は掛け忘れと全緑を |
| 34 | + 区別させない)。走査完了なら裸の有無に関わらず exit 0——二値は JSON 内の値で、 |
| 35 | + 外部契約である exit 0-4 に新しい意味を重ねない。パスが読めないときだけ exit 2 |
| 36 | +- `scripts/domain/number_lint.py` — 行走査の純関数と計器トークン定数(`GAUGE_TOKENS` |
| 37 | + 20 語)。語彙の校正はこの定数 1 箇所の追補で済み、コード構造に触れない |
| 38 | + |
| 39 | +### Changed |
| 40 | + |
| 41 | +- `DESIGN.md` §3.13(新設)— presence-only と納品物限定の設計根拠 SSoT |
| 42 | +- `SKILL.md` / `README.md` / `commands/telegram-secretary.md` — Subcommands 表に 1 行。 |
| 43 | + SKILL の Failure Modes に「裸検出は exit に載らない」の注記 |
| 44 | +- `ROUTINE_PROMPT.md` — 送信前チェックに「納品物は**原稿 md** に `lint-numbers` を掛け、 |
| 45 | + 裸の行に計器を書いてから送る」を追加(send-reply / proactive-send の両経路)。 |
| 46 | + **納品物側と handoff 側の裸率は別々に報告し、合算しない**(母集団が違う) |
| 47 | +- `STRUCTURE.md` — `domain/` に `number_lint.py`。併せて既存の記載漏れ |
| 48 | + (`output_scan.py` / `rate_limit.py`)を backfill |
| 49 | + |
| 50 | +### 互換性 |
| 51 | + |
| 52 | +**後方互換**(新規 subcommand の追加のみ。既存の受信・送信・管理表の経路に変更は無い)。 |
| 53 | +掛けるのは**秘書の手順**であって送信経路のフックではない——`send-reply` / |
| 54 | +`proactive-send` に自動ブロックは組み込まない(判断を決定論の側へ移さない)。 |
| 55 | + |
| 56 | +> **本番到達には別操作が要る**(本版のコミットだけでは本番に届かない)。cloud routine は |
| 57 | +> 基本設定リポを fresh clone するため、(a) コードは **HW 本体側の junction 追従コミット |
| 58 | +> (`Expertises/TelegramSecretary`)と PR マージ**を経て初めてコンテナに載る。(b) 秘書が |
| 59 | +> 実際に送信前へ掛けるようになるのは、**ROUTINE_PROMPT の body を RemoteTrigger で再登録 |
| 60 | +> した後**である(リポ内の md を直しただけでは稼働中の routine の手順は変わらない)。 |
| 61 | +> 到達経路は clone 起点ゆえ、**タグは不要**。(a)(b) はいずれも本タスクの外で実施する。 |
| 62 | +
|
5 | 63 | ## [1.14.0] - 2026-08-28 — TASKS の終端に `cancelled` を足す:取り止めを「やり遂げた」と記録しない |
6 | 64 |
|
7 | 65 | TASKS の終端は `done` 一つだった。依頼が取り下げられても要件が消滅しても、閉じる語は |
|
0 commit comments