# 每日制度規則（2026-09-18 能力系統 redesign 起）

這份是制度的**唯一權威**。Skill／SOP／排程／報告都以它為準。
2026-08-30 那一版（Blackjack DQN roadmap 當主線＋六顆每日習慣）已整份被這一版取代，
舊版留在 git 歷史裡。

## 一句話

```
主線：四條 ACTIVE 能力線（AI Agent 45%／CS・Logic 15%／Programming 25%／Dev Env 15%）
每天：最多 1 顆主任務（同一條線的 1–4 個 ≤30 分 block）＋最多 1 顆短任務（另一條線，複習共用這個名額）
上限：一 90／二三四 120／五六 90／日休息；每週 540。上限是 ceiling，不是 KPI
Lv：只由 evidence 決定。分鐘數、課程數、EXP 都不能升級
```

## 設計原則（每一條都有對應的測試守著）

| 原則 | 意思 | 守在哪裡 |
|---|---|---|
| fewer simultaneous tracks | 同時只有四條 ACTIVE 能力線 | `TRACK_DEFINITIONS`；P1-1 |
| explicit priority | 優先序與權重是明講的，不是排出來才知道 | `pickTracksForToday`；B5 |
| evidence-based progress | Lv 只由 evidence＋baseline 決定 | `level-resolver.mjs`；P2 |
| unlock gates | NEXT 要達到條件才 READY | `unlock.mjs`；P3 |
| no automatic activation | READY **永遠**不會自動變 ACTIVE，一定要使用者確認 | `confirmActivation`；P3-2、U3 |
| school-aware scheduling | 容量依日型態（含 school-only、REST）決定 | `budget.mjs`；B1、B3 |
| no punishment for rest days | 休息日不排、不算沒做、不進完成率、不接延續 | `completion-rate.mjs`、`daily-rollover.mjs`；B3、B7 |
| completed modules retain evidence but stop consuming schedule | 做完的 module 保留成果，永遠不再產生任務 | `isModuleSchedulable`；M4 |

## 一、能力線

| 狀態 | 內容 |
|---|---|
| ACTIVE | AI Agent（P1，45%）、CS / Logic（P2，15%）、Programming（P3，25%，Python 與 Java 分開 Lv）、Dev Env（P4，15%，git／linux／docker／logs 各自 Lv） |
| NEXT | Debugging、AI Code Review。解鎖條件：Python ≥ Lv.4 且 Java ≥ Lv.3 |
| PARKED | SQL/Data、System Design、Web/API/Backend。保留資料、不排程 |

- 解鎖流程固定是 `LOCKED →（條件達成）→ READY →（使用者確認）→ ACTIVE`。READY 時 Noir 只問一次；
  啟用時**一定要同時給總和 100% 的新權重**（多一條線就是少別人的時間）。
- 舊的 8 個能力 key（project／programming／memory／thinking／knowledge／finance／language／database）
  **全部停用**：不再產生日常任務、不再當成能力顯示。`userProgress`／`unitProgress`／
  `progressTransactions`／`tasks` 一筆都沒有刪，它們是學習歷史，在能力頁的「舊制紀錄」唯讀顯示。
- RL **不是**能力線。Blackjack 是專案；專案進度與能力 Lv 不得是同一個數字。

## 二、Lv 怎麼算

- 0–10，只由 baseline ＋ evidence 決定（`resolveTrackLevel`），**不另外存一個數字**。
- baseline assessment 最多定到 Lv.4；Lv.5 以上只能靠 evidence。baseline 那一筆 evidence 不能拿來升級。
- 逐級判定，不跳級：Lv.3 的條件沒滿足，Lv.5 的 evidence 再多也停在 Lv.2。
- 完成很多課 ≠ 高 Lv：knowledge 只出現在 Lv.1–2 的條件裡。
- 角色 Lv／EXP／金幣保留，只當遊戲化回饋。

## 三、每天的形狀

- 最多 **1 顆主任務**：同一條能力線的 1–4 個 ≤30 分 block 組成一個 session（第一顆是 core，其餘是 block）。
- 最多 **1 顆短任務**（≤30 分，來自**另一條**線）。到期複習與補強**共用**這個名額。
- 今天做哪一條線：本週目標 − 本週已投入的差額最大者（`pickTracksForToday`）。
  例外只有一個：已經開始或昨天延續下來的內容優先。
- light 日只有主任務的第一個 block；REST／school-only 日不排任何技術學習。
- 每日習慣不佔名額、不吃預算（見第五節）。

## 四、技術學習預算

| 日型態 | 分鐘 | 主任務 block | 短任務 |
|---|---|---|---|
| heavy（二三四） | 120 | 4 | ✔ |
| normal（一五六） | 90 | 3 | ✔ |
| light | 30 | 1 | ✘ |
| school_only | 0 | 0 | ✘ |
| rest（預設的星期日） | 0 | 0 | ✘ |

- 每週上限 540，兩層同時生效。週型態：normal ×1／assignment_heavy ×0.7／exam ×0.4／holiday ×1.2。
- **上限是 ceiling，不是 KPI**：沒用完不累積、不結轉、不補做。文案只寫「已投入 X 分（上限 Y）」，
  不出現「落後／欠／補做」，不用紅字。
- 首頁可一鍵「今天改輕量／今天休息」：沒開始的技術學習任務**延期**到下一個會排任務的日子
  （不刪除、已開始與已完成的不動）。週日回顧時選下週型態。
- 完成率只算**有排任務的日子**——休息日不進分母。

## 五、每日習慣

六個習慣統一查 `state.competency.habits`，改一個值就恢復或停用：

| 習慣 | 目前狀態 |
|---|---|
| ML 實作 | RETIRED（退役） |
| 正式思考、正式記憶、記憶巡邏、每日數學 | PARKED（游標與歷史保留，隨時可恢復） |
| 每日英文產生器 | PARKED |
| 線上課程（Coursera Google Cybersecurity，2026-09-20 起） | ACTIVE：每天**一顆 30 分**（2026-09-28 起），沒做完明天換一顆新的、**不疊加**（昨天那顆不出現在今日清單，跨日即結案）；按首頁「課程完成」退役。Other Learning，不吃技術預算 |

習慣走自己的軌道：不佔名額、不吃預算、休息日照樣產生（「不管可用時間，每天都要」）。

## 六、英文

英文本身**保留**，屬於 Language / Other Learning：依需要安排，不計入技術預算、權重、每日名額，
也不影響任何能力線的 Lv。

## 七、DQN module（有限期）

- **自主進行（self_paced，2026-09-20 起）**：不排進每日任務、沒有偏好日、不計時、不扣技術預算。
  首頁 module 卡按「開始／繼續 Day N」→ 段落一格一格勾掉（按完成就算）→ 全勾完出現當日小測按鈕。
- 4 個學習日、不必連續、沒有期限；同一時間只開一天，照順序。
- **2026-09-23 起第二個 module「ML / DL 學習路線」**（6 個 Stage：ML 基礎 → DL 基礎 → CNN → RNN/LSTM → Transformer → 回到 DQN），同一套自主進行機制；完成掛在 `projects.ml-dl`。首頁卡片會同時列出兩個，完成的縮成一行。
- 每天最後一段是當日小測，**通過才前進**；四天做完排最終驗收，六題都要有答案、通過才 COMPLETED。
- 舊的 scheduled 模式（偏好一三四六、排成主任務 session、分鐘先從週上限扣掉）程式仍在，
  只在 `competency.modules[id].mode === 'scheduled'` 時生效。
- 完成後保留成果（答案、完成紀錄連到 `projects.blackjack`），**永遠不再產生任務**，也不寫任何能力線 evidence。

## 八、evidence

- **2026-09-23 起不再問。** 完成一顆帶能力線的任務就自動記一筆 evidence（note「完成任務（自動記錄）」）；
  quiz／assessment 這類要分數的 kind 沒有分數就不算過。
- **kind 與 targetLevel 來自任務**（週計畫範本寫的，或由任務型態推出來的預設），不是完成時自己喊的。
- 「這次沒有產出」不寫 evidence，也不留任何懲罰紀錄。
- 新的 evidence 讓 NEXT 的條件成立時，只會變成 READY，並由 Noir 問一次。

## 九、週計畫

週計畫仍由 `/weekly-plan`（`docs/learning/weekly-plan-generation-prompt.md`）產生：每週 6–8 個 block，
範本帶課綱節點 id（`PY-01`、`CS-L3`、`AG-A1`…）。排程端用 `resolveRoadmapNode()` 把節點 id 對成能力線，
範本也可以直接寫 `trackId`／`subtrack`／`evidenceKind`／`targetLevel`。
**沒有能力線的內容不會被排出來**——那是新制的硬規則，不是漏排。

## 十、對應程式碼

| 規則 | 檔案 |
|---|---|
| 能力線定義、Lv、解鎖 | `lib/competency/track-definitions.mjs`、`level-resolver.mjs`、`unlock.mjs` |
| 預算與日／週型態 | `lib/competency/budget.mjs`、`week-selectors.mjs` |
| 排程硬過濾（誰可以產生候選） | `lib/competency/schedule-gate.mjs` |
| 每天的形狀 | `lib/task-planning-engine/competency-day-plan.mjs` |
| DQN module | `lib/competency/module-schedule.mjs`、`lib/daily-execution/module-progress.mjs` |
| baseline 檢測 | `lib/competency/baseline-assessments.mjs`、`baseline-result.mjs` |
| evidence 問句 | `lib/competency/evidence-prompt.mjs` |
| 一鍵輕量／休息、週型態 | `lib/daily-execution/day-type-change.mjs` |
| 切換 migration（RL 退休、舊制任務取消） | `lib/state/competency-cutover-migration.mjs` |
| 規則測試 | `tests/reborn-competency-*.test.mjs` |
