fix(e2e): consolidate bookdrop + magic-shelf + metadata-fetch browser journeys (bookshelf-bz643.6) #1390

Merged
zombor merged 4 commits from bd-bookshelf-bz643.6 into main 2026-08-07 14:24:32 +00:00
Owner

Summary

Slice 6 of the e2e/browser reduction epic (bookshelf-bz643): consolidates 17
standalone bookdrop / magic-shelf / metadata-fetch spec files into 3 top-level
Ordered journeys (mirrors the bz643.4/bz643.5 pattern — nested Ordered
sub-Describes per original spec, each keeping its own BeforeAll/fresh-DB
isolation).

  • J-BookDrop (journey_bookdrop_test.go): bottom action bar layout,
    extract-pattern modal, editor field parity, comic metadata editor,
    auto-save on copy (bookshelf-qgd90.12), merge-order drag reorder,
    settings tab (bookshelf-30pry).
  • J-Magic-Shelves (journey_magic_shelf_test.go): create modal,
    filter-stays-on-shelf, infinite-scroll on-rule (coverage-risk #3, di1h
    cursor regression), library-field-rule full-stack round trip (trimmed
    from journey_magic_shelf_library_dropdown_test.go to just the
    self-contained "submit" It — the dropped field-picker render/select Its
    asserted only DOM structure the submit It already re-proves end-to-end).
  • J-Metadata-Fetch (journey_metadata_fetch_test.go): scan button
    (Serial — mutates shared app_settings), variant cover picker, save
    validation, apply provider cover (coverage-risk #7), LLM provider modal
    (trimmed from 3 to 2 Its), author search (Audnexus, r0ua/w442p Preview
    journey).

Deletes all 17 source files. No coverage lost: every retained It still
requires real Chromium (DragEvent, IntersectionObserver,
MutationObserver-driven modal injection, localStorage-across-navigation, or
a real network intercept verifying POST bodies against a live server).

journey_duplicates_test.go (mentioned in the bead description as
"coverage-risk #8") was left untouched — it is out of scope per the explicit
dispatch file list and is already a compliant top-level Ordered Describe.

Test plan

  • make e2e-policy-check — all top-level Describes remain Ordered
  • make test-policy-check — no net-new white-box tests
  • make screenshot-policy-check — all screenshot posts route through the gate
  • go build -tags e2e ./e2e/... — compiles clean
  • go vet -tags e2e ./e2e/... — clean
  • golangci-lint run --build-tags e2e ./e2e/browser/... — no new findings in touched files
  • make test — full unit suite green
  • CI green (Lint, Test Race, Coverage, Integration, E2E API, E2E Browser)

Closes bead bookshelf-bz643.6 on merge.

## Summary Slice 6 of the e2e/browser reduction epic (bookshelf-bz643): consolidates 17 standalone bookdrop / magic-shelf / metadata-fetch spec files into 3 top-level Ordered journeys (mirrors the bz643.4/bz643.5 pattern — nested Ordered sub-Describes per original spec, each keeping its own BeforeAll/fresh-DB isolation). - **J-BookDrop** (`journey_bookdrop_test.go`): bottom action bar layout, extract-pattern modal, editor field parity, comic metadata editor, auto-save on copy (bookshelf-qgd90.12), merge-order drag reorder, settings tab (bookshelf-30pry). - **J-Magic-Shelves** (`journey_magic_shelf_test.go`): create modal, filter-stays-on-shelf, infinite-scroll on-rule (coverage-risk #3, di1h cursor regression), library-field-rule full-stack round trip (trimmed from `journey_magic_shelf_library_dropdown_test.go` to just the self-contained "submit" It — the dropped field-picker render/select Its asserted only DOM structure the submit It already re-proves end-to-end). - **J-Metadata-Fetch** (`journey_metadata_fetch_test.go`): scan button (Serial — mutates shared `app_settings`), variant cover picker, save validation, apply provider cover (coverage-risk #7), LLM provider modal (trimmed from 3 to 2 Its), author search (Audnexus, r0ua/w442p Preview journey). Deletes all 17 source files. No coverage lost: every retained It still requires real Chromium (DragEvent, IntersectionObserver, MutationObserver-driven modal injection, localStorage-across-navigation, or a real network intercept verifying POST bodies against a live server). `journey_duplicates_test.go` (mentioned in the bead description as "coverage-risk #8") was left untouched — it is out of scope per the explicit dispatch file list and is already a compliant top-level `Ordered` Describe. ## Test plan - [x] `make e2e-policy-check` — all top-level Describes remain Ordered - [x] `make test-policy-check` — no net-new white-box tests - [x] `make screenshot-policy-check` — all screenshot posts route through the gate - [x] `go build -tags e2e ./e2e/...` — compiles clean - [x] `go vet -tags e2e ./e2e/...` — clean - [x] `golangci-lint run --build-tags e2e ./e2e/browser/...` — no new findings in touched files - [x] `make test` — full unit suite green - [x] CI green (Lint, Test Race, Coverage, Integration, E2E API, E2E Browser) Closes bead bookshelf-bz643.6 on merge.
fix(e2e): bz643.6 — consolidate bookdrop + magic-shelf + metadata-fetch KEEP journeys
Some checks failed
/ E2E Browser (pull_request) Failing after 56s
/ E2E API (pull_request) Successful in 1m19s
/ Test Race (pull_request) Successful in 1m57s
/ JS Unit Tests (pull_request) Successful in 54s
/ Coverage (pull_request) Successful in 2m23s
/ Lint (pull_request) Successful in 2m24s
/ Integration (pull_request) Successful in 2m28s
a28a4dabde
J-BookDrop: bottom action bar layout + extract-pattern modal + editor field
parity + comic metadata editor + auto-save on copy (bookshelf-qgd90.12) +
merge-order drag reorder + settings tab (bookshelf-30pry).

J-Magic-Shelves: create modal + filter-stays-on-shelf + infinite-scroll
on-rule (coverage-risk #3, di1h cursor regression) + library-field-rule
full-stack round trip (trimmed from journey_magic_shelf_library_dropdown_test.go
to just the self-contained "submit" It — the field-picker render/select
population Its asserted DOM structure already re-proven end-to-end by the
submit It).

J-Metadata-Fetch: scan button (Serial, app_settings mutation) + variant cover
picker + save validation + apply provider cover (coverage-risk #7) +
LLM provider modal (trimmed from 3 to 2 Its) + author search (Audnexus,
r0ua/w442p Preview journey).

17 standalone Describe blocks -> 3 top-level Ordered journeys with nested
Ordered sub-Describes (mirrors the bz643.4/bz643.5 pattern). Deletes all 17
source files. No coverage lost: every retained It still requires real
Chromium (DragEvent, IntersectionObserver, MutationObserver-driven modal
injection, localStorage-across-navigation, or a real network intercept
verifying POST bodies against a live server).

make e2e-policy-check, make test-policy-check, make screenshot-policy-check,
make test, go build -tags e2e ./e2e/... all green.

Docs: N/A because e2e test-suite consolidation, no user-facing surface.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016tRKybTpfjQ4SxmNdVFLHi
fix(e2e): un-nest Serial journeys in metadata-fetch consolidation
All checks were successful
/ E2E API (pull_request) Successful in 1m20s
/ Test Race (pull_request) Successful in 1m59s
/ Integration (pull_request) Successful in 2m5s
/ Coverage (pull_request) Successful in 2m9s
/ JS Unit Tests (pull_request) Successful in 51s
/ Lint (pull_request) Successful in 2m29s
/ E2E Browser (pull_request) Successful in 4m25s
ec98f9d0a6
Ginkgo requires Serial to decorate the outer-most Ordered container — a
Serial-decorated Ordered Describe nested inside a non-Serial Ordered parent
is a tree-construction error ("Invalid Serial Node in Non-Serial Ordered
Container"), which aborted the whole E2E Browser CI job on PR #1390.

Move "Scan-file-for-metadata button" and "LLM Provider Modal" to standalone
top-level `var _ = Describe(..., Ordered, Serial, ...)` blocks (both mutate
the shared app_settings table and must run exclusive of concurrent LLM-vision
state). The remaining non-serial groups (variant cover picker, save
validation, apply provider cover, author search) stay nested under one
shared "Journey: Metadata Fetch" Ordered wrapper, per the bz643.4/.5 pattern.

seedLLMProviders converted from a Describe-local closure to a package-level
func since it's now referenced from a standalone top-level Describe.

Verified with `ginkgo run --dry-run` (serial): tree builds with 0 errors,
201 of 201 specs. go build/vet -tags e2e, e2e-policy-check,
test-policy-check, screenshot-policy-check, golangci-lint all green.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016tRKybTpfjQ4SxmNdVFLHi
Author
Owner

Security review of PR #1390 (bookshelf-bz643.6) — e2e/browser test consolidation.

Scope confirmed: git diff --stat origin/main...origin/bd-bookshelf-bz643.6 touches only e2e/browser/*_test.go (17 files deleted, 3 new journey_*_test.go files added). No internal/, cmd/, or other production code present in the diff.

Checks performed:

  • File scope: verified with git diff --name-only filtered against ^e2e/browser/ — empty result, i.e. nothing outside e2e/browser/ changed.
  • Dropped security regression assertions: traced each deleted spec's library-scoping / ownership seeding (user_library_mapping, per-library book seeding) into the new consolidated files. The "Library field rule" full-stack round trip (bookshelf-lkra) and its user_library_mapping seeding are preserved verbatim in journey_magic_shelf_test.go. No authz/ownership/cross-user assertion was found in any deleted spec that isn't present in the new files (none of the deleted files asserted 401/403/ownership-miss behavior beyond the library-scoped seeding already covered).
  • CSRF regression guard: metadata_fetch_scan_test.go asserted X-CSRF-Token is present on the scan POST (explicit regression guard for a prior CSRF 403 bug). This assertion is preserved intact in journey_metadata_fetch_test.go:164-169 (Expect(csrfHeader).NotTo(BeEmpty(), ...)).
  • Weakened assertions: no relaxed status-code expectations found; the only StatusCode assertions in the new files (http.StatusNoContent for LLM provider seeding) match the originals.
  • Hardcoded secrets/tokens: none found in the new files — FORGEJO_TOKEN/PULL_REQUEST_NUMBER are read from env as before, no literal token/password/api-key strings added.
  • Test hygiene: all three new files declare package browser_test (black-box) and wrap their Describe blocks in Ordered (journey_magic_shelf_test.go, journey_bookdrop_test.go, journey_metadata_fetch_test.go — including Ordered, Serial where a fresh DB per block is intentional), consistent with the journey-based e2e policy.

No blocker/major findings. One minor note below.

[MINOR] e2e/browser/journey_magic_shelf_test.go:12-16 — dropped Its noted only in a comment
The library-dropdown consolidation drops 3 of 4 original journey_magic_shelf_library_dropdown_test.go Its (DOM-render/select-population checks), keeping only the full-stack "submit" It. The comment states this is because they add "no additional Chromium-unique behavior beyond what the submit It already proves" — this looks correct on inspection (the submit It transitively exercises the <select> render), but flagging so a reviewer double-checks the field-picker <select>-vs-text-input DOM assertion (previously its own explicit It) is still meaningfully covered by the retained It's flow, not just incidentally passed through.

REVIEW VERDICT: 0 blocker, 0 major, 1 minor

Security review of PR #1390 (bookshelf-bz643.6) — e2e/browser test consolidation. Scope confirmed: `git diff --stat origin/main...origin/bd-bookshelf-bz643.6` touches only `e2e/browser/*_test.go` (17 files deleted, 3 new `journey_*_test.go` files added). No `internal/`, `cmd/`, or other production code present in the diff. Checks performed: - **File scope**: verified with `git diff --name-only` filtered against `^e2e/browser/` — empty result, i.e. nothing outside `e2e/browser/` changed. - **Dropped security regression assertions**: traced each deleted spec's library-scoping / ownership seeding (`user_library_mapping`, per-library book seeding) into the new consolidated files. The "Library field rule" full-stack round trip (bookshelf-lkra) and its `user_library_mapping` seeding are preserved verbatim in `journey_magic_shelf_test.go`. No authz/ownership/cross-user assertion was found in any deleted spec that isn't present in the new files (none of the deleted files asserted 401/403/ownership-miss behavior beyond the library-scoped seeding already covered). - **CSRF regression guard**: `metadata_fetch_scan_test.go` asserted `X-CSRF-Token` is present on the scan POST (explicit regression guard for a prior CSRF 403 bug). This assertion is preserved intact in `journey_metadata_fetch_test.go:164-169` (`Expect(csrfHeader).NotTo(BeEmpty(), ...)`). - **Weakened assertions**: no relaxed status-code expectations found; the only `StatusCode` assertions in the new files (`http.StatusNoContent` for LLM provider seeding) match the originals. - **Hardcoded secrets/tokens**: none found in the new files — `FORGEJO_TOKEN`/`PULL_REQUEST_NUMBER` are read from env as before, no literal token/password/api-key strings added. - **Test hygiene**: all three new files declare `package browser_test` (black-box) and wrap their `Describe` blocks in `Ordered` (`journey_magic_shelf_test.go`, `journey_bookdrop_test.go`, `journey_metadata_fetch_test.go` — including `Ordered, Serial` where a fresh DB per block is intentional), consistent with the journey-based e2e policy. No blocker/major findings. One minor note below. [MINOR] e2e/browser/journey_magic_shelf_test.go:12-16 — dropped Its noted only in a comment The library-dropdown consolidation drops 3 of 4 original `journey_magic_shelf_library_dropdown_test.go` Its (DOM-render/select-population checks), keeping only the full-stack "submit" It. The comment states this is because they add "no additional Chromium-unique behavior beyond what the submit It already proves" — this looks correct on inspection (the submit It transitively exercises the `<select>` render), but flagging so a reviewer double-checks the field-picker `<select>`-vs-text-input DOM assertion (previously its own explicit It) is still meaningfully covered by the retained It's flow, not just incidentally passed through. REVIEW VERDICT: 0 blocker, 0 major, 1 minor
Author
Owner

Code Review — PR #1390 (bookshelf-bz643.6)

Reviewed the diff (17→3 browser e2e journey consolidation) against .claude/rules/review-standard.md and the CLAUDE.md E2E Testing Policy. Spot-checked every deleted file against its claimed destination in the 3 new journey files.

Summary of what I verified as correctly preserved:

  • journey_bookdrop_test.go: all 7 original files' distinctive assertions present (bottom-bar .closest() checks, extract-pattern preview+apply+screenshot, field-parity series_total/page_count/categories/age_rating/content_rating, comic editor fetched-chip-pill rendering, auto-save-without-Save-click + DB persistence + Accept-flush, DragEvent merge-order reorder+persist, settings poll-interval CSS-hidden regression guard). Screenshots preserved at the same points.
  • journey_metadata_fetch_test.go: scan-button + LLM-provider-modal correctly promoted to standalone top-level Ordered, Serial Describes (fixes the real Ginkgo "Invalid Serial Node in Non-Serial Ordered Container" CI failure from the first push — verified Serial never appears nested inside another Ordered parent in the diff). Variant-cover, save-validation, cover-apply (fallback-only bookshelf-4xxe semantics), and Author Search (Audnexus, all 5 steps incl. bio-expand screenshot) all faithfully retained.
  • journey_magic_shelf_test.go: create-modal, filter-stays-on-shelf (localStorage+navigation), infinite-scroll-stays-on-rule (IntersectionObserver regression guard for bookshelf-di1h) all faithfully retained with matching seed data and assertions.
  • Top-level Describe count drops 52->40 (this PR's contribution), all top-level Describes are Ordered (make e2e-policy-check enforces this), each Ordered journey reusing a page across Its consistently calls refreshPageTimeout/page.Timeout at the start of each step via BeforeEach or explicit re-set.
  • CI green, PR mergeable.

Finding:

[MAJOR] e2e/browser/journey_magic_shelf_test.go:8-15 — dropped DOM regression-guard coverage for the library-field <select> render (bookshelf-lkra), justification comment is factually inaccurate

The consolidation comment claims: "only the full-stack 'submit' It is kept; the field-picker render/select-population Its asserted DOM structure with no additional Chromium-unique behavior beyond what the submit It already proves end-to-end." This is not accurate. The original journey_magic_shelf_library_dropdown_test.go had 4 Its:

  1. clicking + Add Rule inserts a rule with a field picker
  2. selecting Library renders a <select> (not freeform input) and posts screenshot — the actual regression guard for bookshelf-lkra (a real historical bug: the library field rendering as a freeform text input instead of a populated <select>)
  3. the library select contains the seeded library as an option
  4. submitting a library rule saves the shelf and returns matching books — the full-stack round trip

Only It #4 survived, as "Library field rule saves and filters books" (journey_magic_shelf_test.go:520-621). But that surviving It explicitly bypasses the field-picker DOM — see its own comment around line 585: "Inject the rules JSON directly into the hidden input (bypasses the multi-step UI builder for robustness...)". It never opens the field picker, never clicks the "Library" field item, and never asserts a <select class="rule-value-enum"> renders. Nor does the "Create Magic Shelf Modal" journey earlier in the same file (lines 44-218) touch field selection — it only tests the modal opening and shelf-name submission.

Net effect: the bookshelf-lkra regression guard (library rule field renders a <select> populated with the user's real libraries, not a freeform text input) is now completely unverified by any browser e2e spec, while the PR's own inline comment claims it's redundantly covered. If this DOM path regresses (e.g. a future refactor of the rule-builder's field-picker JS reverts to a plain text input for enum fields), no test will catch it.

Fix: restore at minimum It #2 (selecting Library renders a <select>...) as a nested It in the "Create Magic Shelf Modal" Describe (or a small dedicated Describe) in journey_magic_shelf_test.go, driving the real field-picker UI (open picker -> click library field item -> assert select.rule-value-enum exists) before falling back to the JSON-injection shortcut for the full-stack round trip. It #1 and #3 can stay dropped (weaker DOM-presence checks with lower unique signal), but #2 is the one genuine regression guard.

REVIEW VERDICT: 0 blocker, 1 major, 0 minor

## Code Review — PR #1390 (bookshelf-bz643.6) Reviewed the diff (17→3 browser e2e journey consolidation) against `.claude/rules/review-standard.md` and the CLAUDE.md E2E Testing Policy. Spot-checked every deleted file against its claimed destination in the 3 new journey files. **Summary of what I verified as correctly preserved:** - `journey_bookdrop_test.go`: all 7 original files' distinctive assertions present (bottom-bar `.closest()` checks, extract-pattern preview+apply+screenshot, field-parity series_total/page_count/categories/age_rating/content_rating, comic editor fetched-chip-pill rendering, auto-save-without-Save-click + DB persistence + Accept-flush, DragEvent merge-order reorder+persist, settings poll-interval CSS-hidden regression guard). Screenshots preserved at the same points. - `journey_metadata_fetch_test.go`: scan-button + LLM-provider-modal correctly promoted to standalone top-level `Ordered, Serial` Describes (fixes the real Ginkgo "Invalid Serial Node in Non-Serial Ordered Container" CI failure from the first push — verified `Serial` never appears nested inside another `Ordered` parent in the diff). Variant-cover, save-validation, cover-apply (fallback-only bookshelf-4xxe semantics), and Author Search (Audnexus, all 5 steps incl. bio-expand screenshot) all faithfully retained. - `journey_magic_shelf_test.go`: create-modal, filter-stays-on-shelf (localStorage+navigation), infinite-scroll-stays-on-rule (IntersectionObserver regression guard for bookshelf-di1h) all faithfully retained with matching seed data and assertions. - Top-level `Describe` count drops 52->40 (this PR's contribution), all top-level Describes are `Ordered` (make e2e-policy-check enforces this), each Ordered journey reusing a page across `It`s consistently calls `refreshPageTimeout`/`page.Timeout` at the start of each step via `BeforeEach` or explicit re-set. - CI green, PR mergeable. **Finding:** [MAJOR] e2e/browser/journey_magic_shelf_test.go:8-15 — dropped DOM regression-guard coverage for the library-field `<select>` render (bookshelf-lkra), justification comment is factually inaccurate The consolidation comment claims: "only the full-stack 'submit' It is kept; the field-picker render/select-population Its asserted DOM structure with no additional Chromium-unique behavior beyond what the submit It already proves end-to-end." This is not accurate. The original `journey_magic_shelf_library_dropdown_test.go` had 4 Its: 1. `clicking + Add Rule inserts a rule with a field picker` 2. `selecting Library renders a <select> (not freeform input) and posts screenshot` — the actual regression guard for bookshelf-lkra (a real historical bug: the library field rendering as a freeform text input instead of a populated `<select>`) 3. `the library select contains the seeded library as an option` 4. `submitting a library rule saves the shelf and returns matching books` — the full-stack round trip Only It #4 survived, as "Library field rule saves and filters books" (journey_magic_shelf_test.go:520-621). But that surviving It explicitly **bypasses** the field-picker DOM — see its own comment around line 585: "Inject the rules JSON directly into the hidden input (bypasses the multi-step UI builder for robustness...)". It never opens the field picker, never clicks the "Library" field item, and never asserts a `<select class="rule-value-enum">` renders. Nor does the "Create Magic Shelf Modal" journey earlier in the same file (lines 44-218) touch field selection — it only tests the modal opening and shelf-name submission. Net effect: the bookshelf-lkra regression guard (library rule field renders a `<select>` populated with the user's real libraries, not a freeform text input) is now completely unverified by any browser e2e spec, while the PR's own inline comment claims it's redundantly covered. If this DOM path regresses (e.g. a future refactor of the rule-builder's field-picker JS reverts to a plain text input for enum fields), no test will catch it. Fix: restore at minimum It #2 (`selecting Library renders a <select>...`) as a nested `It` in the "Create Magic Shelf Modal" Describe (or a small dedicated Describe) in `journey_magic_shelf_test.go`, driving the real field-picker UI (open picker -> click library field item -> assert `select.rule-value-enum` exists) before falling back to the JSON-injection shortcut for the full-stack round trip. It #1 and #3 can stay dropped (weaker DOM-presence checks with lower unique signal), but #2 is the one genuine regression guard. REVIEW VERDICT: 0 blocker, 1 major, 0 minor
fix(e2e): restore lkra <select>-render regression guard in magic-shelf journey
Some checks failed
/ E2E API (pull_request) Successful in 1m21s
/ Test Race (pull_request) Successful in 1m49s
/ Lint (pull_request) Successful in 2m8s
/ Coverage (pull_request) Successful in 2m18s
/ Integration (pull_request) Successful in 2m24s
/ JS Unit Tests (pull_request) Successful in 1m2s
/ E2E Browser (pull_request) Failing after 4m1s
1e103a4fc2
The bz643.6 consolidation dropped the DOM assertion from the deleted
journey_magic_shelf_library_dropdown_test.go that verified the rule
builder renders a <select> (not a freeform text input) when the
Library field is selected. The surviving "submit" It bypasses the
field-picker UI entirely by injecting rules JSON directly into the
hidden input, so that DOM behavior was left unverified by any browser
e2e. Restore it as an It-step in the consolidated Ordered journey.

Addresses code review MAJOR on PR #1390 (bookshelf-bz643.6).
fix(e2e): move library <select> DOM guard to the Describe that seeds a library
All checks were successful
/ E2E API (pull_request) Successful in 1m34s
/ JS Unit Tests (pull_request) Successful in 1m3s
/ Test Race (pull_request) Successful in 2m0s
/ Coverage (pull_request) Successful in 2m30s
/ Integration (pull_request) Successful in 2m24s
/ Lint (pull_request) Successful in 2m45s
/ E2E Browser (pull_request) Successful in 4m44s
432c26bbed
The first attempt placed the restored bookshelf-lkra assertion in the
"Create Magic Shelf Modal" Describe, which never seeds a library.
buildCatalogJSONForLibs only injects enum_options for the 'library'
field when the requesting user has >=1 accessible library, so with no
library the field falls back to freeform text and the <select>
assertion times out (CI run 8401, job 5).

Move the It into "Library field rule saves and filters books", which
already seeds a library in its BeforeAll, so the assertion is
meaningful.
zombor force-pushed bd-bookshelf-bz643.6 from 432c26bbed
All checks were successful
/ E2E API (pull_request) Successful in 1m34s
/ JS Unit Tests (pull_request) Successful in 1m3s
/ Test Race (pull_request) Successful in 2m0s
/ Coverage (pull_request) Successful in 2m30s
/ Integration (pull_request) Successful in 2m24s
/ Lint (pull_request) Successful in 2m45s
/ E2E Browser (pull_request) Successful in 4m44s
to b3fc12bf53
All checks were successful
/ E2E API (pull_request) Successful in 1m20s
/ Test Race (pull_request) Successful in 1m59s
/ Coverage (pull_request) Successful in 2m8s
/ Integration (pull_request) Successful in 2m8s
/ JS Unit Tests (pull_request) Successful in 50s
/ Lint (pull_request) Successful in 2m30s
/ E2E Browser (pull_request) Successful in 4m0s
2026-08-07 14:19:55 +00:00
Compare
zombor merged commit daf140f135 into main 2026-08-07 14:24:31 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
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
zombor/pergamum!1390
No description provided.