Files
ai-for-dummies/AGENTS.md
T
Marcos Paulo 9015e7bd1d
verify-and-publish / gate (push) Successful in 14m4s
verify-and-publish / publish (push) Has been skipped
chore: take vote-service out of the repository root
Removes the Go source, Dockerfile, go.mod, and Kubernetes manifests. The
deployed service is untouched and the review desk still calls it over
window.SKILLS_REVIEW_VOTE_API; only the source leaves.

The runbook does not leave. vote-service/README.md moves to
docs/vote-service.md, because it carries the parts that are hard to
rediscover: why the ingress overwrites X-Forwarded-For and Caddy stamps
X-Client-IP instead, why the image is side-loaded into containerd rather
than pulled, and why the PVC pins the Deployment to one node.

This drops verify.mjs from 84 assertions to 83. The removed one read
vote-service/main.go for X-Forwarded-For and 'one active vote per skill'
-- the review desk's only anti-abuse control -- and there is no file left
to read. It is the first assertion this repository has ever lost.

Rather than lower the gate's floor and leave a bare number behind,
gate.sh now subtracts the number of entries in
.agents/context/assertion-removals.md from the baseline. A removal costs
a written reason in a tracked file, in the same commit, as a visible
diff. Tested at 82 assertions: still refused.

Also drops the 22 MB of PNG baselines under .agents/snapshots/before/ and
before-reduced-motion/. They pictured the hand-written site, which no
longer exists; visual-regression.mjs has no compare mode to diff them
against; and they are recoverable from d88d8b8.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-06 08:59:45 +00:00

91 lines
4.9 KiB
Markdown

# 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`](.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/`](plans/astro-refactor/README.md) is
complete; the hand-written pages it replaced are gone. What remains unmigrated
is the editorial CSS and the review-desk modules under `legacy/`, still
imported by the pages that need them.
- **Languages**: English and Brazilian Portuguese, toggled client-side
- **Companion service**: a Go + Kubernetes vote API, reached over
`window.SKILLS_REVIEW_VOTE_API`. Its source is no longer in this repository
## Essential commands
```bash
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`](.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`](docs/operations-guide.md); read
[`.agents/context/publishing.md`](.agents/context/publishing.md) before changing
it.
## Never touch
- `public/hands-on/starter/` and `public/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 verbatim
- `skill-reviews/improved/` — generated; edit `src/content/reviews/*.md` instead
- `dist/`, `node_modules/` — build output, never committed
- `pnpm-lock.yaml`**committed, but never hand-edited.** Change it only as a
side effect of `pnpm install`. Every worktree spins up with
`pnpm install --frozen-lockfile`, which fails outright without it.
- This project is **pnpm-only** (`packageManager` in `package.json` pins the
version). Never run `npm install` or `bun install` here — the gate rejects a
`package-lock.json`, `yarn.lock`, or `bun.lock` outright. pnpm settings live
in `pnpm-workspace.yaml`, **not** in a `pnpm` field in `package.json`; pnpm 11
ignores that field silently.
## Rules
Binding. Read the one that covers what you are about to do.
| Rule | When |
| ---------------------------------------------------------- | ------------------------------------ |
| [`astro.md`](.agents/rules/astro.md) | any `.astro` file |
| [`theming.md`](.agents/rules/theming.md) | any colour, font, or spacing value |
| [`componentization.md`](.agents/rules/componentization.md) | creating or splitting a component |
| [`animation.md`](.agents/rules/animation.md) | any motion, transition, or transform |
| [`accessibility.md`](.agents/rules/accessibility.md) | any interactive element |
| [`content-i18n.md`](.agents/rules/content-i18n.md) | any user-visible string |
| [`code-style.md`](.agents/rules/code-style.md) | always |
| [`git-worktrees.md`](.agents/rules/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`](.agents/context/design-system.md) before
touching any CSS.