Commit Graph
70 Commits
Author SHA1 Message Date
Claude 5d6c259b30 docs: full mdBook site + GitHub Pages deploy; rewrite README as project front page
- docs/: an mdBook documentation site — thesis, architecture, measurement
  discipline, equivalence gates, agent loop, isolation/anti-reward-hacking,
  playbook, ROI, reproduce, roadmap, and the five case studies (pulled from
  their single source in results/ via {{#include}}). Builds clean (21
  pages).
- .github/workflows/docs.yml: builds mdBook and deploys to GitHub Pages on
  push to main (one-time setup: Settings → Pages → Source = GitHub Actions).
- README.md: rewritten as the project front page — the thesis, the verified
  results table, layout, quick start, how it stays honest, links to the
  book. Replaces the stale Phase-0-era text.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-12 00:20:20 +00:00
Claude a8d1fcce3f ruling: phase0-comrak-002 (mimalloc) ACCEPTED, scoped to the comrak CLI workload
Human ruling on the needs-human-review allocator swap (+4.6%, CI
[+3.3%,+5.8%]): accepted as a real win for the measured comrak CLI
single-stream markdown-render workload, explicitly not a blanket
mimalloc mandate. Ledger row stays needs-human-review (append-only);
the ruling is documented in results/rulings/phase0-comrak-002.md and
reflected in the case study.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-12 00:11:45 +00:00
Claude 42c86a1f6b review: adversarial pass — fix ROI leak for overturned rows + load-gen guards
Two defects found and fixed in a hostile review of the whole package:

1. The ROI report generator trusted the ledger verdict field and would
   mint a clean $16,886/year report for phase2-comrak-010 — the
   memory-leaking patch the audit overturned (immutably 'accepted' in the
   append-only ledger, sanitizers_clean:false). report_row now exposes
   sanitizers_clean and the report treats accepted-but-not-sanitizer-clean
   as NOT shippable, printing a warning before any dollar figure. Legit
   wins (sanitizers_clean:true) still render clean.
2. bench-runner service --rate 0 / --count 0 could panic via
   from_secs_f64(1/0); run_session now guards finite/positive rate and
   non-zero count/workers.

Attacks correctly refused (verified, no change): ledger UPDATE/DELETE,
propose_patch ../ + .git escapes, read_target_source traversal. All 10
accepted rows satisfy the green-gates + CI>=1.02 invariant. Findings
recorded in results/adversarial-review.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-12 00:10:06 +00:00
benbrownandGitHub d1ef2a0dd6 Merge pull request #13 from bdbrown4/claude/test-wsk42i
Phase 4 complete: service latency bench, real service win under replay, mechanical ROI reports
2026-07-11 20:00:51 -04:00
Claude 0ec111663b phase4: COMPLETE — service latency win + mechanical ROI report; roadmap done
phase4-cjson-service (ledger): the accepted batch win phase3-cjson-002
measured under a 150 rps coordinated-omission-correct replay (20 rounds,
40k requests, 0 drops). p50 latency +6.2%, 95% CI [+5.8%, +7.2%] —
accepted; p99 CI [0.07, 4.97] too noisy (single-worker loopback tail),
harness correctly rejected. ROI (500-core fleet, $0.04/core-hr): 27.5
cores / $9,621/year at the CI lower bound, report generated mechanically
(results/phase4/cjson-service-roi.md).

- results/phase4/: case study + README + the generated ROI report.
- CLAUDE.md: Phase 4 complete; Phases 0-4 all done.

All SPEC §5 exit criteria met across every phase; zero shipped false
accepts across the whole project.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 23:48:22 +00:00
Claude 4cf729e8c1 phase4: mechanical ledger-record helper for the service-latency result
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 23:43:08 +00:00
Claude b12813def8 phase4: service-mode calibration PASS (0/10 A/A false-positive, 10/10 injection detection)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 23:41:57 +00:00
Claude a78692bbb7 phase4: service-mode latency bench + mechanical ROI report generator
- bench-runner service mode (SPEC §3.1 mode c): a coordinated-omission-
  correct, open-loop, fixed-rate load generator; latency measured from
  the intended send time so queueing is counted, not hidden. Interleaved
  A/B of two server binaries, exact percentiles (bounded sample, no HDR
  bucketing error), bootstrap p50/p99 CIs via the existing ratio-CI
  machine. service-calibrate: A/A false-positive + injected latency-
  regression detection (calibration in progress).
- targets/cjson/service.c: minimal single-threaded HTTP server wrapping
  the patched cJSON.c (trust-layer, outside the workspace allowlist);
  env-toggled per-request busy-wait for the injection calibration only.
- report generator (crates/report bin): reads a ledger row +
  optional service-latency JSON, renders throughput→cores→dollars and/or
  latency percentiles, every figure with its CI, pricing source, and the
  methodology printed inline (SPEC §9); flags any non-accepted row so a
  rejected change never reads as a committed saving.
- ledger::report_row; justfile service/service-calibrate/report.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 23:31:58 +00:00
benbrownandGitHub 3951857cf2 Merge pull request #12 from bdbrown4/claude/test-wsk42i 2026-07-11 19:12:09 -04:00
Claude 985b85205c phase3: mark COMPLETE in CLAUDE.md — all SPEC §5 exit criteria met
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 23:07:48 +00:00
Claude 03113312ad phase3: cJSON cross-language win verified + audited; robustness fix; case studies
phase3-cjson-002 (class 5+3): stack-buffer number parsing + strtod
round-trip replacing sscanf. +8.85% median, 95% CI [+7.5%, +10.0%] on
the C target, banked. 100% audit: byte-identical golden replay,
independent ASan+UBSan clean, 10k-input differential fuzz 0 divergences,
patch bounds/free-gating verified by eye.

- verdict: an infrastructure sanitizer-BUILD failure (missing runtime,
  broken toolchain) now caps the accept at needs-human-review and logs
  it, instead of crashing the verdict and losing a measured bench.
- results/phase3/: four public case studies (tokei class-5 wins; build
  flags + allocators; the comrak caught false-accept; the cJSON
  cross-language proof) + README. Compound-speedup claim stated as an
  approximation, not a measured figure (CIs don't multiply).
- .gitignore: cjson build-artifact dirs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 23:06:59 +00:00
Claude 832dab3445 phase3: coz integration status; cjson C pipeline proven end-to-end
- coz wired (harness -DHOTPATH_COZ hook, scripts, just coz) + installed,
  but the apt coz runtime aborts in its own init_coz/pthread_create
  interposition on this glibc (known coz bug, reproduces on the pristine
  binary). Documented in results/cjson/coz/README.md; callgrind cache-sim
  is the working profiler.
- cjson no-op verdict smoke: full C pipeline flows (clang {out} baseline
  rebuild, Unity/CTest + golden gates, interleaved bench) to a correct
  null result (median 0.9995).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 18:38:04 +00:00
Claude b6dab15bf2 phase3: cjson cache-sim profile — float print/parse dominate
~22% of Ir in glibc float serialization (__printf_fp, cJSON print_number)
and parsing (strtod/str_to_mpn, cJSON parse_number), plus parse_value/
parse_string and malloc/free churn. Ample headroom (SPEC §6).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 18:35:22 +00:00
Claude f5f4c10b63 phase3: cjson A/A calibration anchor — PASS
20/20 sessions: A/A false-positive rate 0.000 (<0.05 required),
injected-5%-slowdown detection 1.000 (>=0.95 required). The C workload
is a trusted measurement anchor; verdict benches on cjson are now valid.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 18:34:46 +00:00
Claude fd6f963829 phase3: diff-test resolves {out}-templated binary; CI gates cjson
diff-test standalone (just gates / CI target-gates) passed the now-
templated build.binary into golden replay verbatim — literal {out}.
It now builds the current tree to targets/<t>/gates-build and tests
that, with a --binary override. CI's target-gates-no-net job gains
clang/cmake, fetches+gates the cjson C target (clang build -> Unity/
CTest -> golden replay) alongside tokei.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 18:20:08 +00:00
Claude 014e3b11d1 phase3: generalize trust layer for C/C++; wire cJSON target
Trust-layer generalization (zero-regression verified on tokei):
- TargetSpec [build] uses an explicit {out} isolation-dir placeholder
  instead of injected CARGO_TARGET_DIR, plus optional sanitizer/
  sanitizer_binary templates. Nothing assumes cargo anymore.
- verdict rebuild_pristine_baseline, sanitizer_check, and harnessd
  run_verdict candidate build all use {out} substitution. A target with
  no sanitizer build caps accepts at needs-human-review.
- tokei/comrak target.toml migrated to the {out} form (CARGO_TARGET_DIR=
  {out} + nightly ASan sanitizer command).

cJSON C target (v1.7.19, MIT):
- harness.c bench/golden driver (trust-layer; agent can patch workspace
  cJSON.c but not the rig), compiled with clang against the patched tree.
- 5.6 MB deterministic corpus (gen-corpus.sh) + MANIFEST/GOLDEN pins.
- gates = hermetic Unity/CTest suite (19 tests pass); sanitizer =
  ASan+UBSan; scripts/diff-fuzz-cjson.py for differential fuzzing.

coz causal profiler integration (SPEC §12):
- harness.c optional -DHOTPATH_COZ throughput progress point.
- scripts/install-coz.sh, coz-profile.sh, coz-summary.py; just coz/install-coz.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 18:17:26 +00:00
benbrownandGitHub 7f67c3bb02 Merge pull request #11 from bdbrown4/claude/test-wsk42i
Phase 2 complete: unattended agent loop, OS isolation, 20 audited attempts, 3 verified wins
2026-07-11 13:57:47 -04:00
Claude cabac5268d phase2: close out — all SPEC §5 exit criteria met
20 audited attempts, 0 shipped false accepts, 3 verified auto-accepted
wins (tokei class-5: +10.7%, +3.7%, +9.9%; ~1.25x vs upstream with
Phase-0 wins). Independent 20-way adversarial re-audit (phase2-final-audit
workflow) confirmed every verdict follows its evidence, correct
equivalence tier, no harness-gaming, ledger append-only intact.

Closeout changes:
- case study: full 20-row attempt table, scoreboard, corrected
  comrak-010 CI upper bound (+12.1%, was +12.2%), exit-criteria section
  flipped to ALL MET, OS-isolation gap marked closed.
- CLAUDE.md Current-phase line: Phase 2 complete, next Phase 3.
- verdict: derive the ledger 'phase' column from the run_id namespace
  (phaseN-*) instead of the hardcoded 1 the re-audit flagged; historical
  rows are immutable and stay as written (run_id prefix is authoritative).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 17:47:37 +00:00
Claude 0c4de51a1a agent: phase2-tokei-009 audited — rejected-bench (attempt 20; >=20 bar reached)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 17:12:55 +00:00
Claude 5797bc3d1b agent: phase2-comrak-011 audited — rejected-bench
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 16:59:11 +00:00
Claude 8ff889b7bd agent: bank + verify phase2-tokei-008, refresh tokei profile
Third verified auto-accepted win: +9.92% median, CI [+7.3%, +11.1%].
First accept through the machine-run sanitizer gate.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 16:44:05 +00:00
Claude eaadafc5c9 gates: sanitizer check on the accept path — stop-the-line fix for phase2-comrak-010
The pipeline auto-accepted an LSan-flagged teardown patch (+10.7%
median) because ASan/LSan were per-attempt manual; the 100% audit
overturned it (black_box liveness ends at scope close, process::exit
runs after — 384-byte arena chunk unreachable at exit). verdict now
builds the patched tree with ASan+LSan and runs the pinned workload on
every would-be accept, capping flagged wins at needs-human-review per
SPEC §8. Shipped false accepts remain 0; the win was not banked; case
study carries the corrective record.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 12:26:30 +00:00
Claude 206004fbcc agent: comrak diff-fuzzer for the phase2-comrak-010 audit
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 12:20:40 +00:00
Claude 54c63307dc agent: report pipeline death to the polling agent
comrak-010's patch added an unresolvable dependency version; the
candidate build failed before the verdict binary ran, no ledger row was
ever written, and the agent polled read_verdict into its turn cap. The
detached pipeline now traps any failure into a log marker, and
read_verdict reports status=failed with the log tail instead of
'running' forever. Attempt relaunched.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 12:08:31 +00:00
Claude c67251614a agent: phase2-tokei-007 audited — rejected-bench
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 11:35:52 +00:00
Claude 3637883c9a agent: phase2-comrak-009 audited — rejected-bench
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 11:22:48 +00:00
Claude f9c3f7f847 agent: phase2-tokei-006 audited — rejected-bench; detached pipeline outlived the capped agent
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 11:14:33 +00:00
Claude c6b25d59f4 agent: phase2-comrak-008 audited — rejected-bench
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 02:29:01 +00:00
Claude b4acf3c3e8 agent: audit-attempt allows /dev/null like the applier; tokei-005 re-audited clean
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 02:14:55 +00:00
Claude 09bcde5bf4 agent: phase2-tokei-005 audited — rejected-bench (class 6, clean null)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 02:13:52 +00:00
Claude bde70700ca agent: phase2-comrak-007 audited — rejected-bench (+1.0% median, CI includes zero)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 02:04:56 +00:00
Claude 04daa9122f agent: phase2-tokei-004 audited — rejected-bench
Ledger row and transcript recorded; workspace reset. 10 audited
unattended attempts: 2 verified accepts, 0 false accepts.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 01:54:35 +00:00
Claude e28c500942 agent: phase2-comrak-006 audited — rejected-bench (+0.79% median, under bar)
HTML write-path devirtualization: real but insufficient, CI
[0.990, 1.020] vs the 2% lower-bound rule. Ledger and transcript
recorded; workspace reset.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-11 01:48:00 +00:00
Claude 82eaeceffb agent: bank + verify phase2-tokei-003, refresh tokei profile
Second verified auto-accepted win: +3.67% median, CI [+2.7%, +5.2%].
diff-fuzz 10k/0 divergences, ASan/LSan clean. Profile regenerated
against the two-win baseline.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-10 20:50:21 +00:00
Claude 3c61c542e8 agent: phase2-tokei-003 accepted by pipeline — manual audit gates in progress
Class 5 on tokei: forward-only all-whitespace break test replaces
trim().is_empty() (drops the redundant rposition scan per processed
byte). Median 1.0367, 95% CI [1.027, 1.052]. Equivalence eyeball done
(same AsciiExt::is_whitespace predicate, empty-window case identical);
diff-fuzz + ASan running before the win is counted.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-10 20:47:53 +00:00
Claude 1ddc7b3c71 agent: patch-surface fixes from the comrak-005 transcript
- propose_patch allows the /dev/null headers git emits for new/deleted
  files (previously every new-file diff was refused as an absolute path).
- read_target_source serves HEAD (pristine) content instead of the
  working tree, matching propose_patch's standalone-vs-pristine base so
  post-proposal reads can't drift a later diff's context lines.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-10 20:36:38 +00:00
benbrownandGitHub 2386151ddb Merge pull request #10 from bdbrown4/claude/test-wsk42i 2026-07-10 08:25:39 -04:00
Claude 632e861f7f agent: launcher probes harnessd liveness with a real request
A stale socket file survived a container idle window while the daemon
died; the [ -S ] check skipped the restart and the nested agent's MCP
server crashed at connect. The agent refused cleanly (no ledger row, no
fabrication). Liveness now means answering read_playbook, not existing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-10 12:11:42 +00:00
Claude db6d2dc948 agent: phase2-tokei-002 audited — rejected-gate, golden replay catches live divergence
The agent's parse_context skip-scan passed upstream tests but broke
byte-identical golden replay on the pinned corpus; bench correctly never
ran. First rejected-gate of the grind: the equivalence stack blocking a
wrong-output patch that a green test suite would have shipped.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-10 05:45:49 +00:00
Claude 23ab522445 agent: propose_patch ergonomics from the phase2-comrak-004 audit
- Standalone-proposal semantics: workspace resets to pristine before
  every apply, so probe patches can't accumulate into a tested tree the
  ledger's patch field doesn't describe.
- Friendly errors: explicit trailing-newline check, and git apply's
  stderr relayed on refusal instead of a generic message.
- Tool docs + task prompt updated to match.
- phase2-comrak-004 audited: honest rejected-bench (median 1.0124,
  CI [1.0011, 1.0267] — real but under the 2% bar), Mutex pre-flagged
  for human review, cumulative-probe state disclosed in the hypothesis.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-10 05:32:08 +00:00
Claude 393ca7117f agent: case study — phase2-tokei-001 verified win + audit methodology finding
Also refreshes tokei's cache-sim profile against the new banked-wins
baseline (parse_lines share drops after the first-byte gate landed).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-10 05:11:22 +00:00
Claude abaed3c49d agent: phase2-tokei-001 — first auto-accepted win from the unattended loop
Ledger row: class 5 (algorithmic) on tokei, first-byte gate table for
the per-byte token matchers in perform_multi_line_analysis.
Speedup median 1.107, 95% CI [1.084, 1.131] vs the banked-wins baseline,
workload: 221 MB / 4360 files, single rayon thread, pinned core.

Manual audit gates (pipeline covers tests+golden+bench only):
- Differential fuzz, 10k mutated inputs across 200 batched runs:
  0 divergences after canonicalizing tokei's benign parallel-walker
  output ordering (present in pristine baseline; counts identical).
  Fuzzer added as scripts/diff-fuzz-tokei.py.
- ASan run recorded in the case study (next commit).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-10 05:08:16 +00:00
Claude 189939fe58 agent: transcript progress snapshot
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-10 04:58:29 +00:00
Claude d49169084f agent: phase2-tokei-001 transcript (in progress)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-10 04:57:10 +00:00
Claude 5b198b7091 agent: per-attempt audit script for the Phase 2 grind
Mechanically re-checks a ledger row against the accept rule (CI lower
bound vs threshold, gate greenness, patch path allowlist) and prints
the full evidence for the human part of the 100% Phase 2 audit.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-10 04:52:43 +00:00
Claude 017491010b bench: cache+branch-sim profiles, hypothesis-granular ledger memory, long-poll read_verdict
- Profiles regenerated with callgrind --cache-sim --branch-sim for both
  targets: per-function D1/LL miss and branch-mispredict columns unlock
  playbook class-4 preconditions (comrak: syntect write_highlighted owns
  31% of D1 read misses; tokei: parse_lines owns 56% of Ir).
- tokei workspace: accepted Phase 0 wins banked as a local commit so
  stash-based baseline rebuilds attribute only the marginal patch to new
  attempts (false-accept trap closed before grinding).
- read_ledger now returns per-attempt history (class, hotspot,
  hypothesis, verdict): a class may be re-entered with a materially new
  hypothesis, never a duplicate one. Task prompt updated to match.
- read_verdict long-polls the ledger up to 45s server-side (under the
  60s MCP cap), cutting the agent's polling turn burn ~15x.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-10 04:49:19 +00:00
Claude e0c5018008 agent: OS-level isolation for the agent tool boundary (SPEC §10)
harnessd gains --socket mode (Unix socket, trusted uid, mutating ops
serialized); the harness client speaks socket when
HOTPATH_HARNESS_SOCKET is set. scripts/agent-isolated.sh launches an
attempt with the agent tree confined — mountns mode (repo bind-mounted
read-only, CAP_SYS_ADMIN/CAP_SYS_PTRACE dropped; no credential copying)
or user mode (unprivileged hpagent, bench-metal shape).
scripts/isolation-check.sh + just isolation-check verify the boundary
from the agent's side: 19 checks, both modes, all passing — repo
writes, forged ledger INSERTs, trust-binary replacement, rw remounts,
and userns re-entry all refused; the harnessd socket door works.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-10 04:43:08 +00:00
benbrownandGitHub 4eef6a7bd4 Merge pull request #9 from bdbrown4/claude/test-wsk42i 2026-07-09 19:38:59 -04:00
Claude a7cb94024a agent: cargo fmt for harnessd unknown-op message
CI's trust-layer job enforces cargo fmt --all --check; the long anyhow!
line in harnessd's op dispatch needed wrapping.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-09 23:34:03 +00:00
Claude 535821cd48 agent: unattended Phase 2 loop — profile to gated verdict, zero false accepts
The Claude Agent SDK loop (agent/hotpath_agent/loop.py, model
claude-fable-5) drives the seven harness tools over a standalone stdio
MCP server (mcp_server.py) and runs the full profile -> hypothesize ->
patch -> gated-verdict cycle on comrak with no human in the loop.

Three audited attempts, all honest rejections, ZERO false accepts:
- phase2-comrak-001 class 3: syntect buffer with_capacity, [0.971,1.007]
- phase2-comrak-002 class 5: gate dead VecDeque build, [0.982,1.026]
- phase2-comrak-003 class 6: hoist find_special_char check, [0.970,1.007]
The agent picked the cheapest untried class each time (3->5->6) and
TWICE refused to fabricate a verdict it couldn't read back, verifying
ledger integrity instead — the anti-reward-hacking behavior SPEC §10
targets.

Harness changes surfaced by the loop:
- run_verdict is now async: launches the multi-minute build+bench
  detached (past the 60s MCP transport cap) and returns immediately;
  new read_verdict op polls the append-only ledger row (ledger
  verdict_summary). Fixes attempt 001's unreadable-verdict gap.
- read_target_source takes offset/limit line windows so 100KB+ files
  page instead of overflowing — removes the agent's reason to reach for
  a shell (attempt 003 paged a 2400-line file cleanly, no shell).

Honest boundary note (case study + code comments): in THIS dev
container the SDK tool allow/deny layer is defense-in-depth, not the
trust boundary — a nested CLI as root under a parent session doesn't
reliably gate built-ins. SPEC §10's boundary is OS process/user
isolation; that hardening is the remaining Phase 2 exit item
(docs/infra.md). What holds regardless: propose_patch is the only
mediated write path (path-allowlist + git apply) and the ledger is
append-only.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
2026-07-09 23:29:52 +00:00