✂️ Refactor
- apply the five Qodana style notes that were actually improvements (5194af2)
- api: give the versionmeta snapshot locals speaking names (2b4228b)
- app: fold the four-site stdin test into ConsolePromptTest (351a264)
- app: read the home directory through ConsolePrompt (7d09c22)
- app: return whether a headless verb did what it was asked (4fcb499)
- clientside: let a guard see which client a fetcher got (69c1584)
- grinder: drop what the configuration extraction left behind (5d5435e)
- grinder: give the snapshot cache a window it does not yet use (05fed81)
⏩ Performance
- grinder: derive the report's selection once per store change (d0c0e5a)
- grinder: page with subList instead of copying the tail (b533afc)
- grinder: stop the report walking the whole store per request (8bfa261)
📔 Docs
- audit the Qodana-817 remediation (2f7c47e)
- close B39 and half of B38, and open B40 for the baseline (c7a2e37)
- close B40, and record why it landed by other means (2f1ef98)
- close the analysis findings, and retract one of them (ecc6234)
- close the Qodana-817 audit findings (bc39f0b)
- close two audit findings on the 2026-09-19/20 commits (710c2f7)
- correct three test counts, and record what the KDoc defect teaches (a3a149b)
- describe updating a server pack as a feature you can rely on (2dafb32)
- keep the hand-written 9.0.0-beta.1 release notes in the repo (a88c08a)
- reattach four KDoc blocks that had come loose from their declarations (60ab1f5)
- reattach or retire fourteen more KDoc blocks that had come loose (dae6834)
- reattach the two orphaned blocks the new guard found (a6ec920)
- record M4 closed, with the mutation that proves each new guard (52074eb)
- record that the root-level documents have two generated copies (6414f91)
- record the Qodana verdicts and the scan's blind spot as B38 and B39 (47a1603)
- the READMEs speak the six verdicts, not the deleted confidence scale (57434cb)
- app: record the ConsolePrompt landmine and why it exists (f689fa4)
- app: record the exit-code contract and its landmine (82f28d5)
- app: say what
runwith no subcommand actually does (8a6fa73) - ci: make the awk escaping comment readable (762ec50)
- ci: record the two undeclared limits the release notes outgrew (37f4e43)
- clientside: landmine the per-instance HttpClient, and correct the count (34fff82)
- clientside: restore the two arguments a deleted doc copy took with it (9c76272)
- grinder: name the firewall rule that was never there (d4fecb0)
- grinder: record what the report cached and what it quietly did not (c80ba52)
- grinder: record why the report stopped answering (eadf345)
- grinder: the report was never wedged, and the docs said it was (1239418)
- readme: document generating a server pack from the commandline (9de625c)
📦 Other
- qodana: encode the twelve standing won't-fix verdicts (8784620)
- qodana: refuse the eleven style notes that were wrong or worse (6b91956)
🦊 CI/CD
- qodana: generate the sources the scan cannot see (2d2a2d6)
🧪 Tests
- api: close the update mechanism's remaining test debt (2f37954)
- api: pin that no KDoc block comes loose from its declaration (5410807)
- api: pin what regenerating over an existing server pack does today (65071b6)
- api: red pin for a first generation losing the local variables.txt (b57efd7)
- api: red pin for a list-setting overwriting its own default (942382d)
- api: red pins for lazy mode ignoring protection and reporting nothing (f5ef805)
- api: red pins for what an update must guarantee (960e186)
- app: pin ConsolePrompt (RED) (3d024a3)
- app: pin that a path argument is reported, never thrown (RED) (4a44b38)
- app: pin that an interactive prompt leaves System.in open (RED) (f2c0d3a)
- app: pin that lang accepts the locale it displayed (RED) (2f38d92)
- app: pin the headless outcomes (one RED) (f4df200)
- clientside: red pin for a new HttpClient per fetcher (c7906d6)
- grinder: red pins for the three ways the report scales with the store (bfae849)
🚀 Features
- api: make updating an existing server pack safe for a running server (ee629eb)
- app: implement ConsolePrompt (80df991)
- app: take Update Server Packs out of its experimental state (006e46a)
- build: name the AppImage _experimental, and stop spelling that name twice (74a73b3)
- grinder: serve the report through the cache, on a configurable pool (148ccb3)
🛠 Fixes
- api: decide preservation once, and stop lazy mode ignoring it (5bc4e27)
- api: keep server.properties and variables.txt in an updated pack's archive (6ac06c3)
- api: stop a list-setting from overwriting its own shipped default (011af4f)
- app: ask for a config file, not a home directory (b2cd0ab)
- app: exit non-zero when a one-shot run failed (caa24ed)
- app: offer the locales lang actually accepts (0b58755)
- app: report a bad path to a headless verb instead of throwing (c539cfd)
- app: report a configs-directory that cannot be read (43e649e)
- app: say "directory" when cgen rejects a non-directory (b6dd98b)
- app: stop the interactive prompts closing System.in (b4c8e41)
- build: package the api javadoc jar during build, not just generate it (4e58c66)
- build: publish the library, not just its javadoc (5229508)
- ci: cap the mirrored GitHub release body at 125,000 characters (e4f1c53)
- ci: escape the changelog version where awk cannot undo it (7b5b3a3)
- ci: skip assets the Forgejo release already carries (02dd499)
- ci: stop curl -sf hiding why a release step failed (f889895)
- ci: the release body travels in a file, never in curl's argv (ae3102c)
- clientside: share one HttpClient instead of one per fetcher (5f78389)
VirusTotal
ServerPackCreator-9.0.0-beta.2.jar- https://www.virustotal.com/gui/file-analysis/NThhNDJjNmQxNWViNjM1YzM3OTI0ZmQxODkwMzFjMjU6MTc5MDEwNzQwMA==serverpackcreator-api-9.0.0-beta.2-javadoc.jar- https://www.virustotal.com/gui/file-analysis/OTg2ZWQ0ZWVkOGY2ZTFiNmY2ZjRjYWRmNGU3ZWM0ZTQ6MTc5MDEwNzQwMg==serverpackcreator-api-9.0.0-beta.2-sources.jar- https://www.virustotal.com/gui/file-analysis/MzVkNTNmOThlMGRhZTNhY2I1NWRkYmVlNWVlNTlhN2U6MTc5MDEwNzQwNA==serverpackcreator-api-9.0.0-beta.2.jar- https://www.virustotal.com/gui/file-analysis/NmNjMWVjMWRmNTcwZTM0N2VhZTY4NDNmYTQ3NzFmY2Q6MTc5MDEwNzQwNw==serverpackcreator-app-9.0.0-beta.2-javadoc.jar- https://www.virustotal.com/gui/file-analysis/YmE4YzkxODhiZTBlN2JhMTQ0OWZlODE1NTJmYzAzMzE6MTc5MDEwNzQwOQ==serverpackcreator-plugin-example-9.0.0-beta.2.jar- https://www.virustotal.com/gui/file-analysis/ZGRkNzM4ODJlOWNjZjFhMWFiNTA2ZDU3YTkyZmMyNzQ6MTc5MDEwNzQxMA==ServerPackCreator-9_0_0-beta_2-Installer-Linux-amd64.sh- https://www.virustotal.com/gui/file-analysis/MWI5NjRjZTdiNWJhZDViM2UxMTZiZjI2NGNmYTJkNTY6MTc5MDEwNzQxNw==ServerPackCreator-9_0_0-beta_2-Installer-Mac.dmg- https://www.virustotal.com/gui/file-analysis/ZTNmY2MzZDU1NGU5YWFmZTMxYTUxNTU1NmVjOWJiMTM6MTc5MDEwNzQyNg==ServerPackCreator-9_0_0-beta_2-Installer-Windows-x86_64.exe- https://www.virustotal.com/gui/file-analysis/ZWQ5OTlmMWNmNzc4MmYzMTM5ZmY1ZTQ4MzcyMGU3MTE6MTc5MDEwNzQzNQ==