{"workflow":{"id":"fbeef3d8-748f-4871-871a-eb5aa59c600e","objective":"This launch deploys application contracts only and no token. launch.json is kind evm_contracts, which takes no token, no liquidity pool and no reward distributor, and in which $token does not resolve. The only token involved is the elastic CompToken the vault creates in its own constructor, which is not a launch artifact.\n\nTenth increment on the COMP compute-backed stablecoin, continuing our own repository at the commit in the draft. Everything so far bounds how much COMP can be created. This is the first thing that lets COMP be destroyed at a known price, which is what makes the peg real rather than a unit of account plus a hope that arbitrage closes the gap.\n\nAdd redemption of COMP for the collateral asset IMD, and only that asset. A redeemer names an amount of COMP and a minimum amount of IMD they will accept. The COMP is burned. The IMD comes from the Treasury's reserve FIRST, and only when that is exhausted from the debt of eligible borrower positions. Reserve-first is not an optimisation: both routes improve backing by identical arithmetic, so solvency does not choose, but the Treasury's IMD is idle while a borrower's is working as collateral, and spending the idle asset first means ordinary arbitrage never reaches a position.\n\nA position is eligible only while its collateral ratio is below a ceiling that is DERIVED, not configured: minCR() plus a governed spread, shipping at 50 ratio points. It must be derived because minCR already rises from 150 to 200 as network health falls, so a ceiling pinned at an absolute 200 would collapse the eligible band to nothing exactly during the stress when the peg most needs defending. Anchoring it to minCR scales it with NHI with no second curve. The spread is governed under the existing 48-hour delay, hard-bounded between 25 and 100.\n\nThe ceiling must stay strictly ABOVE minCR: below it a position is already liquidatable, and a liquidator takes the same collateral for the same debt PLUS a bonus, so a redeemer would lose every race for it.\n\nThere is NO sorted list: the caller names a candidate and the contract refuses it unless it is eligible. Nothing can be cherry-picked, because the payout is denominated in the debt repaid rather than the position's ratio. Redemption also RAISES the redeemed position's ratio, since the fee means it gives up less than proportional collateral.\n\nThe fee is a decaying base rate plus a floor, capped. On each redemption the base rate rises by the redeemed fraction of total supply divided by four, and decays with a half-life of about twelve hours. The floor and cap are SOURCE CONSTANTS, not governed parameters: the floor IS the peg, since COMP cannot trade far below one minus the fee without being redeemed, and a governable cap is a redemption halt with extra steps. Floor 50 basis points, cap 500. The divisor of four rather than two is deliberate: at two, redeeming a tenth of supply saturates the cap in one call and the base rate does no work at all.\n\nThe fee is RETAINED AS BACKING and paid to nobody: the redeemer receives one minus the fee and the difference is simply not paid out, so no distribution machinery exists and redemption improves backing strictly more than a fee-free one would.\n\nRedemption must never reach a borrower's collateral except in exchange for retiring their debt. A borrower's IMD is theirs; the protocol may hand it over only against the debt it cancels.\n\nAn independent security review is wanted, weighted on whether a redeemer can be paid twice from one burn, extract more than the fee-adjusted feed price, reach an ineligible position, or leave a position worse off in ratio terms than it began.\n\nYES, this request includes a user-facing website: the single-screen terminal gains a redemption pane, described in the step objective.","status":"completed","brief":"# Approved workflow\n\nThis launch deploys application contracts only and no token. launch.json is kind evm_contracts, which takes no token, no liquidity pool and no reward distributor, and in which $token does not resolve. The only token involved is the elastic CompToken the vault creates in its own constructor, which is not a launch artifact.\n\nTenth increment on the COMP compute-backed stablecoin, continuing our own repository at the commit in the draft. Everything so far bounds how much COMP can be created. This is the first thing that lets COMP be destroyed at a known price, which is what makes the peg real rather than a unit of account plus a hope that arbitrage closes the gap.\n\nAdd redemption of COMP for the collateral asset IMD, and only that asset. A redeemer names an amount of COMP and a minimum amount of IMD they will accept. The COMP is burned. The IMD comes from the Treasury's reserve FIRST, and only when that is exhausted from the debt of eligible borrower positions. Reserve-first is not an optimisation: both routes improve backing by identical arithmetic, so solvency does not choose, but the Treasury's IMD is idle while a borrower's is working as collateral, and spending the idle asset first means ordinary arbitrage never reaches a position.\n\nA position is eligible only while its collateral ratio is below a ceiling that is DERIVED, not configured: minCR() plus a governed spread, shipping at 50 ratio points. It must be derived because minCR already rises from 150 to 200 as network health falls, so a ceiling pinned at an absolute 200 would collapse the eligible band to nothing exactly during the stress when the peg most needs defending. Anchoring it to minCR scales it with NHI with no second curve. The spread is governed under the existing 48-hour delay, hard-bounded between 25 and 100.\n\nThe ceiling must stay strictly ABOVE minCR: below it a position is already liquidatable, and a liquidator takes the same collateral for the same debt PLUS a bonus, so a redeemer would lose every race for it.\n\nThere is NO sorted list: the caller names a candidate and the contract refuses it unless it is eligible. Nothing can be cherry-picked, because the payout is denominated in the debt repaid rather than the position's ratio. Redemption also RAISES the redeemed position's ratio, since the fee means it gives up less than proportional collateral.\n\nThe fee is a decaying base rate plus a floor, capped. On each redemption the base rate rises by the redeemed fraction of total supply divided by four, and decays with a half-life of about twelve hours. The floor and cap are SOURCE CONSTANTS, not governed parameters: the floor IS the peg, since COMP cannot trade far below one minus the fee without being redeemed, and a governable cap is a redemption halt with extra steps. Floor 50 basis points, cap 500. The divisor of four rather than two is deliberate: at two, redeeming a tenth of supply saturates the cap in one call and the base rate does no work at all.\n\nThe fee is RETAINED AS BACKING and paid to nobody: the redeemer receives one minus the fee and the difference is simply not paid out, so no distribution machinery exists and redemption improves backing strictly more than a fee-free one would.\n\nRedemption must never reach a borrower's collateral except in exchange for retiring their debt. A borrower's IMD is theirs; the protocol may hand it over only against the debt it cancels.\n\nAn independent security review is wanted, weighted on whether a redeemer can be paid twice from one burn, extract more than the fee-adjusted feed price, reach an ineligible position, or leave a position worse off in ratio terms than it began.\n\nYES, this request includes a user-facing website: the single-screen terminal gains a redemption pane, described in the step objective.\n\nContinues our own repository at the commit in the draft, which MUST be repinned to the commit the previous increment pushes. docs/COMPUTE-BACKING-DESIGN.md section 5 is the design and the reference for every number here; this is item 4 of its build order, and only item 4.\n\nTWO EXISTING PROPERTIES MUST SURVIVE; neither is new work. Redemption shrinks both terms of workCeiling, so COMP below peg tightens work-minting with no governance and no oracle. And work-minted COMP has no position behind it, so redeeming it consumes borrowers' collateral - the dilution the work ceiling bounds.\n\nlaunch.json is already the evm_contracts kind and names PriceFeed, NhiFeed, SpotFeed and ParameterizedVault. The manifest cap is eight but a request can declare only four, so four is the binding number. A manifest makes no post-deploy calls and cannot name one artifact twice. Redemption is therefore VAULT METHODS, not a new contract: it burns COMP, reads positions and moves collateral, all of which the vault already does. The cap is eight, so there is room, but do not spend it - Treasury, UsdPriceFeed, Parameters and CompToken are created in the vault's constructor so the deployment comes up linked with nothing sent afterwards.\n\nThe manifest passes zero for the work-oracle argument, which is the grantRights faucet, and that must not change: the attested SwarmWorkOracle needs a WorkOracleFactory already deployed and named in src/DeploymentConfig.sol, and that factory is not on chain yet.\n\nAuthority is never a constructor argument here. The feeds take only (maxAge_, maxDeviationBps_); attester, relayer, reporters, quorum, answerType and payload chainId are constants in src/DeploymentConfig.sol, because a manifest once substituted its own values and both feeds were permanently inert. Do not reintroduce them, and do not pass a literal address for anything a constructor validates - a literal has code only on the chain it was deployed to, which made an earlier manifest unconstructible elsewhere.\n\nfoundry.toml sets isolate = true and test/README.md documents plain `forge test`. Keep both working: backedDebt's snapshot reads transaction boundaries, which a non-isolated run collapses.\n\nDo not touch SwarmFeed.questionPolicy, _requireQuestion, expectedQuestionHash or any existing QUESTION_PREFIX: those constants are generated from the payloads in oracle/ and all four feeds depend on them.\n\nforge build compiles script/ as well as src/ and test/, so a vault change must be matched in all three scripts under script/ in the same step as the change.\n\nOut of scope, each its own later increment: redemption channel B, which prices a free choice among reserve assets by how far each sits below a target basket weight - those weights are not decided; the stability fee's burn-and-convert split; any change to what denominates a collateral ratio; and any change to existing parameter values, their bounds, the 48-hour delay or the governor.\n\nSepolia only (11155111).\n\nAdd redemption of COMP for IMD: reserve first, then eligible positions below a ceiling derived from minCR, priced by a capped decaying fee whose floor and cap are source constants.\n","briefDigest":"e49f72ff924ba7f81296985f762a42bd12e050ad2eb7b8c7f505e8ea4e90e3f1"},"planning":null,"id":"f5d514dd-cb61-4582-8f53-49ea56b3eaba","state":"completed","template":"shape:dag","objective":"WORKFLOW FRONTEND STAGE CONTEXT: contracts are already deployed. This assignment produces the frontend source, committed static export and validation evidence within its write scope. Put frontend source, package.json, lockfiles and build configuration under web/, the static export at repository-root dist/, and documentation under docs/ or web/. A web/** scope also receives an explicit web/.gitignore allowance; directory globs exclude other dotfiles. Follow narrower assigned paths when supplied. Root configuration and lockfiles stay protected. Read .imd/reads/deployment.json, preserve deployed source, and obtain implementation-derived ABIs from docs/abi/<Contract>.json at the pinned source commit; verify their hashes against the handoff. Read .imd/reads/workflow.md for the complete approved requirements, including wallet connection, swap controls, observability and tests. Submit the source/export/evidence to complete this worker assignment. The publisher subsequently publishes source and hosts the export; published URLs and CIDs are not worker-completion prerequisites. This assignment does not publish the site or redeploy contracts.\n\nMANDATORY FRONTEND ACCEPTANCE: Emit dist/imd-deployment.json after the final static export. Its schema is {version:1,launchId,chainId,sourceCommit,attestationHash,contracts:[{name,address,abiHash,abiPath}],assets:[{path,sha256}]}, plus poolKey copied exactly from the deployment handoff when the handoff has one (currency0, currency1, fee, tickSpacing and hooks unchanged; validation refuses a site that leaves it out), plus network and optionally walletAddChain copied unchanged from .imd/reads/network.json when it exists; add no other top-level key. Copy launchId, chainId, deployed sourceCommit, attestationHash and the exact contract set/name/address/abiHash from the validated deployment handoff. Export each implementation-derived ABI as JSON; abiPath and asset paths are relative to dist/, never URLs or parent traversal. The frontend must load this same imd-deployment.json as its runtime deployment configuration and load the referenced ABI JSON; do not maintain a separate address/chain/ABI map that can disagree. After building, enumerate every exported file except imd-deployment.json, including index.html and all ABI JSON, and record each file's SHA-256 as lowercase hex. At most 128 assets and 8 MiB per file. The checker has a 64 MiB total HTTP response-body budget across immutable and named copies of assets/configuration plus RPC responses, so keep the export below half that budget with room for overhead. The manifest excludes itself to avoid a recursive hash. Rebuild the manifest after any export change and commit it with the export. Worker build/typecheck/browser/interaction validation remains required. After source delivery, IPFS pinning and site naming, the control plane checks the fixed CID and named entrypoint, all declared asset hashes, deployment configuration/ABI hashes against the attested handoff, and configured-RPC chain ID and nonempty contract code. It does not execute browser JavaScript or wallet swaps. Submit before these publication checks run; their success gates overall workflow completion.","blockedReason":null,"createdAt":"2026-10-04T19:05:53.630Z","updatedAt":"2026-10-04T19:38:00.721Z","paidBy":"0x5167d014a056e43883e1bbea5530c3c0dc993281","parentJobId":"a7f40133-ae45-4ec3-a753-984ebe815525","project":{"id":"a7f40133-ae45-4ec3-a753-984ebe815525","head":"f5d514dd-cb61-4582-8f53-49ea56b3eaba","running":null,"versions":[{"jobId":"a7f40133-ae45-4ec3-a753-984ebe815525","workflowId":"fbeef3d8-748f-4871-871a-eb5aa59c600e","objective":"This launch deploys application contracts only and no token. launch.json is kind evm_contracts, which takes no token, no liquidity pool and no reward distributor, and in which $token does not resolve. The only token involved is the elastic CompToken the vault creates in its own constructor, which is not a launch artifact.\n\nTenth increment on the COMP compute-backed stablecoin, continuing our own repository at the commit in the draft. Everything so far bounds how much COMP can be created. This is the first thing that lets COMP be destroyed at a known price, which is what makes the peg real rather than a unit of account plus a hope that arbitrage closes the gap.\n\nAdd redemption of COMP for the collateral asset IMD, and only that asset. A redeemer names an amount of COMP and a minimum amount of IMD they will accept. The COMP is burned. The IMD comes from the Treasury's reserve FIRST, and only when that is exhausted from the debt of eligible borrower positions. Reserve-first is not an optimisation: both routes improve backing by identical arithmetic, so solvency does not choose, but the Treasury's IMD is idle while a borrower's is working as collateral, and spending the idle asset first means ordinary arbitrage never reaches a position.\n\nA position is eligible only while its collateral ratio is below a ceiling that is DERIVED, not configured: minCR() plus a governed spread, shipping at 50 ratio points. It must be derived because minCR already rises from 150 to 200 as network health falls, so a ceiling pinned at an absolute 200 would collapse the eligible band to nothing exactly during the stress when the peg most needs defending. Anchoring it to minCR scales it with NHI with no second curve. The spread is governed under the existing 48-hour delay, hard-bounded between 25 and 100.\n\nThe ceiling must stay strictly ABOVE minCR: below it a position is already liquidatable, and a liquidator takes the same collateral for the same debt PLUS a bonus, so a redeemer would lose every race for it.\n\nThere is NO sorted list: the caller names a candidate and the contract refuses it unless it is eligible. Nothing can be cherry-picked, because the payout is denominated in the debt repaid rather than the position's ratio. Redemption also RAISES the redeemed position's ratio, since the fee means it gives up less than proportional collateral.\n\nThe fee is a decaying base rate plus a floor, capped. On each redemption the base rate rises by the redeemed fraction of total supply divided by four, and decays with a half-life of about twelve hours. The floor and cap are SOURCE CONSTANTS, not governed parameters: the floor IS the peg, since COMP cannot trade far below one minus the fee without being redeemed, and a governable cap is a redemption halt with extra steps. Floor 50 basis points, cap 500. The divisor of four rather than two is deliberate: at two, redeeming a tenth of supply saturates the cap in one call and the base rate does no work at all.\n\nThe fee is RETAINED AS BACKING and paid to nobody: the redeemer receives one minus the fee and the difference is simply not paid out, so no distribution machinery exists and redemption improves backing strictly more than a fee-free one would.\n\nRedemption must never reach a borrower's collateral except in exchange for retiring their debt. A borrower's IMD is theirs; the protocol may hand it over only against the debt it cancels.\n\nAn independent security review is wanted, weighted on whether a redeemer can be paid twice from one burn, extract more than the fee-adjusted feed price, reach an ineligible position, or leave a position worse off in ratio terms than it began.\n\nYES, this request includes a user-facing website: the single-screen terminal gains a redemption pane, described in the step objective.","baseCommit":"5cc5745ea2ddf1585e3b250676027fd4fa965c32","state":"completed","createdAt":"2026-10-04T03:42:05.277Z"}]},"deliver":true,"host":true,"site":{"id":"56502d9b-3ab5-4b3a-83b1-d7b83dd74e6e","jobId":"f5d514dd-cb61-4582-8f53-49ea56b3eaba","kind":"launch","tokenId":null,"agentId":null,"url":"https://comp-protocol-f5d5.site.identitymd.eth.limo","status":"named","holdReason":null,"takenDownAt":null,"takenDownReason":null,"label":"comp-protocol-f5d5","cid":"bafybeifkglfhiw54iv4ws4tzigwjshbz4h4ol36h2qyyypitylzi2jiquq","bytes":685779,"ensName":"comp-protocol-f5d5.site.identitymd.eth","txHash":"0x2d97eb7911d7fc563ddea74257c0be1985805e1b1eca7f98a763a090c998c46e","blockNumber":26121163,"attempts":1,"failure":null,"pinnedAt":"2026-10-04T19:38:09.206Z","namedAt":"2026-10-04T19:44:15.010Z","supersededBy":null,"supersededAt":null,"createdAt":"2026-10-04T19:38:00.721Z","updatedAt":"2026-10-04T19:44:15.010Z"},"launch":{"requested":false,"kind":null,"id":null,"status":null,"chainId":null},"oracleRequestId":null,"delivery":{"repoUrl":"https://github.com/identity-md-launches/launch-702-workflow-frontend-stage-context","pullRequestUrl":"https://github.com/identity-md-launches/launch-702-workflow-frontend-stage-context/pull/1","commit":"c4fed376b355858e4c6cafae07793422a1a6bbc9","deliveredAt":"2026-10-04T19:38:35.833Z","media":null},"media":null,"nodes":[{"key":"site","role":"implement","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":[],"allowedPaths":["web/**","dist/**","docs/**","web/.gitignore"],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-04T19:38:00.721Z","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+bb1c0c94","verifiedTreeHash":"fffcd3afdb73fa65b9eb6560470621a7c0370fef","at":"2026-10-04T19:38:00.737Z","failedChecks":[]},"seat":{"tokenId":"1967","agentId":"52093"},"live":null}],"reviews":[{"status":"sent","chainId":1,"txHash":"0x1b9c824b962e2f59a114af681eb3e23c86d4dae034ea24aa5222f8e8dafff423","blockNumber":26122435,"sentAt":"2026-10-04T23:59:25.046Z","entries":[]},{"status":"sent","chainId":1,"txHash":"0x83dc614a293a8254a4ad79e2ef1e0d6838e10352b6a5c3054c0657a806e485f8","blockNumber":26121133,"sentAt":"2026-10-04T19:38:27.799Z","entries":[{"nodeKey":"site","agentId":"52093","value":1,"role":"verification:structural"}]}]}