veratown-prototype

BC Source Compatibility Review: 2026-10-22

Comparison scope

Item Value
Previous prototype pin dde078f5f60d5431172c01f1d295334e2c7ef0f4
New pin 4d478e0b37196a545c516570b3198aa4b6cfdd14
Upstream ref inspected Fetched origin/master in the local Bondage-College clone
Upstream head timestamp 2026-10-21T16:28:49-04:00
GameVersion R133 at both revisions
Commit range 142 commits, including 108 non-merge commits
Changed paths 440: 287 Assets, 84 Screens, 46 Scripts, 23 other
Diff size 3,972 insertions, 1,581 deletions; includes binary asset changes

This updates the source pin, not the deployed BC server. The upstream clone’s working tree is not modified: generators read the selected Git blobs. The previous R133Beta2-to-R133 review is historical; this review starts at the bot’s actual most recent pin.

The complete upstream comparison contains all changed paths and patches. Reproduce the full commit/path inventories locally, including merge commits:

git -C ~/repo/Bondage-College log --format=fuller \
  dde078f5f60d5431172c01f1d295334e2c7ef0f4..4d478e0b37196a545c516570b3198aa4b6cfdd14
git -C ~/repo/Bondage-College diff --name-status \
  dde078f5f60d5431172c01f1d295334e2c7ef0f4 \
  4d478e0b37196a545c516570b3198aa4b6cfdd14

Upstream changes and disposition

Wire protocol and source types

Bot: regenerate declarations and preserve exact category/color/config types instead of weakening the new map union to unknown or arbitrary category strings. The event maps remain 26 outgoing and 30 incoming events. No acknowledgement, request correlation, rate limit, or action-status changes are warranted.

Maps, automatic doors, and teleport pads

Bot: regenerate the catalog (170 tiles, 287 objects) and include serializable default object config, never executable callbacks. Extend the shared persisted map validator to accept strict teleporter config. Preserve it through live-save, metadata edit, revisions, backups/restores, config copying, missing-room creation, and unrelated guarded door writes. Existing keys, fields, and sign limits remain.

Optional pad fields stay optional. Accept integer destinations 0-39 and the pinned upstream hex validator’s accepted forms, including its seven-digit form. Reject malformed configuration instead of dropping it or sanitizing to defaults. Diagnostics expose only known field names and canonical cell indices.

The offline analyzer recognizes automatic doors as existing WallPath thresholds and accepts the pad’s catalog ID as an ordinary non-boundary object. It still does not interpret cell metadata, model teleport links in its exterior route graph, or claim directional/access-aware reachability.

Not added: headless browser callbacks, automatic pad pairing, automatic teleport-on-entry, pathfinding, pad editing commands, or optimistic movement evidence. Stored configuration is not a live BC observation.

Appearance catalogs and assets

The regenerated catalog has 85 groups and 2,641 assets, seven more than the previous pin:

Other catalog changes include:

Bot: retain the dynamic module’s raw getter and explicit diagnostics, expose no enumerated options for that unresolved module, and keep mutation rejected by the codec. Malformed/missing/empty static option arrays still fail generation. The catalog records 205 unsupported-source diagnostics, not 205 runtime failures. No lock types or custom callbacks are newly authorized.

Operator review: itemsets with explicit catalogRevision must be reviewed before repinning. Check unpinned itemsets using TentacleSuit selectors and changed color layouts too. This update neither inspects nor rewrites database itemsets.

Browser inventory, validation, and extended-item fixes

Upstream fixes preserve crafted layer settings, handle mixed numeric/object modular priority overrides, retain merged drawing offsets, and correctly report sanitized missing item properties. Inventory changes include default push arguments, InventoryIsWorn("None"), key recognition, and retaining worn items during random extension. Text items truncate at their own configured limits; pet-suit trigger reset, shock handlers, and several item controls are corrected.

Bot: source-driven metadata is refreshed, but browser inventory/drawing functions are not imported. The headless codec sends selectors rather than browser-derived drawing overrides and retains its existing permission, prerequisite, lock, and unresolved-definition guards. Existing appearance regressions must remain green; browser item fixes are not proof of headless support for those items.

Room validation, communication, and UI behavior

Bot: no browser DOM or speech engine is imported. Do not introduce silent trimming or emulate player hearing. Private command replies remain whispers, but a deafened browser recipient may no longer read them normally; dispatch still does not establish delivery. Room snapshots remain server-driven, with existing adapter validation and no success-shaped sanitization fallbacks.

Maintenance, tests, and tooling

The remaining changes include JSDoc lint adoption/fixes, deprecated API replacement, the inclusive CommonRange correction, CommonCycle/module cycling helpers, viewport behavior, upstream test coverage, Node asset/CSV/check tooling, HTML loading updates, package/lockfile changes, and CI fixes.

Bot: these upstream browser/build dependencies are not copied into the bot. No new runtime dependencies or services are needed. Static appearance extraction does not execute the changed helpers.

Verification and rollout

Automated coverage includes strict valid/invalid mixed cell configs, exact round-trips through revisions/backups and the actual fake-socket creation packet, defensive observed snapshots, preservation in guarded door updates without optimistic snapshots, automatic-door catalog/analysis behavior, and unresolved BarStool mutation rejection. Existing appearance, transport, journal, isolation, and lifecycle suites remain required.

Completed for this update against the merged region-geometry implementation: lint, repository formatting, type-check, all 579 tests, and the production build with generated API documentation passed. Regenerating all four generated BC files a second time produced identical SHA-256 hashes.

Regeneration must be deterministic at the selected pin. Run:

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

No live BC login, deployment, MongoDB read/write, or source-database copy is part of this sync. It does not run the upstream browser test suite. Qualify the actual server/client build separately, especially mixed sign/pad save/restore, missing room creation, unrelated door updates, reconnect, and native pad behavior.

No migration is necessary for existing sign-only maps. Older sign-only bot validators reject maps with teleporters: suspend map administration/recreation before rollback and retain the full backed-up documents. Never strip unknown configs to make a rollback appear successful.

Regenerate region candidate manifests after this catalog repin. The reviewed region importer compares catalog revisions as well as map fingerprints, so a manifest exported under the old catalog must not be relabeled to bypass its provenance check.