- sitemap.xml.js now includes services, projects (+ DB-driven project pages),
resume, changelog, faq (was blog-only) — clears 12 QA sitemap warnings
- runQa a11y check treats a bare/empty alt as present (valid decorative image),
fixing a false positive on the blog cover
- runner: QA_HEARTBEAT_MIN (default 60) in-process timer runs a scheduled QA
pass; one pulse ~90s after boot. Triage (LLM) skipped on clean scheduled runs
to save tokens; only manual runs or runs with errors get a written summary.
- qa-finish.php prunes to the 50 most recent runs.
- systemd unit exposes QA_HEARTBEAT_MIN for tuning.
- migration 012: cja_changelog.actor column
- seed-changelog: optional 5th 'by' element (defaults to Carlos Arias);
display shows 'Added · time · by <actor>'
- changelog skill documents the actor field + attribution logic (agents name
themselves, human/CLI edits are Carlos Arias)
- Web Designer prompt now logs each change to the changelog via the skill,
attributed to 'Website Designer Agent'; runner reseeds cja_changelog when the
seed file changed (the agent has no shell)
- /admin/projects list + /admin/projects/edit gallery editor (AdminLayout chrome,
session-guarded). Upload/replace images per slot, captions, add/remove,
Instagram reel URL. Save -> cja_projects -> rebuild -> live.
- adminprojects API (list/get/save); media path validation (local paths only).
- runner /rebuild endpoint: build public/ + commit after structured edits.
- Ownership: app/ + public/ now owned by carlos-arias-agent:caweb so the agent
can rebuild its own output; www serves via the caweb group. Documented in
SETUP.md — never build as root.
Verified end to end: upload image -> save to gallery -> rebuild -> image live on
the project page and served.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DoFYZY9gkGPNDqZ7NuEa9a
Records the operational setup (agents/console/SETUP.md). Server-side, not in git:
- confined carlos-arias-agent user (nologin, no sudo) runs headless Claude
- claude relocated to /usr/local/bin (root's install was unreachable)
- caweb shared group: agent edits+builds, www serves, no chown-to-www needed
- valid setup-token stored in agents/.env (git-ignored)
Verified: agent reads repo, writes source, runs isolated preview build, output
served by nginx. Full edit->preview->serve loop works end to end.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DoFYZY9gkGPNDqZ7NuEa9a
Establishes the deploy baseline on main so the admin agent's publish/rollback
has a clean starting point. Everything built to date: sumi-e brand system,
homepage, projects (DB-driven case studies), resume, about, services +
website-design detail, contact form + DB, changelog, favicon + share card.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DoFYZY9gkGPNDqZ7NuEa9a