Split resource pack into per-content packs for servers #20

Merged
smell-of-curry merged 6 commits from feat/split-res-packs into main 2026-10-06 15:35:06 +00:00

Summary

  • Build now emits the PUBLIC pack (same header UUID, server-only assets removed, lite/3d subpacks kept), the FULL pack (same content as today, new header and module UUIDs), and 14 split packs with stable UUIDs plus packs.json.
  • A split pack whose content hash matches the previous release packs.json keeps that version. Anything else takes the current manifest version. Without --previous, every pack uses the current version.
  • CI fetches the previous release packs.json when it exists, then uploads the PUBLIC mcpack and zip, the FULL mcpack, all split/*.mcpack, and packs.json.

Assets

  • PokeBedrock RES PUBLIC <version>.mcpack and .zip
  • PokeBedrock RES FULL <version>.mcpack
  • pokebedrock-res-<name>.mcpack for texts-en_US, texts-cs_CZ, texts-de_DE, texts-es_ES, texts-pt_BR, texts-ru_RU, texts-zh_CN, 3d, server, ui, core, audio-cries, audio-music, audio-other
  • packs.json

packs.json schema

Schema 1, written by the build. Priority is array order (index 0 highest). There is no separate doc URL; the shape is:

{
  "schema": 1,
  "release": "2.22.4",
  "packs": [{
    "name": "texts-en_US",
    "uuid": "<header uuid>",
    "version": [2, 22, 4],
    "sha256": "<content hash>",
    "asset": "pokebedrock-res-texts-en_US.mcpack",
    "size": 186918,
    "filter": {}
  }],
  "public": { "asset": "PokeBedrock RES PUBLIC 2.22.4.mcpack", "uuid": "358dc189-8d9e-4fdb-b4e1-f8e0fb855f9a", "version": [2, 22, 4] },
  "full": { "asset": "PokeBedrock RES FULL 2.22.4.mcpack", "uuid": "bd48cc55-7a4a-408d-a044-ae29d4ccdbc1", "version": [2, 22, 4] }
}

filter keys are optional and AND-ed: language (client language code) and minMemoryTier (the 3d pack uses 2). Header UUIDs are committed in scripts/data/splitPacks.ts.

Test results

  • npm test: 18 passed (3 suites).
  • Local npx ts-node --project tsconfig.json scripts/build.ts succeeded. A second run with --previous split/packs.json reused every pack version (hashes matched).
  • Checked archives: server paths absent from PUBLIC and present in FULL and the server pack; crate/oak/elite-four keys are in FULL and server combined files and absent from PUBLIC and core; the 3d pack has no subpacks/ and keeps _3d combined filenames; texts-de_DE ships texts/languages.json of ["de_DE"].
  • Geometry combined-file test now expects 1.21.20. That assertion was already red on main because present.geo.json is above the 1.21.0 floor and the compiler takes the max.

Sizes (zipped)

asset bytes
PUBLIC mcpack and zip 52945405 each
FULL mcpack 53182960
texts-en_US 186918
texts-cs_CZ 214107
texts-de_DE 216919
texts-es_ES 204867
texts-pt_BR 199310
texts-ru_RU 239343
texts-zh_CN 204137
3d 8966361
server 238486
ui 4372105
core 8605456
audio-cries 15144814
audio-music 7644475
audio-other 6706447
split packs total 53143745
all uploaded files (zip included) 212217515

Follow-ups

  • Needs an in-game test: lang fallback, 3d-over-core ordering, and languages.json per texts pack.
  • The release that ships this has to bump the manifest version. PUBLIC keeps the current header UUID, so an unchanged version will not replace a client's cached pack.
  • Does not bump the manifest version or CHANGELOG.
## Summary - Build now emits the PUBLIC pack (same header UUID, server-only assets removed, lite/3d subpacks kept), the FULL pack (same content as today, new header and module UUIDs), and 14 split packs with stable UUIDs plus `packs.json`. - A split pack whose content hash matches the previous release `packs.json` keeps that version. Anything else takes the current manifest version. Without `--previous`, every pack uses the current version. - CI fetches the previous release `packs.json` when it exists, then uploads the PUBLIC mcpack and zip, the FULL mcpack, all `split/*.mcpack`, and `packs.json`. ## Assets - `PokeBedrock RES PUBLIC <version>.mcpack` and `.zip` - `PokeBedrock RES FULL <version>.mcpack` - `pokebedrock-res-<name>.mcpack` for texts-en_US, texts-cs_CZ, texts-de_DE, texts-es_ES, texts-pt_BR, texts-ru_RU, texts-zh_CN, 3d, server, ui, core, audio-cries, audio-music, audio-other - `packs.json` ## packs.json schema Schema 1, written by the build. Priority is array order (index 0 highest). There is no separate doc URL; the shape is: ```json { "schema": 1, "release": "2.22.4", "packs": [{ "name": "texts-en_US", "uuid": "<header uuid>", "version": [2, 22, 4], "sha256": "<content hash>", "asset": "pokebedrock-res-texts-en_US.mcpack", "size": 186918, "filter": {} }], "public": { "asset": "PokeBedrock RES PUBLIC 2.22.4.mcpack", "uuid": "358dc189-8d9e-4fdb-b4e1-f8e0fb855f9a", "version": [2, 22, 4] }, "full": { "asset": "PokeBedrock RES FULL 2.22.4.mcpack", "uuid": "bd48cc55-7a4a-408d-a044-ae29d4ccdbc1", "version": [2, 22, 4] } } ``` `filter` keys are optional and AND-ed: `language` (client language code) and `minMemoryTier` (the 3d pack uses 2). Header UUIDs are committed in `scripts/data/splitPacks.ts`. ## Test results - `npm test`: 18 passed (3 suites). - Local `npx ts-node --project tsconfig.json scripts/build.ts` succeeded. A second run with `--previous split/packs.json` reused every pack version (hashes matched). - Checked archives: server paths absent from PUBLIC and present in FULL and the server pack; crate/oak/elite-four keys are in FULL and server combined files and absent from PUBLIC and core; the 3d pack has no `subpacks/` and keeps `_3d` combined filenames; `texts-de_DE` ships `texts/languages.json` of `["de_DE"]`. - Geometry combined-file test now expects `1.21.20`. That assertion was already red on main because `present.geo.json` is above the 1.21.0 floor and the compiler takes the max. ## Sizes (zipped) | asset | bytes | |---|---| | PUBLIC mcpack and zip | 52945405 each | | FULL mcpack | 53182960 | | texts-en_US | 186918 | | texts-cs_CZ | 214107 | | texts-de_DE | 216919 | | texts-es_ES | 204867 | | texts-pt_BR | 199310 | | texts-ru_RU | 239343 | | texts-zh_CN | 204137 | | 3d | 8966361 | | server | 238486 | | ui | 4372105 | | core | 8605456 | | audio-cries | 15144814 | | audio-music | 7644475 | | audio-other | 6706447 | | split packs total | 53143745 | | all uploaded files (zip included) | 212217515 | ## Follow-ups - Needs an in-game test: lang fallback, 3d-over-core ordering, and `languages.json` per texts pack. - The release that ships this has to bump the manifest version. PUBLIC keeps the current header UUID, so an unchanged version will not replace a client's cached pack. - Does not bump the manifest version or CHANGELOG.
Split the resource pack so servers can ship only packs that changed.
Some checks failed
Auto Assign / run (pull_request_target) Successful in 13s
Model Preview / model-preview (pull_request) Successful in 17s
CI / build-and-test (20.x) (pull_request) Failing after 34s
e0aad334fd
Publish a public pack, a full pack, and fourteen stable-UUID packs plus packs.json. Unchanged content reuses the previous pack version.

Co-authored-by: Cursor <cursoragent@cursor.com>
smell-of-curry was assigned by forgejo-actions 2026-09-25 19:10:58 +00:00
add discoverBiome text
Some checks failed
Model Preview / model-preview (pull_request) Successful in 20s
CI / build-and-test (20.x) (pull_request) Failing after 32s
d1c221ef6e
Merge branch 'main' into feat/split-res-packs
All checks were successful
CI / build-and-test (20.x) (pull_request) Successful in 28s
Model Preview / model-preview (pull_request) Successful in 1m20s
26098a8efa
Co-authored-by: Cursor <cursoragent@cursor.com>
bot requested changes 2026-10-01 19:00:07 +00:00
Dismissed
bot left a comment

Review @ 26098a8e (merge main → feat/split-res-packs)

No prior bot review on this SHA. Open issues: 0 (no issue-link). Not gameplay-pack / no BEH nudge / will not merge res alone.

Verified after main merge

  • Tip 26098a8e mergeable, draft=false; base main @ 5a2ff211.
  • Manifest/CHANGELOG on head match main at v2.22.5 — this PR still does not own a version/CHANGELOG bump (body claim OK). Schema example in the body still shows 2.22.4 (stale doc only).
  • Follow-up still load-bearing: first release that ships this must bump PUBLIC header version (same UUID) or clients keep the cached pack.
  • CI on this head: CI / build-and-test success (~28s); Model Preview success (~1m20s).

Blocker

  1. texts-en_US is index 0 (highest priority) with filter: {}. Locale packs sit below it and also write texts/languages.json. Unless gobds drops en_US whenever a language-specific pack matches, highest-wins on languages.json (and any shared paths) will pin clients to English. Put en_US last among the texts packs (fallback) or document/enforce a gobds exclusion rule in-repo before merge.

Otherwise solid

  • Split routing + server contract patterns + PUBLIC = non-server look right; tests cover assignment, PUBLIC union, server exclusion, hash/version reuse, and filtered combine.
  • Build hashes content before stamping split manifests; CI expects 14 split mcpacks + packs.json; previous-release fetch tolerates missing assets.
  • Artifact rename to PokeBedrock RES PUBLIC|FULL … is intentional — coordinate hub/bds-manager/gobds (do not merge res independently).

Nits

  • PR body schema sample still 2.22.4.
  • minMemoryTier: 2 on split 3d vs PUBLIC subpack memory_tier: 8 — confirm intentional for server selection vs client subpack picker.
  • In-game follow-ups (lang fallback, 3d-over-core, per-texts languages.json) remain required after the priority fix.
## Review @ `26098a8e` (merge main → feat/split-res-packs) No prior bot review on this SHA. Open issues: **0** (no issue-link). Not gameplay-pack / no BEH nudge / will not merge res alone. ### Verified after main merge - Tip `26098a8e` mergeable, draft=false; base `main` @ `5a2ff211`. - Manifest/CHANGELOG on head match main at **v2.22.5** — this PR still does **not** own a version/CHANGELOG bump (body claim OK). Schema example in the body still shows `2.22.4` (stale doc only). - Follow-up still load-bearing: first release that ships this must bump PUBLIC header version (same UUID) or clients keep the cached pack. - CI on this head: **CI / build-and-test** success (~28s); **Model Preview** success (~1m20s). ### Blocker 1. **`texts-en_US` is index 0 (highest priority) with `filter: {}`.** Locale packs sit below it and also write `texts/languages.json`. Unless gobds drops en_US whenever a language-specific pack matches, highest-wins on `languages.json` (and any shared paths) will pin clients to English. Put en_US **last among the texts packs** (fallback) or document/enforce a gobds exclusion rule in-repo before merge. ### Otherwise solid - Split routing + server contract patterns + PUBLIC = non-server look right; tests cover assignment, PUBLIC union, server exclusion, hash/version reuse, and filtered combine. - Build hashes content before stamping split manifests; CI expects 14 split mcpacks + `packs.json`; previous-release fetch tolerates missing assets. - Artifact rename to `PokeBedrock RES PUBLIC|FULL …` is intentional — coordinate hub/bds-manager/gobds (do not merge res independently). ### Nits - PR body schema sample still `2.22.4`. - `minMemoryTier: 2` on split `3d` vs PUBLIC subpack `memory_tier: 8` — confirm intentional for server selection vs client subpack picker. - In-game follow-ups (lang fallback, 3d-over-core, per-texts `languages.json`) remain required after the priority fix.
@ -0,0 +33,4 @@
export const SPLIT_PACKS: readonly SplitPackDef[] = [
{
name: "texts-en_US",
headerUuid: "e8c58119-c679-4d2d-a8dc-347caf7d0b70",
Member

Blocker — texts priority. texts-en_US is SPLIT_PACKS[0] (highest priority per file header / packs.json contract) with filter: {}, so it always stacks. Locale packs below also emit texts/languages.json. On a de_DE client that gets both packs, highest-wins on that path (and any other shared texts paths) can pin the client to English.

Move texts-en_US to last among the texts packs so it is the fallback, or have gobds omit it when a language-specific pack matches — and put that rule next to this table if it is consumer-side. The in-game “lang fallback” follow-up does not land until this order (or exclusion) is correct.

**Blocker — texts priority.** `texts-en_US` is `SPLIT_PACKS[0]` (highest priority per file header / packs.json contract) with `filter: {}`, so it always stacks. Locale packs below also emit `texts/languages.json`. On a de_DE client that gets both packs, highest-wins on that path (and any other shared texts paths) can pin the client to English. Move `texts-en_US` to **last among the texts packs** so it is the fallback, or have gobds omit it when a language-specific pack matches — and put that rule next to this table if it is consumer-side. The in-game “lang fallback” follow-up does not land until this order (or exclusion) is correct.
@ -0,0 +84,4 @@
name: "3d",
headerUuid: "ca3cc090-03b4-455a-917c-feb8f212d216",
moduleUuid: "a491b26d-c297-4102-a65c-c4a75787b610",
filter: { minMemoryTier: 2 },
Member

Nit / confirm intentional: split 3d uses minMemoryTier: 2 while PUBLIC’s 3d subpack stays memory_tier: 8. If gobds sends the 3d pack to tier≥2 clients, low-memory devices get 3d assets they would not enable via the PUBLIC subpack path. Fine if deliberate for server selection; worth one line in README/packs.json docs so hub/gobds stay aligned.

**Nit / confirm intentional:** split `3d` uses `minMemoryTier: 2` while PUBLIC’s `3d` subpack stays `memory_tier: 8`. If gobds sends the 3d pack to tier≥2 clients, low-memory devices get 3d assets they would not enable via the PUBLIC subpack path. Fine if deliberate for server selection; worth one line in README/packs.json docs so hub/gobds stay aligned.
bot approved these changes 2026-10-01 19:00:41 +00:00
Dismissed
bot left a comment

Reviewed 26098a8efae6b4d13671fa1fc57269baf6ebca73 (feat/split-res-packs → main).

Verdict: Approve. Build/split/versioning design looks sound; tests cover assignment, PUBLIC∖server, hash reuse, and filtered combine.

What looks good

  • PUBLIC keeps current header UUID + lite/3d subpacks; FULL gets new UUIDs; 14 split packs have committed stable UUIDs and packs.json schema 1.
  • Content hash excludes manifest.json so version reuse is stable; --previous / missing-release path is defensive.
  • compileCombinedAssets({ includePaths }) correctly scopes core vs server combined keys; CI hard-checks 14 split artifacts + uploads PUBLIC/FULL/packs.json.
  • JSDoc on new modules; geometry format_version expectation fixed to 1.21.20.

CI (this head)

  • CI / build-and-test (20.x) — success (~28s)
  • Model Preview / model-preview — success (~1m20s)

Release / cutover (not blockers for the code)

  1. First tagged release that ships this must bump the manifest version — PUBLIC UUID is unchanged, so an unchanged version will not replace cached client packs (already called out in the PR body).
  2. Latest release today is still PokeBedrock RES 2.22.5.mcpack (no packs.json). First release with this renames PUBLIC/FULL assets; ensure gobds / hub / bds-manager understand packs.json (or the documented single-mcpack fallback) before that tag.
  3. Author follow-ups still needed in-game: lang fallback, 3d-over-core stack order, per-texts languages.json.

Issue links: repo open_issues_count=0 / list_issues type=issues state=open empty — no Fixes: / Could Fix: posted.

Resource-pack companion only — no BEH nudge, no merge, no push.

Reviewed `26098a8efae6b4d13671fa1fc57269baf6ebca73` (feat/split-res-packs → main). **Verdict:** Approve. Build/split/versioning design looks sound; tests cover assignment, PUBLIC∖server, hash reuse, and filtered combine. **What looks good** - PUBLIC keeps current header UUID + lite/3d subpacks; FULL gets new UUIDs; 14 split packs have committed stable UUIDs and `packs.json` schema 1. - Content hash excludes `manifest.json` so version reuse is stable; `--previous` / missing-release path is defensive. - `compileCombinedAssets({ includePaths })` correctly scopes core vs server combined keys; CI hard-checks 14 split artifacts + uploads PUBLIC/FULL/`packs.json`. - JSDoc on new modules; geometry format_version expectation fixed to `1.21.20`. **CI (this head)** - `CI / build-and-test (20.x)` — success (~28s) - `Model Preview / model-preview` — success (~1m20s) **Release / cutover (not blockers for the code)** 1. First tagged release that ships this **must bump** the manifest version — PUBLIC UUID is unchanged, so an unchanged version will not replace cached client packs (already called out in the PR body). 2. Latest release today is still `PokeBedrock RES 2.22.5.mcpack` (no `packs.json`). First release with this renames PUBLIC/FULL assets; ensure gobds / hub / bds-manager understand `packs.json` (or the documented single-mcpack fallback) before that tag. 3. Author follow-ups still needed in-game: lang fallback, 3d-over-core stack order, per-texts `languages.json`. **Issue links:** repo `open_issues_count=0` / `list_issues type=issues state=open` empty — no `Fixes:` / `Could Fix:` posted. Resource-pack companion only — no BEH nudge, no merge, no push.
@ -0,0 +136,4 @@
"render_controllers/crate.json",
"particles/crate/**",
"textures/items/crate_spawn_egg.png",
"textures/items/crate_keys/**",
Member

Non-blocking follow-up: item_texture.json stays in core (catch-all) and still names these server-stripped paths (crate_spawn_egg, textures/items/crate_keys/*, floating_text / server_npc spawn eggs, etc.).

Fine for the server split stack (server pack supplies the PNGs). For PUBLIC, those texture files are absent while the catalog rows remain — likely soft missing-texture only if a public client ever renders those items. If PUBLIC downloads are meant to be clean, consider stripping or rewriting those texture_data entries in a later pass (not required to land this).

Non-blocking follow-up: `item_texture.json` stays in **core** (catch-all) and still names these server-stripped paths (`crate_spawn_egg`, `textures/items/crate_keys/*`, floating_text / server_npc spawn eggs, etc.). Fine for the server split stack (server pack supplies the PNGs). For **PUBLIC**, those texture files are absent while the catalog rows remain — likely soft missing-texture only if a public client ever renders those items. If PUBLIC downloads are meant to be clean, consider stripping or rewriting those `texture_data` entries in a later pass (not required to land this).
Point model preview at the Forgejo copy of the action.
All checks were successful
CI / build-and-test (20.x) (pull_request) Successful in 31s
Model Preview / model-preview (pull_request) Successful in 1m20s
f0a00d0807
bot requested changes 2026-10-01 19:09:59 +00:00
Dismissed
bot left a comment

Review @ f0a00d08 (Point model preview at the Forgejo copy of the action)

Delta vs prior tip 26098a8e: only .github/workflows/model-preview.yml — smell-of-curry/mc-model-preview@latest → pinned https://git.pokebedrock.com/pokebedrock/mc-model-preview@b10a8ffc…. Right move for Forgejo runners (no floating @latest / GitHub-only action). CI on this head: CI / build-and-test success (~31s); Model Preview success (~1m20s).

Still blocking (unchanged — see prior inline #11186)

texts-en_US remains SPLIT_PACKS[0] with filter: {}. Locale packs below still write texts/languages.json. Without gobds dropping en_US when a language pack matches, highest-wins can pin clients to English. Put en_US last among texts packs (fallback) or document/enforce the exclusion rule in-repo before merge. Not addressed by this commit.

Carry-forward (not re-litigated)

  • minMemoryTier: 2 vs PUBLIC subpack memory_tier: 8 — confirm intentional (inline #11187).
  • First release shipping this must bump PUBLIC header version (same UUID) or clients keep the cached pack.
  • Coordinate gobds/hub/bds-manager on packs.json + PUBLIC/FULL rename — do not merge res alone.

Open res issues: 0 — no Fixes: / Could Fix:.

Not gameplay-pack / no BEH nudge / no merge.

## Review @ `f0a00d08` (Point model preview at the Forgejo copy of the action) Delta vs prior tip `26098a8e`: **only** `.github/workflows/model-preview.yml` — `smell-of-curry/mc-model-preview@latest` → pinned `https://git.pokebedrock.com/pokebedrock/mc-model-preview@b10a8ffc…`. Right move for Forgejo runners (no floating `@latest` / GitHub-only action). CI on this head: **CI / build-and-test** success (~31s); **Model Preview** success (~1m20s). ### Still blocking (unchanged — see prior inline #11186) **`texts-en_US` remains `SPLIT_PACKS[0]` with `filter: {}`.** Locale packs below still write `texts/languages.json`. Without gobds dropping en_US when a language pack matches, highest-wins can pin clients to English. Put en_US last among texts packs (fallback) or document/enforce the exclusion rule in-repo before merge. Not addressed by this commit. ### Carry-forward (not re-litigated) - `minMemoryTier: 2` vs PUBLIC subpack `memory_tier: 8` — confirm intentional (inline #11187). - First release shipping this must bump PUBLIC header version (same UUID) or clients keep the cached pack. - Coordinate gobds/hub/bds-manager on `packs.json` + PUBLIC/FULL rename — do not merge res alone. ### Issue links Open res issues: **0** — no `Fixes:` / `Could Fix:`. Not gameplay-pack / no BEH nudge / no merge.
Member

Good: pin the Forgejo-hosted action SHA instead of smell-of-curry/mc-model-preview@latest. Model Preview is green on this tip.

Good: pin the Forgejo-hosted action SHA instead of `smell-of-curry/mc-model-preview@latest`. Model Preview is green on this tip.
bot requested changes 2026-10-01 19:10:41 +00:00
Dismissed
bot left a comment

Review @ f0a00d08 (Point model preview at the Forgejo copy of the action)

No prior bot review on this SHA. Open issues: 0 (no issue-link). Not gameplay-pack / no BEH nudge / will not merge res alone.

New commit (.github/workflows/model-preview.yml only) — OK

  • Replaces smell-of-curry/mc-model-preview@latest with pinned Forgejo absolute URL https://git.pokebedrock.com/pokebedrock/mc-model-preview@b10a8ffcf825203aa537c56ce48531249bf1ca6e.
  • Pin target commit exists on pokebedrock/mc-model-preview (Forgejo-friendly artifact fallback).
  • CI on this head: CI / build-and-test success (~31s); Model Preview success (~1m20s) — validates the action path change.

Blocker still open (unchanged since REQUEST_CHANGES#2946 / inline on scripts/data/splitPacks.ts)

  1. texts-en_US remains SPLIT_PACKS[0] with filter: {}. Locale packs below still emit texts/languages.json. Highest-wins can pin non-English clients to English unless en_US is last among texts packs (fallback) or gobds excludes it when a language pack matches. Not fixed by this tip — do not treat APPROVED#2947 (same prior tip race) as clearing this.

Not re-opening a duplicate inline for the same finding (existing thread on texts-en_US).

Otherwise

  • Tip f0a00d08 mergeable, draft=false; base main @ d9b4c7e6 (merge_base 5a2ff211).
  • Release/cutover notes from prior reviews still apply (PUBLIC UUID-stable version bump on first ship; coordinate hub/bds-manager/gobds).
## Review @ `f0a00d08` (Point model preview at the Forgejo copy of the action) No prior bot review on this SHA. Open issues: **0** (no issue-link). Not gameplay-pack / no BEH nudge / will not merge res alone. ### New commit (`.github/workflows/model-preview.yml` only) — OK - Replaces `smell-of-curry/mc-model-preview@latest` with pinned Forgejo absolute URL `https://git.pokebedrock.com/pokebedrock/mc-model-preview@b10a8ffcf825203aa537c56ce48531249bf1ca6e`. - Pin target commit exists on `pokebedrock/mc-model-preview` (Forgejo-friendly artifact fallback). - CI on this head: **CI / build-and-test** success (~31s); **Model Preview** success (~1m20s) — validates the action path change. ### Blocker still open (unchanged since REQUEST_CHANGES#2946 / inline on `scripts/data/splitPacks.ts`) 1. **`texts-en_US` remains `SPLIT_PACKS[0]` with `filter: {}`.** Locale packs below still emit `texts/languages.json`. Highest-wins can pin non-English clients to English unless en_US is last among texts packs (fallback) or gobds excludes it when a language pack matches. Not fixed by this tip — **do not treat APPROVED#2947 (same prior tip race) as clearing this.** Not re-opening a duplicate inline for the same finding (existing thread on `texts-en_US`). ### Otherwise - Tip `f0a00d08` mergeable, draft=false; base `main` @ `d9b4c7e6` (merge_base `5a2ff211`). - Release/cutover notes from prior reviews still apply (PUBLIC UUID-stable version bump on first ship; coordinate hub/bds-manager/gobds).
Keep split packs from shadowing each other's files.
All checks were successful
CI / build-and-test (20.x) (pull_request) Successful in 29s
Model Preview / model-preview (pull_request) Successful in 1m17s
05f99f36a5
server sits above core on every client, but both emitted
animations/pokebedrock_animations.json, models/entity/pokebedrock_models.geo.json
and render_controllers/pokebedrock_render_controllers.json. A same-path
combined file replaces the lower one wholesale (the reason subpacks get
_3d), so server's 18 geometries would have hidden core's 207. Server's
combined files now use the _server suffix.

Each texts pack wrote texts/languages.json with only its own code, and
texts-en_US (sent to everyone, highest priority) listed only en_US. They
now all ship the same full list core ships, so the result does not depend
on whether Bedrock unions those files or keeps the top one.

Co-authored-by: Cursor <cursoragent@cursor.com>
bot approved these changes 2026-10-01 20:18:48 +00:00
Dismissed
bot left a comment

Review @ 05f99f36 (Keep split packs from shadowing each other's files)

No prior bot review on this SHA. Open issues: 0 (no issue-link). Not gameplay-pack / no BEH nudge / will not merge res alone.

Delta vs f0a00d08 — clears REQUEST_CHANGES#2961

  1. texts/languages.json — texts packs now write identical SPLIT_LANGUAGES (full list) instead of [single locale]. Highest-wins / union no longer pins clients to en_US only. texts-en_US may stay index 0 with filter: {}; that is fine once the shared file matches.
  2. Server combined-name collision — compileCombinedAssets({ suffix: "_server" }) for the server pack so pokebedrock_*_server(.geo).json does not wholesale-replace core's root combined files. Right fix for same-path stack behavior (same reason subpacks use _3d).
  3. Tests: new suffix isolation case + SPLIT_LANGUAGES matches source texts/languages.json (set equality).

CI (this head)

  • CI / build-and-test — success (run #2336)
  • Model Preview — in flight / succeeding on this tip (run #2337)

Carry-forward (not blockers)

  • First tagged release that ships this must bump PUBLIC header version (same UUID) or clients keep the cached pack.
  • Coordinate gobds / hub / bds-manager on packs.json + PUBLIC/FULL rename before that tag.
  • minMemoryTier: 2 on split 3d vs PUBLIC subpack memory_tier: 8 — confirm intentional.
  • PR body still describes per-locale languages.json as ["de_DE"] and schema sample 2.22.4 — stale docs only.
  • In-game follow-ups still needed: lang fallback, 3d-over-core stack order.

Resource-pack companion — do not merge independently of consumers.

## Review @ `05f99f36` (Keep split packs from shadowing each other's files) No prior bot review on this SHA. Open issues: **0** (no issue-link). Not gameplay-pack / no BEH nudge / will not merge res alone. ### Delta vs `f0a00d08` — clears REQUEST_CHANGES#2961 1. **`texts/languages.json`** — texts packs now write identical `SPLIT_LANGUAGES` (full list) instead of `[single locale]`. Highest-wins / union no longer pins clients to `en_US` only. `texts-en_US` may stay index 0 with `filter: {}`; that is fine once the shared file matches. 2. **Server combined-name collision** — `compileCombinedAssets({ suffix: "_server" })` for the server pack so `pokebedrock_*_server(.geo).json` does not wholesale-replace core's root combined files. Right fix for same-path stack behavior (same reason subpacks use `_3d`). 3. Tests: new suffix isolation case + `SPLIT_LANGUAGES` matches source `texts/languages.json` (set equality). ### CI (this head) - `CI / build-and-test` — success (run #2336) - `Model Preview` — in flight / succeeding on this tip (run #2337) ### Carry-forward (not blockers) - First tagged release that ships this **must bump** PUBLIC header version (same UUID) or clients keep the cached pack. - Coordinate gobds / hub / bds-manager on `packs.json` + PUBLIC/FULL rename before that tag. - `minMemoryTier: 2` on split `3d` vs PUBLIC subpack `memory_tier: 8` — confirm intentional. - PR body still describes per-locale `languages.json` as `["de_DE"]` and schema sample `2.22.4` — stale docs only. - In-game follow-ups still needed: lang fallback, 3d-over-core stack order. Resource-pack companion — do not merge independently of consumers.
bot approved these changes 2026-10-01 20:19:38 +00:00
Dismissed
bot left a comment

Review @ 05f99f36 (Keep split packs from shadowing each other's files)

No prior bot review on this SHA. Open issues: 0 (no issue-link). Not gameplay-pack / no BEH nudge / will not merge res alone.

Prior blocker cleared

texts/languages.json pinning (REQUEST_CHANGES#2961 / #2946): each texts pack previously wrote only its own code, so texts-en_US at SPLIT_PACKS[0] with filter: {} could pin the stack to English. Tip now ships the same full SPLIT_LANGUAGES list in every texts pack (and tests equality vs core's source texts/languages.json). Highest-wins vs union no longer changes the result. Empty filter on en_US stays intentional (fallback to everyone) — OK with identical lists.

New fix — LGTM

  • Server vs core combined-file shadowing: rootServer compiles with suffix: "_server" so pokebedrock_*_server files cannot wholesale-replace core's combined animations/models/render_controllers. Tests cover filtered merge + suffix path uniqueness.
  • Tip mergeable, draft=false; base main @ 9a5af785.
  • CI on this head: CI / build-and-test success (~29s); Model Preview success (~1m17s).

Carry-forward (not blockers for this tip)

  • First release that ships this must bump PUBLIC header version (same UUID) or clients keep the cached pack.
  • Coordinate gobds / hub / bds-manager on packs.json + PUBLIC/FULL rename — do not merge res independently.
  • PR body test note still says texts-de_DE ships languages.json of ["de_DE"] — stale vs this tip; refresh when convenient.
  • minMemoryTier: 2 vs PUBLIC subpack memory_tier: 8 — still confirm intentional (server selection vs client subpack picker).
## Review @ `05f99f36` (Keep split packs from shadowing each other's files) No prior bot review on this SHA. Open issues: **0** (no issue-link). Not gameplay-pack / no BEH nudge / will not merge res alone. ### Prior blocker cleared **`texts/languages.json` pinning** (REQUEST_CHANGES#2961 / #2946): each texts pack previously wrote only its own code, so `texts-en_US` at `SPLIT_PACKS[0]` with `filter: {}` could pin the stack to English. Tip now ships the same full `SPLIT_LANGUAGES` list in every texts pack (and tests equality vs core's source `texts/languages.json`). Highest-wins vs union no longer changes the result. Empty `filter` on en_US stays intentional (fallback to everyone) — OK with identical lists. ### New fix — LGTM - **Server vs core combined-file shadowing:** `rootServer` compiles with `suffix: "_server"` so `pokebedrock_*_server` files cannot wholesale-replace core's combined animations/models/render_controllers. Tests cover filtered merge + suffix path uniqueness. - Tip mergeable, draft=false; base `main` @ `9a5af785`. - CI on this head: **CI / build-and-test** success (~29s); **Model Preview** success (~1m17s). ### Carry-forward (not blockers for this tip) - First release that ships this must bump PUBLIC header version (same UUID) or clients keep the cached pack. - Coordinate gobds / hub / bds-manager on `packs.json` + PUBLIC/FULL rename — do not merge res independently. - PR body test note still says `texts-de_DE` ships `languages.json` of `["de_DE"]` — stale vs this tip; refresh when convenient. - `minMemoryTier: 2` vs PUBLIC subpack `memory_tier: 8` — still confirm intentional (server selection vs client subpack picker).
feat(build): give every split pack its own icon
All checks were successful
CI / build-and-test (20.x) (pull_request) Successful in 32s
Model Preview / model-preview (pull_request) Successful in 1m5s
a109538b11
Split packs other than core had no pack_icon.png and showed the missing
texture in the Active list. Each now ships the PokeBedrock icon with a
badge for its content: cube (3d), server rack (server), window (ui),
roaring creature (cries), notes (music), speaker (other sounds), and a
speech bubble with the language code for each texts pack.

Icons live in scripts/data/packIcons, which never ships. Core keeps the
root pack_icon.png. A missing icon fails the build and the split pack
test.
bot approved these changes 2026-10-01 21:01:49 +00:00
Dismissed
bot left a comment

Review @ a109538b (feat(build): give every split pack its own icon)

No prior bot review on this SHA. Open issues: 0 (no issue-link). Not gameplay-pack / no BEH nudge / will not merge res alone.

Delta vs 05f99f36 — LGTM

  1. Split pack icons — non-core packs get pack_icon.png from scripts/data/packIcons/<name>.png via contentEntries({ icon }). Core keeps the root pack_icon.png (assignPack still routes it there). Icons are under scripts/, which shippableFiles already excludes, so they never ship as source.
  2. Coverage — every SPLIT_PACKS name except core has a matching PNG (13/13). Test asserts no missing icons + assignPack("pack_icon.png") === "core". Missing icon fails readFile at build time.
  3. Icons participate in the content hash (pre-manifest) — intentional version bump when a badge changes.

CI (this head)

  • CI / build-and-test — success
  • Model Preview — success

Carry-forward (not blockers)

  • First release that ships this must bump PUBLIC header version (same UUID) or clients keep the cached pack.
  • Coordinate gobds / hub / bds-manager on packs.json + PUBLIC/FULL rename — do not merge res independently.
  • minMemoryTier: 2 vs PUBLIC subpack memory_tier: 8 — still confirm intentional.
  • PR body still has stale per-locale languages.json / schema 2.22.4 notes — docs only.

Resource-pack companion — do not merge independently of consumers.

## Review @ `a109538b` (feat(build): give every split pack its own icon) No prior bot review on this SHA. Open issues: **0** (no issue-link). Not gameplay-pack / no BEH nudge / will not merge res alone. ### Delta vs `05f99f36` — LGTM 1. **Split pack icons** — non-`core` packs get `pack_icon.png` from `scripts/data/packIcons/<name>.png` via `contentEntries({ icon })`. Core keeps the root `pack_icon.png` (`assignPack` still routes it there). Icons are under `scripts/`, which `shippableFiles` already excludes, so they never ship as source. 2. **Coverage** — every `SPLIT_PACKS` name except `core` has a matching PNG (13/13). Test asserts no missing icons + `assignPack("pack_icon.png") === "core"`. Missing icon fails `readFile` at build time. 3. Icons participate in the content hash (pre-manifest) — intentional version bump when a badge changes. ### CI (this head) - `CI / build-and-test` — success - `Model Preview` — success ### Carry-forward (not blockers) - First release that ships this must bump PUBLIC header version (same UUID) or clients keep the cached pack. - Coordinate gobds / hub / bds-manager on `packs.json` + PUBLIC/FULL rename — do not merge res independently. - `minMemoryTier: 2` vs PUBLIC subpack `memory_tier: 8` — still confirm intentional. - PR body still has stale per-locale `languages.json` / schema `2.22.4` notes — docs only. Resource-pack companion — do not merge independently of consumers.
bot approved these changes 2026-10-01 21:02:25 +00:00
bot left a comment

Review @ a109538b (feat(build): give every split pack its own icon)

No prior bot review on this SHA. Open issues: 0 (no issue-link). Not gameplay-pack / no BEH nudge / will not merge res alone.

Delta vs last approved tip 05f99f36

  • Adds scripts/data/packIcons/*.png for every split pack except core (3d, server, ui, audio-, texts-).
  • contentEntries takes optional icon → injects pack_icon.png; non-core packs readFile that path (ENOENT fails the build).
  • Test: every non-core pack has an icon file; assignPack("pack_icon.png") === "core" so root icon does not duplicate into other packs.
  • JSDoc for the new icon param. Prior blockers (identical SPLIT_LANGUAGES in texts packs; server combined _server suffix) unchanged / still cleared.

CI (this head)

Carry-forward (not blockers)

  • First release shipping this must bump PUBLIC header version (same UUID) or clients keep the cached pack.
  • Coordinate gobds / hub / bds-manager on packs.json + PUBLIC/FULL rename — do not merge res independently.
  • minMemoryTier: 2 vs PUBLIC subpack memory_tier: 8 — confirm intentional.
  • PR body may still note stale languages.json ["de_DE"] / schema 2.22.4.
  • Soft: icons land in the content hash, so the first build with icons will take current version for every non-core pack (expected).

Resource-pack companion — do not merge independently of consumers; no BEH Reviewer nudge.

## Review @ `a109538b` (feat(build): give every split pack its own icon) No prior bot review on this SHA. Open issues: **0** (no issue-link). Not gameplay-pack / no BEH nudge / will not merge res alone. ### Delta vs last approved tip `05f99f36` - Adds `scripts/data/packIcons/*.png` for every split pack except `core` (3d, server, ui, audio-*, texts-*). - `contentEntries` takes optional `icon` → injects `pack_icon.png`; non-core packs `readFile` that path (ENOENT fails the build). - Test: every non-core pack has an icon file; `assignPack("pack_icon.png") === "core"` so root icon does not duplicate into other packs. - JSDoc for the new `icon` param. Prior blockers (identical `SPLIT_LANGUAGES` in texts packs; server combined `_server` suffix) **unchanged / still cleared**. ### CI (this head) - `ci.yml` run **#2346** — success (~32s) https://git.pokebedrock.com/pokebedrock/pokebedrock-res/actions/runs/362 - `model-preview.yml` run **#2347** — success (~65s) https://git.pokebedrock.com/pokebedrock/pokebedrock-res/actions/runs/363 ### Carry-forward (not blockers) - First release shipping this must bump PUBLIC header version (same UUID) or clients keep the cached pack. - Coordinate gobds / hub / bds-manager on `packs.json` + PUBLIC/FULL rename — do not merge res independently. - `minMemoryTier: 2` vs PUBLIC subpack `memory_tier: 8` — confirm intentional. - PR body may still note stale `languages.json ["de_DE"]` / schema `2.22.4`. - Soft: icons land in the content hash, so the first build with icons will take current version for every non-core pack (expected). Resource-pack companion — do not merge independently of consumers; no BEH Reviewer nudge.
Sign in to join this conversation.
No reviewers
bot
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
pokebedrock/pokebedrock-res!20
No description provided.