| @@ -58,7 +58,26 @@ M,P,S) must also list **file + line range + short per-line explanation** — | |||||
| see **Major Changes: file, lines, explanation** below. | see **Major Changes: file, lines, explanation** below. | ||||
| Prefer EN/ZH pairs from `src/i18n/en/*` and `src/i18n/zh/*` for menu and | Prefer EN/ZH pairs from `src/i18n/en/*` and `src/i18n/zh/*` for menu and | ||||
| feature terms. Enable Excel wrap text when a cell has multiple lines. | |||||
| feature terms. | |||||
| ## Excel formatting (required on every write) | |||||
| When writing with `openpyxl`, apply formatting so cells stay readable: | |||||
| 1. **Wrap text** — enable wrap on every multi-line cell you write (Purpose, | |||||
| Major Changes, Function name with multiple paths, Highlights). Prefer | |||||
| `Alignment(wrap_text=True, vertical="top")`. | |||||
| 2. **Line breaks** — use real Excel newlines (`\n`) between ZH/EN pairs and | |||||
| between file / line bullets; do not stuff everything onto one long line. | |||||
| 3. **Row height** — after writing multi-line cells, set a reasonable row | |||||
| height (or leave Excel auto-fit) so wrapped text is visible; do not leave | |||||
| multi-line content in a single-line-tall row if the sheet already uses | |||||
| taller history rows. | |||||
| 4. **Do not break headers** — never rename, reorder, or delete existing header | |||||
| labels; only fill data cells (and Archive append columns as defined). | |||||
| 5. **Match existing style** — when updating a row, keep the same wrap/alignment | |||||
| pattern as neighbouring filled cells on that sheet. | |||||
| 6. **Archive** — same wrap rules as main; no extra “Source” or helper columns. | |||||
| ## Excel path (per developer) | ## Excel path (per developer) | ||||
| @@ -210,11 +229,10 @@ Data starts at **row 5** (rows 1–3 title/notes, row 4 headers). | |||||
| | E | Major Changes Highlights | | | E | Major Changes Highlights | | ||||
| | F | Developed By | | | F | Developed By | | ||||
| | G | Archived At | | | G | Archived At | | ||||
| | H | Source | | |||||
| Map from main page row 3rd slot: A←A, B←B, C←C, D←N, E←O, F←P. | Map from main page row 3rd slot: A←A, B←B, C←C, D←N, E←O, F←P. | ||||
| `Archived At` = today's date (`YYYY-MM-DD`). | `Archived At` = today's date (`YYYY-MM-DD`). | ||||
| `Source` = `overflow from 3rd previous` (unless the user specifies another reason). | |||||
| Do **not** add a Source column. | |||||
| ### Sheet: `Functions in Page&Program` (archive) | ### Sheet: `Functions in Page&Program` (archive) | ||||
| @@ -229,12 +247,12 @@ Map from main page row 3rd slot: A←A, B←B, C←C, D←N, E←O, F←P. | |||||
| | G | Major Changes Highlights | | | G | Major Changes Highlights | | ||||
| | H | Developed By | | | H | Developed By | | ||||
| | I | Archived At | | | I | Archived At | | ||||
| | J | Source | | |||||
| Map from main functions row 3rd slot: | Map from main functions row 3rd slot: | ||||
| A←A, B←B (Page Ref. No.), C←C, D←D, E←G, F←R, G←S, H←T. | |||||
| `Archived At` / `Source` same rules as page archive. | |||||
| A←A, B←B (Page Ref. No.), C←C, D←D, E←G, F←R, G←S, H←T; | |||||
| `Archived At` (I) = today. | |||||
| Always copy **Page Ref. No.** so archive rows stay linked to the parent page. | Always copy **Page Ref. No.** so archive rows stay linked to the parent page. | ||||
| Do **not** add a Source column. | |||||
| ### Archive write rules | ### Archive write rules | ||||
| @@ -573,7 +591,6 @@ Row 12 (UPDATE existing | Ref 7 | Page Ref 3 → 批號追溯 / Item Tracing | F | |||||
| G: <old 3rd major changes> | G: <old 3rd major changes> | ||||
| H: <old 3rd developed by> | H: <old 3rd developed by> | ||||
| I: 2026-07-16 | I: 2026-07-16 | ||||
| J: overflow from 3rd previous | |||||
| New Latest: | New Latest: | ||||
| I: v1.2.0 2026-07-14 | I: v1.2.0 2026-07-14 | ||||
| J: 新增流程圖節點搜尋。 | J: 新增流程圖節點搜尋。 | ||||
| @@ -635,8 +652,9 @@ For page-sheet rows, use the same style with D/F/G and H–P history. | |||||
| 9. Present the **full preview** (verified G + Page Ref + file/line Major Changes + | 9. Present the **full preview** (verified G + Page Ref + file/line Major Changes + | ||||
| archive appends) → ask once if correct. | archive appends) → ask once if correct. | ||||
| 10. On approval: with `openpyxl`, **append archive rows first** (if any), then | 10. On approval: with `openpyxl`, **append archive rows first** (if any), then | ||||
| apply main shifts + writes; save both workbooks; report sheet names, row | |||||
| numbers, Ref. Nos., Page Ref. Nos., archive rows appended, and key Latest fields. | |||||
| apply main shifts + writes; apply **Excel formatting** (wrap text / | |||||
| newlines); save both workbooks; report sheet names, row numbers, | |||||
| Ref. Nos., Page Ref. Nos., archive rows appended, and key Latest fields. | |||||
| 11. **Code comments** — for every Functions-sheet symbol that was added or | 11. **Code comments** — for every Functions-sheet symbol that was added or | ||||
| updated, add or refresh the FP-MTMS checklist comment on that | updated, add or refresh the FP-MTMS checklist comment on that | ||||
| component / class member (see Code comments rule). Include this in the | component / class member (see Code comments rule). Include this in the | ||||
| @@ -736,7 +754,9 @@ the user explicitly asks to sync comments only. | |||||
| - Save without an approved preview | - Save without an approved preview | ||||
| - Skip history shift when updating an existing Latest | - Skip history shift when updating an existing Latest | ||||
| - Drop a filled **3rd previous** without appending it to the Archive long table | - Drop a filled **3rd previous** without appending it to the Archive long table | ||||
| - Add or fill an Archive **Source** column (removed; do not reintroduce) | |||||
| - Overwrite or edit existing Archive rows (append only) | - Overwrite or edit existing Archive rows (append only) | ||||
| - Skip Excel formatting (wrap text / newlines) on multi-line cells you write | |||||
| - Push or invent **function** history (I–T) for a commit that did not change | - Push or invent **function** history (I–T) for a commit that did not change | ||||
| that row’s column G symbols — no “page align / no code change” filler slots | that row’s column G symbols — no “page align / no code change” filler slots | ||||
| - Write Major Changes as summary-only without **file path + line range(s) + | - Write Major Changes as summary-only without **file path + line range(s) + | ||||