Commit Graph
32 Commits
Author SHA1 Message Date
ducoterra dcd066d953 phase: 01_fix_history_xss
Build and Push Container / build-and-push (push) Successful in 26s
**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
ducoterra a2f331e526 Add phased-execution planning structure
Build and Push Container / build-and-push (push) Successful in 11s
Introduce .agents/ (PLAN.md with locked architectural anchors,
phase roadmap under phases/todo/) and AGENTS.md rules for
agents working in the repo. Queues the pending phases: fix
history XSS, simulate fetch commands, and nginx security
headers.
2026-09-18 17:23:41 -04:00
ducoterra 010758b3e9 Move server rack inline styles to CSS classes
Replace the per-element inline positioning in createServerRack()
with rack-*-pos utility classes in style.css. Also stop drawing
a random switch face brand from a list (only Framework ships)
and simplify the hero-click terminal toggle to use the shared
expand/collapse helpers.
2026-09-18 17:23:37 -04:00
ducoterra 3898dc3c5e Add Playwright E2E suite against the built dist/
Pin @playwright/test 1.62.0 (matches the cached chromium
revision) and serve dist/ via python3 http.server, so the
deployed artifact is what gets tested. Covers page load,
terminal commands, vim mode, achievements, and the nav menu.
Ignore node_modules, test-results, playwright-report, and the
phased-execution runtime scratch (.agents/phase-sessions,
pipeline.log).
2026-09-18 17:23:30 -04:00
ducoterra 7f4f0b4ef1 Split terminal into flat command, achievement, and vim modules
Move canned command data (terminal-commands.js), the achievement
system (terminal-achievements.js), and the vim simulator
(terminal-vim.js) out of terminal.js, which keeps the core
terminal loop. Load order is fixed in index.html with the
modules before terminal.js. Also share expand/collapse helpers
with the hero click handler and drop the real fetch I/O in
favour of simulated curl/wget output.
2026-09-18 17:23:25 -04:00
ducoterra 2dcf44bc0b Update profile picture
Build and Push Container / build-and-push (push) Successful in 1m24s
2026-06-05 14:19:54 -04:00
ducoterra d95f6a1cd6 update favicon
Build and Push Container / build-and-push (push) Successful in 28s
2026-06-03 10:17:52 -04:00
ducoterra 136cf16cfd add favicon
Build and Push Container / build-and-push (push) Failing after 34s
2026-06-02 21:06:17 -04:00
ducoterra 2c1beda59f vim working
Build and Push Container / build-and-push (push) Successful in 1m1s
2026-05-31 14:45:49 -04:00
ducoterra 6cc2c8db3a add curl, wget, apt, and dnf
Build and Push Container / build-and-push (push) Successful in 18s
2026-05-31 00:28:21 -04:00
ducoterra 5f0cfbd4cb fix the help command 2026-05-31 00:18:39 -04:00
ducoterra d59d08b7e1 add tab autocomplete and cycling commands
Build and Push Container / build-and-push (push) Successful in 1m11s
2026-05-30 22:47:04 -04:00
ducoterra 13a7306d5b add formatting 2026-05-30 21:32:35 -04:00
ducoterra f34ac3210e I like trains
Build and Push Container / build-and-push (push) Successful in 39s
2026-05-28 21:58:56 -04:00
ducoterra f2246a3386 add actual profile picture
Build and Push Container / build-and-push (push) Successful in 19s
2026-05-28 17:02:01 -04:00
ducoterra 20100800a1 fade in and out terminal on focus
Build and Push Container / build-and-push (push) Successful in 28s
2026-05-28 16:33:56 -04:00
ducoterra 23ed5b510b fix menu fade in and server drive bay overflow
Build and Push Container / build-and-push (push) Successful in 28s
2026-05-28 16:28:46 -04:00
ducoterra 54746f4636 add cache busting
Build and Push Container / build-and-push (push) Successful in 16s
2026-05-28 16:01:42 -04:00
ducoterra 6a30145171 accessibility updates 2026-05-28 15:44:42 -04:00
ducoterra 96034abeea remove redundant css classes
Build and Push Container / build-and-push (push) Successful in 27s
2026-05-28 15:29:41 -04:00
ducoterra ee2f8a34b3 have terminal grow on focus to allow better mobile input
Build and Push Container / build-and-push (push) Successful in 26s
2026-05-28 15:13:08 -04:00
ducoterra 28feb0e50e clean up nginx.conf
Build and Push Container / build-and-push (push) Successful in 21s
2026-05-28 14:03:22 -04:00
ducoterra 02f2b0ef49 don't cache so hard
Build and Push Container / build-and-push (push) Successful in 14s
2026-05-28 13:41:48 -04:00
ducoterra 79c491d7ee add achievements
Build and Push Container / build-and-push (push) Successful in 1m19s
2026-05-28 13:02:10 -04:00
ducoterra 5004b68817 fix mobile keyboard
Build and Push Container / build-and-push (push) Successful in 36s
2026-05-28 11:40:41 -04:00
ducoterra 74edb71167 destructo mode
Build and Push Container / build-and-push (push) Successful in 37s
2026-05-28 10:45:18 -04:00
ducoterra b12029da81 add server background with working terminal
Build and Push Container / build-and-push (push) Successful in 31s
2026-05-28 10:29:02 -04:00
ducoterra 2c6cd1c45b add work experience section
Build and Push Container / build-and-push (push) Successful in 23s
2026-05-28 09:18:58 -04:00
ducoterra f62b530277 add profile picture
Build and Push Container / build-and-push (push) Successful in 40s
2026-05-27 23:03:08 -04:00
ducoterra 44e196d6b0 add gpg keys to website
Build and Push Container / build-and-push (push) Successful in 33s
2026-05-27 22:52:14 -04:00
ducoterra a9c8147296 update gitea link to take you to the homelab project
Build and Push Container / build-and-push (push) Successful in 22s
2026-05-27 22:38:55 -04:00
ducoterra 43bae61c0a init
Build and Push Container / build-and-push (push) Successful in 23s
2026-05-27 21:52:36 -04:00