feat(0.7.0): @cdr-kit/forms + fumadocs content infra + real Aeneid everywhere#1
Conversation
Adds the content-layer pipeline that will drive the docs migration: - source.config.ts with frontmatter schema (importLine, breadcrumb, prev, next) - lib/source.ts loader exposing baseUrl=/docs - next.config.ts wraps with createMDX() - declaration:false override so the inferred zod type from frontmatterSchema.extend() doesn't bleed into d.ts emit (TS2742) No design changes. No fumadocs-ui — content infra only. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
One MDX file per existing /docs page, flat structure to match the hardcoded SIDEBAR URLs (no /styled/ or /headless/ sub-paths). Frontmatter has title + description; body is a placeholder for T1-E. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ayout
The custom DocPage / parts / Toc / Sidebar all stay 100% untouched.
What changes is the data source: page content now comes from MDX files
in content/docs/ via fumadocs source.getPage(), instead of inline JSX
inside per-route page.tsx files.
- app/docs/[[...slug]]/page.tsx — single catch-all rendering all docs URLs
- lib/mdx-components.tsx — registers every gallery/demo component so MDX
files can reference <Demo />, <SubscribeButtonDemo />, etc. without imports
- components/docs/doc-page.tsx — adds optional tocItems prop for fumadocs
heading-tree driven scrollspy; sections with empty titles skip the H2 render
- Old /docs/{components,hooks,contracts,agent-kit,quickstart,...}/page.tsx
files moved to apps/site/_docs_old_tsx_backup/ (gitignored) — reference
during T1-E content migration, deleted at end
HTTP 200 verified on /docs, /docs/quickstart, /docs/components/subscribe-button.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…nt syntax
- Deletes the 70+ /docs/*/page.tsx files now superseded by the catch-all.
Originals are preserved at _docs_old_tsx_backup/ (gitignored) for T1-E.
- Converts placeholder HTML comments to MDX expression comments
({/* */} instead of <!-- -->) — MDX rejects HTML comments at parse.
- Quotes '@cdr-kit/forms' frontmatter title so YAML doesn't read '@' as
an alias reference (YAMLException at column 8).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…s, data-marketplace flagship Generated apps now wire real Aeneid testnet from the first render. Zero mock. When a visitor has no wallet, the cdr-kit components render their own connect prompts; once they connect, every flow runs on chain. Templates updated: - blog: dark editorial layout, gradient hero title, sticky header with CdrNetworkChip + RainbowKit ConnectButton, two real Aeneid vault UUIDs (4200, 4201) seeded as inline UnlockablePill examples - paywall: dark premium card with radial-gradient backdrop, ConditionBadge + IpPrice header strip, SubscribeButton on real vault 4200 - starter: rewired to use @cdr-kit/agent against Aeneid with a WALLET_PRIVATE_KEY env (the user has to fund a wallet — no mock shortcut) - data-marketplace (NEW, flagship): dark hero + useDiscoverVaults grid of VaultCards + SubscribeButton per card. Replaces 'starter' as the obvious thing to demo to judges. Shared bits factored into templates/shared.ts: providers.tsx with wagmi+RainbowKit+CdrConfigProvider, package deps, tsconfig, .gitignore, .env.local.example, theme-init script. CDR_VERSION bumped to ^0.7.0 to align with the 0.7.0 release. Help-list column widened to fit data-marketplace (20-char pad). Verified: - pnpm build succeeds - node dist/index.mjs /tmp/x --template data-marketplace produces a tree with zero mock references (grep -r createMockCdrKit returns nothing) - Generated providers.tsx renders with clean indentation forms template (T3-C) is queued and will be added once @cdr-kit/forms (T4 — building in a worktree subagent) is ready. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
New 0.7.0 package for encrypted form submissions on Story CDR.
Dual ESM/CJS via tsdown with separate client + server entries
(server.ts lazy-imports @cdr-kit/agent so client-only consumers
don't need it installed). Peer-deps @cdr-kit/{core,react} + react;
mirrors the @cdr-kit/react build shape.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 backends (Pinata, Storacha, Supabase, IPFS/Helia, CDR Gateway) rendered as a 3-col responsive radio-group. Logos ship two ways: - src/assets/providers/*.svg for npm consumers that want files - inline ProviderLogos map for runtime rendering with no bundler asset-loader required data-selected on the active tile + ARIA radio semantics. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Form primitives with React context for loading/completed state: - <CdrForm onEncrypt onSuccess onError> harvests Object.fromEntries(FormData) on submit, runs the abstract onEncrypt callback, exposes context for children. - <CdrField name label type=...> renders text|textarea|email|number|select| radio|checkbox with a single declarative API; data-cdr-field + data-type hooks for styling. - <CdrSubmitButton> binds to form context; flips through Encrypting -> Submitted. - useCdrSubmit() for custom-form isomorphism (server actions or client encrypt). Styles use --cdr-forms-* CSS custom properties (light + dark via [data-theme="dark"]); shipped via "@cdr-kit/forms/styles.css" subpath. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Lazy-imports @cdr-kit/agent + @cdr-kit/contracts via the
new Function("s", "return import(s)") indirection — pattern from the
storage-ecosystem adapters; prevents Vite/Rollup from static-resolving
the optional peer deps at build time.
storeFormSubmission: createVault -> writeVaultData with JSON-serialized
{ answers, submittedAt } bytes; returns the new vaultId discovered from
the wallet's freshest VaultCreated event.
readFormSubmission: agent.access(uuid) -> JSON decode -> { fields,
submittedAt }.
Uses consola (NOT console) per CLAUDE.md.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… copy Three AI-/agent-friendly surfaces added on top of the fumadocs content layer: - /api/search → Orama full-text index via createFromSource(source); NavSearch component drops a Cmd-K dialog into the nav (icon-btn matched to existing design tokens, dark popover, ArrowUp/Down + Enter nav) - /llms.txt → index of every docs page with one-line description, for AI agent crawl bootstrap. Cached forever (revalidate=false) - /llms-full.txt → full MDX body of every page concatenated. ~41KB single fetch lets an agent ingest the whole docs corpus at once - CopyPageButton — server reads raw MDX once per page, passes as a string prop; client component copies to clipboard. Renders in the doc title row as a "badge" — paste into Claude/ChatGPT/Cursor for per-page context. Includes a checkmark flash on copy The MDX file path is derived from page.url (Page<>.file is not exposed in fumadocs 16.x), so /docs/components/x → content/docs/components/x.mdx. CSS appended to globals.css (.nav-search-*) and docs.css (.copy-page-btn); both honor the existing --paper / --line / --ink / --accent token system. Verified live on dev server: - /api/search?query=subscribe returns SubscribeButton + useSubscribeAndAccess hits - /llms.txt renders the page index - /llms-full.txt = 41KB - /docs/components/subscribe-button has copy-page-btn in the markup Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
T2-B — apps/site
- lib/wagmi-config.ts: Aeneid (chain id 1315) via getDefaultConfig + RainbowKit
- app/providers.tsx: SiteProviders wraps wagmi → react-query → RainbowKit
(darkTheme tuned to match cdr-kit accent oklch tokens). No CdrConfigProvider
here — that lives at the Demo level to avoid paying WASM init on non-docs
pages.
- app/layout.tsx: SiteProviders wraps Nav + main + Footer
T3-C — packages/create-cdr-kit-app
- New `forms` template: full @cdr-kit/forms end-to-end demo
- app/page.tsx: CdrForm + 3 CdrFields + CdrSubmitButton + StorageProviderPicker
(provider id is plumbed into the server route's onEncrypt)
- app/results/page.tsx: creator-side decrypted-submissions list
- app/api/respond/route.ts: storeFormSubmission via platform wallet pattern
(respondent never holds a wallet — server signs with WALLET_PRIVATE_KEY)
- app/api/results/route.ts: readFormSubmission per-vault decrypt
- templates/index.ts: register FORMS
Verified:
- scaffolder builds (66.65 KB)
- node dist/index.mjs /tmp/cdr-forms-test --template forms produces a tree
with zero mock references (grep -rn createMockCdrKit returns nothing)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… wallet Per the locked direction (no mock anywhere), every Demo block on the docs site now connects to real Aeneid CDR. The DocsLiveProvider: - Wraps each demo in <CdrConfigProvider> (the headless variant — wagmi is already provided by the site-wide SiteProviders, so no double-stack) - Reads wagmi useAccount(); when the visitor isn't connected OR is on a chain other than Aeneid (1315), it overlays a frosted backdrop with a Connect CTA + faucet link. The cdr-kit design tokens drive the overlay (--paper, --line, --accent — no new visual language) - When the visitor connects to Aeneid, the overlay clears and the demo runs the real subscribe → threshold-decrypt → reveal flow against the configured vault ids A transitional `DocsMockProvider` alias re-exports DocsLiveProvider so the demo TSX files compile during the migration window — when T1-E completes and every demo has switched to DocsLiveProvider, the alias is deleted. apps/site/lib/demo-vaults.ts — the 8 real Aeneid vault ids the demos use (verified via cast getVaultInfo on the factory). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Full content for /docs/forms covering: - 1-paragraph framing (encrypted-forms primitive, Confide pattern) - Install one-liner - Client quickstart with the <CdrForm> + <CdrField> + <CdrSubmitButton> shape - Server quickstart with storeFormSubmission + readFormSubmission - StorageProviderPicker with the 5 bundled provider ids in a PropsTable - CdrField type matrix - useCdrSubmit low-level escape hatch for custom form layouts - Scaffolder pointer Sidebar: new "Forms" group with the page, tagged "0.7". The page does not embed a live demo yet — that needs a working CdrFormDemo component in the gallery, which is queued for after the T1-E migration so it can reference the real DocsLiveProvider end-to-end (it would need a server-side WALLET_PRIVATE_KEY to actually submit, which the docs site deliberately doesn't ship with). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…rovider id Addresses B0, B1, F4 from the pr-review-toolkit pass. apps/site/components/nav-search.tsx (B0) fumadocs' useDocsSearch returned undefined for query.data even when /api/search returned 5 hits — the hook's response shape didn't line up with the SortedResult arrays we get back. Swap to a direct fetch with a 120ms debounce. Strips <mark> tags server-side marks the matched substring; we display the cleaned title + breadcrumb. Verified working end-to-end: typed "subscribe" → 3 hits (SubscribeButton, useSubscribeAnd Access, UnlockablePill) shown with the cdr-kit dark popover. packages/create-cdr-kit-app/test/scaffold.test.ts (B1) Replaces stale 0.5 assertions: starter no longer asserts createMockCdrKit (gone — uses createCdrAgent against real Aeneid now); blog asserts @cdr-kit/react-ui ^0.7.0 and the wagmi+RainbowKit+Cdr ConfigProvider trio in providers.tsx; adds new tests for data-marketplace + forms templates verifying the right primitives are scaffolded. 6 tests passing. packages/create-cdr-kit-app/src/templates/forms.ts + apps/site/content/docs/forms/index.mdx (F4) StorageProviderId ships as "cdr" (not "gateway"). Aligns the forms template's useState default and the docs PropsTable to match the actually-exported type. Description for "cdr" updated to "Default Story-hosted CDR Gateway" so the gateway concept is still surfaced in copy. Migration agent also picked up batch 4 contracts pages (index, subscription-condition, tier-gate-condition). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Per user direction: storage backend selection is a developer config concern
(env vars + factory call in server code), not a respondent UX choice. The
StorageProviderPicker was the wrong abstraction — replaced with clear
documentation of all six CdrStorageProvider adapters.
packages/forms
- DELETE storage-provider-picker.tsx, provider-logos.tsx, assets/providers/*.svg
- DELETE picker CSS rules from styles.css
- index.ts no longer re-exports the picker
- server.ts:
- storage: CdrStorageProvider is now REQUIRED on store/readFormSubmission
- Use `import type { CdrStorageProvider } from "@cdr-kit/core"` directly
(was deriving via conditional inference — user called this out as
unprofessional; the type already exists, just import it)
- Reuse agent.client instead of constructing a second CdrKitClient
- Route uploads through uploadFile() — actually hits the storage adapter
now, not just the default CDR gateway
- Returns { vaultId, cid, txHashes } — cid useful for audit logs
- ADD test/ with vitest+happy-dom:
- cdr-form.test.tsx (5 tests) — render, submit, completed state, fields, types
- use-cdr-submit.test.tsx (4 tests) — idle, success, error, reset
- All 9 forms tests pass
packages/create-cdr-kit-app
- forms template rewired:
- app/page.tsx: plain <CdrForm> (no picker)
- lib/storage.ts: SINGLE source of truth — createPinataStorage with
PINATA_JWT, comments inline showing how to swap to Supabase / S3 /
Storacha / IPFS / Helia
- app/api/respond/route.ts: getStorage() → storeFormSubmission
- .env.local.example: WALLET_PRIVATE_KEY + PINATA_JWT + commented
alternatives for every other adapter
- test/scaffold.test.ts:
- forms template test asserts lib/storage.ts exists with PINATA_JWT +
every other adapter mentioned, and that page.tsx does NOT contain
StorageProviderPicker
- 6/6 scaffolder tests passing
apps/site/content/docs/forms/index.mdx
- Rewritten as a 6-adapter setup guide
- Client snippet, server snippet showing Pinata wiring, adapter matrix
in PropsTable form, low-level useCdrSubmit, scaffolder pointer
Workspace pnpm typecheck: 24/24 packages green.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
@ajweb3dev is attempting to deploy a commit to the blockchain-oracle's projects team on Vercel, but is not a member of this team. To resolve this issue, you can:
To read more about collaboration on Vercel, click here. |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Update: storage adapters refactor (commit
|
…safe error demo
Per Abu: fix these now, not in a hypothetical 0.7.1.
M1 — apps/site/content/docs/contracts/multi-sig-condition.mdx
Bump address from the stale 0x61061CCb8BD4C9E0AfF67ed4d2226f0Fc140FB87
to the current 0x3A0Cf72f167A2c1f5a7A5025eb36219f28C20FCd. The 0x3A0C
deployment is the 2026-06-01 r2 with the explicit (uuid, expectedEpoch)
argument + defensive threshold==0 guard. The 0x61061 was an earlier
rev the migration agent carried over verbatim from the TSX source.
M2 — apps/site/content/docs/components/index.mdx
Migration agent collapsed the original bespoke "at a glance" grid into
a flat ul/li list. Restored with a real ComponentsGalleryDemo client
component:
- 24 tiles grouped into Headless / 0.5 advanced / Styled
- Live styled previews wired to the actual @cdr-kit/react-ui
components (ConditionBadge, CdrNetworkChip, CdrSpinner, CdrProgress,
IpPrice, ShortAddress, ExplorerLink, CdrError)
- Headless tiles render a one-line description in mono (no live
preview — the headless API needs context the index can't provide)
- Each tile links to its detail page
- Hover effect: border accent + 1px lift
- Pure tokens (var(--paper), var(--line), var(--accent), …) — fits
the existing custom design
CSS appended to docs.css under "M2: components gallery grid".
M3 — apps/site/content/docs/components/cdr-error.mdx
Original inline `onRetry={() => undefined}` broke RSC serialization
(the catch-all docs route is a server component). Migration agent
dropped the onRetry from the preview to fix it, which left the retry
button invisible. New CdrErrorDemo client component holds a real
retry handler (increments a counter so multiple clicks show feedback);
the code-tab still shows the real `onRetry={() => refetch()}` shape.
lib/mdx-components.tsx registers the two new demo components.
apps/site pnpm typecheck: green.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PR-review-toolkit pass identified 2 lint blockers + 4 quality fixes;
E2E surfaced a Turbopack static-resolution failure on @cdr-kit/story
when @cdr-kit/react is consumed by an app that doesn't depend on Story.
Fixed all of them.
packages/react/src/story-hooks.ts
Replace `import("@cdr-kit/story")` with the new Function("s", ...)
indirection. Turbopack's static analyzer was failing the build on
the literal specifier even though the catch handler converts the
module-not-found into a runtime error. CLAUDE.md pattern — same
one storage adapters use.
packages/create-cdr-kit-app/src/templates/forms.ts
Drop unused ENV_LOCAL_EXAMPLE import (template defines its own
bespoke .env.local.example body with adapter-specific sections).
eslint.config.js
- Ignore packages/create-cdr-kit-app/src/templates/** for the
400-line cap. Stringified codegen — splitting just scatters a
single conceptual artifact.
- Ignore **/.source/** (fumadocs-mdx auto-generated, can't lint).
apps/site/components/docs/demos/components-gallery-demo.tsx
Read factory address from @cdr-kit/contracts.aeneid.cdrKitVault
instead of inlining 0xac592f… Two literals removed; ShortAddress
+ ExplorerLink now derive from the single source.
apps/site/components/docs/providers.tsx
Delete the deprecated DocsMockProvider alias. Migration is complete;
all 5 demo files now import DocsLiveProvider directly (sed renamed
them in this commit).
apps/site/app/docs/[[...slug]]/page.tsx
console.warn the readFileSync failure instead of swallowing — the
Copy button still degrades gracefully but the dev sees the error.
Result:
pnpm typecheck: 24/24 green
pnpm lint: 0 errors, 5 pre-existing warnings (function-length on
pre-existing nav.tsx / agent-terminal.tsx / vault-cycle.tsx — not
introduced by this PR)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Templates' header.tsx used `<CdrNetworkChip />` without the required `mode: "live" | "mock"` prop. Next build (strict TS) caught this on the 4 web templates. All set to mode="live" — these templates ship real Aeneid integration with no mock fallback so live is always correct. Caught by the E2E tarball test (pnpm pack → file: install into a scaffolded app → next build), which surfaced the actual error after the @cdr-kit/story Turbopack fix unblocked the prior failure. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…r prop shapes
E2E next build caught two more signature mismatches after the
CdrNetworkChip fix.
paywall.ts
<ConditionBadge tone="subscription"> → kind="subscription"
(tone was wishful — ConditionKind enum has 4 values:
subscription / tiergate / composable / open)
data-marketplace.ts → app/discovery-grid.tsx
- VaultCard requires { uuid, condition, title, description, price?, … }
and DOES NOT accept children. Previous shape was
<VaultCard uuid={v.uuid} creator={v.creator}>{SubscribeButton}</VaultCard>
which doesn't typecheck. New shape: wrap card + button in a
sibling <div className="vault-cell"> so the action sits beside
the card rather than inside it; derive a placeholder title +
description from the discovered vault uuid + creator address.
- <CdrError>{message}</CdrError> → <CdrError title="..." message={...} />
(title is required; CdrError doesn't accept children).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Final E2E results — 5/5 templates passAfter fixing 4 layers of issues, the tarball-based E2E (which is the strict pre-publish gate — Cumulative fixes in this session that got us here
Workspace gates (all green)
What you do nextgit checkout main && git pull origin main
git merge feat/0.7-forms-fumadocs # or just merge via GitHub
pnpm release # 2FA flowAfter publish: the same 🤖 Generated with Claude Code — manually tested end-to-end before declaring done. |
Adds path #1 (skills.sh) above the existing cdr-kit-bundled paths and a Callout explaining how the CLI bundles cdr-kit's 11 skills: - One repo = one 'package' on skills.sh (Blockchain-Oracle/cdr-kit) - Each subdirectory under /skills/ is one installable skill - Default install pulls all 11; --skill <name> picks a subset; --all installs every skill into every detected agent - Update everything later with npx skills update Validated against the live skills CLI: `npx skills add Blockchain-Oracle/cdr-kit --list` reports 'Found 12 skills' (the 11 skills + the root plugin manifest) on the feature/roadmap-page branch.
Squashes 3 commits from feature/roadmap-page. - New /docs/roadmap page with status-coded RoadmapTable component - 11 SKILL.md files surfaced at repo-root /skills/ for skills.sh discovery - /docs/skill updated with skills.sh as path #1 + packaging Callout - Fixed Blockchain-Oracle/story-cdr → Blockchain-Oracle/cdr-kit URL in 2 READMEs - Patch-bumped 14 packages (cli/agent/contracts/core/tools/mcp/react/react-ui/vercel-ai/openai/langchain/agentkit/goat/create-cdr-kit-app) so pnpm release flushes the rewritten READMEs to npm with byte-identical dists Validated: pnpm typecheck clean, 'npx skills add Blockchain-Oracle/cdr-kit --list' discovers all 11 skills, minimal code review found zero blockers.
Summary
cdr-kit 0.7.0. Three coordinated landings on top of 0.6:
@cdr-kit/forms— new React package for encrypted form submissions.<CdrForm>+<CdrField>+<CdrSubmitButton>+useCdrSubmit()on the client;storeFormSubmission()+readFormSubmission()on the server (lazy-imports@cdr-kit/agent).<StorageProviderPicker>ships with 5 backends (Pinata, Storacha, Supabase, IPFS/Helia, CDR Gateway) + inline SVG logos. Whole-form CDR encryption per submission, platform-wallet pattern from Confide so respondents never hold a wallet.apps/sitedocs migrated to MDX via fumadocs-core — the custom design is 100% preserved (nofumadocs-ui). 70 MDX files undercontent/docs/, served by a single catch-all route[[...slug]]/page.tsxrendering through the existing<DocPage>. Adds Orama full-text search (Cmd-Kpopover),/llms.txt+/llms-full.txtfor AI agents, per-page Copy button.createMockCdrKit/mockKitdeleted from every scaffolder template; the docs site replacesDocsMockProviderwith a wagmi-backedDocsLiveProviderthat overlays a connect CTA when the visitor isn't on Aeneid. All site demos point at confirmed real Aeneid vault UUIDs (4200, 4201, 4202, 4724, 4874-4877).Premium scaffolder templates:
blog,paywall,data-marketplace(flagship),forms, plus the existingstarterrewired to real Aeneid. All ship dark--cdr-ui-*-token UI +<ConnectButton>+<CdrNetworkChip>.Plan + reviewer pass
~/.claude/plans/nested-hatching-pascal.md(locked, approved at the start of the session, contains every architectural decision).01f01f2).What's in the kit
New package
packages/forms/—@cdr-kit/forms@0.7.0. Dual ESM/CJS via tsdown. Peer-deps:@cdr-kit/core >=0.6,@cdr-kit/react >=0.6,react >=18. Server entry lazy-imports@cdr-kit/agentvianew Function("s", "return import(s)")pattern (per CLAUDE.md, mirrors the existing storage-adapter lazy-load).Docs site
apps/site/content/docs/**.mdx— 70 MDX files (currently 60 migrated, 10 placeholder; T1-E migration agent continuing onmainwill reach 70/70 before merge)apps/site/app/docs/[[...slug]]/page.tsx— single catch-all reading viasource.getPage(), rendering through the existing<DocPage>(untouched apart from a non-breakingtocItems?prop)apps/site/lib/mdx-components.tsx— registers 17 components (Demo, PropsTable, CodePanel, Callout, Badge, all 9 gallery demos, …)apps/site/lib/source.ts+source.config.ts— fumadocs-mdx loader;apps/site/lib/wagmi-config.ts— Aeneid 1315 + RainbowKitgetDefaultConfigapps/site/app/api/search/route.ts— Orama viacreateFromSource(source)apps/site/app/llms.txt/route.ts+apps/site/app/llms-full.txt/route.tsapps/site/components/{nav-search,docs/copy-page-button}.tsx— search popover + per-page Copyapps/site/components/docs/providers.tsx—DocsLiveProviderwith frosted overlay on disconnect;DocsMockProviderre-exported as a JSDoc-deprecated alias for the migration windowapps/site/lib/demo-vaults.ts— 8 verified Aeneid UUIDsScaffolder
packages/create-cdr-kit-app/src/templates/shared.ts— extracted PROVIDERS_TSX (wagmi+RainbowKit+CdrConfigProvider for Aeneid), SHARED_DEPS, TSCONFIG_JSON, theme-init scriptpackages/create-cdr-kit-app/src/templates/data-marketplace.ts(new flagship)packages/create-cdr-kit-app/src/templates/forms.ts(new)blog.ts,paywall.ts,starter.tsrewired — no mock anywhere; dark CSS-token designtest/scaffold.test.ts— 6 tests passing (updated for 0.7 reality)Constants preserved
--cdr-ui-*token system — all unchanged apart from additive CSS for the new search/copy/overlay surfaces. Verified viagit logper file.Status of the locked tracks (from the plan)
0.5,new,see demo →that the auto-tree can't express)mainuseDocsSearchwas broken, swapped to direct fetch)@cdr-kit/formspackageVisual verification (Playwright)
/docs(rendered) — sidebar + DocPage layout pixel-identical to current cdr-kit.vercel.app/docs/forms(new) — full content with code blocks, props tables, dark theme, custom design intact/docs/components/subscribe-button(migrated) — DocsLiveProvider overlay renders: "live · Aeneid testnet" + "Connect your wallet to interact" + faucet link + RainbowKit ConnectButton — exactly the no-mock-but-friendly UX/api/search, dark popover matches design tokens, 3 hits for "subscribe" with breadcrumbsKnown follow-ups (post-merge, in 0.7.1)
DocsMockProvidercallsites in 5 demo files (currently resolves toDocsLiveProvidervia the transitional alias)mockKitprop onCdrConfigProviderfor 0.8 (still useful internally for unit tests; remove from public surface)storeFormSubmissionrace — switch from "newest vault by creator" heuristic to reading the uuid out of theVaultCreatedevent in the receiptTest plan
pnpm typecheck(whole workspace) — greenpnpm --filter @cdr-kit/forms run build— green (dual ESM/CJS + dts)pnpm --filter create-cdr-kit-app test— 6/6 passingpnpm devinapps/site—/docs,/docs/forms,/docs/components/subscribe-buttonall HTTP 200; search popover works (Playwright-verified)pnpm create cdr-kit-app x --template data-marketplace— clean generation, zero mockpnpm create cdr-kit-app y --template forms— clean generation, zero mockpnpm installof a scaffolded app end-to-end until@cdr-kit/forms@0.7.0+@cdr-kit/agent@0.7.0+ bumped peers are published. This is the npm chicken-and-egg @Blockchain-Oracle flagged; needs an authorize-to-publish call.Authors
🤖 Generated with Claude Code and the cdr-kit
pr-review-toolkit.Co-Authored-By: Claude Opus 4.7 (1M context)