{"assessments":[],"deployments":[],"fuzz":[],"identity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"interpretation":"Records acceptance and evidence. Neither completion nor an AI assessment establishes correctness, safety, or independent review.","jobId":"5b72a084-5f30-4c7d-977e-bfe3a103c4ba","kind":"skill:research-report","nodes":[{"acceptedSubmissionHash":"780477b5b3cf2aaf6fc14a0106b685bb513cea45f881450cbcf486a767b75d80","dependsOn":[],"execution":{"network":true,"profile":"none","requires":["network"],"skillHash":"3ddca93330036359dd721585e58e67820336a0398b7927b3c89369d6134f30f6","skillId":"research-report","tools":[]},"key":"research_report","kind":"code","role":"implement","skillHash":"3ddca93330036359dd721585e58e67820336a0398b7927b3c89369d6134f30f6","skillId":"research-report","state":"accepted"}],"objective":"Build a Uniswap V4 vault hook implementing a ±3σ volatility-adaptive\nliquidity range. Two components: SigmaRangeHook (Solidity) + SigmaKeeper\n(TypeScript).\n\n## SigmaRangeHook\n\n- BaseHook, bound to a single pool via afterInitialize.\n- ERC-6909 token accounting only. No raw ERC-20 transfers.\n- Issues ERC-20 ShareToken (proportional claim on position + fees).\n- State: tickLower, tickUpper, liquidity, totalShares, feeReserve0/1,\n  lastRebalance, rebalanceCooldown (default 6h).\n- Public: deposit, withdraw, rebalance(newLower, newUpper) [onlyKeeper],\n  setKeeper [owner, 48h timelock], pause/unpause.\n- rebalance(): removes old range, adds new. Validates:\n  newLower < newUpper, within [-887272, 887272], |offset| < 2000 ticks,\n  cooldown elapsed.\n- afterSwap: O(1) gas. Storage writes only. NEVER reverts.\n- All PoolManager interactions via unlock/unlockCallback. Net deltas to zero\n  via take/burn before returning.\n- ReentrancyGuard on deposit/withdraw/rebalance. checks-effects-interactions\n  in unlockCallback.\n- noDelegateCall on all external entry points.\n- Immutable (no proxy).\n- Hook permissions: AFTER_INITIALIZE | AFTER_SWAP only. Deploy via HookMiner\n  CREATE2.\n\n## SigmaKeeper (TypeScript)\n\n- Polls PoolManager.getSlot0 every 60s.\n- Maintains 30-day rolling window of 1h log-returns.\n- σ = sample std of log-returns.\n- tickOffset = round(3 * σ * 10000).\n- Calls rebalance when: price exits range, |Δband| > threshold, or\n  cooldown elapsed AND band width changed > 20%.\n\n## Invariants (fuzz targets)\n\n- Hook token balance ≥ Σ(user shares × per-share value)\n- tickLower < tickUpper always\n- No value destruction across any deposit/withdraw/rebalance sequence\n- afterSwap never reverts\n- totalShares consistent with ShareToken.totalSupply\n\n## Deliverables\n\n1. src/SigmaRangeHook.sol\n2. src/ShareToken.sol\n3. src/SigmaKeeper.ts\n4. test/SigmaRangeHook.t.sol (unit + integration)\n5. test/fuzz/ (Medusa invariants, reentrancy, malicious token, nested unlock)\n6. script/DeployHook.s.sol (CREATE2)\n7. docs/threat-model.md\n8. foundry.toml\n\n## Acceptance criteria\n\n- All tests green.\n- afterSwap < 5,000 gas (benchmark in CI).\n- Fuzz: 100k runs, zero invariant violations.\n- Self-audit: verify every constraint above is satisfied. Flag deviations\n  with file:line.","parentJobId":null,"planHash":"82e163644e826a2243cc414a68ae5b9238ca7ed36ff7ce34c9b9218739e17062","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"5b72a084-5f30-4c7d-977e-bfe3a103c4ba","publication":{"commit":null,"deliveredAt":null,"repoUrl":null},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52282","feedbackHash":"f5c05873b48e6c1b2e2e584b2dbd1508223351265df58adf920e6200a8ed541d","nodeKey":"research_report","submissionHash":"780477b5b3cf2aaf6fc14a0106b685bb513cea45f881450cbcf486a767b75d80","tag1":"verification:structural","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"7533e69d60ba9ffc937bf23211b622e1db6f2510277bb29d6f9f05530f6836c0","state":"completed","submissions":[{"artifacts":[{"bytes":10651,"hash":"8d95bd138b12bbb98e25d014ae7fe2c1afd179737a274c862f5e313990f68909","mediaType":"text/markdown","name":"report","path":"artifacts/report.md"}],"attempt":1,"bundleHash":"47dacdae2a70fa13897e2a40fc9fee080c02eff635ac02513a75e5a49d4cda52","device":"7b7c27166477ddd8","findings":[],"hash":"780477b5b3cf2aaf6fc14a0106b685bb513cea45f881450cbcf486a767b75d80","nodeId":"df9eb8c9-7c67-4563-b637-772114b277df","outcome":"completed","summary":"Delivered the vault, keeper, tests, deployment factory, and [self-audit report](artifacts/report.md).\n\nClean offline verification: **20 tests passed**, including 100k-input fuzz tests. `afterSwap` execution measured **1,014 gas**.\n\nFull acceptance remains unverified: the Medusa campaign, broader adversarial coverage, and keeper operational gaps are documented with file:line references.","treeHash":"99e1c45ac39a602e7f2fac402cfa6bebda03aa7f","usage":{"cachedInputTokens":1504128,"inputTokens":63961,"model":null,"outputTokens":24781,"runtime":"codex","turns":8,"wallClockMs":655173}}],"verification":[{"checks":[],"detail":"paths and tree verified; no suite was run for this kind of work","evaluation":"structural","profile":"none","status":"accepted","submissionHash":"780477b5b3cf2aaf6fc14a0106b685bb513cea45f881450cbcf486a767b75d80","verifiedTreeHash":"99e1c45ac39a602e7f2fac402cfa6bebda03aa7f","verifierVersion":"0.1.0+94826a22"}]}