{
  "version": 1,
  "sharedInterfaces": "Sequential handoff, no concurrent writers. Contract step delivers IMDOracleDisputeRegistry (Solidity/Foundry, repo root: src/, test/, script/) plus docs/abi/IMDOracleDisputeRegistry.json and docs/contract.md describing functions, events, the challenge/response data model and limitations. Challenge records identify the challenged IMD oracle answer including its original source chainId, stored separately from the Sepolia (11155111) registry chain, and carry evidence references (URI/hash) and the submitting wallet; responses append to a challenge by id. Events expose everything the frontend needs to list challenges and responses. Frontend receives the deployed address and ABI hashes via .imd/reads/deployment.json and uses the ABI at docs/abi/IMDOracleDisputeRegistry.json.",
  "steps": [
    {
      "key": "registry_contract",
      "skill": "build-contract-project",
      "dependsOn": [],
      "paths": ["src/**", "test/**", "script/**", "lib/**", "foundry.toml", "remappings.txt", ".gitignore", "README.md", "docs/**"],
      "objective": "Create the Foundry project from the empty source and implement IMDOracleDisputeRegistry: an unofficial public dispute registry where anyone can record an evidence-backed challenge to an IMD oracle answer (identifying the answer and its original source chain separately from Sepolia), browse challenges on-chain, and append responses to a challenge. No token, deposits, bonds, rewards, fees, staking, administrator/owner, upgrades, voting, automatic verdicts or resolution. The contract must not claim to reverse IMD decisions, penalize agents or prove an answer wrong; submissions are public claims attributed to their submitting wallets, and wallet counts are not person counts. Write meaningful Foundry tests, a configuration-driven Sepolia-only (chainId 11155111) deploy script, ABI JSON at docs/abi/IMDOracleDisputeRegistry.json, and setup/limitations/integration docs. Vendor dependencies as ordinary committed files, never submodules.",
      "acceptanceCriteria": [
        "forge build and forge test pass offline with dependencies committed as plain files (no submodules)",
        "Tests cover challenge creation, evidence validation, response appending, reads/enumeration, events, invalid ids and inputs, and multiple wallets",
        "Contract has no token, value transfers, fees, bonds, rewards, staking, admin/owner, upgradeability, voting or verdict logic",
        "Challenge data records the original oracle source chainId separately from the registry chain and attributes entries to msg.sender",
        "Deploy script takes parameters from configuration and refuses any chain other than Sepolia 11155111",
        "docs/abi/IMDOracleDisputeRegistry.json matches the compiled ABI and docs state the non-adjudication limitations accurately"
      ]
    },
    {
      "key": "contract_review",
      "skill": "adversarial-review",
      "dependsOn": ["registry_contract"],
      "objective": "Independently review IMDOracleDisputeRegistry, its tests, deploy script, ABI JSON, docs and the generated launch manifest as an attacker would: spam/griefing and storage growth, input and id validation, impersonation or misattribution, event completeness for the frontend, Sepolia-only deployment, preservation of the separate source chain, and any wording or behavior implying adjudication, penalties or reversal of IMD decisions. Write nothing.",
      "acceptanceCriteria": [
        "Findings are classified blocking or non-blocking with concrete reproduction or reasoning",
        "Review confirms or refutes the absence of token, fee, admin, upgrade, voting and verdict functionality",
        "Review checks ABI JSON and docs against the source and the generated launch manifest"
      ]
    },
    {
      "key": "website",
      "skill": "frontend-for-contract",
      "dependsOn": ["contract_review"],
      "paths": ["web/**", "web/.gitignore", "dist/**", "docs/**"],
      "objective": "After deployment, build the responsive static IMD Oracle Challenges website connected to the actual Sepolia deployment from .imd/reads/deployment.json and docs/abi/IMDOracleDisputeRegistry.json: connect a wallet on Sepolia, record an evidence-backed challenge to an IMD oracle answer (including its original source chain), browse challenges and their responses, and append responses. Clearly state it is an unofficial public dispute registry, not an oracle or adjudicator; entries are public claims by submitting wallets and wallet counts are not person counts. Update setup and limitations documentation for the site.",
      "acceptanceCriteria": [
        "Uses the deployed address and ABI whose hashes match the deployment handoff; only Sepolia 11155111 transactions are offered",
        "Create challenge, browse/list challenges, view detail and append response flows work against the ABI and are covered by tests",
        "Displays the disclaimer and never presents challenges as verdicts, reversals, penalties or proof an answer is wrong",
        "Responsive layout; static export built to repository-root dist/ with relative asset paths suitable for IPFS",
        "Source, package.json and lockfile live under web/; docs describe setup, usage and limitations"
      ]
    }
  ],
  "questions": []
}
