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

Aberta
#46 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
5/5
Tempo estimado
Mais de uma semana
Facilidade para iniciantes
15/100
Tipo de issue
Funcionalidade
Clareza
Razoavelmente clara
Status de atividade
Ativa
Stack de tecnologia
postgresql, rust

Direção de pesquisa

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.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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

Linguagem predominante
Rust
Estrelas
0
Forks
0
Merge médio
1h 35min
PRs com merge (30d)
67

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de aRustyDev/thrust

Todas as issues de aRustyDev/thrust

Issues semelhantes

Mais issues de Rust

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.