Skip to content

docs(ammo): AM-00 campaign plan — wide fan-out ledger for finite special ammo - #1041

Merged
Cadacious merged 2 commits into
mainfrom
docs/ammo-campaign-plan
Sep 28, 2026
Merged

Cadacious merged 2 commits into
mainfrom
docs/ammo-campaign-plan

Conversation

@Cadacious

Copy link
Copy Markdown
Contributor

Summary

Plan-only PR for the ammo campaign (#1026). Adds docs/analysis/ammo/:

  • README.md — scope, the D-AM01..06 decisions table, open questions (including AM-01's findings and a flagged design decision for the owner), packet status, the parallelization plan, a UAT checklist outline, and known issues.
  • audit.md — current-state audit with file:line citations: the bandolier/reload model, 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.sql ammo stats, candidate pistol/SMG families to widen, the cooked-data push mechanism, and the GM-tooling gap.
  • work-packets.md — restructured, at the maintainer's request mid-task, around one small serial gate (AM-F: reserved item ids, the ammo_item_types/ammo_modifiers contracts, a real+tested AmmoReserve module, 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.
  • handoffs/session-resume.md — resume note for the next coordinator session.

Also updates docs/readme.md's campaign index.

AM-01 landed mid-task

Packet AM-01 (reverse engineering, PR #1040) merged into main while this plan was being written; its findings are folded in throughout:

  • No finite-ammo reserve model exists anywhere in the 2009 client schema — D-AM01 (items in bags) is recorded as a restoration design choice, not a recovered mechanic.
  • Widening a weapon's ammo_types needs 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.
  • Toggle abilities 715/719 are architecturally independent of 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 cooked-data injection is architecturally sound but unproven for a genuinely new id — AM-07 now spikes one item and UATs it live before batch-authoring the rest.

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_types mapping table by EAmmoType, 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 tool
  • Docs-only change; no code, no runtime behavior — no unit/live-DB/wire-format tests apply per TESTING.md
  • Verified every internal cross-reference anchor (README.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

…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
@coderabbitai

coderabbitai Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

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 configuration

Configuration used: Repository: SandboxServers/Cimmeria/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: d98f635b-f781-4136-96a6-b37828dc964c

📥 Commits

Reviewing files that changed from the base of the PR and between d7b9185 and 29be595.

📒 Files selected for processing (7)
  • .claude/agent-memory/items-systems-advisor/MEMORY.md
  • .claude/agent-memory/items-systems-advisor/project_ammo_campaign_plan.md
  • docs/analysis/ammo/README.md
  • docs/analysis/ammo/audit.md
  • docs/analysis/ammo/handoffs/session-resume.md
  • docs/analysis/ammo/work-packets.md
  • docs/readme.md
 ____________________________
< Bunny-grade bug detection. >
 ----------------------------
  \
   \   (\__/)
       (•ㅅ•)
       /   づ
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

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
@Cadacious
Cadacious merged commit 2510119 into main Sep 28, 2026
10 of 11 checks passed
@Cadacious

Copy link
Copy Markdown
Contributor Author

Token profile for this PR. Estimated list-price USD, a plan-usage proxy, not a bill (D-TP1).

est. USD (list) requests human prompts agents peak ctx wall clock CI rounds
$7.45 90 0 1 391,252 0.4 h 0 failed of 2

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}}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant