{"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":"23a23277-83d7-4d83-959e-5bf659af2ab7","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_economics","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"working"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_flow","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"working"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","state":"waiting"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_math","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"working"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_permissions","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"working"},{"acceptedSubmissionHash":"f7ddbf5564ad7b425df25b32e7fae961ba8fdf11130dd3c1223036849fc6c762","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"6b8d2c2ebd3301cff2be8edb1e1cc6ba65c858c02fe7247be81722b969842265","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"6b8d2c2ebd3301cff2be8edb1e1cc6ba65c858c02fe7247be81722b969842265","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"failed"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"4c76766b00591dfe982fe85d3de589fdb2f810e5137c301155d1c5e36a1d3b23","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"4c76766b00591dfe982fe85d3de589fdb2f810e5137c301155d1c5e36a1d3b23","skillId":"write-foundry-tests","state":"working"}],"objective":"Token name: Self Made\nToken symbol: SELF\nLogo: a bold, clean logo of a small robot hand drawing itself with a pencil, lime green on black, readable at 64 px, no real brands or people\n\nThe token that builds itself. Every trade pays a small fee in IMD into an on-chain workshop contract, and that contract hires the Identity.md swarm by itself, through the Identity.md Intake contract, to make things for the coin: memes, videos, research and audits. Nobody decides when; the fees do.\n\nWho can change it: nobody. No owner, no admin, no upgrade path, no setters on any contract after deploy.\n\nContracts:\n1. SelfHook, a Uniswap v4 hook on the SELF/IMD pool this launch opens. On every swap it takes a 2% hook fee from the IMD side of the swap and keeps it in IMD (do NOT sell it for ETH). The fee goes straight to the Workshop contract. No other effects: no max buy, no blacklist, no pausing, no owner functions. It never reverts a real swap.\n2. Workshop, the contract that hires the swarm. It holds the IMD from the hook.\n   - Intake (Identity.md's on-chain door, same address on every chain): 0xa43e6f75ee006411f79ac1c84120606c2330de82. Its function: request(bytes32 action, bytes body, (address target, bytes4 selector) callback, address asset, uint256 amount) returns (bytes32 requestId). action is the right-padded bytes32 string \"job.open@job-1\". body is the job.open JSON as UTF-8 bytes (max 16,384 bytes). The price is read from Intake.priceOf(action, IMD); never hardcode 0.5 IMD. Workshop approves Intake for exactly the price before each call.\n   - commission(): public, anyone can call it. It works only when the Workshop holds at least price + bounty IMD and at least 6 hours passed since the last commission. It picks the next work order from a fixed list of 4 templates stored as constants (rotating 0,1,2,3,0…), calls Intake.request with that body and a callback to Workshop.onResult, and pays the caller a bounty of 2% of the price in IMD for the gas. Max 4 commissions per UTC day.\n   - The 4 templates, fixed at deploy (nobody can change them), stored as constant bytes of these exact job.open JSON bodies (each already passes Identity.md's /requests/check):\n     a) {\"objective\":\"Make one original meme image for Self Made ($SELF), the token that builds itself: a coin whose trading fees hire an AI swarm to make its own content. Funny, crypto-native, lime green and black. No real people, brands or copyrighted characters.\",\"skill\":\"create-image\",\"outputs\":[{\"name\":\"image\",\"path\":\"artifacts/image.png\",\"mediaType\":\"image/png\"}],\"github\":false}\n     b) {\"objective\":\"Make one 8-15 second vertical video for Self Made ($SELF), the token whose trading fees hire an AI swarm to make its own content. Show a coin building itself. Lime green and black. No real people, brands or copyrighted characters.\",\"skill\":\"create-video\",\"outputs\":[{\"name\":\"video\",\"path\":\"artifacts/video.mp4\",\"mediaType\":\"video/mp4\"}],\"github\":false}\n     c) {\"objective\":\"Write a short public report on Self Made ($SELF) on Robinhood Chain: read its SELF/IMD pool and its Workshop contract's commissions and delivered work, and explain in plain words how the self-building loop is doing. Facts only, no price predictions, no financial advice.\",\"skill\":\"research-report\",\"outputs\":[{\"name\":\"report\",\"path\":\"artifacts/report.md\",\"mediaType\":\"text/markdown\"}],\"github\":false}\n     d) {\"objective\":\"Security review of the verified SelfHook and Workshop contracts of the Self Made ($SELF) launch on Robinhood Chain: report any findings in plain words with severity.\",\"skill\":\"research-report\",\"outputs\":[{\"name\":\"report\",\"path\":\"artifacts/report.md\",\"mediaType\":\"text/markdown\"}],\"github\":false}\n   - onResult(bytes32 requestId, bytes32 resultHash, string uri): callable only by the Intake contract. Stores the result and emits Built(requestId, templateIndex, resultHash, uri). Must use little gas (under 150k). Also a failure hook via requestWithFailure: onFailure(bytes32 requestId, uint8 status, bytes32 reason, uint16 agreed, uint16 answered, bytes signature), callable only by Intake, emits Failed(requestId, status, reason).\n   - No owner, no admin, no withdraw: the IMD in the Workshop can only leave through Intake.request (and the caller bounty). Views: nextTemplate(), lastCommissionAt(), commissionsToday(), canCommission(), works(i).\n3. The website reads the Built events and shows a live gallery: \"Everything this token made for itself\", newest first, each item with its link, plus the Workshop's IMD balance and a countdown to the next possible commission.\n\nTests: fork tests against Robinhood Chain that call the real Intake contract (price read from priceOf), check the hook fee lands in the Workshop in IMD, commission() reverts below the balance / within 6 hours / after 4 per day, the bounty is paid, onResult and onFailure reject any caller but Intake.\n\nToken name: Self Made\nToken symbol: SELF","parentJobId":null,"planHash":"0c8a86bd37a74173a1d68338cc8f7e689af2de4eb5be4af142fad4d040a4f181","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"23a23277-83d7-4d83-959e-5bf659af2ab7","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1725-self-made"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52324","feedbackHash":"a20365e7c3e5797b9c15b689a84639b8e52b6bb7890786d2d55907ca56a5ddcc","nodeKey":"build_contract_project","submissionHash":"f7ddbf5564ad7b425df25b32e7fae961ba8fdf11130dd3c1223036849fc6c762","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"2f4f1439ddfe80091044722d47841bc6fdca715e39bd16afd22d776378e35b9f","state":"blocked","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"55ad97181c96c1ba","findings":[],"hash":"2af29c7b709fd9d0e820861983aa78cfeef48aad3dc8250e4e5467b64704ff99","nodeId":"1d1a8177-ffbf-41c9-ac13-d96a1cdef59f","outcome":"failed","summary":"needs input: SelfHook's constructor requires a Workshop address as its third argument (workshop_). No deployed Workshop address is supplied; web/config.json has workshop set to null. The documented placeholders $poolManager, $token, $owner and $factory do not resolve Workshop. A complete launch.json cannot encode this required argument without an invented address or unsupported placeholder, and this assignment does not permit changing the contracts. — What is the deployed address of this launch's Workshop contract on Robinhood Chain to use as SelfHook's third constructor argument?","treeHash":null,"usage":{"cachedInputTokens":566912,"inputTokens":64663,"model":"gpt-6-astra","outputTokens":3408,"runtime":"codex","turns":3,"wallClockMs":121016}},{"artifacts":[],"attempt":1,"bundleHash":"f66bf6ce1cde1acd46a37f010b815140ea27659ff1d9426501e9e7bdee3309af","device":"3d55f5b0ed8fa3df","findings":[],"hash":"f7ddbf5564ad7b425df25b32e7fae961ba8fdf11130dd3c1223036849fc6c762","nodeId":"da06b1c1-30c0-4055-bf83-62090cb6c2ad","outcome":"completed","summary":"Implemented the immutable token, hook, Workshop, live gallery, SVG/PNG logo, and deployment documentation.\n\nValidation passed:\n\n- `forge build` and `forge fmt --check`\n- 64 local contract tests\n- 5 Robinhood fork tests\n- 8 website tests\n\n[README](README.md) documents deployment parameters, deferred IMD redemption, and callback limits. No live transactions were sent. The gallery awaits the deployed Workshop address and block.","treeHash":"3ed9e501a2cfff1e5bd94756203012e4bb06a9dc","usage":{"cachedInputTokens":6722048,"inputTokens":187152,"model":"gpt-6-astra","outputTokens":69040,"runtime":"codex","turns":10,"wallClockMs":1910407}}],"verification":[{"checks":[{"durationMs":3774,"exitCode":0,"name":"build","output":"Compiling 98 files with Solc 0.8.26\nSolc 0.8.26 finished in 3.68s\nCompiler run successful!\n","passed":true},{"durationMs":618,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/WorkOrders.t.sol:WorkOrdersTest\n[PASS] test_templateBytesMatchBrief() (gas: 31664)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 299.34µs (186.09µs CPU time)\n\nRan 2 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] test_minerRangeChecks() (gas: 1835414)\n[PASS] test_offlineMinerUsesFactoryAndActualConstructorArguments() (gas: 7469645)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 11.80ms (11.90ms CPU time)\n\nRan 20 tests for test/Workshop.t.sol:WorkshopTest\n[PASS] testFuzz_priceAndBountyConservation(uint128) (runs: 256, μ: 890385, ~: 896247)\n[PASS] test_belowPricePlusBountyRevertsWithoutStateChanges() (gas: 195090)\n[PASS] test_callbacksRejectWrongCallerAndUnknownRequests() (gas: 933036)\n[PASS] test_dailyCapAndUTCRollover() (gas: 2033149)\n[PASS] test_duplicateIntakeRequestIdRollsBackSecondPayment() (gas: 1077223)\n[PASS] test_dynamicPriceExactApprovalBountyAndSelectors() (gas: 977316)\n[PASS] test_extremeExternalPriceDoesNotOverflowCanCommission() (gas: 113255)\n[PASS] test_failedIntakeOrBountyRollsBackEverything() (gas: 1065418)\n[PASS] test_failureAndReplayDoNotSpendOrResetClock() (gas: 988932)\n[PASS] test_firstCommissionAtTimestampZeroStillEnforcesCooldown() (gas: 797748)\n[PASS] test_midnightDoesNotResetCooldown() (gas: 882901)\n[PASS] test_outOfOrderResultAuthenticatesAndStores() (gas: 1346510)\n[PASS] test_oversizedURIAndInvalidFailureStatusReject() (gas: 897669)\n[PASS] test_priceChangesBetweenCommissions() (gas: 1130656)\n[PASS] test_reentrantCommissionCannotDoubleSpend() (gas: 901390)\n[PASS] test_requestFailureAfterApprovalIsAtomic() (gas: 1145250)\n[PASS] test_resultWorstCaseGasUnder150k() (gas: 1251331)\nLogs:\n  maximum URI callback gas: 138256\n\n[PASS] test_rotatesExactTemplatesAndStoresCommissionIndex() (gas: 4061346)\n[PASS] test_sixHourBoundary() (gas: 1171917)\n[PASS] test_unansweredRequestsDoNotBlockFutureCommissions() (gas: 1082355)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 12.20ms (22.66ms CPU time)\n\nRan 5 tests for test/SelfToken.t.sol:SelfTokenTest\n[PASS] testFuzz_transferConservesSupply(uint128) (runs: 256, μ: 105606, ~: 106032)\nLogs:\n  Bound result 2639421\n\n[PASS] test_fixedPolicySupplyAndIdentity() (gas: 52636)\n[PASS] test_noAdminOrMintFunctionsEvenForDeployer() (gas: 270631)\n[PASS] test_noRuntimeEscapeHatch() (gas: 752191)\n[PASS] test_transferFromHonorsAllowanceAndHasNoTax() (gas: 157967)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 13.12ms (14.56ms CPU time)\n\nRan 17 tests for test/SelfHook.t.sol:SelfHookTest\n[PASS] testFuzz_swapConservation(bool,bool,uint96,bool) (runs: 256, μ: 437353, ~: 416665)\nLogs:\n  Bound result 86222946166374765430300\n\n[PASS] test_buyExactInput() (gas: 455943)\n[PASS] test_buyExactOutput() (gas: 406232)\n[PASS] test_callbacksRejectNonManagerAndQuoteRejectsPublicCaller() (gas: 139455)\n[PASS] test_emptyLiquidityDoesNotTaxUnexecutedRequestedVolume() (gas: 944246)\n[PASS] test_factoryCanCollectWithZeroLiquidityAndWithdraw() (gas: 485626)\n[PASS] test_freshManagerNeedsNoETHAndWorkshopNeedNotHaveIntakeCode() (gas: 466579)\n[PASS] test_insufficientManagerIMDDefersAndAnyoneRedeemsToWorkshop() (gas: 517263)\n[PASS] test_partialBuyExactInput() (gas: 456095)\n[PASS] test_partialBuyExactOutput() (gas: 405702)\n[PASS] test_partialSellExactInput() (gas: 412214)\n[PASS] test_partialSellExactOutput() (gas: 467165)\n[PASS] test_permissionsAndInitializationSelector() (gas: 34262)\n[PASS] test_rejectsDifferentPoolOnlyDuringInitialization() (gas: 692555)\n[PASS] test_sellExactInput() (gas: 412188)\n[PASS] test_sellExactOutput() (gas: 467130)\n[PASS] test_workshopTransferFailureDefersInsteadOfBlockingTrade() (gas: 410671)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 32.52ms (38.46ms CPU time)\n\nRan 17 tests for test/SelfHook.t.sol:SelfHookReverseOrderTest\n[PASS] testFuzz_swapConservation(bool,bool,uint96,bool) (runs: 256, μ: 437007, ~: 415989)\nLogs:\n  Bound result 143259561715754\n\n[PASS] test_buyExactInput() (gas: 468709)\n[PASS] test_buyExactOutput() (gas: 411186)\n[PASS] test_callbacksRejectNonManagerAndQuoteRejectsPublicCaller() (gas: 138916)\n[PASS] test_emptyLiquidityDoesNotTaxUnexecutedRequestedVolume() (gas: 957340)\n[PASS] test_factoryCanCollectWithZeroLiquidityAndWithdraw() (gas: 498374)\n[PASS] test_freshManagerNeedsNoETHAndWorkshopNeedNotHaveIntakeCode() (gas: 479345)\n[PASS] test_insufficientManagerIMDDefersAndAnyoneRedeemsToWorkshop() (gas: 530409)\n[PASS] test_partialBuyExactInput() (gas: 468073)\n[PASS] test_partialBuyExactOutput() (gas: 411525)\n[PASS] test_partialSellExactInput() (gas: 406115)\n[PASS] test_partialSellExactOutput() (gas: 455309)\n[PASS] test_permissionsAndInitializationSelector() (gas: 34242)\n[PASS] test_rejectsDifferentPoolOnlyDuringInitialization() (gas: 692545)\n[PASS] test_sellExactInput() (gas: 405787)\n[PASS] test_sellExactOutput() (gas: 456828)\n[PASS] test_workshopTransferFailureDefersInsteadOfBlockingTrade() (gas: 423459)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 38.96ms (32.13ms CPU time)\n\nRan 1 test for test/Invariants.t.sol:WorkshopInvariantTest\n[PASS]\nWorkshopInvariantTest invariants:\n[PASS] invariant_cadenceAndRotation\n[PASS] invariant_onlyIntakeAndBountyCanSpend\n WorkshopInvariantTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭-----------------+----------------------+-------+---------+----------╮\n| Contract        | Selector             | Calls | Reverts | Discards |\n+=====================================================================+\n| WorkshopHandler | advanceAndCommission | 1037  | 0       | 0        |\n|-----------------+----------------------+-------+---------+----------|\n| WorkshopHandler | finish               | 1011  | 0       | 0        |\n╰-----------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 255\n  Bound result 21600\n  Bound result 27196\n  Bound result 7\n  Bound result 2248\n  Bound result 43199\n  Bound result 3913\n  Bound result 3000\n  Bound result 35605\n  Bound result 15073\n  Bound result 468\n  Bound result 43178\n  Bound result 266\n  Bound result 2\n  Bound result 32\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 255.71ms (254.59ms CPU time)\n\nRan 1 test for test/Invariants.t.sol:HookInvariantTest\n[PASS] invariant_conservationAndExactFees() (runs: 64, calls: 2048, reverts: 0)\n\n╭-------------+----------+-------+---------+----------╮\n| Contract    | Selector | Calls | Reverts | Discards |\n+=====================================================+\n| SwapHandler | redeem   | 1037  | 0       | 0        |\n|-------------+----------+-------+---------+----------|\n| SwapHandler | trade    | 1011  | 0       | 0        |\n╰-------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 999999999990000001659\n  Bound result 10000000001\n  Bound result 999999999990000000312\n  Bound result 968534599330833053369\n  Bound result 999999999990000007087\n  Bound result 999999999990000004425\n  Bound result 999999999991091820210\n  Bound result 999999999990000004172\n  Bound result 999999999990000009427\n  Bound result 999999999990000002511\n  Bound result 999999999990000000211\n  Bound result 999999999994228666474\n  Bound result 999999999990000015439\n  Bound result 466112051993343283942\n  Bound result 999999999990000005159\n  Bound result 999999999991510864672\n  Bound result 999999999990000003552\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 490.75ms (469.91ms CPU time)\n\nRan 8 test suites in 494.49ms (855.35ms CPU time): 64 tests passed, 0 failed, 0 skipped (64 total tests)\n","passed":true},{"durationMs":64,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SelfHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"SelfHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"SelfHook.quoteIMD((address,address,uint24,int24,address),(bool,int256,uint160))\",\"SelfHook.redeemFees()\",\"SelfHook.unlockCallback(bytes)\",\"SelfToken.approve(address,uint256)\",\"SelfToken.transfer(address,uint256)\",\"SelfToken.transferFrom(address,address,uint256)\",\"Workshop.commission()\",\"Workshop.onFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"Workshop.onResult(bytes32,bytes32,string)\"],\"files\":{\".gitignore\":4,\"LICENSE\":21,\"NOTICE.md\":12,\"README.md\":107,\"docs/dependencies.json\":30,\"docs/dependencies.sha256\":451,\"docs/fork-evidence.json\":12,\"docs/security-review.md\":47,\"docs/verification.md\":26,\"docs/work-orders/0-meme.json\":1,\"docs/work-orders/1-video.json\":1,\"docs/work-orders/2-report.json\":1,\"docs/work-orders/3-audit.json\":1,\"foundry.toml\":28,\"remappings.txt\":4,\"script/MineSelfHook.s.sol\":32,\"scripts/check-fork.sh\":4,\"scripts/check.sh\":7,\"scripts/configure-gallery.py\":26,\"src/HookFlags.sol\":31,\"src/LaunchConstants.sol\":10,\"src/SelfHook.sol\":173,\"src/SelfToken.sol\":11,\"src/WorkOrders.sol\":24,\"src/Workshop.sol\":167,\"src/interfaces/IIntake.sol\":25,\"test/Deployment.t.sol\":74,\"test/Invariants.t.sol\":166,\"test/SelfHook.t.sol\":227,\"test/SelfToken.t.sol\":72,\"test/WorkOrders.t.sol\":22,\"test/Workshop.t.sol\":326,\"test/fork/Robinhood.t.sol\":143,\"test/helpers/HookFixture.sol\":58,\"test/helpers/PoolDriver.sol\":54,\"test/mocks/MockERC20.sol\":24,\"test/mocks/MockIntake.sol\":67,\"web/abi/SelfHook.json\":609,\"web/abi/SelfToken.json\":315,\"web/abi/Workshop.json\":494,\"web/app.mjs\":123,\"web/assets/self-logo-256.png\":37,\"web/assets/self-logo-512.png\":41,\"web/assets/self-logo-64.png\":12,\"web/assets/self-logo.svg\":15,\"web/chain.mjs\":104,\"web/config.json\":10,\"web/index.html\":51,\"web/style.css\":1,\"web/test/chain.test.mjs\":71},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":1191,"exitCode":0,"name":"slither","output":"[medium/high] incorrect-equality at src/Workshop.sol:127: Workshop.commissionsToday() (src/Workshop.sol#127-129) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/Workshop.sol:161: Workshop._pending(bytes32) (src/Workshop.sol#161-166) uses a dangerous strict equality:\n[medium/medium] reentrancy-no-eth at src/Workshop.sol:68: Reentrancy in Workshop.commission() (src/Workshop.sol#68-101):\n[low/medium] reentrancy-benign at src/Workshop.sol:68: Reentrancy in Workshop.commission() (src/Workshop.sol#68-101):\n[low/medium] reentrancy-events at src/SelfHook.sol:137: Reentrancy in SelfHook.unlockCallback(bytes) (src/SelfHook.sol#137-147):\n[low/medium] reentrancy-events at src/SelfHook.sol:75: Reentrancy in SelfHook.beforeSwap(address,PoolKey,SwapParams,bytes) (src/SelfHook.sol#75-108):\n[low/medium] reentrancy-events at src/SelfHook.sol:149: Reentrancy in SelfHook._pay(uint256) (src/SelfHook.sol#149-159):\n[low/medium] reentrancy-events at src/SelfHook.sol:149: Reentrancy in SelfHook._pay(uint256) (src/SelfHook.sol#149-159):\n[low/medium] timestamp at src/Workshop.sol:140: Workshop.canCommission() (src/Workshop.sol#140-151) uses timestamp for comparisons\n[low/medium] timestamp at src/Workshop.sol:68: Workshop.commission() (src/Workshop.sol#68-101) uses timestamp for comparisons\n[low/medium] timestamp at src/Workshop.sol:161: Workshop._pending(bytes32) (src/Workshop.sol#161-166) uses timestamp for comparisons\n[low/medium] timestamp at src/Workshop.sol:127: Workshop.commissionsToday() (src/Workshop.sol#127-129) uses timestamp for comparisons\n[low/medium] timestamp at src/Workshop.sol:131: Workshop.nextCommissionAt() (src/Workshop.sol#131-137) uses timestamp for comparisons","passed":true},{"durationMs":384,"exitCode":0,"name":"aderyn","output":"[high] reentrancy-state-change at src/Workshop.sol:74: Reentrancy: State change after external call (3 places)\n[low] internal-function-used-once at src/HookFlags.sol:24: Internal Function Used Only Once\n[low] large-numeric-literal at src/SelfToken.sol:9: Large Numeric Literal\n[low] literal-instead-of-constant at src/SelfHook.sol:85: Literal Instead of Constant (8 places)\n[low] non-reentrant-not-first at src/Workshop.sol:104: `nonReentrant` is Not the First Modifier (2 places)\n[low] unused-public-function at src/SelfHook.sol:60: Public Function Not Used Internally","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"f7ddbf5564ad7b425df25b32e7fae961ba8fdf11130dd3c1223036849fc6c762","verifiedTreeHash":"3ed9e501a2cfff1e5bd94756203012e4bb06a9dc","verifierVersion":"0.1.0+67c588fa"}]}