⚠ BREAKING CHANGES
- api: publish every version meta as a snapshot, not as live state
- clientside: delete Confidence and aggregateFor
- grinder: one deploy script, with the mode decided by uid
- clientside,grinder,app: remove the headless-browser download route
✂️ Refactor
- clientside: ask the learned refs once in mappingsFor (61e0bc9)
- clientside: delete the dead deriveStems, keeping what it documented (850f89c)
- clientside: gather patch neighbours from one set, not two (579c7cf)
- clientside: move the confidence fold into the companion (33cec03)
- clientside: one ambiguity fold, and no nullable reason to interpolate (9b58349)
- clientside: one type for what a boot did, not two (2a194ce)
- clientside: read the placeholder marker without a deprecated call (1ebfd7d)
- clientside: route every boot attempt through one BootVerifier.boot (c3fe991)
- clientside: the audit's three LOW code findings (9ee88ba)
- clientside: the ladder reads its patterns from the rules file (d2d08c7)
- grinder: drop the dead decisive() from the fallback renderer (b174662)
- grinder: escape the Scanned cell like every other one (4e4cd96)
- grinder: extract the configuration and the sweep out of main (6de769d)
- grinder: rename CrashLogStore to BootLogStore (6ec7dc0)
- grinder: stop depending on Confidence (a9ed8e7)
📔 Docs
- audit and analyse today's commits (cf6cdc3)
- clientside 438 -> 466 in the root status table (b37d74a)
- clientside 466 -> 471 in the root status table (f4cf9ab)
- clientside 475, grinder 509 in the root status table (955319d)
- close B35 per the backlog's own convention and record the census (f7ffd9d)
- close B36 — the store was reset, so the requeue was never needed (8b5248a)
- close both audit logs — every finding resolved or accepted (786b7bf)
- close the documentation debt both batches left (309a0ff)
- close the landing obligations for the decisive-evidence gate (d64b649)
- close the plugin-recursion issue and record how it hid (127c3ec)
- commit the iteration-41 audit that was sitting in the working tree (e053654)
- complete the Refactor-state migration whose other half was committed by mistake (7e484cc)
- correct the grinder suite count for the new endpoint guards (a2580fd)
- correct the grinder suite count in the log (142f53d)
- file B35 for the verdict store per-record whole-file rewrite (746c0dd)
- file B36 — the published HIGH verdicts need re-grinding after deploy (592f1ce)
- mark the superseded precedence as history, and correct the suite count (659bb6f)
- plugin-grinder 72 -> 73 in the root status table (f50c867)
- record B6's merge gate — HIGH 8 -> 4, controls held, no regressions (3af47ea)
- record both dependency defects and the test-boundary lesson (7c54a0f)
- record feature B and the two inverted safety properties (f0bbd89)
- record that a survived boot counts, and that a refusal names the lock (93cedad)
- record that CI caught the clean-build break and the red went unactioned (f68041c), closes #301 #306
- record that optional dependencies are flagged, not required (cb72743)
- record the analysis fixes and the audit sweep that found nothing open (7425f22)
- record the audit resolutions and the landmines they produced (c6833b3)
- record the audit's resolution, the boot's owner, and the crash-log store (e78fd65)
- record the by-file dependency count and the clean-build gap (aef58a4)
- record the decisive-evidence gate and the census that justified it (8695a52)
- record the Docker IT, B0 regression and Fabric API acceptance runs (16a0d4c)
- record the equivalence check against develop's test tree (4107e86)
- record the equivalence proof, its four signature changes and 16 deltas (22759c3)
- record the four-verdict result system and where its rules live (8e337ff)
- record the hostname, Forge-launch and scan-date findings (5cbce8e)
- record the live verification of per-attempt boot-log capture (b6ec278)
- record the Logs column sort in the grinder's snapshot (557ad1f)
- record the measured ServerStarterJar/Forge range (84a6d58)
- record the plugin module and the new grinder endpoint (1a62eed)
- record the re-grind queue and its three placement landmines (f210c8c)
- record the report query layer and its measurements (fbab42c)
- record the rules' measured recovery and the poisoned cache tuple (1e5b21d)
- record the shared staging directory behind the 26.2 boots (5c4fcfa)
- record the source-jar entry and the re-check that stayed local (7a7d9e9)
- record the tmpfs exec decision and what noexec was costing (4ffe309)
- record the two-pattern split and why only one is publishable (7706a4c)
- record what the crash-log census changed in the clientside engine (7ac5a5b)
- record why a jar's own range now re-selects instead of refusing (b8a6081)
- record why the browser download route is gone, in every place that claimed it (125d64f)
- refresh the clientside row after the three field-report fixes (6c8f066)
- regenerate the license report after the Playwright removal (e42cb53)
- sync the suite counts after restoring the shutdown guards (9568120)
- the 2026-09-08 audit and analysis of the backtrack range (997051d)
- the analysis and audit, in the refactor log (86d3d44)
- the audit findings, and the gate that keeps the patch fallback safe (c2123f2)
- the six verdicts, and the three ways a dependency was "unavailable" (a8d1dab)
- api: document the eight declarations dokka reported undocumented (428c6e7)
- app: document GuiProps, ConfigEditor, BeanConfiguration and the CLI parsers (c61329a)
- app: document the modpack/storage/stats services and the entry point (715eaa7)
- app: document the settings panels, GUI components and task queue (f81c4ba)
- app: document the web entities, stats and the scroll components (edd1be0)
- app: finish the dokka backlog — 626 → 0 undocumented (acfed4b)
- audit: cite commit subjects, and correct the premise the rebase was proposed on (ab13c6f)
- audit: close iteration 33, and add the convention MED-3 earns (f397a11)
- audit: iteration 25 — shutdown during a re-grind drain, and a log line that prints a data class (ef88492)
- audit: iteration 26 — a negative sleep, an unbounded read, and a URL nobody checks (35f6206)
- audit: iteration 27 — findings and resolutions (997fb21)
- audit: iteration 28 — header/cell coupling, sibling-marker review (7dcbd10)
- audit: iteration 29 — the template change (5ef46ce)
- audit: iteration 30 resolutions and the iteration 31 re-audit (6d0c62b), closes #301 #306
- audit: iteration 32, and fix the api suite count it found stale (712f633)
- audit: name the dead commits by subject, and record the repo-wide citation sweep (d83dfd9)
- audit: record the history rebuild that closed MED-1, LOW-1 and MED-2's instances (0930519)
- audit: resolutions for iterations 25 and 26 (1d221ef)
- ci: record the two mirror failures, and why
newsis not gated on the mirror (01cc1f2) - clientside,grinder: document what dokka reported undocumented (9000e99)
- clientside: close the candidate half of the untagged-loader rule (361db79)
- clientside: document the backtrack's data classes, and reunite one orphaned KDoc (03032f4)
- clientside: landmine the silent rung, and correct two counts that had drifted (49ffa77)
- clientside: name every prevented-grind path, not just the staging ones (ccc839b)
- clientside: re-attach seven KDoc blocks, and correct the decisive set (d72a949)
- clientside: record the confidence-keyed refusal split (d8239ca)
- clientside: record the Connector-placeholder scanner redirect (de7245e)
- clientside: record the decorated-version defect and the refusal vocabulary (ab27873)
- clientside: record the dependency-set backtrack (9f2f5a2)
- clientside: record the NeoForge/Forge 1.20.1 parity band (7ad0a77)
- clientside: record the nested-jar blind spot in the backtrack (5e84224)
- clientside: record the untagged-loader landmine and the candidate half (e05f2ef)
- clientside: record the version-range fixes and the open CurseForge gap (8514e93)
- grinder: correct the claim that Logs is meaningless to sort (62e41bb)
- grinder: document the boot-rule status field and drop a stale claim (1007993)
- grinder: landmine the four defects worth not re-introducing (2ac1d8e)
- grinder: re-attach six KDoc blocks that documented nothing (f131d2e)
- grinder: record sortKey and the single confidence rank table (9de940d), closes #4
- grinder: record the missing-image outage and what it changed (7b45d7f)
- grinder: repair three KDoc links to the deleted Confidence type (482f54c)
- plugin-example: document the addons logger companion (57d22b5)
📦 Other
- api: refresh the shipped manifest snapshots (89639fc)
- clientside: correct three statements this branch made stale (37158ae)
- plugin-grinder: ignore the module's ServerPackCreator test home (22d3143)
🦊 CI/CD
- drop the Playwright dependency and its CI prerequisite (5dc2002)
🧪 Tests
- close the coverage gaps the analysis found (M-3, M-4, M-5, L-1) (4dcf250)
- api,clientside: pin that an optional dependency is not a requirement (5029ef9)
- api,clientside: pin that quilt_base is a mod, not the Quilt platform (24aa11c)
- api: pin B0's generation regression check, and the gap it found (18fa4ec)
- api: pin every Minecraft list accessor, not the three written down (8bb194e)
- api: pin Fabric API as a dependency and every declared version range (5027907)
- api: pin that a missing malware scanner cannot abort generation (0029414)
- api: pin that a Quilt pack scan keeps a Fabric jar's dependencies (5788bab)
- api: pin that a scan reports the Minecraft the jar declares (b54b4df)
- api: pin that an extension belongs to one plugin (bbfdf42)
- api: pin that an unreadable Minecraft version takes the bypass (ad4ef05)
- api: pin that no version meta hands out live state (fdbedd4)
- api: pin that setupQuilt notices a pack with no Minecraft server jar (4a84a2d)
- api: pin that version metadata is not handed out as live state (7ae95ab)
- api: pin which Forge versions bypass the ServerStarterJar (ec19d82)
- api: reproduce the plugin-loading recursion in the suite (b5f74ee)
- clientside,grinder: pin per-attempt staging to (platform, slug, loader) (638cbf0)
- clientside,grinder: pin whose boot disproves, and whose identity is reaped (b70bbf7)
- clientside: characterize the filename pattern before depending on it (da56caa)
- clientside: close the coverage gaps the same-day analysis found (89ae3d8)
- clientside: pin a crash re-check spanning loaders and Minecraft lines (1f4dea4)
- clientside: pin a loader that never bootstrapped as inconclusive (7f8aa8b)
- clientside: pin all sixteen ladder rungs, not ten of them (930e2a6)
- clientside: pin an unreadable @argfile as inconclusive (b74e624)
- clientside: pin bumping the pack to a version the jar itself accepts (f0a6d5c)
- clientside: pin comma-separated unions of version ranges (c972efb)
- clientside: pin operator-editable console rules and their place in the ladder (f12b9db)
- clientside: pin that a bundled dependency is never fetched or missing (5f60a72)
- clientside: pin that a component too large to represent is unreadable (9fbfffa)
- clientside: pin that a confirmation names the rule that decided it (9e39825)
- clientside: pin that a Connector placeholder is scanned as Fabric (0396459)
- clientside: pin that a constraint narrows dependency choice but never empties it (2ebc6b0)
- clientside: pin that a dependency is sought at the version being booted (2f31bd8)
- clientside: pin that a dependency never crosses a Minecraft version (c065ce9)
- clientside: pin that a dependency the jar never asks for cannot refuse a boot (fd1a164)
- clientside: pin that a file carries every project its page links (66a10b3)
- clientside: pin that a jar staged under two refs counts once (3c110a0)
- clientside: pin that a loader too old for the mod is re-checked (0e8de06)
- clientside: pin that a mapped, resolved, unstageable dependency refuses (3d79f0d)
- clientside: pin that a mod cannot claim the launcher's excuse (ff8dc82)
- clientside: pin that a Modrinth source jar is not a mod file (bcc8021)
- clientside: pin that a nested library's version reaches the conflict check (f8326eb)
- clientside: pin that a pack with no server jar is inconclusive (1a8dea2)
- clientside: pin that a refusal names mods, not platform ids (5568b0a)
- clientside: pin that a resolved dependency knows its own name (fbea4b0)
- clientside: pin that a rule which decided a boot is named on the verdict (4c7bcba)
- clientside: pin that a self-contradicting dependency set backtracks (be01428)
- clientside: pin that a staged dependency cannot refuse its own boot (d2a6f0d)
- clientside: pin that a survived boot counts, and a locked download says so (6d6bdfe)
- clientside: pin that a wrong-Minecraft dependency is dropped pre-boot (17dfa82)
- clientside: pin that an all-untagged project is still ground (acc44f2)
- clientside: pin that an unmet dependency names why it is unmet (0ed2674)
- clientside: pin that an unobtainable dependency is not preferred (a4e2c82)
- clientside: pin that an unreadable staged version is not a conflict (9d67140)
- clientside: pin that an unresolved required id asks the linked projects (7a66dc5)
- clientside: pin that an untagged file is unknown, not incompatible (6410c9f)
- clientside: pin that attribution annotates and never moves a verdict (7ac7da0)
- clientside: pin that client-only proof is about the mod, not the build (901b03f)
- clientside: pin that every ladder rung finds its bundled pattern (312459e)
- clientside: pin that extracting the ladder into rules changes no verdict (1312bc0)
- clientside: pin that Fabric API's modules resolve to Fabric API (b011ac5)
- clientside: pin that folding no unmet dependencies answers, not throws (17d8332)
- clientside: pin that metadata sideness is decided by rules too (dd549fb)
- clientside: pin that NeoForge runs Forge mods on Minecraft 1.20.1 (821b2d3)
- clientside: pin that one mod id can be served by two projects (ac5bdcd)
- clientside: pin that QSL's module ids resolve to QSL (20f12f7)
- clientside: pin that the learned map can outlive the process (056246f)
- clientside: pin that there is one download route and no browser fallback (6ff2b4b)
- clientside: pin that YACL's versioned mod id resolves to its project (5142840)
- clientside: pin the ambiguity rule across a pack, not just within a jar (838f35a)
- clientside: pin the client-library evidence that shipped as an example (a2dfcb4)
- clientside: pin the environment excuses the crash logs demanded (5c3df0a)
- clientside: pin the fold that replaces aggregateFor (69b23fe)
- clientside: pin the four-state verdict, and that a prevented grind is an Error (c6790cd)
- clientside: pin the id-to-project mapping learned from staged jars (3e104eb)
- clientside: pin the manifest-id to platform-project mapping (50f3a01)
- clientside: pin the patch-version dependency fallback (fd732d3)
- clientside: pin the per-attempt boot-artifact sink (b291160)
- clientside: pin the refusal path the first label fix missed (63521e8)
- clientside: pin the refusal split on mapping confidence (08a40a6)
- clientside: pin the two platform shapes that produced live false positives (576912c)
- clientside: pin the two prevented-grind paths the redesign missed (c453b8d)
- clientside: pin the version a jar's own range would have us pick (d2fb045)
- clientside: pin version-constraint matching across both loader grammars (211a639)
- clientside: pin what a finished boot leaves behind (4002b42)
- clientside: pin which rung decided a boot, against five real logs (cc3cbb1)
- clientside: pin which unmet dependencies may refuse a boot (89d388e)
- clientside: pin who a prevented grind is blamed on (ed492bf)
- clientside: reproduce JEI's refusal — a jar range that excludes its own version (f980c13)
- clientside: separate the two dependency-preference arms that never were (dbd6864)
- grinder: execute the dashboard's script under node (e91c4d6)
- grinder: gate the store benchmark and answer B35 with numbers (375f1bb)
- grinder: hold the loader-line wiring the step-down pin never reached (def87f1)
- grinder: pin --requeue-since, the selector an outage needs (0836c71)
- grinder: pin a durable home for crash consoles, and the endpoint buttons (bde4f73)
- grinder: pin a non-negative slice, a bounded crash-log read, and a rejected link (7f5a8c5)
- grinder: pin a self-contained live dashboard for /status (179b292)
- grinder: pin an immediate re-grind queue that ignores freshness (552b49f)
- grinder: pin coalesced verdict writes (B35) (c9275c5)
- grinder: pin each column against its own sentinel before restructuring (4265c07)
- grinder: pin every field of the LoaderVerdict-to-GrindVerdict mapping (991fea0)
- grinder: pin per-attempt keeping, pruning, the budget and adoption (6702820)
- grinder: pin sorting by the Logs column (056fc55)
- grinder: pin template provenance on the path production takes (0531ce6)
- grinder: pin that a blamed dependency is queued, and record the live run (47ccb99)
- grinder: pin that a boot can execute from its own tmpfs (5d57bfa)
- grinder: pin that a boot container can resolve its own hostname (775a41f)
- grinder: pin that a crashed boot's console is copied out of staging (c8bbf85)
- grinder: pin that a failed install is not reported as a skipped one (2ee4925)
- grinder: pin that a failed queue write leaves no scratch behind (c5e1c56)
- grinder: pin that a missing runtime image stops the daemon (ac3f151)
- grinder: pin that a restored id with no usable ref leaves no entry (d7596cf)
- grinder: pin that a thrown loader install names the exception (ba09ca0)
- grinder: pin that an unavailable loader install says why (5c420cf)
- grinder: pin that an unreadable verdict store is not overwritten (b1b9c4f)
- grinder: pin that an unusable knob value falls back like an unparseable one (f433539)
- grinder: pin that confidence sorts by severity, not alphabetically (13de74b)
- grinder: pin that every table header has a cell beneath it (bfc1278)
- grinder: pin that Fabric and Quilt can step down a loader build (436de8f)
- grinder: pin that Forge boots from its argfile, not the starter jar (8c306f7)
- grinder: pin that only a confirmation is published (6e8cd71)
- grinder: pin that the container-stop drain gives up (cdc45ba)
- grinder: pin that the pass counter is not shadowed (96701a3)
- grinder: pin that the report and CSV speak the four verdicts (34e405b)
- grinder: pin the declared sideness and jar scan on a recorded verdict (c0a81f0)
- grinder: pin the file that carries the learned map across restarts (da10248)
- grinder: pin the Filename column beside the name pattern (eaf52b5)
- grinder: pin the JSON verdict feed the GUI plugin reads (1b671e6)
- grinder: pin the per-pass counters as per-pass (c097498)
- grinder: pin the report server's favicon (3c534e0)
- grinder: pin the scan date on the overview and in the CSV (4dd5c24)
- grinder: pin the shutdown gap, the live pass size, and a sliced wait (d20fc2c)
- grinder: pin verdict filtering, sorting and paging as a pure unit (ef5f159)
- grinder: prove the Logs sort through the real handler (aca684c)
- grinder: restore the five shutdown guards a refactor deleted (audit H1) (3ef3930)
- plugin-grinder: pin the audit's four findings and the missing edge cases (70301ac)
- plugin-grinder: pin the clientside-entry injection (732fdc7)
- plugin-grinder: pin the Declared and JAR sideness columns (03cf347)
- plugin-grinder: pin the URL rule, the client and the selection store (98ecefc)
- plugin-grinder: pin the verdict table's selection logic (758ea95)
🚀 Features
- ci: announce releases on Discord from Forgejo (4f42a76)
- clientside,grinder,app: remove the headless-browser download route (04e746a)
- clientside,grinder: a verified LWJGL rule, and the harness defect it found (3fd6eb8)
- clientside: ask the linked projects when a required id resolves to nothing (b99a850)
- clientside: collect a boot's console, server logs and crash reports (ebc72b3)
- clientside: fold one loader's evidence into the four-state verdict (fa3400a)
- clientside: hand every boot attempt's artifacts to a sink (a6f9292)
- clientside: learn the id-to-project bridge from the jars staging downloads (e504d1c)
- clientside: let an operator's console rules decide a boot (0d0b43d)
- clientside: LOCKED and UNVERIFIABLE, so ERROR means what it says (8093d4b)
- clientside: map a manifest mod id to its platform project ref (fb4d5bd)
- clientside: match a dependency file against its declared constraint (1a3d715)
- clientside: match a mod file's version against its declared constraint (bdd9cd9)
- clientside: metadata sideness is decided by rules, not by a hardcoded fold (5ed6357)
- clientside: name the rule that decided a boot, on the outcome itself (9eaf2a3)
- clientside: record the dependency a crash names, without moving the verdict (ffe3843)
- clientside: ship the built-in ladder as an editable rules file (53b2e16)
- clientside: split refusable dependencies from merely-unmapped ones (3d2c3c9)
- clientside: stage the dependencies a jar manifest declares alone (18f59b4)
- clientside: the four-state verdict and the pure policy that decides it (2c611da)
- clientside: delete Confidence and aggregateFor (8c18001)
- grinder: --bootstrap prepares a host that never ran the grinder (02b3fac)
- grinder: --clear installs onto a clean slate (d6cf580)
- grinder: --requeue-since, for a window the daemon was broken in (4976ff7)
- grinder: a live, framework-free dashboard for /status (4e1e544)
- grinder: add an unattended update script for the deployed service (a087cdf)
- grinder: an immediate re-grind queue that jumps the crawl and the TTL (2376d75)
- grinder: audit a live grinder's published verdicts against their evidence (90bdb84)
- grinder: give the report a favicon (0c80e2a)
- grinder: grant the build account sudo for the run instead of demanding it (3658eee)
- grinder: install the headless browser prerequisite instead of warning about it (799fc95)
- grinder: keep crashed boots' consoles and reach every endpoint from the report (f94a4c7)
- grinder: keep every non-survived attempt's logs and link them per row (f249e18)
- grinder: make the verdict-less rule fallback an operator choice (41be7a2)
- grinder: persist the learned mod-id map to SPC_GRINDER_HOME (35c77cb)
- grinder: publish only confirmations, and record what the mod claimed (a7cda82)
- grinder: record the sideness and jar scan behind every verdict (6b86c1a)
- grinder: render the report from a server-side query (d41c37e)
- grinder: requeue a dependency blamed for a crash, and show the staged pack (1714da9)
- grinder: select verdicts server-side by search, filter, sort and page (b9b06be)
- grinder: serve verdicts as JSON at /verdicts.json (8338460)
- grinder: show the sampled artifact's pattern beside the published one (15c25dd)
- grinder: show when each mod was scanned (3b1392f)
- grinder: sort the report by the Logs column (8fc40bf)
- grinder: the report and CSV speak the four verdicts (d0adf2d)
- grinder: wire the console-rule file, its errors and the rule column (a05a259)
- grinder: one deploy script, with the mode decided by uid (f8f41db)
- plugin-grinder: fetch verdicts and persist the selection (c17cf9a)
- plugin-grinder: inject the selection into clientMods before generation (0a0c6e6)
- plugin-grinder: scaffold the module and its plugin descriptor (0885d32)
- plugin-grinder: show Declared and JAR sideness beside the verdict (9c3ef12)
- plugin-grinder: the four-pane GUI tab (a68204a)
🛠 Fixes
- api,clientside: an optional dependency is not a requirement (88a6a19)
- api,clientside: never boot a jar on a runtime it does not declare (2a073a0)
- api,clientside: quilt_base is a QSL module, so stop excusing it as the platform (98f183f)
- api,clientside: stop leaking exit hooks, keep errors visible, serialise refreshes (e716460)
- api: a malware scanner that cannot run must not abort generation (9808923)
- api: bypass the ServerStarterJar where it cannot launch Forge (c9106d0)
- api: fetch the Minecraft server jar for Quilt on its own terms (7e327da)
- api: keep a Fabric jar's declaration when scanning a Quilt pack (804efd8)
- api: load plugins as a step, after the API they reach into exists (1d7b05d)
- api: never compare an unreadable Minecraft version component (4af6631)
- api: publish version metadata as snapshots, not as live mutable state (7e2d49a)
- api: put the refresh coroutine on the lock it was supposed to take (a27b632)
- api: rescue a dependency by the ids a mod actually answers to (cd18edf)
- api: scope an extension lookup to the plugin it was asked about (431f3f8)
- api: stop excluding Fabric API and QFAPI, and record dependency version ranges (ea7933c)
- api: publish every version meta as a snapshot, not as live state (c3d2238)
- ci: probe the mirror before the release POST, and make
mirrorre-runnable (deafdd5) - clientside,grinder: a slug is not an identity — stage per platform (82c0c9c)
- clientside: a cross-loader survivor is not the verdict's own boot (43d5948)
- clientside: a dependency in the pack cannot refuse its own boot (f2d8b7d)
- clientside: a dependency the candidate ships is never fetched or missing (5154070)
- clientside: a digit-less wildcard constraint must accept, not refuse (edd9627)
- clientside: a grind that never ran is an Error, on every path (5a25860)
- clientside: a loader that never bootstrapped is not a mod crash (f3ca8d2)
- clientside: a Modrinth source jar is not a mod file (14c8539)
- clientside: a nested library counts as staged when judging the pack (2939982)
- clientside: a pack with no Minecraft server jar is a launch failure (f3e5575)
- clientside: a staging refusal names why each dependency is unmet (06c3ac3)
- clientside: a version component we cannot represent is unreadable (60a0e77)
- clientside: a version we cannot read is not evidence of a conflict (3156d60)
- clientside: an unreadable @argfile is a broken install, not a mod crash (c54637d)
- clientside: anchor the launcher's argfile excuse to line start (b88f502)
- clientside: backtrack a dependency whose demands the pack cannot meet (20f5895)
- clientside: bump the pack to a Minecraft version the jar itself accepts (79617c1)
- clientside: carry every linked project, not only the required ones (1a798cf)
- clientside: client-only proof is about the mod, so it crosses builds and loaders (a808a86)
- clientside: count a staged dependency once, by file rather than by ref (0761aef)
- clientside: count a survived boot, and say why a locked file would not download (5afd1ef)
- clientside: credit the deciding rule, not one that merely matched alongside (b5e08ec)
- clientside: do not remember an id a restore had no ref for (dd0482b)
- clientside: drop a dependency whose descriptor excludes the pack's Minecraft (ba2947a)
- clientside: fail a rule's missing or unreadable verdict safe to INCONCLUSIVE (b76a6c9)
- clientside: give a resolved dependency its real slug, on both platforms (742e9fa)
- clientside: grind a project whose files carry no loader tag (fb9d845)
- clientside: implement ModPlatform.name in the two test fixtures (b3d7e65)
- clientside: key the refusal split on mapping confidence, not distance (625145c)
- clientside: let NeoForge boot a Forge jar on Minecraft 1.20.1 (2329996)
- clientside: look for a dependency at the Minecraft version being booted (67b848f)
- clientside: LWJGL and FML's invalid-dist are decisive, and now shipped (bb82781)
- clientside: make a ladder rung that cannot find its pattern say so (0cd909f)
- clientside: make preventionCauseFor total (1b7f883)
- clientside: name the mod, not its platform id, when a dependency is missing (ad3bbbb)
- clientside: name the third refusal branch, and call a locked dependency locked (b3f50b6)
- clientside: never stage a dependency for another Minecraft version (6e3063a)
- clientside: prefer a dependency file that can actually be downloaded (307f3e5)
- clientside: publish only a crash that is decisive evidence of sideness (556efc0)
- clientside: re-check a crash across loaders and Minecraft lines (39d3403)
- clientside: re-check the newest loader build for any boot the build could explain (542f1fb)
- clientside: re-select a Minecraft version the jar accepts, don't refuse (793a5a7)
- clientside: read a comma-separated union of version ranges (3c19f8a)
- clientside: refuse when a mapped dependency has no usable file (b55e972)
- clientside: remember every project that proves a mod id, and try each (c7cbad2)
- clientside: resolve Fabric API's module ids to Fabric API (7062157)
- clientside: resolve QSL's module ids to QSL (cbf1f08)
- clientside: resolve YACL's versioned mod id to its project (ac9612f)
- clientside: scan a Connector placeholder as the Fabric mod it wraps (bcb9cfc)
- clientside: stage a dependency from a neighbouring patch release (3bd168f)
- clientside: stop scoring harness failures as the mod's crash (467a4da)
- clientside: the console decides, the metadata only declares (8d5e693)
- clientside: the jar decides which platform dependencies it actually needs (e018250)
- clientside: treat a file with no loader tag as unknown, not incompatible (98e2395)
- grinder: a slice that cannot go negative, a tail that is not read whole, a link that is refused (17df60c)
- grinder: actually consult the template-provenance check before serving a cached install (1ee6873)
- grinder: boot Forge from its argfile instead of the ServerStarterJar (02cc17e)
- grinder: bound the container-stop drain so shutdown cannot hang (eecbbd9)
- grinder: close the remaining audit-32 findings, and record what was not closed (5c51d78)
- grinder: close the shutdown gap the drain opened, and stop making a queued re-grind wait (447acaf)
- grinder: close the verdict store on shutdown, and stop shadowing it (acaf8d7)
- grinder: coalesce verdict-store writes (B35) (136d571)
- grinder: delete the queue's scratch file when a write fails (b3f538f)
- grinder: fall back when a knob is unusable, not only when it is unparseable (0e6eb1b)
- grinder: grade the audit per verdict, not per kept console (18cd412)
- grinder: leave the Forge launch path to the templates (a392857)
- grinder: let Fabric and Quilt step down a loader build (3a17016)
- grinder: log the exception a loader install threw, not only its message (8743571)
- grinder: make a boot container's own hostname resolvable (583d35f)
- grinder: mount a boot's tmpfs executable (00ac21d)
- grinder: prove chromium launches for the service account, not just that it installed (4ec3ba3)
- grinder: read the unit that systemd actually runs, not the checkout's pristine copy (c2b6596)
- grinder: reap the identity the staging was named from (0e717fe)
- grinder: refuse to deploy from a copy inside the checkout it wipes (e821d76)
- grinder: refuse to grind without the runtime image (1172eef)
- grinder: reset the per-pass counters when a pass begins (ae2c7de)
- grinder: say why a loader install is unavailable, not that none is cached (7bb2a32)
- grinder: sort confidence by severity, from a single rank table (8eff064)
- grinder: tell an attempted install apart from a suppressed one (b96ee46)
- grinder: the audit IT reads the CSV column that exists (84119c1)
- grinder: the dashboard links only absolute http(s) URLs (4fe0745)
- grinder: the pass-completion log prints the pass number again (59f7d71)
- grinder: tolerate unknown fields and preserve an unreadable verdict store (3f60ad3)
- plugin-grinder: close the audit's findings (ed8198d)
- plugin-grinder: give JAR sideness a width its commonest value fits in (b0bc490)
- plugin-grinder: widen Declared so CONTRADICTORY stops clipping (adb2174)
VirusTotal
ServerPackCreator-9.0.0-alpha.8.jar- https://www.virustotal.com/gui/file-analysis/MjU0ZTBjMjFlNGQxMzc2ZGZlMjEwMzFhMjkwNjBhZDI6MTc4ODk4NDUzOQ==serverpackcreator-api-9.0.0-alpha.8-javadoc.jar- https://www.virustotal.com/gui/file-analysis/ZjQzNDM2ZDZiZWMzMjEyOTBmNmFmMjI4YWQ2MDI2MDQ6MTc4ODk4NDU0MA==serverpackcreator-api-9.0.0-alpha.8-sources.jar- https://www.virustotal.com/gui/file-analysis/ZjA4MWM2MTBmNWQ2ZGY0MTViYjQyNjA4N2VhMDQ2OGU6MTc4ODk4NDU0Mg==serverpackcreator-api-9.0.0-alpha.8.jar- https://www.virustotal.com/gui/file-analysis/ZWEzNDE1ZTk1MTNmNjUzNGUwMjExMzRkMTVkMTMyNjY6MTc4ODk4NDU0NQ==serverpackcreator-app-9.0.0-alpha.8-javadoc.jar- https://www.virustotal.com/gui/file-analysis/ZGNlNGMxMWI4MDE3Yzc1ZGVmOGY0NjQxMzg3MjY0Mzc6MTc4ODk4NDU0OA==serverpackcreator-plugin-example-9.0.0-alpha.8.jar- https://www.virustotal.com/gui/file-analysis/ZDk4NDUwZTAyNmQzZjdkNWY2Y2Y0ZTBjMzYyNWIxYTQ6MTc4ODk4NDU0OQ==ServerPackCreator-9_0_0-alpha_8-Installer-Linux-amd64.sh- https://www.virustotal.com/gui/file-analysis/NDE1YWUwNmI2NWRkNzY1ODA4MjE5YWFlYjYzNWViMDQ6MTc4ODk4NDU1OA==ServerPackCreator-9_0_0-alpha_8-Installer-Mac.dmg- https://www.virustotal.com/gui/file-analysis/OGU5NTk2ZDI5YjBhNDljMTE3OWFhNjAyMWJhMmY5Njg6MTc4ODk4NDU2Ng==ServerPackCreator-9_0_0-alpha_8-Installer-Windows-x86_64.exe- https://www.virustotal.com/gui/file-analysis/MjFkMGRhYjE5NDZkMjA3MDk5MDdhYzQ3YTk1MzY4N2U6MTc4ODk4NDU3OA==