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

Ouverte
#46 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
5/5
Temps estimé
Plus d'une semaine
Accessibilité débutants
15/100
Type d'issue
Fonctionnalité
Clarté
Plutôt claire
Activité
Active
Stack technique
postgresql, rust

Piste de recherche

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.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

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

Langage dominant
Rust
Étoiles
0
Forks
0
Merge moyen
1 h 35 min
PR mergées (30 j)
67

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de aRustyDev/thrust

Toutes les issues de aRustyDev/thrust

Issues similaires

Plus d'issues Rust

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.