phase: 05_update_projects_section
Build and Push Container / build-and-push (push) Successful in 16s
Build and Push Container / build-and-push (push) Successful in 16s
**Phase 05 final pass — all 4 tasks already complete; verified phase-level criteria + docs. Repo 100% green.** - Verified: 6 `project-card fade-in` cards; order Brain of Reese → Reverse Proxy → Dynamic DNS → Local AI Stack → Deployment Automation → ServWaf; `src/index.html` diff hunks (lines 293–538) all inside `#projects` (286–542). - `./build.sh` → `Build complete: dist/` (exit 0); `npm test` → **48 passed, 0 failed**; `bash .agents/validate.sh` → **exit 0** (48 E2E + `HEADER CHECK PASSED` on `/`, `/index.html`, hashed CSS via podman + repo-hygiene gates). No linter exists in this repo (no `lint` script/eslint config). Coverage: no JS/CSS touched — vacuous per phase spec; E2E is the binding gate. - Completion criteria: card count 6 in `src/` **and** `dist/` ✅ · first card "Brain of Reese" with `…/Experimental/brain-of-reese` href in `dist/index.html` ✅ · `grep -c "Self-Hosted Services\|Kubernetes Cluster" src/index.html` = **0** ✅ · AI card has vLLM/Gufo/llama.cpp + LocalAI/LiteLLM/Langfuse, no "Ollama" ✅ · regression test present in `tests/e2e/01-page.spec.js` and passing ✅ · `./build.sh && npm test` green (48 ≥ 45) ✅ · no edits outside `#projects` ✅ · README/AGENTS consistent ✅. - Docs: README **updated** (new paragraph stating what the E2E suite covers, incl. the six featured cards, so future content edits update the matching test). AGENTS.md **updated** (convention: the `#projects` grid is test-locked by `01-page.spec.js`). All other README claims re-checked against reality (Dockerfile builds `dist/` internally, `listen 8080`, snippet `include`s, `check-headers.sh` port/paths/output, `--bind 0.0.0.0` config, Node ≥20 engine floor, CI `main`+tag publishing) — consistent. - Notable: `.agents/validate.sh` is still **untracked** though AGENTS.md/README reference it — harness should `git add` it (I ran no git index commands). `.agents/PLAN.md` §4/§5 still say "44 tests" (suite is 48 since Phases 04/05); PLAN.md is off-limits, so this drift needs an explicit user-approved edit. No live-infrastructure touched. - Next pending phase: none in `.agents/phases/todo/` (05 was last). Remaining unphased audit items (L-3 CSP `unsafe-inline`, L-5 SSH-key labelling, L-7 CI pinning, L-8 build.sh CI check) would need new phases via `phase-authoring`.
This commit is contained in:
@@ -46,6 +46,35 @@ test.describe('Page structure', () => {
|
||||
await expect(nimbisManager.locator('.timeline-date')).toHaveText('Jan 2022 – Apr 2026');
|
||||
});
|
||||
|
||||
test('featured projects show the six updated cards in order', async ({ page }) => {
|
||||
const cards = page.locator('#projects .project-card');
|
||||
await expect(cards).toHaveCount(6);
|
||||
const titles = await cards.locator('.project-info h3').allTextContents();
|
||||
expect(titles).toEqual([
|
||||
'Brain of Reese',
|
||||
'Reverse Proxy Infrastructure',
|
||||
'Dynamic DNS Service',
|
||||
'Local AI Stack',
|
||||
'Deployment Automation',
|
||||
'ServWaf',
|
||||
]);
|
||||
// Brain of Reese leads, with its source link
|
||||
const brain = cards.first();
|
||||
await expect(brain.locator('.project-tech span')).toHaveCount(4);
|
||||
await expect(brain).toHaveText(/RAG chatbot/i);
|
||||
await expect(brain.locator('a[href="https://gitea.reeseapps.com/Experimental/brain-of-reese"]')).toBeAttached();
|
||||
// Local AI Stack: Ollama replaced by vLLM, Gufo, llama.cpp
|
||||
const ai = cards.nth(3);
|
||||
await expect(ai.locator('.project-tech span')).toHaveText(['vLLM', 'Gufo', 'llama.cpp', 'LocalAI', 'LiteLLM', 'Langfuse']);
|
||||
await expect(ai).not.toContainText('Ollama');
|
||||
// ServWaf is closed source — description only, no source link
|
||||
await expect(cards.last()).toHaveText(/Web Application Firewall/i);
|
||||
await expect(cards.last().locator('.project-links')).not.toBeAttached();
|
||||
// removed cards are gone from the grid
|
||||
expect(titles).not.toContain('Self-Hosted Services');
|
||||
expect(titles).not.toContain('Kubernetes Cluster');
|
||||
});
|
||||
|
||||
test('profile image loads', async ({ page }) => {
|
||||
const img = page.locator('#about img');
|
||||
await expect(img).toBeVisible();
|
||||
|
||||
Reference in New Issue
Block a user