Repository navigation
docs(ammo): AM-00 campaign plan — wide fan-out ledger for finite special ammo - #1041
Conversation
…ial ammo (#1026) Plan-only PR for the ammo campaign: docs/analysis/ammo/ with the D-AM01..06 decisions, a current-state audit (bandolier/reload, requestAmmoChange validation gap, damage path ignoring ammo type, cooked-data push mechanics, GM tooling gap), and a work-packets ledger restructured around one small serial gate (AM-F: item ids, AmmoReserve/AmmoModifier contracts, pre-split hotspot files) feeding two waves of parallel packets, with a file-ownership matrix so no two packets collide. Folds in AM-01's RE findings (PR #1040), which landed while this plan was being written: no reserve model exists in the client (D-AM01 is a restoration choice), widening ammo_types needs no client push, toggle abilities 715/719 are independent of requestAmmoChange (a design decision flagged for the owner), and /gmgiveammo has no recovered server receiver (GM tooling ships as a .-console command instead). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wgx9Q5HHQtsvQ1tyaRraqz
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⚙️ Run configurationConfiguration used: Repository: SandboxServers/Cimmeria/.coderabbit.yaml Review profile: ASSERTIVE Plan: Advanced Run ID: 📒 Files selected for processing (7)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Server-applied ammo modifiers, daggers in a later wave, infinite ammo frees the reserve only, Standard Pistol + Standard SMG widened. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wgx9Q5HHQtsvQ1tyaRraqz
|
Token profile for this PR. Estimated list-price USD, a plan-usage proxy, not a bill (D-TP1).
Attribution: worktree, confidence 0.94; 0.0% of the same sessions' spend over this PR's window is unattributed. Review rounds: 0. Follow-up fix PRs: none. Reverted: no. Claude Code's own cost-state total is per process and is not split by PR; over the 1 sessions this PR's spend came from (100% of it), the profiler was 15.5% under it, so read the USD as a floor. Profiler 36225a9, Claude Code 2.1.283, price table 2026-10-03. How this is measured {"schema":"cimmeria-pr-stats/1","pr":1041,"profiler":"36225a9dd1ee","claude_code":"2.1.283","price_table":"2026-10-03","window":{"first":"2026-09-28T22:38:08.772Z","merged":"2026-09-28T23:04:59Z"},"attribution":{"method":"worktree","confidence":0.944,"unattributed_share":0.0},"usd_est":7.4493,"by_model":{"claude-sonnet-5":6.4144,"claude-opus-5-5":1.0349},"tokens":{"input":182,"output":113649,"thinking":35900,"cache_read":26061700,"cache_write_5m":359516,"cache_write_1h":16822},"requests":90.0,"turns":4,"human_prompts":0,"event_triggers":{"background_completion":1},"agents":{"items-systems-advisor":{"count":1,"requests":80.0,"usd_est":6.4144}},"context":{"peak":391252,"p50":311725.5,"compactions":0,"idle_gap_write_share":0.0058},"tools":{"bash_chars":133621,"read_chars":207145,"top_exposure":[{"tool":"Bash","fingerprint":"grep","exposure_chars":3744608},{"tool":"Read","fingerprint":"docs/analysis/bank-vault/work-packets.md","exposure_chars":2999724},{"tool":"Bash","fingerprint":"sed -n","exposure_chars":2809527},{"tool":"Read","fingerprint":"docs/analysis/bank-vault/handoffs/session-resume.md","exposure_chars":2424006},{"tool":"Read","fingerprint":"docs/analysis/bank-vault/README.md","exposure_chars":2236728}]},"quality":{"ci_fail_rounds":0,"review_rounds":0,"followup_fix_prs":[],"reverted":false,"ci_rounds":2},"diff":{"additions":588,"deletions":0,"files":7},"campaign":null,"cost_state":{"usd":null,"reason":"Claude Code's cost-state total is per process, and a process spans several PRs, so it is not split by PR","sessions":1,"covered_share":1.0,"sessions_gap_share":-0.1547}} |
Summary
Plan-only PR for the ammo campaign (#1026). Adds
docs/analysis/ammo/:requestAmmoChange's validation gap (and how it relates to open PRs fix(inventory): reject requestAmmoChange when weapon def is not cached #602/docs(inventory): cite the declared sgw_inventory PK in bandolier TOCTOU comments #603), the damage path's ammo-type blindness,items.sqlammo stats, candidate pistol/SMG families to widen, the cooked-data push mechanism, and the GM-tooling gap.ammo_item_types/ammo_modifierscontracts, a real+testedAmmoReservemodule, pre-split hotspot files, a feature flag) feeding Wave 1 (6 packets in parallel: AM-02 reserve, AM-03 validation, AM-04 damage framework, AM-05 loot, AM-06 GM tooling, AM-07 client push) and Wave 2 (6 packets in parallel, one per remaining ammo family, gated only on AM-04). A file-ownership matrix pins which files each packet may touch so none collide.Also updates
docs/readme.md's campaign index.AM-01 landed mid-task
Packet AM-01 (reverse engineering, PR #1040) merged into
mainwhile this plan was being written; its findings are folded in throughout:ammo_typesneeds no client push — the client reads a live, server-populated container cache, not cooked data. This narrowed AM-07's scope to only the 15 new ammo item definitions.requestAmmoChange— flagged as an explicit open question with a recommendation (apply the damage modifier directly, never cast the ability) for the owner to confirm before AM-04 ships./gmgiveammo's native wire event has no recovered server-side receiver, so AM-06 now ships as a.-console command instead of a native-opcode handler.New-item-id feasibility (what the plan needed to settle)
Contained by design: every packet after AM-F resolves an ammo item through the
ammo_item_typesmapping table byEAmmoType, never a hardcoded item id. If AM-07's spike fails, only two seed files need repointing at existing placeholder ids — no other packet's code changes.Test plan
markdownlint(warn-only) — spot-checked headings/links, not run through the full toolREADME.md#...,audit.md#...,work-packets.md#..., the RE finding doc's#q1..#q5) resolves to an actual heading slug🤖 Generated with Claude Code
https://claude.ai/code/session_01Wgx9Q5HHQtsvQ1tyaRraqz