feat(bridge): Backpacks on protocol 14 — read a backpack (PLAN_REDESIGNS §11.3) #33

Merged
whitlocktech merged 1 commits from feat/rust-backpacks into edge 2026-10-12 14:41:35 -05:00
Member

WhiteThunder's Backpacks as an optional integration (D199), built as PLAN_REDESIGNS §11.3.2 designs it. Read, never write (R2).

  • Hello/status: integrations.backpacks gains sizes, the N of every registered backpacks.size.N in ascending order. Dynamic-size profiles are left out. Hello is sent again when Backpacks loads or unloads.
  • backpacks.read {steamId}: calls API_ReadBackpackContentsAsJson. Only when that returns a backpack does it call API_GetBackpackCapacityById. By then the backpack is loaded, so the capacity reflects a size granted later (the trap from §11.3.1).
    • Each stack is reduced to slot, shortname, display (the game's English name, D340), amount, and skin and name when set.
    • A blueprint carries its target's shortname as blueprint (D341).
    • contents goes one level deep, and overflow marks a stack past the capacity.
    • pageSize is Backpacks' Max size per page, read from its config and cached by mtime.
  • Refusals: backpacks-missing, bad-id, unreadable.

The bigger backpack an event lends is a backpacks.size.N permission pushed by perm.sync (D337), so this repo needs no code for it. Still protocol 14 (D332).

Tested: node scripts/checkPlugin.js is ok (57 hooks). The plugin compiled and loaded on both rigs (Rust changeset 167584; Oxide 2.0.7826, Carbon 2.0.262). Both rigs were then put back on the bridge they ran before. The in-game walk rows are §11.3.3, deferred to the end (D331).

Companions: Rust-Link, Module-Rust, Android-app (feat/rust-backpacks), docs (docs/rust-backpacks-build).

  • AI-assisted: written by Claude Code (Claude Opus 5.5)

🤖 Generated with Claude Code

https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY

WhiteThunder's **Backpacks** as an optional integration (D199), built as PLAN_REDESIGNS §11.3.2 designs it. Read, never write (R2). - **Hello/status:** `integrations.backpacks` gains `sizes`, the N of every registered `backpacks.size.N` in ascending order. Dynamic-size profiles are left out. Hello is sent again when Backpacks loads or unloads. - **`backpacks.read {steamId}`:** calls `API_ReadBackpackContentsAsJson`. Only when that returns a backpack does it call `API_GetBackpackCapacityById`. By then the backpack is loaded, so the capacity reflects a size granted later (the trap from §11.3.1). - Each stack is reduced to `slot`, `shortname`, `display` (the game's English name, **D340**), `amount`, and `skin` and `name` when set. - A blueprint carries its target's shortname as `blueprint` (**D341**). - `contents` goes one level deep, and `overflow` marks a stack past the capacity. - `pageSize` is Backpacks' *Max size per page*, read from its config and cached by mtime. - **Refusals:** `backpacks-missing`, `bad-id`, `unreadable`. The bigger backpack an event lends is a `backpacks.size.N` permission pushed by `perm.sync` (D337), so this repo needs no code for it. Still protocol 14 (D332). **Tested:** `node scripts/checkPlugin.js` is ok (57 hooks). The plugin compiled and loaded on both rigs (Rust changeset 167584; Oxide 2.0.7826, Carbon 2.0.262). Both rigs were then put back on the bridge they ran before. The in-game walk rows are §11.3.3, deferred to the end (D331). Companions: Rust-Link, Module-Rust, Android-app (`feat/rust-backpacks`), docs (`docs/rust-backpacks-build`). - [x] AI-assisted: written by Claude Code (Claude Opus 5.5) 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
wtclaude added 1 commit 2026-10-12 14:37:14 -05:00
feat(bridge): Backpacks on protocol 14 — read a backpack (PLAN_REDESIGNS §11.3)
All checks were successful
PR Checks / plugin-checks (pull_request) Successful in 23s
e3dc918400
WhiteThunder's Backpacks as an optional integration (D199), as §11.3.2 designs it.
Read, never write (R2):

- hello/status `integrations.backpacks` adds `sizes`: the N of every registered
  backpacks.size.N, ascending (dynamic-size profiles left out). Hello is resent
  when Backpacks loads or unloads.
- `backpacks.read {steamId}`: API_ReadBackpackContentsAsJson, and only when that
  answered a backpack, API_GetBackpackCapacityById — the backpack is loaded by
  then, so the capacity follows a later grant (§11.3.1's trap). Each stack is
  reduced to slot, shortname, display (the game's English name, D340), amount,
  skin and name when set; a blueprint carries its target as `blueprint` (D341);
  contents one level deep; `overflow` past the capacity. `pageSize` is
  Backpacks' "Max size per page" from its config, cached by mtime.
- Refusals: backpacks-missing, bad-id, unreadable.

The bigger backpack an event lends is a backpacks.size.N permission pushed by
perm.sync (D337), so it needs no code here. Still protocol 14 (D332).

Compiled on both rigs (Rust changeset 167584; Oxide 2.0.7826, Carbon 2.0.262),
then restored to the bridge they ran before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
whitlocktech merged commit 6be14c7270 into edge 2026-10-12 14:41:35 -05:00
whitlocktech deleted branch feat/rust-backpacks 2026-10-12 14:41:36 -05:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RunicGateway/Rust-Plugins#33
No description provided.