diff --git a/SCOPE.md b/SCOPE.md index 6fe1e98..0d68f39 100644 --- a/SCOPE.md +++ b/SCOPE.md @@ -918,7 +918,7 @@ operator decides whether each item is added to scope. | 47 | **Linear bot-vault regen + hoarder capacity tier (FID-20260915-006, `implemented`):** audit row 44's recommended fix shipped — regen changed from `v × (1+rate)` (absorbing zero: raided bots dead forever) to LINEAR `v + rate × spawner max` per hour (same rate table, same 2× cap size); new shared `getVaultCap()` (2×; Hoarder 3×) consumed by regen clamp, FID-005 growth clamp, raid loot cap, and resync tooling — no drift possible. Unit pins: first-tick revival math matches census values exactly (+16,000 Ghost/T2, +4,500 Raider/T1, +11,250 Balanced/T7), linear two-tick signature, cap agreement. **Live acceptance gate PASSED:** census 7 dead-both → one real `runGrowthCycle()` (processed 54, errors 0) → 0 dead — 7/7 revived by the fix itself, zero migration. Player-path jackpot verified live on three hoarders (Marauder_Control/Micro_Mu_534/Scorpion_Recon, T2): declared-metal raids paid 323,739/352,804/411,713 — each above the old 2× cap (300,000; 3× cap 450,000) — energy preserved (incl. an at-cap axis staying clamped), metal regrowing from 0 in constant +7,500 linear steps across real cycles. Gates: tsc 0 · lint 0 · vitest 815/1 skipped | 2026-09-15 (SESSION-2026-09-15-006) | Closed (commit 2681571, canonical PR #49) | | 48 | **Bot tier-ladder doc-drift sweep (FID-20260915-006a, `implemented`):** census-flagged T7 drift generalized — resource multiplier comments claimed 0.75→3.0× while the formula always computed 0.75→**2.25×** (T5–T7 overstated); defense ladder quotes (150→9600) were pre-scale values vs the function's real **15→2880** (10× family error); boss block inherited it (claimed 192,000 total; code builds 2,880×20 = 57,600). Corrected: botService header + getResourceRange + getBotDefenseForTier + getDefenseMultiplier range doc, attack-route garrison comment, BASE_RAID_BALANCE.md worked example (historical banner). Repo-wide sweep: no admin panels or tests quote the wrong numbers. Code truth verified by executing the formulas (comment==formula: YES); behavior unchanged; gates green | 2026-09-15 (SESSION-2026-09-15-006) | Closed (commit 2681571, canonical PR #49) | | 49 | **Vault-economy Monte Carlo re-measured against SHIPPED code (audit row 44 closure):** sim rewritten to run the real engine functions (regenerateBotResources/applyGrowthPattern/nextGrownVault/getVaultCap — no mirror), per-axis vaults, FID-005 bookkeeping, declared-resource raid mix. Caught + fixed 2 defects on the way: the harness's `v===0` guard silently re-created absorbing zero (day-30 loot 0, contradicting the live acceptance gate — removed), and the TS2308 barrel collision exposed a stale async `regenerateBotResources` duplicate in botService (zero callers, pre-linear curve, stale cap) — deleted, its Boss 0.02 rate carried into the engine table (which lacked Boss → latent NaN) with a `?? 0.10` NaN guard. **Band confirmed:** declared single-axis 2.73M/day flat over 30 days (= audit 2.24M × 1.22 hoarder-3× exactly); undeclared 5.48M/day; legacy counterfactual still dies (0 at day 30). Live check: 54 bots, 0 dead-both. Gates: tsc 0 (full) · lint 0 · vitest 815/1 | 2026-09-15 (SESSION-2026-09-15-006) | Complete (commit 2681571, canonical PR #49) — re-measurement archived | -| 50 | **Ladder-truth CI gate (FID-20260915-006a follow-through):** the doc-drift lesson made executable — `scripts/ladderTruth.ts` parses the documented tier tables out of botService source comments (resource multipliers ×2 sites, base defense ×2 sites, player brackets) and `__tests__/lib/ladderTruth.test.ts` asserts every documented value equals live function output (getResourceRange / getBotDefenseForTier / getPlayerLevelBonus); comment-only edits that drift now fail CI, site-count guards fail loudly on deleted tables, truth spot-pins keep the scanner honest. Drill-verified: corrupted comment value → 2 failing tests → restored clean. getBotDefenseForTier exported for the gate. Gates: tsc 0 · lint 0 · vitest 821/1 skipped | 2026-09-15 (SESSION-2026-09-15-006) | Implemented (uncommitted — pending commit with next stream) | +| 50 | **Ladder-truth CI gate (FID-20260915-006a follow-through):** the doc-drift lesson made executable — `scripts/ladderTruth.ts` parses the documented tier tables out of botService source comments (resource multipliers ×2 sites, base defense ×2 sites, player brackets) and `__tests__/lib/ladderTruth.test.ts` asserts every documented value equals live function output (getResourceRange / getBotDefenseForTier / getPlayerLevelBonus); comment-only edits that drift now fail CI, site-count guards fail loudly on deleted tables, truth spot-pins keep the scanner honest. Drill-verified: corrupted comment value → 2 failing tests → restored clean. getBotDefenseForTier exported for the gate. Gates: tsc 0 · lint 0 · vitest 821/1 skipped | 2026-09-15 (SESSION-2026-09-15-006) | Closed (commit d8eb098, canonical PR #51) | | 30 | **Gate-baseline divergence:** repo gates no longer match the ledger's 2026-09-06 "tsc 0 / eslint clean / 341 green" — live: tsc 1 error (`__tests__/lib/flagHolderSurvival.test.ts`, committed `4674b73`), eslint **460 errors / 3 warnings** (incl. re-appeared `any`s in friends suites previously burn-downed), vitest **12 failed** (all `lib/__tests__/redis.test.ts`). The tree also carries an uncommitted parallel session's WIP (20 modified files: clan panels, friends/messaging tests, messagingService, websocket handlers; untracked `scripts/nn-fixany.mjs`, `scripts/nn-lintreport.mjs`, `lib/errorMessage.ts`, `docs/llms-*`; `MONGODB_TO_MARIADB_SCHEMA_MAPPING.md` deleted). Attribution and disposition were operator decisions — session 2026-09-07 (001) touched nothing beyond its approved 2-line fix **→ RESOLVED 2026-09-07 (SESSION-2026-09-07-002): operator reviewed the WIP and chose fix+commit+gitignore — defect repaired, WIP committed as 4 path-scoped commits (`0e82eb5`, `8be0bde`, `de914fa`, `8051813`), scraped llms docs gitignored (kept local), nn-*.mjs codemod scripts left untracked pending operator call** | 2026-09-07 (sessions 001–002) | Closed (resolved) | ---