Skip to content

fix(client): render work view immediately, load metadata lazily #138

fix(client): render work view immediately, load metadata lazily

fix(client): render work view immediately, load metadata lazily #138

Triggered via push March 8, 2026 10:32
Status Failure
Total duration 53s
Artifacts

client-tests.yml

on: push
Fit to window
Zoom out
Zoom in

Annotations

11 errors
lint-and-build
Process completed with exit code 1.
src/__tests__/views/HomeGarden.test.tsx > Home garden route > shows the loading state while placeholder garden data is still fetching: packages/client/src/views/Home/Garden/index.tsx#L58
Error: [vitest] No "useScrollToTop" export is defined on the "@green-goods/shared" mock. Did you forget to return it from "vi.mock"? If you need to partially mock a module, you can use "importOriginal" helper inside: vi.mock(import("@green-goods/shared"), async (importOriginal) => { const actual = await importOriginal() return { ...actual, // your mocked methods } }) ❯ Garden src/views/Home/Garden/index.tsx:58:3 ❯ Object.react_stack_bottom_frame ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:25904:20 ❯ renderWithHooks ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:7662:22 ❯ updateFunctionComponent ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:10166:19 ❯ beginWork ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:11778:18 ❯ runWithFiberInDEV ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:874:13 ❯ performUnitOfWork ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:17641:22 ❯ workLoopSync ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:17469:41
src/__tests__/views/Garden.test.tsx > Garden (Work) View > disables Start Gardening when no garden/action selected: packages/client/src/views/Garden/index.tsx#L114
Error: [vitest] No "useAudioRecording" export is defined on the "@green-goods/shared" mock. Did you forget to return it from "vi.mock"? If you need to partially mock a module, you can use "importOriginal" helper inside: vi.mock(import("@green-goods/shared"), async (importOriginal) => { const actual = await importOriginal() return { ...actual, // your mocked methods } }) ❯ Work src/views/Garden/index.tsx:114:7 ❯ Object.react_stack_bottom_frame ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:25904:20 ❯ renderWithHooks ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:7662:22 ❯ updateFunctionComponent ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:10166:19 ❯ beginWork ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:11778:18 ❯ runWithFiberInDEV ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:874:13 ❯ performUnitOfWork ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:17641:22 ❯ workLoopSync ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:17469:41
src/__tests__/views/Garden.test.tsx > Garden (Work) View > shows Start Gardening button on intro step: packages/client/src/views/Garden/index.tsx#L114
Error: [vitest] No "useAudioRecording" export is defined on the "@green-goods/shared" mock. Did you forget to return it from "vi.mock"? If you need to partially mock a module, you can use "importOriginal" helper inside: vi.mock(import("@green-goods/shared"), async (importOriginal) => { const actual = await importOriginal() return { ...actual, // your mocked methods } }) ❯ Work src/views/Garden/index.tsx:114:7 ❯ Object.react_stack_bottom_frame ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:25904:20 ❯ renderWithHooks ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:7662:22 ❯ updateFunctionComponent ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:10166:19 ❯ beginWork ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:11778:18 ❯ runWithFiberInDEV ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:874:13 ❯ performUnitOfWork ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:17641:22 ❯ workLoopSync ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:17469:41
src/__tests__/views/Garden.test.tsx > Garden (Work) View > renders intro step by default: packages/client/src/views/Garden/index.tsx#L114
Error: [vitest] No "useAudioRecording" export is defined on the "@green-goods/shared" mock. Did you forget to return it from "vi.mock"? If you need to partially mock a module, you can use "importOriginal" helper inside: vi.mock(import("@green-goods/shared"), async (importOriginal) => { const actual = await importOriginal() return { ...actual, // your mocked methods } }) ❯ Work src/views/Garden/index.tsx:114:7 ❯ Object.react_stack_bottom_frame ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:25904:20 ❯ renderWithHooks ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:7662:22 ❯ updateFunctionComponent ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:10166:19 ❯ beginWork ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:11778:18 ❯ runWithFiberInDEV ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:874:13 ❯ performUnitOfWork ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:17641:22 ❯ workLoopSync ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:17469:41
src/__tests__/views/Garden.test.tsx > Garden (Work) View > renders form progress indicator: packages/client/src/views/Garden/index.tsx#L114
Error: [vitest] No "useAudioRecording" export is defined on the "@green-goods/shared" mock. Did you forget to return it from "vi.mock"? If you need to partially mock a module, you can use "importOriginal" helper inside: vi.mock(import("@green-goods/shared"), async (importOriginal) => { const actual = await importOriginal() return { ...actual, // your mocked methods } }) ❯ Work src/views/Garden/index.tsx:114:7 ❯ Object.react_stack_bottom_frame ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:25904:20 ❯ renderWithHooks ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:7662:22 ❯ updateFunctionComponent ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:10166:19 ❯ beginWork ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:11778:18 ❯ runWithFiberInDEV ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:874:13 ❯ performUnitOfWork ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:17641:22 ❯ workLoopSync ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:17469:41
src/__tests__/views/Garden.test.tsx > Garden (Work) View > renders without crashing: packages/client/src/views/Garden/index.tsx#L114
Error: [vitest] No "useAudioRecording" export is defined on the "@green-goods/shared" mock. Did you forget to return it from "vi.mock"? If you need to partially mock a module, you can use "importOriginal" helper inside: vi.mock(import("@green-goods/shared"), async (importOriginal) => { const actual = await importOriginal() return { ...actual, // your mocked methods } }) ❯ Work src/views/Garden/index.tsx:114:7 ❯ Object.react_stack_bottom_frame ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:25904:20 ❯ renderWithHooks ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:7662:22 ❯ updateFunctionComponent ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:10166:19 ❯ beginWork ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:11778:18 ❯ runWithFiberInDEV ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:874:13 ❯ performUnitOfWork ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:17641:22 ❯ workLoopSync ../../node_modules/.bun/react-dom@19.2.4+b1ab299f0a400331/node_modules/react-dom/cjs/react-dom-client.development.js:17469:41
src/__tests__/views/ENSSection.test.tsx > Profile ENSSection > does not carry the previous account slug into the next account: packages/client/src/__tests__/views/ENSSection.test.tsx#L140
AssertionError: expected "vi.fn()" to be called with arguments: [ 'forest' ] Received: 1st vi.fn() call: [ - "forest", + undefined, ] Number of calls: 1 Ignored nodes: comments, script, style <html> <head /> <body> <div> <h5 class="text-label-md text-text-strong-950" > ENS Name </h5> <div> <div class="flex flex-col gap-3 w-full" > <div class="flex items-start gap-3" > <div> <div class="flex items-center justify-center text-center mx-auto text-primary" > <svg class="remixicon w-4" fill="currentColor" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg" > <path d="M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM9.71002 19.6674C8.74743 17.6259 8.15732 15.3742 8.02731 13H4.06189C4.458 16.1765 6.71639 18.7747 9.71002 19.6674ZM10.0307 13C10.1811 15.4388 10.8778 17.7297 12 19.752C13.1222 17.7297 13.8189 15.4388 13.9693 13H10.0307ZM19.9381 13H15.9727C15.8427 15.3742 15.2526 17.6259 14.29 19.6674C17.2836 18.7747 19.542 16.1765 19.9381 13ZM4.06189 11H8.02731C8.15732 8.62577 8.74743 6.37407 9.71002 4.33256C6.71639 5.22533 4.458 7.8235 4.06189 11ZM10.0307 11H13.9693C13.8189 8.56122 13.1222 6.27025 12 4.24799C10.8778 6.27025 10.1811 8.56122 10.0307 11ZM14.29 4.33256C15.2526 6.37407 15.8427 8.62577 15.9727 11H19.9381C19.542 7.8235 17.2836 5.22533 14.29 4.33256Z" /> </svg> </div> </div> <div class="flex flex-col gap-1 grow" > <div class="text-sm font-medium" > Claim your greengoods.eth name </div> <div class="text-xs text-text-sub-600" > Get a personal subdomain as a protocol member. Registration takes ~15-20 minutes via cross-chain messaging. </div> </div> </div> <div class="flex flex-col gap-2" > <div class="relative" > <input aria-label="Choose your personal subdomain on greengoods.eth" autocapitalize="none" autocomplete="off" class="w-full rounded-xl border border-stroke-soft-200 bg-bg-white-0 px-3 py-2.5 pr-10 font-mono text-sm text-text-strong-950 shadow-sm focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/20" inputmode="text" placeholder="your-name" spellcheck="false" /> </div> <span class="text-xs text-text-sub-600" > Choose your personal subdomain on greengoods.eth </span> <button> Claim name </button> </div> </div> </div> </div> </body> </html> ❯ src/__tests__/views/ENSSection.test.tsx:140:62 ❯ runWithExpensiveErrorDiagnosticsDisabled ../../node_modules/.bun/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/dist/config.js:47:12 ❯ checkCallback ../../node_modules/.bun/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/dist/wait-for.js:124:77 ❯ Timeout.checkRealTimersCallback ../../node_modules/.bun/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/dist/wait-for.js:118:16
src/__tests__/views/ENSSection.test.tsx > Profile ENSSection > prefers contract owner state over stale session-local storage: packages/client/src/__tests__/views/ENSSection.test.tsx#L116
AssertionError: expected "vi.fn()" to be called with arguments: [ 'forest' ] Received: 1st vi.fn() call: [ - "forest", + undefined, ] Number of calls: 1 Ignored nodes: comments, script, style <html> <head /> <body> <div> <h5 class="text-label-md text-text-strong-950" > ENS Name </h5> <div> <div class="flex flex-col gap-3 w-full" > <div class="flex items-start gap-3" > <div> <div class="flex items-center justify-center text-center mx-auto text-primary" > <svg class="remixicon w-4" fill="currentColor" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg" > <path d="M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM9.71002 19.6674C8.74743 17.6259 8.15732 15.3742 8.02731 13H4.06189C4.458 16.1765 6.71639 18.7747 9.71002 19.6674ZM10.0307 13C10.1811 15.4388 10.8778 17.7297 12 19.752C13.1222 17.7297 13.8189 15.4388 13.9693 13H10.0307ZM19.9381 13H15.9727C15.8427 15.3742 15.2526 17.6259 14.29 19.6674C17.2836 18.7747 19.542 16.1765 19.9381 13ZM4.06189 11H8.02731C8.15732 8.62577 8.74743 6.37407 9.71002 4.33256C6.71639 5.22533 4.458 7.8235 4.06189 11ZM10.0307 11H13.9693C13.8189 8.56122 13.1222 6.27025 12 4.24799C10.8778 6.27025 10.1811 8.56122 10.0307 11ZM14.29 4.33256C15.2526 6.37407 15.8427 8.62577 15.9727 11H19.9381C19.542 7.8235 17.2836 5.22533 14.29 4.33256Z" /> </svg> </div> </div> <div class="flex flex-col gap-1 grow" > <div class="text-sm font-medium" > Claim your greengoods.eth name </div> <div class="text-xs text-text-sub-600" > Get a personal subdomain as a protocol member. Registration takes ~15-20 minutes via cross-chain messaging. </div> </div> </div> <div class="flex flex-col gap-2" > <div class="relative" > <input aria-label="Choose your personal subdomain on greengoods.eth" autocapitalize="none" autocomplete="off" class="w-full rounded-xl border border-stroke-soft-200 bg-bg-white-0 px-3 py-2.5 pr-10 font-mono text-sm text-text-strong-950 shadow-sm focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/20" inputmode="text" placeholder="your-name" spellcheck="false" /> </div> <span class="text-xs text-text-sub-600" > Choose your personal subdomain on greengoods.eth </span> <button> Claim name </button> </div> </div> </div> </div> </body> </html> ❯ src/__tests__/views/ENSSection.test.tsx:116:62 ❯ runWithExpensiveErrorDiagnosticsDisabled ../../node_modules/.bun/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/dist/config.js:47:12 ❯ checkCallback ../../node_modules/.bun/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/dist/wait-for.js:124:77 ❯ Timeout.checkRealTimersCallback ../../node_modules/.bun/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/dist/wait-for.js:118:16
src/__tests__/views/ENSSection.test.tsx > Profile ENSSection > restores pending registration state from per-account storage: packages/client/src/__tests__/views/ENSSection.test.tsx#L101
AssertionError: expected "vi.fn()" to be called with arguments: [ 'river' ] Received: 1st vi.fn() call: [ - "river", + undefined, ] Number of calls: 1 Ignored nodes: comments, script, style <html> <head /> <body> <div> <h5 class="text-label-md text-text-strong-950" > ENS Name </h5> <div> <div class="flex flex-col gap-3 w-full" > <div class="flex items-start gap-3" > <div> <div class="flex items-center justify-center text-center mx-auto text-primary" > <svg class="remixicon w-4" fill="currentColor" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg" > <path d="M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM9.71002 19.6674C8.74743 17.6259 8.15732 15.3742 8.02731 13H4.06189C4.458 16.1765 6.71639 18.7747 9.71002 19.6674ZM10.0307 13C10.1811 15.4388 10.8778 17.7297 12 19.752C13.1222 17.7297 13.8189 15.4388 13.9693 13H10.0307ZM19.9381 13H15.9727C15.8427 15.3742 15.2526 17.6259 14.29 19.6674C17.2836 18.7747 19.542 16.1765 19.9381 13ZM4.06189 11H8.02731C8.15732 8.62577 8.74743 6.37407 9.71002 4.33256C6.71639 5.22533 4.458 7.8235 4.06189 11ZM10.0307 11H13.9693C13.8189 8.56122 13.1222 6.27025 12 4.24799C10.8778 6.27025 10.1811 8.56122 10.0307 11ZM14.29 4.33256C15.2526 6.37407 15.8427 8.62577 15.9727 11H19.9381C19.542 7.8235 17.2836 5.22533 14.29 4.33256Z" /> </svg> </div> </div> <div class="flex flex-col gap-1 grow" > <div class="text-sm font-medium" > Claim your greengoods.eth name </div> <div class="text-xs text-text-sub-600" > Get a personal subdomain as a protocol member. Registration takes ~15-20 minutes via cross-chain messaging. </div> </div> </div> <div class="flex flex-col gap-2" > <div class="relative" > <input aria-label="Choose your personal subdomain on greengoods.eth" autocapitalize="none" autocomplete="off" class="w-full rounded-xl border border-stroke-soft-200 bg-bg-white-0 px-3 py-2.5 pr-10 font-mono text-sm text-text-strong-950 shadow-sm focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/20" inputmode="text" placeholder="your-name" spellcheck="false" /> </div> <span class="text-xs text-text-sub-600" > Choose your personal subdomain on greengoods.eth </span> <button> Claim name </button> </div> </div> </div> </div> </body> </html> ❯ src/__tests__/views/ENSSection.test.tsx:101:62 ❯ runWithExpensiveErrorDiagnosticsDisabled ../../node_modules/.bun/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/dist/config.js:47:12 ❯ checkCallback ../../node_modules/.bun/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/dist/wait-for.js:124:77 ❯ Timeout.checkRealTimersCallback ../../node_modules/.bun/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/dist/wait-for.js:118:16
src/__tests__/components/TopNav.test.tsx > components/Navigation/TopNav > Notification visibility based on operator status (BUG-012) > shows notification bell when user is an operator: packages/client/src/__tests__/components/TopNav.test.tsx#L116
Error: expect(received).toBeInTheDocument() received value must be an HTMLElement or an SVGElement. Received has type: Null Received has value: null ❯ src/__tests__/components/TopNav.test.tsx:116:34