Conversation
Auto-compact and verbose output are now auto-provisioned via .claude/settings.json; remove the "Configure Claude Code (required)" step from install.sh/.ps1 and reframe adjacent docs (07_faq_technical, 03_best_practices, 02_understanding_daaf) from manual instruction to "on by default." Also fixes a pre-existing broken anchor in 03_best_practices.md. User-doc link audit: 286 internal links checked, no other broken references. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…nner; graceful caller aborts
backup_daaf.{sh,ps1}: add a fatal branch when docker cp reports a nonzero exit
AND fewer files land than the volume scan counted (two corroborating signals =
truncated backup) -- name the partial folder, tell the user to delete it, exit 1
before the banner. Latch HAD_WARNINGS across the 4 non-fatal WARNING sites so
the completion banner reads "Backup completed WITH WARNINGS -- verify before
relying on it" instead of an unqualified "Backup complete!" (exit stays 0).
Claude-state copy stays WARNING-only.
update_daaf.{sh,ps1}, migrate_daaf.sh: make every backup caller fail gracefully
rather than abruptly (set -e) or silently. Capture the backup exit (set -e-safe
on .sh, LASTEXITCODE on .ps1, with a fail-closed pre-init in update_daaf.ps1)
and abort with a clear message; a declined optional backup still proceeds.
Tests: bats + Pester coverage for the fatal branch, both banner variants, and
the updater and migrate abort/continue gates (closing a pre-existing coverage
gap on the migrate_daaf.ps1 gate). Docs: quickstart backup promise revised.
Session records in research/2026-07-18_FrameworkDev_BackupShortCopyHardening/
(workspace is gitignored by design; retained in the working tree).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
… container-leak defects Verified and fixed five defects reported by a downstream port review (sixth report — docs defaults ambiguity — refuted with evidence; cosmetic DEFAULT: tags added anyway): - backup_daaf.ps1: boolean-gate [int]::TryParse staging-status reads at both volumes (fail-closed on non-numeric docker wait output; TryParse writes 0 into the [ref] on parse failure, defeating the =1 default); [math]::Floor at all five division sites (drop banker's rounding — [long](350/100) = 4 vs bash's floor 3) - backup_daaf.sh: reap the staging helper container on launch failure (main + Claude volume), preserving the captured CID instead of blanking it, matching the .ps1 twin's existing pattern - restore_from_backup.sh: same launch-guard parity hardening for both docker create sites (insurance-level; .ps1 twin already reaps in finally) - rebuild_daaf.ps1: save/restore BUILDX_BUILDER around the diagnostic build instead of destroying a user's own exported selection ($env:VAR = $null removes the variable) - all 10 PowerShell settings loaders (4 reported + 6 discovered by repo-wide sweep): reject whitespace-padded keys, matching the bash loaders' column-0 case-glob (symmetric strictness; loader regions md5-identical across all copies) - environment_settings_example.txt: tag SHIM_PORT / SHIM_BACKEND_BASE_URL example values as defaults Tests: Pester + bats regressions pinning each fixed pattern, with pre-fix/fixed discrimination proofs; twin-parity launch-failure reap coverage; padded-key conformance pair on both platforms. All suites green; convention lint 0 failures. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add multimodal request translation, privacy-safe transport diagnostics, strict lifecycle readiness and atomic restart, complete package accounting, and restore Claude Code system-role compatibility. Co-Authored-By: Claude <noreply@anthropic.com>
…tion Compress implementation-spec detail that recent provider-shim commits imported into user-facing docs, while preserving all load-bearing facts (shim commands and the stop/start session-safety caution, context ceiling values 1050000/370000, image formats and dated probe evidence, ~52 package count, reproducibility verdicts, evidence-grading guidance). Setup steps and troubleshooting entries now lead with actions; "safe to skip" blocks are reframed as bold "Optional reading" leads; the duplicated threshold profile-membership table is dropped from 02_understanding_daaf.md; Quarto-viewing passages are trimmed to parity with their marimo equivalents; CONTRIBUTING release-gate invariants are restructured into a scannable checklist. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ll support, and Codex plugin guidance Two user-guidance strands with supporting infrastructure: File management (bind mounts): commented read-only bind-mount opt-in block in docker-compose.yml (long syntax, /host_data target); install-guide section with platform permission matrix (UID-1000 pass-through on Linux/WSL-fs, translated ownership on macOS//mnt/c), write-enabled advanced path, and an explicit reproducibility trade-off callout (copy inputs into project data/raw); FAQ troubleshooting entry; CLAUDE.md provenance bullet (/host_data read-only, outside backup/audit boundary); cross-links from best-practices and extending guides; reproducibility-mode acknowledgment of externally-guaranteed inputs. Simultaneous Claude+ChatGPT (shared workspace): DAAF_DATA_VOLUME_NAME override (unset = legacy <project>_daaf-data; set = literal volume name) centralized in daaf_lib resolvers (bash + PowerShell), propagated to all 17 whitelist copies, backup/restore/install derivations in both twins, and install-time seeding; commented external:true + name: opt-in block under the daaf-data volume; 5-step conversion procedure in the install guide (edit-in-container-then- rebuild); shared-workspace FAQ; migrate_daaf legacy-scope comments. Codex plugin (codex-plugin-cc): setup subsection framed around the two race-free configurations (dual-container; single Anthropic-route container), one warning against combining with the ChatGPT shim lane (refresh-token rotation race), device-code auth default; explicit nodejs install + build-time Node >= 18.18 floor assertion at the end of the Dockerfile root section. Tests: resolver precedence cases (bats + new Pester twin), install seeding case, env-example key lint 6->7, whitelist parity pin 6->7 keys, test_migration Phase 8 override sub-scenario in both harness twins. All suites green (parity 9/9, daaf_lib 32/32, install 42/42, env-example 10/10, backup 47/47, restore 50/50, test_migration bats 49/49 / Pester 56/56, conventions lint 0 failures). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replace the CLAUDE_CODE_EFFORT_LEVEL=high env-var pin (a hard per-session override that /effort and the /model picker could not change) with the top-level "effortLevel": "high" setting, which keeps high as the default while allowing live /effort overrides. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Inject concise, warm, equal-stakeholder communication guidance for GPT orchestrator sessions and harden the model-cache transport against malformed identities and control-character aliasing. Add focused hook and statusline regression coverage. Co-Authored-By: Claude <noreply@anthropic.com>
…ycle (D3/D4) Release verified 158/158 Python + 41/41 bats, three-angle review clean. Includes post-review fix-it round: no-reasoning-turn test, trailing-thinking history-replay test, bounded error-body read (MAX_ERROR_BODY_BYTES 1 MiB). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Make the codex CLI the single writer of CODEX_HOME/auth.json. The shim now only reads tokens; on near-expiry (proactive) or a backend 401 (reactive) it spawns codex login status and re-reads auth.json, judging success solely by the re-read result. Deletes the Python OAuth refresh path (token POST, rotated-token persistence, manager.rs-mirror reload guard) and the SHIM_OAUTH_TOKEN_URL/SHIM_OAUTH_CLIENT_ID seams. Adds SHIM_CODEX_BIN and SHIM_CODEX_TIMEOUT_S; the proactive window now mirrors codex 5-min refresh window. Every auth-failure surface carries the literal recovery command codex login --device-auth. SHIM_VERSION stays 1.2.14 - version bump, changelog, /health auth block, and start_shim.sh land in A1-ii. Implements A1-R1/R2/R3/R5/R7. Adds tests/provider_shim/fake_codex.py stub and test_v130_auth_delegation.py (12 tests); deletes the obsolete rotating-OAuth persistence test. Full suite: Ran 169 tests OK (independently verified). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…loy-smoke T0.9 (A1-ii)
Complete the ChatGPT-lane auth-delegation work (Tier 3 A1) and cut v1.3.0.
- /health gains a read-only auth block {state, expires_at, days_left, recovery?}
on the chatgpt lane (n/a on openai), derived from auth.json presence + JWT exp
only - never token material. Expiring = exp within 48h (A1-R4).
- start_shim.sh readiness + --status print an auth line: expiring -> expires-in-N-
days warning naming codex login --device-auth; expired/absent/unreadable ->
is-dead phrasing. D4-sanitized output (A1-R6a).
- deploy-smoke T0.9 extends from auth.json-readable to the /health auth block:
FAIL on expired/absent/unreadable, WARN on expiring, PASS on valid (A1-R6b).
- SHIM_CODEX_BIN/SHIM_CODEX_TIMEOUT_S documented in start_shim.sh; the deleted
SHIM_OAUTH_* seams removed from its config docs (A1-R7).
- SHIM_VERSION 1.2.14 -> 1.3.0; cumulative v1.3.0 changelog covering A1-i + A1-ii;
the two historical v1.2.5 OAuth comments carry superseded-in-v1.3.0 markers.
- Version pins bumped in provider-shim tests; +8 /health auth-block tests, +5 bats
auth tests. Gates independently verified: Ran 177 tests OK; bats 46/46;
deploy-smoke TD.0 38 OK.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…th_json (A1-iii) Covers PASS/WARN/FAIL state transitions, non-shim-route SKIP, and malformed/missing auth-block edge cases introduced in commit 3c3075e. Harness suite: Ran 50 tests OK (38 + 12 new), independently verified. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…d reap, doc sweep) Cycle-1 fixes from the three-angle A1 auth-delegation review: - _auth_health_block(): guard the JWT-exp computation against OverflowError/ OSError/ValueError (pathological numeric exp), classify as unreadable rather than raising - upholds the /health never-raises contract; +1 test - _run_codex_login_status(): bound the post-kill reap with wait_for(5s) so an unkillable child cannot stall the request path - host template + install guide + technical FAQ: drop the deleted SHIM_OAUTH_* seams and reframe the rotation-race caution around codex-delegated refresh (shim is now a pure reader; keep per-tool CODEX_HOME isolation advice); also align the Codex-plugin warning block mechanism wording (install guide ~L1236) with the v1.3.0 delegation model Version unchanged (1.3.0). Gates independently verified: Ran 178 tests OK, bats 46/46, deploy-smoke harness 50/50. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Shim caches the latest chatgpt-lane quota snapshot to an install-shared quota_state.json (atomic, 0600, fail-open); context-bar.sh renders it as the Plan-usage segment on shim-lane sessions (window labels from window-minutes, stale-window drop rule, zero-secondary omitted). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… bats case, FAQ statusline scope, comment sweep) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… filters (Tier 4) New provider-shim-tests job runs the full offline 184-test shim suite (loopback harness + fake-codex stub; httpx/uvicorn pinned to container versions) on ubuntu-latest with a 15-minute cap. tests/provider_shim/** added to push and pull_request path filters; header job list corrected to eleven jobs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…bility The loopback harness hardcoded /daaf as the repo root; every test spawns the production shim through that path, which exists in the container but not on a CI runner checkout. Resolve from __file__ instead (identical in-container). Review finding from the Tier 4 CI wiring (c2c17fe). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…dation, classifier, cache races) Ports confirmed findings from an external hardening audit across the two statusline renderers and the context-reporter hook (applied to the installed hook from host; delivered via proposed copy since the hooks dir is edit-protected). - Escape-safe rendering: ANSI-C color literals plus literal %s render (drop %b) so untrusted model/branch/task text cannot inject terminal control bytes; strip C0/C1 from untrusted fields. - Identifier allowlist before path construction; closed-set GPT flagship classifier for physical-window mapping; full-transcript usage/model recovery (drop tail -50); numerator overflow bound before multiply; suppressed redirection-open diagnostics. - context-bar.sh also: atomic ctx-window cache publish, OpenRouter catalog validation with private temp, plan-usage percentage clamp. context-reporter.sh also: parent-model isolation, future-timestamp gate guard, and a DAAF_CONTEXT_REPORTER_CACHE_DIR test-isolation seam (default /tmp, inert in production). Tests: context_bar.bats +14 cases (53/53), subagent_bar.bats +9 (54/54); reporter suite 69/69. Three-angle review passed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… + hermetic cache isolation This file combines two sessions' work, interleaved and not cleanly separable by hunk: - The context-reporter hardening test cases (adversarial session/agent IDs, full-scan recovery past 50-plus zero placeholders, closed-set classifier grammar, parent-model isolation, future/corrupt gate timestamp, numerator bound, redirection-open suppression) were authored by a prior session in this hardening effort. - This session added the DAAF_CONTEXT_REPORTER_CACHE_DIR isolation-seam refactor, relocating the suite off shared /tmp onto per-test project scratch to make it hermetic: 69/69 deterministic, where it was previously flaky against a live session's /tmp cache writes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…anch, model cache) Close-review follow-up to 6527a97: byte-wise strips (tr cntrl on the git branch; a bash C0+DEL range on the cat-read subagent model cache) passed UTF-8-encoded C1 controls (U+0080-U+009F, e.g. 8-bit CSI on xterm-class terminals) through to the display stream. Both sites now use the Unicode-aware jq idiom - gsub of the cntrl class, whose Oniguruma semantics are Unicode Cc (C0+DEL+C1) - and jq UTF-8 decoding maps raw stray bytes to inert U+FFFD. Fail-open preserved: on jq failure the field reads empty and the bar/row still renders. The context-reporter hook is unchanged (its output carries no untrusted display fields). Tests: context_bar.bats +1 (54/54), subagent_bar.bats +1 (55/55), reporter 69/69 unchanged; shellcheck clean; od-level end-to-end probes confirm removal on both paths. Two-angle review passed (consistency, completeness). Close-review session and this fix cycle are logged in the StatuslineHardening workspace SESSION_NOTES (research/ is git-ignored by design). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…A_STATE_FILE seam) + exponent-notation pct drop - shim: _write_quota_state honors DAAF_QUOTA_STATE_FILE (redirect seam mirroring the context-bar reader seam; default __file__-derived path byte-identical); loopback harness now seams every spawned shim to per-instance scratch, so test runs no longer overwrite the live install-shared quota_state.json (defect observed live 2026-07-21: full-suite run rewrote the production file with all-dash snapshots, blanking the other install's Plan-usage segment) - context-bar.sh: fractional-floor strip now gated on ^[0-9]+\.[0-9]+$ so exponent-notation percents (1.0e999) drop the segment instead of rendering 1% (statusline-hardening session deferred observation O2) - tests: seam + production-non-pollution + default-derivation + bats exponent cases - SHIM_VERSION 1.3.2, changelog, version pins swept Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…(v1.3.2 fix cycle) e665fbe seamed spawned shims (child env) and the v131 unit tests (constant patching) but missed in-process production-module loads: controlled_asgi_probe executes the real request path in the test-runner process, where DAAF_QUOTA_STATE_FILE was unset, so its chatgpt-lane lazy-401 case (attempt_outcomes=[401,200]) rewrote the live install-shared quota_state.json on every run (deterministic repro; the "external container" attribution in the e665fbe round is corrected — all observed writes were this in-process case). Fix: runner-level os.environ.setdefault in the loopback harness seams every present and future in-process load to SCRATCH_ROOT; regression test locks the exact polluter case against the production file. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…on, per-test in-process seam, retry-once brackets, track scratch ignore) - shim changelog: corrected root-cause narrative (in-process controlled_asgi_probe was the decisive polluter; spawned child-env seam + runner-level in-process default together cover test runs; seam resolves at module import) - in-process regression: per-test DAAF_QUOTA_STATE_FILE via mock.patch.dict; now asserts the probe write landed at the per-test seam (non-vacuous) and production unchanged - both non-pollution guards: retry-once bracket tolerates a bursty live-neighbor write on the shared /daaf volume while deterministic suite pollution still fails - .gitignore: track scripts/scratch/ exclusion (was local-only info/exclude; runner seam now writes scratch on CI) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…core)
Persist a bounded, newest-first snapshot of the in-memory _REASONING_CACHE on
each cache mutation and restore it at module import, so a restart mid-session no
longer discards reasoning continuity (graceful misses -> restored replay).
Shim (A2-R1..R6, amended):
- DAAF_REASONING_CACHE_FILE seam, resolved at import; HOME-derived default
$HOME/.claude/provider_shim/reasoning_cache.json (off the repo tree by intent).
- Fail-open atomic writer (mkstemp+os.replace, 0600, makedirs 0700), entry cap
256 + 2 MiB byte cap keeping the newest; restore gated by a 30-day sanity TTL.
- /health gains reasoning_cache:{entries,restored} (counts only).
- _cache_reasoning/_populate_reasoning_cache now report mutation; persist wired
at both populate call sites. In-memory cap/LRU/graceful-miss semantics unchanged.
Tests/harness:
- New test_v133_reasoning_cache_persistence.py (design tests 1-9, 15 methods),
incl. the restart-restore money test and production-default non-pollution.
- Harness: runner-level seam + _purge_in_process_reasoning_cache_seam() to close
the restore-at-import cross-test leak (A2-R5); per-RealShim scratch seam;
allowlists. _load_fresh_shim purge closes the same leak in the auth tests.
- _HEALTH_KEYS updated for the new /health field.
Defers to A2-ii: SHIM_VERSION bump, changelog, start_shim state-target hardening.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…n bump (A2-ii) Complete Tier 3 A2 (reasoning-cache persistence) on top of the A2-i core: - start_shim.sh: state_targets_are_safe() now covers quota_state.json in its symlink/non-regular hijack checklist (closing a gap open since v1.3.1). The reasoning-cache file stays out of scope by design - it lives under $HOME/.claude/, outside the start_shim domain, and os.replace does not dereference a dest symlink. - start_shim.bats: +2 tests (symlink and non-regular quota_state.json both refused). - SHIM_VERSION -> 1.3.3 with a cumulative changelog block documenting the A2 persistence feature, its off-repo-tree per-container placement, the DAAF_REASONING_CACHE_FILE import-time seam, security posture (opaque blobs, counts-only logging), the /health reasoning_cache surface, the state-target hardening, and the one-shim-per-container topology. - Version-pin sweep: health-version assertions in test_historical_regressions.py and test_reasoning_formatting.py, plus the startup-log literal in test_stream_hardening.py, updated to 1.3.3. Gates: 204 Python tests OK; start_shim.bats 48/48; deploy-smoke 50 OK; shellcheck clean; start_shim.sh mode 100755; workspace invariants OK. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…unt clamp, hermeticity + docs F1: purge the runner-default reasoning-cache seam before the in-process load in test_v131_quota_state._load_shim_module, matching the test_v130 pattern, so every in-process loader starts cold (latent cross-test leak closed). F2: harden _restore_reasoning_cache in anthropic_openai_shim.py - (a) skip a file whose on-disk size exceeds the 2 MiB persist cap before reading it (defense-in-depth; only hand-tampered files can trip it), and (b) report the count of entries actually resident after restore so a tampered over-cap file cannot overstate /health.reasoning_cache.restored. One changelog bullet folded into the existing v1.3.3 block; no version bump. Two new tests in test_v133. F3: name the provider shim reasoning-cache continuity file in the daaf-claude-config volume enumerations (installation quickstart :334, FAQ :83 and :708, with a one-sentence privacy rationale in the Why-Docker answer) and add a shim-topology caveat to the shared-workspace advanced section. F4: widen the scripts/scratch/ .gitignore comment to name both in-process seam files. Gates: full suite Ran 206 tests OK; v131 11 OK; v133 17 OK; workspace invariants OK. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Raise all four DAAFBench runners --timeout argparse default to a uniform 900s logistical cap (2026-07-21 walltime redesign; formerly 120/180/300/300 per-phase) so runs complete rather than censor - duration is now the measured axis. Replace the dead TIMEOUT_BY_TIER tier dict in executor.py with a single DEFAULT_TIMEOUT_S=900 fallback (contract preserved), and align the README flags table, OpenRouter guidance, and invocation example. Add benchmarks/scripts/build_rerun_queue.py: a read-only scanner that emits the timed-out re-run queue (models by descending timeout rate; backburner deferral for Gemma 4 31B/26B + GPT-5.6 Luna; criterion-invalid dc-11/dc-12 excluded per the 2026-07-18 static audit; one ready-to-run command per case). Reconciles to the 401/3187 pre-campaign baseline: 249 active reps + 85 deferred + 67 excluded = 401. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TjgirAEm8zyNTW4ikptBUC
…iplier (v3.3.0) Exclude timed-out runs at a single load_runs chokepoint so they never reach the embedded DATA payload or any precomputed aggregate; remove all timeout presentation (leaderboard column, About caveat, hide-timeouts filter, clock glyphs, TIMED OUT badge, Key Takeaway T5 figure). Add a PRECOMPUTED.duration block (per-model est_duration_per_run / est_battery_duration / multiplier vs Opus 4.8 + separate duration.frontiers) computed from per-run duration_s (parallelization-invariant, never wall_time_s), surfaced as a Relative Duration leaderboard column and a duration axis on the Cost vs Performance scatter. load_runs now returns a 3-tuple with the excluded count reported via print_summary (fixes a NameError in the report path). Bump generator_version to 3.3.0. Tests: update both viewer suites to the 3-tuple contract and 3.3.0 pin; add timed-out-exclusion coverage (data payload, per_model_phase, per_case, token totals, duration aggregation, degenerate all-timed-out CASE and PHASE cells, composite partial idiom with an exclusion-not-zero-fill score pin, removed PRECOMPUTED keys, and absence from rendered HTML). Verified: 22/22 unit tests pass; corpus regen = 2786 completed, 401 timed-out excluded, no crash. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TjgirAEm8zyNTW4ikptBUC
…che cap resize R1-R3: capture usage.input_tokens_details.cached_tokens at all three parse sites; map to Anthropic-native client usage via subtraction (input_tokens = total - cached, cache_read_input_tokens = cached), always-emitting both cache fields (sum invariant preserved). R2: terminal record gains cached_tokens (OpenAI total kept for input_tokens; None -> "-"). R4: new top-level /health prompt_cache block (requests_with_usage, requests_with_cached, cached_tokens_total, input_tokens_total; backend-sourced only, cached counters gated cached>0). R5: reasoning-cache persist cap 256->1024 entries / 2->8 MiB (measured ~19 ms median, ~25 ms worst full-snapshot write; in-memory cap unchanged). R6: SHIM_VERSION -> 1.3.6 + changelog. Tests: sanctioned always-emit usage-shape flips across 5 pin locations - 4 exact-dict sites in test_stream_hardening plus the test_v1214 golden projection (2 dicts: message_start seed + message_delta terminal); USAGE_WITH_CACHE harness sibling; symbolic re-derivation of the oversized-file persist test; new test_v136_prompt_cache_observability (8 tests: streaming + both non-stream lanes, absent-default, malformed battery, clamp, /health block + counter advancement). Version-pin sweep to 1.3.6 (0 functional pins remain). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UwRw2Eg36MDCxDPoorrXCQ
…ture realism Harness-only. Add response.in_progress (created preamble via new _start_response helper) to 5 positive text/reasoning builders; rework _append_text_item to the live content_part.added -> output_text.done -> content_part.done shape; add one mid-stream keepalive + response.metadata to full_response_scenario. All five event types are _KNOWN_EVENT_TYPES-skippable, so downstream Anthropic projection is byte-identical (227/227, golden pin intact). Exercises v1.3.4 allowlist and content_part skip branches no positive fixture previously hit. No shim source change, no version bump. Off-limits/malformed/tool fixtures untouched. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UwRw2Eg36MDCxDPoorrXCQ
…n) + drop orphan Harness-only. Every function_call_arguments.delta now carries a default obfuscation field via _append_tool_item, mirroring the live Codex wire on both lanes; the arg_delta_fields seam is preserved as an override so the distinct pinned value in obfuscation_tool_scenario still wins. obfuscation is an upstream-only field the shim strips, so the downstream Anthropic projection is byte-identical (227/227, golden _SERIALIZED_TWO_TOOL_PROJECTION intact). Also deletes the orphaned MockResponsesServer.rotated_access_token assignment (no reader; grep-clean). No shim source change, no version bump. Off-limits interleaved/malformed fixtures keep their deliberate shapes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UwRw2Eg36MDCxDPoorrXCQ
…onse headers Harness-only. Give MockResponsesServer default success (2xx) responses a lane-appropriate live header set: openai lane -> x-request-id + openai-processing-ms + x-ratelimit-* (notes/04); chatgpt lane -> x-oai-request-id + a representative x-codex-* primary/credits quota family, no x-ratelimit (notes/07). Lane is read from the request path (/v1/responses vs /responses), which already encodes it. Defaults are seeded first and any scenario-injected header (stream_headers/attempt_headers) overrides; applied to 2xx only so errors keep their bare-header behavior. Secondary x-codex-* omitted (live-empty) to preserve the pinned absent-header-renders-dash quota-snapshot contract. Exercises the shim upstream_req_id + chatgpt quota_snapshot paths on realistic input where they previously ran on empty headers. 227/227, golden pin intact, production quota_state.json byte-identical. No shim source change, no version bump. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UwRw2Eg36MDCxDPoorrXCQ
…ack harness Review fix-it (Consistency WARNING): the full_response_scenario comment attributed the keepalive + response.metadata frames to the Tier 0 capture notes (notes/04, notes/07), which do not document them. Corrected: the two frames were observed live during v1.2.14 validation and absorbed into the shim _KNOWN_EVENT_TYPES allowlist in v1.3.4; the comment now states that explicitly and flags their absence from the Tier 0 notes. Comment-only; targeted modules re-run green (allowlist 5 OK, tolerant reducer 8 OK, golden pin intact). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UwRw2Eg36MDCxDPoorrXCQ
…moke hardening The pyfixest 0.40.0 wheel declared zero runtime dependencies (packaging bug: no Requires-Dist in METADATA) - it installed successfully without its real dependencies and imported only because unrelated pins (umap-learn, wildboottest, linearmodels, great-tables) supplied them transitively. 0.60.0 declares correct metadata; 0.40.1 was avoided due to a scipy upper bound conflicting with scipy==1.17.0. - Dockerfile: pin bump with rationale NOTE; new transitive dep maketables - pyfixest skill: refreshed to 0.60.0 (cumulative 0.40->0.60 breaking changes, etable->maketables backend with coef_fmt star token trap, Rust MAP demeaner default with numba as optional extra, typed MapDemeaner/LsmrDemeaner API, feglm FE-GLMs since 0.50, fepois offset, docs moved to pyfixest.org) - every load-bearing claim verified against the live install - Cross-skill sweep: corrected the now-false 'feglm() does not support FE' claim and stale 0.40.0 version labels across fixest, r-python-translation, python-r-translation, stata-python-translation, stata-r-translation, and statsmodels skills - smoke_pyfixest.py/_a: new smoke test (version + metadata sanity + feols/fepois + etable/ritest probes) - smoke_imports_c.py: suite-wide declared-dependency metadata-sanity check for all 52 pins (allowlist: numpy, pyarrow, pyyaml) - catches broken-metadata wheels at rebuild-validation time - debugger.md: pyfixest gotchas pointer broadened to cumulative 0.40->0.60 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MSMpYgPYkneHvzzXaHoiAi
…rrency safety + error taxonomy
Session work (2026-07-28 FrameworkDev):
- Score-complete early stop (dispatch_compliance only; all DC criteria are
monotone-pass, so terminating on all-PASS is score-neutral; other three
runners carry monotone-FAIL negative criteria and get stall-only). 60s
watchdog poll runs the real scorers against live transcripts; one
confirmation poll protects the subagent-transcript flush; status
completed_early with score_complete_seconds (time-to-all-criteria-pass)
substituted into viewer duration aggregates.
- Hung-run detection on all four runners: 90s first-activity + 330s staleness
x2 consecutive reads (K3-validated thresholds), parent+subagent max-recency,
lookup_errors visibility, --stall-retries (default 1) auto-relaunch with
fresh session/sandbox, stall_attempts persisted; status stalled (distinct
from timed_out) and selected by build_rerun_queue with separate counts.
- Progressive per-run archiving: results/{ts}/runs written per-run with
atomic incremental manifest/summary rollups (partial flag, try/finally
finalizer) - a killed invocation no longer loses completed runs.
- --max-concurrent (default 5) per invocation; previously uncapped
ThreadPoolExecutor(max_workers=len(runs)).
- Cross-batch safety: DC fixture flock (EX restore / SH copy, kernel-released
on kill), read-only fixture-source hardening, per-batch uniqueness token on
results dir + sandbox + manifest (batch_token/batch_pid); viewer and
rerun-queue verified tolerant of old+new dir names side by side.
- Error taxonomy: per-run error_counts (hook_blocks / tool_failures /
tool_failures_unclassified) classified from ~830 archived error records.
- Tests: test_watchdog.py (12), test_concurrency_safety.py (6, incl.
two-process flock), viewer seam regression; suite 121/121 OK; viewer
verified over all 322 existing archives.
Also includes the pre-existing uncommitted wire_id/child-model-purity strand
(models.yaml wire_id declarations, route_provenance build_opener, purity
comparison-target fixes + archive-case regression tests): its hunks interleave
with this session's in models.py/artifacts.py/viewer/run_dispatch_compliance,
so it is committed together to keep the snapshot coherent and test-green.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J7AU49zLNWPh4CBJ3FpVnm
Translate GPT Fast intent to the canonical priority service tier, add route-bound control and honest requested-versus-served telemetry, and synchronize status, deployment checks, documentation, and deterministic regression coverage. Co-Authored-By: Claude <noreply@anthropic.com>
… fixes
Sol/Luna GPT-diagnostic follow-up (verified claim-by-claim against code and
archives before implementation):
- DC heading criteria (task/context/instructions) normalized from
case-sensitive exact-label substring lists to structural heading matching
(ATX/bold heading extraction, casefold, concept keywords incl. 'request'
for '## User Request'), ORed with the legacy lists so the change is a
strict widening — no legacy-passing prompt can regress (unit-tested
property; verified by archive dry-run).
- rescore_archives.py: rescored all 166 dispatch_compliance sets (1,159
runs) in place per user decision (no dual-metric versioning; decision
recorded in README §8 with a provenance-stamped criteria-correction
exception to the immutability policy). Net effect: GPT DC section-criteria
49.4% -> 74.2% (+24.8pt), Claude 82.7% -> 83.4% (+0.7pt) — the spurious
heading-lexicon gap collapses while behavioral criteria are untouched.
113 FAIL->PASS flips total, 0 PASS->FAIL. Additive rescored_at /
rescore_reason provenance on all rewritten records; transcripts never
modified. Pre-2026-07-28 viewer bundles display pre-correction numbers
(README caveat added).
- Shell-safe sandbox slugs via sandbox_slug() in all 4 runners (kills the
unquoted-parentheses path hazard behind 57 of Luna's 92 recorded tool
failures) + batch-start slug-uniqueness guard.
- Parent-transcript error scan for error_counts in all 4 runners: closes
the timeout/stalled/early-stopped parent-side undercount (89 omitted
events in the Luna G34-G36 diagnostic), bounded to post-checkpoint
content (checkpoint_lines threaded in dispatch_compliance/skill_routing;
goldens-no-is_error invariant test covers the rest).
- Wrapper relocation: prepare_fixtures now seeds run_with_capture.sh at
{sandbox}/scripts/ (BASE_DIR-level, repo-isomorphic) — every model family
was constructing that path per CLAUDE.md convention and hitting exit 127;
containment sentence now names the location; deterministic
prompt-promise==filesystem tests added.
- Tests: 154/154 green (+15 this batch); rescore integrity independently
verified (fresh scorer output == stored rescored verdicts on sampled
archives); viewer end-to-end clean over all 322 sets.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J7AU49zLNWPh4CBJ3FpVnm
…early-stop doc alignment - generate_results_viewer_v2.py v3.3.0->3.4.0: --transcripts/--no-transcripts tri-state (bundle default includes lazy shards; single-file defaults to transcript-lite monolith); explicit discovery skip of probes/removed_runs and _-prefixed (_quarantine*) containers; load-time exclusion extended to new-taxonomy status stalled/timed_out (latent leak fix) - viewer_template.html: three-way transcript feature-detect (inline / lazy index / "not included" notice, no fetch on transcript-less builds) - README.md: Sec 8 rewritten for new viewer semantics; Sec 3/Sec 4 early-stop docs aligned with the 0bd08dc opt-in flip (monotone-pass argument recorded as falsified; --early-stop row added; --no-early-stop marked deprecated) - run_dispatch_compliance.py: docstrings caveated to match the flip; run_one signature default enable_early_stop True->False - reconcile_openrouter_costs.py: stale gemini-3.5-flash blanket exclusion flagged with pointer to the v2 per-slug-boundary pipeline Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y86U28PD47GZMrY8HJjkEJ
…nners Two portability regressions from the GPT Fast controls commit (318f0e4): provider-shim suite errored 226 times because the harness's HOME-isolated child env hides pip user-site packages on runners (install httpx/uvicorn into a venv instead — sys.executable carries venv site-packages through the allowlisted env), and gpt_fast.bats hardcoded container-only /daaf paths (now derived from BATS_TEST_DIRNAME, matching test_helper.bash). Also gitignore .shim-venv/ for local-run hygiene. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014GuK32tjpGK5jubHYUz9Q4
research/ project files are session artifacts, not framework code; this one was tracked by mistake. Removed from the index only — the file stays on disk. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014GuK32tjpGK5jubHYUz9Q4
Add the CHANGELOG v3.0.1 entry (Stability and Polish). Bump version strings to 3.0.1 across README, CITATION.cff, install-guide tag examples, and the agent_reference citation templates. Collapse the duplicated GPT Fast deep-dives into one guided setup plus a single gated under-the-hood block, with the FAQ pointing to it. Align the install-guide paste blocks with the settings-file no-inline-comment convention (loader takes values literally). In environment_settings_example.txt: add a bare-value conventions line, trim shim internals from the service-tier and ChatGPT-lane passages, add a context-window TL;DR, reframe Option B setup-token for the persistent-login era, and add Bedrock/Vertex orienting notes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XpVieJ1AqWdRuMgXqUhwpD
…tier suppression, hollow-circle markers - OpenRouter battery costs restored via derived token-mix snapshot (openrouter_reconciliation_2026-07-29.json, built from the v2 classified billing parquet; zero loader change — legacy glob reads it) - GPT chatgpt-subscription trio priced on explicit api-equivalent counterfactual basis with leaderboard badge (never conflated with invoiced) - Leaderboard columns: suppress unknown-phase/zero-run sets; fold subagent-less dc sets (kills UNKNOWN_PERFECT / DISPATCH_COMPLIANCE_PERFECT) - Tier banding: >50%-share cap triggers range-quartile fallback (post-rescore compression had put 25/29 models in T1) - Composite-bar component ticks -> hollow circles - Docs: README battery-cost basis semantics (token-mix provenance vs dollar normalization), producer-name correction, JS basis comment Reviewed 3-angle (consistency/quality/completeness); battery figures hand-reverified against bundle ground truth (K3 \$76.25, Sol \$13.62). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y86U28PD47GZMrY8HJjkEJ
…led_asgi_probe The in-process probe inherited the runner's CODEX_HOME via patch.dict(clear=False): inside the DAAF container the codex plugin exports one holding a real auth.json (chatgpt-lane probes silently authenticated against live credentials), while CI runners export none, so the chatgpt lane failed closed with upstream_calls == 0 (the 7 remaining ShimPolicyIntegrationTests failures in run 30457795712). Provision the same fake-JWT auth fixture RealShim writes for spawned shims and pin CODEX_HOME to the probe's scratch home; the auth_store_unavailable branch keeps its missing-store semantics. Verified: full 280-test suite OK in-container, and the affected file OK under a CI-like env with no reachable real auth. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014GuK32tjpGK5jubHYUz9Q4
…, failure-class tags, rescore reason Bundles four bounded, additive harness changes plus review-pass fixes (no scoring-behavior change beyond the approved C2 gate): - C2: dispatch_compliance zero-dispatch grader gate — all 8 prompt_* criteria FAIL (not vacuously pass) when a run made zero Agent-dispatch attempts; recorded-failed and recovered calls count as attempts. Applied retroactively to the archive corpus via rescore_archives.py (dc-only, additive provenance, reason zero-dispatch-gate-2026-07-29: 1364 runs rescored, 19 changed, all flips PASS->FAIL). - C3: display-only relabel of the legacy_numeric accounting category to numeric_computed_cost in format_coverage() console output; persisted summary.json accounting KEY unchanged (still read by viewer and tests). - C4: additive classify_tool_failure_class() (policy_hook / infra_transient / capacity_limit / infra_config / model_error) with first-match precedence and a Codex-lane rule distinguishing a config refusal of the configured child model from a model-authored wrong id (delimiter-aware match: gpt-5.6-terra vs gpt-5.6-terra[1m] are distinct ids); executor tags each extracted tool failure with tool_failure_class. Bounded infra_transient retry deferred. - R: rescore_archives.py gains --reason (defaults to prior constant; blank rejected) and prints the effective reason before processing. - Review fixes: anchored 429 matching (no trace-id/token-count false positives), recovered-only gate regression test, failed-only comment accuracy, precedence doc note, format_coverage relabel assertion, README docs for the gate, the taxonomy, and --reason. Tests: test_error_classification + test_dispatch_heading_normalization + test_artifacts_and_preflight = 84/84 OK. Pre-existing viewer-schema generator_version failures (3.3.0 vs 3.5.0) are unrelated and untouched. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y86U28PD47GZMrY8HJjkEJ
Two assertions in test_viewer_schema_loading lagged the committed viewer (e46594b): the generator_version pin (3.3.0 -> 3.5.0) and the reworded non-phase discovery-skip message ('Ignoring non-phase results reserved container'). Both suites now pass: 23/23 OK. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y86U28PD47GZMrY8HJjkEJ
…ent line The v3.0.1 docs clarity pass (b43d1fc) wrapped a sentence so that CLAUDE_CODE_DISABLE_FAST_MODE=1 landed at the start of a comment line in environment_settings_example.txt, matching the activatable-looking "# KEY=value" shape that the template's bats lint (test 461) forbids. Rewrap only — wording unchanged. Verified: environment_settings_example suite 10/10 and full local bats suite 1146/1146 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014GuK32tjpGK5jubHYUz9Q4
…t-exit load screen v3.6.0 (display-only, render-time; payload join keys unchanged): - Remove the Provenance section (data pipeline intact; TOC/renderer/CSS removed in lockstep) - Strip ' (ChatGPT Subscription)' from displayed GPT model names via displayModelName(); provider badge renders 'chatgpt' - Remove the per-cell api-equiv leaderboard badge; basis disclosure moves to Relative Test Cost methods prose (hover tooltip retains per-cell basis) - Cost-vs-performance scatter: 'Anthropic API' -> 'Anthropic'; chatgpt-lane points get a distinct green-triangle marker with a matching 'ChatGPT' legend entry; legend extracted to a shared helper and now also renders on the intro preview plot - Composite-score bar hollow-circle markers: stroke 1px -> 2px v3.6.1 (behavior): exclude legacy (schema-v1) instant-exit stub runs at load (status null, not timed out, no error, top-level output_tokens null) with a stderr NOTE per exclusion — code-level guard mirroring the parity scan's instant-exit screen, after the 2026-07-29 audit found 7 such stubs (Fable 5 x3, Opus 4.5 x4, all dc) polluting rep counts and averages (now quarantined in results/_quarantine_2026-07-29_instantexit/). Schema-v2 records are exempt (they legitimately lack status; tokens live in usage_observed). Errored legacy runs keep their existing inclusion behavior. Tests: viewer schema loading + rendering 24/24 OK (new stub-exclusion regression test; node harness executes the full embedded main script). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y86U28PD47GZMrY8HJjkEJ
… copied from Luna) The gpt-56-terra-chatgpt and gpt-56-sol-chatgpt entries were created by mirroring the Luna entry and wrongly inherited Luna's $1/$6 rate card, understating Terra 2.5x and Sol 5x. Corrected to each model's own published schedule (verified 2026-07-29 against developers.openai.com model docs): Terra $2.50/$0.25/$3.125/$15, Sol $5/$0.50/$6.25/$30, with per-model long-context blocks (2x input / 1.5x output above 272k input) and own source_url + accessed_at. Battery-cost impact: Sol ~$13.72 -> ~$68.60, Terra ~$10.97 -> ~$27.43; Luna unchanged. Long-context blending deliberately NOT wired into the viewer: a per-request measurement across all 459 countable trio runs (scripts/scratch/ 25_gpt-longcontext-share.py) found the largest single request is 159,692 input tokens — zero requests exceed 272k, so short-context pricing is exact for this corpus (0.00% uplift). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y86U28PD47GZMrY8HJjkEJ
…reement metric, duration column removal Rewrite all five Key Takeaways for the July 2026 corpus: the top tier now spans three providers (Fable 5 leads at 94.2%; Opus 5 close but dominated; GPT-5.6 Sol and open-weights Kimi K3 in Tier 1); a six-point, four-provider efficiency frontier (two open-weights); steep diminishing returns (Luna ~84% of Fable at ~5% of cost, Sol ~91% at ~29%); reliability and predictability as the values budget tiers give up (new agreement metric); and the open-weights / provider-flexibility thesis. Rebuild the fillTakeaways() kt-* span contract (28 live-injected spans so figures track the corpus), refresh the hero bottom-line (Sol/Sonnet 5 mid-budget, Luna value pick, Kimi K3 topping the open-weights pack), Cost-vs-Performance lead, cost caveat (verified OpenAI rate schedules; zero >272k requests), and Phase 3a dispatch explainer (model-authored invalid dispatch models). Add schema-additive PRECOMPUTED.consistency fields cells_all_agree/rate_agree (share of multi-rep cells where all reps land on the identical grade — predictability decoupled from score level; Fable 5 92.2% vs DeepSeek V4 Flash 64.7%), with a loading-test assertion. Remove the Relative Duration leaderboard column (header, cells, sort hooks, footnote, CSS, orphaned durationMult); the duration pipeline and the CvP duration scatter axis are unchanged. Voice anchors (hero TLDR, four About intro paragraphs) byte-untouched. Review: 2-angle pass verified every prose claim against a fresh render (frontier exact by Pareto recompute; agreement gap reproduces) and found no stale references or orphans. Tests 24/24 OK. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y86U28PD47GZMrY8HJjkEJ
…ion-pricing note Applies the 2026-07-29 user edit slate (B1-B9) over the July narrative: hero bottom-line reframed on the ratified June register (top performer / budget-conscious reassurance / slash-compound), all five Key Takeaway headlines and closers rewritten as plain declaratives with interleaved honest-limits hedges (sample-noise parenthetical, small-denominator caveat pointer), 'All to say:' summary connective, forward-looking DAAFBench close, and mechanical fixes (API-equivalent capitalization, whitespace). Voice-passed passages are flagged user-ratified via anchor comments; the kt-* 28-span contract is untouched. Adds one NEW unratified passage (flagged for the user's intensive pass): a subscription-pricing note in the Cost-vs-Performance lead — all dollar figures are API-style list pricing, while subscription access (Claude Max / ChatGPT, the lane the corpus GPT runs actually executed on, verified from run provenance) is often the biggest cost-efficiency lever. Independent look-over: brief fidelity verbatim on all ratified passages, do-not-touch list held, 28 spans matched, retired phrases absent, 24/24 tests OK. generator_version 3.7.0 -> 3.7.1. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y86U28PD47GZMrY8HJjkEJ
claude-opus-4-5 resolves on the wire to claude-opus-4-5-20251101 (OBSERVED: all 11 substantive runs in results/20260726_163821 + 20260726_171652 report exactly one distinct child model id; the claude-opus-4-6 parent records are the replayed golden checkpoint prefix). Without the declaration the purity gate false-failed authentic Opus 4.5 runs under exact string equality. Also corrects the stale "every bare-slug entry omits wire_id" claim in the Opus 5 entry comment. Archived verdicts re-adjudicated separately (scratch 27/28, additive provenance stamps); first live run under the new wire_id verified purity (results/20260729_194049_3ca30f). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y86U28PD47GZMrY8HJjkEJ
…hor restamp The five Key Takeaways items were hand-edited directly by the user (2026-07-29 intensive pass) — the strongest ratification tier, superseding the v3.7.1 anchors for those passages. Anchor comments restamped; hero bottom-line and About-intro anchors untouched. Prose-only: 28-span contract and all fillTakeaways setters intact (24/24 viewer schema tests pass). Changelog entry added to the generator, including the corpus changes shipped alongside this version (Sol + Opus 4.5 spend-limit quarantines, the 11-run purity re-adjudication that also fixes 20260726_171652's phase-unknown classification, and the dc-08 top-up). Bundle daafbench_2026-07-29g regenerated from this template. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y86U28PD47GZMrY8HJjkEJ
P1: consolidate model-selection guidance into one canonical FAQ block (07_faq "Which Claude model should I use?" — July-2026 corpus table, tier-1 membership, four-provider efficiency frontier, sample-noise caveat); the quickstart's stale three-row table becomes a prose summary linking to it. P2: five narrow passages — API-vs-Max gains the subscription-lever finding (all GPT runs executed on flat-monthly ChatGPT subscription; API-equivalent price tags), different-provider drops 2,799-runs/GLM-#4 for the 4,437-run/29-model corpus and the no-top-tier-monopoly headline, free-way leads with DeepSeek/Gemma at ~2-3% (Gemma home-runnable), 02's cost-dial passage and 01's OpenRouter provider row aligned. P3: benchmarks/README user pointer to the FAQ block; root README quickstart paragraph updated (Sonnet top-tier at ~half cost, FAQ link). Independent Opus review pass: all numeric claims re-derived from bundle daafbench_2026-07-29g PASS; one stale 33% GLM figure it caught (faq L181) fixed to 22%; stale-claim sweep now clean; all anchors resolve. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y86U28PD47GZMrY8HJjkEJ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull in v3.0.1 from daaf_dev