Skip to content

Gap — curated recipe dataset is a workspace package, not app-side ​

A record, not a proposal. Noted while implementing spec 032 (recipe-graph priceless + live station recipes) and deliberately left for a later spec — it changes no behaviour and is orthogonal to the caching work 032 does. Recorded so a future spec starts from evidence instead of memory.

What was observed ​

The curated Mystic-Forge / precursor recipe dataset (the recipes genuinely absent from /v2/recipes — the Gen-1 legendaries, gifts, and Mystic Clover) lives in the workspace package packages/legendary-recipes (@gw2priory/legendary-recipes), consumed through CuratedRecipeService (apps/api/src/static-data/curated-recipe.service.ts).

Grepping for the package outside its own directory (spec 032, discovery) shows it is imported only by apps/api — curated-recipe.service.ts, recipe-index.service.ts (type-only), a test, and apps/api's tsconfig.json / package.json. Nothing in apps/web or any other package uses it. It is single-consumer.

Why this is a gap ​

The gw2.app-alignment epic's Spec-2 description says to keep the curated dataset "app-side and single-consumer (not a workspace package, no duplicated data across boundaries)". Two of those three hold today (single-consumer ✓, no duplicated data ✓ — after 032 deletes the committed station index, the curated set is the only recipe data committed), but the dataset is still a workspace package, not app-side.

This also matches the standing project preference that single-consumer data live in apps/api rather than a packages/* package (see the project's memory / docs/architecture/monorepo.md on workspace:* sharing being "when sharing is real, not speculative").

Why 032 did not fix it ​

Moving the package into apps/api is churn orthogonal to cacheability: it would relocate the data + types

  • schema + guard test, rewire tsconfig/package.json imports, and touch the monorepo's package-structure expectations — risk added to a spec whose goal is caching. Decided out of scope in 032's brainstorming (the human chose "keep the package, park the move").

For a future spec ​

Relocate @gw2priory/legendary-recipes into apps/api/src/static-data/ (app-side, single-consumer), delete the workspace package, and update the two importing services + tsconfig. Behaviour-preserving; verify by the existing curated-recipe + recipe-graph tests staying green.