1. Day 16 Build

    Day 16: Factory Reviews in the Approvals Queue

    Gateway ingests factory-agents high/critical review webhooks, merges them with Athena OPAR approvals for Console, and documents ADR 0009 F2. Partial progress on the deferred typed-approvals Build — not Property 8, not persistence.

  2. Day 15 Document

    Day 15: Changelog on acaldwell.dev

    Document day: Days 12–14 changelog entries ship to production on Cloudflare Workers. The Day 15 Use brief (Console alerts ↔ nexus-tui) waits on a real SOC session.

  3. Day 14 Build

    Day 14: Triage That Persists — Build Prep for the Use Day

    ai-inference gets SQLite persistence, Suricata/Wazuh/Athena scoring, and a Gateway camelCase contract. Thin lab k8s overlay pins the image. The Day 14 Use brief — Athena traffic → real alerts → triage in Console — is still open.

  4. Day 13 Document

    Day 13: Audit — Challenge vs core-nexus

    Catch-up Document day: honest map of Days 1–100 against the repo. Phase 1 stops at Day 11 (+32 early). Approvals and athena SSE Builds deferred. Architecture overclaims called out.

  5. Day 12 Document

    Day 12: Where core-nexus Actually Is

    Catch-up Document day: the platform spine moved under us — R2 overlay, Vault in nexus-hashistack, SOC k8s Gateway/Console/Wazuh, gated Day 9 bridge. Approvals and real agent SSE are still deferred Builds.

  6. Day 11 Build

    Day 11: Alerts That Speak Console

    Gateway GET /api/v1/alerts now maps Wazuh documents to SOCAlert camelCase, filters by severity/source/time, and hardens triage 404/504. Properties 5–7 covered.

  7. Day 10 Document

    Day 10: My SOC Console Watching an AI Agent Hack

    Share day: the Nexus Console Agent Feed finally shows Athena probing Juice Shop live — after a Use-day bridge admitted that host OPAR and the Gateway were not talking.

  8. Day 9 Use

    Day 9: Watching the Agent From the Console

    Use day: Console Agent Feed could not see host OPAR until a GT→SSE bridge filled the missing athena-agents HTTP surface. Juice Shop run streamed eight events through the Gateway.

  9. Day 8 Build

    Day 8: A Settings Page That Does Not Leak the Token

    Console Settings now shows runtime config, JWT claims without the raw token, and Gateway-probed service status. Property 17 keeps the bearer string off the page.

  10. Day 7 Build

    Day 7: CORS and the Path to MinIO

    Preflight now returns 204. Console points at gateway :3100. Presigned MinIO URLs use a browser-reachable host. Five tests cover CORS and the artifact download path.

  11. Day 6 Build

    Day 6: Live Badges

    Sidebar badges now poll the Gateway. Alerts shows unacknowledged critical+high. Approvals shows pending. The wiring is real. The alert count will stay at zero until Wazuh payloads look like SOCAlert.

  12. Day 5 Document

    Day 5: First Skill from the Run

    Documenting the Juice Shop OPAR run and encoding the allowlist identity bug as a reusable skill. Plan works. Act is still a stub. Ground-truth is not traffic.

  13. Day 4 Use

    Day 4: Juice Shop

    Catching up three calendar days. First OPAR run against the target the challenge actually named. The agent plans a sensible web chain. The Act phase is still a stub.

  14. Day 4 Use

    Day 4: The Agent Thinks

    First live OPAR run with LLM planning. The agent selects tools, assigns MITRE technique IDs, and explains its reasoning. Three actions against a real target.

  15. Day 3 Build

    Day 3: Ahead of Schedule

    Days 1-3 collapsed into one session. The entrypoint, orchestrator CLI, and Dockerfile stages were all built on Day 1. Day 3 is a retrospective on velocity and what it means for the rest of the challenge.

  16. Day 2 Build

    Day 2: Setting the Stage

    Adding a target, verifying the LLM backend, and getting everything aligned so the OPAR agent can run live tomorrow. Infrastructure day.

  17. Day 1 Build

    Day 1: Wiring the Agent

    Making ./scripts/run-athena-profile.sh agent juice-shop actually work. Multi-stage Docker builds, an entrypoint that validates before it executes, and a Python CLI that bootstraps the OPAR loop.