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]hasownerandnotelocalized, butpathandcommandare single strings, not localized — they are shell paths.routes[id].scoreis a number, rendered intostyle="--score:N%".workers[id]is{ en: string[], pt: string[] }— a three-element array (span,strong,small), not an object.skillFiles[id]mixesicon/title(unlocalized) withen/ptstrings.providers[id].tiersis[string, string, Localized][].
Read the real app.js for each. Do not infer a shape from a sibling.
Rules that bite here
- Both
enandptare mandatory on every localized field. A missingptmust fail the build. Never make a field optional to clear a validation error — find the real Portuguese string inapp.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.jsoriginal programmatically and report the result — task 15b did this for the prompt bodies and it is the standard here. - Do not delete
interactiveCopyfromapp.js. The legacy page still runs on it until task 20 cuts over, andverify.mjsstill asserts against it. - Do not migrate a page or touch a component. 15d owns that.
- Do not edit
verify.mjs,tokens.css, orastro.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.jsoriginal pnpm run gategreen — the full gate, notverify+audit-uialone- 42 assertions intact