10j round: fixes for snapshot10k (Haiku 58/58; terra in review)

1. a2 (low, defect, terra build): BrowserVerify dev-server readiness timeout reads only
   "Development server readiness timed out": no probed URL, no server output (Vite 8 on macOS bound
   ::1/localhost and ignored HOST=127.0.0.1, so the 127.0.0.1 probe never answered). The sibling
   "exited before readiness" message got its cause in 10i. Also the dev-server.log written on the
   failure path (stop() in devServer.ts) is not in report artifacts or session outputs
   (worker.ts pushes logPath only after startDevServer returns).
   Verified in snapshot10j/src/browser/devServer.ts:49 and worker.ts:72-73.
   FIX (repo, for 10k): devServer.ts keeps the last probe answer; the timeout reads
   "Development server readiness timed out after N ms: http://127.0.0.1:P/ never answered|answered HTTP 302.
   G-Code waits for an OK (2xx) answer at 127.0.0.1 on the port it passes as {port} and PORT; a server
   listening only on localhost or ::1 must be told to listen on 127.0.0.1 (for example with its --host
   option). Its output: <tail>|it printed nothing". devServerLog(output) exported; worker.ts pushes the
   log to artifacts when startDevServer throws and the log exists. Browser runtime rebuilt.
   Test: tests/round10k-fixes.test.ts (wording: never answered + output, HTTP 302 + printed nothing;
   real browser: failing dev server's log in result artifacts, onArtifacts and report.json). tsc clean.

2. j3 (low, defect, terra edit; reviewer said pass, reclassified by Claude): two sub-agents ended
   "Stopped after 3 failed/denied calls in this turn (3 for Bash)" after three different Bash errors
   with successes between (git status outside a repo, npm run build with no script, offline npm exec).
   Same family as 10i a4: the per-tool limit in sub-agents counted any three failures of a tool,
   while the main conversation applies it only once an error repeats.
   FIX (repo, for 10k): failureBudget.ts toolStop = count >= maxFailuresPerTool && repeating.has(tool)
   in every budget; where each call counts (sub-agents) each failure is its own step, so the same
   error again with new arguments is still a repeat (p1-p2 "changed arguments do not evade" holds).
   Sub-agent counts stay per turn: 6 failures in all still end it. Doc comment updated.
   Test: tests/round10k-fixes.test.ts (different errors go on, 6 in all stop, the same error 3x stops).
   Budget tests (10 files, 138) pass.
