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

Abierto
#46 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
15/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
postgresql, rust

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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

Lenguaje dominante
Rust
Estrellas
0
Forks
0
Merge medio
1 h 35 min
PR fusionados (30 d)
67

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de aRustyDev/thrust

Todos los issues de aRustyDev/thrust

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.