Skip to content

Calibration round 2: rubric v2, agent-diff judge input, per-task dimensions, judge-matrix run plan#75

Open
szjanikowski wants to merge 56 commits into
mainfrom
calibration/ddd-weather-discount-v2
Open

Calibration round 2: rubric v2, agent-diff judge input, per-task dimensions, judge-matrix run plan#75
szjanikowski wants to merge 56 commits into
mainfrom
calibration/ddd-weather-discount-v2

Conversation

@szjanikowski

Copy link
Copy Markdown
Contributor

Closes the first full human-in-the-loop calibration iteration for ddd-weather-discount (13 sink PRs reviewed, 60 inline comments, human-approved reference ranking A/B/C/D) and extends the toolkit where the loop needed it.

Engine (generic, all tasks)

  • Agent diff as universal judge input: evaluator materializes the agent's full diff (workspace_diff.capture_patch, shared with changes.patch export) into <trial>/agent_changes.diff; judge prompt gets diffstat inline + the file for Read/Grep; base "How to evaluate" procedure is now diff-first whenever a diff exists. Claude backend grants --add-dir on the trial dir.
  • Per-task dimensions: task-level assessment_dimensions.json overrides the challenge-wide file (resolve_dimensions_path); different fingerprint → never mixed with old evals.
  • Deterministic precheck hook (optional policy layer): task-level precheck.sh runs on the host; JSON injected into the prompt as ground facts, recorded in eval json; optional normalized_score_cap enforced (cap application recorded).
  • nasde eval --eval-model/--eval-backend per-run judge overrides; calibrate publish bundles per-task dims + ground_truth_decisions.json.

Task: ddd-weather-discount (calibrated assets)

Round-2 run plan

  • CALIBRATION_ROUND2_2026-07-07.md: reference ranking, v1 failure evidence, acceptance criteria (stop conditions).
  • calibration_round2_check.py: the stop conditions as executable assertions (repeatability std ≤ 8%, cross-judge gap ≤ 12%, Spearman ≥ 0.8 + strict bucket separation, dimension disjointness |r| ≤ 0.6, pinned regressions).
  • calibration_round2_run.sh / calibration_round2_restore.sh: judge matrix (fable-5 / opus-4.8 / gpt-5.5-codex) + sink-restore for the two trials whose local job dirs are gone; export + commit to nasde-results.

461 tests green, ruff clean. Skill nasde-benchmark-calibration and ARCHITECTURE.md updated.

🤖 Generated with Claude Code

Szymon Janikowski and others added 30 commits July 7, 2026 11:08
Round-2 calibration of the weather-discount task (sink PRs #9-#21,
60 inline comments, human-approved reference buckets A/B/C/D):

- assessment_criteria.md v2: decidable FULL/PARTIAL/NONE checks with
  real-trial anchors, one failure mode = one check = one dimension,
  base-model intent preamble ([Pure], [DddFactory], ExchangeRate is
  denomination not policy). Dimension names/scales unchanged.
- ground_truth_decisions.json: seven reference decisions (closure in
  factory, no phantom discounts, canonical OfferLevelDiscount reuse,
  explicit exclusivity, failure != measurement, resemble existing
  code, restraint) - auto-injected into the judge prompt.
- precheck.sh: deterministic restraint signals from git (judge has no
  git); advisory AC1-AC4 scores + hard-fail flag mapping to bucket-D
  score cap. Smoke-tested: #21 -> 10/20, #18 -> 1/20 hard-fail.
- CALIBRATION_ROUND2_2026-07-07.md: reference ranking, v1 failure
  evidence, acceptance criteria (std/gap/Spearman/disjointness +
  regression assertions) and the orchestrator procedure.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The weather-discount calibration round exposed two structural limits and
this change removes them (loop-first: the toolkit adapts to calibration
practice, not the other way around):

- Per-task dimensions: assessment_dimensions.json next to a task's
  assessment_criteria.md now overrides the benchmark-wide file for that
  task only (resolve_dimensions_path; used by the evaluator and by
  calibrate publish). Different file -> different fingerprint, so old
  and new evaluations are never mixed in one summary group.
- Deterministic precheck: an optional task-level precheck.sh runs on the
  host before judging (the judge has Read/Glob/Grep, no git). Its JSON
  is injected into the judge prompt as ground facts, recorded in
  assessment_eval_*.json, and its optional normalized_score_cap is
  enforced (with the cap application recorded for explainability).
- calibrate publish now bundles ground_truth_decisions.json for the
  reviewer.

Applied to ddd-weather-discount: three disjoint task-level dimensions
(model_fit 50 / restraint 25 / test_quality 25), criteria v2 regrouped
into M1-M7/R1-R6/T1-T5 decidable checks, dual-mode precheck.sh
(evaluator workspace / calibration-sink refs) smoke-tested against the
sink trials, round-2 doc updated with the new acceptance criteria.
Skill nasde-benchmark-calibration and ARCHITECTURE.md document the new
mechanisms.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The judge sees only the final workspace state and - like a human reviewer
without a diff - cannot see removals or out-of-feature edits. Instead of
per-task precheck greps (which overfit to known failure modes) or free-form
git access for the judge (which breeds variance - the codex judge always had
shell and demonstrably didn't use it), the evaluator now materializes the
agent's complete diff once, deterministically, for every task:

- new workspace_diff module: capture_patch (moved from results_exporter,
  re-exported for compatibility) + capture_diffstat; shared by the exporter,
  the calibration publisher and the evaluator.
- evaluator writes <trial>/agent_changes.diff and injects an "Agent diff"
  prompt section: diffstat inline, full diff as a file the judge can
  Read (paginated) and Grep; skipped gracefully without git or changes.
- claude backend grants --add-dir on the trial dir when the diff exists
  (mirrors the trajectory plumbing).
- weather-discount rubric v2: restraint checks R1-R4 now answered from the
  agent diff (universal), with precheck.sh narrowed to its real role - the
  mechanical bucket-D disqualification cap; docs and calibration skill
  updated accordingly.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ompt

The "Agent diff" section alone only worked when a task's criteria told the
judge to use it. The base "How to evaluate" procedure now starts from the
diff whenever it exists - establish WHAT changed before judging HOW well -
independent of what any task's assessment criteria say, so every rubric
(current and future) benefits from the reference point.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- nasde eval gains --eval-model / --eval-backend per-run overrides, so a
  judge-model comparison matrix needs no nasde.toml edits between runs.
- calibration_round2_run.sh: one-command matrix (claude-fable-5,
  claude-opus-4-8, gpt-5.5-codex; 13 trials x 3 judges x 3 reps),
  followed by the acceptance check and a results-export + commit into
  the nasde-results repo (push opt-in via NASDE_RESULTS_PUSH=1).
- calibration_round2_check.py: the five stop conditions as executable
  assertions (repeatability std, cross-judge gap, Spearman + strict
  bucket separation vs the human reference ranking, dimension
  disjointness, pinned regression assertions incl. the #18/#20 cap and
  a WARN-level anti-gaming guard on high test_quality).
- calibration_round2_restore.sh: rebuilds a trial dir from the
  calibration sink for trials whose local jobs/ artifacts are gone
  (URtZnzf, FjYQ3XQ) - workspace HEAD = base snapshot, agent diff
  applied uncommitted, result/config synthesized from metrics.json;
  both restores verified against workspace_diff.capture_patch.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…bsent

validate_auth demanded ANTHROPIC_API_KEY/CLAUDE_CODE_OAUTH_TOKEN even
though the backend deliberately omits --bare precisely so the claude CLI
can read OAuth from the keychain (subscription accounts) - the preflight
contradicted the documented design and blocked keychain-authenticated
runs. Downgraded to an informational note; a truly unauthenticated CLI
still fails loudly on the first evaluation call.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Durable record of the measured v2.0 ordering defects (top tie #21/#16,
B/C inversion #13>#14 confirmed on n=2 means), the check-level cause
matrix from Fable's reasoning, three surgical M1/M4/M5 edit proposals
with a simulation restoring the exact human reference order, and the
application protocol (corroborate with cheaper judges first, fingerprint
bump on apply). NOT applied - owner gated.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The three scripts actually used to drive the budget-constrained Fable
subset (previously session-scratchpad only, promoted so they survive):

- calibration_round2_eval_one.sh <suffix>: exactly ONE evaluation of one
  trial (per-eval manual gating: run -> discuss -> owner decides).
- calibration_round2_fable_subset.sh: the 5-trial x 2-rep subset driver
  (counts existing v2 fable evals, tops up at concurrency 1, sleeps out
  exhausted subscription windows).
- calibration_round2_stop_after_one.sh: watchdog that kills the driver
  the moment one new eval lands (converts a running loop into a single
  step without wasting the in-flight evaluation).

Paths made repo-relative; see CALIBRATION_ROUND2_PENDING_RUBRIC_FIXES.md
for the live round state these operate on.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…S / 2 FAIL, both FAILs = the two defects the pending v2.1 edits target

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…from the Fable subset

Three surgical edits, each fixing a measured v2.0 ordering defect
(10/10 subset evals, check-level verdicts stable across reps):

- M1: sequential-instead-of-parallel awaiting no longer degrades to
  PARTIAL (style note at FULL); PARTIAL reserved for closures capturing
  unresolved dependencies. v2.0 priced a style nuance at half the
  heaviest check, dragging solid trials (#14, #16) below flawed ones.
- M4: factory-filtered rules with an always-present but possibly-empty
  SHARED aggregate now earn FULL - that shape IS the owner's recipe
  ("add to the aggregation only when the weather qualifies"); PARTIAL
  reserved for self-disabling modifiers deciding inside ApplyOn.
- M5: middle tier added - PARTIAL for stacking AFTER the existing chain
  (silent or comment-stated), NONE reserved for applying BEFORE the
  chain (feeding min()) or tests canonizing compounding. v2.0's floor
  equated two qualitatively different sins, hiding #13's worst-variant
  ordering behind #14's conservative default.

assessment_dimensions.json carries a rubric_version marker so the
fingerprint changes: v2.1 evaluations form their own summary groups,
never mixed with v2.0 (same confound-isolation rule as for evaluator
params). Simulation on collected verdicts: order becomes 0.66/0.64/
0.58/0.55/0.445 = exactly the human reference buckets (Spearman 1.0);
live v2.1 confirmation run pending (Fable after window reset, Opus
back-to-back before/after comparison planned).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ynamically

Hardcoded v2.0 fingerprint would silently miscount after any rubric
version bump; the scripts now derive it from the task's
assessment_dimensions.json, so they always target the current rubric
version's evaluation group.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… Opus back-to-back procedure

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- variants/claude-supple: the "supple design" (Evans) expectation as a
  variant CLAUDE.md, NOT an instruction change - the task stays
  canonical so past trials remain comparable; the coaching lives where
  engineering culture lives.
- Round doc: live v2.1 verification (4 anchors, all simulation
  predictions confirmed; negative control exact; reference order
  A>B>C restored), both Fable-coder trials (vanilla 0.66, deeper-
  instruction probe 0.70 - highest ever: first composition test in 15
  trials, dedicated WeatherDiscounts module, and a discovered+fixed
  latent bug in base Discount.Value(isPercentage:true)), and the open
  round-3 question: should a justified, tested bug fix in a
  pre-existing file cost restraint points?

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ings

Four edits from the round-2 live verification (owner-approved):

- R1: a justified, tested bug fix in a pre-existing file is
  restraint-neutral (defect demonstrable + minimal fix + covering
  test); sharply distinguished from behavior fabrication, which stays
  NONE/hard-fail. Trigger: the deeper-instruction Fable trial found and
  fixed a real latent bug (base Discount.Value passes isPercentage:
  true) and was the only one of 15 trials to notice it.
- R4 + precheck: root CLAUDE.md/AGENTS.md and .claude/ /.codex/ are
  injected by the harness (variant sandbox_files), not created by the
  agent - excluded from the artifact check, which previously docked
  every trial uniformly for harness files. Agent-created junk
  (decompile.csx) is still caught (verified offline on sink trials).
- M4: construction-time qualification resolution codified as
  factory-time FULL (aligns the text with the judge's validated
  reading on #14, removing cross-judge interpretation room before the
  Opus comparison).
- precheck R3 mapping softened (1-2 changed declaration lines ->
  PARTIAL) to match the rubric's intent for single cosmetic rewrites.
- Hard rule reworded: precheck signals are facts, verdicts are the
  judge's; suggested_scores are advisory.

Fingerprint: 8e0d00bfd8df (v2.0) -> 42d6a9e593cf (v2.1) -> 25e9d07f8b31
(v2.2). Offline checks: #18 hard-fail intact, #17 R4 no longer dinged
for harness files, #10 decompile.csx still flagged, #21 R3 PARTIAL.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…next actions

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The spec is silent on discount interaction and the agent has no channel to
ask, so the direction of the decision is free: a tested accumulation
assumption and a tested exclusivity decision score identically. M5 now
prices VISIBILITY of the decision only; the 'tests with no spec basis'
deduction is removed (a test introducing a hypothetical second weather rule
to pin combination semantics is the strongest form of visibility, not a
fabrication). Applying weather BEFORE the existing chain stays NONE.

Base-intent note corrected after auditing the start-state code: the base
has NO Pricing tests; every implemented interaction idiom chooses
(ClientLevelDiscounts override, IndividualSalesConditions min(),
SpecialOffer.Or fallback with unimplemented bodies), but the unused
AggregatedModifier is a base-provided sequential-composition idiom - the
base prescribes visibility, not a direction. Ground truth entry renamed
explicit-exclusivity -> explicit-interaction accordingly.

Fingerprint: 25e9d07f8b31 (v2.2) -> fdb83b1535a6 (v2.3).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…ction policy is the M5 ceiling

A tested single-direction decision (accumulation or exclusivity) scores
FULL at 6/7. The 7th point is reserved for reifying the choice itself:
exclusive-vs-accumulate modeled as a configuration decision, both policies
expressible through composition idioms (the way .Or and AggregatedModifier
already embody the two directions) and demonstrated both ways in tests -
reward any genuine movement in this direction. Ground truth canonical
example updated accordingly.

Amended pre-first-run: fp fdb83b1535a6 -> 37ffc5f460d2, no evaluations
existed under the earlier fingerprint.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
Replace the prose 'exemplary ceiling' with an explicit verdict ladder:
MAX (7) / FULL (6) / PARTIAL / NONE, and state that M5 is the one check
with a verdict above FULL. Semantics unchanged from the previous commit;
dimensions JSON untouched, so the v2.3 fingerprint stays 37ffc5f460d2.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
… bar

Replace 'reward any genuine movement in this direction' (a sentiment that
licenses generosity for extensible-looking structure) with a decidable
gate: MAX requires (a) the composition point where a configurer selects
the interaction policy without touching discount logic (file + line) and
(b) executable proof the second policy is real - a test exercising it or
a working alternative combinator. Prose is not movement: extensibility
comments, unused strategy parameters and TODOs stay FULL.

Dimensions JSON untouched; v2.3 fingerprint remains 37ffc5f460d2.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…niversal proof discipline

Rewrites the supple instruction in its universal form: study the model
until the deeper idea is understood (what concepts mean / how they
compose / why the author shaped them), fit as if the original author had
extended it, only changes the concept requires. Drops 'maintaining
extension points for the future' - the one phrase that biased toward
standing always-in-chain structures (M4 PARTIAL in the BAzkEPJ probe).

Adds two standing universal hints (user's design values, mechanism-free):
deliberate edge-case thinking (boundary values, missing data, failure
paths) with honest tests, and tests-as-documentation - every property the
design claims, including its extension points, must be demonstrated by an
executable test, not a comment. Phrased as 'properties your design
claims' to avoid inviting speculative extension points built for the sake
of testing them.

Variant has never been run - redefinition invalidates nothing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…nti-abstraction restraint

Per user direction: 'supple design' now carries a compact explanation of
what it is (a design that invites change; client code as a statement of
intent) and its six Evans elements - intention-revealing interfaces,
side-effect-free functions, assertions, conceptual contours, standalone
classes, closure of operations - framed explicitly as inspiration, not a
checklist. Textbook doctrine, mechanism-free: it names design values, not
this task's solution.

Paired with the new restraint clause: avoid interfaces nothing needs yet,
model only the abstractions the concept truly requires - a supple model
stays small and concrete wherever the domain is concrete.

Variant still never run - redefinition invalidates nothing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…ive, supple-v3 probe measured

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…silent boundary

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…efore-chain NONE held

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…e 2026-07-09

Also note the claude-opus-4-8 output-rate discrepancy (toml 15 vs official
25) - left unchanged pending owner decision on restating June figures.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…ved restatement)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
… variant

A file at variants/<v>/tasks/<task>/instruction.md replaces that task's
instruction for the variant's runs only: the task dir is staged to a temp
copy with instruction.md swapped, Harbor gets the staged path, and after
the job each override trial's task_id.path is normalized back to the
canonical task dir with the swap recorded as instruction_override
(project-relative). Evaluations - including future re-evaluations - keep
running against the live rubric and canonical instruction, matching the
precedent set by the BAzkEPJ probe.

variants/claude-supple-hint reifies that probe: canonical
ddd-weather-discount instruction with the 'Fit into the existing DDD
architecture' bullet replaced by the original supple-design paragraph
(text extracted verbatim from the BAzkEPJ trajectory), so the 0.85 arm
of the article experiment is a committed, reproducible artifact.

Tests: staging swaps only instruction.md, respects task filter, registry
override plumbing, task_id normalization + provenance; pricing test set
updated for claude-fable-5. Full suite 466 passed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…riant)

The instruction is part of the benchmark's definition, not of a variant:
variants may differ in what the agent brings (CLAUDE.md, skills), never in
what it is asked to do - otherwise scores are not comparable. Changing the
instruction means a new benchmark version and re-running ALL variants
against it. The BAzkEPJ instruction-swap probe stays an exploratory
side-note, not a publishable arm.

Keeps the unrelated test_pricing claude-fable-5 fix from the reverted
commit. Suite: 461 passed.

This reverts commit f79645a.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…instruction untouched

The owner-approved minimal-hint arm for the Fable article: vanilla
CLAUDE.md plus one explicit sentence to think deeply about the existing
domain model before coding. The task instruction stays canonical - the
only manipulated variable across arms is the CLAUDE.md content
(vanilla / minimal hint / rich supple v3).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
Szymon Janikowski and others added 26 commits July 9, 2026 16:11
…E null-object

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
… variance real

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…, mean ~0.78

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…notated, arm means 0.75 vs 0.78

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
….03/+0.05 across judges

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…-coder arm n=2

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
Root cause of the 137/SIGKILL trial failures (A5TDdvJ, tXRxnyj): kernel
memcg OOM at the task's 6 GiB limit. The OOM process table shows the
claude agent at ~71 MB and 45+ concurrent dotnet processes at ~120-150 MB
each - three generations of MSBuild worker fleets (~16 nodes per build on
a 16-core host, default nodeReuse keeps them alive 15 min) accumulated
across the agent's repeated build/test cycles. Heavy arms (skill, some
hint runs) iterate builds most and crossed the ceiling at ~23 min; light
runs finished before the third generation spawned.

MSBUILDDISABLENODEREUSE=1 + DOTNET_CLI_USE_MSBUILD_SERVER=0 make build
workers exit with each build: steady-state ~1-1.5 GiB, comfortably inside
the existing 6 GiB limit. Cost: ~1-2 s slower build startup, equal for
all arms; task semantics, instruction and rubric untouched. Raising
memory_mb instead would only postpone the same accumulation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…e) + OOM fix verified live

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…straint 25, tests 11)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…hapes finale

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…ape recorded

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…rid recorded

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
… +0.10 -> +0.03

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…/EN)

96 grid evaluations as raw dots (shade=trial, connector=judge pair,
larger dot=identical pair) and the judge repeatability diagonal
(mean |d| 0.017 Fable / 0.022 Opus, ties 8/24 and 6/24, max 0.05-0.06).
Publication-ready EN variants included; owner decision: raw clouds carry
the article's conclusions, no bootstrap CI at n=4.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…pup scripts

trial_probe.sh parameterizes the pattern used for all 24 grid trials
(token preflight with stale-token refresh, canonical-instruction guard,
coding run at xhigh, workspace smoke check, 2x Fable + 2x Opus evals,
results digest). eval_topup.sh completes judge pairs on existing jobs
after window limits or interruptions. Both previously lived only in the
session scratchpad and were lost once to a reboot.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…kill

Future sessions (any working directory, any agent) now discover
trial_probe.sh / eval_topup.sh / the handover doc / the owner protocol
without relying on one session's memory.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…erified 2026-07-13

Rates confirmed unchanged on the official pricing page (Fable 5 10/50,
Opus 4.8 5/25 per MTok); as_of dates bumped. Chart reads rates live from
pricing.toml and computes house-formula costs from trial trajectories.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…asoning

Per-check verdicts recovered from free-text dimension reasoning with a
score-consistency audit; three known Opus-judge prose/score mismatches
are flagged on stdout and kept as prose says. M5 FULL=6/7 handled.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…/ R teal / T amber)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
cost_usd now bills fresh input at the full rate, cache writes at the 1h
write rate, cache reads at the cached rate - matching Harbor's own
per-step accounting to the cent on 20/24 grid trials. The full-rate
ceiling is no longer stored (derivable from token_usage). TokenUsage
gains cache_write_tokens; pricing.toml gains cache_write_per_1m.
Grid reality check: campaign $958 as-if -> $220 real; cache reads are
92.6-97.7% of input on all 24 trials. Charts repriced.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…w are pre-change

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
ARCHITECTURE.md (also dropped the stale efficiency-ratio claim), the twin
AGENTS/CLAUDE knowledge blocks, the website token-cost page (user-facing),
the scaffolded pricing.toml.example (now shows cache rate fields), and a
new CHANGELOG entry. ADR-011 text and the 0.5.0 changelog entry stay as
historical records.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
…repo

The round-2 campaign's working artifacts are not toolkit deliverables:
- CALIBRATION_ROUND2_PENDING_RUBRIC_FIXES.md (session day log / handover)
- trial_probe.sh, eval_topup.sh, calibration_round2_*.sh (machine-local drivers)
- grid_raw_scores_plot{,_en}.py + raw_scores_grid_{v3,en}.png (chart iterations)

They now live in NoesisVision/nasde-calibration (round2-fable-grid-ops/).
References repointed to the public methodology record
(CALIBRATION_ROUND2_2026-07-07.md). Also drop repo-root AGENTS.md (broken
Claude->Codex text substitution; untested).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0112rjaT9dWVPXhqm2FCQQPh
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant