Deletes the pre-Astro pages, scripts, and stylesheets that the migration replaced, and moves the ones it did not replace out of the way. Deleted (32 files): app.js, responsive.css, landing.css, rules/app.js, rules/styles.css, skills/app.js, the ten route index.html files, and the root hands-on/ copy, which is byte-identical to public/hands-on/ -- the one the build actually ships. Moved to legacy/ (12 files): styles.css, full-guide/audit.css, chapters.css, skills/styles.css, skills-review/styles.css, skills-review/change-lens.css, and the skills-review/app.js module graph. These are not dead. The Astro pages import them and the build fails without them, which the plan had not accounted for. They go to legacy/ rather than src/ because check-tokens.mjs sweeps src, and these files are full of raw hex and unnamed breakpoints: moving one into src/ should mean migrating it to tokens in the same change, not adding a scan exclusion. The prettier, stylelint, and eslint ignore lists that already named these files at their old paths now name legacy/ instead. verify.mjs no longer reads app.js. The 102 Portuguese strings were extracted from its translations.pt object before deletion into .agents/snapshots/full-guide-pt.json -- a legacy capture, not a snapshot of the Astro build, so the assertion still compares against an independent source. The brace-matching helper's assertion is replaced by one that rejects an empty snapshot entry, without which trimming the snapshot would make the presence check pass vacuously. Count stays at 84. audit-ui.mjs reads the ten pages from dist/ and resolves Astro's base-absolute hrefs against it. Before deleting anything, rendered-text-diff was run across all ten routes plus both Portuguese pages: every one at parity, 0 missing and 0 extra. That comparison is not repeatable once the legacy files are gone. computed-style-diff on /full-guide/ stays at 32 differences, so the moves are style-neutral. Docs updated to match: README, AGENTS.md, GATES.md, the architecture context, the operations guide's lab instructions, and the three skills that told you to serve the vanilla site. Publishing is not part of this commit. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
5.0 KiB
AGENTS.md
Entry point for any AI agent or new engineer working in this repository. Read
this file, then follow the links you need. Full map:
.agents/ORCHESTRATOR.md.
What is this project?
"AI For Dummies" — a bilingual (EN/PT-BR) presentation and workshop about working with coding agents: model routing, subagents, git worktrees, skills, rules, and verification. It is published as a static site on a self-hosted Gitea Pages Server, and it doubles as its own teaching artifact: the hands-on labs are dependency-free HTML/CSS/JS that workshop attendees point an agent at.
- Stack: Astro, static output, no runtime dependencies. The migration
recorded in
plans/astro-refactor/is complete; the hand-written pages it replaced are gone. What remains unmigrated is the editorial CSS and the review-desk modules underlegacy/, still imported by the pages that need them. - Languages: English and Brazilian Portuguese, toggled client-side
- Companion service:
vote-service/(Go + Kubernetes) — separate lifecycle, see its own README
Essential commands
pnpm run dev # http://localhost:4321/ai-for-dummies/
pnpm run build # writes dist/ — every check below reads it
bash .agents/scripts/gate.sh # the full gate: check, build, verify, audit, tokens
pnpm run verify # content + interaction contracts (scripts/verify.mjs)
node scripts/audit-ui.mjs # responsive / no-external-dependency audit
node scripts/build-skill-review.mjs # regenerate skill-reviews/improved/ from src/content/reviews/
pnpm run verify is not a formality. It is a set of 84 string-token assertions
that pin the site's real content and interactions, read from the built output.
A refactor that "passes" by deleting assertions has failed. See
.agents/context/verification.md.
Publishing
main is the source of truth. The pages branch is what the Gitea Pages Server
actually serves, and it now carries build output, not a copy of main's
tree. The publish job force-pushes dist/ over it. The full procedure is in
docs/operations-guide.md; read
.agents/context/publishing.md before changing
it.
Never touch
public/hands-on/starter/andpublic/hands-on/rules/— lab fixtures. The exercise is that they are dependency-free vanilla HTML/CSS/JS an attendee can hand to an agent. Componentizing them destroys the lesson. They ship as static assets.submitted-skills/— other people's submitted work, reproduced verbatimskill-reviews/improved/— generated; editsrc/content/reviews/*.mdinsteadvote-service/— separate deploy lifecycle; do not fold into the site builddist/,node_modules/— build output, never committedpnpm-lock.yaml— committed, but never hand-edited. Change it only as a side effect ofpnpm install. Every worktree spins up withpnpm install --frozen-lockfile, which fails outright without it.- This project is pnpm-only (
packageManagerinpackage.jsonpins the version). Never runnpm installorbun installhere — the gate rejects apackage-lock.json,yarn.lock, orbun.lockoutright. pnpm settings live inpnpm-workspace.yaml, not in apnpmfield inpackage.json; pnpm 11 ignores that field silently.
Rules
Binding. Read the one that covers what you are about to do.
| Rule | When |
|---|---|
astro.md |
any .astro file |
theming.md |
any colour, font, or spacing value |
componentization.md |
creating or splitting a component |
animation.md |
any motion, transition, or transform |
accessibility.md |
any interactive element |
content-i18n.md |
any user-visible string |
code-style.md |
always |
git-worktrees.md |
starting or finishing a task |
The one thing to understand first
This site's styling is not a design system today. Three near-duplicate
palettes have drifted apart (--ink exists as #172f42, #122534, and
#173044), and the @font-face rule in styles.css:1 is malformed, so the
intended Manrope/DM Mono typography has never actually rendered. "Maintain the
same styles" therefore needs a deliberate decision, not a copy-paste. Read
.agents/context/design-system.md before
touching any CSS.