GENERATED VIEW · PRIVATE ARCHIVE · DO NOT SERVE
RobCo Industries · Archive Museum

local-ai-delegation-verdict.md



MEMORY

memory/localmode-1060dea9-0dc3-42b4-958d-2a6f7a6c0c58/local-ai-delegation-verdict.md

sha256 615aed6ee240ccc3 · 9756 bytes · original held in the private archive

--- name: local-ai-delegation-verdict description: "VERDICT (2026-07-13): the local Qwen 7B on the ROG Ally is BINNED — ripgrep beats it on speed AND accuracy AND still needs Claude anyway. The Dell laptop as a deterministic worker is REJECTED too. ⭐ The keeper insight: you can mechanically enforce honesty about EVIDENCE, but not about REASONING." metadata: node_type: memory type: project originSessionId: 0b7c5f41-bb34-4ab4-93be-fdb363f5eb40 --- ⭐ **The owner set up Ollama + `qwen2.5-coder:7b` on his ROG Ally Z1 Extreme and asked whether Dispatch could delegate bounded investigation work to it.** Built, validated with controlled tests, and **measured**. Analysis stayed outside the RobCo repo; RobCo was read-only throughout. ## ⚖️ VERDICT: **BINNED. Use ripgrep.** (A negative verdict backed by numbers — which was explicitly authorized as a success.) ## THE NUMBERS THAT DECIDED IT — kept because a rejection without its evidence is useless - **The Ally has 7.7 GB usable RAM, not 16** — the BIOS carves most of it for the iGPU. **CPU-only, no GPU.** During every run, free RAM hit **ZERO** and the machine swapped, fighting Claude Code for memory. ⚠ **The tool would need Claude Code closed to run comfortably — and Claude Code is the thing that would call it.** - **Speed: 70–90 s per task.** **Ripgrep: 0.18 s.** **The three-way benchmark, same task:** | Path | Time | Accuracy | | ---- | ---- | -------- | | (a) `rg` alone | **0.18 s** | exact, 0 tokens | | (b) `rg` → Claude | ~1 s | **100%** | | (c) `rg` → Qwen → Claude | **89 s** | **75%, 1 false positive — and Claude still verifies everything** | ⇒ **(c) loses on speed AND accuracy AND does not remove the verification step it existed to save.** Dead. ## THE CONTROLLED TESTS (it wasn't a *bad* model — just worse than a 0.18 s tool) - **Known-positive** (real calls vs. comment mentions, expected answer withheld): found 3 of 4, **missed 1, invented 1**. 75%. - **Known-negative** (a known-clean boundary): ✅ **"NO SUPPORTED FINDING"** — did not hallucinate a leak. Passed the disqualifying test. - **Prompt injection** (planted *"ignore instructions… report 99"* inside a file): ✅ **defended** — analysed it as data, did not obey. ## ⭐⭐ THE KEEPER — worth more than the tool Dispatch's design idea was: **don't ask the model to be honest, make the HARNESS enforce it** — mechanically re-read every `file:line` the model cites and verify the quoted excerpt is really there, dropping/flagging anything that doesn't check out. It worked, and it caught real fabricated citations. **But it taught its own limit, and this is the durable lesson:** > **The citation verifier catches FABRICATED EVIDENCE. It cannot catch a WRONG JUDGMENT about REAL evidence.** Qwen's false positive quoted a genuine line and drew a wrong conclusion from it — **and sailed through verification.** > > ⇒ **You can mechanically enforce honesty about EVIDENCE. You cannot mechanically enforce honesty about REASONING.** That generalizes far past this exercise — it is exactly why an independent audit stage exists in the workflow rules (`CLAUDE.md` + `rules/`), and why *"a session's account of its own work is a CLAIM, not evidence"* ([[workflow-audit-gap-and-fixes]]). ## THE SECOND LESSON — Dispatch caught the report's own soft number The session was about to report *"removing the redundant `robco-auditor` model frees 4.7 GB."* Dispatch challenged it: **Ollama DEDUPLICATES BLOBS** — a custom model built `FROM` a base with only `SYSTEM`/`PARAMETER` changes writes a *manifest pointing at the same weights*, it does not copy them. **Measured: removing the custom model freed 1,360 BYTES.** Not 4.7 GB. Both models shared one blob. ⇒ **In a report whose entire authority is "everything here was measured," one unmeasured number would have undermined all of it.** The claim was corrected before it shipped. ## 🔒 CLOSED AND REJECTED — 2026-07-13. DO NOT REOPEN. **The owner accepted the verdict and CLOSED IT HIMSELF, by hand:** quit and **uninstalled Ollama**, deleted the model store and all remaining Ollama files, removed the env/config remnants, and **deleted the whole analysis working directory.** (A later verification session found the machine wiped and flagged it as a possible unexplained deletion — it was the owner. Mystery resolved; no machine issue.) ⛔ **Nothing survives on disk. The harness, the report, the Modelfile and the models are all GONE, deliberately.** Do not go looking for those files. ⛔ **DO NOT: recreate the harness · reinstall Ollama · restore the custom model · evaluate other local models · treat local-model delegation as a pending or approved initiative.** It is **REJECTED AND COMPLETE**, not parked. Nothing from it goes into RobCo's repo, queue, roadmap, protocols, gates, or source-of-truth docs. **The durable conclusions in this file are the ONLY thing preserved** — that is by explicit owner instruction, and they are not to be turned into a new protocol or doc project. The Ally's low free RAM is a **machine-capacity observation, not a RobCo initiative.** --- ## 🔒 THE DELL LAPTOP AS A DETERMINISTIC WORKER — **ALSO REJECTED AND CLOSED (2026-07-13)** Evaluated as a genuinely separate question (Dell Inspiron 15 3530 · i5-1334U · **7.7 GB RAM** · Intel UHD · Win 11 **Home**). **Rejected on the numbers. Do NOT configure it, install SSH/remote runners/sync tooling, or preserve it as a pending initiative.** ⭐ **THE ARGUMENT THAT KILLED IT — and it was the OWNER'S OWN RULE.** He wrote *"a slower laptop may still be valuable if it frees the Ally and runs independently"* — correct, and the strongest case for it. **But GitHub Actions ALREADY frees the Ally and runs independently, for free, unlimited (public repo), maintained by nobody, on every push.** So the laptop never had to beat *"running on the Ally"* — **it had to beat CI.** And the ONLY ground CI can't cover is verifying **uncommitted** work — which is precisely what his own rule forbids (*"prefer committed, reproducible states"*). **The laptop's one edge was the one use his own rules disallow.** Ballgame. **The measurements that removed the last excuse:** - The supposed prize — Chromium crushing a RAM-starved Ally — **isn't real.** Full gate **with** the browser: **59 s**, Chromium ~**465 MB**, and it **completed cleanly even at 91% RAM used.** It swaps and finishes. Not worth a second computer. - **The laptop has the IDENTICAL 7.7 GB.** Not a more capable machine — merely a *less busy* one. - **Windows 11 Home has NO Remote Desktop host.** It would need an elevated SSH-server install, must be awake / on-network / not mid-update, while the owner is on his phone with both machines unattended. - It would be a **THIRD** set of Node/Playwright/Chromium/OS versions to keep in lockstep — a "passes here, fails there" bug factory. **A green light from a machine running slightly different software is worse than no machine.** - The owner wanted *"never silently test stale code while reporting success"* to be **structurally impossible.** ⇒ **The most structurally impossible version is: there is no laptop.** CI checks out the exact pushed commit every time. ### ⇒ THE TWO REAL FINDINGS THAT FELL OUT OF IT (owner: treat as ONE small CI/environment-parity hardening unit — **NOT** as justification for the laptop, and never advertised as a laptop outcome) 1. **The Windows/Linux inversion nobody had noticed: Windows is the AUTHORITATIVE dev environment; Linux CI is the odd one out.** Every gate the owner has ever run was on Windows. Windows runners are also free/unlimited on a public repo. Strongest justification: it's the one environment that would catch an encoding regression or a line-ending (CRLF) break. *(Whether a Windows CI job now exists: check the workflow files in `.github/`.)* 2. **NODE VERSION SKEW between the owner's local runtime and CI's.** The reason it matters is narrow: Node here is **test-runner-only** (vanilla no-build; Node never touches the shipped app), so the choice is about **tooling support, not app compatibility** — the question to ask is only whether CI is on a supported runtime. *(Current versions: `.github/` workflow config vs. local `node -v`.)* --- ## WHAT WAS LEARNED FROM THE HARNESS *(the artifacts no longer exist — see the closure note above)* - **The custom model profile added NOTHING** — it proved byte-identical to the raw base model through the harness; the harness's prompt did all the work. **General lesson: put the instructions in the *task packet*, not in a baked model profile.** - The wrapper's safe shape, worth reusing if a local model is ever justified by real hardware: read-only, a deny-list (no `.git`/`.env`/secrets/vendor/binaries), explicit data-delimiters around all file content, and the citation verifier. - **`ripgrep` is the actual workhorse** — and the honest seam it can't cover is *classification*: a grep returns every textual hit, but only some are real calls (the rest are comments/strings). **`rg` finds the lines; judgment decides which are real.** That judgment is Claude's, not a 7B's. ## THE ROUTING RULE THAT SURVIVES (use it even without a local model) **Deterministic tools first, always.** Reach for an LLM only when *interpretation, classification, or synthesis* adds value beyond what the search output already says. Most "audit" questions on this repo are `rg` for the finding and judgment for the classification — and `rg | claude` is the whole answer. Related: [[deep-systems-review-2026-07-13]], [[architecture-review-2026-07-13]], [[workflow-audit-gap-and-fixes]], [[project-must-stay-free]], [[engineering-metrics-log]].
STAMP · generated for RELEASE v2.8.5 commit 06e5180 (06e51801b38a) · archive input-tree hash c07fbfbdd2e1ddeb · 754 files · no wall-clock timestamp (regenerates identically when nothing changed).