veratown-prototype

BC Source Compatibility Review: 2026-10-29

Comparison scope

Item Value
Previous prototype pin 4d478e0b37196a545c516570b3198aa4b6cfdd14
New pin 614937bb8856713d18dc6709af09638b276f465e
Upstream ref inspected origin/master in the local Bondage-College clone
Upstream head timestamp 2026-10-28T23:11:20-04:00
GameVersion R133 at both revisions
Commit range 127 commits: 95 non-merge and 32 merge
Changed paths 744 files; 12,928 insertions and 7,474 deletions, including images

This updates the prototype’s source pin, not the deployed BC server. The generators read pinned Git blobs; they do not depend on the BC checkout’s working tree. The upstream comparison contains the full range.

Upstream changes and disposition

Appearance color metadata

Commit cda5bb2868b9cf9d4bcb5e7e44c605adf5b0de28 moves default color metadata from each asset definition into its colorable layer definitions. AssetGroup no longer exposes DefaultColor; AssetLayerDefinition.Color is an optional list of preset colors, with its first value defining that layer’s default. BC’s AssetAssignDefaultColor then builds the asset’s DefaultColor vector by ColorIndex, following CopyLayerColor references and falling back to the group’s first ColorSchema value.

The previous extractor only read the removed asset-level field. Re-pinning without changing it would have silently replaced many custom item defaults with the generic group fill. The extractor now follows BC’s per-layer rule, preserves source layer color metadata, and retains the old asset-level override path for regression coverage. It never evaluates upstream browser code.

The regenerated catalog contains 85 groups and 2,658 assets, with 17 new assets and no removed assets. 209 unsupported-source diagnostics remain explicit; these are catalog limitations, not runtime failures. The catalog contains 175 changed computed DefaultColor vectors relative to the prior generated catalog. The current item additions are:

The catalog remains descriptive metadata, not permission to mutate every item. The headless codec still rejects unresolved or unsupported definitions, and the reviewed lock-mutation allowlist is unchanged. No database itemsets were read, rewritten, or migrated. Operators should review itemsets pinned to the previous catalog revision and configurations affected by changed item colors or selectors before applying them.

Map catalog and doodad types

The generated map catalog now contains 170 tiles and 372 objects (up from 287 objects). Upstream introduces EmptySpace passable/impassable entries, Kitchen and Office object categories, replacement metadata (DeprecatedID), and editor palette metadata (PaletteImage). These fields are retained in the serializable catalog; executable callbacks such as CanEnter are not copied. No browser migration or pathfinding behavior is implemented by this update.

RecentlyUsedMapElements now uses the MapDoodadRef string-reference type instead of full doodad records. The generated protocol shim preserves this template-literal type. Other map type updates include DoodadType and the additional doodad fields. Existing sign and teleporter configuration validation and preservation remain unchanged.

Wire declarations and runtime behavior

The protocol declarations also refine several payload types, including nullable ServerCharacterItemUpdate.Name, an explicit Sender in game responses, and optional/undefined values in private-character data. MessagesPatch.d.ts is unchanged. The event names remain 26 client-to-server and 30 server-to-client; there is no acknowledgement, rate-limit, or request correlation change. No runtime consumer depended on the adjusted internal type shapes, so declaration regeneration was sufficient.

The source GameVersion remains R133. This sync does not establish that the configured server serves these assets or behavior, and it does not authorize live appearance or map mutation.

R133 compatibility boundary

Both the previous and current source pins identify as R133, and the bot’s release-path guard still requires /R133/. The protocol diff changes declarations only: event names, packet direction, acknowledgement behavior, and rate limits are unchanged. The asset extractor retains the previous asset-level DefaultColor path as well as the new per-layer path; existing map IDs remain in the catalog, and the adapter retains category-specific Blank references through the upstream EmptySpace migration.

This preserves the existing R133 integration contract, but the R133 version label alone cannot guarantee identical content across every historical source snapshot. The 17 newly cataloged assets and changed default colors are sourced from the current pin and may not exist or match on an older deployment snapshot. Qualifying a specific server build still requires testing against that build; offline tests do not certify its live asset data.

Verification

Regenerate deterministically from the selected revision:

BC_REPO=/path/to/Bondage-College npm run sync:bc
npm run lint
npm run format:check
npm run check
npm test
npm run build

No live BC connection, database inspection/write, deployment, or source-database copy is part of this sync. Live qualification remains a separate approval and must use a dedicated BC account against the intended server version.