Skip to content

ci(handbook): make the handbook trigger fire on e2e changes + enforce spec-metadata parity - #1393

Closed
joshuakrueger-dfx wants to merge 4 commits into
DFXswiss:developfrom
joshuakrueger-dfx:fix/handbook-spec-metadata-parity
Closed

ci(handbook): make the handbook trigger fire on e2e changes + enforce spec-metadata parity#1393
joshuakrueger-dfx wants to merge 4 commits into
DFXswiss:developfrom
joshuakrueger-dfx:fix/handbook-spec-metadata-parity

Conversation

@joshuakrueger-dfx

Copy link
Copy Markdown
Contributor

Symptom (verbatim)

TaprootFreak auf services#1262, wörtlich: "scripts/handbook/metadata.json holds 37 entries and
none of them is the partner dashboard; no spec under e2e/ mentions partner; there is no baseline
among the 154 committed screenshots. And handbook-check.yaml filters on e2e/screenshots/,
scripts/handbook/
, ... — this PR touches 58 files and not one of them matches. The gate does
not skip, it never triggers."

Dasselbe Grundmuster (fehlende Baseline/Metadata, Gate feuert nicht) trat in 3 Tagen sechsmal auf:
#1262, #1274, #1275, #1267, #1271, #1162 — TaprootFreak zitiert bei jedem erneut die Vorgänger-PRs
als Präzedenz.

Scale

9 Instanzen in api + 6 in services desselben strukturellen Fehlertyps in einer 3-Tage-PR-Analyse
(nicht Teil dieses PRs, siehe verlinkte jk-tools-Änderung); hier: 6 Instanzen davon in services
allein, jedes Mal CHANGES_REQUESTED.

Smaller fix considered

Eine reine Pfadfilter-Verbreiterung (z.B. src/** in die paths:-Liste) wurde geprüft und
verworfen: sie macht den bestehenden teuren Docker-Build-Job auf praktisch jedem Frontend-PR
scharf, löst aber das eigentliche Problem nicht — der Job baut nur, was im Manifest steht, prüft
nie, ob etwas fehlt. Stattdessen zwei gezielte Ergänzungen: Trigger um e2e/** erweitert (deckt
e2e/screenshots/** ein) plus ein neuer, schneller Job ohne Docker, der Spec↔Metadata-Parität
prüft.

Was der PR tut

  1. handbook-check.yaml: Trigger-Pfad e2e/screenshots/**e2e/**.
  2. Neuer Job spec-metadata-parity (kein Docker, ubuntu-latest, 5 Min Timeout): jede Top-Level-
    e2e/*.spec.ts, die toHaveScreenshot( aufruft, braucht einen exakt gleichnamigen Key in
    scripts/handbook/metadata.json — und umgekehrt (Orphan-Erkennung). "docs" wie in build.js
    als reservierter Nicht-Spec-Key behandelt; vier historische Alias-Namen (bug-session,
    subpage, swap-btc-to-ln, swap-ln-to-btc) und der eine Spec unter e2e/synpress/ sind
    am Spec-Inhalt verifiziert, nicht geraten (siehe Kommentare in check-parity.js).
  3. Einen echten, vorbestehenden fehlenden Metadata-Eintrag ergänzt (support-issue-receiver-iban
    — sieben toHaveScreenshot-Baselines hatten nie einen Eintrag).

Real gegen develop gelaufen: PASS, 70 Top-Level-Specs, 34 Screenshot-Specs, 41 Metadata-Keys,
0 Missing, 0 Orphans. 9/9 Fixture-Tests grün (inkl. Gegenprobe und Mutationsprobe pro Ausnahme).

Bekannte Grenze

Eine komplett neue Route ohne jeden e2e-Bezug (Fall #1262) bleibt Review-Disziplin — dieser Job
prüft nur Spec↔Metadata-Parität, nicht ob eine neue Route überhaupt einen Spec braucht.

Nicht verifiziert

  • Kein GitHub-Actions-Lauf (Draft, noch kein Push-Trigger ausgewertet).
  • Nicht unter Node 20 gelaufen (lokal Node 22) — CI nutzt Node 20 via setup-node.
  • Nicht geprüft, ob handbook-check als required Check konfiguriert ist.

A new or changed spec under e2e/ did not match e2e/screenshots/**, so
handbook-check.yaml never started. e2e/** covers the previous screenshot
path and the specs themselves.
A top-level e2e/*.spec.ts that calls toHaveScreenshot must have a
metadata.json key equal to its file name without .spec.ts. Orphan keys
fail the same check. The new job is Node-only, shares the existing path
filter, and refuses to pass when no spec files are found.
…ings

metadata.json "docs" is documentation title overrides, the same reserved
key build.js already skips. Four existing keys name screenshot prefixes
rather than spec files; sell-complete lives in e2e/synpress/. New specs
still need an exact key.
The spec already takes seven toHaveScreenshot baselines. Without this
entry the new parity check reports a real missing key.
@joshuakrueger-dfx

Copy link
Copy Markdown
Contributor Author

Zurückgestellt — Setup-Priorität liegt gerade auf Infrastruktur, nicht auf diesem Fix.

@joshuakrueger-dfx
joshuakrueger-dfx deleted the fix/handbook-spec-metadata-parity branch August 13, 2026 15:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant