feat(compat): the M2 daily-use screens (acceptance list) with every other route stubbed and recorded
維護者通常 1 天內回覆
還沒有人認領這個 Issue。
評估
- 難度
- 5/5
- 預估耗時
- 一週以上
- 新手友好度
- 15/100
研究方向
Start with the #45 journeys and the pinned oracle; use them to derive the machine-readable acceptance list from recorded requests and the inventory. Read the referenced F-X13, D-021, ADRs, and research sections to understand the required rows and stubs. Done means the M2 journeys and parity tests pass, unmatched requests fail the run, and per-screen estimates and tripwire results are recorded.
由索引模型根據 Issue 內容生成。
描述
Context
After #44, the compat layer serves the 48-route minimum slice and nothing else the React shell calls. FEATURES F-X13 still sets the acceptance list to "the 290 P0 rows of scripts/compat-inventory/out-pinned/endpoint-inventory.csv" (.agents/plans/contrail/FEATURES.md:137). That file is off-repo, on a branch of the Plane fork (spikes/README.md:54; #55 brings it here). Triage confirmed this M2 screen list (review §5, FR-01; handoff A5.1; Q-R8 in Track C):
- work-item list (group-by, filters, pagination);
- work-item detail (description, comments, activity, attachments, labels, assignees, state, priority, dates);
- project create and settings;
- workspace members (no invites);
- in-app notifications;
- global search.
Problem
- FR-01: all 290 rows cost 207.6 pd (139.1 to 364.2) (
research/0003§15.6), and Phase 2 deletes the layer screen by screen, so each row beyond daily use is paid for twice. - The expensive shared machinery sits under these screens: the group-by engine (6.0 pd), issue-filter machinery (6.0), the pagination envelope (2.0),
expand/fields(2.0) and presigned assets (3.0) (research/0003§8, lines 424-426). The slice excludes group-by andexpand(line 506). - React quirks to honour: comments are read from
history/?activity_type=issue-comment(§9 row 5), and images are<img>tags answered by a 302 to a presigned URL (§9 row 7). - Without a recorded stub, any other call the shell makes gets an unplanned answer.
Proposal
- Derive the acceptance list by running the #45 journeys for each screen against the pinned oracle and joining the recorded requests with the inventory. Commit the result as a machine-readable file (one row per method and path, marked
implementedorstub:<shape>) and point F-X13 at it. - Implement the
implementedrows. They include the group-by engine for everygroup_byvalue the list screen offers, and the filter parser. Comments go through the multiplexedhistory/endpoint, or through a native list behind a service-layer change (Q-R2, §9 row 5). - This issue also builds the outbox consumers that write the activity and notification rows these screens read (ADR-0046, ADR-0073).
- Search uses database FTS plus trigram (ADR-0083, D-002). Members ship without invites (Q-F7 default: the admin creates users at P0).
- Every other route the shell calls gets the cheapest shape-correct stub (an empty list, a
404, or a fixture). The stub list is recorded as deviation D-021 (handoff A5.3). - Re-estimate from actuals: Q-0009.1's tripwires now apply to the acceptance list (ADR-0034, round-29 note).
Acceptance criteria
- The acceptance-list file exists, and F-X13 (
FEATURES.md) and D-021 (DEVIATIONS.md) both reference it. - Each M2 screen has a #45 journey that passes on the pinned oracle and on
worker-cf. - During a journey run, the compat router logs every request that matched neither an implemented row nor a stub, and the run fails if the log is not empty. Control: deleting one stub row makes it fail.
- Each implemented row has a
parity_test against an oracle fixture, including one grouped-listing fixture pergroup_byvalue the list screen offers. Control: a mutated fixture fails. - The list and detail endpoints stay within the round-trip budget from #39.
- Actual pd per screen is recorded, with a statement of whether either tripwire fired.
References
- Review: .agents/plans/contrail/reviews/2026-10-19-fable-architecture-review.md (FR-01; §3 M2 row and "Smallest usable release"; §5)
research/0003-compat-plane-inventory.md§1 item 5, §8 (lines 424-426, 506), §9 rows 2, 5, 6, 7, §15.6- FEATURES F-X13, F-B02, F-B03, F-B04, F-B05, F-B06, F-B07, F-B08, F-B16, F-A07, F-D01, F-D04, F-D08
- ADR-0034 (round-29 note), ADR-0013 (round-29 note), ADR-0046, ADR-0073, ADR-0083; DEVIATIONS D-002, D-013, D-021
- Q-0009.1, Q-0010.1, Q-F7, Q-R2, Q-R8;
spikes/README.md:54(inventory scripts off-repo)
Blocked by: #44, #45
Finding: FR-01
- 主要語言
- Rust
- 星號
- 0
- 分支
- 0
- 平均合併
- 1 小時 35 分鐘
- 30 天內合併 PR
- 67
環境準備
- 沒有 Dockerfile 或 Docker Compose 檔案
- 沒有 Pull Request 範本
- 閱讀貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
aRustyDev/thrust 的其他 Issue
-
area:process prio:p1 type:security
難度 4/5 3-5 天 新手友好度 48/100
維護者通常 1 天內回覆
-
area:process bug prio:p1
難度 4/5 3-5 天 新手友好度 38/100
維護者通常 1 天內回覆
-
area:process prio:p1
難度 4/5 3-5 天 新手友好度 55/100
維護者通常 1 天內回覆
-
area:process prio:p1
難度 4/5 1-2 天 新手友好度 55/100
維護者通常 1 天內回覆
-
area:process prio:p1
難度 4/5 3-5 天 新手友好度 56/100
維護者通常 1 天內回覆
相似的 Issue
-
難度 2/5 1-3 小時 新手友好度 68/100
維護者通常 1 天內回覆
-
bug
難度 2/5 1-3 小時 新手友好度 78/100
-
難度 2/5 1-3 小時 新手友好度 72/100
-
難度 2/5 1-3 小時 新手友好度 78/100
CakeRepository/agentshangout#995 ·
-
area:frontend kind:bug priority:p3 ready
難度 2/5 1-3 小時 新手友好度 88/100
維護者通常 1 天內回覆