docs: add .agents workspace and the Astro refactor plan

Adds the agent-facing workspace and a 20-task plan for migrating the site
to Astro. Nothing here implements the refactor; these are briefs, rules and
templates that the task agents read.

- .agents/ holds context, rules, checklists, skills, specialist agents,
  component/page/config templates and gate scripts. It is vendor-neutral so
  MiniMax, Gemini and Codex can all read it; CLAUDE.md just points at
  AGENTS.md.
- .husky/ plus .lintstagedrc.json wire the three gate tiers. gate.sh locks on
  the shared git-common-dir so parallel worktrees serialise, and guards the
  assertion count in scripts/verify.mjs against a coverage drop.
- plans/astro-refactor/ carries the phase graph, per-task briefs and the
  model-routing recommendation.

These files must be tracked before fanning out: a worktree only checks out
tracked files, so an untracked plan is invisible to every agent working in one.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Marcos Paulo
2026-09-05 01:18:27 +00:00
parent aa85c1d0b7
commit aae4d42229
79 changed files with 3805 additions and 0 deletions
@@ -0,0 +1,74 @@
---
// Static block template — the default. Ships zero JavaScript.
// Copy to src/components/blocks/<Name>.astro and replace everything marked TODO.
//
// Before using this, confirm the block earns extraction: it appears three times,
// or it has a name a person says out loud. See .agents/rules/componentization.md
interface Props {
/** TODO: describe each prop. Required by default; optional needs a reason. */
eyebrow: string;
title: string;
body: string;
href?: string;
}
const { eyebrow, title, body, href } = Astro.props;
---
<article class="block">
<span class="eyebrow">{eyebrow}</span>
<h2>{title}</h2>
<p>{body}</p>
{href && <a href={href}>Open </a>}
<slot />
</article>
<style>
/* Tokens only. No raw hex, no px font sizes, no ad-hoc breakpoints.
.agents/scripts/check-tokens.mjs enforces this. */
.block {
display: grid;
gap: 10px;
padding: 22px;
background: var(--paper);
color: var(--ink);
}
/* The house eyebrow: uppercase monospace, wide tracking. One class, not
fifteen repetitions. */
.eyebrow {
color: var(--accent);
font: var(--font-eyebrow);
letter-spacing: .1em;
text-transform: uppercase;
}
h2 {
margin: 0;
font-size: var(--step-5);
line-height: 1.05;
letter-spacing: -.06em; /* tight display tracking is a signature of this design */
}
p {
margin: 0;
color: var(--muted);
line-height: 1.65;
}
a {
color: var(--blue);
font-weight: 700;
text-decoration: none;
}
a:focus-visible {
outline: 3px solid var(--red);
outline-offset: 2px;
}
@media (max-width: 800px) {
.block { padding: 18px; }
}
</style>