diff --git a/apps/web-next/src/app/page.tsx b/apps/web-next/src/app/page.tsx
index 4b4cfd1..8800e91 100644
--- a/apps/web-next/src/app/page.tsx
+++ b/apps/web-next/src/app/page.tsx
@@ -7,8 +7,8 @@ export default async function Home() {
const caller = appRouter.createCaller({});
const [siteSettings, header, articles] = await Promise.all([
- caller.marketingPages.siteSettings(),
- caller.navigation.header(),
+ caller.marketingPages.siteSettings({}),
+ caller.navigation.header({}),
caller.blog.listArticles({ status: "published", limit: 20 }),
]);
diff --git a/apps/web-tanstack/src/routes/index.tsx b/apps/web-tanstack/src/routes/index.tsx
index 04e0a24..96c1406 100644
--- a/apps/web-tanstack/src/routes/index.tsx
+++ b/apps/web-tanstack/src/routes/index.tsx
@@ -9,8 +9,8 @@ export const Route = createFileRoute("/" as any)({
function Home() {
const trpc = useTRPC();
- const siteSettings = useQuery(trpc.marketingPages.siteSettings.queryOptions());
- const header = useQuery(trpc.navigation.header.queryOptions());
+ const siteSettings = useQuery(trpc.marketingPages.siteSettings.queryOptions({}));
+ const header = useQuery(trpc.navigation.header.queryOptions({}));
if (siteSettings.isPending || header.isPending) {
return Loading…;
diff --git a/docs/superpowers/refactor-logs/2026-05-06-input-output-unification.md b/docs/superpowers/refactor-logs/2026-05-06-input-output-unification.md
index 083b301..39e7d65 100644
--- a/docs/superpowers/refactor-logs/2026-05-06-input-output-unification.md
+++ b/docs/superpowers/refactor-logs/2026-05-06-input-output-unification.md
@@ -155,6 +155,23 @@ media: 4 new R26 tests in router.test.ts — NOT_FOUND on getMedia with nonexist
no-op (defineErrorMiddleware uses `instanceof`), but ensures correct
serialization, stack-trace labels, and JSON inspectability.
+### Plan 9 final verification (Task 8, 2026-05-06)
+
+- pnpm typecheck / lint / test / turbo boundaries / build: all green after fixing 2 Plan 9 regressions in app callers (see stragglers below).
+- Total tests: 360 across 15 test suites. Net delta vs pre-Plan-9: +144 tests (Plan 9 added R25 output-validation + R26 router error-mapping + R27/R28 presenter shape tests across all 5 features).
+- Spec §8 acceptance criteria sweep:
+ - All non-test use cases export xInputSchema. ✓
+ - Non-void use cases also export xOutputSchema (void exempt: sign-out, delete-media). ✓
+ - All non-void controllers have `function presenter`; void controllers (sign-out, delete-media) return Promise. ✓
+ - 5 procedures.ts files (one per feature). ✓
+ - 5 ./ui subpath entries in package.json. ✓
+ - All error classes set this.name (R6 satisfied after `9663c82`). ✓
+ - R26 router error-mapping tests pass for all 5 features (4–6 tests each). ✓
+- Stragglers fixed in this task (Plan 9 regressions, NOT pre-existing):
+ - `apps/web-tanstack/src/routes/index.tsx` — `queryOptions()` → `queryOptions({})` for siteSettings and header (both procedures now require `{}` input after Plan 9 added `.input(z.object({}).strict())`).
+ - `apps/web-next/src/app/page.tsx` — `caller.marketingPages.siteSettings()` → `caller.marketingPages.siteSettings({})` and `caller.navigation.header()` → `caller.navigation.header({})` (same root cause).
+- Pre-existing items (NOT introduced by Plan 9): none.
+
---
## Doc update checklist (deferred — combined with paused Plan 8 doc pass)