- qa-autofix.php queues Web Designer tasks for safe findings (alt, internal
links) with 6h dedup; runQaFlow runs it after each pass and kicks the queue
(QA_AUTOFIX env, on by default)
- adminqa fix() accepts optional human instructions; /admin/qa adds an
instructions input per finding for the judgment calls
- 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 login page (public, noindex): password form + signed-in panel that
activates the in-page console. Verified in-browser: login -> panel -> the
astroagent handle appears on other pages.
- Secret-link login: visit /admin/<token> to sign in without a password.
adminauth token() validates a bcrypt-hashed token, sets the session, 302s to
/admin. nginx routes the token path to PHP. set-admin-token.php generates it.
- Password login kept as a fallback.
Verified: token link -> session -> console access; bad token -> /admin?e=1.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DoFYZY9gkGPNDqZ7NuEa9a
- cja_admin + cja_admin_log tables (dedicated single-admin tier + audit trail)
- AdminAuth controller: /api/adminauth login/logout/me, session-based,
rate-limited, every attempt logged
- set-admin-password CLI (bcrypt, run manually so the password never enters
an agent context)
- requireAdmin() guard for future privileged console endpoints
- agent env scaffold (git-ignored)
Foundation only — no agent runner or features yet. Preview/publish, media,
and the dashboard come in phases 1-3 per agents/console/PLAN.md.
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