{"workflow":null,"planning":null,"id":"2f49cf2e-f481-4aec-b90e-d01c17c90bae","state":"completed","template":"shape:chain","objective":"Title: SitOnHands — voluntary timed IMD lock (no early exit)\n\nOne-liner: Users deposit IMD and choose a lock period; funds are forcibly held until that period ends — no early withdraw, no admin bailout of user deposits.\n\nChain: Ethereum mainnet (IMD existing token). Pair / deploy against the live IMD ERC-20; do not mint a new token.\n\nWhat to build\n\nSitOnHands.sol — a non-upgradeable lock vault for IMD only.\nUser calls lock(uint256 amount, uint256 durationSeconds) (or lockUntil(uint256 amount, uint256 unlockTimestamp) — pick one and stick to it). Transfer IMD in via transferFrom; create a position per deposit (support multiple concurrent locks per wallet).\nWhile locked: no withdraw, no transfer of the position, no emergency withdraw for users, no owner sweep of user balances. Only withdraw(uint256 positionId) (or equivalent) after block.timestamp >= unlockTime, returning the exact locked IMD to the depositor.\nOptional: emit Locked / Withdrawn with depositor, amount, unlockTime, positionId.\nOptional read helpers: positionOf, unlockTime, lockedBalance, canWithdraw.\nRules / constraints\n\nIMD address must be constructor-immutables (or a single immutable token).\nEnforce min/max duration (e.g. min 1 day, max 4 years) — document constants in the contract.\nReject zero amount and zero/invalid duration.\nReentrancy-safe withdraw (checks-effects-interactions or OZ ReentrancyGuard).\nNo fee on lock or unlock unless explicitly specified (default: 0 fee).\nNo reward / staking yield in v1 — pure sit-on-hands.\nOwner (if any) may only pause new locks, never seize or shorten existing locks. Prefer no owner if the factory allows a fully immutable vault.\nDo not add “sit on hands” marketing site unless asked; contract + tests + brief README is enough.\nTests (Foundry)\n\nLock then withdraw after warp succeeds for full amount.\nWithdraw before unlock reverts.\nTwo positions for same user unlock independently.\nCannot drain others’ positions.\nMin/max duration bounds enforced.\nMax duration = 365 days\nOut of scope\n\nGovernance, voting escrow (ve), boosts, LP locks, cross-token locks, forced lock of third parties (only the caller’s own IMD).\nAny sell/transfer restriction on the IMD token itself (locking is deposit-based only).\nAcceptance\n\nCompiles; Foundry tests pass; verified deploy script ready for mainnet IMD address; public lock + time-gated withdraw only.","blockedReason":null,"createdAt":"2026-10-06T20:30:05.404Z","updatedAt":"2026-10-06T20:47:42.148Z","paidBy":"0x5b95a971b4583a5f011e9da082acdd679b870d06","parentJobId":null,"project":{"id":"2f49cf2e-f481-4aec-b90e-d01c17c90bae","head":"2f49cf2e-f481-4aec-b90e-d01c17c90bae","running":null,"versions":[{"jobId":"2f49cf2e-f481-4aec-b90e-d01c17c90bae","workflowId":null,"objective":"Title: SitOnHands — voluntary timed IMD lock (no early exit)\n\nOne-liner: Users deposit IMD and choose a lock period; funds are forcibly held until that period ends — no early withdraw, no admin bailout of user deposits.\n\nChain: Ethereum mainnet (IMD existing token). Pair / deploy against the live IMD ERC-20; do not mint a new token.\n\nWhat to build\n\nSitOnHands.sol — a non-upgradeable lock vault for IMD only.\nUser calls lock(uint256 amount, uint256 durationSeconds) (or lockUntil(uint256 amount, uint256 unlockTimestamp) — pick one and stick to it). Transfer IMD in via transferFrom; create a position per deposit (support multiple concurrent locks per wallet).\nWhile locked: no withdraw, no transfer of the position, no emergency withdraw for users, no owner sweep of user balances. Only withdraw(uint256 positionId) (or equivalent) after block.timestamp >= unlockTime, returning the exact locked IMD to the depositor.\nOptional: emit Locked / Withdrawn with depositor, amount, unlockTime, positionId.\nOptional read helpers: positionOf, unlockTime, lockedBalance, canWithdraw.\nRules / constraints\n\nIMD address must be constructor-immutables (or a single immutable token).\nEnforce min/max duration (e.g. min 1 day, max 4 years) — document constants in the contract.\nReject zero amount and zero/invalid duration.\nReentrancy-safe withdraw (checks-effects-interactions or OZ ReentrancyGuard).\nNo fee on lock or unlock unless explicitly specified (default: 0 fee).\nNo reward / staking yield in v1 — pure sit-on-hands.\nOwner (if any) may only pause new locks, never seize or shorten existing locks. Prefer no owner if the factory allows a fully immutable vault.\nDo not add “sit on hands” marketing site unless asked; contract + tests + brief README is enough.\nTests (Foundry)\n\nLock then withdraw after warp succeeds for full amount.\nWithdraw before unlock reverts.\nTwo positions for same user unlock independently.\nCannot drain others’ positions.\nMin/max duration bounds enforced.\nMax duration = 365 days\nOut of scope\n\nGovernance, voting escrow (ve), boosts, LP locks, cross-token locks, forced lock of third parties (only the caller’s own IMD).\nAny sell/transfer restriction on the IMD token itself (locking is deposit-based only).\nAcceptance\n\nCompiles; Foundry tests pass; verified deploy script ready for mainnet IMD address; public lock + time-gated withdraw only.","baseCommit":"0243d7da4a4337ae8b16bcdf15bb4ead736fd68f","state":"completed","createdAt":"2026-10-06T20:30:05.404Z"}]},"deliver":true,"host":false,"site":null,"launch":{"requested":true,"kind":"evm_contracts","id":"8cce0c1e-38c0-4995-b320-f425fe1c63c8","status":"live","chainId":1},"oracleRequestId":null,"delivery":{"repoUrl":"https://github.com/identity-md-launches/launch-849-title-sitonhands-voluntary","pullRequestUrl":"https://github.com/identity-md-launches/launch-849-title-sitonhands-voluntary/pull/1","commit":"65fc59caa5a969fc1e3cf38fe3ee95b7a5cb6ca0","deliveredAt":"2026-10-06T20:48:00.261Z","media":null},"media":null,"nodes":[{"key":"audit_economics","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-06T20:45:35.182Z","verdict":null,"seat":{"tokenId":"1639","agentId":"51557"},"live":null},{"key":"audit_flow","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-06T20:45:12.574Z","verdict":null,"seat":{"tokenId":"158","agentId":"51474"},"live":null},{"key":"audit_judge","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-06T20:47:42.148Z","verdict":null,"seat":{"tokenId":"1626","agentId":"50969"},"live":null},{"key":"audit_math","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-06T20:44:00.991Z","verdict":null,"seat":{"tokenId":"809","agentId":"51352"},"live":null},{"key":"audit_permissions","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-06T20:44:25.434Z","verdict":null,"seat":{"tokenId":"1560","agentId":"50989"},"live":null},{"key":"build_contract_project","role":"implement","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":[],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-06T20:39:03.391Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+94826a22","verifiedTreeHash":"0bf7cdbc8c9bc7f7e8d2f4938ba5bde06f507d9e","at":"2026-10-06T20:39:03.440Z","failedChecks":[]},"seat":{"tokenId":"1650","agentId":"52073"},"live":null},{"key":"manifest","role":"integrate","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":["launch.json"],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-06T20:41:49.802Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+94826a22","verifiedTreeHash":"577f95845769cd818f79f31b44d6b95dfd4cfbda","at":"2026-10-06T20:41:49.820Z","failedChecks":[]},"seat":{"tokenId":"1542","agentId":"52089"},"live":null},{"key":"write_foundry_tests","role":"tests","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":["test","test/**"],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-06T20:46:04.996Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+94826a22","verifiedTreeHash":"c97c5fa4f5247bd4ef0990dd910e4e46fec6b8ef","at":"2026-10-06T20:46:05.118Z","failedChecks":[]},"seat":{"tokenId":"1781","agentId":"51539"},"live":null}],"reviews":[{"status":"sent","chainId":1,"txHash":"0x995433c6cee468edb018b273302e67ecb600ad1f58c892451f5057e8e8b6319e","blockNumber":26135825,"sentAt":"2026-10-06T20:48:27.865Z","entries":[{"nodeKey":"audit_economics","agentId":"51557","value":1,"role":"review:submission"},{"nodeKey":"audit_flow","agentId":"51474","value":1,"role":"review:submission"},{"nodeKey":"audit_judge","agentId":"50969","value":1,"role":"review:submission"},{"nodeKey":"audit_math","agentId":"51352","value":1,"role":"review:submission"},{"nodeKey":"audit_permissions","agentId":"50989","value":1,"role":"review:submission"},{"nodeKey":"build_contract_project","agentId":"52073","value":1,"role":"verification:checks"},{"nodeKey":"manifest","agentId":"52089","value":1,"role":"verification:checks"},{"nodeKey":"write_foundry_tests","agentId":"51539","value":1,"role":"verification:checks"}]}]}