Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
633 commits
Select commit Hold shift + click to select a range
05ac407
UNIMARC export marks serials and carries their ISSN in 011
fabiodalez-dev Oct 31, 2026
835c429
MARC re-import test deletes the book through the admin bulk delete
fabiodalez-dev Oct 31, 2026
885035e
Mobile closed-today test expects the exact next open day
fabiodalez-dev Oct 31, 2026
d4eb949
Test that the local SRU check treats an implicit and explicit :443 alike
fabiodalez-dev Oct 31, 2026
889fdb2
RDA types E2E runs without BIBFRAME and covers the content override
fabiodalez-dev Oct 31, 2026
a32c400
Catalogue card test checks the MediaBox of every page
fabiodalez-dev Oct 31, 2026
ea76f0f
Minor-features migration test asserts the visit FK anonymises on delete
fabiodalez-dev Oct 31, 2026
255a36d
Calendar permission test POSTs rotate-link as a non-admin
fabiodalez-dev Oct 31, 2026
6112c06
Cataloguing extras test: switch the supplier and RDA modules on
fabiodalez-dev Oct 31, 2026
ea81750
Merge branch 'fix/501-exact-quoted-search' into feat/stocktake
fabiodalez-dev Oct 31, 2026
4d0837f
Merge branch 'feat/stocktake' into feat/marc-bulk
fabiodalez-dev Oct 31, 2026
b3e1c43
Merge branch 'feat/marc-bulk' into feat/minor-slims-features
fabiodalez-dev Oct 31, 2026
190fcc2
Merge branch 'feat/minor-slims-features' into feat/patron-cards-import
fabiodalez-dev Oct 31, 2026
dd6c348
Merge branch 'feat/patron-cards-import' into feat/circulation-policy
fabiodalez-dev Oct 31, 2026
52481e7
Merge branch 'feat/circulation-policy' into feat/closures-calendar
fabiodalez-dev Oct 31, 2026
2b9e2c8
Merge branch 'feat/closures-calendar' into feat/fines-ledger
fabiodalez-dev Oct 31, 2026
f78dd69
Merge branch 'feat/fines-ledger' into test/0.9.0-coverage
fabiodalez-dev Oct 31, 2026
f1c34f5
Merge branch 'test/0.9.0-coverage' into feat/090-feature-toggles
fabiodalez-dev Oct 31, 2026
b52df7f
Merge branch 'feat/090-feature-toggles' into ccr-557910dc-7crzjh
fabiodalez-dev Oct 31, 2026
89b52f0
Merge branch 'ccr-557910dc-7crzjh' into release/0.9.0-rc.1
fabiodalez-dev Oct 31, 2026
dc22152
Migration runner maps the holiday, custom-holiday and toggle sections
fabiodalez-dev Oct 31, 2026
fb23d82
OAI golden files: a UNIMARC serial is a serial
fabiodalez-dev Oct 31, 2026
6f36226
Merge branch 'feat/marc-bulk' into feat/minor-slims-features
fabiodalez-dev Oct 31, 2026
edff1b7
Merge branch 'feat/minor-slims-features' into feat/patron-cards-import
fabiodalez-dev Oct 31, 2026
7977fa4
Merge branch 'feat/patron-cards-import' into feat/circulation-policy
fabiodalez-dev Oct 31, 2026
4af2924
Merge branch 'feat/circulation-policy' into feat/closures-calendar
fabiodalez-dev Oct 31, 2026
2e8e15f
Merge branch 'feat/closures-calendar' into feat/fines-ledger
fabiodalez-dev Oct 31, 2026
9076c6d
Merge branch 'feat/fines-ledger' into test/0.9.0-coverage
fabiodalez-dev Oct 31, 2026
83c8659
Merge branch 'test/0.9.0-coverage' into feat/090-feature-toggles
fabiodalez-dev Oct 31, 2026
1c95fd7
Merge branch 'feat/090-feature-toggles' into ccr-557910dc-7crzjh
fabiodalez-dev Oct 31, 2026
92d10cd
Merge branch 'ccr-557910dc-7crzjh' into release/0.9.0-rc.1
fabiodalez-dev Oct 31, 2026
09c8609
Stocktake resume leaves copies handled after the close alone
fabiodalez-dev Oct 31, 2026
12d9942
CHANGELOG: one migration bullet each for stocktake and MARC
fabiodalez-dev Oct 31, 2026
448e97c
Merge branch 'feat/stocktake' into feat/marc-bulk
fabiodalez-dev Oct 31, 2026
fa2e089
Merge branch 'feat/marc-bulk' into feat/minor-slims-features
fabiodalez-dev Oct 31, 2026
4d2e681
Merge branch 'feat/minor-slims-features' into feat/patron-cards-import
fabiodalez-dev Oct 31, 2026
ff79205
Merge branch 'feat/patron-cards-import' into feat/circulation-policy
fabiodalez-dev Oct 31, 2026
470296e
Merge branch 'feat/circulation-policy' into feat/closures-calendar
fabiodalez-dev Oct 31, 2026
47e4ede
Merge branch 'feat/closures-calendar' into feat/fines-ledger
fabiodalez-dev Oct 31, 2026
49c8ca5
Merge branch 'feat/fines-ledger' into test/0.9.0-coverage
fabiodalez-dev Oct 31, 2026
452de8f
Merge branch 'test/0.9.0-coverage' into feat/090-feature-toggles
fabiodalez-dev Oct 31, 2026
4020870
Merge branch 'feat/090-feature-toggles' into ccr-557910dc-7crzjh
fabiodalez-dev Oct 31, 2026
a4cbe93
Merge branch 'ccr-557910dc-7crzjh' into release/0.9.0-rc.1
fabiodalez-dev Oct 31, 2026
5cd3a38
Calendar controller: each helper sits under its own docblock
fabiodalez-dev Oct 31, 2026
9d69ae2
Merge branch 'feat/090-feature-toggles' into ccr-557910dc-7crzjh
fabiodalez-dev Oct 31, 2026
25ccb3d
Merge branch 'ccr-557910dc-7crzjh' into release/0.9.0-rc.1
fabiodalez-dev Oct 31, 2026
8ccdb6b
Suppliers test: a refused form keeps what was typed
fabiodalez-dev Oct 31, 2026
648427c
Merge branch 'feat/minor-slims-features' into feat/patron-cards-import
fabiodalez-dev Oct 31, 2026
20e9965
Merge branch 'feat/patron-cards-import' into feat/circulation-policy
fabiodalez-dev Oct 31, 2026
99fa4d9
Merge branch 'feat/circulation-policy' into feat/closures-calendar
fabiodalez-dev Oct 31, 2026
869b75f
Merge branch 'feat/closures-calendar' into feat/fines-ledger
fabiodalez-dev Oct 31, 2026
8669433
Merge branch 'feat/fines-ledger' into test/0.9.0-coverage
fabiodalez-dev Oct 31, 2026
89e0b42
Merge branch 'test/0.9.0-coverage' into feat/090-feature-toggles
fabiodalez-dev Oct 31, 2026
064a364
Merge branch 'feat/090-feature-toggles' into ccr-557910dc-7crzjh
fabiodalez-dev Oct 31, 2026
16241f7
Merge branch 'ccr-557910dc-7crzjh' into release/0.9.0-rc.1
fabiodalez-dev Oct 31, 2026
e528b38
UNIMARC export keeps the series ISSN, legacy contributors and altro
fabiodalez-dev Oct 31, 2026
2be0eb9
MARC fill import adds only the other form of the book's own ISBN
fabiodalez-dev Oct 31, 2026
b5ab685
MARC overwrite import removes the cover file it replaces
fabiodalez-dev Oct 31, 2026
92b700d
Stocktake refuses a code longer than the column instead of cutting it
fabiodalez-dev Oct 31, 2026
658c256
Stocktake CSV upload reads whole records and only the first column
fabiodalez-dev Oct 31, 2026
48ac4cf
SRU ISBN lookup falls back to the bare isbn index on unmapped servers
fabiodalez-dev Oct 31, 2026
640b5c6
Stocktake upload records the whole file in one transaction
fabiodalez-dev Oct 31, 2026
c876a09
Stocktake scan page flags a found copy recorded as lost
fabiodalez-dev Oct 31, 2026
931d23d
SRU search reports hits whose records cannot be read
fabiodalez-dev Oct 31, 2026
0a1d8ec
SRU rate limit reserves each request's slot atomically in APCu
fabiodalez-dev Oct 31, 2026
99d1416
Stocktake mark-lost re-checks post-close edits under the book lock
fabiodalez-dev Oct 31, 2026
4fc16bd
Local SRU answers are capped at the same 16 MiB as remote ones
fabiodalez-dev Oct 31, 2026
03fada7
Stocktake mark-lost rolls back when a hold cannot leave the copy
fabiodalez-dev Oct 31, 2026
c76eb65
Copy cataloguing skips disabled servers and caps what the session keeps
fabiodalez-dev Oct 31, 2026
cea9ba0
Single UNIMARC download falls back to the reduced record like the export
fabiodalez-dev Oct 31, 2026
0662df8
ISO 2709 reader refuses directory entries that overlap
fabiodalez-dev Oct 31, 2026
a1cfc56
Stocktake writes the lost-copy audit entry with the loss itself
fabiodalez-dev Oct 31, 2026
f6a6d32
Stocktake PDF dates a cancelled session as cancelled
fabiodalez-dev Oct 31, 2026
0dc32f8
Stocktake PDF export refuses reports over 10000 rows
fabiodalez-dev Oct 31, 2026
a4f0720
MARC import chunks name their preview; retries never duplicate or lie
fabiodalez-dev Oct 31, 2026
b538403
Migration runner skips the tests of sections the SQL does not carry
fabiodalez-dev Oct 31, 2026
f124983
Tidy two review fixes flagged by PHPStan level 5
fabiodalez-dev Oct 31, 2026
9611a6b
Merge branch 'feat/stocktake' into feat/marc-bulk
fabiodalez-dev Oct 31, 2026
016fd4d
Merge branch 'feat/marc-bulk' into feat/minor-slims-features
fabiodalez-dev Oct 31, 2026
fff09ee
Merge branch 'feat/minor-slims-features' into feat/patron-cards-import
fabiodalez-dev Oct 31, 2026
fae37f2
Merge branch 'feat/patron-cards-import' into feat/circulation-policy
fabiodalez-dev Oct 31, 2026
630c086
Merge branch 'feat/circulation-policy' into feat/closures-calendar
fabiodalez-dev Oct 31, 2026
2bf28f1
Merge branch 'feat/closures-calendar' into feat/fines-ledger
fabiodalez-dev Oct 31, 2026
7a34923
Merge branch 'feat/fines-ledger' into test/0.9.0-coverage
fabiodalez-dev Oct 31, 2026
319f8d5
Merge branch 'test/0.9.0-coverage' into feat/090-feature-toggles
fabiodalez-dev Oct 31, 2026
2018581
Merge branch 'feat/090-feature-toggles' into ccr-557910dc-7crzjh
fabiodalez-dev Oct 31, 2026
268126e
Merge branch 'ccr-557910dc-7crzjh' into release/0.9.0-rc.1
fabiodalez-dev Oct 31, 2026
8cc1f5c
User import refuses a column mapping with non-canonical keys
fabiodalez-dev Oct 31, 2026
a20cc2d
User import error report says when it was truncated
fabiodalez-dev Oct 31, 2026
398363e
SRU copy cataloguing search retries a transient transport failure
fabiodalez-dev Oct 31, 2026
4852747
Test that the local SRU check compares the path too
fabiodalez-dev Oct 31, 2026
002a5b2
A retried last import block replays the final answer
fabiodalez-dev Oct 31, 2026
e8eedcf
Stocktake session page shows the session's own event history
fabiodalez-dev Oct 31, 2026
ccabd2b
Whole-year closure guard counts weekly closed days and covers the preset
fabiodalez-dev Oct 31, 2026
d76e3cb
An interrupted user import can be resumed, and is never replaced whil…
fabiodalez-dev Oct 31, 2026
b4d1b28
Stocktake PDF report gets a test that reads its section rows
fabiodalez-dev Oct 31, 2026
aee246d
ICS import: a yearly rule recurs only on DTSTART's day and without EX…
fabiodalez-dev Oct 31, 2026
bfd1972
A closures read that fails throws instead of yielding an empty calendar
fabiodalez-dev Oct 31, 2026
d6521a0
Request calendar crosses a closure of any length to the next open day
fabiodalez-dev Oct 31, 2026
df8e6e2
Patron photo files never outlive their reference
fabiodalez-dev Oct 31, 2026
8515e31
Patron photo test removes its scratch image even when a check fails
fabiodalez-dev Oct 31, 2026
5f3c546
Loan request answer carries the server's pickup deadline and written …
fabiodalez-dev Oct 31, 2026
e258da4
Pickup emails count the pickup days with the copy's branch closures
fabiodalez-dev Oct 31, 2026
7f4abc8
Closures admin E2E keeps the original weekly closed days across a kil…
fabiodalez-dev Oct 31, 2026
d38374a
Closures E2E: robust to existing closures and a smaller max duration
fabiodalez-dev Oct 31, 2026
5962b72
Card PDF test checks the Code128 and QR symbols, not just the code text
fabiodalez-dev Oct 31, 2026
7c4acaa
Card E2E checks the back of every card on a multi-card sheet
fabiodalez-dev Oct 31, 2026
35850c4
Patron photo E2E covers a custom role and the delete of a reader with…
fabiodalez-dev Oct 31, 2026
cb1882a
Merge branch 'feat/stocktake' into feat/marc-bulk
fabiodalez-dev Oct 31, 2026
35ef7ef
Merge branch 'feat/marc-bulk' into feat/minor-slims-features
fabiodalez-dev Oct 31, 2026
7c7e837
Merge branch 'feat/minor-slims-features' into feat/patron-cards-import
fabiodalez-dev Oct 31, 2026
1bee653
Merge branch 'feat/patron-cards-import' into feat/circulation-policy
fabiodalez-dev Oct 31, 2026
212a979
Merge branch 'feat/circulation-policy' into feat/closures-calendar
fabiodalez-dev Oct 31, 2026
74cdb84
Merge branch 'feat/closures-calendar' into feat/fines-ledger
fabiodalez-dev Oct 31, 2026
248f13e
Merge branch 'feat/fines-ledger' into test/0.9.0-coverage
fabiodalez-dev Oct 31, 2026
2ef276b
Merge branch 'test/0.9.0-coverage' into feat/090-feature-toggles
fabiodalez-dev Oct 31, 2026
95e9b9d
Merge branch 'feat/090-feature-toggles' into ccr-557910dc-7crzjh
fabiodalez-dev Oct 31, 2026
c672f79
Merge branch 'ccr-557910dc-7crzjh' into release/0.9.0-rc.1
fabiodalez-dev Oct 31, 2026
07a839f
Loan coherence audit matches the reservation auto-approval call by it…
fabiodalez-dev Oct 31, 2026
94a924b
Calendar tests follow the closures read policy and leave no preset be…
fabiodalez-dev Oct 31, 2026
e769aa2
Merge branch 'feat/closures-calendar' into feat/fines-ledger
fabiodalez-dev Oct 31, 2026
98983e0
Merge branch 'feat/fines-ledger' into test/0.9.0-coverage
fabiodalez-dev Oct 31, 2026
5390a1d
Merge branch 'test/0.9.0-coverage' into feat/090-feature-toggles
fabiodalez-dev Oct 31, 2026
0213822
Merge branch 'feat/090-feature-toggles' into ccr-557910dc-7crzjh
fabiodalez-dev Oct 31, 2026
5d1acdc
Merge branch 'ccr-557910dc-7crzjh' into release/0.9.0-rc.1
fabiodalez-dev Oct 31, 2026
18213f2
Supplier search folds every combining mark and keeps a typed U+E000
fabiodalez-dev Oct 31, 2026
c6fb106
0.9.0 stack E2E teardown puts back exactly what was there
fabiodalez-dev Oct 31, 2026
f8ccfb0
Merge branch 'test/0.9.0-coverage' into feat/090-feature-toggles
fabiodalez-dev Oct 31, 2026
5f355c7
Merge branch 'feat/090-feature-toggles' into ccr-557910dc-7crzjh
fabiodalez-dev Oct 31, 2026
ca76c0f
Merge branch 'ccr-557910dc-7crzjh' into release/0.9.0-rc.1
fabiodalez-dev Oct 31, 2026
8596a88
0.9.0 stack tests pin exact values instead of loose bounds
fabiodalez-dev Oct 31, 2026
52d88ee
Patron type edits keep the fine fields an older form does not send
fabiodalez-dev Oct 31, 2026
a83ebf6
Ledger desk writes refuse a request without its request_key
fabiodalez-dev Oct 31, 2026
f6a8d30
Calendar page warns when the saved holiday country is no longer known
fabiodalez-dev Oct 31, 2026
da3fc5f
Ledger pages stay stable when a movement is recorded while paging
fabiodalez-dev Oct 31, 2026
1ea59d3
Put the #301 auto-approval docblock back on autoApproveLoanRequest
fabiodalez-dev Oct 31, 2026
0f7104a
Put the ISO 2709 serializer docblock back on bookToIso2709
fabiodalez-dev Oct 31, 2026
bc5a081
Translating a stored Italian template keeps its active flag
fabiodalez-dev Oct 31, 2026
14ab0e5
Fines-ledger migration test refuses a sandbox named like the real dat…
fabiodalez-dev Oct 31, 2026
e5c3888
Ledger schema probe caches only a positive answer
fabiodalez-dev Oct 31, 2026
129e57a
Upgrade finishes the legacy penalty conversion right after the migrat…
fabiodalez-dev Oct 31, 2026
471b206
User import refuses start, blocks and cancel from a replaced preview
fabiodalez-dev Oct 31, 2026
5a24c5b
OpenAPI MetaObject declares has_more, count and limit
fabiodalez-dev Oct 31, 2026
1c7a521
Debt block spec refuses a PHP subprocess pointed at another database
fabiodalez-dev Oct 31, 2026
d5bbff3
Receipt 404 spec asks for another reader's real payment
fabiodalez-dev Oct 31, 2026
9ef3d3c
Patron ledger test cleans up only its own run
fabiodalez-dev Oct 31, 2026
9c392be
Merge branch 'feat/marc-bulk' into feat/minor-slims-features
fabiodalez-dev Oct 31, 2026
6c2ba9d
Merge branch 'feat/minor-slims-features' into feat/patron-cards-import
fabiodalez-dev Oct 31, 2026
0a94bad
Merge branch 'feat/patron-cards-import' into feat/circulation-policy
fabiodalez-dev Oct 31, 2026
c8ed5c9
Merge branch 'feat/circulation-policy' into feat/closures-calendar
fabiodalez-dev Oct 31, 2026
400a207
Merge branch 'feat/closures-calendar' into feat/fines-ledger
fabiodalez-dev Oct 31, 2026
8d3bbff
Merge branch 'feat/fines-ledger' into test/0.9.0-coverage
fabiodalez-dev Oct 31, 2026
45f486e
Merge branch 'test/0.9.0-coverage' into feat/090-feature-toggles
fabiodalez-dev Oct 31, 2026
be1eb83
Merge branch 'feat/090-feature-toggles' into ccr-557910dc-7crzjh
fabiodalez-dev Oct 31, 2026
c913e2a
Merge branch 'ccr-557910dc-7crzjh' into release/0.9.0-rc.1
fabiodalez-dev Oct 31, 2026
6543889
User import closes a run whose staged file expired into the import hi…
fabiodalez-dev Oct 31, 2026
bcad522
SRU retries skip timeouts and oversized answers
fabiodalez-dev Oct 31, 2026
25332ce
Merge branch 'feat/marc-bulk' into feat/minor-slims-features
fabiodalez-dev Oct 31, 2026
e746445
Merge branch 'feat/minor-slims-features' into feat/patron-cards-import
fabiodalez-dev Oct 31, 2026
2c088df
Merge branch 'feat/patron-cards-import' into feat/circulation-policy
fabiodalez-dev Oct 31, 2026
0ab9bed
Merge branch 'feat/circulation-policy' into feat/closures-calendar
fabiodalez-dev Oct 31, 2026
bf1c2a1
Merge branch 'feat/closures-calendar' into feat/fines-ledger
fabiodalez-dev Oct 31, 2026
e93849c
Merge branch 'feat/fines-ledger' into test/0.9.0-coverage
fabiodalez-dev Oct 31, 2026
921350f
Merge branch 'test/0.9.0-coverage' into feat/090-feature-toggles
fabiodalez-dev Oct 31, 2026
9e638e4
Merge branch 'feat/090-feature-toggles' into ccr-557910dc-7crzjh
fabiodalez-dev Oct 31, 2026
b128f99
Merge branch 'ccr-557910dc-7crzjh' into release/0.9.0-rc.1
fabiodalez-dev Oct 31, 2026
ad28533
Stale user import preview is explained even when the mapping step is …
fabiodalez-dev Oct 31, 2026
be3aeee
Merge branch 'feat/patron-cards-import' into feat/circulation-policy
fabiodalez-dev Oct 31, 2026
90de006
Merge branch 'feat/circulation-policy' into feat/closures-calendar
fabiodalez-dev Oct 31, 2026
c877a3e
Merge branch 'feat/closures-calendar' into feat/fines-ledger
fabiodalez-dev Oct 31, 2026
053682a
Merge branch 'feat/fines-ledger' into test/0.9.0-coverage
fabiodalez-dev Oct 31, 2026
6f6cdc0
Merge branch 'test/0.9.0-coverage' into feat/090-feature-toggles
fabiodalez-dev Oct 31, 2026
44a76d9
Merge branch 'feat/090-feature-toggles' into ccr-557910dc-7crzjh
fabiodalez-dev Oct 31, 2026
c66fc17
Merge branch 'ccr-557910dc-7crzjh' into release/0.9.0-rc.1
fabiodalez-dev Oct 31, 2026
3866e48
User import page: history link only for catalog.manage, finished run …
fabiodalez-dev Nov 1, 2026
2ee2651
User import: send_invites is a real boolean, no per-row sets in the s…
fabiodalez-dev Nov 1, 2026
f111fbe
SRU client gives up on blocked requests and reports unreadable hits
fabiodalez-dev Nov 1, 2026
4e5a2ed
Calendar admin: an update re-checks its closure under the lock, ICS w…
fabiodalez-dev Nov 1, 2026
02b4dae
User import: a run closed without its history entry is never announce…
fabiodalez-dev Nov 1, 2026
c8f1a3d
Copy cataloguing caps the MARC detail it sends back
fabiodalez-dev Nov 1, 2026
92fada0
MARC export refuses ids sent as an array
fabiodalez-dev Nov 1, 2026
8aa4d92
Deleting a reader removes the row and the photo file together
fabiodalez-dev Nov 1, 2026
41399a6
Calendar: EXDATE matches DTSTART's time, junk dates are refused, fail…
fabiodalez-dev Nov 1, 2026
26ae4b3
Bulk card print above the limit is refused, never cut short
fabiodalez-dev Nov 1, 2026
c21ecdf
ISO 2709 detection finds the directory end past 4096 bytes
fabiodalez-dev Nov 1, 2026
c47b81f
MARC import keeps the previous preview until the new file is staged
fabiodalez-dev Nov 1, 2026
9d7962a
Loan request: the pickup estimate keeps the copy's branch when the st…
fabiodalez-dev Nov 1, 2026
d98a1ed
Patron photo: a failed or short write leaves no partial file behind
fabiodalez-dev Nov 1, 2026
0162a39
Book request: the longest return date stops at the last loaded availa…
fabiodalez-dev Nov 1, 2026
01efbe5
Test the direction of the EXIF 6 and 8 rotations
fabiodalez-dev Nov 1, 2026
cd5c6e1
Calendar loan test: zero-config dates avoid foreign closures, preset …
fabiodalez-dev Nov 1, 2026
ca42dd8
UNIMARC export keeps both ISBNs, every language and a distinct genre …
fabiodalez-dev Nov 1, 2026
ea9590f
Closures E2E: restore moved pickup deadlines, expect foreign closures…
fabiodalez-dev Nov 1, 2026
a52e44e
User import blocks resume at a byte offset instead of re-reading the …
fabiodalez-dev Nov 1, 2026
0adf562
Document why a resumable import keeps its staged file past the sweep
fabiodalez-dev Nov 1, 2026
f01a4a4
MARC import matches the right book and keeps its identifiers coherent
fabiodalez-dev Nov 1, 2026
9b44abe
MARC import page accepts .marcxml and words the copy notice exactly
fabiodalez-dev Nov 1, 2026
c4cd763
Single UNIMARC download says when its record was reduced or cut
fabiodalez-dev Nov 1, 2026
642abd1
A stored row of a vanished holiday is listed as suspended
fabiodalez-dev Nov 1, 2026
412826f
Copy cataloguing answers a retried import instead of running it twice
fabiodalez-dev Nov 1, 2026
0470b7d
ICS import: the whole-year guard carries its state from event to event
fabiodalez-dev Nov 1, 2026
294f79b
Debt block fails closed on a probe error and counts unconverted legac…
fabiodalez-dev Nov 1, 2026
334ac91
Closed-days suite restores closure descriptions byte for byte
fabiodalez-dev Nov 1, 2026
8a5b3e4
Stocktake code import reads only the code cell, with the quotes it holds
fabiodalez-dev Nov 1, 2026
7bbb312
SRU server writes the UNIMARC genre as a 608 $2 local too
fabiodalez-dev Nov 1, 2026
c096cf1
Stocktake scan reads the loan status after a return in progress commits
fabiodalez-dev Nov 1, 2026
c9b59f6
Stocktake CSV report is streamed and the PDF checks the rows it renders
fabiodalez-dev Nov 1, 2026
b43a046
Stocktake PDF test prints a 100-character code whole
fabiodalez-dev Nov 1, 2026
b6126a6
Integration suite empties the default patron type fines for its run
fabiodalez-dev Nov 1, 2026
204394b
Source guard sees a placeholder wrapped in any function after LIKE
fabiodalez-dev Nov 1, 2026
0d6e0e7
Review-fix specs assert what the page shows, not only the API answer
fabiodalez-dev Nov 1, 2026
fd6b984
Merge branch 'feat/stocktake' into feat/marc-bulk
fabiodalez-dev Nov 1, 2026
df084f8
Merge branch 'feat/marc-bulk' into feat/minor-slims-features
fabiodalez-dev Nov 1, 2026
717bd0e
Merge branch 'feat/minor-slims-features' into feat/patron-cards-import
fabiodalez-dev Nov 1, 2026
f3c6e5e
Merge branch 'feat/patron-cards-import' into feat/circulation-policy
fabiodalez-dev Nov 1, 2026
ac36cca
Merge branch 'feat/circulation-policy' into feat/closures-calendar
fabiodalez-dev Nov 1, 2026
d3737da
Merge branch 'feat/closures-calendar' into feat/fines-ledger
fabiodalez-dev Nov 1, 2026
dd98c6b
Merge branch 'feat/fines-ledger' into test/0.9.0-coverage
fabiodalez-dev Nov 1, 2026
4eb5f51
Merge branch 'test/0.9.0-coverage' into feat/090-feature-toggles
fabiodalez-dev Nov 1, 2026
b482d07
Merge branch 'feat/090-feature-toggles' into ccr-557910dc-7crzjh
fabiodalez-dev Nov 1, 2026
df3e9fd
Merge branch 'ccr-557910dc-7crzjh' into release/0.9.0-rc.1
fabiodalez-dev Nov 1, 2026
4aef5ad
Unconverted legacy penalties block nobody while loss penalties are off
fabiodalez-dev Nov 1, 2026
59d8c76
Merge branch 'feat/090-feature-toggles' into ccr-557910dc-7crzjh
fabiodalez-dev Nov 1, 2026
4411496
Merge branch 'ccr-557910dc-7crzjh' into release/0.9.0-rc.1
fabiodalez-dev Nov 1, 2026
72524a1
A stocktake file upload no longer locks loan and copy rows
fabiodalez-dev Nov 1, 2026
c70ef66
The upload form comes back after a cancel that could not be logged
fabiodalez-dev Nov 1, 2026
ad79e86
Merge branch 'feat/stocktake' into feat/marc-bulk
fabiodalez-dev Nov 1, 2026
ed23ff6
Merge branch 'feat/marc-bulk' into feat/minor-slims-features
fabiodalez-dev Nov 1, 2026
c1c6eb1
Merge branch 'feat/minor-slims-features' into feat/patron-cards-import
fabiodalez-dev Nov 1, 2026
57e931f
Merge branch 'feat/patron-cards-import' into feat/circulation-policy
fabiodalez-dev Nov 1, 2026
220118b
Merge branch 'feat/circulation-policy' into feat/closures-calendar
fabiodalez-dev Nov 1, 2026
0a158f6
Merge branch 'feat/closures-calendar' into feat/fines-ledger
fabiodalez-dev Nov 1, 2026
27292ed
Merge branch 'feat/fines-ledger' into test/0.9.0-coverage
fabiodalez-dev Nov 1, 2026
f7e057c
Merge branch 'test/0.9.0-coverage' into feat/090-feature-toggles
fabiodalez-dev Nov 1, 2026
689b555
Merge branch 'feat/090-feature-toggles' into ccr-557910dc-7crzjh
fabiodalez-dev Nov 1, 2026
96881d0
Merge branch 'ccr-557910dc-7crzjh' into release/0.9.0-rc.1
fabiodalez-dev Nov 1, 2026
228abca
Book request: a late start still reaches its full loan window
fabiodalez-dev Nov 1, 2026
f2a5beb
Merge branch 'feat/closures-calendar' into feat/fines-ledger
fabiodalez-dev Nov 1, 2026
d969098
Merge branch 'feat/fines-ledger' into test/0.9.0-coverage
fabiodalez-dev Nov 1, 2026
053ee91
Merge branch 'test/0.9.0-coverage' into feat/090-feature-toggles
fabiodalez-dev Nov 1, 2026
d1a99af
Merge branch 'feat/090-feature-toggles' into ccr-557910dc-7crzjh
fabiodalez-dev Nov 1, 2026
93c2585
Merge branch 'ccr-557910dc-7crzjh' into release/0.9.0-rc.1
fabiodalez-dev Nov 1, 2026
a26a4ed
Installer: stop warning about triggers that were created
fabiodalez-dev Nov 1, 2026
704c726
Release gate: accept a CodeRabbit skip caused only by its file limit
fabiodalez-dev Nov 1, 2026
32de1eb
Trigger import test: never drop the sandbox database
fabiodalez-dev Nov 1, 2026
5a4eb1d
Merge remote-tracking branch 'origin/fix/installer-trigger-false-warn…
fabiodalez-dev Nov 1, 2026
23fa2dd
CHANGELOG: installer trigger warning fix in 0.9.0-rc.1
fabiodalez-dev Nov 1, 2026
57959df
Installer: name no cause the trigger warning cannot know
fabiodalez-dev Nov 1, 2026
803c7eb
Installer: name no cause the trigger warning cannot know
fabiodalez-dev Nov 1, 2026
19e7c60
Merge remote-tracking branch 'origin/fix/installer-trigger-false-warn…
fabiodalez-dev Nov 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/workflows/ci-browser-security.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ concurrency:
jobs:
browser-security:
name: Packaged app · 3 browsers · axe-core · OWASP ZAP
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
timeout-minutes: 75
permissions:
contents: read # Build and scan the checked-out application.
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci-database-compatibility.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ concurrency:
jobs:
database:
name: ${{ matrix.database.name }} schema and behavior
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
timeout-minutes: 35
permissions:
contents: read # Read application, schema and test sources.
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ci-deep-regression.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ concurrency:
jobs:
regression:
name: Browser regression shard ${{ matrix.shard }}/4
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
timeout-minutes: 120
strategy:
fail-fast: false
Expand Down Expand Up @@ -250,7 +250,7 @@ jobs:

installer-locales:
name: Fresh installer (${{ matrix.locale }})
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
timeout-minutes: 45
strategy:
fail-fast: false
Expand Down
300 changes: 299 additions & 1 deletion .github/workflows/ci-e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ concurrency:
jobs:
e2e:
name: Full E2E suite (Playwright · Apache · MySQL)
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
timeout-minutes: 60

services:
Expand Down Expand Up @@ -389,3 +389,301 @@ jobs:
name: apache-error-log-${{ github.run_id }}
path: /var/log/apache2/pinakes-error.log
retention-days: 7

# ── 0.9.0 feature suites ──────────────────────────────────────────────────
# Every Playwright suite added by the 0.9.0 stack (circulation rules, patron
# types, closures calendar, fines ledger, debt block, stocktake, MARC, cards,
# patron photo, user import, statistics, suppliers, RDA types, #501 quoted
# search). Same environment as the deep regression shards — Apache/mod_php,
# MySQL, Mailpit behind a real sendmail transport, the CI MySQL wrapper and
# poppler for the PDF assertions — on a fresh install bootstrapped by the
# full lifecycle suite. Two groups run in parallel; each list is explicit so
# a new spec has to be added here on purpose.
feature-090:
name: 0.9.0 feature suites (${{ matrix.group }})
runs-on: ubuntu-24.04
timeout-minutes: 90
strategy:
fail-fast: false
matrix:
include:
- group: circulation
specs: >-
tests/circulation-card.spec.js
tests/circulation-consultation.spec.js
tests/circulation-interop.spec.js
tests/circulation-patron-types.spec.js
tests/circulation-reservations.spec.js
tests/circulation-rules-matrix.spec.js
tests/circulation-settings-access.spec.js
tests/closures-calendar-admin.spec.js
tests/closures-calendar-circulation.spec.js
tests/closures-calendar-loans.spec.js
tests/debt-block.spec.js
tests/feature-toggle-circulation-rules.spec.js
tests/feature-toggle-closures-calendar.spec.js
tests/feature-toggle-fines.spec.js
tests/fines-closed-days.spec.js
tests/fines-ledger.spec.js
tests/fines-patron-types.spec.js
tests/holidays-preset.spec.js
tests/holidays-world.spec.js
tests/stack-090-integration.spec.js
tests/stack-090-review-fixes.spec.js
tests/stack-090-zero-config.spec.js
- group: catalogue
specs: >-
tests/attendance-090.spec.js
tests/catalogue-cards-090.spec.js
tests/feature-toggle-catalogue-cards.spec.js
tests/feature-toggles-followups.spec.js
tests/feature-toggle-marc.spec.js
tests/feature-toggle-patron-cards.spec.js
tests/feature-toggle-rda-types.spec.js
tests/feature-toggle-stocktake.spec.js
tests/feature-toggle-suppliers.spec.js
tests/feature-toggle-user-import.spec.js
tests/feature-toggle-visitor-log.spec.js
tests/feature-toggles-settings.spec.js
tests/inventory-stocktake.spec.js
tests/issue-501-admin-lists.spec.js
tests/issue-501-exact-quoted-search.spec.js
tests/issue-501-name-pages.spec.js
tests/issue-501-quoted-hint.spec.js
tests/issue-501-quoted-new-author.spec.js
tests/issue-501-search-fields.spec.js
tests/issue-501-search-hint.spec.js
tests/marc-bulk-export.spec.js
tests/marc-bulk-import.spec.js
tests/marc-copy-cataloging.spec.js
tests/patron-cards.spec.js
tests/patron-photo.spec.js
tests/rda-types-090.spec.js
tests/statistics-090.spec.js
tests/suppliers-090.spec.js
tests/user-import.spec.js

services:
mysql:
image: mysql:8.0@sha256:7dcddc01f13bab2f15cde676d44d01f61fc9f99fe7785e86196dfc07d358ae2b
env:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: pinakes_test
ports:
- 3306:3306
options: >-
--health-cmd="mysqladmin ping -h 127.0.0.1"
--health-interval=10s
--health-timeout=5s
--health-retries=10
mailpit:
image: axllent/mailpit:v1.21@sha256:81370195cd4a0eab9604d17c2617a7525b0486f9365555253b6c5376c6350f1a
ports:
- 1025:1025
- 8025:8025

env:
E2E_BASE_URL: http://localhost:8081
APP_URL: http://localhost:8081
E2E_ADMIN_EMAIL: admin@pinakes.test
E2E_ADMIN_PASS: Test1234!
E2E_DB_HOST: 127.0.0.1
E2E_DB_PORT: 3306
E2E_DB_USER: root
E2E_DB_PASS: root
E2E_DB_NAME: pinakes_test
E2E_INSTALL_ROOT: ${{ github.workspace }}
MAILPIT_API: http://127.0.0.1:8025/api/v1
E2E_PHP_UPLOAD_MAX_BYTES: 8388608
E2E_PHP_POST_MAX_BYTES: 10485760

steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
persist-credentials: false

- name: Install Apache, PHP module, MySQL client, mail transport and poppler
run: |
# This job never installs Google Chrome. Remove its hosted-runner
# apt source before the first refresh so mirror syncs cannot break CI.
sudo rm -f /etc/apt/sources.list.d/google-chrome.list
sudo apt-get update -q
# poppler-utils: patron-cards and patron-photo read the generated
# PDFs back with pdftotext/pdfinfo/pdfimages.
sudo apt-get install -y apache2 libapache2-mod-php php-apcu default-mysql-client msmtp-mta poppler-utils
sudo a2enmod rewrite headers env
php_module="$(find /etc/apache2/mods-available -maxdepth 1 -name 'php*.load' -printf '%f\n' | sed 's/\.load$//' | sort -V | tail -n1)"
[ -z "${php_module}" ] || sudo a2enmod "${php_module}"
sudo a2dissite 000-default || true
sudo tee /etc/msmtprc >/dev/null <<'EOF'
defaults
account default
host 127.0.0.1
port 1025
tls off
from pinakes-ci@localhost
EOF
sudo chmod 644 /etc/msmtprc
while IFS= read -r conf_dir; do
sudo tee "${conf_dir}/99-pinakes-ci.ini" >/dev/null <<'EOF'
sendmail_path = "/usr/bin/msmtp -t"
upload_max_filesize = 8M
post_max_size = 10M
apc.enable=1
apc.enable_cli=1
EOF
done < <(find /etc/php -type d -path '*/conf.d' | sort -u)

- name: Setup PHP 8.2
uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # 2.37.2
with:
php-version: '8.2'
extensions: mysqli, mbstring, json, curl, openssl, zip, gd, intl, xml, apcu
ini-values: apc.enable=1, apc.enable_cli=1
coverage: none

- name: Setup Node 22
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
with:
node-version: '22'
cache: npm

- name: Install locked dependencies and Chromium
run: |
composer install --no-interaction --prefer-dist --no-dev --optimize-autoloader
npm ci --silent
npx playwright install chromium --with-deps

- name: Route legacy MySQL test clients to the service container
run: echo "${GITHUB_WORKSPACE}/scripts/ci-bin" >> "${GITHUB_PATH}"

- name: Verify test coverage policy
run: npm run test:ci-policy

- name: Configure Apache on port 8081
env:
WORKSPACE: ${{ github.workspace }}
run: |
sudo tee /etc/apache2/sites-available/pinakes.conf >/dev/null <<EOF
Listen 8081
<VirtualHost *:8081>
ServerName localhost
DocumentRoot ${WORKSPACE}/public
SetEnv PINAKES_E2E_BYPASS_RATE_LIMIT 1
SetEnv PINAKES_E2E_SCRAPER_STUB 1
# E2E only — arms GET /_e2e/flush-cache so specs that write to the
# DB directly can invalidate the page cache; 404s when unset.
SetEnv PINAKES_E2E_CACHE_FLUSH 1
<Directory "${WORKSPACE}/public">
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog \${APACHE_LOG_DIR}/pinakes-error.log
CustomLog \${APACHE_LOG_DIR}/pinakes-access.log combined
</VirtualHost>
EOF
sudo a2ensite pinakes
sudo apachectl configtest

- name: Grant runtime permissions and start Apache
env:
WORKSPACE: ${{ github.workspace }}
run: |
path="${WORKSPACE}"
while [ "${path}" != "/" ]; do
sudo chmod o+x "${path}"
path="$(dirname "${path}")"
done
sudo chmod 777 "${WORKSPACE}"
sudo chmod -R 777 "${WORKSPACE}/storage"
sudo mkdir -p "${WORKSPACE}/public/uploads"
sudo chmod -R 777 "${WORKSPACE}/public/uploads"
sudo systemctl start apache2
for _ in $(seq 1 30); do
curl -sf -o /dev/null http://localhost:8081/installer/ && exit 0
sleep 1
done
sudo cat /var/log/apache2/pinakes-error.log || true
exit 1

- name: Bootstrap a complete fresh installation
env:
PLAYWRIGHT_JSON_OUTPUT_FILE: test-results/bootstrap-${{ matrix.group }}.json
PLAYWRIGHT_HTML_OUTPUT_DIR: playwright-report-bootstrap-${{ matrix.group }}
run: npx playwright test tests/full-test.spec.js --config=tests/playwright.ci.config.js --workers=1

- name: Audit bootstrap failures, flakes and suspicious skips
if: always()
env:
RESULT_FILE: test-results/bootstrap-${{ matrix.group }}.json
run: node scripts/ci-audit-playwright-results.js "$RESULT_FILE"

- name: Seed deterministic cross-suite fixtures
env:
E2E_RUN_SEED: '1'
E2E_OFFLINE_SEED: '1'
PLAYWRIGHT_JSON_OUTPUT_FILE: test-results/setup-${{ matrix.group }}.json
PLAYWRIGHT_HTML_OUTPUT_DIR: playwright-report-setup-${{ matrix.group }}
run: |
npx playwright test \
tests/interop-00-activate-plugins.spec.js \
tests/archives-seed-50.spec.js \
tests/seed-catalog.spec.js \
tests/persistent-seed-crud.spec.js \
--config=tests/playwright.ci.config.js \
--workers=1
sudo chmod -R 777 "${GITHUB_WORKSPACE}/storage"
sudo chmod -R 777 "${GITHUB_WORKSPACE}/public/uploads"
# The CLI-level helpers (app clock, migrations) read the same
# throwaway CI credentials the installer protected from Apache users.
sudo chmod 640 "${GITHUB_WORKSPACE}/.env"
sudo chgrp "$(id -gn)" "${GITHUB_WORKSPACE}/.env"

- name: Audit setup fixtures
if: always()
env:
RESULT_FILE: test-results/setup-${{ matrix.group }}.json
run: node scripts/ci-audit-playwright-results.js "$RESULT_FILE"

- name: Run the 0.9.0 ${{ matrix.group }} suites
id: feature-suites
env:
SPECS: ${{ matrix.specs }}
GROUP: ${{ matrix.group }}
PLAYWRIGHT_JSON_OUTPUT_FILE: test-results/feature-090-${{ matrix.group }}.json
PLAYWRIGHT_HTML_OUTPUT_DIR: playwright-report-feature-090-${{ matrix.group }}
run: |
read -r -a spec_files <<< "${SPECS}"
for spec in "${spec_files[@]}"; do
[ -f "${spec}" ] || { echo "Listed spec does not exist: ${spec}"; exit 1; }
done
printf 'Running %s 0.9.0 specs (%s)\n' "${#spec_files[@]}" "${GROUP}"
npx playwright test "${spec_files[@]}" \
--config=tests/playwright.ci.config.js \
--workers=1

- name: Audit failures, flakes and skips (zero skips allowed)
if: always() && steps.feature-suites.outcome != 'skipped'
env:
RESULT_FILE: test-results/feature-090-${{ matrix.group }}.json
# The shared audit tolerates skips with an environmental reason.
# These suites were written for this environment: every test runs.
PLAYWRIGHT_MAX_SKIPPED: '0'
run: node scripts/ci-audit-playwright-results.js "$RESULT_FILE"

- name: Upload browser evidence
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
if: always()
with:
name: feature-090-${{ matrix.group }}-${{ github.run_id }}
path: |
playwright-report-feature-090-${{ matrix.group }}/
playwright-report-bootstrap-${{ matrix.group }}/
playwright-report-setup-${{ matrix.group }}/
test-results/
storage/logs/app.log
/var/log/apache2/pinakes-error.log
/var/log/apache2/pinakes-access.log
retention-days: 14
if-no-files-found: warn
Loading
Loading