白話版:這是什麼
~/.trade-coach/profile.md 這個檔案,沒有任何東西會產生它 ,但產品有三個地方講得像它存在:
README.md 叫使用者 cat 它,說那是「你的交易目標 + 3 條個人原則(復盤對照基準)」
coach.py 把它註冊成一個正式資料檔(所以 data-status 會列它、data-export 會收它、data-reset 會刪它)
兩份維護文件曾宣稱「agent 會照 SKILL.md 直接寫它」
第三項已經在 PR #614 修掉。這張 issue 要決定的是前兩項:留還是清。
不 block 任何東西 — 這是這張 issue 的第一件事
不急,可以放著。查證於 main@94b7e5f:
問題
答案
套件會紅嗎
不會,46/46 綠
產品會拒絕任何操作嗎
不會。沒有任何程式碼讀它 — grep -rn "profile\.md" skills/fomo-kernel/engine/ skills/fomo-kernel/tools/ 只命中 coach.py:412 的註冊條目本身,沒有 reader
會 block #446 (記憶體系第 2 層)嗎
不會。#446 卡在五個未拍板的設計問題,與這張化石無關
會 block dogfood / QA 嗎
不會
現在不解決的實際後果只有三個,都小:
使用者照 README cat 會拿到 file not found(owner 自己的 ~/.trade-coach/ 也沒有這個檔案 — 已實查)
data-status 永遠列一個 absent 的檔案
下一個 session 可能誤以為記憶體系第 2 層已有地基
3 之中最危險的一半(維護文件宣稱有 writer)PR #614 已拆除。剩下的是使用者文案層。
為什麼它跟記憶體系有關
profile.md 不是一個隨機的死檔案 — 它是記憶體系第 2 層的第一版猜想 。
#446 的三層模型:
層
狀態
1. Ledger
已存在,append-only,永不壓縮
2. Profile / 蒸餾層 :「這個人是誰」 — 跨週期行為模式、累積動機、交易人格
不存在,就是 #446
3. Bounded read
已存在
profile.md 的設計目的(「交易目標 + 個人原則」、「復盤對照基準」)正是第 2 層。它是 2026-07-13(ee686b2 , PR #183 )那個年代對第 2 層的猜想:用一個自由文字檔存。
而第 2 層的正式接班人已經有插座了,插座不叫 profile.md。 schemas/behavior-verdict.schema.json 的 profile_label_id 欄位:
Back-reference only, load-bearing for nothing (#446 cut 2, not yet built). Points at an immutable profile-label id , never a line id.
verdicts.jsonl(#446 刀 1,已落地)已預留指向 profile label 的反向引用,而那個 label 規定是 immutable、有 id、可被 supersede。profile.md 是會被整份覆寫的自由文字檔 — 連「有 id」都做不到。
#446 為第 2 層定的五個機制中,這條 profile.md 結構上不可能滿足:
Cited synthesis :每個蒸餾單元必須存它是從哪些 ledger event ID 建出來的。沒有引用就不准進 profile 層。
#597 另外已裁定:profile.md 不得成為 provisional principles 的第二個 canonical truth,理由正是它沒有 append-only provenance、confidence、supersession、replay contract。
選項
A. 退役 — 刪 coach.py 的註冊條目 + 三行 README(README.md:111 / README.zh-TW.md:111 / README.zh-CN.md:108)
B. 復活 — 照 #58 原始要求,讓 agent 在第一次復盤結束時真的寫它
C. 搬家 — 內容改存成 append-only 結構化單元
已查證的事實(給接手的 session,不用重推)
沒有任何 SKILL.md / flows/*.md / references/*.md 提到 profile.md。references/ 裡唯一的 profile 是 profile.json(data-contract.md:68,70),那是不同檔案,只存 max_position_pct 和 muted_rules
沒有 engine / tools 模組寫它或讀它
coach.py:412 的使用者可見描述「交易目標 + 個人原則(第一次復盤時建立,Claude 直接寫檔)」仍帶同一句假宣稱 — 這是使用者 唯一讀到它的地方(data-status 輸出),比維護文件更嚴重
假宣稱的兩處維護文件版本(docs/maintainer-guide.md:137、tests/test_coach_data_cli.py 的 scope 註解)已由 PR docs(registry): profile.md has no writer, and both surfaces that claimed one now say so (refs #58) #614 修正。原始出處是測試註解(6a82ec8 / fix(engine): register condition_checks.jsonl and make the next omission fail the suite (closes #452) #471 ),maintainer guide 是 [process·docs] Shared maintainer contract must not live in CLAUDE.md #587 繼承來的
tests/test_sizing_literal_gate.py:58 引用「the two paths it names as outside its own reach」— 查過,那句話修完仍成立,無漂移
tests/test_doc_language.py 對 maintainer guide 的閘門是 presence-based,不釘措辭
關聯
白話版:這是什麼
~/.trade-coach/profile.md這個檔案,沒有任何東西會產生它,但產品有三個地方講得像它存在:README.md叫使用者cat它,說那是「你的交易目標 + 3 條個人原則(復盤對照基準)」coach.py把它註冊成一個正式資料檔(所以data-status會列它、data-export會收它、data-reset會刪它)第三項已經在 PR #614 修掉。這張 issue 要決定的是前兩項:留還是清。
不 block 任何東西 — 這是這張 issue 的第一件事
不急,可以放著。查證於
main@94b7e5f:grep -rn "profile\.md" skills/fomo-kernel/engine/ skills/fomo-kernel/tools/只命中coach.py:412的註冊條目本身,沒有 reader現在不解決的實際後果只有三個,都小:
cat會拿到 file not found(owner 自己的~/.trade-coach/也沒有這個檔案 — 已實查)data-status永遠列一個 absent 的檔案3 之中最危險的一半(維護文件宣稱有 writer)PR #614 已拆除。剩下的是使用者文案層。
為什麼它跟記憶體系有關
profile.md不是一個隨機的死檔案 — 它是記憶體系第 2 層的第一版猜想。#446 的三層模型:
profile.md的設計目的(「交易目標 + 個人原則」、「復盤對照基準」)正是第 2 層。它是 2026-07-13(ee686b2, PR #183)那個年代對第 2 層的猜想:用一個自由文字檔存。而第 2 層的正式接班人已經有插座了,插座不叫
profile.md。schemas/behavior-verdict.schema.json的profile_label_id欄位:verdicts.jsonl(#446 刀 1,已落地)已預留指向 profile label 的反向引用,而那個 label 規定是 immutable、有 id、可被 supersede。profile.md是會被整份覆寫的自由文字檔 — 連「有 id」都做不到。#446 為第 2 層定的五個機制中,這條
profile.md結構上不可能滿足:#597 另外已裁定:
profile.md不得成為 provisional principles 的第二個 canonical truth,理由正是它沒有 append-only provenance、confidence、supersession、replay contract。選項
A. 退役 — 刪
coach.py的註冊條目 + 三行 README(README.md:111/README.zh-TW.md:111/README.zh-CN.md:108)~/.trade-coach/沒有這個檔案,所以 export / reset 不會少收東西B. 復活 — 照 #58 原始要求,讓 agent 在第一次復盤結束時真的寫它
C. 搬家 — 內容改存成 append-only 結構化單元
profile.md已查證的事實(給接手的 session,不用重推)
SKILL.md/flows/*.md/references/*.md提到profile.md。references/裡唯一的profile是profile.json(data-contract.md:68,70),那是不同檔案,只存max_position_pct和muted_rulescoach.py:412的使用者可見描述「交易目標 + 個人原則(第一次復盤時建立,Claude 直接寫檔)」仍帶同一句假宣稱 — 這是使用者唯一讀到它的地方(data-status輸出),比維護文件更嚴重docs/maintainer-guide.md:137、tests/test_coach_data_cli.py的 scope 註解)已由 PR docs(registry): profile.md has no writer, and both surfaces that claimed one now say so (refs #58) #614 修正。原始出處是測試註解(6a82ec8 / fix(engine): register condition_checks.jsonl and make the next omission fail the suite (closes #452) #471),maintainer guide 是 [process·docs] Shared maintainer contract must not live in CLAUDE.md #587 繼承來的tests/test_sizing_literal_gate.py:58引用「the two paths it names as outside its own reach」— 查過,那句話修完仍成立,無漂移tests/test_doc_language.py對 maintainer guide 的閘門是 presence-based,不釘措辭關聯
verdicts.jsonl),刀 2 未建profile.md不得成為 provisional principles 的 canonical truth