diff --git a/docs/design/dynamic-dispatch-coverage-playbook.md b/docs/design/dynamic-dispatch-coverage-playbook.md index 3092aa9..8ec0a8e 100644 --- a/docs/design/dynamic-dispatch-coverage-playbook.md +++ b/docs/design/dynamic-dispatch-coverage-playbook.md @@ -278,7 +278,7 @@ Status legend: βœ… done+validated Β· πŸ”¬ hole identified Β· ⬜ not started. (Verify the exact supported set against `src/extraction/languages/` and `src/resolution/frameworks/` before starting β€” this table is a starting point.) | TypeScript/JS | Next.js (App Router + Pages Router) | page β†’ `` / `router.push` / `redirect` β†’ page; page load β†’ data; client component β†’ `'use server'` action β†’ DB β†’ `redirect`; `route.ts` handler β†’ DB β†’ response | R + S | βœ… 2026-08-28 (`frameworks/nextjs.ts`, `next-router-synthesizer.ts`, Steps `load` trigger + server-action crossing): fixture `__tests__/nextjs.test.ts` end to end (Screens `routed`, the push attributed back under its condition, the action's redirect); `leerob/next-saas-starter` indexes its pages and links. πŸ”¬ agent A/B (`--model sonnet`, β‰₯2 runs/arm) not run yet | -| TypeScript/JS | Express + React (MERN monorepo) | client `axios` / `fetch` literal path β†’ own route β†’ handler β†’ Mongoose β†’ response rows | S + R | βœ… 2026-08-28 (`tier-synthesizer.ts` `http-client` + Express mounts / chained `router.route()` / wrapped `const h = asyncHandler(…)` handlers / nested `package.json` detection): `bradtraversy/proshop_mern` 49 routes (19 pages + 30 endpoints), 23 clientβ†’route edges, every one spot-checked correct; `login β†’ β‡’ POST /api/users/login β†’ User.findOne β†’ 401 rows β†’ jwt.sign`. Node count stable across re-index. πŸ”¬ A/B not run | +| TypeScript/JS | Express + React (MERN monorepo) | client `axios` / `fetch` literal path β†’ own route β†’ handler β†’ Mongoose β†’ response rows | S + R | βœ… 2026-08-28 (`tier-synthesizer.ts` `http-client` + Express mounts / chained `router.route()` / wrapped `const h = asyncHandler(…)` handlers / nested `package.json` detection): `bradtraversy/proshop_mern` 49 routes (19 pages + 30 endpoints), 23 clientβ†’route edges, every one spot-checked correct; `login β†’ β‡’ POST /api/users/login β†’ User.findOne β†’ 401 rows β†’ jwt.sign`. Node count stable across re-index. **Agent A/B (2026-08-28, `run-all.sh`, Sonnet/high, 2 runs/arm, warm daemon, CLI shim on β€” 0 CLI leaks):** *"How does submitting the login form reach the database, and what does the API respond with when the password is wrong?"* β€” with: **14s / 14s, 2 tool calls each, 0 Read, 0 Grep, 1 and 2 explores** (explore sufficiency: answered after 1 call in run 1, after 2 in run 2), answer names `submitHandler β†’ login β†’ POST /api/users/login β†’ authUser β†’ User.findOne β†’ matchPassword β†’ 401` end to end; without: **18s / 37s, 14 and 8 tool calls, 7 and 1 Read** (+7 Bash `cat`s in run 2, a subagent in run 1). Tokens processed 153k/165k vs 237k/369k. Pass bar met on the small repo (0 Read/Grep, faster, within 1–2 explores against a budget of 1). πŸ”¬ medium/large (Ghost) and β‰₯3 prompts still to run | | TypeScript/JS | NestJS queues / events / sockets | `queue.add('job')` β†’ `@Process('job')`; `emit('x')` β†’ `@OnEvent('x')`; `socket.emit` β†’ `@SubscribeMessage` and `server.emit` β†’ `socket.on` | S | βœ… 2026-08-28 (`tier-synthesizer.ts` `queue-job`, `event-bus`): `nestjs/nest` `sample/26-queues` (`transcode` β†’ `handleTranscode`) and `sample/30-event-emitter` (`order.created` β†’ its listener) exact, 0 wrong edges after the `e2e/` and generic-event guards; `immich-app/immich` 0 edges β€” a generated SDK client and a wrapped queue API carry no literal, so silence (correct). πŸ”¬ A/B not run | | Python | FastAPI (prefixed routers) | request β†’ `Depends` β†’ handler β†’ session β†’ `HTTPException` rows | R | βœ… 2026-08-28 `python.ts` `postExtract` composes `APIRouter(prefix=)` + literal `include_router(prefix=)`: `fastapi/full-stack-fastapi-template` 23 routes named `GET /items/{id}`, `POST /login/access-token` (were `GET /`); a computed mount prefix is skipped. πŸ”¬ A/B not run | | C# | ASP.NET Minimal API endpoint groups | request β†’ group handler β†’ `ISender.Send` β†’ `TypedResults` rows | R | βœ… 2026-08-28 `csharp.ts` handler-first `MapPost(Handler[, path])` under the class + `$"/api/{groupName}"` head (`jasontaylordev/CleanArchitecture` shape); fixture end to end in `ui-steps-api-servers.test.ts` (`PUT /api/TodoItems/{id}` β†’ `204 Β· 400` rows); `jasontaylordev/CleanArchitecture` 10 routes, all the app's endpoints (were 0). πŸ”¬ A/B not run | diff --git a/docs/plans/2026-08-28-steps-and-screens-for-apis-and-web.md b/docs/plans/2026-08-28-steps-and-screens-for-apis-and-web.md index 8f59888..ce53ddf 100644 --- a/docs/plans/2026-08-28-steps-and-screens-for-apis-and-web.md +++ b/docs/plans/2026-08-28-steps-and-screens-for-apis-and-web.md @@ -2,7 +2,8 @@ **Status:** plan, written 2026-08-28 at the end of the session that built the Steps view and the readings it rests on (Expo + React Native app, `amniservices-mobile-app`). **Updated the same day, later -sessions: P0–P6 are built** (see the per-item notes marked *Built*); P7's agent A/B numbers are open. Every claim about what a +sessions: P0–P6 are built** (see the per-item notes marked *Built*); P7 has its first agent A/B (proshop, small) and +the medium / large rows are open. Every claim about what a resolver emits *today* was verified against the source on this date β€” re-verify before building on it, the resolvers move. What was learned building it, beyond the plan: the index keeps only the LAST segment of a deep member call (`create` for `prisma.user.create`) and name-matches it β€” often to the @@ -354,6 +355,8 @@ its `redirect` on the FILE node (Screens now re-attributes a file-scope navigati `useActionState(signIn, …)` leaves no function-as-value edge (a plain call argument β€” Screens now falls back to the functions that MENTION the value in the files importing it, read from the source; the principled fix is an extractor fnRef rule for `useActionState` / `useFormState` / `startTransition` arguments, with the Rust kernel twin). +With both: 12 screens, 17 links, 8 origins β€” `/sign-in β†’ /dashboard via Login > signIn WHEN userWithTeam.length !== 0 && +isPasswordValid && redirectTo !== 'checkout'`, `/dashboard/security β†’ /sign-in via deleteAccount WHEN isPasswordValid`. *Where:* `resolution/frameworks/react.ts` (split a `nextjs.ts` out of it β€” the pages/app routing is already there), a `next-router-synthesizer.ts` modelled on `expo-router-synthesizer.ts`. @@ -421,6 +424,18 @@ names and the frameworks detected, so the viewer does not guess). ### P7 β€” Validation set and the numbers +*First numbers* (2026-08-28, later session) β€” the deterministic half is in the playbook Β§6 rows (Next.js, MERN, Nest +channels, FastAPI prefixed routers, ASP.NET endpoint groups: node counts, edge precision spot-checks, pictures). One agent +A/B so far, `bradtraversy/proshop_mern` (small, Express + React), `scripts/agent-eval/run-all.sh`, Sonnet/high, 2 runs per +arm, a daemon pre-warmed before each with-run, the CLI shim on (0 leaks): *"How does submitting the login form reach the +database, and what does the API respond with when the password is wrong?"* β€” with codegraph 14s / 14s, 2 tool calls, 0 Read, +0 Grep, 1–2 explores, the full path named (`submitHandler β†’ login β†’ POST /api/users/login β†’ authUser β†’ User.findOne β†’ +matchPassword β†’ 401`); without 18s / 37s, 14 / 8 tool calls, 7 / 1 Read plus Bash `cat`s and a subagent. Tokens 153k/165k vs +237k/369k. The pass bar (Β§4 of the playbook) holds on the small repo. **Still open:** the medium / large rows (Ghost, +immich, cal.com / twenty), β‰₯3 prompts per framework, and a control repo. The driver lives in the session scratchpad +(`ab-proshop.sh`: pre-warm `serve --mcp` with `CODEGRAPH_DAEMON_IDLE_TIMEOUT_MS` high and `CODEGRAPH_WASM_RELAUNCHED=1`, +then `run-all.sh` per run with its own `AGENT_EVAL_OUT`); re-create it from the memory note. + Small fixtures live in the tests. For the real bar, index these and record the results in `docs/design/dynamic-dispatch-coverage-playbook.md` (new rows) exactly as the playbook asks (**β‰₯3 flow prompts Γ— small/medium/large, node count stable, synthesized-edge precision spot-check,