feat: move app.js guide strings into typed collections

Migrate the bilingual copy in app.js (phases, handsOnPrompts, modelGuide,
skillSources, skillInstallPrompts) into per-collection data files under
src/content/, one folder per collection: phases/, providers/, efforts/,
skillSources/, handsOnPrompts/, skillInstallPrompts/. Strings copied
mechanically; the diff between the canonical extract-strings.mjs over a
flattened baseline of these guide blocks and the same extractor over the
new content directory is empty (56 strings total, 28 en + 28 pt).

efforts, handsOnPrompts, and skillInstallPrompts previously held arrays
of strings joined at runtime with .join('\n'); the new schema stores
them as plain strings, so canonical extract-strings.mjs cannot reach them
in their source shape. Verified byte-identical with /tmp/verify-nested.mjs
and /tmp/verify-install.mjs: every english/portuguese string in source
matches the migrated value, char-for-char.

What I did not do:
- delete the matching literals from app.js — task 15 removes them once
  the page consumes the collection
- touch config.ts — the schema for these collections was set up in task 04
- move catalog.js, submitted-catalog.js, or the interactiveCopy and
  translations blocks — they belong to later tasks (reviews, chapters)
- run an end-to-end smoke test of /full-guide/ against the new collection;
  no consumer page exists yet

Refs plans/astro-refactor/task-05-content-guide.md.
This commit is contained in:
Marcos Paulo
2026-09-05 06:08:26 +00:00
parent f241c5581a
commit febb8914b4
18 changed files with 174 additions and 0 deletions
+13
View File
@@ -0,0 +1,13 @@
{
"id": "review",
"model": { "en": "STRONG MODEL OR HUMAN", "pt": "MODELO FORTE OU HUMANO" },
"title": { "en": "Reconnect result to intent", "pt": "Reconecte o resultado à intenção" },
"copy": {
"en": "Check the diff against the original brief, run the checks, then merge, request changes, or discard.",
"pt": "Compare o diff com o brief original, execute as verificações e então faça merge, peça mudanças ou descarte."
},
"code": {
"en": "diff + checks → review → merge / iterate",
"pt": "diff + verificações → revisar → merge / iterar"
}
}