Files
homepage/.agents/phases/todo/05_update_projects_section/00_phase.md
T
ducoterra dcd066d953
Build and Push Container / build-and-push (push) Successful in 26s
phase: 01_fix_history_xss
**Phase 01 — final verification pass (all criteria green)**

- Verified M-1 fix in `src/terminal.js`: ArrowUp / ArrowDown(`>0`) / ArrowDown-else now route through `updateDisplay()` (`textContent`); no `innerHTML` sink touches `cmdLine`/`commandHistory`.
- `grep -n innerHTML src/terminal.js` → 12 hits, all allowed (static prompt literals, `clear`/prank wipes, `outLine.innerHTML = output` gated on the static canned `neofetch` string). **C1 ✓**
- XSS regression test at `tests/e2e/02-terminal.spec.js:156` present + passing; re-proved it is a real guard: re-injected the old `innerHTML` recall into `dist/terminal.*.js` → test failed (`#xss-marker` received 1); rebuild → byte-identical to `src/`. **C2 ✓**
- `./build.sh` → `dist/` OK; `npm test` → **45 passed (0 failed)**; `bash .agents/validate.sh` → **exit 0** (suite + repo-hygiene gates). **C3 ✓**
- Branch coverage of modified code: all 3 recall arms asserted (ArrowUp ×2 specs, ArrowDown `>0` in the existing history spec, ArrowDown-else → empty prompt in the new spec) → >90% gate met; no JS coverage/lint toolchain exists in the locked stack, so lint = `node --check src/*.js tests/e2e/*.js playwright.config.js` + `bash -n build.sh .agents/validate.sh` — clean.
- C4 ✓ terminal/vim/achievements/menu specs all green; only the three recall branches changed.
- Docs (step 6, full README/AGENTS review): README — run section now states the image already contains the built `dist/` (mount `dist/`, never `src/`); new “Serving & configuration” section for `nginx.conf`, incl. **empirically measured** (built image on 127.0.0.1:8124) that `/`, `/index.html` and hashed assets currently return *only* cache headers — the `add_header` non-merge gap = finding M-4/Phase 03; TLS/HSTS-at-edge rule; Quadlet section fixed (unit is not in this repo; Quadlet generates `homepage.service`, so `… start homepage.service`, and `systemctl enable` is a no-op for transient Quadlet units → `[Install]` + `daemon-reload` + linger); Development gained the Node 20+ floor, `npx playwright install chromium`, and `.agents/validate.sh`. AGENTS.md — added the validate.sh gate, flagged `./scripts/check-headers.sh` as not yet in the repo (Phase 03), and scoped the M-1 rule with the allowed-`innerHTML` list.
- Notable: `.agents/PLAN.md` still says “44 tests” (3 places) and its §7 roadmap omits phases 04/05 — left untouched per the no-PLAN-edit rule; flag for the next PLAN review. No live-infra touched (temp podman image built/removed for the header measurement only).
- Next pending phase: `02_simulate_fetch_commands`.
2026-10-22 22:45:40 -04:00

3.6 KiB
Raw Blame History

Phase 05 — Update Featured Projects (Brain of Reese, ServWaf, Local AI Stack)

Story: n/a Context: src/index.html #projects section (6 project-cards), ~/Projects/Personal/brain_of_reese/README.md, ~/Projects/StackExpected/ServWall/README.md, ~/Projects/Experimental/gufo/README.md

Objective

Refresh the Featured Projects grid: (a) replace the "Self-Hosted Services" card with a Brain of Reese card (RAG chatbot over homelab docs; pgvector ∪ Postgres full-text hybrid search with RRF fusion; self-hosted LLM; source https://gitea.reeseapps.com/Experimental/brain-of-reese — verified live) and move it to the first slot; (b) replace the "Kubernetes Cluster" card with a ServWaf card (Go network WAF — declarative YAML rules, rate limiting, attack-pattern inspection, opt-in local-AI verdict, TLS/HTTP3 edge — closed source: no source link, user decision) in its place; (c) update the Local AI Stack card to replace Ollama with vLLM, Gufo, and llama.cpp (copy, tech tags, and code preview). Lock with a Playwright regression test.

Dependencies

— (none)

Tasks

  1. 01_brain_of_reese_card.md — Delete the Self-Hosted Services card; insert the Brain of Reese card as the first card in #projects.
  2. 02_servwaf_card.md — Replace the Kubernetes Cluster card with the ServWaf card (description only, no source link).
  3. 03_update_local_ai_stack.md — Update the Local AI Stack card: replace Ollama with vLLM/Gufo/llama.cpp in the copy, tech tags, and code preview.
  4. 04_projects_regression_test.md — Add a Playwright test locking card count, order, the updated Local AI Stack tags, and the absence of the two removed card titles.

Testing & Quality

  • Unit/integration: no JS logic changes in this phase — src/index.html content only. The quality gate is the E2E regression test (task 4) plus the full suite.
  • Coverage: >90% on new/modified code — vacuously satisfied (no JS/CSS/TS code is modified); the E2E suite is the binding gate.
  • E2E: full Playwright suite (npm test) green.
  • The phase is "Complete" only when the entire project test suite passes 100% (every test in the project, not just this phase's — pre-existing failures included) and achieves >90% code coverage on new/modified code.

Documentation & Consistency

  • The final pass reviews README.md and AGENTS.md in full against the project as it stands after this phase — fixing every inconsistency found, including pre-existing ones not caused by this phase.
  • Tasks update README.md/AGENTS.md immediately when their own changes are user-visible (setup, commands, configuration, features, conventions).

Completion Criteria

  • grep -c "project-card fade-in" src/index.html returns 6, and the same holds in dist/index.html
  • first project-card in #projects (in dist/index.html) is "Brain of Reese" and its card links to https://gitea.reeseapps.com/Experimental/brain-of-reese
  • grep -c "Self-Hosted Services\|Kubernetes Cluster" src/index.html returns 0 (project-card titles removed; the words may still appear in the out-of-scope About/Skills sections — e.g. "Kubernetes" skill tag)
  • the Local AI Stack card (in dist/index.html) contains vLLM, Gufo, and llama.cpp and no "Ollama"
  • new regression test present in tests/e2e/01-page.spec.js and passing
  • ./build.sh && npm test fully green (45+ tests)
  • no change to the Skills section, About section, or any other section outside #projects
  • README.md and AGENTS.md are accurate and consistent with the whole project (verified in the final pass)