| @@ -0,0 +1,643 @@ | |||||
| --- | |||||
| name: fp-mtms-version-checklist | |||||
| description: >- | |||||
| Updates the FP-MTMS Version Programs and Functions Checklist Excel on each | |||||
| developer's synced SharePoint folder. Use only when the user explicitly | |||||
| invokes this skill or asks to update the FP-MTMS version control checklist, | |||||
| page/program version sheet, or function version sheet. | |||||
| disable-model-invocation: true | |||||
| --- | |||||
| # FP-MTMS Version Checklist Excel | |||||
| ## Purpose | |||||
| Maintain the team **FP-MTMS System Version Control Checklist**: page/program | |||||
| level and function-level version history in a shared SharePoint Excel file. | |||||
| ## Language | |||||
| Keep Excel **column headers** exactly as in the file (English). | |||||
| ### 中英對照 (required for cell content) | |||||
| All written cell values must be **Traditional Chinese + English** | |||||
| (中英對照), using i18n labels where they exist. | |||||
| **Exception — do NOT bilingualize:** | |||||
| - `Functions in Page&Program` column **F — Name of Function within | |||||
| Program** (English symbol + source path only; see Column F rule) | |||||
| - Version & Date fields (e.g. `v1.0.0 2026-07-14`) | |||||
| - Developed By (person name as-is) | |||||
| - Ref. No. (number) | |||||
| ### Format | |||||
| **Short labels** (subsystem / page names): | |||||
| ```text | |||||
| 批號追溯 / Item Tracing | |||||
| 倉庫管理 / Store Management | |||||
| ``` | |||||
| **Longer prose** (purpose, highlights, major changes): Chinese first, | |||||
| then English on the **next line**. For usage/呼叫來源, keep it on its | |||||
| own line(s) as well: | |||||
| ```text | |||||
| 工單提料執行頁面(/jodetail)。 | |||||
| Job Order Pick Execution page (/jodetail). | |||||
| 使用/呼叫來源:批號追溯(單據深連結開啟已完成提料紀錄)。 | |||||
| Used / called from: Item Tracing (doc deep-link to open completed pick record). | |||||
| ``` | |||||
| **Major Changes** (Page col F / history I,L,O and Functions col I / history | |||||
| L,O,R) must also list **file + line range + short per-line explanation** — | |||||
| see **Major Changes: file, lines, explanation** below. | |||||
| 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. | |||||
| ## Excel path (per developer) | |||||
| Path varies by Windows user / OneDrive sync root. Resolve in this order: | |||||
| 1. If the user provides a full path, use it. | |||||
| 2. Else try under the user profile home: | |||||
| `{USERPROFILE}/2Fi Business Solutions Limited/2Fi Business Solutions Limited - FP-MTMS VERSION CONTROL/FP-MTMS Version Programs and Functions Checklist v0.1.xlsx` | |||||
| 3. If missing, search under `{USERPROFILE}` for | |||||
| `FP-MTMS Version Programs and Functions Checklist v0.1.xlsx` (real `.xlsx` only). | |||||
| 4. **Always confirm the resolved path with the user before writing.** | |||||
| Do not edit `.url` shortcuts or Downloads copies unless the user explicitly asks. | |||||
| Use `openpyxl` to read/write. If the file is locked (PermissionError), ask the | |||||
| user to close Excel / Excel Online sync lock, then retry. | |||||
| ## Hard rule: preview first — do not interview column by column | |||||
| **Never** ask the user one question per cell / column. | |||||
| Instead: | |||||
| 1. Infer all planned adds/updates from conversation context, git diff, PR, | |||||
| feature description, and existing Excel rows. | |||||
| 2. Before any write, show a **full preview** of every row that will be added or | |||||
| changed (including history shifts). | |||||
| 3. Ask **one** confirmation: whether this preview is correct (yes / no / what | |||||
| to fix). Prefer the Ask Questions tool when available; otherwise ask once | |||||
| in chat. | |||||
| 4. Only after explicit approval, write with `openpyxl` and save. | |||||
| If the preview is wrong, adjust and show a **revised preview**; do not write | |||||
| until approved. | |||||
| If critical facts are truly unknown (e.g. version number or developer name | |||||
| cannot be inferred), ask at most a short batch of missing items — never walk | |||||
| the sheet column by column. | |||||
| ## Pre-check: matching program / feature must exist | |||||
| Before drafting or writing any row: | |||||
| 1. Open the workbook and search both sheets for the target | |||||
| **System Page / Program Name** (and for Functions sheet, also | |||||
| **Name of Function within Program**). | |||||
| 2. Match on existing rows when the program/page already exists. | |||||
| 3. If updating a function: the parent page/program should already exist on | |||||
| `Page&Program Name` (or be included in the same preview as a new page row). | |||||
| 4. If nothing matches and the user intends a **new** program or function, say so | |||||
| clearly in the preview as `NEW ROW`. | |||||
| 5. Do **not** invent duplicate rows for the same page + same function. | |||||
| 6. Different **功能** (distinct functions) → **different Ref. No. rows**, even | |||||
| under the same System Page / Program Name. | |||||
| ## History shift (required on every update) | |||||
| Each page or function keeps **Latest** plus up to **3 previous** history slots | |||||
| (1st, 2nd, 3rd). On every new change to an existing row, **push history | |||||
| rightward** before writing the new Latest: | |||||
| | Before write | After shift | | |||||
| |--------------|-------------| | |||||
| | Latest | → 1st previous | | |||||
| | 1st previous | → 2nd previous | | |||||
| | 2nd previous | → 3rd previous | | |||||
| | 3rd previous | → **deleted** (dropped) | | |||||
| Then write the new change into **Latest** (version/date, highlights, Developed By). | |||||
| ### Page&Program Name — fields that shift together | |||||
| Treat each “slot” as a triple: | |||||
| - **Latest**: D (Version & Date), F (Major Changes), G (Developed By) | |||||
| - **1st**: H, I, J | |||||
| - **2nd**: K, L, M | |||||
| - **3rd**: N, O, P | |||||
| Shift: `(D,F,G) → (H,I,J) → (K,L,M) → (N,O,P)` then drop old 3rd; write new into D/F/G. | |||||
| Leave identity columns A–C and purpose E unchanged unless the user asked to | |||||
| change them (purpose may be refreshed if the preview says so). | |||||
| ### Functions in Page&Program — fields that shift together | |||||
| - **Latest**: H (Function Version & Date), I (Major Changes), J (Developed By) | |||||
| - **1st**: K, L, M | |||||
| - **2nd**: N, O, P | |||||
| - **3rd**: Q, R, S | |||||
| Shift: `(H,I,J) → (K,L,M) → (N,O,P) → (Q,R,S)` then drop old 3rd; write new into H/I/J. | |||||
| Leave A–G (Ref, subsystem, page, page version/purpose, function name/highlight) | |||||
| unchanged unless the preview explicitly updates them. | |||||
| Always show the shift in the preview (old Latest → new 1st, etc.). | |||||
| ### Function history only when that function changed (required) | |||||
| **Do not** push or invent a Functions-sheet history slot for a commit / release | |||||
| that did **not** change the symbols listed in column F for that row. | |||||
| - **Page&Program Name** may still advance Latest / history for a page-level | |||||
| release (e.g. backend-only fix under the same page). | |||||
| - **Functions in Page&Program**: shift H→K→N→Q **only** when this row’s | |||||
| function(s) actually changed (diff touches the verified F symbol(s) / paths). | |||||
| - If a commit updates the **page** but not this function: | |||||
| - You may refresh column **D** (Latest Page Version) to match the page row. | |||||
| - Leave **H/I/J** and previous function history **unchanged**. | |||||
| - Do **not** write filler Latest/history text such as「頁面版本對齊;本功能無程式變更」 | |||||
| / “Page version align; no UI change this release”. | |||||
| - When mapping several commits into history for a **new** function row: include | |||||
| only commits that changed that function; leave unused 1st/2nd/3rd slots empty. | |||||
| Different function rows under the same page may have **different** Latest | |||||
| versions and history depths. | |||||
| Example: page Latest = v1.0.3 (backend TRF fix). Frontend transfer UI row last | |||||
| changed at v1.0.2 → keep function H = v1.0.2; optional D = v1.0.3; no fake | |||||
| v1.0.3 function history slot. | |||||
| ### Major Changes: file, lines, explanation (required) | |||||
| For every **Major Changes Highlights** cell written into Excel (Page sheet | |||||
| Latest F and history I/L/O; Functions sheet Latest I and history L/O/R), | |||||
| include concrete code locations from the commit / diff — not only a summary | |||||
| sentence. | |||||
| **Required content (中英對照 for prose; paths/lines stay as-is):** | |||||
| 1. **Summary** — short ZH then EN (what the release did). | |||||
| 2. **Per changed file** — repo-relative path. | |||||
| 3. **Line range(s)** — current file line numbers after the change (prefer | |||||
| `start–end`; single line OK). Re-resolve with `git show` / Read / Grep; | |||||
| do not guess. | |||||
| 4. **Short explanation by line/range** — what that hunk does (ZH then EN, or | |||||
| one ZH+EN pair per bullet). | |||||
| **Cell layout example:** | |||||
| ```text | |||||
| 轉倉出庫批次 ledger 餘額鏈結修正。 | |||||
| TRF stock-out batch ledger balance chaining fix. | |||||
| StockOutLineService.kt | |||||
| L1518: ledger 查詢改為 findFirstByItemIdAndDeletedFalseOrderByDateDescIdDesc。 | |||||
| L1518: ledger lookup → findFirstByItemIdAndDeletedFalseOrderByDateDescIdDesc. | |||||
| L2318–2347 (createStockOutBatch): 同 batch 多行依 runningLedgerBalance 扣帳,不再每次用 onHandQty。 | |||||
| L2318–2347 (createStockOutBatch): chain per-item running ledger balance within a batch instead of onHandQty each line. | |||||
| StockInLineService.kt | |||||
| L269 / L312: assignLotNo / assignLotNoForJo 改為 open fun(無邏輯變更)。 | |||||
| L269 / L312: assignLotNo / assignLotNoForJo marked open (no logic change). | |||||
| ``` | |||||
| **Rules:** | |||||
| - Fact-check path + line numbers against the repo at write time (lines drift; | |||||
| re-check before save). | |||||
| - Group by file; under each file, one bullet per meaningful hunk / line range. | |||||
| - Prefer the member / symbol name in the explanation when helpful | |||||
| (e.g. `createStockOutBatch`, `assignLotNo`). | |||||
| - If many files: keep bullets short; still list each touched path that belongs | |||||
| to this row (Functions row → only files/symbols in column F, plus closely | |||||
| related hunks in those files for this change). | |||||
| - Page-sheet Major Changes may summarize all files for that page release; | |||||
| Functions-sheet Major Changes stay scoped to that function row’s F symbols | |||||
| and their files. | |||||
| - Show the same file/line bullets in the **preview** before write. | |||||
| - Pure i18n-only or one-liner UI copy changes: still cite file + line(s) | |||||
| (e.g. `InventoryLotLineTable.tsx L508–518: success message by API code`). | |||||
| ## Batch updates | |||||
| Many rows may change in one invocation (multiple pages and/or functions). | |||||
| - Build **one combined preview** covering all affected rows. | |||||
| - One approval covers the whole batch. | |||||
| - Still one Ref. No. row per distinct 功能 / function. | |||||
| ## Sheets and columns | |||||
| Data starts at **row 5** (rows 1–4 are title/headers). | |||||
| ### Sheet: `Page&Program Name` | |||||
| | Col | Header | | |||||
| |-----|--------| | |||||
| | A | Ref. No. | | |||||
| | B | Name of Subsystem / Module / Menu Selection | | |||||
| | C | System Page / Program Name | | |||||
| | D | Latest Page Version & Date | | |||||
| | E | Page Purpose Highlights | | |||||
| | F | Major Changes Highlights | | |||||
| | G | Developed By | | |||||
| | H | 1st Previous Page Version & Date | | |||||
| | I | 1st Major Changes Highlights | | |||||
| | J | Developed By | | |||||
| | K | 2nd Previous Page Version & Date | | |||||
| | L | 2nd Major Changes Highlights | | |||||
| | M | Developed By | | |||||
| | N | 3rd Previous Page Version & Date | | |||||
| | O | 3rd Major Changes Highlights | | |||||
| | P | Developed By | | |||||
| ### Sheet: `Functions in Page&Program` | |||||
| | Col | Header | | |||||
| |-----|--------| | |||||
| | A | Ref. No. | | |||||
| | B | Name of Subsystem / Module / Menu Selection | | |||||
| | C | System Page / Program Name | | |||||
| | D | Latest Page Version & Date | | |||||
| | E | Page Purpose Highlights | | |||||
| | F | Name of Function within Program | | |||||
| | G | Functions Highlight | | |||||
| | H | Latest Function Version & Date | | |||||
| | I | Major Changes Highlights | | |||||
| | J | Developed By | | |||||
| | K | 1st Previous Page Version & Date | | |||||
| | L | 1st Major Changes Highlights | | |||||
| | M | Developed By | | |||||
| | N | 2nd Previous Page Version & Date | | |||||
| | O | 2nd Major Changes Highlights | | |||||
| | P | Developed By | | |||||
| | Q | 3rd Previous Page Version & Date | | |||||
| | R | 3rd Major Changes Highlights | | |||||
| | S | Developed By | | |||||
| #### Column F — English symbol + source file (required) | |||||
| **Name of Function within Program (F)** must use the real English | |||||
| identifier from code (component / class / function / endpoint name), | |||||
| **and** state which file(s) it comes from. Do **not** put only a | |||||
| localized UI label in F. | |||||
| Format: | |||||
| ```text | |||||
| <EnglishSymbol> — <repo-relative path> | |||||
| ``` | |||||
| Examples: | |||||
| - `ItemTracingScanBar — src/components/ItemTracing/ItemTracingScanBar.tsx` | |||||
| - `GoodPickExecutionWorkbenchRecord — src/components/DoWorkbench/GoodPickExecutionWorkbenchRecord.tsx` | |||||
| If one checklist function spans multiple primary files, put **each** | |||||
| symbol + path on its **own new line** (do not join with `; ` on one line): | |||||
| ```text | |||||
| ItemTracingSummary — src/components/ItemTracing/ItemTracingSummary.tsx | |||||
| ItemTracingLocations — src/components/ItemTracing/ItemTracingLocations.tsx | |||||
| ``` | |||||
| ##### Service / controller / class files — also list member functions | |||||
| When the primary symbol is a **service, controller, or other class** | |||||
| (not a React page component), F must also name the **member function(s)** | |||||
| that were added or changed — not only the class name. | |||||
| Put **each class + its methods + its path on its own line** (Excel `\n`, | |||||
| wrap text). Do not squeeze multiple files onto one line with `; `. | |||||
| Format (one file per line): | |||||
| ```text | |||||
| <ClassName>.<fun1> / .<fun2> — <path-to-that-file> | |||||
| ``` | |||||
| Multi-file example: | |||||
| ```text | |||||
| ItemLotTraceService.trace / .traceLocation — src/main/java/com/ffii/fpsms/modules/stock/service/ItemLotTraceService.kt | |||||
| InventoryLotLineController.traceLot / .traceLocation — src/main/java/com/ffii/fpsms/modules/stock/web/InventoryLotLineController.kt | |||||
| ``` | |||||
| ```text | |||||
| PickOrderLifecycleController.getLifecycle / .getLifecycleByCode — src/main/java/.../PickOrderLifecycleController.kt | |||||
| PickOrderLifecycleService.getLifecycle / .getLifecycleByCode — src/main/java/.../PickOrderLifecycleService.kt | |||||
| ``` | |||||
| For multi-file **component** rows, also one path per line: | |||||
| ```text | |||||
| ItemTracingSummary — src/components/ItemTracing/ItemTracingSummary.tsx | |||||
| ItemTracingLocations — src/components/ItemTracing/ItemTracingLocations.tsx | |||||
| ``` | |||||
| Fact-check each listed member function exists in that file (same casing). | |||||
| If only one method changed, list that one method. Do not cite a class | |||||
| without its relevant `fun` / method names when the change is in a | |||||
| `*Service` / `*Controller` (or similar) file. | |||||
| **Functions Highlight (G)** and **Major Changes (I)** must be 中英對照 | |||||
| (Chinese then English on the next line). Prefer i18n terms. Page / | |||||
| subsystem names (B/C) use `中文 / English`. | |||||
| #### Column E — Page Purpose + where the function is used (required) | |||||
| On **Functions in Page&Program**, **Page Purpose Highlights (E)** must | |||||
| include: | |||||
| 1. The owning page purpose (what page C is for), **and** | |||||
| 2. **Where this function is used / called from** — especially when the | |||||
| caller is a **different** page than column C. | |||||
| Owning page (C) = where the code/feature primarily lives. | |||||
| Usage location = which page(s) invoke, deep-link into, or depend on it. | |||||
| Examples: | |||||
| - Function lives on `工單提料` but is opened from Item Tracing doc links: | |||||
| ```text | |||||
| 工單提料執行頁面(/jodetail)。 | |||||
| Job Order Pick Execution page (/jodetail). | |||||
| 使用/呼叫來源:批號追溯(單據深連結開啟已完成提料紀錄)。 | |||||
| Used / called from: Item Tracing (doc deep-link to open completed pick record). | |||||
| ``` | |||||
| - Function lives on `提料單` (lifecycle API) but is consumed for tracing: | |||||
| ```text | |||||
| 提料單管理。 | |||||
| Pick Order management. | |||||
| 使用/呼叫來源:批號追溯(追溯流程/單據生命週期查詢)。 | |||||
| Used / called from: Item Tracing (trace flow / document lifecycle query). | |||||
| ``` | |||||
| - Function lives on `成品出倉` but is deep-linked from tracing: | |||||
| ```text | |||||
| 成品出倉(DO Workbench)揀貨與紀錄作業。 | |||||
| DO Workbench pick execution and records. | |||||
| 使用/呼叫來源:批號追溯(單據深連結開啟成品出倉紀錄)。 | |||||
| Used / called from: Item Tracing (doc deep-link to open DO Workbench record). | |||||
| ``` | |||||
| - Function lives on and is only used by the same page (e.g. 批號追溯): | |||||
| ```text | |||||
| …頁面目的(中文)… | |||||
| …page purpose (English)… | |||||
| 使用/呼叫來源:本頁(批號追溯 / Item Tracing)。 | |||||
| Used / called from: this page (批號追溯 / Item Tracing). | |||||
| ``` | |||||
| Put **使用/呼叫來源** (and its English line) on **new lines** after the | |||||
| page-purpose ZH/EN pair. Do not run usage on the same line as purpose. | |||||
| When inferring usage, fact-check callers (imports, links, API consumers) | |||||
| from the change/diff. Do not invent a caller. If usage is only the owning | |||||
| page, say `本頁(<page>)`. If multiple callers, list them (i18n names). | |||||
| Do **not** leave E as only the generic page blurb when the function was | |||||
| added/changed for another page’s flow (e.g. refs that support 批號追溯 | |||||
| but sit under 工單提料/提料單/成品出倉). | |||||
| #### Fact-check column F before preview (required) | |||||
| Never invent a symbol or path. For **every** Functions-sheet row in the | |||||
| preview (new or updated), verify against the real repos: | |||||
| 1. **Path exists** — each repo-relative path resolves under the correct | |||||
| workspace (`FPSMS-frontend` or `FPSMS-backend`). Prefer `Glob` / `Read` | |||||
| / `Grep`; do not guess. | |||||
| 2. **Symbol is in that file** — the English symbol must actually be defined | |||||
| or exported in the cited file (e.g. `const ItemTracingScanBar`, | |||||
| `export default ItemTracingScanBar`, `open class ItemLotTraceService`, | |||||
| `fun traceLot`, `class PickOrderLifecycleController`). Match casing | |||||
| exactly as in code (`CompleteJobOrderRecord`, not `completeJobOrderRecord`). | |||||
| For service/controller rows, also verify each listed **member function** | |||||
| (e.g. `trace`, `traceLocation`, `getLifecycle`) exists in that file. | |||||
| 3. **Multi-path rows** — each symbol + path must be on its **own line**: | |||||
| - Every line’s symbol must be defined in that line’s file. | |||||
| - Example OK: | |||||
| ```text | |||||
| ItemTracingSummary — …/ItemTracingSummary.tsx | |||||
| ItemTracingLocations — …/ItemTracingLocations.tsx | |||||
| ``` | |||||
| - Do not join multiple files with `; ` on one line. | |||||
| 4. **Wrong location** — if the symbol lives elsewhere, correct the path to | |||||
| the real file; do not keep a convenient-but-false path. | |||||
| 5. **Not found** — if the file or symbol cannot be verified, do **not** put | |||||
| it in F. Omit the row or ask the user; never write an unverified F. | |||||
| In the preview, mark verified rows (optional short note), e.g. | |||||
| `F verified: symbol+path OK`. If any F failed fact-check, fix before asking | |||||
| for confirmation. | |||||
| ## Preview format (required before save) | |||||
| Show a clear preview, for example: | |||||
| ```text | |||||
| Excel: <resolved path> | |||||
| Sheet: Functions in Page&Program | |||||
| Row 12 (UPDATE existing | Ref 7 | Page: 批號追溯 | Function: ItemTracingFlowGraphSearch — src/components/ItemTracing/ItemTracingFlowGraphSearch.tsx) | |||||
| History shift: | |||||
| old Latest (H/I/J) → 1st | |||||
| old 1st → 2nd | |||||
| old 2nd → 3rd | |||||
| old 3rd → DROP | |||||
| New Latest: | |||||
| H: v1.2.0 2026-07-14 | |||||
| I: 新增流程圖節點搜尋。 | |||||
| Add flow-graph node search. | |||||
| ItemTracingFlowGraphSearch.tsx | |||||
| L42–88: 搜尋框與節點高亮。 | |||||
| L42–88: search box and node highlight. | |||||
| J: <developer> | |||||
| Row NEW (append | next Ref 15 | Page: 批號追溯 / Item Tracing | Function: ItemTracingScanBar — src/components/ItemTracing/ItemTracingScanBar.tsx) | |||||
| A: 15 | |||||
| B: 倉庫管理 / Store Management | |||||
| C: 批號追溯 / Item Tracing | |||||
| E: …頁面目的(中文)… | |||||
| …page purpose (English)… | |||||
| 使用/呼叫來源:本頁(批號追溯 / Item Tracing)。 | |||||
| Used / called from: this page (批號追溯 / Item Tracing). | |||||
| F: ItemTracingScanBar — src/components/ItemTracing/ItemTracingScanBar.tsx | |||||
| G: 相機掃碼/手動查詢 | |||||
| Camera scan / manual search | |||||
| ... | |||||
| H/I/J: <new latest> | |||||
| history slots: empty | |||||
| Row NEW (… | Page: 工單提料 / Job Order Pick Execution | Function: CompleteJobOrderRecord — …) | |||||
| C: 工單提料 / Job Order Pick Execution | |||||
| E: 工單提料執行頁面(/jodetail)。 | |||||
| Job Order Pick Execution page (/jodetail). | |||||
| 使用/呼叫來源:批號追溯(單據深連結)。 | |||||
| Used / called from: Item Tracing (doc deep-link). | |||||
| F: CompleteJobOrderRecord — src/components/Jodetail/completeJobOrderRecord.tsx | |||||
| JodetailSearch — src/components/Jodetail/JodetailSearch.tsx | |||||
| … | |||||
| Confirm: Is this preview correct? [Yes / No — tell me what to change] | |||||
| ``` | |||||
| For page-sheet rows, use the same style with D/F/G and H–P history. | |||||
| ## Workflow | |||||
| 1. Confirm Excel path exists (and is writable when saving). | |||||
| 2. Infer target sheets and rows from the user’s change description / diff. | |||||
| 3. **Pre-check** existing program/page/function rows in Excel. | |||||
| 4. For each Functions row: **fact-check** English symbol + every source path | |||||
| against the codebase (see Fact-check column F). Correct or drop failures. | |||||
| 5. For each Functions row: set **E** with page purpose **and** usage/呼叫來源 | |||||
| (owning page vs caller page; see Column E rule). | |||||
| 6. For each existing match: plan history shift + new Latest values | |||||
| (**only** shift function history when that function’s F symbols changed). | |||||
| 7. For each Major Changes cell (page + functions, Latest and any filled history | |||||
| slots): resolve **file path + line range(s) + short per-hunk explanation** | |||||
| from git diff / current sources (see Major Changes: file, lines, explanation). | |||||
| 8. For each new function/page: plan a new Ref. No. row (next integer after max used). | |||||
| 9. Present the **full preview** (verified F + file/line Major Changes) → ask once | |||||
| if correct. | |||||
| 10. On approval: apply shifts + writes with `openpyxl`, save, report sheet names, | |||||
| row numbers, Ref. Nos., and key Latest fields. | |||||
| 11. **Code comments** — for every Functions-sheet symbol that was added or | |||||
| updated, add or refresh the FP-MTMS checklist comment on that | |||||
| component / class member (see Code comments rule). Include this in the | |||||
| preview (list of files/symbols that will get comments). | |||||
| 12. Note that OneDrive may take a few seconds to sync; refresh Excel Online if open. | |||||
| ## Code comments on every updated function (required) | |||||
| After the user approves the checklist preview (or as part of the same | |||||
| approved batch), **add or update a source comment** on every function / | |||||
| component listed in column F for each affected Functions-sheet row. | |||||
| ### Comment contents (required fields) | |||||
| Must include: | |||||
| 1. **Ref. No.** — Functions sheet Ref. No. for that row | |||||
| 2. **Version** — Latest Function Version (column H), e.g. `v1.0.0` | |||||
| 3. **Update date** — the date from column H, e.g. `2026-07-14` | |||||
| ### Canonical format | |||||
| Parse column H `vX.Y.Z YYYY-MM-DD` into version + date. | |||||
| **TypeScript / TSX** (JSDoc immediately above the component / export / | |||||
| function): | |||||
| ```ts | |||||
| /** FP-MTMS Version Checklist | Functions Ref. No. 1 | v1.0.0 | 2026-07-14 */ | |||||
| const ItemTracingScanBar: React.FC<ScanBarProps> = (...) => { | |||||
| ``` | |||||
| **Kotlin** (KDoc immediately above the `fun` / class member): | |||||
| ```kotlin | |||||
| /** FP-MTMS Version Checklist | Functions Ref. No. 7 | v1.0.0 | 2026-07-14 */ | |||||
| open fun trace(...): ItemLotTraceResponse = ... | |||||
| ``` | |||||
| If a KDoc/JSDoc already exists, **prepend or merge** this checklist line | |||||
| into it (do not delete useful existing documentation). Prefer keeping the | |||||
| checklist line as the first line of the block: | |||||
| ```kotlin | |||||
| /** | |||||
| * FP-MTMS Version Checklist | Functions Ref. No. 7 | v1.0.0 | 2026-07-14 | |||||
| * Lazy-load: returns the full location-scoped trace block... | |||||
| */ | |||||
| ``` | |||||
| ### Placement rules | |||||
| - **React component**: above the primary `const ComponentName` / `export | |||||
| default` that matches column F. | |||||
| - **Service / controller**: above **each** listed member function | |||||
| (e.g. both `trace` and `traceLocation`). | |||||
| - Multi-line F (one symbol per line): comment **each** symbol in its file. | |||||
| - On later checklist updates to the same row: **replace** the old Ref/version/date | |||||
| in the comment with the new Latest values (do not stack duplicate checklist lines). | |||||
| ### Preview | |||||
| The Excel preview must also list planned comment updates, e.g.: | |||||
| ```text | |||||
| Code comments to add/update: | |||||
| Ref 7 → ItemLotTraceService.trace / .traceLocation (v1.0.0 | 2026-07-14) | |||||
| Ref 1 → ItemTracingScanBar (v1.0.0 | 2026-07-14) | |||||
| ``` | |||||
| Only edit comments after preview approval (same gate as Excel write), unless | |||||
| the user explicitly asks to sync comments only. | |||||
| ## Inference hints (for filling the preview) | |||||
| - **Version & Date**: next patch/semver from conversation/git if known; else | |||||
| `vX.Y.Z YYYY-MM-DD` with today’s date. | |||||
| - **Developed By**: `git config user.name` or chat context. | |||||
| - **Purpose / Changes / Function highlight**: 中英對照; short bullets from | |||||
| recent PR/diff; prefer i18n terms. | |||||
| - **Major Changes (Page F / Functions I and history slots)**: summary ZH/EN | |||||
| **plus** each changed file, line range(s), and short per-hunk explanation | |||||
| (see Major Changes: file, lines, explanation). Resolve lines from git diff | |||||
| + current file; do not omit locations. | |||||
| - **Subsystem / Page names**: `中文 / English` from i18n EN+ZH. | |||||
| - **Function name (col F)**: English code symbol + source file path only | |||||
| (no 中英對照). **Fact-check** symbol+path before preview. | |||||
| - **Page Purpose (E)**: 中英對照 + usage/呼叫來源 lines (ZH then EN). | |||||
| - **Ref. No.**: for new rows, next integer after the last used Ref. No. on that sheet. | |||||
| - Prefer updating an existing row over creating a duplicate when page + | |||||
| English function symbol (and file) match. | |||||
| ## Do not | |||||
| - Ask the user to fill cells one column at a time | |||||
| - Save without an approved preview | |||||
| - Skip history shift when updating an existing Latest | |||||
| - Push or invent **function** history (H–S) for a commit that did not change | |||||
| that row’s column F symbols — no “page align / no code change” filler slots | |||||
| - Write Major Changes as summary-only without **file path + line range(s) + | |||||
| short per-hunk explanation** (Page F / Functions I and matching history cols) | |||||
| - Write Chinese-only or English-only prose in bilingual-required columns | |||||
| (everything except Function name F, versions, Developed By, Ref. No., and | |||||
| the path/line tokens inside Major Changes) | |||||
| - Put only a Chinese UI label in **Name of Function within Program** without | |||||
| the English symbol and source file | |||||
| - Bilingualize column F (keep symbol + path English-only) | |||||
| - Omit usage/呼叫來源 from **Page Purpose Highlights (E)** when the function | |||||
| is invoked from another page (e.g. 批號追溯 deep-link into 工單提料) | |||||
| - Cite a `*Service` / `*Controller` class in F without its relevant member | |||||
| function names (e.g. write `ItemLotTraceService.trace / .traceLocation`, | |||||
| not only `ItemLotTraceService`) | |||||
| - Write an F value whose symbol or path was not verified in the codebase | |||||
| - Guess file paths or rename symbols to “look right” without opening the file | |||||
| - Put two different 功能 on the same Ref. No. row | |||||
| - Create a function row when the parent program/page was neither found nor | |||||
| included in the same approved preview as a new page row | |||||
| - Clear history columns without showing that drop in the preview | |||||
| - Skip adding/updating FP-MTMS checklist comments on code for Functions rows | |||||
| that were just written (must include Ref. No., version, and update date) | |||||
| - Commit the Excel file to git | |||||
| - Edit cloud URLs / `.url` files as if they were workbooks | |||||