✂️ Refactor
- api: give ServerPackGeneration a place for scan findings (35e6e66)
- api: give the modpack malware scan an observable seam (8b108fb)
- api: make ServerPackHandler.run's security scan injectable (a260780)
- app: give DatabaseStorageService the delete it never had (9cd0297)
📔 Docs
- analyse test depth and residual defects in the upload pass (f377983)
- audit the upload/check/storage pass against the conventions (e768516)
- correct four doc comments that described code that does not exist (3fb0333)
- mark the size row as app-scoped, not published-API (03ba296)
- record how each audit and analysis finding was closed (d2a2c46)
- record the new test seams, the springdoc correction, and B41/B42 (d5ec010)
- record the test-database follow-up and refresh the app count (c648840)
- record the upload/check/storage pass and refresh the counts (ea22bf6)
- api: document SecurityScans' companion instead of leaving it bare (310494e)
- api: document the last two undocumented companions (4940f18)
- api: say plainly that checkForInvalidPathCharacters returns true when CLEAN (9a088d5)
- app: document ConsolePrompt's companion (0fb7c27)
- app: record the embedded MongoDB setup and its landmines (8b61065)
🧪 Tests
- api: pin that a bad exclusion filter names the exclusion field (ae375df)
- api: pin that a modpack's server-icon survives having a manifest (71b348e)
- api: pin that a Modrinth index is actually read (cf05195)
- api: pin that a scan finding is not a generation failure (05c8eb9)
- api: pin that a ZIP modpack is scanned after it is extracted (6703b71)
- api: pin that an unextractable modpack fails its checks (e44ba09)
- api: pin that trimming a trailing dot trims only the trailing one (8ef6f2e)
- api: pin that unzipArchive declares no checked exception to Java (060266e)
- app: boot the context test against the embedded database (e94e32d)
- app: bound the suite's MongoDB server-selection timeout (c98cc3f)
- app: characterize the storage seam and both cleanup schedules (187ecad)
- app: cover the 415 refusal and both sweeps against a real database (bcb25ed)
- app: pin how a recorded download is identified and ordered (59c2cff)
- app: pin that a rejected upload costs nothing durable (5a857c3)
- app: pin that a stored file reports its size in bytes (3657fcb)
- app: pin that a throwing task must not kill the generation queue (fdffd4a)
- app: pin that an archive never travels through the heap (c9567b3)
- app: pin that an upload filename cannot steer the path it is written to (3002c30)
- app: pin that an upload name cannot inject a Content-Disposition parameter (65ced9b)
- app: pin the destructive edges of both nightly sweeps (131501f)
- app: pin the GridFS id round-trip, the empty miss, and the delete (30b335d)
- app: pin the paginated event sort too (eb76d83)
- app: repair a guard that stopped reproducing its own condition (aa0fe0e)
- app: run the persistence tests against a real MongoDB, in-process (4fbba1d)
- frontend: pin the regeneration path's ids and its error handler (5899b57)
🛠 Fixes
- make a generation's success mean the generation worked (6b7d890)
- report archive sizes in bytes, and stop hiding small packs (0111d3d)
- stop handing server paths and stack traces to anonymous callers (f5755f7)
- stop the regeneration path reporting ids that do not exist (8e10961)
- api: dispatch to the Modrinth manifest parser that nothing called (872900a)
- api: find a modpack's server-icon inside the modpack (62b5c26)
- api: handle an unreadable modpack directory instead of asserting on it (9148e28)
- api: let a failed extraction fail the modpack instead of vanishing (645b181)
- api: report a bad exclusion filter as an exclusion problem (c7bed07)
- api: restore Java source compatibility on unzipArchive (c9639c5)
- api: scan the modpack after it is extracted, not before (cb495c6)
- api: trim only the trailing dot or space, in both sanitisers (22ddd51)
- app: build the Content-Disposition header instead of interpolating it (011e782)
- app: declare the upload endpoint as multipart, and regenerate the spec (8a9e337)
- app: give a recorded download its own id, and sort on fields that exist (f05d28c)
- app: keep an upload's filename out of the path it is written to (57b172c)
- app: keep the generation queue alive when a task throws (fc8b89c)
- app: make both nightly sweeps survive the rows they trip over (282fa35)
- app: reclaim an orphaned pack once, not once per directory entry (94e38c1)
- app: reclaim the GridFS copy on delete, and return empty for a miss (25908c6)
- app: stream archives instead of carrying them through the heap (8bbd000)
- app: sweep orphaned files through storage, and stop asserting fileID (5aa02a7)
- app: type the GridFS miss honestly, and prove the guard fires (f150c06)
- app: validate an upload before storing it, and hash it without a heap copy (2a13cd2)
- build: publish kotlin-stdlib with a version, unbreaking the Maven release (43dc174)
VirusTotal
ServerPackCreator-9.0.0-beta.3.jar- https://www.virustotal.com/gui/file-analysis/YTgyNmNlOWNjNGZmOTVjMWY2YWYxZTZhZmFkZjg3ZWI6MTc5MDI4MTQyNw==serverpackcreator-api-9.0.0-beta.3-javadoc.jar- https://www.virustotal.com/gui/file-analysis/NWE3MDZlZGU0NWZjNGRlMzM2NTk5NzkxNmFhM2I0NmQ6MTc5MDI4MTQyOQ==serverpackcreator-api-9.0.0-beta.3-sources.jar- https://www.virustotal.com/gui/file-analysis/YzhhZGVmYzM4M2U3ZTA1NTEyZGNlZmVkZWIxZTRhN2M6MTc5MDI4MTQzMQ==serverpackcreator-api-9.0.0-beta.3.jar- https://www.virustotal.com/gui/file-analysis/MWZlN2IzOWIzYjNhMDBkMmJkY2NhZTE4ZGE3OTFjZDY6MTc5MDI4MTQzNA==serverpackcreator-app-9.0.0-beta.3-javadoc.jar- https://www.virustotal.com/gui/file-analysis/ZmQzZTZlMjA2M2NjMTg2MTEzZmY4OGFjMzVmYzZlNjE6MTc5MDI4MTQzNg==serverpackcreator-plugin-example-9.0.0-beta.3.jar- https://www.virustotal.com/gui/file-analysis/YTdhODA0ZDExNTBhMmNiMDViMjkyZmYxZmQ3NTViNmU6MTc5MDI4MTQzNw==ServerPackCreator-9_0_0-beta_3-Installer-Linux-amd64.sh- https://www.virustotal.com/gui/file-analysis/OGY5MmQ3MGZkOWM1NTNiZDIyOTBkZjU5OTIxYzg3YmQ6MTc5MDI4MTQ0Ng==ServerPackCreator-9_0_0-beta_3-Installer-Mac.dmg- https://www.virustotal.com/gui/file-analysis/Y2I0ZjE2M2E2YTFkMDk0ZmU0ODJhYTc3M2U5ZTJmMmE6MTc5MDI4MTQ1NQ==ServerPackCreator-9_0_0-beta_3-Installer-Windows-x86_64.exe- https://www.virustotal.com/gui/file-analysis/OThjMDFhYzM0N2Y5YzFjMzBhYjEzZGI0YTMyNDAyODg6MTc5MDI4MTQ2Mw==