Skip to main content

ac-grind.js — $0 Local-Model Code Grinder (per-finding)

What it is

A wrapper around aider + the autocoder.js differential-tsc-gate logic that fixes one finding/file per pass using a local $0 model (Ollama qwen2.5-coder:32b-instruct-q8_0 @ 10.0.0.2:11434, or MLX qwen3-coder-30b @ 11437). Implements the measured recipe from /tmp/evidence-mlx-autocoder-fix/verification.md.

Tool: ~/system/tools/ac-grind.js · MC: #103050 · Status: proven (2026-06-06)

The recipe (7 levers)

  1. Scope = 1 finding/file per pass (broad batches choke the local model).
  2. Auto-attach relevant DEF files as read-only aider context — biggest accuracy lever (measured 5→1). Resolves the target’s @/… imports to real files via tsconfig paths.
  3. Qwen sampling: temp 0.7 / top_p 0.8 / top_k 20 / rep_penalty 1.05.
  4. Repo-map (tree-sitter) + diff edits (whole-file fallback for small files on aider 0.86.x).
  5. DIFFERENTIAL touched-file-only tsc gate — repo is ~615 errors RED at baseline, so only NEW errors in the touched file count.
  6. Reflection cap ≥ 6 (aider 0.86.x caps internal loop at 3 → wrapper does ceil(N/3) outer passes, stops on tsc-delta stall).
  7. E2E browser gate (vite + Playwright + MSAL fixture) as the real DONE signal, not tsc-only.

Usage

node ~/system/tools/ac-grind.js --file <abs path> [--desc "what to fix"] \
  [--engine ollama|mlx] [--max-reflections 6]

Proof (MC #103050, EVVRecordsList.tsx, LumisCare)

  • 8 DEF files auto-attached.
  • 5 → 0 differential tsc errors in one aider pass (independently confirmed: npx tsc -b clean on fixed file).
  • Diff validated vs ground-truth APIs: PaginationIndicator (real export, props page/totalPages/rowCount/pageSize/onPageChange), Badge size="sm" (valid cva variant). Original Pagination currentPage= + size={16} were genuine type errors.
  • E2E Playwright PASS (results.json expected:1 unexpected:0) + real screenshot — component mounts in a real browser without crash.
  • $0 (local model), no deploy, proof edit local-only & reverted.

Proven scope / honest limits

  • Reliable for mechanical type-error findings (prop/API mismatches) where DEF files carry ground-truth types.
  • NOT proven for open-ended feature generation (model must invent new logic).
  • E2E gate currently proves mount-not-crash, not full data render — backend must run to prove real rows.

Evidence

  • /tmp/evidence-103050/verification.md (+ John independent verification section)
  • /tmp/verify-103050/evidence/ (build-tsc, test-e2e, playwright-results.json, screenshot)
  • Recipe origin: /tmp/evidence-mlx-autocoder-fix/verification.md
  • Related memo: project_local_model_coding_setup_2026-06-06.md