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 發布。

本頁由 docs/roadmap.md 自動產生(scripts/build_docs.py)。 要修改內容請改 Markdown 原始檔,不要直接編輯這份 HTML。
排課與調代課系統 · AGPL-3.0 授權 · GitHub