Track S: 学習ループ — SRS 0→1 と人間側の回路
目的: エージェントが量産した足場(辞書カード573枚・章ノート・証明の骨子・Lean)の上に、人間が毎日回せる想起・再導出・誤解記録の回路を作る。成果物生産の管理(progress.md)と記憶の維持(Anki)を分離し、後者を 0→1 で立ち上げる。
原則:
- 足場の生産はエージェントのまま(独学の設計方針)。人間の仕事は「読む・想起する・間違える・記録する」に絞る。
- 毎日の床(floor)は Anki を開くこと のみ。それ以外はすべて機会的(opportunistic)。学習時間は不定のため中断耐性を最優先する。
- SRS 0→1(インポート可能なデッキ + 初回実レビューの journal 記録)を最初の 4 issue で達成する。
GitHub トラッキング: #96
現状とギャップ(2026-07-07 時点)
Section titled “現状とギャップ(2026-07-07 時点)”| 既存層 | 内容 | 不足 |
|---|---|---|
| 辞書カード 573枚 | #Card + Back/Meaning/Lean | 想起可能な粒度でない。SRS レビュー履歴が graph 全体で 0 件 |
| journal テンプレ | 復習(SRS) 欄あり | 一度も記入されていない。「床」の定義なし |
progress.md | 生産状態(✅) | 学習状態と混同(読了⬜×カード化✅)。卒業条件なし |
pages/ | 10_Fleeting / 20_Literature / cards | 00_System / 30_Concepts 層なし。書籍横断の翻訳表なし |
| 検証 | Lean(形式化済み範囲) | カード⇔原著の忠実性監査なし。誤解台帳なし |
アーキテクチャ
Section titled “アーキテクチャ”生産(エージェント) 消費(人間)───────────────── ─────────────────辞書カード(既存573) ──選別──→ recall/ (~250) ──anki_export.py──→ .apkg章ノート・証明の骨子 ──選別──→ reprove/ (15–25) ──────┘ │ import/再import(GUID固定) ▼mistake-ledger ←──2連続Again── Anki(mac) ⇄ AnkiWeb ⇄ AnkiDroid/iOSjournal 床✅ ←──毎日1行──────────┘ (レビュー状態の正本 + .colpkg 月次)30_Concepts / curriculum ←── 卒業条件は recall デッキ成熟度を参照| 層 | パス | 役割 |
|---|---|---|
| 辞書層(既存) | cards/<topic>/<id>.md | 参照用の正本。変更しない |
| 想起層(新設) | cards/<topic>/recall/<parent-id>-r<n>.md | 1問1答。Anki に流す唯一の層(reprove と共に) |
| 再導出層(新設) | cards/<topic>/reprove/<thm-id>.md | 主要定理の証明再構成プロンプト |
| システム層(新設) | pages/00_System/ | 本プラン・operations・mistake-ledger・curriculum・audit-log |
| 概念層(新設) | pages/30_Concepts/ | 書籍横断の概念ノート・用語翻訳表 |
Recall カード(想起層)
Section titled “Recall カード(想起層)”- 配置:
cards/<topic>/recall/<parent-id>-r<n>.md(例cards/topology/recall/filter-r1.md)。サブディレクトリ方式 — エクスポートが glob 一発、既存索引を汚さない。 - frontmatter:
card-id::(不変、Anki GUID の種)/card-type:: recall/parent-card::(辞書カードへのリンク、必須)/section::/public:: false(1問1答は公開サイトでは雑音。方針が変われば反転可)。deck ルーティングはパスから導出(frontmatter に持たせない)。 - 本文レイアウトは既存カードと同型(
- 表題 #Card= Front、## Back= Back)— パーサ共通化のため。 - 内容ルール: 1カード=1想起対象(名前→主張 / 主張→名前 / 公理の個数と内容 / 反例 / 仮定 のいずれか1つ)。Back は 3行・約150字以内 + 親カードリンク1行。Lean 注記・caveat・複数命題・Meaning は書かない(親の仕事)。Front は文脈自立(指示語禁止)。
- 選定: guide.md ロードマップ準拠(必須 II–IV → 重要 VII–X → 本命 XII/XV/XXII§9/XXIV。V/VI 等の辞書章は対象外)。definition 全部 + 「章の背骨」級定理。辞書カードの 30–40% に 1–2 枚 → 総計 ~250 枚。
- 正本規約は
skills/recall-cards/SKILL.md(新設)+templates/study-book/recall-card.md。同期ルール: 辞書カードを編集するエージェントはrecall/配下の子カードの整合確認を完了条件に含める。
Anki エクスポートパイプライン
Section titled “Anki エクスポートパイプライン”- genanki 採用(AnkiConnect 却下: Anki デスクトップ起動中前提でエージェント無人実行不可。genanki は git→.apkg のバッチ変換で決定的)。
- スクリプト:
scripts/anki_export.py。出力build/anki/antigravity.apkg(build/は.gitignore)。依存はpip3 install --user genankiのみ(Python 3.9 可)。 - GUID は
guid_for(f"{topic}/{card-id}")に固定オーバーライド(最重要。genanki 既定はフィールド内容ハッシュのため、本文編集のたびに重複ノート化しレビュー履歴が分断される)。モデル ID・デッキ ID もスクリプト内固定定数(ランダム生成禁止)。 - モデル2種:
AntigravityRecall(Front/Back/Source/CardId)、AntigravityReprove(Statement/ProofSketch/Source/CardId)。 - デッキ:
数学::<topic>::recall/数学::<topic>::reprove。ノートに<book-slug>・chNNタグを付与(filtered deck 用)。 - LaTeX:
$..$→\(..\)、$$..$$→\[..\](MathJax。mac/AnkiDroid/iOS で追加設定不要)。エスケープ済み\$とコードスパンは除外。Markdown→HTML は最小変換、[[cards/...]]リンクは末尾スラッグのプレーン表示に落とす。 - 更新は再エクスポート+再インポート(GUID 一致で本文更新・履歴保持)。削除は .apkg で伝搬しない → カードに
status:: retiredを付けエクスポート除外 + Anki ブラウザで CardId 検索して手動削除(手順は operations.md)。 - レビュー状態の正本は AnkiWeb。月1回
.colpkgを repo 外(~/Documents/anki-backups/)へ手動エクスポート。git には入れない。
人間ループの計装
Section titled “人間ループの計装”- journal
復習(SRS)欄を構造化:- 復習(SRS): {{枚数}}枚 / Again {{n}} / {{分}}分 — 床✅。「床✅」= その日 Anki を開いた、が唯一の日次必須項目。統計の真値は Anki 側(二重記帳しない)。 - 誤解台帳: グローバル1ファイル [[00_System/mistake-ledger]](誤解は概念単位で書籍横断のため書籍別にしない)。エントリ: 日付 / カードリンク / 誤解:: / 訂正:: / 出典::。記入トリガー: 同一カード2回連続 Again。
- 再入プロトコル(operations.md): 中断後は ①溜まった Anki を消化(新規カード0でよい)→ ②mistake-ledger を読み直す → ③journal の「明日の最初の一手」から再開。
- Anki 統計の repo 逆輸入(AnkiConnect で journal 自動追記)は任意の後回し issue(S-23)。初期スコープ外。
証明再導出(reprove)
Section titled “証明再導出(reprove)”cards/<topic>/reprove/<thm-id>.md、card-type:: reprove。Front = 定理の主張、Back = 証明の骨子 1–3 行 + 親カードリンク(骨子が無い定理は追記とセット)。- スコープ: 本命章の主要定理 + 必須章のキー定理(Baire・Tychonoff 級)で合計 15–25 枚のみ。デッキは new/day=1 の低負荷設定。
- 運用: 紙で5分以上想起してからめくる。失敗は journal 気づき → 必要なら mistake-ledger。
30_Concepts 層 + 翻訳表
Section titled “30_Concepts 層 + 翻訳表”pages/30_Concepts/<concept-slug>.md。テンプレtemplates/study-book/concept.md(standard-term:: / mathlib:: / aliases:: / related::+ 各書籍カードへのリンク節)。- 翻訳表 30_Concepts/topology-terminology-map: Royal Road 独自用語 ↔ 標準用語 ↔ Mathlib 名の3列。
symbol-indexとカードから 30–50 行をシード。 - パイロット概念ノート10枚(測度論・関数解析で再登場が確実なもの): filter / convergence / compactness / completeness / continuity / metric / uniform structure / countability / separation / product。
- リンク規則: 概念ノート → カードの下向きリンクが正。既存573枚への
concept::一括追記はしない(新規カードから必須化、既存は機会的バックフィル)。 - 2冊目衝突規約(
templates/study-book/README.mdに追記):cards/<topic>/はフラット維持・card-id は topic 内一意。同一概念は再カード化せず既存カードへ索引からリンク。定義が実質異なる場合のみ<id>--<book-slug>.mdを併存させ、30_Concepts ノートから比較参照する。
カリキュラムと卒業条件
Section titled “カリキュラムと卒業条件”- [[00_System/curriculum]]: 系列 = Royal Road(位相)∥ LADR(線形代数)→ 測度論(書籍は候補列挙に留め、選定は独立の意思決定)→ 測度論的確率 → 関数解析。
- Royal Road 卒業条件(検証可能な形): (a) 必須+重要+本命章の読了✅、(b) recall デッキ成熟度: 対象カードの90%が interval ≥ 21日、(c) 本命章の選別演習 各5問、(d) capstone 完了。capstone 候補: 「フィルター収束による Tychonoff の証明を書籍を見ずに再構成し Lean 検証」「XXIV の主要定理を標準用語で書き直した 30_Concepts ノート群」。
progress.mdの ✅ は生産セマンティクスのまま。記憶の減衰は Anki が所有。凡例に1行追記のみ(✅ の自動減衰は作らない)。mistake-ledger に同一章のエントリが3件溜まったら最終レビュー列に 🚩+日付。
忠実性監査(相関エラー対策)
Section titled “忠実性監査(相関エラー対策)”- 章バッチごとに
max(5, 辞書カード数の10%)枚を無作為抽出。pdftotextで該当ページを取得し、逐語引用 + ページ番号必須で「主張・仮定・記号・出典」の4点照合。recall カードは親との整合も同時チェック。 - 監査は model:opus + 逐語引用プロトコルで担保(生成と同系列モデルのため、PDF 原文引用を機械的裏付けにする)。
- 所見はカード修正コミット + [[00_System/audit-log]] に1行記録。サンプル誤り率 >20% でその章の全数監査 issue を追加起票。ケイデンスは recall 化バッチ直後のみ(常設化しない)。
Phase 一覧と issue
Section titled “Phase 一覧と issue”1 issue ≒ 1 コミット。トラッキング: #96。
S-A: SRS 0→1(最優先)
| Phase | 内容 | ラベル | 依存 |
|---|---|---|---|
| S-0 | 00_System 新設(plan・operations 骨子)+ recall テンプレ + skills/recall-cards/SKILL.md | meta, srs, difficulty:2, model:sonnet | — |
| S-1 | recall 試作: 第II章 ~30枚 | topology, cards, srs, difficulty:2, model:sonnet | S-0 |
| S-2 | scripts/anki_export.py + .gitignore | meta, srs, difficulty:2, model:sonnet | S-0 |
| S-3 | 0→1 検証(import・LaTeX 目視・モバイル同期・初回実レビューの journal 記録・再import 重複ゼロ) | meta, srs, difficulty:1, model:haiku(+人間参加) | S-1, S-2 |
| S-4 | recall: 第III・IV章 ~60枚 → 必須章デッキ完成 | topology, cards, srs, difficulty:2, model:sonnet | S-3 |
S-B: 運用計装
| Phase | 内容 | ラベル | 依存 |
|---|---|---|---|
| S-5 | operations.md 完成(床・再入・バックアップ・retire)+ journal テンプレ更新 + progress 凡例 | meta, srs, difficulty:1, model:haiku | S-3 |
| S-6 | mistake-ledger.md + 記入トリガー規則 | meta, srs, difficulty:1, model:haiku | S-3 |
| S-7 | reprove カード 15–25枚(骨子欠落分の追記込み) | topology, cards, srs, difficulty:2, model:sonnet | S-4 |
| S-8 | 忠実性監査パイロット(II–IV サンプル・逐語引用)+ audit-log.md | topology, cards, difficulty:2, model:opus | S-4 |
S-C: 知識層と出口(S-A と並行可)
| Phase | 内容 | ラベル | 依存 |
|---|---|---|---|
| S-9 | 30_Concepts scaffold + concept テンプレ + 2冊目衝突規約 | meta, difficulty:2, model:sonnet | S-0 |
| S-10 | topology-terminology-map(Royal Road↔標準↔Mathlib) | topology, difficulty:2, model:opus | S-9 |
| S-11 | パイロット概念ノート ×10 | topology, difficulty:2, model:sonnet | S-10 |
| S-12 | curriculum.md(系列・卒業条件・capstone) | meta, difficulty:2, model:opus | S-0 |
S-D: 展開(ゲート: S-3 完了から2週間、journal で床✅の継続を確認してから起票)
| Phase | 内容 | 概算 |
|---|---|---|
| S-13〜16 | recall VII / VIII / IX / X(章ごと1 issue) | 各15–20枚 |
| S-17〜20 | recall 本命 XII / XV / XXII§9 / XXIV(章ごと1 issue) | 各20–25枚 |
| S-21 | LADR ch1–2 recall + linear-algebra デッキ(GitHub ラベル要新設) | ~25枚 |
| S-22 | 監査バッチ: VII–X・本命章(2 issue, model:opus) | — |
| S-23 | (任意)AnkiConnect で Anki 統計を journal に自動追記 | — |
S-0 ─┬→ S-1 ─┬→ S-3 ─┬→ S-4 ─┬→ S-7, S-8 ├→ S-2 ─┘ ├→ S-5, S-6 ├→ S-9 → S-10 → S-11 └(2週間ゲート)→ S-13..21 → S-22, S-23(任意) └→ S-12| 役割 | 推奨 | 理由 |
|---|---|---|
| recall / reprove 生成 | Sonnet | 前例あり・判断中程度(difficulty:2) |
| exporter 実装・scaffold | Sonnet / Haiku | 定型 |
| 翻訳表・卒業条件 | Opus | 数学的判断 |
| 忠実性監査 | Opus | 生成モデルと役割分離 + 逐語引用プロトコル |
最初のユニット(S-0〜S-3)スコープ詳細
Section titled “最初のユニット(S-0〜S-3)スコープ詳細”- S-0: 本ページ(計画正本)+
00_System/operations.md骨子 +templates/study-book/recall-card.md+skills/recall-cards/SKILL.md(選定基準・1問1答ルール・Back 上限・同期ルール・親リンク必須・card-id rename 禁止)。 - S-1: 第II章の definition 全部 + 骨格命題(
prop-ii-1-1級)から ~30枚。1辞書カードから最大2枚。 - S-2 受け入れ条件:
python3 scripts/anki_export.py→build/anki/antigravity.apkg生成、GUID 固定オーバーライド、モデル/デッキ ID 定数、$変換のサンプル出力検証。 - S-3 は人間参加 issue: mac Anki インポートでノート数一致 →
\operatorname/\mathcal/大型演算子を含む数式カード5枚を目視 → AnkiWeb 同期 → モバイルで1枚レビュー → 再エクスポート+再インポートでノート数が増えない(GUID 検証) → journal に復習(SRS): N枚 / 床✅の実記録。ここが Track S の 0→1 到達点。
品質チェック(各 issue 完了時)
Section titled “品質チェック(各 issue 完了時)”- recall カードの Back が3行以内で親リンクを持つ
- card-id が既存と非衝突・不変(rename 禁止)
- 再エクスポート→再インポートで Anki のノート数が増えない(GUID 検証)
- 数式サンプルが mac/モバイル両方でレンダリング
- journal に床✅行。progress.md は生産セマンティクスのまま
- 監査所見は逐語引用 + ページ番号付き
- トラッキング issue #96 を開き、未クローズの最上流 issue(S-0)から着手する。
- 着手時に issue の「状態」を実リポジトリと突き合わせ、ずれていればコメントで訂正してから作業する。
.worktrees/issue-<N>/で作業し、1コミット・push・issue クローズ(skills/plan-to-issues/SKILL.md準拠)。- S-D は #96 に床✅の2週間継続を確認するコメントを残してから起票する。
リスクと open questions
Section titled “リスクと open questions”- genanki GUID の既定挙動(最重要): 既定はフィールドハッシュ。オーバーライドを忘れると本文編集のたびに重複ノート化しレビュー履歴が分断される。S-2/S-3 の完了条件に再インポート検証を必須化済み。
- MathJax 非対応マクロ: S-3 で
\operatorname・\mathcal・大型演算子を含むサンプルの目視を必須化。画像・メディアはスコープ外。 - 辞書カード変更時の recall 陳腐化: SKILL の同期ルール + 監査での親子整合チェックで対応。件数が増えたら
parent-rev::による lint を検討(現時点では過剰)。 - recall の
public:: false既定は暫定。公開サイト方針が変われば反転可。 - .apkg で削除が伝搬しない:
status:: retired+ 手動削除の運用で許容。 - 測度論の書籍未選定: curriculum.md では候補列挙に留める。
- linear-algebra の GitHub ラベル未存在: S-21 起票前に作成。