Skip to content
Merged
Show file tree
Hide file tree
Changes from 86 commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
d52a8f7
feat(archives): RiC-CM Phase 1 — RiC-O JSON-LD read-only export (#122)
fabiodalez-dev May 14, 2026
77ee448
fix(archives): address 8 CodeRabbit findings on RiC-CM Phase 1 PR
fabiodalez-dev May 14, 2026
54c96e8
fix(archives): address all 7 adamsreview findings on RiC-CM Phase 1 PR
fabiodalez-dev May 14, 2026
76b6172
docs(readme): document all 16 bundled plugins + IIIF 3.0 / RiC-O / At…
fabiodalez-dev May 14, 2026
42ed6ee
fix(archives): propagate DB errors from secondary RiC fetchers (CodeR…
fabiodalez-dev May 14, 2026
ac2a691
fix(archives): drop empty rdfs:label, correct hardcoded-EN language t…
fabiodalez-dev May 14, 2026
74c98d7
fix: address RiC-O review and UNIMARC alignment
fabiodalez-dev May 15, 2026
1fafdd4
fix(archives): scope DB throw to RiC path + RFC 7807 error envelope (…
fabiodalez-dev May 15, 2026
e016719
test(archives): extend RiC-O coverage — URI allow-list, gYear formatt…
fabiodalez-dev May 15, 2026
e596394
fix(archives): validate ark_identifier before n2t.net interpolation (…
fabiodalez-dev May 15, 2026
bc44de3
test(archives): filter soft-deleted authorities in RiC test seed (Cod…
fabiodalez-dev May 15, 2026
c461375
feat(archives): RiC-CM Phase 2 — agents as first-class entities (#122…
fabiodalez-dev May 16, 2026
3a89831
feat(archives): RiC-CM Phase 3 — Activities as first-class entities (…
fabiodalez-dev May 16, 2026
5a511ce
feat(archives): RiC-CM Phase 4 — Places + polymorphic relations (#122…
fabiodalez-dev May 16, 2026
105e687
chore(version): revert intermediate version bumps from Phases 2-4
fabiodalez-dev May 16, 2026
9c959b4
chore(version): bump version.json to 0.8.0 — final RiC-CM release target
fabiodalez-dev May 16, 2026
ad01c97
feat(archives): RiC-CM Phase 5 — admin UI for activities, places and …
fabiodalez-dev May 16, 2026
81f4cbc
feat(oai-pmh): RiC-CM Phase 6 — metadataPrefix=ric-o for archival_unit
fabiodalez-dev May 16, 2026
8c6b525
fix(archives): include file_size in unit_files PHPDoc shape (pre-exis…
fabiodalez-dev May 16, 2026
7a61aff
fix(archives): Phase 5 CSRF token name + place bind_param + E2E coverage
fabiodalez-dev May 16, 2026
e78a748
ci: wire archives-phase5-admin-ui.spec.js + archives-phase6-oai-ric-o…
fabiodalez-dev May 16, 2026
bc835ab
fix(tests): use TCP for mysql client in Phase 5/6 specs on CI
fabiodalez-dev May 16, 2026
bd0bb9b
fix(archives): apply 9 adamsreview Phase 8 findings (#136, rev_01KRRE…
fabiodalez-dev May 16, 2026
8ea8470
fix(archives): apply 12 walkthrough-promoted finding (threshold=40, #…
fabiodalez-dev May 16, 2026
98716d9
fix(archives): apply 7 walkthrough-promoted manual findings (#136)
fabiodalez-dev May 16, 2026
6123f89
chore(archives): final adamsreview cleanup — 7 findings + v0.7.12 (#136)
fabiodalez-dev May 16, 2026
f458b63
fix(archives): adamsreview re-review batch — 15 findings post-fix reg…
fabiodalez-dev May 17, 2026
43ffb42
fix(archives): restore get_result error logs + accept @graph shape in…
fabiodalez-dev May 17, 2026
5387737
fix(tests): replace 10-byte placeholder mp3 with real WAV fixture
fabiodalez-dev May 17, 2026
09746db
chore(gitignore): allowlist tests/fixtures/*.wav
fabiodalez-dev May 17, 2026
a0f3361
fix(updater): sort migrations by semver, not lexicographically
fabiodalez-dev May 17, 2026
b38a00f
fix(migrations): zero-pad 0.7.x patch versions for lex-correct ordering
fabiodalez-dev May 17, 2026
a8ae3b5
fix(migrations): skip RiC-CM Phase 2-6 DDL when archives plugin not y…
fabiodalez-dev May 17, 2026
3b3f6ca
ci: expand archives E2E coverage in workflow (+5 spec files)
fabiodalez-dev May 17, 2026
3511b34
fix(archives): address 7 CodeRabbit inline findings (#136)
fabiodalez-dev May 17, 2026
cf329cf
fix(archives): CR re-review — gYear historical years, ric-o gate, det…
fabiodalez-dev May 17, 2026
91670e9
fix: address 11 code review findings (1 reconciled group)
fabiodalez-dev May 19, 2026
8271484
fix: F007 + F022 — path-traversal containment and RiC-O property name
fabiodalez-dev May 19, 2026
8cfb76e
fix: walkthrough round — F009/F013/F016/F036/F038/F045
fabiodalez-dev May 19, 2026
6860c79
fix: F027 migration header cleanup + verify F037/F046 already mitigated
fabiodalez-dev May 19, 2026
c8e3a08
fix: cleanup pass — 11 below_gate findings (cosmetic + minor hardening)
fabiodalez-dev May 19, 2026
8cbf3aa
fix: CodeRabbit full-review findings — 5 real-new findings post-fix-c…
fabiodalez-dev May 19, 2026
63525c9
fix: CodeRabbit confirm-review findings — 6 minor + 1 major
fabiodalez-dev May 20, 2026
263509a
fix: adamsreview re-review — 6 critical follow-ups on prior fix cycle
fabiodalez-dev May 20, 2026
e056e98
fix: cleanup pass on remaining adamsreview findings
fabiodalez-dev May 20, 2026
0cca6e3
feat(events): admin-configurable layout for event hero image (#137)
fabiodalez-dev May 20, 2026
c96dcb0
fix(events): redesign contained (3:2) and thumb (grid) layouts (#137)
fabiodalez-dev May 20, 2026
9cd5626
fix(events): presets now produce progressively SMALLER images (#137)
fabiodalez-dev May 20, 2026
7260d82
fix(events): left-align small image presets (#137)
fabiodalez-dev May 20, 2026
ec19d2d
fix(events): preserve upload when admin also ticks 'remove image'
fabiodalez-dev May 20, 2026
e875de5
fix: address 10 walkthrough-promoted findings from review #139
fabiodalez-dev May 21, 2026
28e1e00
fix: apply 4 walkthrough-promoted findings (review #139, walk thresho…
fabiodalez-dev May 21, 2026
acbe647
fix: address CodeRabbit findings on PR #139 (2 of 7 valid)
fabiodalez-dev May 21, 2026
e78c415
fix(test): also unlink uploaded file in teardown (CodeRabbit #139 fol…
fabiodalez-dev May 21, 2026
20a42d6
chore: unify client-side popups to SweetAlert2 (#140)
fabiodalez-dev May 21, 2026
8aa9c7d
test(swal): E2E coverage for issue #140 popup unification
fabiodalez-dev May 21, 2026
70277ea
fix: address CodeRabbit findings on PR #141 (7 valid / 5 skip)
fabiodalez-dev May 21, 2026
383b0a2
fix: swal-config bus bugs caught by /adamsreview:review on PR #141
fabiodalez-dev May 21, 2026
450ed8e
fix(swal): kind-aware confirmText default + 3 UX follow-ups + 49 reus…
fabiodalez-dev May 22, 2026
5701c58
test(swal): make Block E robust to real admin URL patterns + DB seed …
fabiodalez-dev May 25, 2026
318117b
test(full-test): adapt Phase 21 to SwalApp confirmation modal
fabiodalez-dev May 25, 2026
9501535
ci: empty commit to re-trigger E2E suite
fabiodalez-dev May 25, 2026
66be026
test(archives): support TCP MySQL connection in CI (E2E_DB_HOST/PORT)
fabiodalez-dev May 25, 2026
0526647
ci: seed archival_units before upload-assets spec runs
fabiodalez-dev May 25, 2026
dcf98a0
test(swal): firstDeletableId checks ALL dep keys, not just one
fabiodalez-dev May 25, 2026
194c9f5
test(archives): align upload-asset regex with F015's 64-bit entropy
fabiodalez-dev May 25, 2026
43d36cd
ci: chmod uploads tree before pr-extended writes IIIF stub files
fabiodalez-dev May 25, 2026
8d93ffd
merge: include feat/ric-cm-archives (PR #136) into unified release br…
fabiodalez-dev May 25, 2026
0b1bbee
merge: include chore/sweetalert2-popup-unification (PR #141 + #139) i…
fabiodalez-dev May 25, 2026
695b303
chore: clean up phpstan ignores that became stale after merging #136 …
fabiodalez-dev May 25, 2026
b73d9a8
test(release): 25 unified regression tests covering #141 + #139 + #136
fabiodalez-dev May 25, 2026
1a96512
fix: address 14 actionable findings from CodeRabbit review on PR #144
fabiodalez-dev May 25, 2026
9d370cd
fix: 3 follow-up findings from CodeRabbit re-review on PR #144
fabiodalez-dev May 25, 2026
659e0f2
fix: 5 findings surfaced by /adamsreview:review --full on PR #144
fabiodalez-dev May 25, 2026
c06fab0
hardening: htmlspecialchars + JSON_HEX_TAG on 3 unsafe-echo-tag sites
fabiodalez-dev May 26, 2026
75ba258
hardening(prestiti): share $pdfIdForDownload between banner + auto-do…
fabiodalez-dev May 26, 2026
c581fab
fix(types): drop redundant isset() inside !empty() branches
fabiodalez-dev May 26, 2026
6a0db98
test: fix 3 spec failures surfaced by the final pre-merge suite
fabiodalez-dev May 26, 2026
2401603
ci: backfill 8 orphan specs as continue-on-error CI steps
fabiodalez-dev May 26, 2026
8f5bb08
test: add TCP MySQL support to 3 orphan specs (same as archives fix)
fabiodalez-dev May 26, 2026
4d5dbd7
hardening(views): reject non-scalar $_GET inputs before string/int use
fabiodalez-dev May 26, 2026
6737238
test: add 25 browser-driven scraping + form-entry E2E coverage
fabiodalez-dev May 26, 2026
8525057
test(scraping-25): drop unused url binding flagged by CodeQL
fabiodalez-dev May 26, 2026
f3bd49a
fix(plugins): start all bundled plugins INACTIVE on fresh install
fabiodalez-dev May 26, 2026
dc7f8ca
chore: remove orphan pinakes-v0.7.6.zip.sha256 from root
fabiodalez-dev May 26, 2026
ab3c18a
Revert "fix(plugins): start all bundled plugins INACTIVE on fresh ins…
fabiodalez-dev May 26, 2026
9ff9b18
test: address 2 CodeRabbit findings on PR #144 (test isolation + dete…
fabiodalez-dev May 27, 2026
b7a26af
test(#74): add 2 regression tests for selecting EXISTING authors via …
fabiodalez-dev May 27, 2026
e5c0fd4
fix(archives): 3 review findings — IIIF route docs, place ancestor cy…
fabiodalez-dev May 27, 2026
3401766
perf+fix(covers): http compression + cache, self-heal missing local c…
fabiodalez-dev May 27, 2026
74572d5
fix(nginx): add Cache-Control to /uploads/ — CodeRabbit finding
fabiodalez-dev May 27, 2026
b64c4f7
fix(covers): realpath containment + drop deprecated font-woff MIME
fabiodalez-dev May 27, 2026
ab0ad94
chore(.htaccess): drop residual application/font-woff from ExpiresByType
fabiodalez-dev May 27, 2026
a16fc50
style(search): left-align book year in hero-search dropdown
fabiodalez-dev May 27, 2026
b484f44
style(book-detail): let prose blocks fill their container
fabiodalez-dev May 27, 2026
02d34c4
chore(assets): rebuild main.css with .pt-5 utility used by settings view
fabiodalez-dev May 27, 2026
8be2420
chore: bump version to 0.7.13
fabiodalez-dev May 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
130 changes: 124 additions & 6 deletions .github/workflows/ci-e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -150,42 +150,160 @@ jobs:

# ── Test suite ───────────────────────────────────────────────────────────

- name: "[1/6] full-test.spec.js — complete application lifecycle"
- name: "[1/13] full-test.spec.js — complete application lifecycle"
run: |
npx playwright test tests/full-test.spec.js \
--config=tests/playwright.config.js \
--workers=1

- name: "[2/6] schema-integrity.spec.js — post-install table verification"
- name: "[2/13] schema-integrity.spec.js — post-install table verification"
run: |
npx playwright test tests/schema-integrity.spec.js \
--config=tests/playwright.config.js \
--workers=1

- name: "[3/6] plugin-integrity.spec.js — plugin registration regression"
- name: "[3/13] plugin-integrity.spec.js — plugin registration regression"
run: |
npx playwright test tests/plugin-integrity.spec.js \
--config=tests/playwright.config.js \
--workers=1

- name: "[4/6] mag-validation.spec.js — OAI-PMH MAG 2.0.1 metadata"
- name: "[4/13] mag-validation.spec.js — OAI-PMH MAG 2.0.1 metadata"
run: |
npx playwright test tests/mag-validation.spec.js \
--config=tests/playwright.config.js \
--workers=1

- name: "[5/6] archives-search.spec.js — ricerca archivi admin + pubblica"
- name: "[5/13] archives-search.spec.js — ricerca archivi admin + pubblica"
run: |
npx playwright test tests/archives-search.spec.js \
--config=tests/playwright.config.js \
--workers=1

- name: "[6/6] ncip-server.spec.js — NCIP 2.0 endpoints v0.7.4"
- name: "[6/13] ncip-server.spec.js — NCIP 2.0 endpoints v0.7.4"
run: |
npx playwright test tests/ncip-server.spec.js \
--config=tests/playwright.config.js \
--workers=1

- name: "[7/13] archives-phase5-admin-ui.spec.js — RiC-CM Phase 5 admin UI v0.7.12"
run: |
npx playwright test tests/archives-phase5-admin-ui.spec.js \
--config=tests/playwright.config.js \
--workers=1

- name: "[8/13] archives-phase6-oai-ric-o.spec.js — OAI-PMH metadataPrefix=ric-o v0.7.12"
run: |
npx playwright test tests/archives-phase6-oai-ric-o.spec.js \
--config=tests/playwright.config.js \
--workers=1

- name: "[9/13] archives-ric-jsonld.spec.js — RiC-O JSON-LD endpoints (Phase 1-4)"
run: |
npx playwright test tests/archives-ric-jsonld.spec.js \
--config=tests/playwright.config.js \
--workers=1

- name: "[10/13] archives-crud.spec.js — archival_units CRUD (#103)"
run: |
npx playwright test tests/archives-crud.spec.js \
--config=tests/playwright.config.js \
--workers=1

- name: "[11/13] archives-authorities.spec.js — authority_records CRUD"
run: |
npx playwright test tests/archives-authorities.spec.js \
--config=tests/playwright.config.js \
--workers=1

- name: "[12/13] archives-upload-assets.spec.js — cover/document upload pipeline"
# The upload-assets spec picks 3 archival_units from the
# `E2E_SEED_*` batch — it doesn't seed them itself. The seed
# lives in archives-seed-50.spec.js (50 rows, all 4 levels,
# full option matrix). On a fresh CI install no E2E_SEED_* row
# exists yet, so the upload spec's beforeAll fails with
# "no seeded row available for PDF test". Seed-then-upload
# in the same step keeps the dependency local — no test-order
# coupling with other steps, no separate seed step to renumber.
run: |
npx playwright test tests/archives-seed-50.spec.js \
--config=tests/playwright.config.js \
--workers=1
npx playwright test tests/archives-upload-assets.spec.js \
--config=tests/playwright.config.js \
--workers=1

- name: "[13/13] archives-pr-extended.spec.js — extended CRUD + CSRF regression"
# The pr-extended spec creates stub files directly via
# fs.writeFileSync under public/uploads/archives/documents/ to
# drive the IIIF rendering[] assertions. The previous step
# ([12/13] upload-assets) ran real uploads through Apache,
# which created subdirectories owned by www-data — the runner
# process can no longer write into them, so the test EACCES'es
# before the first assertion. Re-chmod the uploads tree right
# before this step (idempotent, no-op when already 777).
run: |
sudo chmod -R 777 "${GITHUB_WORKSPACE}/public/uploads" || true
npx playwright test tests/archives-pr-extended.spec.js \
--config=tests/playwright.config.js \
--workers=1

# ── Orphan-spec backfill: tests that were authored against a fresh
# install but never wired into the CI workflow. Adding them as
# `continue-on-error: true` so we get the signal from a clean
# fixture without gating the merge on tests that may have flake-
# or design-level issues unrelated to the merging PR. Once the
# individual specs prove stable (see #144 follow-up triage), drop
# the continue-on-error and promote to a numbered step. ──────────
- name: "[orphan/1] book-form-comprehensive.spec.js"
continue-on-error: true
run: |
npx playwright test tests/book-form-comprehensive.spec.js \
--config=tests/playwright.config.js \
--workers=1
- name: "[orphan/2] code-quality.spec.js"
continue-on-error: true
run: |
npx playwright test tests/code-quality.spec.js \
--config=tests/playwright.config.js \
--workers=1
- name: "[orphan/3] genre-merge-rearrange.spec.js"
continue-on-error: true
run: |
npx playwright test tests/genre-merge-rearrange.spec.js \
--config=tests/playwright.config.js \
--workers=1
- name: "[orphan/4] loan-reservation.spec.js"
continue-on-error: true
run: |
npx playwright test tests/loan-reservation.spec.js \
--config=tests/playwright.config.js \
--workers=1
- name: "[orphan/5] multisource-scraping.spec.js"
continue-on-error: true
run: |
npx playwright test tests/multisource-scraping.spec.js \
--config=tests/playwright.config.js \
--workers=1
- name: "[orphan/6] security-hardening.spec.js"
continue-on-error: true
run: |
npx playwright test tests/security-hardening.spec.js \
--config=tests/playwright.config.js \
--workers=1
- name: "[orphan/7] viaf-authority.spec.js"
continue-on-error: true
run: |
npx playwright test tests/viaf-authority.spec.js \
--config=tests/playwright.config.js \
--workers=1
- name: "[orphan/8] interop-specific.spec.js"
continue-on-error: true
run: |
npx playwright test tests/interop-specific.spec.js \
--config=tests/playwright.config.js \
--workers=1

# ── Artifacts on failure ─────────────────────────────────────────────────
- name: Upload Playwright report
uses: actions/upload-artifact@v4
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -406,6 +406,7 @@ tests/fixtures/*
!tests/fixtures/*.jpg
!tests/fixtures/*.pdf
!tests/fixtures/*.mp3
!tests/fixtures/*.wav
!tests/fixtures/*.csv
!tests/fixtures/*.tsv
!tests/helpers/
Expand Down
Loading
Loading