{"workflow":null,"planning":null,"id":"ace7336a-2c79-452b-89bd-8e2fe2361238","state":"completed","template":"shape:chain","objective":"Update the schemas and validator to match the live POST https://api.imd.fun/requests/check, which we compared against the library on 14 bodies. 1 Bug: paths \".\" and \"./src\" are refused by the library (the relativePath regex rejects any '.' segment) but accepted by the live check on implement-component steps. Accept \".\" and ./-prefixed paths in steps[].paths and paths; keep refusing absolute paths and '..'. 2 protected_path: the live check refuses \".git\" and \".git/hooks/pre-commit\" with \"is protected and can never be modified by a task\". Treat .git and anything under .git/ as protected, alongside foundry.toml and lib. 3 unplannable_steps: the live check refuses steps[].key or steps[].dependsOn when shape is not \"dag\" (\"Explicit keys and dependencies require shape:dag\"). Mirror it. 4 bad_path_count: the live check counts a path without a file extension as two paths (p and p/**); a file or a /** glob counts as one. 9 directory paths, or 8 directories plus 1 file, are refused; 8 directories or 16 files pass. Count after this expansion. 5 Optional: a launch_token warning (not an error) on evm_project and univ4_hook launches whose objective names a supply other than 1,000,000,000, decimals other than 18, or transfer fees or taxes, modelled on the token_supply heuristic. Mark items 2-4 in docs as observed server behaviour that the public docs do not state, with the date. Verify against the LIVE API at https://api.imd.fun with read-only GETs (and the free POST /requests/check where it applies), not only against a mock you write yourself; save the live response bodies you relied on under fixtures/live/ or the test folder and build any mock from them. Add a CHANGELOG.md entry (create it if missing) that lists each item below and what changed. Keep the existing experimental label everywhere it already appears (\"Experimental, commissioned as a test of the IMD swarm. It may not work as described. Read the code, start with small amounts, no warranty.\").","blockedReason":null,"createdAt":"2026-10-02T21:50:40.728Z","updatedAt":"2026-10-02T22:10:48.650Z","paidBy":"0x3a58cff8be5c2f569976f5063f638cf155ad838d","parentJobId":"e3008b8a-268f-41d6-8f2c-491a47a02f0e","project":{"id":"e3008b8a-268f-41d6-8f2c-491a47a02f0e","head":"456ed8e0-2a58-47d6-8797-b03eb9d6424d","running":null,"versions":[{"jobId":"e3008b8a-268f-41d6-8f2c-491a47a02f0e","workflowId":null,"objective":"Build imd-schemas: JSON Schema (draft 2020-12) files for the input of every IMD paid action: job.open, job.continue, launch.open, workflow.open, oracle.request, schedule.create, schedule.topup, written from the field tables at https://imd.fun/docs (Job body, Workflow body, Oracle body, Schedule body) with every limit (lengths, counts, enums, regexes, required-together and mutually-exclusive fields). Name each schema after the action version listed in GET /openapi.json x-imd-actions (for example schedule-1) so a new version shows as unsupported instead of silently wrong. Ship a validator library and `imd-validate <action> <file>` CLI with readable errors, plus Known refusal codes and causes to cover: invalid_input, invalid_payment_shape, missing_fact token_supply (workflow request must state the token's total supply), unplannable_steps (gas-and-size-report, write-readme-and-docs and deploy-script steps must not name paths), protected_path (foundry.toml and lib), recheck_failed / needs_revision (vague rules; asking adversarial-review for a failing test), invalid_plan / objective_too_large (request + context + draft objective above about 7,000 characters folded), payer_not_owner (job.continue paid by another wallet), request_key_conflict, launch_token, too_many_publishes, no_panel, unknown_schedule, invalid_owner, evaluation_unavailable (transient).  Label it everywhere it is presented (README top, CLI --help, site banner) as experimental: \"Experimental, commissioned as a test of the IMD swarm. It may not work as described. Read the code, start with small amounts, no warranty.\" Add one line at the end of the README: \"Commissioned through paid IMD swarm requests.\"","baseCommit":"0243d7da4a4337ae8b16bcdf15bb4ead736fd68f","state":"completed","createdAt":"2026-10-02T18:18:58.425Z"},{"jobId":"ace7336a-2c79-452b-89bd-8e2fe2361238","workflowId":null,"objective":"Update the schemas and validator to match the live POST https://api.imd.fun/requests/check, which we compared against the library on 14 bodies. 1 Bug: paths \".\" and \"./src\" are refused by the library (the relativePath regex rejects any '.' segment) but accepted by the live check on implement-component steps. Accept \".\" and ./-prefixed paths in steps[].paths and paths; keep refusing absolute paths and '..'. 2 protected_path: the live check refuses \".git\" and \".git/hooks/pre-commit\" with \"is protected and can never be modified by a task\". Treat .git and anything under .git/ as protected, alongside foundry.toml and lib. 3 unplannable_steps: the live check refuses steps[].key or steps[].dependsOn when shape is not \"dag\" (\"Explicit keys and dependencies require shape:dag\"). Mirror it. 4 bad_path_count: the live check counts a path without a file extension as two paths (p and p/**); a file or a /** glob counts as one. 9 directory paths, or 8 directories plus 1 file, are refused; 8 directories or 16 files pass. Count after this expansion. 5 Optional: a launch_token warning (not an error) on evm_project and univ4_hook launches whose objective names a supply other than 1,000,000,000, decimals other than 18, or transfer fees or taxes, modelled on the token_supply heuristic. Mark items 2-4 in docs as observed server behaviour that the public docs do not state, with the date. Verify against the LIVE API at https://api.imd.fun with read-only GETs (and the free POST /requests/check where it applies), not only against a mock you write yourself; save the live response bodies you relied on under fixtures/live/ or the test folder and build any mock from them. Add a CHANGELOG.md entry (create it if missing) that lists each item below and what changed. Keep the existing experimental label everywhere it already appears (\"Experimental, commissioned as a test of the IMD swarm. It may not work as described. Read the code, start with small amounts, no warranty.\").","baseCommit":"ef0a15b8308ea011176781ea1488fc2cccdf0dba","state":"completed","createdAt":"2026-10-02T21:50:40.728Z"},{"jobId":"456ed8e0-2a58-47d6-8797-b03eb9d6424d","workflowId":null,"objective":"Three gaps against the live POST https://api.imd.fun/requests/check. 1 The live check also refuses \".github/workflows\" and \".github/workflows/ci.yml\" as protected_path; the library accepts them. Treat .github and anything under .github/ as protected. (\".vscode\" passes in both; keep it.) 2 The live check accepts \"./.git/config\" while the library refuses it. Make the library match the server on that path exactly (re-check it live first and record the verdict), without loosening the .git and .git/ protection. 3 launch_token: the live server blocks on it (blocker, not suggestion). Report it as an error instead of a warning, with the same heuristic. 4 scripts/generate-schemas.mjs still has the old relativePath pattern, so npm run schemas would undo the earlier \".\" and \"./src\" fix. Update it to the new pattern and add a test that regenerating the schemas leaves them unchanged. Record each new case's live verdict in the saved live fixtures. Verify against the LIVE API at https://api.imd.fun with read-only GETs and the free POST /requests/check, not only a mock; save the live bodies you relied on next to the tests. Add a CHANGELOG.md entry listing each item and what changed. Keep the existing experimental label everywhere it already appears.","baseCommit":"75a580d32af76821b2681cd3610aa8668397e932","state":"completed","createdAt":"2026-10-02T23:43:54.649Z"}]},"deliver":true,"host":false,"site":null,"launch":{"requested":false,"kind":null,"id":null,"status":null,"chainId":null},"oracleRequestId":null,"delivery":{"repoUrl":"https://github.com/identity-md-launches/launch-603-build-imd-schemas-json-schema","pullRequestUrl":"https://github.com/identity-md-launches/launch-603-build-imd-schemas-json-schema/pull/2","commit":"75a580d32af76821b2681cd3610aa8668397e932","deliveredAt":"2026-10-02T22:10:56.543Z","media":null},"media":null,"nodes":[{"key":"adversarial_review","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["refine_project"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-02T22:10:48.650Z","verdict":null,"seat":{"tokenId":"2","agentId":"50959"},"live":null},{"key":"refine_project","role":"implement","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":[],"allowedPaths":["src/**","schemas/**","test/**","dist/**","docs/**","examples/**","README.md","CHANGELOG.md"],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-02T21:58:41.965Z","verdict":{"status":"accepted","profile":"none","evaluation":"structural","rejectionCode":null,"detail":"paths and tree verified; no suite was run for this kind of work","verifierVersion":"0.1.0+b537d296","verifiedTreeHash":"55403426d940d15bab92641eb0f348a82503f82b","at":"2026-10-02T21:58:41.967Z","failedChecks":[]},"seat":{"tokenId":"1723","agentId":"51300"},"live":null}],"reviews":[{"status":"sent","chainId":1,"txHash":"0xb87b460c11acff7597407d6e893ff1d919ac9e654e8ede9497881a9d284fa44c","blockNumber":26115012,"sentAt":"2026-10-03T23:10:25.882Z","entries":[{"nodeKey":"adversarial_review","agentId":"50959","value":1,"role":"review:submission"},{"nodeKey":"refine_project","agentId":"51300","value":1,"role":"verification:structural"}]}]}