{"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":"51fdb207-399d-4a0d-8ad0-566f11505bf5","kind":"skill:adversarial-review","nodes":[{"acceptedSubmissionHash":null,"dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"6b037a7b6601e883cf8a906c1520c0624817d42d8310b65c2f43679204608af3","skillId":"adversarial-review","tools":[]},"key":"adversarial_review","kind":"code","role":"review","skillHash":"6b037a7b6601e883cf8a906c1520c0624817d42d8310b65c2f43679204608af3","skillId":"adversarial-review","state":"failed"}],"objective":"Final pre-launch adversarial review of src/, script/DeployMainnet.s.sol and deploy/mainnet/ at this commit. Two audit rounds and their fixes are already in (docs/AUDIT-FIX-PLAN-2026-10-05.md, docs/AUDIT-INTERNAL-2026-10-06.md); weight your time to what changed since 03e8d0c9ed18204a041e48141bbff44b48da226b (git diff 03e8d0c..HEAD -- src script/DeployMainnet.s.sol) and to the deployment, which no audit has seen.\n\nimdUSD is a dollar-denominated CDP stablecoin borrowed against sIMD (IdentityMD's staked IMD, an ERC-4626 share with 24 decimals, about 7.95 IMD each). Prices come from swarm-attested oracle feeds bound to pinned questions, times Chainlink ETH/USD. Everything about the deployment is in src/DeploymentConfig.sol and docs/MAINNET-RUNBOOK.md: ParameterizedVault is the deployed vault; it creates ImdUSD, Parameters, its Treasury (through TreasuryFactory), UsdPriceFeed and SharePriceFeed in its constructor. One cold governor key (APPROVED_OPERATOR) proposes parameter changes behind a 48-hour timelock. Collateral pricing is per 1e18 raw units throughout. IMD's only market is a full-range Uniswap v4 pool, about $2.3M a side with a 1% fee; docs/PARAMETERS-2026-10-05.md has the numbers every economic parameter was chosen from.\n\nAnswer each numbered question, including the ones where nothing is wrong:\n1. SwarmFeed deviation bound (ce39fc6): 20% from the last accepted value, 40% once that value is older than maxAge, never lifted. Show the largest move N attestations bought within one hour can produce when relayed together, given the window rules (span bounds, toBlock advancing, toBlock within maxAge/12 blocks of head). docs/PARAMETERS-2026-10-05.md section 'No rolling bound' argues this is uneconomic at line $1M: check its arithmetic against the constants as committed and the 13-sample median in PriceFeed's question, and state the line at which it stops holding.\n2. OracleAsker (84182f0, 73c1163): ask pays only on a FALL of DRIFT_FALL_TRIGGER_OF_CAP_BPS of the cap, armed ARM_DELAY_BLOCKS earlier and still present, or for NHI keep-alive at STALE_AT_BPS; askPaid and askPaidMany charge the caller per request, skip in-flight or duplicate feeds uncharged, and back off ASK_TIMEOUT after an undelivered result. Can anyone make the Treasury pay when the chain does not justify it, exceed oracleBudget in a UTC day, get a request paid without a delivery being possible, leave IMD stranded in the asker, or block updates for everyone? Can a caller of askPaidMany pay for a feed it did not name or be refunded less than it is owed?\n3. Parameters.proposeWorkOracle (84182f0): applies only while wage is 0; the successor must answer vault(), mintingRights() and, once anything was ever minted, predecessor() == the current oracle. Can a hostile or broken oracle be installed, can the order of oracle and wage proposals bypass the wage==0 rule, and can the sentinel/factory path (WORK_ORACLE_SENTINEL, WorkOracleFactory) be made to hand a vault an oracle it did not create?\n4. The phase-2 fixes (9dd2149): redemption cap = min(live, lagged backing) with same-transaction and fresh capital removed from both sides; cover's fee remint reaching totalReceived; the USD reserve result capped at 1e36; the lock(1) freeze. Find a sequence across adjacent blocks or transactions that still pays a redeemer above backing, or desynchronises totalReceived or totalBadDebt.\n5. DeployMainnet.s.sol and deploy/mainnet/plan.py: CREATE2 through the canonical deployer in layers, refusing to broadcast unless every source constant equals its planned address. What happens if a constructor reverts mid-broadcast (which contracts exist, which trust an address that does not), whether any contract reads another's state in its constructor before that contract is deployed, whether salts collide or can be front-run, whether the 0.05 ETH gas ceiling can leave a half-deployed stack, and what the readback after the broadcast fails to check. The Intake (INTAKE) is deployed by a third party before us: list every assumption the stack makes about it.\n6. deploy/mainnet/bodies/: each oracle body is hash-pinned forever in OracleAsker. Confirm every window is relative, no body carries a number that moves, and the question text each feed pins (expectedQuestionHash) matches its body.\n7. Constants: every value in src/DeploymentConfig.sol and the deploy script against the Decisions and Final confirmation sections of docs/PARAMETERS-2026-10-05.md. Report any mismatch, any constant the script does not verify after deploy, and any Sepolia-only address that plan.py does not replace.\n8. Known open items from the reference docs: work rights ignore the work feed's age; SharePriceFeed's asset-leg reads are typed calls (what a reverting or non-standard asset does); line may be proposed below current debt (what each action does then). Say whether each is exploitable with the constants as committed.\n9. The seams: vault and Treasury (fees, cover, payStream, reserve protection, fundOracle's share unwrap), vault and feeds (1-hour lifetimes, SKEW_BPS, 24-decimal collateral), and the relay bundles (relayAndBark, relayAndBite). Anything that one audit panel's scope ended at and another's did not begin.\n\nNot findings: addresses in DeploymentConfig that are placeholders until deployment (INTAKE, ORACLE_ASKER, TREASURY_FACTORY, WORK_ORACLE_FACTORY); the mocks (MockIMD, MockWorkOracle, LaunchToken); script/checks/ (a separate, partly stale tree); web/ and points/; anything docs/COMPUTE-BACKING-DESIGN.md describes as future work; and findings of the earlier audits in docs/AUDIT-*.md and docs/INTERNAL-AUDIT-2026-10-04.md, unless the fix regressed. A constant set to a deliberate economic value is not a finding; an arithmetic or ordering error in how it is used is.\n\nFor every finding: severity; file and function; the call sequence from an external caller; a concrete failing input or state with expected against actual; whether it is reachable with the constants as committed; and the smallest fix. Also report every place a comment or NatSpec claims a property the code does not have, and say which contracts you read in full and which you could not reach.","parentJobId":null,"planHash":"06ad0ef28d9c987d49c35625c7b8f9838dc2f4078a290fa52acb4745ecc348f8","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"51fdb207-399d-4a0d-8ad0-566f11505bf5","publication":{"commit":null,"deliveredAt":null,"repoUrl":null},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[],"site":null,"snapshotHash":"8f2ca28d660810a63bf6e0143d256a0544563825d339d14b60c961958c6c8256","state":"blocked","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"e096d0a2b0992309","findings":[],"hash":"35d26b11685e02f64b53d0a31e5a42ab28ce6ef75a82a939eb442107f5d822b3","nodeId":"cc4f3290-75e1-4dd0-96cc-dc15e5740462","outcome":"failed","summary":"refused to run this repository's build, so the agent was not started: fs_permissions: filesystem access \"true\" on \"./deploy/mainnet/out\" reaches outside the build output","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"claude","turns":0,"wallClockMs":3592}},{"artifacts":[],"attempt":3,"bundleHash":null,"device":"fb26479062458645","findings":[],"hash":"69e39c22c1f05711e3a4851426c800f5495c0f2730b49f977182932ba0ffb9ac","nodeId":"cc4f3290-75e1-4dd0-96cc-dc15e5740462","outcome":"failed","summary":"refused to run this repository's build, so the agent was not started: fs_permissions: filesystem access \"true\" on \"./deploy/mainnet/out\" reaches outside the build output","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"claude","turns":0,"wallClockMs":3080}},{"artifacts":[],"attempt":2,"bundleHash":null,"device":"fd5402086dce252e","findings":[],"hash":"c3103be11133b9009f00c99d8000b07bd2500eac47f249151229b4391dbc1356","nodeId":"cc4f3290-75e1-4dd0-96cc-dc15e5740462","outcome":"failed","summary":"refused to run this repository's build, so the agent was not started: fs_permissions: filesystem access \"true\" on \"./deploy/mainnet/out\" reaches outside the build output","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"claude","turns":0,"wallClockMs":3164}}],"verification":[]}