Files
ai-for-dummies/plans/astro-refactor/task-05b-guide-interactive-data.md
T

3.6 KiB

Task 05b — The interactiveCopy data

Agent: content-i18n-migrator · Model: MiniMax-M3 Depends on: 05 · Blocks: 15d Worktree: .agents/scripts/worktree.sh start 05b guide-interactive-data

Why this task exists

It is not in the original plan, and it is the second hole of exactly this kind (see task 04b, which filled the empty chapters collection).

Task 05 moved phases, providers, efforts, skillSources, handsOnPrompts and skillInstallPrompts out of app.js. It did not move const interactiveCopy at app.js:160, which holds six more datasets:

Key Feeds Rendered by
workers #worker-detail renderWorker
trees #tree-detail renderTree
routes #route-detail renderRoute
skillFiles #skill-detail renderSkillFile
skillWorkflow #builder-detail renderSkillWorkflow
commonSkills #common-skill-detail renderCommonSkill

Task 15d stopped before writing a line because of this — six of the nine groups GuideSelector drives have no data to read. It was right to stop.

Scope

src/content/config.ts (new collections only) and the new src/content/*/ JSON. You own config.ts — you are the only agent who may edit it. Do not change an existing collection's schema.

The shapes are already written down

src/components/islands/GuideSelector.astro declares a GuideSelectorData interface at the top of the file. It is the contract 15d will feed. Match it — if you think a field there is wrong, say so in your report rather than diverging silently.

Note the non-obvious ones, verified against app.js:

  • trees[id] has owner and note localized, but path and command are single strings, not localized — they are shell paths.
  • routes[id].score is a number, rendered into style="--score:N%".
  • workers[id] is { en: string[], pt: string[] } — a three-element array (span, strong, small), not an object.
  • skillFiles[id] mixes icon/title (unlocalized) with en/pt strings.
  • providers[id].tiers is [string, string, Localized][].

Read the real app.js for each. Do not infer a shape from a sibling.

Rules that bite here

  • Both en and pt are mandatory on every localized field. A missing pt must fail the build. Never make a field optional to clear a validation error — find the real Portuguese string in app.js.
  • Copy strings verbatim. This is a move, not a rewrite. No fixed typos, no improved phrasing, nothing translated that is already translated. Several strings contain inline HTML; keep it exactly as-is.
  • Prove it. Diff each migrated string against the app.js original programmatically and report the result — task 15b did this for the prompt bodies and it is the standard here.
  • Do not delete interactiveCopy from app.js. The legacy page still runs on it until task 20 cuts over, and verify.mjs still asserts against it.
  • Do not migrate a page or touch a component. 15d owns that.
  • Do not edit verify.mjs, tokens.css, or astro.config.mjs.

Done when

  • Six collections defined and exported from config.ts
  • Entries for every id in interactiveCopy, both locales
  • Shapes match GuideSelectorData, or the divergence is argued in the report
  • Every string proven byte-identical to its app.js original
  • pnpm run gate green — the full gate, not verify + audit-ui alone
  • 42 assertions intact