DEVELOPER DOCS
路線圖(2026-09-17 更新)
原始檔
docs/roadmap.md · 在 GitHub 上檢視本文件是接手者(人或模型)的邊界:已完成什麼、下一步做什麼、刻意不做什麼。 每一項的「現況」都在 2026-09-17 回頭查過程式碼,不是照抄舊 Backlog。
上一版路線圖(v1.1 範圍,2026-07-13 定案)已全部出貨,原文見 git 歷史。
收錄標準不變:真實學校在一個學期內會實際踩到,或開源後會傷到採用信任。 新增的判斷依據:已有學校實際上線使用(國中,每週都有研習調課),他們的回饋優先於推測性的需求。
已出貨
| 版本 | 日期 | 重點 |
|---|---|---|
| v1.0.0 | 2026-07-12 | 首次公開發行:基礎資料、配課、手動/自動排課、發布、調代課、匯出、備份 |
| v1.1.0–v1.1.2 | 2026-07-14 | 背景任務拆兩條佇列、部分排課三合一、學期複製補全、小型加固批次、首次登入改密雙送修正 |
| v1.2.0 | 2026-08-02 | 一鍵示範資料、超鐘點上限、校名可在系統內設定 |
| v1.2.1 | 2026-09-17 | 調課操作畫面(使用學校回饋:只能代課、找不到調課):可對調節次清單、範圍 1–4 週、連堂單節對調、補課日上看板 |
| v1.2.2 | 2026-09-17 | 教師/班級調課通知單列印(照使用學校紙本格式) |
| v1.2.3 | 2026-09-17 | 系統版本顯示與新版本提醒;調課單斜線列印修正 |
| v1.2.4 | 2026-09-17 | 調代課處理寫出處置方式(代課/調課、哪天補課);手冊補調課通知單截圖 |
| v1.2.5 | 2026-09-26 | 教師/班級代課通知單列印(照使用學校紙本格式);代課可選計費方式 |
| v1.2.6 | 2026-10-01 | 外部使用者回報修正:教師帳號首次登入卡死、事後補開教師帳號與重設密碼、未排課務清單過長時拖不動 |
| v1.2.7 | 2026-10-02 | 學期起訖日期可在畫面上填寫與修改(先前無處可填,請假一律被擋) |
| v1.2.8 | 2026-10-02 | 匯入教師可批次更新既有教師;可停用/啟用教師登入帳號,刪除教師前說明後果 |
| v1.2.9 | 2026-10-02 | 全校教師課表的總表與批次匯出(先前只有班級有) |
| v1.2.10 | 2026-10-04 | 國中小/完全中學:跨節次表教師的課表與通知單標出實際上課時間 |
| v1.2.11 | 2026-10-04 | 完全中學:兩部節數不同時(國中七節、高中八節),跨部老師的課表與通知單補上缺的那一列 |
| v1.2.12 | 2026-10-06 | 巡堂表列印(使用者建議):依當天調代課結果產生巡堂紀錄;社團等大型跑班群組另出分組巡堂單 |
| v1.2.13 | 2026-10-06 | 分組巡堂單的排列順序固定為配課建立的順序 |
| v1.2.14 | 2026-10-06 | 巡堂表可匯出 Excel(使用者建議);修正「學期與節次表」的視窗關不掉 |
| v1.2.15 | 2026-10-07 | 同一個跑班群組裡同一位老師重複配課時,排課前檢查與自動排課會擋下(先前會排出撞課的課表) |
| v1.2.16 | 2026-10-07 | 跑班群組同一格的多筆同科目配課,手動排課的每日上限只算一節(與自動排課一致) |
| v1.2.17 | 2026-10-08 | 修正登入按一次送出兩筆請求,輸錯密碼約第 3 次就被鎖定(使用者回報) |
| v1.2.18 | 2026-10-08 | 檢查課表(使用者建議):發布前列出衝堂等衝突;修改教師不可排時段時提示已排的課 |
| v1.2.19 | 2026-10-09 | 日薪代課與整批指派代課(使用者建議):月結統計分列鐘點與日薪;整張假單一次指派 |
| v1.3.0 | 2026-10-18 | 單雙週課程(兩所學校提出):同一節單週、雙週輪流上不同的課;首次資料表結構變更 |
| v1.3.1 | 2026-10-20 | 帳號管理(使用者詢問):系統管理員設定教學組長、教務主任的帳號與角色 |
| v1.3.2 | 2026-10-20 | 重設管理員密碼指令(使用者來信):第一次就登不進去或忘了密碼時,不必刪資料或還原備份 |
| v1.3.3 | 2026-10-21 | 儀表板即時概況(Issue #50):現在這一節各班在上什麼課、誰在上,已套用當天的調代課 |
| v1.3.4 | 2026-10-21 | 下拉選單打字搜尋(使用者詢問):跑班群組、單雙週組、指定場地、導師、任教科目、綁定帳號 |
| v1.3.5 | 2026-10-21 | 併班可以選老師(LINE 社群回報):列出這一節正在上課的老師;調課單加上記號說明 |
| v1.4.0 | 2026-10-29 | 代導(LINE 社群需求):導師請假當天由誰代他帶班,半天也算;代導通知單;月結分開記全天、半天;資料表結構變更 |
| v1.4.1 | 2026-10-30 | 授權改為 AGPL-3.0:修改後再提供給別人使用要公開原始碼;登入頁與側邊欄加「原始碼」連結;功能與資料不變 |
| v1.4.2 | 2026-10-30 | 補登(LINE 社群組長):事後才登記的請假,已經過去的節次與代導可以補登,不通知、列入統計 |
| v1.4.3 | 2026-10-30 | 修正:安排代導的操作紀錄寫出代導老師名字 |
| v1.4.4 | 2026-11-03 | 修改假別與計費方式(LINE 社群組長):已經上過的代課也能改計費方式;假別改成一定要選 |
| v1.4.5 | 2026-11-03 | 新增調課(未請假)(LINE 社群組長):老師沒請假也能調課,只能調課、不算請假 |
| v1.4.6 | 2026-11-03 | 全校總表與批次 zip 可匯出 PDF(LINE 社群組長) |
| v1.4.7 | 2026-11-03 | 資安修正:登入失敗鎖定可被同時送出繞過(#60);新增 SECURITY.md |
| v1.4.8 | 2026-11-04 | 新學期第一次進「自動排課」自動建立草稿A,配完課就能直接排 |
| v1.4.9 | 2026-11-04 | 同一天幾節一起調課(LINE 社群組長):同一筆「調課(未請假)」勾在一起的節次可以互相補課 |
| v1.4.10 | 2026-11-05 | 補登調課(LINE 社群組長):已經上過的「調課(未請假)」可以事後補登;調代課紀錄可篩「調課(未請假)」 |
| v1.4.11 | 2026-11-05 | 鐘點統計自訂區間(LINE 社群組長):每月 15 日結算的學校可選 10/16~11/15 這種期間 |
| v1.4.12 | 2026-11-06 | 調課從較早的週開始找、換不了的節次寫原因(LINE 社群組長):提早請假可先補課;代導半天改以「次」計 |
| v1.4.13 | 2026-11-09 | 修正(LINE 社群組長):跑班群組在班級課表與匯出只顯示其中一位老師 |
| v1.4.14 | 2026-11-10 | 新功能(設備組長):全校教師週總表(含調代課),列印與 Excel |
| v1.4.18 | 2026-11-11 | 修正(組長回報):調課後重新發布課表,補課那一節在週課表、巡堂表消失;發布時自動接到新課表,升級時修正既有資料 |
| v1.4.17 | 2026-11-11 | 修正(組長回報):調代課紀錄與某一週的班級課表,調課寫出對調的另一節在哪一天 |
| v1.4.16 | 2026-11-10 | 修正(組長回報):跑班 5 組以內列出每位老師;先調課再請假不再重複列出已調走的節次;銷假後代導顯示 |
| v1.4.15 | 2026-11-10 | 新功能(老師建議):課表查詢看某一週實際課表(異動標色);新增身心調適假等常用假別與「其他」 |
各版細節見 CHANGELOG.md。
工程改善(原「v1.3 範圍」;v1.3.0 改做單雙週後順延,內容與順序不變)
排序原則:學校裝得快、用得順的先做,純工程衛生的後做。全部不改資料表結構。
開工時機:由專案負責人決定;組長回報的問題優先處理。
1. api 映像拆掉 ortools —— M
- 現況:
ortools在pyproject.toml主依賴,api 映像 674MB;排課求解只在 worker 跑,api 容器用不到。 - 影響誰:第一次安裝與每次升級的學校。校內網路或 NAS 拉映像慢,是「升級很麻煩」的主因之一。
- 做法:移到
[solver]之類的 extra 由 worker 安裝;確認 api 端沒有任何路徑匯入ortools(pre-flight 檢查若有用到要拆開)。預期 api 映像約 200MB。 - 驗證:api 容器內
python -c "import ortools"應失敗、全部 API 與 e2e 照常;worker 自動排課照常。
2. 前端改按需匯入 Naive UI —— M
- 現況:
main.ts以app.use(naive)全量註冊,主程式 1.4MB。校內網冷載約 1 秒,可接受但偏大。 - 做法:移除全量註冊,改各頁自行匯入(多數頁面已經是具名匯入);檢查是否有模板直接用未匯入的元件。
- 驗證:建置後主程式大小、冷載時間(
perf-page-load.spec.ts);e2e 全跑——漏匯入的元件只會在執行時才壞。
3. 科目匯入支援「主科」欄 —— S
- 現況:表單可勾「主科」(
is_major,影響自動排課把主科排在上午),但 Excel 匯入沒有這一欄, 匯入後要一科科手動勾。 - 做法:匯入範本加「主科」欄(是/否),匯入時寫入;舊範本沒有這欄照樣可匯入。
4. 配課 API 直接擋群組節數不一致 —— S
- 現況:跑班群組成員節數不一致時,要等到自動排課前的 pre-flight 才擋(
group_shape_mismatch)。 - 做法:建立/修改配課當下就回 409 並說明是哪幾門課不一致,錯誤提早出現在組長正在填的地方。
5. 還原上傳改串流落地 —— S
- 現況:
restore-upload以await file.read()整包讀進記憶體;Caddy 200MB 上限與「超大資料庫走 volume 複製」 文件已緩解,但 4GB 主機上仍有風險。 - 做法:分塊寫入暫存檔再驗魔數、交給 worker 還原。
6. CORS 設定文件化與格式驗證 —— S
- 現況:
cors_origins本來就能用環境變數(JSON 格式)覆寫,但沒有文件、格式錯了也不會提示。 同源部署(預設)下無實害。 - 做法:部署文件補一段;設定格式錯誤時啟動即明確報錯。
7. 工程衛生 —— S
tests/solver/test_purity.py目前只掃絕對匯入(level == 0),補相對匯入。slots_overlap、course_key補邊界單元測試。
等使用學校回饋再決定
- 教師端「我的課表」顯示調課:調課成立後,教師自己的課表不會反映這次變動(看板、通知、調課單都有)。 使用學校目前以紙本調課單通知,沒有提出需求。
- 調代課處理頁的清單很長時:研習多的週,一張假單可能十幾節。目前逐節處理;若回饋操作太多, 再考慮「整張假單一次調課」。
工程改善之後(明確延後,不是忘記)
- 完整清單分頁(UI + offset):調代課紀錄、請假清單目前取最新 1000 筆並明講被截斷;整年資料變慢時再做。
- 還原溯源
restore.log+ stale 警告持久徽章:presafe 檔名時戳暫可佐證。 - 求解前 hard-only 探測 + warm start;部分排課獨立短時限:解品質/速度優化,獨立可做。
單雙週的後續(v1.3.0 刻意不做)
- 跑班群組+單雙週(例如單週社團、雙週班會):兩種「綁在一起排」的機制疊加,複雜度與風險最高; 目前沒有學校提出,等有需求再評估。
- Excel 匯入配課支援單雙週:需要新的範本欄位(單週/雙週、配對),且要與舊範本相容; 單雙週課每校通常只有幾組,先在畫面上建。等有學校提出需求再排。
v2(需要外部條件)
- LINE 通知 adapter:走 LINE OA Messaging API,各校自申請 channel token + 綁定碼流程。 等有試用學校提出需求再做——沒有真實 OA 可測之前,寫了也驗不了。
- 軟約束權重 UI:
GET/PUT /api/solver/config已在,滑桿是給進階使用者的;等有學校真的想調權重再開工。
刻意不做(除非出現真實個案)
- 「一門課逐節換教室」:現行一門課整學期一間教室,符合台灣中學實務;改成逐節換教室是為了不存在的需求付模型複雜度。
teacher_time_rule牆鐘化(加節次表維度):v1 已定案「以該配課班級的節次表解讀」,單節次表學校(絕大多數)無此問題。- 沒有請假的教師互調:使用學校的調課幾乎都由研習引起,研習登記為公假/進修後走既有調課流程即可(2026-09-17 確認)。
- 自動升級:新版本提醒只提醒;升級必須由學校先備份、自己決定。
工作流程(每項照做)
實作 → 全品質門檻(ruff/mypy/pytest;eslint/vue-tsc/build/vitest)→ Docker 重建 → E2E(CI 也會擋)→ 真 PostgreSQL 實測、畫面截圖目視 → 開 PR(CI 全綠)→ 維護者合併 → 依 CONTRIBUTING.md 發布。
本頁由
排課與調代課系統 · AGPL-3.0 授權 · GitHub
docs/roadmap.md 自動產生(scripts/build_docs.py)。
要修改內容請改 Markdown 原始檔,不要直接編輯這份 HTML。排課與調代課系統 · AGPL-3.0 授權 · GitHub