Skip to content

render-component: stub src/generated.ts — the cyclo.site render gap is one module, not the SvelteKit stack #305

Description

@thedavidmeister

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

  • Add src/generated.ts to render-component's stub set, stubbing the nine symbols above as no-ops. A render never calls them.
  • Do NOT commit the generated artifact instead. A generated file checked in beside the submodule that produces it is a second source of truth that drifts silently.
  • Re-run the render on #427 and #408 to confirm both unblock from the one change.

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions