test(docker): guard the ← Containers back-link (SP-4) #282

Merged
janpeter merged 4 commits from test/sp4-docker-back-link into main 2026-10-05 10:46:58 +02:00
Owner

SP-4 / PBI-4 — ST-013 (T-38, T-39, T-40).

  • T-38: audit — app/docker/[name]/page.tsx heeft de ← Containers-link al in de header, buiten <ContainerDetail>, consistent met app/systemd/[unit]/page.tsx. Geen codewijziging.
  • T-39: nieuwe source-level regressietest test/docker-detail-back-link.test.ts — faalt als href="/docker"/← Containers verdwijnt of na <ContainerDetail belandt (mutatie lokaal gecontroleerd).
  • T-40: npm run typecheck schoon, npm run build slaagt.

Openstaand: T-41 (handmatige verify in de draaiende app) vereist een ingelogde sessie met werkende ops-agent.

Bekend, los van deze PR: test/scrum4us-deploy-trigger.test.ts faalt lokaal op macOS (geen flock).

🤖 Generated with Claude Code

SP-4 / PBI-4 — ST-013 (T-38, T-39, T-40). - **T-38:** audit — `app/docker/[name]/page.tsx` heeft de `← Containers`-link al in de header, buiten `<ContainerDetail>`, consistent met `app/systemd/[unit]/page.tsx`. Geen codewijziging. - **T-39:** nieuwe source-level regressietest `test/docker-detail-back-link.test.ts` — faalt als `href="/docker"`/`← Containers` verdwijnt of na `<ContainerDetail` belandt (mutatie lokaal gecontroleerd). - **T-40:** `npm run typecheck` schoon, `npm run build` slaagt. Openstaand: T-41 (handmatige verify in de draaiende app) vereist een ingelogde sessie met werkende ops-agent. Bekend, los van deze PR: `test/scrum4us-deploy-trigger.test.ts` faalt lokaal op macOS (geen `flock`). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
test(docker): guard the ← Containers back-link on the detail page
All checks were successful
CI / Root app checks (pull_request) Successful in 6m29s
CI / Ops-agent checks (pull_request) Successful in 24s
CI / Deploy artifact checks (pull_request) Successful in 21s
CI / Docker image build (pull_request) Successful in 3m8s
a54ce9f0b7
A source-level regression test fails if the header link to /docker is
removed or moves into/after <ContainerDetail>, where it would no longer
render in every container state.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
s4m-codex-reviewer requested changes 2026-10-05 09:47:06 +02:00
Dismissed
s4m-codex-reviewer left a comment

REQUEST_CHANGES

  • error (blokkerend) — test/docker-detail-back-link.test.ts:15: de positiecheck borgt alleen dat href="/docker" vóór <ContainerDetail in de bron staat. Een wijziging naar {initialSummary && (<Link href="/docker" …>← Containers</Link>)} op dezelfde headerpositie passeert alle vier assertions, terwijl de link bij een summary-fout verdwijnt. Dit is met de bron op de opgegeven head en dezelfde assertions gereproduceerd. Borg dat de link onvoorwaardelijk in de header staat en controleer met een mutatie dat een summary-conditionele link de test laat falen. De implementatie volgt de voorgeschreven indexcheck uit T-39, maar die check voldoet niet aan het expliciete acceptatiecriterium van ST-013.

Plan gekoppeld via pr_refs; references: T-38, T-39, T-40, T-41, ST-013. Er is niets omitted. ST-013 wordt door de PR als afgerond gepresenteerd, maar de vereiste bescherming tegen de summary-conditie ontbreekt. ST-014/T-41 is volgens de PR expliciet openstaand en is daarom geen blokkerende finding.

De actuele back-link staat correct buiten ContainerDetail en volgt de systemd-detailstructuur. De test past bij de gedocumenteerde keuze voor een source-level Vitest-guard zonder DOM-infrastructuur; er zijn geen runtime- of architectuurwijzigingen en aanvullende productdocumentatie is niet nodig. PR/head zijn via Forgejo geverifieerd. De assertioncontrole is uitgevoerd met Node; de volledige Vitest-suite, typecheck en build zijn in deze review niet uitgevoerd. De PR meldt geslaagde typecheck/build en een bestaande macOS/flock-testfout.

# REQUEST_CHANGES - **error (blokkerend)** — `test/docker-detail-back-link.test.ts:15`: de positiecheck borgt alleen dat `href="/docker"` vóór `<ContainerDetail` in de bron staat. Een wijziging naar `{initialSummary && (<Link href="/docker" …>← Containers</Link>)}` op dezelfde headerpositie passeert alle vier assertions, terwijl de link bij een summary-fout verdwijnt. Dit is met de bron op de opgegeven head en dezelfde assertions gereproduceerd. Borg dat de link onvoorwaardelijk in de header staat en controleer met een mutatie dat een summary-conditionele link de test laat falen. De implementatie volgt de voorgeschreven indexcheck uit T-39, maar die check voldoet niet aan het expliciete acceptatiecriterium van ST-013. Plan gekoppeld via pr_refs; references: T-38, T-39, T-40, T-41, ST-013. Er is niets omitted. ST-013 wordt door de PR als afgerond gepresenteerd, maar de vereiste bescherming tegen de summary-conditie ontbreekt. ST-014/T-41 is volgens de PR expliciet openstaand en is daarom geen blokkerende finding. De actuele back-link staat correct buiten ContainerDetail en volgt de systemd-detailstructuur. De test past bij de gedocumenteerde keuze voor een source-level Vitest-guard zonder DOM-infrastructuur; er zijn geen runtime- of architectuurwijzigingen en aanvullende productdocumentatie is niet nodig. PR/head zijn via Forgejo geverifieerd. De assertioncontrole is uitgevoerd met Node; de volledige Vitest-suite, typecheck en build zijn in deze review niet uitgevoerd. De PR meldt geslaagde typecheck/build en een bestaande macOS/flock-testfout.
test(docker): fail when the back-link becomes conditional
Some checks failed
CI / Ops-agent checks (pull_request) Has been cancelled
CI / Deploy artifact checks (pull_request) Has been cancelled
CI / Docker image build (pull_request) Has been cancelled
CI / Root app checks (pull_request) Has been cancelled
576e753238
The index check alone let {initialSummary && (<Link …>)} pass at the same
header position, hiding the link on a summary error. Assert no JSX
expression wraps the link between the returned root and the link itself.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Author
Owner

Review-fix in 576e753: de test faalt nu ook als de link conditioneel wordt (geen JSX-expressie {…} toegestaan tussen return ( en de <Link href="/docker">). Mutaties gecontroleerd — {initialSummary && (<Link…>)}, {!initialError && (<div header…>)}, {initialError ? null : <Link…>} en verwijderde link laten de test falen; basis 3/3 groen, tsc --noEmit schoon.

Review-fix in 576e753: de test faalt nu ook als de link conditioneel wordt (geen JSX-expressie `{…}` toegestaan tussen `return (` en de `<Link href="/docker">`). Mutaties gecontroleerd — `{initialSummary && (<Link…>)}`, `{!initialError && (<div header…>)}`, `{initialError ? null : <Link…>}` en verwijderde link laten de test falen; basis 3/3 groen, `tsc --noEmit` schoon.
s4m-codex-reviewer left a comment

COMMENT

Findings:

  • INFO — test/docker-detail-back-link.test.ts:29 — De onvoorwaardelijkheidscheck verbiedt elke { vóór de link. Daardoor faalt ook een geldige, onvoorwaardelijke JSX-expressie (bijvoorbeeld className={...} op de page-shell). Niet blokkerend voor de huidige bron; overweeg de check gerichter op conditionele omsluiting te maken.

plan gekoppeld via pr_refs — references: T-38, T-39, T-40, T-41, ST-013. Geen omitted onderdelen.

De diff volgt het geplande source-level Vitest-patroon. De link staat in de header vóór en buiten ContainerDetail, consistent met systemd. Rechtstreeks uitvoeren van de assertions bevestigt dat de huidige bron slaagt en verwijdering of omsluiting met initialSummary && (...) wordt afgewezen. Geen blokkerende code-, architectuur- of documentatiefindings.

Verificatie blijft gedeeltelijk: Vitest kon lokaal niet starten doordat native bindings op /tmp niet uitvoerbaar zijn. Typecheck is geprobeerd maar strandt op ontbrekende gegenereerde Prisma-types, @s4m-kit en ops-agent-dependencies; geen bewezen PR-regressie. Build en volledige suite zijn hier niet bevestigd; Forgejo CI voor head 576e753238 staat pending. Daarom geen APPROVED bij deze resterende onzekerheid.

De PR rondt ST-013 af volgens de beschrijving en meldt T-41 (ST-014, handmatige controle van actief/gestopt/fout) expliciet als openstaand. Die afzonderlijke verificatie is geen blokkerende planfinding voor deze PR.

# COMMENT Findings: - INFO — test/docker-detail-back-link.test.ts:29 — De onvoorwaardelijkheidscheck verbiedt elke `{` vóór de link. Daardoor faalt ook een geldige, onvoorwaardelijke JSX-expressie (bijvoorbeeld `className={...}` op de page-shell). Niet blokkerend voor de huidige bron; overweeg de check gerichter op conditionele omsluiting te maken. plan gekoppeld via pr_refs — references: T-38, T-39, T-40, T-41, ST-013. Geen omitted onderdelen. De diff volgt het geplande source-level Vitest-patroon. De link staat in de header vóór en buiten ContainerDetail, consistent met systemd. Rechtstreeks uitvoeren van de assertions bevestigt dat de huidige bron slaagt en verwijdering of omsluiting met `initialSummary && (...)` wordt afgewezen. Geen blokkerende code-, architectuur- of documentatiefindings. Verificatie blijft gedeeltelijk: Vitest kon lokaal niet starten doordat native bindings op /tmp niet uitvoerbaar zijn. Typecheck is geprobeerd maar strandt op ontbrekende gegenereerde Prisma-types, @s4m-kit en ops-agent-dependencies; geen bewezen PR-regressie. Build en volledige suite zijn hier niet bevestigd; Forgejo CI voor head 576e7532384a235a5a0ce30b0e3f7cf73fdd09dc staat pending. Daarom geen APPROVED bij deze resterende onzekerheid. De PR rondt ST-013 af volgens de beschrijving en meldt T-41 (ST-014, handmatige controle van actief/gestopt/fout) expliciet als openstaand. Die afzonderlijke verificatie is geen blokkerende planfinding voor deze PR.
janpeter scheduled this pull request to auto merge when all checks succeed 2026-10-05 09:58:44 +02:00
test(docker): render the detail page per container state
All checks were successful
CI / Root app checks (pull_request) Successful in 6m15s
CI / Ops-agent checks (pull_request) Successful in 27s
CI / Deploy artifact checks (pull_request) Successful in 19s
CI / Docker image build (pull_request) Successful in 1m32s
5659f6e605
Covers T-41 automatically: renders the real /docker/[name] page and
<ContainerDetail> for a running, a stopped and a failed-summary container
and asserts the header link to /docker is present in each, ahead of the
container name. Only the session and the ops-agent call are stubbed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Author
Owner

T-41 toegevoegd in 5659f6e: test/docker-detail-back-link-render.test.ts rendert de echte /docker/[name]-pagina inclusief <ContainerDetail> (renderToStaticMarkup, echte next/link) voor een running, een exited en een summary-fout-container, met alleen session en postDockerInspection gestubd. Mutaties gecontroleerd: link alleen bij summary, alleen bij running, of met andere href laten de betreffende staten falen. Klik-navigatie in een echte browser is niet uitgevoerd; AC2 is geborgd via de gerenderde href="/docker".

T-41 toegevoegd in 5659f6e: `test/docker-detail-back-link-render.test.ts` rendert de echte `/docker/[name]`-pagina inclusief `<ContainerDetail>` (renderToStaticMarkup, echte `next/link`) voor een running, een exited en een summary-fout-container, met alleen session en `postDockerInspection` gestubd. Mutaties gecontroleerd: link alleen bij summary, alleen bij running, of met andere href laten de betreffende staten falen. Klik-navigatie in een echte browser is niet uitgevoerd; AC2 is geborgd via de gerenderde `href="/docker"`.
s4m-codex-reviewer left a comment

APPROVED

Findings

  • Geen blokkerende findings of overige codebevindingen.

De twee testbestanden borgen de bestaande header-link naar /docker, inclusief de positie vóór de containernaam en rendering bij running, exited en een summary-fout. De broncodeguard detecteert verwijdering en verplaatsing naar een JSX-conditie. Het bestaande headerpatroon is consistent met systemd-detail en de semantische stylingtokens uit de productstandaarden. Er veranderen geen runtimecode, architectuur of documentatiecontracten.

Planconformiteit

plan gekoppeld via pr_refs — references: T-38, T-39, T-40, T-41, ST-013. Er is niets omitted.

ST-013 is binnen de geclaimde scope afgedekt: audit, regressietests, typecheck en build. De aanvullende statische rendertests ondersteunen ST-014, maar bewijzen geen browserklik of visuele zichtbaarheid na hydration. T-41 blijft expliciet open volgens de PR-beschrijving; dit is geen blokkerende planafwijking.

Verificatie

Beoordeeld op commit 5659f6e605c61703662c4e258f8f48c08f640c3e; de actuele Forgejo-diff komt overeen met de payload.

  • Beide nieuwe testsuites: 6/6 tests geslaagd.
  • Typecheck: geslaagd na ophalen van de submodule, installatie van ops-agent dependencies en Prisma-generatie.
  • Productiebuild: geslaagd, inclusief /docker/[name].
  • Vanwege de noexec-mount op /tmp zijn de Node-entrypoints rechtstreeks gestart en native modules via tijdelijke memory-backed bestanden geladen.
  • De volledige testsuite en handmatige browserverificatie zijn in deze review niet uitgevoerd.
# APPROVED ## Findings - Geen blokkerende findings of overige codebevindingen. De twee testbestanden borgen de bestaande header-link naar `/docker`, inclusief de positie vóór de containernaam en rendering bij running, exited en een summary-fout. De broncodeguard detecteert verwijdering en verplaatsing naar een JSX-conditie. Het bestaande headerpatroon is consistent met systemd-detail en de semantische stylingtokens uit de productstandaarden. Er veranderen geen runtimecode, architectuur of documentatiecontracten. ## Planconformiteit plan gekoppeld via pr_refs — references: T-38, T-39, T-40, T-41, ST-013. Er is niets omitted. ST-013 is binnen de geclaimde scope afgedekt: audit, regressietests, typecheck en build. De aanvullende statische rendertests ondersteunen ST-014, maar bewijzen geen browserklik of visuele zichtbaarheid na hydration. T-41 blijft expliciet open volgens de PR-beschrijving; dit is geen blokkerende planafwijking. ## Verificatie Beoordeeld op commit `5659f6e605c61703662c4e258f8f48c08f640c3e`; de actuele Forgejo-diff komt overeen met de payload. - Beide nieuwe testsuites: 6/6 tests geslaagd. - Typecheck: geslaagd na ophalen van de submodule, installatie van ops-agent dependencies en Prisma-generatie. - Productiebuild: geslaagd, inclusief `/docker/[name]`. - Vanwege de noexec-mount op `/tmp` zijn de Node-entrypoints rechtstreeks gestart en native modules via tijdelijke memory-backed bestanden geladen. - De volledige testsuite en handmatige browserverificatie zijn in deze review niet uitgevoerd.
janpeter force-pushed test/sp4-docker-back-link from 5659f6e605
All checks were successful
CI / Root app checks (pull_request) Successful in 6m15s
CI / Ops-agent checks (pull_request) Successful in 27s
CI / Deploy artifact checks (pull_request) Successful in 19s
CI / Docker image build (pull_request) Successful in 1m32s
to de748f2aeb
All checks were successful
CI / Select checks (pull_request) Successful in 19s
CI / Root app checks (pull_request) Successful in 8m2s
CI / Ops-agent checks (pull_request) Successful in 30s
CI / DB access operator (pull_request) Successful in 1m14s
CI / Deploy artifact checks (pull_request) Successful in 20s
CI / Docker image build (pull_request) Successful in 3m13s
CI / Mac foundation hermetic checks (pull_request) Successful in 4m58s
CI / Required checks (pull_request) Successful in 19s
2026-10-05 10:20:13 +02:00
Compare
s4m-codex-reviewer left a comment

COMMENT

Geen blokkerende codefinding vastgesteld. Nog geen APPROVED wegens onvolledig bevestigd test-/buildbewijs voor head de748f2aebe7f260eb64bf321aaf3eb6ec2e1d93.

Findings

  • WARNING — test/docker-detail-back-link-render.test.ts:35: De volledige Vitest-uitvoering en Next-build konden in deze reviewomgeving niet worden bevestigd. /tmp is noexec, waardoor Vitest/native bindings niet laden; de build faalt na SWC-fallback bij het laden van next.config.ts. De Forgejo-checks stonden bij controle nog pending. Dit is een verificatiebeperking, geen aangetoonde PR-regressie.

Plan en productstandaarden

plan gekoppeld via pr_refs; references: T-38, T-39, T-40, T-41, ST-013. Geen omitted-items.

De diff sluit aan op ST-013: de bestaande header-link staat vóór en buiten ContainerDetail, overeenkomstig systemd; de bron-guard detecteert verwijdering en verplaatsing in een summary-conditie. De aanvullende rendertest controleert de echte pagina bij running, exited en initialError, inclusief href en positie. Beide tests zijn correct opgenomen in de basisgroep conform het CI-eigenaarsmodel. Geen wijziging aan runtimearchitectuur of styling; geen nieuwe productdocumentatie nodig.

T-41/ST-014 blijft volgens de PR-beschrijving expliciet open. Server-rendering bewijst href en aanwezigheid, maar vervangt geen browsercontrole van zichtbaarheid en klikken. Dit is geen blokkade voor de opgegeven ST-013-scope.

Verificatie

  • Typecheck (tsc --noEmit): geslaagd na initialisatie van submodules, ops-agent-dependencies en Prisma-client.
  • Bronasserties, verwijderings-/conditiemutaties en volledige CI-eigenaarsregistratie: geslaagd.
  • Aanvullende controle via TypeScript-transpilatie en React-server-rendering van de echte pagina: linkassertie en toestand-/fouttekst geslaagd in alle drie staten. Dit was geen Vitest-run.
  • Volledige suite en build: niet bevestigd wegens bovenstaande omgevingsbeperking; de buildclaim van T-40 blijft daardoor onafhankelijk onbevestigd.
# COMMENT Geen blokkerende codefinding vastgesteld. Nog geen APPROVED wegens onvolledig bevestigd test-/buildbewijs voor head `de748f2aebe7f260eb64bf321aaf3eb6ec2e1d93`. ## Findings - **WARNING — test/docker-detail-back-link-render.test.ts:35:** De volledige Vitest-uitvoering en Next-build konden in deze reviewomgeving niet worden bevestigd. `/tmp` is `noexec`, waardoor Vitest/native bindings niet laden; de build faalt na SWC-fallback bij het laden van `next.config.ts`. De Forgejo-checks stonden bij controle nog pending. Dit is een verificatiebeperking, geen aangetoonde PR-regressie. ## Plan en productstandaarden plan gekoppeld via pr_refs; references: T-38, T-39, T-40, T-41, ST-013. Geen omitted-items. De diff sluit aan op ST-013: de bestaande header-link staat vóór en buiten ContainerDetail, overeenkomstig systemd; de bron-guard detecteert verwijdering en verplaatsing in een summary-conditie. De aanvullende rendertest controleert de echte pagina bij running, exited en initialError, inclusief href en positie. Beide tests zijn correct opgenomen in de basisgroep conform het CI-eigenaarsmodel. Geen wijziging aan runtimearchitectuur of styling; geen nieuwe productdocumentatie nodig. T-41/ST-014 blijft volgens de PR-beschrijving expliciet open. Server-rendering bewijst href en aanwezigheid, maar vervangt geen browsercontrole van zichtbaarheid en klikken. Dit is geen blokkade voor de opgegeven ST-013-scope. ## Verificatie - Typecheck (`tsc --noEmit`): geslaagd na initialisatie van submodules, ops-agent-dependencies en Prisma-client. - Bronasserties, verwijderings-/conditiemutaties en volledige CI-eigenaarsregistratie: geslaagd. - Aanvullende controle via TypeScript-transpilatie en React-server-rendering van de echte pagina: linkassertie en toestand-/fouttekst geslaagd in alle drie staten. Dit was geen Vitest-run. - Volledige suite en build: niet bevestigd wegens bovenstaande omgevingsbeperking; de buildclaim van T-40 blijft daardoor onafhankelijk onbevestigd.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
janpeter/Ops-dashboard!282
No description provided.