harb/onchain/test
johba 8064623a54 fix: feat: Push3 input redesign — normalized indicators instead of raw protocol values (#635) (#649)
Fixes #635

## Changes
The implementation is complete and committed. All 211 tests pass.

## Summary of changes

### `onchain/src/Optimizer.sol`
- **Replaced raw slot inputs** with normalized indicators in `getLiquidityParams()`:
  - Slot 2 `pricePosition`: where current price sits within VWAP ± 11 000 ticks (0 = lower bound, 0.5e18 = at VWAP, 1e18 = upper bound)
  - Slot 3 `volatility`: `|shortTwap − longTwap| / 1000 ticks`, capped at 1e18
  - Slot 4 `momentum`: 0 = falling, 0.5e18 = flat, 1e18 = rising (5-min vs 30-min TWAP delta)
  - Slot 5 `timeSinceRecenter`: `elapsed / 86400s`, capped at 1e18
  - Slot 6 `utilizationRate`: 1e18 if current tick is within anchor position range, else 0
- **Extended `setDataSources()`** to accept `liquidityManager` + `token0isWeth` (needed for correct tick direction in momentum/utilizationRate)
- **Added `_vwapToTick()`** helper: converts `vwapX96 = price × 2⁹⁶` to tick via `sqrt(vwapX96) << 48`, with TickMath bounds clamping
- All slots gracefully default to 0 when data sources are unconfigured or TWAP history is insufficient (try/catch on `pool.observe()`)

### `onchain/src/OptimizerV3Push3.sol`
- Updated NatSpec to document the new `[0, 1e18]` slot semantics

### New tests (`onchain/test/`)
- `OptimizerNormalizedInputsTest`: 18 tests covering all new slots, token ordering, TWAP fallback, and a bounded fuzz test
- `mocks/MockPool.sol`: configurable `slot0()` + `observe()` with TWAP tick math
- `mocks/MockLiquidityManagerPositions.sol`: configurable anchor position bounds

Co-authored-by: openhands <openhands@all-hands.dev>
Reviewed-on: https://codeberg.org/johba/harb/pulls/649
Reviewed-by: review_bot <review_bot@noreply.codeberg.org>
2026-03-13 07:53:46 +01:00
..
abstracts feat: OptimizerV3 with direct 2D staking-to-LP parameter mapping 2026-02-13 18:21:18 +00:00
helpers fix: LM: accrue fees as liquidity when feeDestination is self (#533) 2026-03-10 10:11:41 +00:00
libraries Add Solidity linting with solhint, Foundry formatter, and pre-commit hooks (#51) 2025-10-04 15:17:09 +02:00
mocks fix: feat: Push3 input redesign — normalized indicators instead of raw protocol values (#635) (#649) 2026-03-13 07:53:46 +01:00
EthScarcityAbundance.t.sol fix: resolve stack-too-deep in EthScarcityAbundance test 2026-02-23 17:10:01 +00:00
FitnessEvaluator.t.sol fix: address review findings for gas-limit fitness pressure (#637) 2026-03-13 01:05:37 +00:00
FuzzingAnalyzerBugs.t.sol feat: OptimizerV3 with direct 2D staking-to-LP parameter mapping 2026-02-13 18:21:18 +00:00
Kraiken.t.sol fix: Test coverage: Kraiken + VWAPTracker to 100% (#283) 2026-02-26 05:12:48 +00:00
LiquidityManager.t.sol fix: Dead code branch: lastRecenterTick==0 with cumulativeVolume>0 (#568) 2026-03-12 19:21:11 +00:00
Optimizer.t.sol fix: feat: Push3 input redesign — normalized indicators instead of raw protocol values (#635) (#649) 2026-03-13 07:53:46 +01:00
OptimizerV3Push3.t.sol fix: PR #551 review findings - OptimizerV3Push3.sol + Optimizer.sol 2026-03-10 23:13:57 +00:00
ReplayProfitableScenario.t.sol feat: protocol stats display + parameter sweep fuzzing infrastructure (#106) 2026-02-13 18:09:11 +00:00
Stake.t.sol fix: Test coverage: Stake.sol to 100% (#284) 2026-02-26 03:59:20 +00:00
SupplyCorruption.t.sol fix(onchain): resolve KRK token supply corruption during recenter (#98) 2026-02-04 16:20:57 +00:00
VWAPFloorProtection.t.sol fix: fix: Bootstrap VWAP with seed trade during deployment (#567) (#567) 2026-03-12 21:15:35 +00:00
VWAPTracker.t.sol fix: Backtesting #5: Position tracking + P&L metrics (#319) 2026-02-27 11:23:18 +00:00