| 0 | A donation into an empty vault pins the rate highcontractsite | real · no lossdepositors get exactly their coin back; the site said a harvest is the only thing that moves the rate, now corrected | test_0_donationIntoAnEmptyVault_movesTheRate_butCostsDepositorsNothing |
| 1 | A 0-decimal coin strands half the yieldcontract | fixed earlierunder 4 decimals refused | test_constructorRefusesAnAssetCoarserThanFourDecimals |
| 2 | exchangeRateRay overflows above ~1.16e47 wei and bricks the harvestcontract | real, fixed512-bit mulDiv | test_2_harvestStillWorks_aboveTheOld256BitRateCeilingred before |
| 3 | Deposit and redeem overflow above ~1.08e37 weicontract | real, fixed512-bit mulDiv in all four conversions | test_3_depositAndRedeem_aboveTheOld256BitCeilingred before |
| 4 | The Harvest event's fee does not reconcilecontract | halfit already reconciled for a receiver-side tax; feeTaken is now the measured outflow, so it reconciles for any tax shape | test_4_harvestEvent_feeTaken_isTheMeasuredOutflow_andReconciles |
| 5, 24, 31 | A keeper floor of 1 sells everythingcontractkeeper | real, fixedby the pool floor | TwapFloor.t.sol · 19 tests red with the check removed |
| 6, 22 | A bot's just-in-time deposit takes the harvestcontract | fixed by vestingproved | test_6_22_jitDepositAroundAnHonestHarvest_capturesOnlyTheVestedSlice · under 2 of 2,070 |
| 7, 11 | The keeper script collapses the floor to 1 wei on bad inputkeeper | fixed earlier, now testedreal in the first version | test-keeper-harvest.sh · 8 of 13 missed on the first version |
| 8, 26 | A griefed or wrong-tier vault is the coin's vault forevercontract | real, fixedretireVault unlists it and holders keep every right; the salt carries the index | test_8_26_aRetiredVault_canBeReplaced_andItsHoldersCanStillLeave |
| 9 | The vault's own address as the coin or the rewardcontract | real, fixedfor a plain deploy; unreachable through the factory, which cannot name an address it has not created yet | test_9_theVaultsOwnAddressAsRewardOrAsset_isRefusedred before |
| 10 | A price quoter accepted as the routercontract | real, fixedvault creation requires the configured SwapRouter02 on the configured chain | test_10_quoterPastedAsTheRouter_isRefused |
| 12 | An empty chain answer shown as rate 0, labelled as a live readsite | fixed earlier, now testedreal in the first version | test-stash-js.mjs |
| 13 | A testnet deploy labelled 4663 and linked to mainnetsite | real, fixedboth scripts assert the expected chain id; the site labels and links by network, the badge by config | test_13_wrongChain_isRefused · test-stash-js.mjsred before |
| 14 | A failed log read drawn as “0 harvests”; logs read from genesissite | real, fixedno chart when unread, no query without a deploy block, and the address sync refuses an incomplete vault entry | test-stash-js.mjsred before |
| 15 | The raw keeper key on the command linekeeper | mitigated earlierit needs an explicit opt-in and warns; the keystore path passes no key. A stolen key can no longer sell for 1 | test-keeper-harvest.sh |
| 16 | A token's symbol() written into the page as HTMLsite | fixed earlier, now testedreal in the first version | test-stash-js.mjs |
| 17 | Live addresses copied into four fileskeeper | real, fixedthe fork test and the keeper read config/addresses.json | fork run 4 of 4 on the config values |
| 20 | formatUnits prints “.0” for 0 decimalssite | unreachable, fixed anywayunder 4 decimals is refused; one line | test-stash-js.mjsred before |
| 21 | A flash loan around the keeper's own harvestcontract | fixed by vestingone transaction releases nothing | test_21_depositHarvestRedeem_inOneTransaction_capturesNothing |
| 23 | Reward arriving after the quote is sold unpricedcontract | fixed by the pool floorwhich prices what is actually sold | test_23_rewardArrivingAfterTheQuote_isPricedByThePoolNotTheStaleFloor |
| 25 | The keeper's tolerance is extractablecontractkeeper | bounded, not removedat most the 1% tolerance plus the pool fee; see “Still on you” | test_spotWithinSlippage_harvests |
| 27 | No deadline on harvest()contractkeeper | not real any morethe binding floor is read when the transaction executes, so a stale keeper floor can only be the stricter one | test_27_delayedHarvest_isPricedAtExecution_notAtSubmission |