Explanation

Agent repair tests

CI-verified agent repair fixtures, benchmarks, and what is measured vs estimated on the site.

Summary

Point ships 39 real automated tests for agent repair — not marketing screenshots. They live in the Point repository and run on every bun test. This page is the hub for the proof report, interactive comparison, and optional frontier-model benchmarks.

  • 35 single-shot fixtures (typo fixes + feature-build wiring bugs)
  • 4 repair-plan loop (check → fix → check again, CI only)
  • 9 feature-build scenarios simulating AI auto-coding scaffolds

Executable proof report

Generated May 22, 2026, 3:14 AM from bun run proof:agent-repair in the Point repo. CI layers run without an LLM; live model runs use real APIs and verify with point check.

All layers passed
CI fixtures14 total · 13 single-shot · 1 repair-plan
Context savings7993% less than TS paste (avg 87%)
Live models78/78 runs pass point check
  1. CI verifiedCI: check-json sufficiency (single-shot agent loop, no LLM)pass

    13 fixtures · real check-json → golden line → point check

  2. CI verifiedCI: repair-plan loop (check → fix → check again, no LLM)pass

    1 multistep fixture(s) · simulates rushed auto-coding scaffold

  3. CI verifiedMeasured: check-json context size per fixturepass

    unknown-field-rule: 1051 chars (~263 tok); label-unknown-field: 813 chars (~203 tok); calc-unknown-field: 907 chars (~227 tok); rule-stock-unknown-field: 936 chars (~234 tok); rule-user-unknown-field: 809 chars (~202 tok); missing-await: 747 chars (~187 tok); arity-mismatch: 755 chars (~189 tok); operator-type-mismatch: 672 chars (~168 tok); feature-dashboard-load: 963 chars (~241 tok); feature-pipeline-await: 807 chars (~202 tok); feature-notes-crud: 789 chars (~197 tok); feature-nav-routes: 849 chars (~212 tok); feature-guard-policy: 784 chars (~196 tok)

  4. EstimatedCompared: Point check-json vs illustrative TS paste heuristicpass

    79–93% less context (avg 87%). TS paste sizes are heuristics, not logged agent traces.

  5. CI verifiedCI: multistep golden repairpass

    feature-multistep-launch: 2/2 steps

  6. Live modelLive: frontier models — real API, point check verifierpass

    78/78 runs pass point check · Point workflow 100% · TS workflow 100%

Model benchmark covers 13 single-shot fixtures only. The repair-plan loop is CI-only (1 fixture).

Reproduce: bun run proof:agent-repair

Full app benchmarks

Real multi-block Point apps (~84–105 lines) paired with a Next.js admin scaffold in benchmarks/next-dashboard/. Same product tasks — add search, fix wiring — compared side by side. TypeScript context size is measured from real scaffold files, not a char-count guess.

12CI cases today
5897%Less context vs paired Next scaffold (avg 85%)
5/12Cases with measured Next.js scaffold (not heuristic)
Feature add

Dashboard — add search page

Add a /search page to the existing dashboard app: nav link, search action, search view with load data, and page wired into navigation.

Point app
84105 lines (+21)
Point context
~203 tok check-json
Measured Next scaffold
~1,093 tok
Saved
81%

Point — agent sees check-json

{
  "schemaVersion": "point.core.check.v1",
  "ok": false,
  "diagnostics": [
    {
      "code": "unknown-load-action",
      "message": "View search panel loads unknown action search items",
      "path": "view.search panel",
      "ref": "point://semantic/DashboardApp/view.search panel",
      "severity": "error",
      "span": {
        "start": {
          "line": 52,
          "column": 1,
          "offset": 1452
        },
        "end": {
          "line": 52,
          "column": 37,
          "offset": 1488
        }
      },
      "expected": [
        "fetch items"
      ],
      "actual": "search items",
      "repair": "Declare action search items or fix the load data from action name.",
      "relatedRefs": [
        "point://semantic/DashboardApp/view.search panel"
      ]
    }
  ]
}

Next.js — measured next scaffold

Add a Search page to an existing Next.js admin app with sidebar nav, items list, and settings — new route, page component, data loader, and nav link.

Missing in broken scaffold: lib/searchItems.ts

// app/admin/layout.tsx
import { AdminNav } from "../../components/AdminNav";

export default function AdminLayout({ children }: { children: React.ReactNode }) {
  return (
    <div className="admin-shell">
      <aside>
        <AdminNav />
      </aside>
      <main>{children}</main>
    </div>
  );
}

// app/admin/settings/page.tsx
import { SettingsForm } from "../../../components/SettingsForm";

const defaultSettings = {
  workspaceName: "Acme",
  notificationsEnabled: true,
  theme: "light",
};

export default function SettingsPage() {
  return (
    <section>
      <h1>Settings</h1>
      <p>Manage workspace preferences</p>
      <SettingsForm settings={defaultSettings} onSettingsChange={() => undefined} />
    </section>
  );
}

// app/admin/items/page.tsx
import { ItemsList } from "../../../components/ItemsList";
import { fetchItems } from "../../../lib/items";

export default async function ItemsPage() {
  const items = await fetchItems();
  return (
    <section>
      <h1>Items</h1>
      <p>Browse tracked items</p>
      <ItemsList items={items} />
    </section>
  );
}

// app/admin/items/[id]/page.tsx
import { ItemDetail } from "../../../../components/ItemDetail";

ex

Old illustrative paste heuristic was ~5,500 tok — 80% larger than measured scaffold.

Point base → broken → golden

Base app

module DashboardApp

record WorkspaceSettings
  workspace name: Text
  notifications enabled: Bool
  theme: Text

record Item
  id: Text
  title: Text

view dashboard nav
  link "Settings" to "/settings"
  link "Items" to "/items"
  render "Dashboard"

view settings form
  input settings: WorkspaceSettings
  input on settings change: Handler<WorkspaceSettings>
  on change call on settings change
  form
  bind field "Workspace name" to settings.workspace name
  bind checkbox "Email notifications" to settings.notifications enabled
  tabs
  tab "General" render "Theme: " + settings.theme
  tab "Advanced" render "Notification settings apply workspace-wide"
  modal "Notifications enabled" when settings.notifications enabled render "Email alerts are active for this workspace"

calculation sample items
  output items: List<Item>
  return [{ id: "alpha", title: "Alpha" }, { id: "beta", title: "Beta" }, { id: "gamma", title: "Gamma" }]

action fetch items
  output items: List<Item>
  touches none
  return sample items()

view items list
  load data from action fetch items
  when loading render "Loading items..."
  when error render "Could not load items"
  when empty render "No items yet"
  each item in data render link item.title to "/items/" + item.id

view item detail
  input id: Text
  modal "Item actions" when id != "" render "Manage actions for " + id
  render "Item detail for " + id

layout app shell
  slot sidebar render dashboard nav()
  slot main render "Select a page from the sidebar"

page settings page
  layout app shell
  input settings: WorkspaceSettings
  input on settings change: Handler<WorkspaceSettings>
  title "Settings"
  description "Manage workspace preferences"
  main render settings form(settings, on settings change)

page items list page
  layout app shell
  title "Items"
  description "Browse tracked items"
  main render items list()

page item detail page
  layout app shell
  input id: Text
  title "Item Detail"
  description "Inspect a single item"
  main render item detail(id)

navigation dashboard app
  path "/settings" page settings page
  path "/items" page items list page
  path "/items/:id" page item detail page
  bootstrap router

command dashboard demo
  output result: Text
  return "Dashboard navigation ready"

Broken (agent mistake)

module DashboardApp

record WorkspaceSettings
  workspace name: Text
  notifications enabled: Bool
  theme: Text

record Item
  id: Text
  title: Text

view dashboard nav
  link "Settings" to "/settings"
  link "Items" to "/items"
  link "Search" to "/search"
  render "Dashboard"

view settings form
  input settings: WorkspaceSettings
  input on settings change: Handler<WorkspaceSettings>
  on change call on settings change
  form
  bind field "Workspace name" to settings.workspace name
  bind checkbox "Email notifications" to settings.notifications enabled
  tabs
  tab "General" render "Theme: " + settings.theme
  tab "Advanced" render "Notification settings apply workspace-wide"
  modal "Notifications enabled" when settings.notifications enabled render "Email alerts are active for this workspace"

calculation sample items
  output items: List<Item>
  return [{ id: "alpha", title: "Alpha" }, { id: "beta", title: "Beta" }, { id: "gamma", title: "Gamma" }]

action fetch items
  output items: List<Item>
  touches none
  return sample items()

view items list
  load data from action fetch items
  when loading render "Loading items..."
  when error render "Could not load items"
  when empty render "No items yet"
  each item in data render link item.title to "/items/" + item.id

view item detail
  input id: Text
  modal "Item actions" when id != "" render "Manage actions for " + id
  render "Item detail for " + id

view search panel
  load data from action search items
  when loading render "Searching..."
  when error render "Search failed"
  render "Search results"

layout app shell
  slot sidebar render dashboard nav()
  slot main render "Select a page from the sidebar"

page settings page
  layout app shell
  input settings: WorkspaceSettings
  input on settings change: Handler<WorkspaceSettings>
  title "Settings"
  description "Manage workspace preferences"
  main render settings form(settings, on settings change)

page items list page
  layout app shell
  title "Items"
  description "Browse tracked items"
  main render items list()

page item detail page
  layout app shell
  input id: Text
  title "Item Detail"
  description "Inspect a single item"
  main render item detail(id)

page search page
  layout app shell
  title "Search"
  description "Find items by title"
  main render search panel()

navigation dashboard app
  path "/settings" page settings page
  path "/items" page items list page
  path "/items/:id" page item detail page
  path "/search" page search page
  bootstrap router

command dashboard demo
  output result: Text
  return "Dashboard navigation ready"

Golden (target)

module DashboardApp

record WorkspaceSettings
  workspace name: Text
  notifications enabled: Bool
  theme: Text

record Item
  id: Text
  title: Text

view dashboard nav
  link "Settings" to "/settings"
  link "Items" to "/items"
  link "Search" to "/search"
  render "Dashboard"

view settings form
  input settings: WorkspaceSettings
  input on settings change: Handler<WorkspaceSettings>
  on change call on settings change
  form
  bind field "Workspace name" to settings.workspace name
  bind checkbox "Email notifications" to settings.notifications enabled
  tabs
  tab "General" render "Theme: " + settings.theme
  tab "Advanced" render "Notification settings apply workspace-wide"
  modal "Notifications enabled" when settings.notifications enabled render "Email alerts are active for this workspace"

calculation sample items
  output items: List<Item>
  return [{ id: "alpha", title: "Alpha" }, { id: "beta", title: "Beta" }, { id: "gamma", title: "Gamma" }]

action fetch items
  output items: List<Item>
  touches none
  return sample items()

action search items
  input query: Text
  output items: List<Item>
  touches none
  return sample items()

view items list
  load data from action fetch items
  when loading render "Loading items..."
  when error render "Could not load items"
  when empty render "No items yet"
  each item in data render link item.title to "/items/" + item.id

view item detail
  input id: Text
  modal "Item actions" when id != "" render "Manage actions for " + id
  render "Item detail for " + id

view search panel
  load data from action search items
  when loading render "Searching..."
  when error render "Search failed"
  when empty render "No matches"
  each item in data render item.title

layout app shell
  slot sidebar render dashboard nav()
  slot main render "Select a page from the sidebar"

page settings page
  layout app shell
  input settings: WorkspaceSettings
  input on settings change: Handler<WorkspaceSettings>
  title "Settings"
  description "Manage workspace preferences"
  main render settings form(settings, on settings change)

page items list page
  layout app shell
  title "Items"
  description "Browse tracked items"
  main render items list()

page item detail page
  layout app shell
  input id: Text
  title "Item Detail"
  description "Inspect a single item"
  main render item detail(id)

page search page
  layout app shell
  title "Search"
  description "Find items by title"
  main render search panel()

navigation dashboard app
  path "/settings" page settings page
  path "/items" page items list page
  path "/items/:id" page item detail page
  path "/search" page search page
  bootstrap router

command dashboard demo
  output result: Text
  return "Dashboard navigation ready"
App repair

Dashboard — wire search action

Fix the search panel wiring in a 100-line dashboard app — the page and nav exist but the view loads the wrong action name.

Point app
105105 lines (+0)
Point context
~208 tok check-json
Measured Next scaffold
~501 tok
Saved
58%

Point — agent sees check-json

{
  "schemaVersion": "point.core.check.v1",
  "ok": false,
  "diagnostics": [
    {
      "code": "unknown-load-action",
      "message": "View search panel loads unknown action search item",
      "path": "view.search panel",
      "ref": "point://semantic/DashboardApp/view.search panel",
      "severity": "error",
      "span": {
        "start": {
          "line": 58,
          "column": 1,
          "offset": 1559
        },
        "end": {
          "line": 58,
          "column": 36,
          "offset": 1594
        }
      },
      "expected": [
        "fetch items",
        "search items"
      ],
      "actual": "search item",
      "repair": "Declare action search item or fix the load data from action name.",
      "relatedRefs": [
        "point://semantic/DashboardApp/view.search panel"
      ]
    }
  ]
}

Next.js — measured next scaffold

Fix a SearchPage component that calls the wrong loader function in a Next.js admin app with sidebar, items CRUD, and settings.

// app/admin/layout.tsx
import { AdminNav } from "../../components/AdminNav";

export default function AdminLayout({ children }: { children: React.ReactNode }) {
  return (
    <div className="admin-shell">
      <aside>
        <AdminNav />
      </aside>
      <main>{children}</main>
    </div>
  );
}

// app/admin/search/page.tsx
import { SearchPanel } from "../../../components/SearchPanel";

export default async function SearchPage() {
  return (
    <section>
      <h1>Search</h1>
      <p>Find items by title</p>
      <SearchPanel />
    </section>
  );
}

// components/AdminNav.tsx
import Link from "next/link";

const links = [
  { href: "/admin/settings", label: "Settings" },
  { href: "/admin/items", label: "Items" },
  { href: "/admin/search", label: "Search" },
];

export function AdminNav() {
  return (
    <nav className="admin-nav">
      {links.map((link) => (
        <Link key={link.href} href={link.href}>
          {link.label}
        </Link>
      ))}
      <span>Dashboard</span>
    </nav>
  );
}

// components/SearchPanel.tsx
import { searchItem } from "../lib/searchItems";

export async function SearchPanel() {
  const items = await searchItem("");
  return <p

Old illustrative paste heuristic was ~6,000 tok — 92% larger than measured scaffold.

Point base → broken → golden

Base app

module DashboardApp

record WorkspaceSettings
  workspace name: Text
  notifications enabled: Bool
  theme: Text

record Item
  id: Text
  title: Text

view dashboard nav
  link "Settings" to "/settings"
  link "Items" to "/items"
  link "Search" to "/search"
  render "Dashboard"

view settings form
  input settings: WorkspaceSettings
  input on settings change: Handler<WorkspaceSettings>
  on change call on settings change
  form
  bind field "Workspace name" to settings.workspace name
  bind checkbox "Email notifications" to settings.notifications enabled
  tabs
  tab "General" render "Theme: " + settings.theme
  tab "Advanced" render "Notification settings apply workspace-wide"
  modal "Notifications enabled" when settings.notifications enabled render "Email alerts are active for this workspace"

calculation sample items
  output items: List<Item>
  return [{ id: "alpha", title: "Alpha" }, { id: "beta", title: "Beta" }, { id: "gamma", title: "Gamma" }]

action fetch items
  output items: List<Item>
  touches none
  return sample items()

action search items
  input query: Text
  output items: List<Item>
  touches none
  return sample items()

view items list
  load data from action fetch items
  when loading render "Loading items..."
  when error render "Could not load items"
  when empty render "No items yet"
  each item in data render link item.title to "/items/" + item.id

view item detail
  input id: Text
  modal "Item actions" when id != "" render "Manage actions for " + id
  render "Item detail for " + id

view search panel
  load data from action search items
  when loading render "Searching..."
  when error render "Search failed"
  when empty render "No matches"
  each item in data render item.title

layout app shell
  slot sidebar render dashboard nav()
  slot main render "Select a page from the sidebar"

page settings page
  layout app shell
  input settings: WorkspaceSettings
  input on settings change: Handler<WorkspaceSettings>
  title "Settings"
  description "Manage workspace preferences"
  main render settings form(settings, on settings change)

page items list page
  layout app shell
  title "Items"
  description "Browse tracked items"
  main render items list()

page item detail page
  layout app shell
  input id: Text
  title "Item Detail"
  description "Inspect a single item"
  main render item detail(id)

page search page
  layout app shell
  title "Search"
  description "Find items by title"
  main render search panel()

navigation dashboard app
  path "/settings" page settings page
  path "/items" page items list page
  path "/items/:id" page item detail page
  path "/search" page search page
  bootstrap router

command dashboard demo
  output result: Text
  return "Dashboard navigation ready"

Broken (agent mistake)

module DashboardApp

record WorkspaceSettings
  workspace name: Text
  notifications enabled: Bool
  theme: Text

record Item
  id: Text
  title: Text

view dashboard nav
  link "Settings" to "/settings"
  link "Items" to "/items"
  link "Search" to "/search"
  render "Dashboard"

view settings form
  input settings: WorkspaceSettings
  input on settings change: Handler<WorkspaceSettings>
  on change call on settings change
  form
  bind field "Workspace name" to settings.workspace name
  bind checkbox "Email notifications" to settings.notifications enabled
  tabs
  tab "General" render "Theme: " + settings.theme
  tab "Advanced" render "Notification settings apply workspace-wide"
  modal "Notifications enabled" when settings.notifications enabled render "Email alerts are active for this workspace"

calculation sample items
  output items: List<Item>
  return [{ id: "alpha", title: "Alpha" }, { id: "beta", title: "Beta" }, { id: "gamma", title: "Gamma" }]

action fetch items
  output items: List<Item>
  touches none
  return sample items()

action search items
  input query: Text
  output items: List<Item>
  touches none
  return sample items()

view items list
  load data from action fetch items
  when loading render "Loading items..."
  when error render "Could not load items"
  when empty render "No items yet"
  each item in data render link item.title to "/items/" + item.id

view item detail
  input id: Text
  modal "Item actions" when id != "" render "Manage actions for " + id
  render "Item detail for " + id

view search panel
  load data from action search item
  when loading render "Searching..."
  when error render "Search failed"
  render "Search results"

layout app shell
  slot sidebar render dashboard nav()
  slot main render "Select a page from the sidebar"

page settings page
  layout app shell
  input settings: WorkspaceSettings
  input on settings change: Handler<WorkspaceSettings>
  title "Settings"
  description "Manage workspace preferences"
  main render settings form(settings, on settings change)

page items list page
  layout app shell
  title "Items"
  description "Browse tracked items"
  main render items list()

page item detail page
  layout app shell
  input id: Text
  title "Item Detail"
  description "Inspect a single item"
  main render item detail(id)

page search page
  layout app shell
  title "Search"
  description "Find items by title"
  main render search panel()

navigation dashboard app
  path "/settings" page settings page
  path "/items" page items list page
  path "/items/:id" page item detail page
  path "/search" page search page
  bootstrap router

command dashboard demo
  output result: Text
  return "Dashboard navigation ready"

Golden (target)

module DashboardApp

record WorkspaceSettings
  workspace name: Text
  notifications enabled: Bool
  theme: Text

record Item
  id: Text
  title: Text

view dashboard nav
  link "Settings" to "/settings"
  link "Items" to "/items"
  link "Search" to "/search"
  render "Dashboard"

view settings form
  input settings: WorkspaceSettings
  input on settings change: Handler<WorkspaceSettings>
  on change call on settings change
  form
  bind field "Workspace name" to settings.workspace name
  bind checkbox "Email notifications" to settings.notifications enabled
  tabs
  tab "General" render "Theme: " + settings.theme
  tab "Advanced" render "Notification settings apply workspace-wide"
  modal "Notifications enabled" when settings.notifications enabled render "Email alerts are active for this workspace"

calculation sample items
  output items: List<Item>
  return [{ id: "alpha", title: "Alpha" }, { id: "beta", title: "Beta" }, { id: "gamma", title: "Gamma" }]

action fetch items
  output items: List<Item>
  touches none
  return sample items()

action search items
  input query: Text
  output items: List<Item>
  touches none
  return sample items()

view items list
  load data from action fetch items
  when loading render "Loading items..."
  when error render "Could not load items"
  when empty render "No items yet"
  each item in data render link item.title to "/items/" + item.id

view item detail
  input id: Text
  modal "Item actions" when id != "" render "Manage actions for " + id
  render "Item detail for " + id

view search panel
  load data from action search items
  when loading render "Searching..."
  when error render "Search failed"
  when empty render "No matches"
  each item in data render item.title

layout app shell
  slot sidebar render dashboard nav()
  slot main render "Select a page from the sidebar"

page settings page
  layout app shell
  input settings: WorkspaceSettings
  input on settings change: Handler<WorkspaceSettings>
  title "Settings"
  description "Manage workspace preferences"
  main render settings form(settings, on settings change)

page items list page
  layout app shell
  title "Items"
  description "Browse tracked items"
  main render items list()

page item detail page
  layout app shell
  input id: Text
  title "Item Detail"
  description "Inspect a single item"
  main render item detail(id)

page search page
  layout app shell
  title "Search"
  description "Find items by title"
  main render search panel()

navigation dashboard app
  path "/settings" page settings page
  path "/items" page items list page
  path "/items/:id" page item detail page
  path "/search" page search page
  bootstrap router

command dashboard demo
  output result: Text
  return "Dashboard navigation ready"
Feature add

Notes — add detail page

Add a /notes/:id detail page to the notes app: get-note action, detail view, list links, and route wired into navigation.

Point app
7492 lines (+18)
Point context
~202 tok check-json
Measured Next scaffold
~820 tok
Saved
75%

Point — agent sees check-json

{
  "schemaVersion": "point.core.check.v1",
  "ok": false,
  "diagnostics": [
    {
      "code": "unknown-load-action",
      "message": "View note detail loads unknown action get note",
      "path": "view.note detail",
      "ref": "point://semantic/NotesApp/view.note detail",
      "severity": "error",
      "span": {
        "start": {
          "line": 41,
          "column": 1,
          "offset": 888
        },
        "end": {
          "line": 41,
          "column": 33,
          "offset": 920
        }
      },
      "expected": [
        "create note",
        "list notes"
      ],
      "actual": "get note",
      "repair": "Declare action get note or fix the load data from action name.",
      "relatedRefs": [
        "point://semantic/NotesApp/view.note detail"
      ]
    }
  ]
}

Next.js — measured next scaffold

Add a note detail route to a Next.js notes app with list, create form, and sidebar nav — new dynamic route, loader, and list links.

Missing in broken scaffold: lib/getNote.ts

// app/notes/layout.tsx
import { NotesNav } from "../../components/NotesNav";

export default function NotesLayout({ children }: { children: React.ReactNode }) {
  return (
    <div>
      <aside>
        <NotesNav />
      </aside>
      <main>{children}</main>
    </div>
  );
}

// app/notes/page.tsx
import { NotesList } from "../../../components/NotesList";
import { listNotes } from "../../../lib/notes";

export default async function NotesPage() {
  const notes = await listNotes();
  return (
    <section>
      <h1>Notes</h1>
      <NotesList notes={notes} />
    </section>
  );
}

// app/notes/new/page.tsx
import { NoteCreateForm } from "../../../components/NoteCreateForm";

const draft = { title: "", body: "" };

export default function NewNotePage() {
  return (
    <section>
      <h1>New note</h1>
      <NoteCreateForm draft={draft} onDraftChange={() => undefined} />
    </section>
  );
}

// app/notes/[id]/page.tsx
import { NoteDetail } from "../../../components/NoteDetail";

export default async function NoteDetailPage({ params }: { params: { id: string } }) {
  return (
    <section>
      <h1>Note detail</h1>
      <NoteDetail id={params.id} />
    </section>
  );
}

Old illustrative paste heuristic was ~4,500 tok — 82% larger than measured scaffold.

Point base → broken → golden

Base app

module NotesApp

record Note
  id: Text
  title: Text
  body: Text

record Create Note Input
  title: Text
  body: Text

calculation sample notes
  output notes: List<Note>
  return [{ id: "n1", title: "Hello", body: "World" }, { id: "n2", title: "Draft", body: "Work in progress" }]

action list notes
  output notes: List<Note>
  touches none
  return sample notes()

action create note
  input input: Create Note Input
  output note: Note
  touches none
  return { id: "new", title: input.title, body: input.body }

view notes nav
  link "Notes" to "/notes"
  link "New note" to "/notes/new"
  render "Notes app"

view notes list
  load data from action list notes
  when loading render "Loading notes..."
  when error render "Could not load notes"
  when empty render "No notes yet"
  render "Notes"

view note create form
  input draft: Create Note Input
  input on draft change: Handler<Create Note Input>
  on change call on draft change
  form
  bind field "Title" to draft.title
  bind field "Body" to draft.body
  render "Create a note"

layout notes shell
  slot sidebar render notes nav()
  slot main render "Select a notes page"

page notes list page
  layout notes shell
  title "Notes"
  description "Browse saved notes"
  main render notes list()

page note create page
  layout notes shell
  input draft: Create Note Input
  input on draft change: Handler<Create Note Input>
  title "New note"
  description "Create a note"
  main render note create form(draft, on draft change)

navigation notes app
  path "/notes" page notes list page
  path "/notes/new" page note create page
  bootstrap router

command notes demo
  output result: Text
  return "Notes app ready"

Broken (agent mistake)

module NotesApp

record Note
  id: Text
  title: Text
  body: Text

record Create Note Input
  title: Text
  body: Text

calculation sample notes
  output notes: List<Note>
  return [{ id: "n1", title: "Hello", body: "World" }, { id: "n2", title: "Draft", body: "Work in progress" }]

action list notes
  output notes: List<Note>
  touches none
  return sample notes()

action create note
  input input: Create Note Input
  output note: Note
  touches none
  return { id: "new", title: input.title, body: input.body }

view notes nav
  link "Notes" to "/notes"
  link "New note" to "/notes/new"
  render "Notes app"

view notes list
  load data from action list notes
  when loading render "Loading notes..."
  when error render "Could not load notes"
  when empty render "No notes yet"
  each note in data render link note.title to "/notes/" + note.id

view note detail
  input id: Text
  load data from action get note
  when loading render "Loading note..."
  when error render "Could not load note"
  render "Note detail"

view note create form
  input draft: Create Note Input
  input on draft change: Handler<Create Note Input>
  on change call on draft change
  form
  bind field "Title" to draft.title
  bind field "Body" to draft.body
  render "Create a note"

layout notes shell
  slot sidebar render notes nav()
  slot main render "Select a notes page"

page notes list page
  layout notes shell
  title "Notes"
  description "Browse saved notes"
  main render notes list()

page note create page
  layout notes shell
  input draft: Create Note Input
  input on draft change: Handler<Create Note Input>
  title "New note"
  description "Create a note"
  main render note create form(draft, on draft change)

page note detail page
  layout notes shell
  input id: Text
  title "Note detail"
  description "Read a saved note"
  main render note detail(id)

navigation notes app
  path "/notes" page notes list page
  path "/notes/new" page note create page
  path "/notes/:id" page note detail page
  bootstrap router

command notes demo
  output result: Text
  return "Notes app ready"

Golden (target)

module NotesApp

record Note
  id: Text
  title: Text
  body: Text

record Create Note Input
  title: Text
  body: Text

calculation sample notes
  output notes: List<Note>
  return [{ id: "n1", title: "Hello", body: "World" }, { id: "n2", title: "Draft", body: "Work in progress" }]

action list notes
  output notes: List<Note>
  touches none
  return sample notes()

action create note
  input input: Create Note Input
  output note: Note
  touches none
  return { id: "new", title: input.title, body: input.body }

action get note
  input id: Text
  output note: Note
  touches none
  return { id: id, title: "Note " + id, body: "Detail for " + id }

view notes nav
  link "Notes" to "/notes"
  link "New note" to "/notes/new"
  render "Notes app"

view notes list
  load data from action list notes
  when loading render "Loading notes..."
  when error render "Could not load notes"
  when empty render "No notes yet"
  each note in data render link note.title to "/notes/" + note.id

view note detail
  input id: Text
  render "Note detail for " + id

view note create form
  input draft: Create Note Input
  input on draft change: Handler<Create Note Input>
  on change call on draft change
  form
  bind field "Title" to draft.title
  bind field "Body" to draft.body
  render "Create a note"

layout notes shell
  slot sidebar render notes nav()
  slot main render "Select a notes page"

page notes list page
  layout notes shell
  title "Notes"
  description "Browse saved notes"
  main render notes list()

page note create page
  layout notes shell
  input draft: Create Note Input
  input on draft change: Handler<Create Note Input>
  title "New note"
  description "Create a note"
  main render note create form(draft, on draft change)

page note detail page
  layout notes shell
  input id: Text
  title "Note detail"
  description "Read a saved note"
  main render note detail(id)

navigation notes app
  path "/notes" page notes list page
  path "/notes/new" page note create page
  path "/notes/:id" page note detail page
  bootstrap router

command notes demo
  output result: Text
  return "Notes app ready"
Refactor

Dashboard — rename items to products

Rename the dashboard items surface to products across actions, views, pages, and navigation — the agent updated nav and action names but left stale view wiring.

Point app
8484 lines (+0)
Point context
~201 tok check-json
Measured Next scaffold
~479 tok
Saved
58%

Point — agent sees check-json

{
  "schemaVersion": "point.core.check.v1",
  "ok": false,
  "diagnostics": [
    {
      "code": "unknown-load-action",
      "message": "View items list loads unknown action fetch items",
      "path": "view.items list",
      "ref": "point://semantic/DashboardApp/view.items list",
      "severity": "error",
      "span": {
        "start": {
          "line": 39,
          "column": 1,
          "offset": 1073
        },
        "end": {
          "line": 39,
          "column": 36,
          "offset": 1108
        }
      },
      "expected": [
        "list products"
      ],
      "actual": "fetch items",
      "repair": "Declare action fetch items or fix the load data from action name.",
      "relatedRefs": [
        "point://semantic/DashboardApp/view.items list"
      ]
    }
  ]
}

Next.js — measured next scaffold

Finish renaming an admin Items area to Products in a Next.js app — update list component imports, loader names, and page wiring.

// app/admin/layout.tsx
import { AdminNav } from "../../components/AdminNav";

export default function AdminLayout({ children }: { children: React.ReactNode }) {
  return (
    <div className="admin-shell">
      <aside>
        <AdminNav />
      </aside>
      <main>{children}</main>
    </div>
  );
}

// app/admin/settings/page.tsx
import { SettingsForm } from "../../../components/SettingsForm";

const defaultSettings = {
  workspaceName: "Acme",
  notificationsEnabled: true,
  theme: "light",
};

export default function SettingsPage() {
  return (
    <section>
      <h1>Settings</h1>
      <p>Manage workspace preferences</p>
      <SettingsForm settings={defaultSettings} onSettingsChange={() => undefined} />
    </section>
  );
}

// app/admin/products/page.tsx
import { ProductsList } from "../../../components/ProductsList";

export default async function ProductsPage() {
  return (
    <section>
      <h1>Products</h1>
      <ProductsList />
    </section>
  );
}

// components/AdminNav.tsx
import Link from "next/link";

const links = [
  { href: "/admin/settings", label: "Settings" },
  { href: "/admin/products", label: "Products" },
];

export function AdminNav() {
  return

Old illustrative paste heuristic was ~5,000 tok — 90% larger than measured scaffold.

Point base → broken → golden

Base app

module DashboardApp

record WorkspaceSettings
  workspace name: Text
  notifications enabled: Bool
  theme: Text

record Item
  id: Text
  title: Text

view dashboard nav
  link "Settings" to "/settings"
  link "Items" to "/items"
  render "Dashboard"

view settings form
  input settings: WorkspaceSettings
  input on settings change: Handler<WorkspaceSettings>
  on change call on settings change
  form
  bind field "Workspace name" to settings.workspace name
  bind checkbox "Email notifications" to settings.notifications enabled
  tabs
  tab "General" render "Theme: " + settings.theme
  tab "Advanced" render "Notification settings apply workspace-wide"
  modal "Notifications enabled" when settings.notifications enabled render "Email alerts are active for this workspace"

calculation sample items
  output items: List<Item>
  return [{ id: "alpha", title: "Alpha" }, { id: "beta", title: "Beta" }, { id: "gamma", title: "Gamma" }]

action fetch items
  output items: List<Item>
  touches none
  return sample items()

view items list
  load data from action fetch items
  when loading render "Loading items..."
  when error render "Could not load items"
  when empty render "No items yet"
  each item in data render link item.title to "/items/" + item.id

view item detail
  input id: Text
  modal "Item actions" when id != "" render "Manage actions for " + id
  render "Item detail for " + id

layout app shell
  slot sidebar render dashboard nav()
  slot main render "Select a page from the sidebar"

page settings page
  layout app shell
  input settings: WorkspaceSettings
  input on settings change: Handler<WorkspaceSettings>
  title "Settings"
  description "Manage workspace preferences"
  main render settings form(settings, on settings change)

page items list page
  layout app shell
  title "Items"
  description "Browse tracked items"
  main render items list()

page item detail page
  layout app shell
  input id: Text
  title "Item Detail"
  description "Inspect a single item"
  main render item detail(id)

navigation dashboard app
  path "/settings" page settings page
  path "/items" page items list page
  path "/items/:id" page item detail page
  bootstrap router

command dashboard demo
  output result: Text
  return "Dashboard navigation ready"

Broken (agent mistake)

module DashboardApp

record WorkspaceSettings
  workspace name: Text
  notifications enabled: Bool
  theme: Text

record Product
  id: Text
  title: Text

view dashboard nav
  link "Settings" to "/settings"
  link "Products" to "/products"
  render "Dashboard"

view settings form
  input settings: WorkspaceSettings
  input on settings change: Handler<WorkspaceSettings>
  on change call on settings change
  form
  bind field "Workspace name" to settings.workspace name
  bind checkbox "Email notifications" to settings.notifications enabled
  tabs
  tab "General" render "Theme: " + settings.theme
  tab "Advanced" render "Notification settings apply workspace-wide"
  modal "Notifications enabled" when settings.notifications enabled render "Email alerts are active for this workspace"

calculation sample products
  output products: List<Product>
  return [{ id: "alpha", title: "Alpha" }, { id: "beta", title: "Beta" }, { id: "gamma", title: "Gamma" }]

action list products
  output products: List<Product>
  touches none
  return sample products()

view items list
  load data from action fetch items
  when loading render "Loading products..."
  when error render "Could not load products"
  render "Products"

view product detail
  input id: Text
  modal "Product actions" when id != "" render "Manage actions for " + id
  render "Product detail for " + id

layout app shell
  slot sidebar render dashboard nav()
  slot main render "Select a page from the sidebar"

page settings page
  layout app shell
  input settings: WorkspaceSettings
  input on settings change: Handler<WorkspaceSettings>
  title "Settings"
  description "Manage workspace preferences"
  main render settings form(settings, on settings change)

page products list page
  layout app shell
  title "Products"
  description "Browse tracked products"
  main render items list()

page product detail page
  layout app shell
  input id: Text
  title "Product Detail"
  description "Inspect a single product"
  main render product detail(id)

navigation dashboard app
  path "/settings" page settings page
  path "/products" page products list page
  path "/products/:id" page product detail page
  bootstrap router

command dashboard demo
  output result: Text
  return "Dashboard navigation ready"

Golden (target)

module DashboardApp

record WorkspaceSettings
  workspace name: Text
  notifications enabled: Bool
  theme: Text

record Product
  id: Text
  title: Text

view dashboard nav
  link "Settings" to "/settings"
  link "Products" to "/products"
  render "Dashboard"

view settings form
  input settings: WorkspaceSettings
  input on settings change: Handler<WorkspaceSettings>
  on change call on settings change
  form
  bind field "Workspace name" to settings.workspace name
  bind checkbox "Email notifications" to settings.notifications enabled
  tabs
  tab "General" render "Theme: " + settings.theme
  tab "Advanced" render "Notification settings apply workspace-wide"
  modal "Notifications enabled" when settings.notifications enabled render "Email alerts are active for this workspace"

calculation sample products
  output products: List<Product>
  return [{ id: "alpha", title: "Alpha" }, { id: "beta", title: "Beta" }, { id: "gamma", title: "Gamma" }]

action list products
  output products: List<Product>
  touches none
  return sample products()

view products list
  load data from action list products
  when loading render "Loading products..."
  when error render "Could not load products"
  when empty render "No products yet"
  each product in data render link product.title to "/products/" + product.id

view product detail
  input id: Text
  modal "Product actions" when id != "" render "Manage actions for " + id
  render "Product detail for " + id

layout app shell
  slot sidebar render dashboard nav()
  slot main render "Select a page from the sidebar"

page settings page
  layout app shell
  input settings: WorkspaceSettings
  input on settings change: Handler<WorkspaceSettings>
  title "Settings"
  description "Manage workspace preferences"
  main render settings form(settings, on settings change)

page products list page
  layout app shell
  title "Products"
  description "Browse tracked products"
  main render products list()

page product detail page
  layout app shell
  input id: Text
  title "Product Detail"
  description "Inspect a single product"
  main render product detail(id)

navigation dashboard app
  path "/settings" page settings page
  path "/products" page products list page
  path "/products/:id" page product detail page
  bootstrap router

command dashboard demo
  output result: Text
  return "Dashboard navigation ready"
Feature add

Ops — add chart + datagrid + enqueue form

Upgrade a simple ops job list into a full dashboard: combined load action, bar chart, datagrid with sort/filter/pagination, enqueue form with toast + submit, and /enqueue page in navigation.

Point app
4179 lines (+38)
Point context
~210 tok check-json
TS heuristic
~6,500 tok
Saved
97%

Point — agent sees check-json

{
  "schemaVersion": "point.core.check.v1",
  "ok": false,
  "diagnostics": [
    {
      "code": "unknown-load-action",
      "message": "View ops dashboard loads unknown action fetch ops panel",
      "path": "view.ops dashboard",
      "ref": "point://semantic/OpsApp/view.ops dashboard",
      "severity": "error",
      "span": {
        "start": {
          "line": 42,
          "column": 1,
          "offset": 899
        },
        "end": {
          "line": 42,
          "column": 40,
          "offset": 938
        }
      },
      "expected": [
        "fetch ops dashboard",
        "list jobs"
      ],
      "actual": "fetch ops panel",
      "repair": "Declare action fetch ops panel or fix the load data from action name.",
      "relatedRefs": [
        "point://semantic/OpsApp/view.ops dashboard"
      ]
    }
  ]
}

Next.js — ts heuristic

Add a React ops dashboard with bar chart, sortable/filterable data grid, paginated rows, and an enqueue form with toast feedback — new loader action, pages, and nav links.

Point base → broken → golden

Base app

module OpsApp

record Job Row
  name: Text
  status: Text
  score: Int

view ops nav
  link "Dashboard" to "/"
  render "Ops"

action list jobs
  output jobs: List<Job Row>
  touches none
  return [{ name: "sync", status: "ok", score: 95 }, { name: "import", status: "warn", score: 72 }]

view jobs list
  load data from action list jobs
  when loading render "Loading jobs..."
  when error render "Could not load jobs"
  when empty render "No jobs yet"
  each job in data render job.name + " — " + job.status

layout ops shell
  slot sidebar render ops nav()
  slot main render "Ops console"

page dashboard page
  layout ops shell
  title "Ops dashboard"
  description "Job status overview"
  main render jobs list()

navigation ops app
  path "/" page dashboard page
  bootstrap router

command ops demo
  output result: Text
  return "Ops list ready"

Broken (agent mistake)

module OpsApp

record Job Row
  name: Text
  status: Text
  score: Int

record Job Metric
  label: Text
  value: Int

record Ops Dashboard
  jobs: List<Job Row>
  metrics: List<Job Metric>

record Enqueue Body
  name: Text

view ops nav
  link "Dashboard" to "/"
  link "Enqueue" to "/enqueue"
  render "Ops"

action list jobs
  output jobs: List<Job Row>
  touches none
  return [{ name: "sync", status: "ok", score: 95 }, { name: "import", status: "warn", score: 72 }]

action fetch ops dashboard
  output dashboard: Ops Dashboard
  touches none
  return { jobs: await list jobs(), metrics: [{ label: "Jobs", value: 12 }, { label: "Errors", value: 3 }] }

view jobs list
  load data from action list jobs
  when loading render "Loading jobs..."
  when error render "Could not load jobs"
  when empty render "No jobs yet"
  each job in data render job.name + " — " + job.status

view ops dashboard
  load data from action fetch ops panel
  when loading render "Loading dashboard..."
  when error render "Dashboard failed"
  chart bar from data.metrics label field label value field value
  datagrid row in data.jobs columns name, status, score sort by score filter by name page size 6

view enqueue job form
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  on change call on draft change
  form
  bind field "Job name" to draft.name
  toast on success "Job enqueued"
  toast on error "Enqueue failed"
  submit "Enqueue" POST "/api/jobs" body draft then navigate "/"

layout ops shell
  slot sidebar render ops nav()
  slot main render "Ops console"

page dashboard page
  layout ops shell
  title "Ops dashboard"
  description "Chart + datagrid overview"
  main render ops dashboard()

page enqueue page
  layout ops shell
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  title "Enqueue"
  description "Add a job to the queue"
  main render enqueue job form(draft, on draft change)

navigation ops app
  path "/" page dashboard page
  path "/enqueue" page enqueue page
  bootstrap router

command ops demo
  output result: Text
  return "Ops dashboard scaffold ready"

Golden (target)

module OpsApp

record Job Row
  name: Text
  status: Text
  score: Int

record Job Metric
  label: Text
  value: Int

record Ops Dashboard
  jobs: List<Job Row>
  metrics: List<Job Metric>

record Enqueue Body
  name: Text

view ops nav
  link "Dashboard" to "/"
  link "Enqueue" to "/enqueue"
  render "Ops"

action list jobs
  output jobs: List<Job Row>
  touches none
  return [{ name: "sync", status: "ok", score: 95 }, { name: "import", status: "warn", score: 72 }]

action fetch ops dashboard
  output dashboard: Ops Dashboard
  touches none
  return { jobs: await list jobs(), metrics: [{ label: "Jobs", value: 12 }, { label: "Errors", value: 3 }] }

view ops dashboard
  load data from action fetch ops dashboard
  refresh every 15 seconds
  when loading render "Loading dashboard..."
  when error render "Dashboard failed"
  when empty render "No jobs in queue"
  chart bar from data.metrics label field label value field value
  datagrid row in data.jobs columns name, status, score sort by score filter by name page size 6

view enqueue job form
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  on change call on draft change
  form
  bind field "Job name" to draft.name
  toast on success "Job enqueued"
  toast on error "Enqueue failed"
  submit "Enqueue" POST "/api/jobs" body draft then navigate "/"

layout ops shell
  slot sidebar render ops nav()
  slot main render "Ops console"

page dashboard page
  layout ops shell
  title "Ops dashboard"
  description "Chart + datagrid overview"
  main render ops dashboard()

page enqueue page
  layout ops shell
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  title "Enqueue"
  description "Add a job to the queue"
  main render enqueue job form(draft, on draft change)

navigation ops app
  path "/" page dashboard page
  path "/enqueue" page enqueue page
  bootstrap router

command ops demo
  output result: Text
  return "Ops dashboard ready"
Feature add

Metrics — add SSE live feed

Wire a push metrics dashboard: stream action, sse route with event record, subscribe view with connecting/disconnected guards, and home page rendering the live feed.

Point app
2447 lines (+23)
Point context
~178 tok check-json
TS heuristic
~4,000 tok
Saved
96%

Point — agent sees check-json

{
  "schemaVersion": "point.core.check.v1",
  "ok": false,
  "diagnostics": [
    {
      "code": "unknown-sse-subscribe-route",
      "message": "Unknown sse route metric ticks in subscribe to sse metric ticks",
      "path": "view.live pulse feed",
      "ref": "point://semantic/MetricsApp/view.live pulse feed",
      "severity": "error",
      "span": {
        "start": {
          "line": 21,
          "column": 1,
          "offset": 573
        },
        "end": {
          "line": 21,
          "column": 32,
          "offset": 604
        }
      },
      "repair": "Declare sse route metric ticks or fix the subscribe to sse name.",
      "expected": [
        "metric pulses"
      ]
    }
  ]
}

Next.js — ts heuristic

Add server-sent events to a Next.js metrics shell — EventSource client, stream handler route, connecting/error UI states, and home page wiring.

Point base → broken → golden

Base app

module MetricsApp

view metrics nav
  link "Home" to "/"
  render "Metrics"

layout metrics shell
  slot sidebar render metrics nav()
  slot main render "Metrics"

page home page
  layout metrics shell
  title "Metrics"
  description "Static placeholder until live feed is wired"
  main render "Add an SSE push feed next"

navigation metrics app
  path "/" page home page
  bootstrap router

command metrics demo
  output result: Text
  return "Metrics shell ready"

Broken (agent mistake)

module MetricsApp

external point std process
  stream lines raw(command: Text, args: List<Text>, env: List<Text>): Text from "@hatchingpoint/point/std/process" as processStreamLines

record Metric Pulse
  value: Text

action stream metric pulses
  output line: Text
  touches process
  yield stream lines raw("sh", ["-c", "i=0; while [ $i -lt 6 ]; do echo pulse-$i; i=$((i+1)); sleep 0.1; done"], [])

sse route metric pulses
  path "/sse/metrics"
  event Metric Pulse
  on connect stream from action stream metric pulses
  on disconnect return none

view live pulse feed
  subscribe to sse metric ticks
  when connecting render muted "Connecting to SSE feed…"
  when disconnected render danger "Feed ended"
  each pulse in messages render pulse.value

view metrics nav
  link "Home" to "/"
  render "Metrics"

layout metrics shell
  slot sidebar render metrics nav()
  slot main render "Metrics"

page home page
  layout metrics shell
  title "Metrics"
  description "Live SSE push feed"
  main render live pulse feed()

navigation metrics app
  path "/" page home page
  bootstrap router

command metrics demo
  output result: Text
  return "SSE metrics feed ready at /sse/metrics"

Golden (target)

module MetricsApp

external point std process
  stream lines raw(command: Text, args: List<Text>, env: List<Text>): Text from "@hatchingpoint/point/std/process" as processStreamLines

record Metric Pulse
  value: Text

action stream metric pulses
  output line: Text
  touches process
  yield stream lines raw("sh", ["-c", "i=0; while [ $i -lt 6 ]; do echo pulse-$i; i=$((i+1)); sleep 0.1; done"], [])

sse route metric pulses
  path "/sse/metrics"
  event Metric Pulse
  on connect stream from action stream metric pulses
  on disconnect return none

view live pulse feed
  subscribe to sse metric pulses
  when connecting render muted "Connecting to SSE feed…"
  when disconnected render danger "Feed ended"
  each pulse in messages render pulse.value

view metrics nav
  link "Home" to "/"
  render "Metrics"

layout metrics shell
  slot sidebar render metrics nav()
  slot main render "Metrics"

page home page
  layout metrics shell
  title "Metrics"
  description "Live SSE push feed"
  main render live pulse feed()

navigation metrics app
  path "/" page home page
  bootstrap router

command metrics demo
  output result: Text
  return "SSE metrics feed ready at /sse/metrics"
App repair

Ops — fix chart label field on dashboard

Fix the ops dashboard chart wiring — the bar chart uses label field title but Job Metric records expose label and value.

Point app
7979 lines (+0)
Point context
~166 tok check-json
TS heuristic
~6,000 tok
Saved
97%

Point — agent sees check-json

{
  "schemaVersion": "point.core.check.v1",
  "ok": false,
  "diagnostics": [
    {
      "code": "invalid-chart-field",
      "message": "View ops dashboard chart label field \"title\" is not on JobMetric",
      "path": "view.ops dashboard",
      "ref": "point://semantic/OpsApp/view.ops dashboard",
      "severity": "error",
      "span": {
        "start": {
          "line": 40,
          "column": 1,
          "offset": 871
        },
        "end": {
          "line": 40,
          "column": 66,
          "offset": 936
        }
      },
      "repair": "Use label field label.",
      "expected": [
        "label",
        "value"
      ]
    }
  ]
}

Next.js — ts heuristic

Fix MetricsChart dataKey in a Next.js ops dashboard — chart expects label field but component passes title from Metric type.

Point base → broken → golden

Base app

module OpsApp

record Job Row
  name: Text
  status: Text
  score: Int

record Job Metric
  label: Text
  value: Int

record Ops Dashboard
  jobs: List<Job Row>
  metrics: List<Job Metric>

record Enqueue Body
  name: Text

view ops nav
  link "Dashboard" to "/"
  link "Enqueue" to "/enqueue"
  render "Ops"

action list jobs
  output jobs: List<Job Row>
  touches none
  return [{ name: "sync", status: "ok", score: 95 }, { name: "import", status: "warn", score: 72 }]

action fetch ops dashboard
  output dashboard: Ops Dashboard
  touches none
  return { jobs: await list jobs(), metrics: [{ label: "Jobs", value: 12 }, { label: "Errors", value: 3 }] }

view ops dashboard
  load data from action fetch ops dashboard
  refresh every 15 seconds
  when loading render "Loading dashboard..."
  when error render "Dashboard failed"
  when empty render "No jobs in queue"
  chart bar from data.metrics label field label value field value
  datagrid row in data.jobs columns name, status, score sort by score filter by name page size 6

view enqueue job form
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  on change call on draft change
  form
  bind field "Job name" to draft.name
  toast on success "Job enqueued"
  toast on error "Enqueue failed"
  submit "Enqueue" POST "/api/jobs" body draft then navigate "/"

layout ops shell
  slot sidebar render ops nav()
  slot main render "Ops console"

page dashboard page
  layout ops shell
  title "Ops dashboard"
  description "Chart + datagrid overview"
  main render ops dashboard()

page enqueue page
  layout ops shell
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  title "Enqueue"
  description "Add a job to the queue"
  main render enqueue job form(draft, on draft change)

navigation ops app
  path "/" page dashboard page
  path "/enqueue" page enqueue page
  bootstrap router

command ops demo
  output result: Text
  return "Ops dashboard ready"

Broken (agent mistake)

module OpsApp

record Job Row
  name: Text
  status: Text
  score: Int

record Job Metric
  label: Text
  value: Int

record Ops Dashboard
  jobs: List<Job Row>
  metrics: List<Job Metric>

record Enqueue Body
  name: Text

view ops nav
  link "Dashboard" to "/"
  link "Enqueue" to "/enqueue"
  render "Ops"

action list jobs
  output jobs: List<Job Row>
  touches none
  return [{ name: "sync", status: "ok", score: 95 }, { name: "import", status: "warn", score: 72 }]

action fetch ops dashboard
  output dashboard: Ops Dashboard
  touches none
  return { jobs: await list jobs(), metrics: [{ label: "Jobs", value: 12 }, { label: "Errors", value: 3 }] }

view ops dashboard
  load data from action fetch ops dashboard
  refresh every 15 seconds
  when loading render "Loading dashboard..."
  when error render "Dashboard failed"
  when empty render "No jobs in queue"
  chart bar from data.metrics label field title value field value
  datagrid row in data.jobs columns name, status, score sort by score filter by name page size 6

view enqueue job form
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  on change call on draft change
  form
  bind field "Job name" to draft.name
  toast on success "Job enqueued"
  toast on error "Enqueue failed"
  submit "Enqueue" POST "/api/jobs" body draft then navigate "/"

layout ops shell
  slot sidebar render ops nav()
  slot main render "Ops console"

page dashboard page
  layout ops shell
  title "Ops dashboard"
  description "Chart + datagrid overview"
  main render ops dashboard()

page enqueue page
  layout ops shell
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  title "Enqueue"
  description "Add a job to the queue"
  main render enqueue job form(draft, on draft change)

navigation ops app
  path "/" page dashboard page
  path "/enqueue" page enqueue page
  bootstrap router

command ops demo
  output result: Text
  return "Ops dashboard ready"

Golden (target)

module OpsApp

record Job Row
  name: Text
  status: Text
  score: Int

record Job Metric
  label: Text
  value: Int

record Ops Dashboard
  jobs: List<Job Row>
  metrics: List<Job Metric>

record Enqueue Body
  name: Text

view ops nav
  link "Dashboard" to "/"
  link "Enqueue" to "/enqueue"
  render "Ops"

action list jobs
  output jobs: List<Job Row>
  touches none
  return [{ name: "sync", status: "ok", score: 95 }, { name: "import", status: "warn", score: 72 }]

action fetch ops dashboard
  output dashboard: Ops Dashboard
  touches none
  return { jobs: await list jobs(), metrics: [{ label: "Jobs", value: 12 }, { label: "Errors", value: 3 }] }

view ops dashboard
  load data from action fetch ops dashboard
  refresh every 15 seconds
  when loading render "Loading dashboard..."
  when error render "Dashboard failed"
  when empty render "No jobs in queue"
  chart bar from data.metrics label field label value field value
  datagrid row in data.jobs columns name, status, score sort by score filter by name page size 6

view enqueue job form
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  on change call on draft change
  form
  bind field "Job name" to draft.name
  toast on success "Job enqueued"
  toast on error "Enqueue failed"
  submit "Enqueue" POST "/api/jobs" body draft then navigate "/"

layout ops shell
  slot sidebar render ops nav()
  slot main render "Ops console"

page dashboard page
  layout ops shell
  title "Ops dashboard"
  description "Chart + datagrid overview"
  main render ops dashboard()

page enqueue page
  layout ops shell
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  title "Enqueue"
  description "Add a job to the queue"
  main render enqueue job form(draft, on draft change)

navigation ops app
  path "/" page dashboard page
  path "/enqueue" page enqueue page
  bootstrap router

command ops demo
  output result: Text
  return "Ops dashboard ready"
App repair

Ops — fix datagrid sort column on dashboard

Fix the ops dashboard datagrid sort column — sort by title but columns are name, status, and score.

Point app
7979 lines (+0)
Point context
~180 tok check-json
TS heuristic
~6,000 tok
Saved
97%

Point — agent sees check-json

{
  "schemaVersion": "point.core.check.v1",
  "ok": false,
  "diagnostics": [
    {
      "code": "invalid-datagrid-sort-column",
      "message": "View ops dashboard datagrid sort by column must appear in columns list",
      "path": "view.ops dashboard",
      "ref": "point://semantic/OpsApp/view.ops dashboard",
      "severity": "error",
      "span": {
        "start": {
          "line": 41,
          "column": 1,
          "offset": 937
        },
        "end": {
          "line": 41,
          "column": 97,
          "offset": 1033
        }
      },
      "repair": "Add title to the columns list or fix sort by.",
      "expected": [
        "name",
        "status",
        "score"
      ]
    }
  ]
}

Next.js — ts heuristic

Fix JobsGrid sortBy in a Next.js ops dashboard — datagrid columns are name/status/score but sort uses title.

Point base → broken → golden

Base app

module OpsApp

record Job Row
  name: Text
  status: Text
  score: Int

record Job Metric
  label: Text
  value: Int

record Ops Dashboard
  jobs: List<Job Row>
  metrics: List<Job Metric>

record Enqueue Body
  name: Text

view ops nav
  link "Dashboard" to "/"
  link "Enqueue" to "/enqueue"
  render "Ops"

action list jobs
  output jobs: List<Job Row>
  touches none
  return [{ name: "sync", status: "ok", score: 95 }, { name: "import", status: "warn", score: 72 }]

action fetch ops dashboard
  output dashboard: Ops Dashboard
  touches none
  return { jobs: await list jobs(), metrics: [{ label: "Jobs", value: 12 }, { label: "Errors", value: 3 }] }

view ops dashboard
  load data from action fetch ops dashboard
  refresh every 15 seconds
  when loading render "Loading dashboard..."
  when error render "Dashboard failed"
  when empty render "No jobs in queue"
  chart bar from data.metrics label field label value field value
  datagrid row in data.jobs columns name, status, score sort by score filter by name page size 6

view enqueue job form
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  on change call on draft change
  form
  bind field "Job name" to draft.name
  toast on success "Job enqueued"
  toast on error "Enqueue failed"
  submit "Enqueue" POST "/api/jobs" body draft then navigate "/"

layout ops shell
  slot sidebar render ops nav()
  slot main render "Ops console"

page dashboard page
  layout ops shell
  title "Ops dashboard"
  description "Chart + datagrid overview"
  main render ops dashboard()

page enqueue page
  layout ops shell
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  title "Enqueue"
  description "Add a job to the queue"
  main render enqueue job form(draft, on draft change)

navigation ops app
  path "/" page dashboard page
  path "/enqueue" page enqueue page
  bootstrap router

command ops demo
  output result: Text
  return "Ops dashboard ready"

Broken (agent mistake)

module OpsApp

record Job Row
  name: Text
  status: Text
  score: Int

record Job Metric
  label: Text
  value: Int

record Ops Dashboard
  jobs: List<Job Row>
  metrics: List<Job Metric>

record Enqueue Body
  name: Text

view ops nav
  link "Dashboard" to "/"
  link "Enqueue" to "/enqueue"
  render "Ops"

action list jobs
  output jobs: List<Job Row>
  touches none
  return [{ name: "sync", status: "ok", score: 95 }, { name: "import", status: "warn", score: 72 }]

action fetch ops dashboard
  output dashboard: Ops Dashboard
  touches none
  return { jobs: await list jobs(), metrics: [{ label: "Jobs", value: 12 }, { label: "Errors", value: 3 }] }

view ops dashboard
  load data from action fetch ops dashboard
  refresh every 15 seconds
  when loading render "Loading dashboard..."
  when error render "Dashboard failed"
  when empty render "No jobs in queue"
  chart bar from data.metrics label field label value field value
  datagrid row in data.jobs columns name, status, score sort by title filter by name page size 6

view enqueue job form
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  on change call on draft change
  form
  bind field "Job name" to draft.name
  toast on success "Job enqueued"
  toast on error "Enqueue failed"
  submit "Enqueue" POST "/api/jobs" body draft then navigate "/"

layout ops shell
  slot sidebar render ops nav()
  slot main render "Ops console"

page dashboard page
  layout ops shell
  title "Ops dashboard"
  description "Chart + datagrid overview"
  main render ops dashboard()

page enqueue page
  layout ops shell
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  title "Enqueue"
  description "Add a job to the queue"
  main render enqueue job form(draft, on draft change)

navigation ops app
  path "/" page dashboard page
  path "/enqueue" page enqueue page
  bootstrap router

command ops demo
  output result: Text
  return "Ops dashboard ready"

Golden (target)

module OpsApp

record Job Row
  name: Text
  status: Text
  score: Int

record Job Metric
  label: Text
  value: Int

record Ops Dashboard
  jobs: List<Job Row>
  metrics: List<Job Metric>

record Enqueue Body
  name: Text

view ops nav
  link "Dashboard" to "/"
  link "Enqueue" to "/enqueue"
  render "Ops"

action list jobs
  output jobs: List<Job Row>
  touches none
  return [{ name: "sync", status: "ok", score: 95 }, { name: "import", status: "warn", score: 72 }]

action fetch ops dashboard
  output dashboard: Ops Dashboard
  touches none
  return { jobs: await list jobs(), metrics: [{ label: "Jobs", value: 12 }, { label: "Errors", value: 3 }] }

view ops dashboard
  load data from action fetch ops dashboard
  refresh every 15 seconds
  when loading render "Loading dashboard..."
  when error render "Dashboard failed"
  when empty render "No jobs in queue"
  chart bar from data.metrics label field label value field value
  datagrid row in data.jobs columns name, status, score sort by score filter by name page size 6

view enqueue job form
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  on change call on draft change
  form
  bind field "Job name" to draft.name
  toast on success "Job enqueued"
  toast on error "Enqueue failed"
  submit "Enqueue" POST "/api/jobs" body draft then navigate "/"

layout ops shell
  slot sidebar render ops nav()
  slot main render "Ops console"

page dashboard page
  layout ops shell
  title "Ops dashboard"
  description "Chart + datagrid overview"
  main render ops dashboard()

page enqueue page
  layout ops shell
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  title "Enqueue"
  description "Add a job to the queue"
  main render enqueue job form(draft, on draft change)

navigation ops app
  path "/" page dashboard page
  path "/enqueue" page enqueue page
  bootstrap router

command ops demo
  output result: Text
  return "Ops dashboard ready"
App repair

Ops — fix datagrid filter column on dashboard

Fix the ops dashboard datagrid filter column — filter by title but columns are name, status, and score.

Point app
7979 lines (+0)
Point context
~181 tok check-json
TS heuristic
~6,000 tok
Saved
97%

Point — agent sees check-json

{
  "schemaVersion": "point.core.check.v1",
  "ok": false,
  "diagnostics": [
    {
      "code": "invalid-datagrid-filter-column",
      "message": "View ops dashboard datagrid filter by column must appear in columns list",
      "path": "view.ops dashboard",
      "ref": "point://semantic/OpsApp/view.ops dashboard",
      "severity": "error",
      "span": {
        "start": {
          "line": 41,
          "column": 1,
          "offset": 937
        },
        "end": {
          "line": 41,
          "column": 98,
          "offset": 1034
        }
      },
      "repair": "Add title to the columns list or fix filter by.",
      "expected": [
        "name",
        "status",
        "score"
      ]
    }
  ]
}

Next.js — ts heuristic

Fix JobsGrid filterColumn in a Next.js ops dashboard — datagrid columns are name/status/score but filter uses title.

Point base → broken → golden

Base app

module OpsApp

record Job Row
  name: Text
  status: Text
  score: Int

record Job Metric
  label: Text
  value: Int

record Ops Dashboard
  jobs: List<Job Row>
  metrics: List<Job Metric>

record Enqueue Body
  name: Text

view ops nav
  link "Dashboard" to "/"
  link "Enqueue" to "/enqueue"
  render "Ops"

action list jobs
  output jobs: List<Job Row>
  touches none
  return [{ name: "sync", status: "ok", score: 95 }, { name: "import", status: "warn", score: 72 }]

action fetch ops dashboard
  output dashboard: Ops Dashboard
  touches none
  return { jobs: await list jobs(), metrics: [{ label: "Jobs", value: 12 }, { label: "Errors", value: 3 }] }

view ops dashboard
  load data from action fetch ops dashboard
  refresh every 15 seconds
  when loading render "Loading dashboard..."
  when error render "Dashboard failed"
  when empty render "No jobs in queue"
  chart bar from data.metrics label field label value field value
  datagrid row in data.jobs columns name, status, score sort by score filter by name page size 6

view enqueue job form
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  on change call on draft change
  form
  bind field "Job name" to draft.name
  toast on success "Job enqueued"
  toast on error "Enqueue failed"
  submit "Enqueue" POST "/api/jobs" body draft then navigate "/"

layout ops shell
  slot sidebar render ops nav()
  slot main render "Ops console"

page dashboard page
  layout ops shell
  title "Ops dashboard"
  description "Chart + datagrid overview"
  main render ops dashboard()

page enqueue page
  layout ops shell
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  title "Enqueue"
  description "Add a job to the queue"
  main render enqueue job form(draft, on draft change)

navigation ops app
  path "/" page dashboard page
  path "/enqueue" page enqueue page
  bootstrap router

command ops demo
  output result: Text
  return "Ops dashboard ready"

Broken (agent mistake)

module OpsApp

record Job Row
  name: Text
  status: Text
  score: Int

record Job Metric
  label: Text
  value: Int

record Ops Dashboard
  jobs: List<Job Row>
  metrics: List<Job Metric>

record Enqueue Body
  name: Text

view ops nav
  link "Dashboard" to "/"
  link "Enqueue" to "/enqueue"
  render "Ops"

action list jobs
  output jobs: List<Job Row>
  touches none
  return [{ name: "sync", status: "ok", score: 95 }, { name: "import", status: "warn", score: 72 }]

action fetch ops dashboard
  output dashboard: Ops Dashboard
  touches none
  return { jobs: await list jobs(), metrics: [{ label: "Jobs", value: 12 }, { label: "Errors", value: 3 }] }

view ops dashboard
  load data from action fetch ops dashboard
  refresh every 15 seconds
  when loading render "Loading dashboard..."
  when error render "Dashboard failed"
  when empty render "No jobs in queue"
  chart bar from data.metrics label field label value field value
  datagrid row in data.jobs columns name, status, score sort by score filter by title page size 6

view enqueue job form
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  on change call on draft change
  form
  bind field "Job name" to draft.name
  toast on success "Job enqueued"
  toast on error "Enqueue failed"
  submit "Enqueue" POST "/api/jobs" body draft then navigate "/"

layout ops shell
  slot sidebar render ops nav()
  slot main render "Ops console"

page dashboard page
  layout ops shell
  title "Ops dashboard"
  description "Chart + datagrid overview"
  main render ops dashboard()

page enqueue page
  layout ops shell
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  title "Enqueue"
  description "Add a job to the queue"
  main render enqueue job form(draft, on draft change)

navigation ops app
  path "/" page dashboard page
  path "/enqueue" page enqueue page
  bootstrap router

command ops demo
  output result: Text
  return "Ops dashboard ready"

Golden (target)

module OpsApp

record Job Row
  name: Text
  status: Text
  score: Int

record Job Metric
  label: Text
  value: Int

record Ops Dashboard
  jobs: List<Job Row>
  metrics: List<Job Metric>

record Enqueue Body
  name: Text

view ops nav
  link "Dashboard" to "/"
  link "Enqueue" to "/enqueue"
  render "Ops"

action list jobs
  output jobs: List<Job Row>
  touches none
  return [{ name: "sync", status: "ok", score: 95 }, { name: "import", status: "warn", score: 72 }]

action fetch ops dashboard
  output dashboard: Ops Dashboard
  touches none
  return { jobs: await list jobs(), metrics: [{ label: "Jobs", value: 12 }, { label: "Errors", value: 3 }] }

view ops dashboard
  load data from action fetch ops dashboard
  refresh every 15 seconds
  when loading render "Loading dashboard..."
  when error render "Dashboard failed"
  when empty render "No jobs in queue"
  chart bar from data.metrics label field label value field value
  datagrid row in data.jobs columns name, status, score sort by score filter by name page size 6

view enqueue job form
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  on change call on draft change
  form
  bind field "Job name" to draft.name
  toast on success "Job enqueued"
  toast on error "Enqueue failed"
  submit "Enqueue" POST "/api/jobs" body draft then navigate "/"

layout ops shell
  slot sidebar render ops nav()
  slot main render "Ops console"

page dashboard page
  layout ops shell
  title "Ops dashboard"
  description "Chart + datagrid overview"
  main render ops dashboard()

page enqueue page
  layout ops shell
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  title "Enqueue"
  description "Add a job to the queue"
  main render enqueue job form(draft, on draft change)

navigation ops app
  path "/" page dashboard page
  path "/enqueue" page enqueue page
  bootstrap router

command ops demo
  output result: Text
  return "Ops dashboard ready"
App repair

Ops — fix datagrid page size on dashboard

Fix the ops dashboard datagrid page size — page size 0 must be a positive integer.

Point app
7979 lines (+0)
Point context
~163 tok check-json
TS heuristic
~6,000 tok
Saved
97%

Point — agent sees check-json

{
  "schemaVersion": "point.core.check.v1",
  "ok": false,
  "diagnostics": [
    {
      "code": "invalid-datagrid-page-size",
      "message": "View ops dashboard datagrid page size must be a positive integer",
      "path": "view.ops dashboard",
      "ref": "point://semantic/OpsApp/view.ops dashboard",
      "severity": "error",
      "span": {
        "start": {
          "line": 41,
          "column": 1,
          "offset": 937
        },
        "end": {
          "line": 41,
          "column": 97,
          "offset": 1033
        }
      },
      "repair": "Use page size 10 or another positive number.",
      "expected": 10
    }
  ]
}

Next.js — ts heuristic

Fix JobsGrid pageSize in a Next.js ops dashboard — pagination size must be greater than zero.

Point base → broken → golden

Base app

module OpsApp

record Job Row
  name: Text
  status: Text
  score: Int

record Job Metric
  label: Text
  value: Int

record Ops Dashboard
  jobs: List<Job Row>
  metrics: List<Job Metric>

record Enqueue Body
  name: Text

view ops nav
  link "Dashboard" to "/"
  link "Enqueue" to "/enqueue"
  render "Ops"

action list jobs
  output jobs: List<Job Row>
  touches none
  return [{ name: "sync", status: "ok", score: 95 }, { name: "import", status: "warn", score: 72 }]

action fetch ops dashboard
  output dashboard: Ops Dashboard
  touches none
  return { jobs: await list jobs(), metrics: [{ label: "Jobs", value: 12 }, { label: "Errors", value: 3 }] }

view ops dashboard
  load data from action fetch ops dashboard
  refresh every 15 seconds
  when loading render "Loading dashboard..."
  when error render "Dashboard failed"
  when empty render "No jobs in queue"
  chart bar from data.metrics label field label value field value
  datagrid row in data.jobs columns name, status, score sort by score filter by name page size 6

view enqueue job form
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  on change call on draft change
  form
  bind field "Job name" to draft.name
  toast on success "Job enqueued"
  toast on error "Enqueue failed"
  submit "Enqueue" POST "/api/jobs" body draft then navigate "/"

layout ops shell
  slot sidebar render ops nav()
  slot main render "Ops console"

page dashboard page
  layout ops shell
  title "Ops dashboard"
  description "Chart + datagrid overview"
  main render ops dashboard()

page enqueue page
  layout ops shell
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  title "Enqueue"
  description "Add a job to the queue"
  main render enqueue job form(draft, on draft change)

navigation ops app
  path "/" page dashboard page
  path "/enqueue" page enqueue page
  bootstrap router

command ops demo
  output result: Text
  return "Ops dashboard ready"

Broken (agent mistake)

module OpsApp

record Job Row
  name: Text
  status: Text
  score: Int

record Job Metric
  label: Text
  value: Int

record Ops Dashboard
  jobs: List<Job Row>
  metrics: List<Job Metric>

record Enqueue Body
  name: Text

view ops nav
  link "Dashboard" to "/"
  link "Enqueue" to "/enqueue"
  render "Ops"

action list jobs
  output jobs: List<Job Row>
  touches none
  return [{ name: "sync", status: "ok", score: 95 }, { name: "import", status: "warn", score: 72 }]

action fetch ops dashboard
  output dashboard: Ops Dashboard
  touches none
  return { jobs: await list jobs(), metrics: [{ label: "Jobs", value: 12 }, { label: "Errors", value: 3 }] }

view ops dashboard
  load data from action fetch ops dashboard
  refresh every 15 seconds
  when loading render "Loading dashboard..."
  when error render "Dashboard failed"
  when empty render "No jobs in queue"
  chart bar from data.metrics label field label value field value
  datagrid row in data.jobs columns name, status, score sort by score filter by name page size 0

view enqueue job form
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  on change call on draft change
  form
  bind field "Job name" to draft.name
  toast on success "Job enqueued"
  toast on error "Enqueue failed"
  submit "Enqueue" POST "/api/jobs" body draft then navigate "/"

layout ops shell
  slot sidebar render ops nav()
  slot main render "Ops console"

page dashboard page
  layout ops shell
  title "Ops dashboard"
  description "Chart + datagrid overview"
  main render ops dashboard()

page enqueue page
  layout ops shell
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  title "Enqueue"
  description "Add a job to the queue"
  main render enqueue job form(draft, on draft change)

navigation ops app
  path "/" page dashboard page
  path "/enqueue" page enqueue page
  bootstrap router

command ops demo
  output result: Text
  return "Ops dashboard ready"

Golden (target)

module OpsApp

record Job Row
  name: Text
  status: Text
  score: Int

record Job Metric
  label: Text
  value: Int

record Ops Dashboard
  jobs: List<Job Row>
  metrics: List<Job Metric>

record Enqueue Body
  name: Text

view ops nav
  link "Dashboard" to "/"
  link "Enqueue" to "/enqueue"
  render "Ops"

action list jobs
  output jobs: List<Job Row>
  touches none
  return [{ name: "sync", status: "ok", score: 95 }, { name: "import", status: "warn", score: 72 }]

action fetch ops dashboard
  output dashboard: Ops Dashboard
  touches none
  return { jobs: await list jobs(), metrics: [{ label: "Jobs", value: 12 }, { label: "Errors", value: 3 }] }

view ops dashboard
  load data from action fetch ops dashboard
  refresh every 15 seconds
  when loading render "Loading dashboard..."
  when error render "Dashboard failed"
  when empty render "No jobs in queue"
  chart bar from data.metrics label field label value field value
  datagrid row in data.jobs columns name, status, score sort by score filter by name page size 6

view enqueue job form
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  on change call on draft change
  form
  bind field "Job name" to draft.name
  toast on success "Job enqueued"
  toast on error "Enqueue failed"
  submit "Enqueue" POST "/api/jobs" body draft then navigate "/"

layout ops shell
  slot sidebar render ops nav()
  slot main render "Ops console"

page dashboard page
  layout ops shell
  title "Ops dashboard"
  description "Chart + datagrid overview"
  main render ops dashboard()

page enqueue page
  layout ops shell
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  title "Enqueue"
  description "Add a job to the queue"
  main render enqueue job form(draft, on draft change)

navigation ops app
  path "/" page dashboard page
  path "/enqueue" page enqueue page
  bootstrap router

command ops demo
  output result: Text
  return "Ops dashboard ready"
App repair

Ops — wire load data before live refresh

Fix the ops dashboard live refresh wiring — refresh every is present but load data from action is missing.

Point app
7979 lines (+0)
Point context
~235 tok check-json
TS heuristic
~6,000 tok
Saved
96%

Point — agent sees check-json

{
  "schemaVersion": "point.core.check.v1",
  "ok": false,
  "diagnostics": [
    {
      "code": "refresh-without-load",
      "message": "View ops dashboard uses refresh every without load data from action, on mount call, or load data from fetch",
      "path": "view.ops dashboard",
      "ref": "point://semantic/OpsApp/view.ops dashboard",
      "severity": "error",
      "span": {
        "start": {
          "line": 35,
          "column": 1,
          "offset": 677
        },
        "end": {
          "line": 35,
          "column": 27,
          "offset": 703
        }
      },
      "expected": [
        "load data from action fetch ops dashboard",
        "load data from action list jobs"
      ],
      "repair": "Add load data from action <name> (or on mount call, or load data from fetch GET ...) before refresh every.",
      "relatedRefs": [
        "point://semantic/OpsApp/view.ops dashboard"
      ]
    }
  ]
}

Next.js — ts heuristic

Fix live dashboard polling in a Next.js ops app — setInterval refresh exists but data loader hook is missing.

Point base → broken → golden

Base app

module OpsApp

record Job Row
  name: Text
  status: Text
  score: Int

record Job Metric
  label: Text
  value: Int

record Ops Dashboard
  jobs: List<Job Row>
  metrics: List<Job Metric>

record Enqueue Body
  name: Text

view ops nav
  link "Dashboard" to "/"
  link "Enqueue" to "/enqueue"
  render "Ops"

action list jobs
  output jobs: List<Job Row>
  touches none
  return [{ name: "sync", status: "ok", score: 95 }, { name: "import", status: "warn", score: 72 }]

action fetch ops dashboard
  output dashboard: Ops Dashboard
  touches none
  return { jobs: await list jobs(), metrics: [{ label: "Jobs", value: 12 }, { label: "Errors", value: 3 }] }

view ops dashboard
  load data from action fetch ops dashboard
  refresh every 15 seconds
  when loading render "Loading dashboard..."
  when error render "Dashboard failed"
  when empty render "No jobs in queue"
  chart bar from data.metrics label field label value field value
  datagrid row in data.jobs columns name, status, score sort by score filter by name page size 6

view enqueue job form
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  on change call on draft change
  form
  bind field "Job name" to draft.name
  toast on success "Job enqueued"
  toast on error "Enqueue failed"
  submit "Enqueue" POST "/api/jobs" body draft then navigate "/"

layout ops shell
  slot sidebar render ops nav()
  slot main render "Ops console"

page dashboard page
  layout ops shell
  title "Ops dashboard"
  description "Chart + datagrid overview"
  main render ops dashboard()

page enqueue page
  layout ops shell
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  title "Enqueue"
  description "Add a job to the queue"
  main render enqueue job form(draft, on draft change)

navigation ops app
  path "/" page dashboard page
  path "/enqueue" page enqueue page
  bootstrap router

command ops demo
  output result: Text
  return "Ops dashboard ready"

Broken (agent mistake)

module OpsApp

record Job Row
  name: Text
  status: Text
  score: Int

record Job Metric
  label: Text
  value: Int

record Ops Dashboard
  jobs: List<Job Row>
  metrics: List<Job Metric>

record Enqueue Body
  name: Text

view ops nav
  link "Dashboard" to "/"
  link "Enqueue" to "/enqueue"
  render "Ops"

action list jobs
  output jobs: List<Job Row>
  touches none
  return [{ name: "sync", status: "ok", score: 95 }, { name: "import", status: "warn", score: 72 }]

action fetch ops dashboard
  output dashboard: Ops Dashboard
  touches none
  return { jobs: await list jobs(), metrics: [{ label: "Jobs", value: 12 }, { label: "Errors", value: 3 }] }

view ops dashboard
  refresh every 15 seconds
  when loading render "Loading dashboard..."
  when error render "Dashboard failed"
  when empty render "No jobs in queue"
  render "Jobs dashboard"

view enqueue job form
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  on change call on draft change
  form
  bind field "Job name" to draft.name
  toast on success "Job enqueued"
  toast on error "Enqueue failed"
  submit "Enqueue" POST "/api/jobs" body draft then navigate "/"

layout ops shell
  slot sidebar render ops nav()
  slot main render "Ops console"

page dashboard page
  layout ops shell
  title "Ops dashboard"
  description "Chart + datagrid overview"
  main render ops dashboard()

page enqueue page
  layout ops shell
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  title "Enqueue"
  description "Add a job to the queue"
  main render enqueue job form(draft, on draft change)

navigation ops app
  path "/" page dashboard page
  path "/enqueue" page enqueue page
  bootstrap router

command ops demo
  output result: Text
  return "Ops dashboard ready"

Golden (target)

module OpsApp

record Job Row
  name: Text
  status: Text
  score: Int

record Job Metric
  label: Text
  value: Int

record Ops Dashboard
  jobs: List<Job Row>
  metrics: List<Job Metric>

record Enqueue Body
  name: Text

view ops nav
  link "Dashboard" to "/"
  link "Enqueue" to "/enqueue"
  render "Ops"

action list jobs
  output jobs: List<Job Row>
  touches none
  return [{ name: "sync", status: "ok", score: 95 }, { name: "import", status: "warn", score: 72 }]

action fetch ops dashboard
  output dashboard: Ops Dashboard
  touches none
  return { jobs: await list jobs(), metrics: [{ label: "Jobs", value: 12 }, { label: "Errors", value: 3 }] }

view ops dashboard
  load data from action fetch ops dashboard
  refresh every 15 seconds
  when loading render "Loading dashboard..."
  when error render "Dashboard failed"
  when empty render "No jobs in queue"
  chart bar from data.metrics label field label value field value
  datagrid row in data.jobs columns name, status, score sort by score filter by name page size 6

view enqueue job form
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  on change call on draft change
  form
  bind field "Job name" to draft.name
  toast on success "Job enqueued"
  toast on error "Enqueue failed"
  submit "Enqueue" POST "/api/jobs" body draft then navigate "/"

layout ops shell
  slot sidebar render ops nav()
  slot main render "Ops console"

page dashboard page
  layout ops shell
  title "Ops dashboard"
  description "Chart + datagrid overview"
  main render ops dashboard()

page enqueue page
  layout ops shell
  input draft: Enqueue Body
  input on draft change: Handler<Enqueue Body>
  title "Enqueue"
  description "Add a job to the queue"
  main render enqueue job form(draft, on draft change)

navigation ops app
  path "/" page dashboard page
  path "/enqueue" page enqueue page
  bootstrap router

command ops demo
  output result: Text
  return "Ops dashboard ready"
App repair

Notes — wire detail page load action

Fix the note detail view load wiring — the view calls fetch note but the action is named get note.

Point app
9295 lines (+3)
Point context
~209 tok check-json
Measured Next scaffold
~820 tok
Saved
75%

Point — agent sees check-json

{
  "schemaVersion": "point.core.check.v1",
  "ok": false,
  "diagnostics": [
    {
      "code": "unknown-load-action",
      "message": "View note detail loads unknown action fetch note",
      "path": "view.note detail",
      "ref": "point://semantic/NotesApp/view.note detail",
      "severity": "error",
      "span": {
        "start": {
          "line": 47,
          "column": 1,
          "offset": 1024
        },
        "end": {
          "line": 47,
          "column": 35,
          "offset": 1058
        }
      },
      "expected": [
        "create note",
        "get note",
        "list notes"
      ],
      "actual": "fetch note",
      "repair": "Declare action fetch note or fix the load data from action name.",
      "relatedRefs": [
        "point://semantic/NotesApp/view.note detail"
      ]
    }
  ]
}

Next.js — measured next scaffold

Fix NoteDetail loader in a Next.js notes app — component imports fetchNote but action is getNote.

Missing in broken scaffold: lib/getNote.ts

// app/notes/layout.tsx
import { NotesNav } from "../../components/NotesNav";

export default function NotesLayout({ children }: { children: React.ReactNode }) {
  return (
    <div>
      <aside>
        <NotesNav />
      </aside>
      <main>{children}</main>
    </div>
  );
}

// app/notes/page.tsx
import { NotesList } from "../../../components/NotesList";
import { listNotes } from "../../../lib/notes";

export default async function NotesPage() {
  const notes = await listNotes();
  return (
    <section>
      <h1>Notes</h1>
      <NotesList notes={notes} />
    </section>
  );
}

// app/notes/new/page.tsx
import { NoteCreateForm } from "../../../components/NoteCreateForm";

const draft = { title: "", body: "" };

export default function NewNotePage() {
  return (
    <section>
      <h1>New note</h1>
      <NoteCreateForm draft={draft} onDraftChange={() => undefined} />
    </section>
  );
}

// app/notes/[id]/page.tsx
import { NoteDetail } from "../../../components/NoteDetail";

export default async function NoteDetailPage({ params }: { params: { id: string } }) {
  return (
    <section>
      <h1>Note detail</h1>
      <NoteDetail id={params.id} />
    </section>
  );
}

Old illustrative paste heuristic was ~4,500 tok — 82% larger than measured scaffold.

Point base → broken → golden

Base app

module NotesApp

record Note
  id: Text
  title: Text
  body: Text

record Create Note Input
  title: Text
  body: Text

calculation sample notes
  output notes: List<Note>
  return [{ id: "n1", title: "Hello", body: "World" }, { id: "n2", title: "Draft", body: "Work in progress" }]

action list notes
  output notes: List<Note>
  touches none
  return sample notes()

action create note
  input input: Create Note Input
  output note: Note
  touches none
  return { id: "new", title: input.title, body: input.body }

action get note
  input id: Text
  output note: Note
  touches none
  return { id: id, title: "Note " + id, body: "Detail for " + id }

view notes nav
  link "Notes" to "/notes"
  link "New note" to "/notes/new"
  render "Notes app"

view notes list
  load data from action list notes
  when loading render "Loading notes..."
  when error render "Could not load notes"
  when empty render "No notes yet"
  each note in data render link note.title to "/notes/" + note.id

view note detail
  input id: Text
  render "Note detail for " + id

view note create form
  input draft: Create Note Input
  input on draft change: Handler<Create Note Input>
  on change call on draft change
  form
  bind field "Title" to draft.title
  bind field "Body" to draft.body
  render "Create a note"

layout notes shell
  slot sidebar render notes nav()
  slot main render "Select a notes page"

page notes list page
  layout notes shell
  title "Notes"
  description "Browse saved notes"
  main render notes list()

page note create page
  layout notes shell
  input draft: Create Note Input
  input on draft change: Handler<Create Note Input>
  title "New note"
  description "Create a note"
  main render note create form(draft, on draft change)

page note detail page
  layout notes shell
  input id: Text
  title "Note detail"
  description "Read a saved note"
  main render note detail(id)

navigation notes app
  path "/notes" page notes list page
  path "/notes/new" page note create page
  path "/notes/:id" page note detail page
  bootstrap router

command notes demo
  output result: Text
  return "Notes app ready"

Broken (agent mistake)

module NotesApp

record Note
  id: Text
  title: Text
  body: Text

record Create Note Input
  title: Text
  body: Text

calculation sample notes
  output notes: List<Note>
  return [{ id: "n1", title: "Hello", body: "World" }, { id: "n2", title: "Draft", body: "Work in progress" }]

action list notes
  output notes: List<Note>
  touches none
  return sample notes()

action create note
  input input: Create Note Input
  output note: Note
  touches none
  return { id: "new", title: input.title, body: input.body }

action get note
  input id: Text
  output note: Note
  touches none
  return { id: id, title: "Note " + id, body: "Detail for " + id }

view notes nav
  link "Notes" to "/notes"
  link "New note" to "/notes/new"
  render "Notes app"

view notes list
  load data from action list notes
  when loading render "Loading notes..."
  when error render "Could not load notes"
  when empty render "No notes yet"
  each note in data render link note.title to "/notes/" + note.id

view note detail
  input id: Text
  load data from action fetch note
  when loading render "Loading note..."
  when error render "Could not load note"
  render "Note detail for " + id

view note create form
  input draft: Create Note Input
  input on draft change: Handler<Create Note Input>
  on change call on draft change
  form
  bind field "Title" to draft.title
  bind field "Body" to draft.body
  render "Create a note"

layout notes shell
  slot sidebar render notes nav()
  slot main render "Select a notes page"

page notes list page
  layout notes shell
  title "Notes"
  description "Browse saved notes"
  main render notes list()

page note create page
  layout notes shell
  input draft: Create Note Input
  input on draft change: Handler<Create Note Input>
  title "New note"
  description "Create a note"
  main render note create form(draft, on draft change)

page note detail page
  layout notes shell
  input id: Text
  title "Note detail"
  description "Read a saved note"
  main render note detail(id)

navigation notes app
  path "/notes" page notes list page
  path "/notes/new" page note create page
  path "/notes/:id" page note detail page
  bootstrap router

command notes demo
  output result: Text
  return "Notes app ready"

Golden (target)

module NotesApp

record Note
  id: Text
  title: Text
  body: Text

record Create Note Input
  title: Text
  body: Text

calculation sample notes
  output notes: List<Note>
  return [{ id: "n1", title: "Hello", body: "World" }, { id: "n2", title: "Draft", body: "Work in progress" }]

action list notes
  output notes: List<Note>
  touches none
  return sample notes()

action create note
  input input: Create Note Input
  output note: Note
  touches none
  return { id: "new", title: input.title, body: input.body }

action get note
  input id: Text
  output note: Note
  touches none
  return { id: id, title: "Note " + id, body: "Detail for " + id }

view notes nav
  link "Notes" to "/notes"
  link "New note" to "/notes/new"
  render "Notes app"

view notes list
  load data from action list notes
  when loading render "Loading notes..."
  when error render "Could not load notes"
  when empty render "No notes yet"
  each note in data render link note.title to "/notes/" + note.id

view note detail
  input id: Text
  load data from action get note
  when loading render "Loading note..."
  when error render "Could not load note"
  render "Note detail for " + id

view note create form
  input draft: Create Note Input
  input on draft change: Handler<Create Note Input>
  on change call on draft change
  form
  bind field "Title" to draft.title
  bind field "Body" to draft.body
  render "Create a note"

layout notes shell
  slot sidebar render notes nav()
  slot main render "Select a notes page"

page notes list page
  layout notes shell
  title "Notes"
  description "Browse saved notes"
  main render notes list()

page note create page
  layout notes shell
  input draft: Create Note Input
  input on draft change: Handler<Create Note Input>
  title "New note"
  description "Create a note"
  main render note create form(draft, on draft change)

page note detail page
  layout notes shell
  input id: Text
  title "Note detail"
  description "Read a saved note"
  main render note detail(id)

navigation notes app
  path "/notes" page notes list page
  path "/notes/new" page note create page
  path "/notes/:id" page note detail page
  bootstrap router

command notes demo
  output result: Text
  return "Notes app ready"

Reproduce: bun run benchmark:agent-app, bun test tests/agent-app-benchmark.test.ts tests/next-dashboard-scaffold.test.ts in the Point repo. Next.js scaffolds live in benchmarks/next-dashboard/.

Live model eval (optional)

Full-app fixtures use multi-edit JSON for feature-add and single-line fixes for app-repair. Run with API keys, then sync results here.

bun run benchmark:agent-app-models && cd ../LandingPage && bun run sync:agent-app-model-results

CI verified — no LLM

39/39 fixtures pass

39 fixtures · 9 feature-build · 4 repair-plan loop · check-json ~170–260 tok vs TS paste · 7892% less context.

bun run proof:agent-repair

Full CI suite: bun test tests/agent-repair-sufficiency.test.ts tests/agent-repair-multistep.test.ts && bun run benchmark:agent-repair

View test source on GitHub →

Live model benchmark

Point 100% · TS 100%

May 22, 2026, 3:16 AM · gpt-4.1, claude-opus-4-6, claude-sonnet-4-6 on 13 fixtures (35 single-shot, 4 CI-only loop). Success = point check passes.

Latest proof run: 78/78 API runs pass point check.

  • Claude Opus 4.6Point 13/13 · TS 13/13
  • Claude Sonnet 4.6Point 13/13 · TS 13/13
  • GPT-4.1Point 13/13 · TS 13/13
Full benchmark table →

AI auto-coding scenarios

These fixtures simulate a coding agent that scaffolded a real multi-block feature — views, pipelines, routing, guards — then left one wiring bug. CI proves check-json alone is enough to fix it without repasting the whole scaffold.

Single-shot fix

Feature — dashboard items list

Build a mini dashboard app with sidebar nav, items list view with loading states, layout, page, and client routing.

Diagnostic
missing-await
check-json
~278 tok
TS paste
~3,500 tok
Saved
92%
Single-shot fix

Feature — document ingest pipeline

Build a document ingest pipeline with URL policy, fetch/parse/store actions, and retry on fetch.

Diagnostic
missing-await
check-json
~202 tok
TS paste
~2,450 tok
Saved
92%
Single-shot fix

Feature — notes list app

Build a notes CRUD shell with list action, loading view, layout, page, and navigation.

Diagnostic
unknown-load-action
check-json
~197 tok
TS paste
~2,125 tok
Saved
91%
Single-shot fix

Feature — settings app routes

Build a settings app with layout, settings/profile pages, nav links, and client routing.

Diagnostic
unknown-nav-page
check-json
~212 tok
TS paste
~1,550 tok
Saved
86%
Single-shot fix

Feature — guarded file write pipeline

Build a guarded file-write pipeline with output guard, URL policy, write action, and policy-gated pipeline step.

Diagnostic
unknown-policy
check-json
~196 tok
TS paste
~2,275 tok
Saved
91%

Feature-build fixtures alone: 8692% less context than illustrative TS paste (avg 90%).

Real agent loop: check → fix → check again

When an auto-coding agent rushes a feature, you often get multiple errors. Point's documented loop uses check-json (or repair-plan) each turn — never repasting the whole repo. CI simulates this with golden line repairs only (no LLM).

Feature — launch app (2-step repair plan)

Build a launch readiness app with scoring rule, status label, and summary calculation — agent left two wiring bugs.

  1. Turn 1: check-json unknown-field → patch line → point check
  2. Turn 2: check-json operator-type-mismatch → patch line → point check
  3. Turn 3: point check passes — same gate as production CI

2 fixes · first turn still only ~268 tokens of context

Feature — cart pricing (2-step repair plan)

Build a cart line-total rule and discount band label — agent left a field typo and a string comparison bug.

  1. Turn 1: check-json unknown-field → patch line → point check
  2. Turn 2: check-json operator-type-mismatch → patch line → point check
  3. Turn 3: point check passes — same gate as production CI

2 fixes · first turn still only ~227 tokens of context

Feature — notes list app (2-step repair plan)

Build a notes list view with client routing — agent wired the wrong action name and typo'd the page in navigation.

  1. Turn 1: check-json unknown-load-action → patch line → point check
  2. Turn 2: check-json unknown-nav-page → patch line → point check
  3. Turn 3: point check passes — same gate as production CI

2 fixes · first turn still only ~197 tokens of context

Feature — document ingest pipeline (2-step repair plan)

Build a document ingest pipeline with URL policy — agent forgot await on fetch and typo'd the policy name.

  1. Turn 1: check-json missing-await → patch line → point check
  2. Turn 2: check-json unknown-policy → patch line → point check
  3. Turn 3: point check passes — same gate as production CI

2 fixes · first turn still only ~205 tokens of context

Interactive compare

Primary fixture: tests/fixtures/agent-repair/unknown-field-broken.point. Green labels = CI verified. Gray = estimated TS paste size. Step-by-step walkthrough →

Point check-json~263tokens · CI measured
vs
TS chat paste~3,000tokens · estimated paste
Context saved7892%39 CI fixtures · avg 87%
CI verified — real fixtures, no LLMEstimated — typical agent paste sizeLive model run May 22, 2026, 3:16 AM

Without Point

TypeScript + agent paste

Estimated workflow
  • 1
    tsc error only

    No list of valid field names.

  • 2
    Paste ~3,000 tokens

    Component, lib, tests — agent searches for the right line.

  • 3
    Guess & retry

    Wrong fix → another turn with the same paste.

error TS2339: Property 'unknownField' does not exist on type 'LaunchSignals'.
  at launchReadinessScore (lib/math.ts:18:15)

With Point

check-json → patch → check

CI verified
  • 1
    ~263 token diagnostic

    ref, expected, repair, line number.

  • 2
    One-line fix

    Pick from expected: has bundle id, submitted for review, has passing tests

  • 3
    point check passes

    Same gate the Point repo runs in CI.

  add 30 when signals.has bundle id

Golden fix from CI fixture

add 30 when signals.unknown field
add 30 when signals.has bundle id

Reproduce CI proof: bun run proof:agent-repair

Model benchmark

Live API runs on 35 single-shot fixtures only. The repair-plan loop is proven in CI without an LLM.

Generated May 22, 2026, 3:16 AM on 13 single-shot CI fixtures with real API calls. Success = applied fix passes point check (same gate as CI).

Point workflow100%39/39 repairs · ~209 tok each
TS paste workflow100%39/39 repairs · ~1,842 tok each
Models tested3gpt-4.1, claude-opus-4-6, claude-sonnet-4-6
ModelPoint contextPoint fixesTS contextTS fixes
Claude Opus 4.6anthropic~209 tok13/13~1,842 tok13/13
Claude Sonnet 4.6anthropic~209 tok13/13~1,842 tok13/13
GPT-4.1openai~209 tok13/13~1,842 tok13/13
Per-fixture breakdown
ModelFixturePointTS paste
Claude Opus 4.6Rule — unknown fieldpasspass
Claude Opus 4.6Label — unknown fieldpasspass
Claude Opus 4.6Calculation — unknown fieldpasspass
Claude Opus 4.6Rule — inventory field typopasspass
Claude Opus 4.6Rule — user record typopasspass
Claude Opus 4.6Action — missing awaitpasspass
Claude Opus 4.6View — load data instead of direct action callfailfail
Claude Opus 4.6Route — middleware input unavailablefailfail
Claude Opus 4.6Middleware — header record mismatchfailfail
Claude Opus 4.6Auth — legacy JWT helper typofailfail
Claude Opus 4.6Pipeline — step output type mismatchfailfail
Claude Opus 4.6Record — float money field lintfailfail
Claude Opus 4.6Label — missing variant casefailfail
Claude Opus 4.6Label — outcome dispatch typo (Payment Outcome)failfail
Claude Opus 4.6Calculation — on failure return type mismatchfailfail
Claude Opus 4.6View — invalid bind targetfailfail
Claude Opus 4.6Calculation — arity mismatchpasspass
Claude Opus 4.6Label — operator type mismatchpasspass
Claude Opus 4.6Feature — dashboard items listpasspass
Claude Opus 4.6Feature — document ingest pipelinepasspass
Claude Opus 4.6Feature — notes list apppasspass
Claude Opus 4.6Feature — settings app routespasspass
Claude Opus 4.6Feature — guarded file write pipelinepasspass
Claude Opus 4.6View — unknown load action with refreshfailfail
Claude Opus 4.6View — invalid refresh intervalfailfail
Claude Opus 4.6View — table link column missing from columnsfailfail
Claude Opus 4.6View — terminal unknown stream routefailfail
Claude Opus 4.6View — datagrid sort column missing from columnsfailfail
Claude Opus 4.6View — datagrid filter column missing from columnsfailfail
Claude Opus 4.6View — chart field not on recordfailfail
Claude Opus 4.6View — datagrid page size must be positivefailfail
Claude Opus 4.6View — bind select target must be record.fieldfailfail
Claude Opus 4.6View — toast requires form submitfailfail
Claude Opus 4.6View — unknown sse subscribe routefailfail
Claude Opus 4.6View — bind textarea target must be record.fieldfailfail
Claude Opus 4.6Feature — launch app (2-step repair plan)failfail
Claude Opus 4.6Feature — cart pricing (2-step repair plan)failfail
Claude Opus 4.6Feature — notes list app (2-step repair plan)failfail
Claude Opus 4.6Feature — document ingest pipeline (2-step repair plan)failfail
Claude Sonnet 4.6Rule — unknown fieldpasspass
Claude Sonnet 4.6Label — unknown fieldpasspass
Claude Sonnet 4.6Calculation — unknown fieldpasspass
Claude Sonnet 4.6Rule — inventory field typopasspass
Claude Sonnet 4.6Rule — user record typopasspass
Claude Sonnet 4.6Action — missing awaitpasspass
Claude Sonnet 4.6View — load data instead of direct action callfailfail
Claude Sonnet 4.6Route — middleware input unavailablefailfail
Claude Sonnet 4.6Middleware — header record mismatchfailfail
Claude Sonnet 4.6Auth — legacy JWT helper typofailfail
Claude Sonnet 4.6Pipeline — step output type mismatchfailfail
Claude Sonnet 4.6Record — float money field lintfailfail
Claude Sonnet 4.6Label — missing variant casefailfail
Claude Sonnet 4.6Label — outcome dispatch typo (Payment Outcome)failfail
Claude Sonnet 4.6Calculation — on failure return type mismatchfailfail
Claude Sonnet 4.6View — invalid bind targetfailfail
Claude Sonnet 4.6Calculation — arity mismatchpasspass
Claude Sonnet 4.6Label — operator type mismatchpasspass
Claude Sonnet 4.6Feature — dashboard items listpasspass
Claude Sonnet 4.6Feature — document ingest pipelinepasspass
Claude Sonnet 4.6Feature — notes list apppasspass
Claude Sonnet 4.6Feature — settings app routespasspass
Claude Sonnet 4.6Feature — guarded file write pipelinepasspass
Claude Sonnet 4.6View — unknown load action with refreshfailfail
Claude Sonnet 4.6View — invalid refresh intervalfailfail
Claude Sonnet 4.6View — table link column missing from columnsfailfail
Claude Sonnet 4.6View — terminal unknown stream routefailfail
Claude Sonnet 4.6View — datagrid sort column missing from columnsfailfail
Claude Sonnet 4.6View — datagrid filter column missing from columnsfailfail
Claude Sonnet 4.6View — chart field not on recordfailfail
Claude Sonnet 4.6View — datagrid page size must be positivefailfail
Claude Sonnet 4.6View — bind select target must be record.fieldfailfail
Claude Sonnet 4.6View — toast requires form submitfailfail
Claude Sonnet 4.6View — unknown sse subscribe routefailfail
Claude Sonnet 4.6View — bind textarea target must be record.fieldfailfail
Claude Sonnet 4.6Feature — launch app (2-step repair plan)failfail
Claude Sonnet 4.6Feature — cart pricing (2-step repair plan)failfail
Claude Sonnet 4.6Feature — notes list app (2-step repair plan)failfail
Claude Sonnet 4.6Feature — document ingest pipeline (2-step repair plan)failfail
GPT-4.1Rule — unknown fieldpasspass
GPT-4.1Label — unknown fieldpasspass
GPT-4.1Calculation — unknown fieldpasspass
GPT-4.1Rule — inventory field typopasspass
GPT-4.1Rule — user record typopasspass
GPT-4.1Action — missing awaitpasspass
GPT-4.1View — load data instead of direct action callfailfail
GPT-4.1Route — middleware input unavailablefailfail
GPT-4.1Middleware — header record mismatchfailfail
GPT-4.1Auth — legacy JWT helper typofailfail
GPT-4.1Pipeline — step output type mismatchfailfail
GPT-4.1Record — float money field lintfailfail
GPT-4.1Label — missing variant casefailfail
GPT-4.1Label — outcome dispatch typo (Payment Outcome)failfail
GPT-4.1Calculation — on failure return type mismatchfailfail
GPT-4.1View — invalid bind targetfailfail
GPT-4.1Calculation — arity mismatchpasspass
GPT-4.1Label — operator type mismatchpasspass
GPT-4.1Feature — dashboard items listpasspass
GPT-4.1Feature — document ingest pipelinepasspass
GPT-4.1Feature — notes list apppasspass
GPT-4.1Feature — settings app routespasspass
GPT-4.1Feature — guarded file write pipelinepasspass
GPT-4.1View — unknown load action with refreshfailfail
GPT-4.1View — invalid refresh intervalfailfail
GPT-4.1View — table link column missing from columnsfailfail
GPT-4.1View — terminal unknown stream routefailfail
GPT-4.1View — datagrid sort column missing from columnsfailfail
GPT-4.1View — datagrid filter column missing from columnsfailfail
GPT-4.1View — chart field not on recordfailfail
GPT-4.1View — datagrid page size must be positivefailfail
GPT-4.1View — bind select target must be record.fieldfailfail
GPT-4.1View — toast requires form submitfailfail
GPT-4.1View — unknown sse subscribe routefailfail
GPT-4.1View — bind textarea target must be record.fieldfailfail
GPT-4.1Feature — launch app (2-step repair plan)failfail
GPT-4.1Feature — cart pricing (2-step repair plan)failfail
GPT-4.1Feature — notes list app (2-step repair plan)failfail
GPT-4.1Feature — document ingest pipeline (2-step repair plan)failfail
Model responses and failure details

Claude Opus 4.6

Rule — unknown fieldPoint check-json
pass
Context
~263 tokens
Latency
2431 ms
Check
point check passed
  add 30 when signals.has bundle id
Rule — unknown fieldTS paste workflow
pass
Context
~3,000 tokens
Latency
2514 ms
Check
point check passed
  add 30 when signals.has bundle id
Label — unknown fieldPoint check-json
pass
Context
~203 tokens
Latency
1915 ms
Check
point check passed
  when user.active return user.name
Label — unknown fieldTS paste workflow
pass
Context
~1,050 tokens
Latency
2280 ms
Check
point check passed
  when user.active return user.name
Calculation — unknown fieldPoint check-json
pass
Context
~227 tokens
Latency
2131 ms
Check
point check passed
  annual price is input.monthly price * 12
Calculation — unknown fieldTS paste workflow
pass
Context
~1,700 tokens
Latency
2272 ms
Check
point check passed
  annual price is input.monthly price * 12
Rule — inventory field typoPoint check-json
pass
Context
~234 tokens
Latency
3345 ms
Check
point check passed
  add 50 when item.quantity > 0
Rule — inventory field typoTS paste workflow
pass
Context
~1,350 tokens
Latency
2749 ms
Check
point check passed
  add 50 when item.quantity > 0
Rule — user record typoPoint check-json
pass
Context
~202 tokens
Latency
2584 ms
Check
point check passed
  add 10 when user.active
Rule — user record typoTS paste workflow
pass
Context
~975 tokens
Latency
2541 ms
Check
point check passed
  add 10 when user.active
Action — missing awaitPoint check-json
pass
Context
~187 tokens
Latency
1842 ms
Check
point check passed
  return await fetch item(id)
Action — missing awaitTS paste workflow
pass
Context
~1,275 tokens
Latency
21622 ms
Check
point check passed
  return await fetch item(id)
Calculation — arity mismatchPoint check-json
pass
Context
~189 tokens
Latency
5671 ms
Check
point check passed
  summary is listing status(listing score(signals))
Calculation — arity mismatchTS paste workflow
pass
Context
~1,900 tokens
Latency
2514 ms
Check
point check passed
  summary is listing status(listing score(signals))
Label — operator type mismatchPoint check-json
pass
Context
~168 tokens
Latency
2347 ms
Check
point check passed
  when score >= 90 return "A"
Label — operator type mismatchTS paste workflow
pass
Context
~800 tokens
Latency
1836 ms
Check
point check passed
  when score >= 90 return "A"
Feature — dashboard items listPoint check-json
pass
Context
~241 tokens
Latency
2090 ms
Check
point check passed
  render data from fetch items

check passed (alternate valid fix)

Feature — dashboard items listTS paste workflow
pass
Context
~3,500 tokens
Latency
3120 ms
Check
point check passed
  render data

check passed (alternate valid fix)

Feature — document ingest pipelinePoint check-json
pass
Context
~202 tokens
Latency
2200 ms
Check
point check passed
  step fetched is await fetch document(url)
Feature — document ingest pipelineTS paste workflow
pass
Context
~2,450 tokens
Latency
2570 ms
Check
point check passed
  step fetched is await fetch document(url)
Feature — notes list appPoint check-json
pass
Context
~197 tokens
Latency
2163 ms
Check
point check passed
  load data from action list notes
Feature — notes list appTS paste workflow
pass
Context
~2,125 tokens
Latency
2088 ms
Check
point check passed
  load data from action list notes
Feature — settings app routesPoint check-json
pass
Context
~212 tokens
Latency
1695 ms
Check
point check passed
  path "/profile" page profile page
Feature — settings app routesTS paste workflow
pass
Context
~1,550 tokens
Latency
1596 ms
Check
point check passed
  path "/profile" page profile page
Feature — guarded file write pipelinePoint check-json
pass
Context
~196 tokens
Latency
2758 ms
Check
point check passed
    require policy allowed path
Feature — guarded file write pipelineTS paste workflow
pass
Context
~2,275 tokens
Latency
2814 ms
Check
point check passed
    require policy allowed path

Claude Sonnet 4.6

Rule — unknown fieldPoint check-json
pass
Context
~263 tokens
Latency
1697 ms
Check
point check passed
  add 30 when signals.has bundle id
Rule — unknown fieldTS paste workflow
pass
Context
~3,000 tokens
Latency
1848 ms
Check
point check passed
  add 30 when signals.has bundle id
Label — unknown fieldPoint check-json
pass
Context
~203 tokens
Latency
2657 ms
Check
point check passed
  when user.active return user.name
Label — unknown fieldTS paste workflow
pass
Context
~1,050 tokens
Latency
2469 ms
Check
point check passed
  when user.active return user.name
Calculation — unknown fieldPoint check-json
pass
Context
~227 tokens
Latency
1726 ms
Check
point check passed
  annual price is input.monthly price * 12
Calculation — unknown fieldTS paste workflow
pass
Context
~1,700 tokens
Latency
1803 ms
Check
point check passed
  annual price is input.monthly price * 12
Rule — inventory field typoPoint check-json
pass
Context
~234 tokens
Latency
1581 ms
Check
point check passed
  add 50 when item.quantity > 0
Rule — inventory field typoTS paste workflow
pass
Context
~1,350 tokens
Latency
1859 ms
Check
point check passed
  add 50 when item.quantity > 0
Rule — user record typoPoint check-json
pass
Context
~202 tokens
Latency
1615 ms
Check
point check passed
  add 10 when user.active
Rule — user record typoTS paste workflow
pass
Context
~975 tokens
Latency
1645 ms
Check
point check passed
  add 10 when user.active
Action — missing awaitPoint check-json
pass
Context
~187 tokens
Latency
1734 ms
Check
point check passed
  return await fetch item(id)
Action — missing awaitTS paste workflow
pass
Context
~1,275 tokens
Latency
1692 ms
Check
point check passed
  return await fetch item(id)
Calculation — arity mismatchPoint check-json
pass
Context
~189 tokens
Latency
1482 ms
Check
point check passed
  summary is listing status(listing score(signals))
Calculation — arity mismatchTS paste workflow
pass
Context
~1,900 tokens
Latency
1620 ms
Check
point check passed
  summary is listing status(listing score(signals))
Label — operator type mismatchPoint check-json
pass
Context
~168 tokens
Latency
1966 ms
Check
point check passed
  when score >= 90 return "A"
Label — operator type mismatchTS paste workflow
pass
Context
~800 tokens
Latency
1807 ms
Check
point check passed
  when score >= 90 return "A"
Feature — dashboard items listPoint check-json
pass
Context
~241 tokens
Latency
1348 ms
Check
point check passed
  render data

check passed (alternate valid fix)

Feature — dashboard items listTS paste workflow
pass
Context
~3,500 tokens
Latency
2062 ms
Check
point check passed
  render data

check passed (alternate valid fix)

Feature — document ingest pipelinePoint check-json
pass
Context
~202 tokens
Latency
1644 ms
Check
point check passed
  step fetched is await fetch document(url)
Feature — document ingest pipelineTS paste workflow
pass
Context
~2,450 tokens
Latency
1613 ms
Check
point check passed
  step fetched is await fetch document(url)
Feature — notes list appPoint check-json
pass
Context
~197 tokens
Latency
1655 ms
Check
point check passed
  load data from action list notes
Feature — notes list appTS paste workflow
pass
Context
~2,125 tokens
Latency
1314 ms
Check
point check passed
  load data from action list notes
Feature — settings app routesPoint check-json
pass
Context
~212 tokens
Latency
2145 ms
Check
point check passed
  path "/profile" page profile page
Feature — settings app routesTS paste workflow
pass
Context
~1,550 tokens
Latency
1896 ms
Check
point check passed
  path "/profile" page profile page
Feature — guarded file write pipelinePoint check-json
pass
Context
~196 tokens
Latency
1513 ms
Check
point check passed
    require policy allowed path
Feature — guarded file write pipelineTS paste workflow
pass
Context
~2,275 tokens
Latency
1769 ms
Check
point check passed
    require policy allowed path

GPT-4.1

Rule — unknown fieldPoint check-json
pass
Context
~263 tokens
Latency
1547 ms
Check
point check passed
  add 30 when signals.has bundle id
Rule — unknown fieldTS paste workflow
pass
Context
~3,000 tokens
Latency
814 ms
Check
point check passed
  add 30 when signals.has bundle id
Label — unknown fieldPoint check-json
pass
Context
~203 tokens
Latency
975 ms
Check
point check passed
  when user.active return user.name
Label — unknown fieldTS paste workflow
pass
Context
~1,050 tokens
Latency
1386 ms
Check
point check passed
  when user.active return user.name
Calculation — unknown fieldPoint check-json
pass
Context
~227 tokens
Latency
860 ms
Check
point check passed
  annual price is input.monthly price * 12
Calculation — unknown fieldTS paste workflow
pass
Context
~1,700 tokens
Latency
950 ms
Check
point check passed
  annual price is input.monthly price * 12
Rule — inventory field typoPoint check-json
pass
Context
~234 tokens
Latency
805 ms
Check
point check passed
  add 50 when item.quantity > 0
Rule — inventory field typoTS paste workflow
pass
Context
~1,350 tokens
Latency
807 ms
Check
point check passed
  add 50 when item.quantity > 0
Rule — user record typoPoint check-json
pass
Context
~202 tokens
Latency
984 ms
Check
point check passed
  add 10 when user.active
Rule — user record typoTS paste workflow
pass
Context
~975 tokens
Latency
947 ms
Check
point check passed
  add 10 when user.active
Action — missing awaitPoint check-json
pass
Context
~187 tokens
Latency
507 ms
Check
point check passed
  return await fetch item(id)
Action — missing awaitTS paste workflow
pass
Context
~1,275 tokens
Latency
689 ms
Check
point check passed
  return await fetch item(id)
Calculation — arity mismatchPoint check-json
pass
Context
~189 tokens
Latency
646 ms
Check
point check passed
  summary is listing status(listing score(signals))
Calculation — arity mismatchTS paste workflow
pass
Context
~1,900 tokens
Latency
581 ms
Check
point check passed
  summary is listing status(listing score(signals))
Label — operator type mismatchPoint check-json
pass
Context
~168 tokens
Latency
551 ms
Check
point check passed
  when score >= 90 return "A"
Label — operator type mismatchTS paste workflow
pass
Context
~800 tokens
Latency
787 ms
Check
point check passed
  when score >= 90 return "A"
Feature — dashboard items listPoint check-json
pass
Context
~241 tokens
Latency
538 ms
Check
point check passed
  render data.items

check passed (alternate valid fix)

Feature — dashboard items listTS paste workflow
pass
Context
~3,500 tokens
Latency
840 ms
Check
point check passed
  render data.items

check passed (alternate valid fix)

Feature — document ingest pipelinePoint check-json
pass
Context
~202 tokens
Latency
810 ms
Check
point check passed
  step fetched is await fetch document(url)
Feature — document ingest pipelineTS paste workflow
pass
Context
~2,450 tokens
Latency
922 ms
Check
point check passed
  step fetched is await fetch document(url)
Feature — notes list appPoint check-json
pass
Context
~197 tokens
Latency
630 ms
Check
point check passed
  load data from action list notes
Feature — notes list appTS paste workflow
pass
Context
~2,125 tokens
Latency
682 ms
Check
point check passed
  load data from action list notes
Feature — settings app routesPoint check-json
pass
Context
~212 tokens
Latency
858 ms
Check
point check passed
  path "/profile" page profile page
Feature — settings app routesTS paste workflow
pass
Context
~1,550 tokens
Latency
946 ms
Check
point check passed
  path "/profile" page profile page
Feature — guarded file write pipelinePoint check-json
pass
Context
~196 tokens
Latency
1167 ms
Check
point check passed
    require policy allowed path
Feature — guarded file write pipelineTS paste workflow
pass
Context
~2,275 tokens
Latency
776 ms
Check
point check passed
    require policy allowed path

Latest live run: Point 100% · TS paste 100% on 13 fixtures × 3 models. Repair-plan loop (4 fixture) is CI-only.

Each model receives either check-json only (Point) or TS paste + tsc error + full .point file (TypeScript). Success = applied fixedLine passes point check (same gate as CI).

All CI fixtures (39)

Showing 39 of 39 fixtures

CaseKindModeDiagnosticcheck-jsonTS pasteSavedCIModelsWalkthrough
Rule — unknown fieldFix a typo in an existing launch readiness rule.TypoSingle-shotunknown-field~263 tok~3,000 tok91%pass6/6Open →
Label — unknown fieldFix a typo in a user status label.TypoSingle-shotunknown-field~210 tok~1,050 tok80%pass6/6Open →
Calculation — unknown fieldFix a typo in a pricing calculation.TypoSingle-shotunknown-field~227 tok~1,700 tok87%pass6/6Open →
Rule — inventory field typoFix a typo in an inventory scoring rule.TypoSingle-shotunknown-field~234 tok~1,350 tok83%pass6/6Open →
Rule — user record typoFix a typo in a user points rule.TypoSingle-shotunknown-field~209 tok~975 tok79%pass6/6Open →
Action — missing awaitFix a missing await in a small async action.TypoSingle-shotmissing-await~187 tok~1,275 tok85%pass6/6Open →
View — load data instead of direct action callFix a view that calls an action directly instead of using the load data binding.TypoSingle-shotmissing-await~274 tok~3,000 tok91%passCI onlyOpen →
Route — middleware input unavailableFix middleware wired on a GET items route — agent declared body middleware but the route only exposes query params.TypoSingle-shotmiddleware-input-unavailable~224 tok~1,600 tok86%passCI onlyOpen →
Middleware — header record mismatchFix auth middleware on an items route — agent typed middleware headers differently from the route input record.TypoSingle-shotmiddleware-input-type-mismatch~228 tok~1,300 tok82%passCI onlyOpen →
Auth — legacy JWT helper typoFix auth middleware on a protected route — agent called a nonexistent legacyJwtCheck helper instead of std/auth auth ok.TypoSingle-shotunknown-function~263 tok~1,200 tok78%passCI onlyOpen →
Pipeline — step output type mismatchFix document ingest pipeline wiring — agent passed fetched Text body into a parse step that expects an Int page count.TypoSingle-shotpipeline-step-type-mismatch~187 tok~1,950 tok90%passCI onlyOpen →
Record — float money field lintFix cart line item pricing record — agent used Float for a money-like unit price field.TypoSingle-shotfloat-money-field~228 tok~1,025 tok78%passCI onlyOpen →
Label — missing variant caseFix order status label dispatch — agent typo'd a variant branch name and left Pending uncovered.TypoSingle-shotmissing-variant-case~219 tok~1,400 tok84%passCI onlyOpen →
Label — outcome dispatch typo (Payment Outcome)Fix payment headline label — agent misspelled the Succeeded branch on an outcome variant (types named ending with " Outcome").TypoSingle-shotaction-outcome-not-exhaustive~235 tok~1,350 tok83%passCI onlyOpen →
Calculation — on failure return type mismatchFix margin calculation fallback — agent returned a string from on failure return but output is integer cents.TypoSingle-shotcalculation-on-failure-type-mismatch~185 tok~1,550 tok88%passCI onlyOpen →
View — invalid bind targetFix settings form bindings — agent bound the field label to the input record instead of input.field.TypoSingle-shotinvalid-view-bind-target~171 tok~1,200 tok86%passCI onlyOpen →
Calculation — arity mismatchFix a wrong argument count in a widget calculation.TypoSingle-shotarity-mismatch~189 tok~1,900 tok90%pass6/6Open →
Label — operator type mismatchFix a numeric comparison typo in a score label.TypoSingle-shotoperator-type-mismatch~168 tok~800 tok79%pass6/6Open →
Feature — dashboard items listBuild a mini dashboard app with sidebar nav, items list view with loading states, layout, page, and client routing.FeatureSingle-shotmissing-await~278 tok~3,500 tok92%pass6/6Open →
Feature — document ingest pipelineBuild a document ingest pipeline with URL policy, fetch/parse/store actions, and retry on fetch.FeatureSingle-shotmissing-await~202 tok~2,450 tok92%pass6/6Open →
Feature — notes list appBuild a notes CRUD shell with list action, loading view, layout, page, and navigation.FeatureSingle-shotunknown-load-action~197 tok~2,125 tok91%pass6/6Open →
Feature — settings app routesBuild a settings app with layout, settings/profile pages, nav links, and client routing.FeatureSingle-shotunknown-nav-page~212 tok~1,550 tok86%pass6/6Open →
Feature — guarded file write pipelineBuild a guarded file-write pipeline with output guard, URL policy, write action, and policy-gated pipeline step.FeatureSingle-shotunknown-policy~196 tok~2,275 tok91%pass6/6Open →
View — unknown load action with refreshFix a view load data action name typo while keeping refresh every.TypoSingle-shotunknown-load-action~204 tok~1,800 tok89%passCI onlyOpen →
View — invalid refresh intervalFix a refresh every interval that must be a positive integer.TypoSingle-shotinvalid-refresh-interval~219 tok~1,600 tok86%passCI onlyOpen →
View — table link column missing from columnsFix a table where link column is not listed in columns.TypoSingle-shotinvalid-table-link-column~172 tok~1,450 tok88%passCI onlyOpen →
View — terminal unknown stream routeFix terminal subscribe to stream name typo.TypoSingle-shotunknown-stream-subscribe-route~177 tok~1,525 tok88%passCI onlyOpen →
View — datagrid sort column missing from columnsFix a datagrid where sort by column is not listed in columns.TypoSingle-shotinvalid-datagrid-sort-column~176 tok~1,475 tok88%passCI onlyOpen →
View — datagrid filter column missing from columnsFix a datagrid where filter by column is not listed in columns.TypoSingle-shotinvalid-datagrid-filter-column~179 tok~1,475 tok88%passCI onlyOpen →
View — chart field not on recordFix a chart label or value field name to match the record.TypoSingle-shotinvalid-chart-field~166 tok~1,400 tok88%passCI onlyOpen →
View — datagrid page size must be positiveFix datagrid page size to a positive integer.TypoSingle-shotinvalid-datagrid-page-size~165 tok~1,350 tok88%passCI onlyOpen →
View — bind select target must be record.fieldFix bind select target to draft.field with options list.TypoSingle-shotinvalid-view-bind-target~167 tok~1,450 tok88%passCI onlyOpen →
View — toast requires form submitAdd submit action after toast lines in a form view.TypoSingle-shottoast-without-submit~178 tok~1,300 tok86%passCI onlyOpen →
View — unknown sse subscribe routeFix subscribe to sse route name typo.TypoSingle-shotunknown-sse-subscribe-route~175 tok~1,400 tok88%passCI onlyOpen →
View — bind textarea target must be record.fieldFix bind textarea target to draft.field.TypoSingle-shotinvalid-view-bind-target~164 tok~1,400 tok88%passCI onlyOpen →
Feature — launch app (2-step repair plan)Build a launch readiness app with scoring rule, status label, and summary calculation — agent left two wiring bugs.FeatureRepair-plan loopunknown-field~268 tok~2,875 tok91%passCI onlyOpen →
Feature — cart pricing (2-step repair plan)Build a cart line-total rule and discount band label — agent left a field typo and a string comparison bug.FeatureRepair-plan loopunknown-field~227 tok~1,800 tok87%passCI onlyOpen →
Feature — notes list app (2-step repair plan)Build a notes list view with client routing — agent wired the wrong action name and typo'd the page in navigation.FeatureRepair-plan loopunknown-load-action~197 tok~2,450 tok92%passCI onlyOpen →
Feature — document ingest pipeline (2-step repair plan)Build a document ingest pipeline with URL policy — agent forgot await on fetch and typo'd the policy name.FeatureRepair-plan loopmissing-await~205 tok~2,150 tok90%passCI onlyOpen →

Run in the Point repo: bun run proof:agent-repair