feat(compat): the M2 daily-use screens (acceptance list) with every other route stubbed and recorded

未關閉
#46 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

維護者通常 1 天內回覆

還沒有人認領這個 Issue。

評估

難度
5/5
預估耗時
一週以上
新手友好度
15/100
Issue 類型
功能
描述清晰度
基本清楚
活躍度
活躍
技術堆疊
postgresql, rust

研究方向

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 內容生成。

描述

area:app prio:p0 review:fable-2026-10-19

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 and expand (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 implemented or stub:<shape>) and point F-X13 at it.
  • Implement the implemented rows. They include the group-by engine for every group_by value the list screen offers, and the filter parser. Comments go through the multiplexed history/ 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 per group_by value 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 範本
  • 閱讀貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

aRustyDev/thrust 的其他 Issue

查看 aRustyDev/thrust 的全部 Issue

相似的 Issue

更多 Rust Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。