The gap
pr-review-report render-component cannot mount cyclo.site components, so UI PRs there carry screenshot pending (manual) markers instead of shots. It has deferred the check across four heads on #427 alone.
The stated cause is wrong
The waiver on #427 says cyclo.site's "SvelteKit/Tailwind runtime stack does not render in the standalone Vite+Svelte harness", citing repeated attempts on #394, #404 and #412–414.
Reading ReceiptModal.svelte's imports at d12a76a does not support that. It imports nothing SvelteKit-only — no $app/environment, no $app/paths, no $app/stores. What it has is $lib/* (a path alias), svelte/transition, svelte-wagmi, @wagmi/core, ethers, viem, two local components, three SVGs, and erc20PriceOracleReceiptVaultAbi from $lib/contracts/ — a checked-in 20KB file, not generated. Input.svelte and Button.svelte are clean.
The actual blocker: one generated module
src/generated.ts, absent from a bare checkout and produced only by wagmi generate over a forge build of the cyclo.sol submodule. It is reached transitively through two stores:
src/lib/balancesStore.ts:8 readErc20BalanceOf, readErc20TotalSupply,
simulateErc20PriceOracleReceiptVaultPreviewDeposit,
simulateQuoterQuoteExactInputSingle,
simulateQuoterQuoteExactOutputSingle
src/lib/transactionStore.ts:15 readErc20Allowance, writeErc20Approve,
writeErc20PriceOracleReceiptVaultDeposit,
writeErc20PriceOracleReceiptVaultRedeem
Nine wagmi wrapper functions, every one a contract call a render never makes.
This is the same blocker #408 hit, reached by a different path — there through src/lib/queries/cysFLRwFLRQuote.ts, here through the stores. #408's own attempt cleared the sibling ../generated-graphql (imported by types.ts:3) for real by running npm run graphql-codegen, so that half is already solved.
Ask
Consequence to state, not hide
With stubs the shot proves layout and component state, not live contract values. That is sufficient for #427, whose evidence is what CONNECT WALLET and WRONG NETWORK look like, and for #408, whose diff deletes markup. A future cyclo.site PR whose visual claim is about a number — a balance, a leaderboard row — needs real bindings, and that is the case for revisiting with a reason rather than a default.
Why the framing matters beyond this fix
"The whole stack cannot render" justified four deferred screenshots on a funds-path modal. "One generated module is missing" is a day's work with a known fix. The gap between those two readings is what a waiver's stated cause is for, and it went unchecked across four vetter passes.
The gap
pr-review-report render-componentcannot mount cyclo.site components, so UI PRs there carryscreenshot pending (manual)markers instead of shots. It has deferred the check across four heads on #427 alone.The stated cause is wrong
The waiver on #427 says cyclo.site's "SvelteKit/Tailwind runtime stack does not render in the standalone Vite+Svelte harness", citing repeated attempts on #394, #404 and #412–414.
Reading
ReceiptModal.svelte's imports atd12a76adoes not support that. It imports nothing SvelteKit-only — no$app/environment, no$app/paths, no$app/stores. What it has is$lib/*(a path alias),svelte/transition,svelte-wagmi,@wagmi/core,ethers,viem, two local components, three SVGs, anderc20PriceOracleReceiptVaultAbifrom$lib/contracts/— a checked-in 20KB file, not generated.Input.svelteandButton.svelteare clean.The actual blocker: one generated module
src/generated.ts, absent from a bare checkout and produced only bywagmi generateover aforge buildof thecyclo.solsubmodule. It is reached transitively through two stores:Nine wagmi wrapper functions, every one a contract call a render never makes.
This is the same blocker #408 hit, reached by a different path — there through
src/lib/queries/cysFLRwFLRQuote.ts, here through the stores. #408's own attempt cleared the sibling../generated-graphql(imported bytypes.ts:3) for real by runningnpm run graphql-codegen, so that half is already solved.Ask
src/generated.tstorender-component's stub set, stubbing the nine symbols above as no-ops. A render never calls them.Consequence to state, not hide
With stubs the shot proves layout and component state, not live contract values. That is sufficient for #427, whose evidence is what
CONNECT WALLETandWRONG NETWORKlook like, and for #408, whose diff deletes markup. A future cyclo.site PR whose visual claim is about a number — a balance, a leaderboard row — needs real bindings, and that is the case for revisiting with a reason rather than a default.Why the framing matters beyond this fix
"The whole stack cannot render" justified four deferred screenshots on a funds-path modal. "One generated module is missing" is a day's work with a known fix. The gap between those two readings is what a waiver's stated cause is for, and it went unchecked across four vetter passes.