{"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":"ff0188cf-ae16-40da-8ff0-16826ade98c8","kind":"skill:research-report","nodes":[{"acceptedSubmissionHash":"db68000765157916c437198a6793fcb8ed3007f61205fa2a8fc3cb50fe5880c6","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":"ff0188cf-ae16-40da-8ff0-16826ade98c8","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":"52274","feedbackHash":"514a3d0ef2a14f972a8bbe96c5446c7b84ed5fc62d292fee4a7781648ba2c71d","nodeKey":"research_report","submissionHash":"db68000765157916c437198a6793fcb8ed3007f61205fa2a8fc3cb50fe5880c6","tag1":"verification:structural","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"3b22e70452cc33d462de54953a07565fcbab321a6c03e9c6f82d5e4acc437297","state":"completed","submissions":[{"artifacts":[{"bytes":16702,"hash":"a3615198cb7b9661b76e34e2f3227fa25a239bde8f9168ac2e5fd184d8626bf9","mediaType":"text/markdown","name":"report","path":"artifacts/report.md"}],"attempt":1,"bundleHash":"61ba98ee55a4b41abc4d6d71b717aa7af184b1387a0bc484552b1e02700fccd4","device":"7d2db8d9021f8063","findings":[],"hash":"db68000765157916c437198a6793fcb8ed3007f61205fa2a8fc3cb50fe5880c6","nodeId":"dd9d3154-d4bb-47c6-9e61-028429b8fcf8","outcome":"completed","summary":"Repaired the oversized bundle: local export is **0.94 MiB**, below 8 MiB.\n\nChecks passed: 13 Solidity tests, seven keeper checks, 100,000 runs per Foundry fuzz target, and 107,032 Medusa calls with zero failures. Callback gas: **4,543**.\n\nVerification tools now require host installation. This limitation and existing implementation deviations are documented in [artifacts/report.md](artifacts/report.md). The independent upload check has not rerun.","treeHash":"d9240f9723ce7cf560102252a99173a359662251","usage":{"cachedInputTokens":2731626,"inputTokens":134467,"model":null,"outputTokens":36348,"runtime":"codex","turns":11,"wallClockMs":918891}}],"verification":[{"checks":[],"detail":"paths and tree verified; no suite was run for this kind of work","evaluation":"structural","profile":"none","status":"accepted","submissionHash":"db68000765157916c437198a6793fcb8ed3007f61205fa2a8fc3cb50fe5880c6","verifiedTreeHash":"d9240f9723ce7cf560102252a99173a359662251","verifierVersion":"0.1.0+94826a22"}]}