Commit Graph

23 Commits

Author SHA1 Message Date
Marcos Paulo 61de2f6270 fix: unify typography and review interactions
verify-and-publish / gate (push) Successful in 5m35s
verify-and-publish / publish (push) Has been skipped
2026-09-06 16:34:39 +00:00
Marcos Paulo ef5e8e8b42 fix: restore full-guide font scale
verify-and-publish / gate (push) Successful in 9m16s
verify-and-publish / publish (push) Has been skipped
2026-09-06 09:38:07 +00:00
Marcos Paulo 9015e7bd1d chore: take vote-service out of the repository root
verify-and-publish / gate (push) Successful in 14m4s
verify-and-publish / publish (push) Has been skipped
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
Marcos Paulo 580293867d refactor: retire the hand-written site
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>
2026-09-06 08:30:27 +00:00
Marcos Paulo f53159f0b4 test: point the review-desk assertions at what the build emits
Two of task 19's re-pointed assertions were checking the built page for
tokens only the legacy page has, and both were hidden behind the
full-guide snapshot failure because verify.mjs stops at the first throw.

- The catalog count looked for `data-skill-id=`, which the desk's island
  writes at runtime. Count the entries in the inline JSON payload the
  page actually ships instead. Still 24.
- The vote-widget CSS check looked for `[aria-pressed="true"]`; the
  minifier drops the quotes, so the built sheet carries
  `[aria-pressed=true]`. Match either form.

Also re-baselines the full-guide rendered-text snapshot. It had been
taken from the build as it stood, which was the build missing a fifth of
the page, so it pinned the regression rather than the contract. The new
baseline is the build task 15f restored, verified against the legacy page
by .agents/scripts/rendered-text-diff.mjs: en 432/432 and pt 431/431,
missing 0, extra 0, order clean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-06 00:40:01 +00:00
Marcos Paulo 8c7ca2aded test: restore Astro verification contracts
Reinstate all 42 legacy facts as output or authoritative-source contracts, retain output snapshots, and set the 84-assertion floor. Extend the audit count without changing site content or components.
2026-09-05 23:41:23 +00:00
Marcos Paulo d15c301fdb test: repoint verification at Astro output
Verify rendered routes, translations, CSS dependencies, variables, and built CSS values. Keep the original assertion count; do not alter site components or fixtures.
2026-09-05 23:24:09 +00:00
Marcos Paulo 054393f7af feat(15d): complete localization of full-guide page to PT 2026-09-05 22:30:50 +00:00
Marcos Paulo e2bcfff5ab feat: add reader vote widget and vote-service
The skills-review desk is static, so "which draft would you ship?" needs a
stateful counterpart. vote-service is a small Go API on its own pod backed by
a JSON file on a ReadWriteOnce PVC, with one active vote per skill per source
IP as the anti-abuse rule and CORS (ALLOWED_ORIGIN) as the caller boundary.

Deployment notes that differ from the obvious path, all confirmed against the
live cluster: the image is side-loaded with `ctr image import` plus
`imagePullPolicy: Never` because kubelet has no credentials for the Nexus ref;
the pod is pinned to `kubernets` because the hostpath PV takes a nodeAffinity
for whichever node first binds it; and public exposure is Caddy on the VPS,
not the cloudflared tunnel.

The ingress controller runs with `use-forwarded-headers` off, so nginx
overwrites X-Forwarded-For with its own peer — every visitor would collapse
into one voter and each skill would cap at one vote overall. Caddy stamps the
true remote address into X-Client-IP, which nginx forwards untouched, and
clientIP() reads that first. Scoped to this app rather than flipping the
global flag, which would change client-IP handling for every other ingress.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 23:49:55 +00:00
Marcos Silva d12d301a1a feat: review semantic diff submission 2026-09-04 14:07:26 -03:00
Marcos Silva 9557957698 feat: expand skills review navigation and catalog 2026-09-04 13:28:06 -03:00
Marcos Silva 355a0b5600 feat: add skill preview search and diff 2026-09-04 09:45:14 -03:00
Marcos Silva 76d83c9cf9 feat: review Gustavo and Marcos submitted skills 2026-09-04 09:11:53 -03:00
Marcos Paulo 6ccc692759 fix: redact operational skill review sources 2026-09-04 04:37:04 +00:00
Marcos Paulo aa85864868 feat: make route map the interactive landing page 2026-09-04 04:18:15 +00:00
Marcos Paulo 94f3491d7a feat: organize guide into focused chapters 2026-09-04 03:52:36 +00:00
Marcos Silva 82fff29571 feat: add submitted skills review desk 2026-09-04 00:34:53 -03:00
Marcos Paulo 47144e9206 feat(deck): source links for both labs, plus unslop pass and verify tune
- Add 'Source on Gitea' link next to every 'Open the X lab' link,
  pointing to https://git.marcospaulo.dev.br/netcracker/ai-for-dummies/...
- Same download links added to both SilverBullet guides (Preview +
  Source on Gitea) under Path A and Path B.
- Tighten standalone verify rule: only block external <script src> and
  <link rel=stylesheet href>. Plain <a href=https://...> hyperlinks are
  not runtime dependencies.
- Unslop pass across all deck text, SilverBullet EN/PT, hands-on/rules
  header/label/README: kill triplets, dramatic single-word sentences,
  'matrix below / looks good / cuts the opposite failure' rhetoric.
  Header subtitle now reads 'Toggle rules. Same task, different
  coverage.' (was 'different leash').

verify: all six checks pass.
2026-09-02 16:31:54 +00:00
Marcos Paulo 9f879ed276 feat: add model routing and hands-on lab 2026-09-02 14:35:27 +00:00
Marcos Paulo 6c591eac07 feat: add skill creation workflow 2026-09-02 02:23:29 +00:00
Marcos Paulo 0a802004af feat: explain common agent skills 2026-09-02 01:49:35 +00:00
Marcos Paulo 273ea5e259 feat: add interactive agent workflow diagrams 2026-09-02 01:30:12 +00:00
Marcos Paulo 9557cae6b6 feat: add AI For Dummies presentation 2026-09-02 00:33:49 +00:00