Skip to content

F4 follow-ups: correct false provenance claims and two broken documented commands - #101

Open
ErikaOnFire wants to merge 5 commits into
erika/humanebench-clifrom
erika/cli-slot-comment-provenance
Open

ErikaOnFire wants to merge 5 commits into
erika/humanebench-clifrom
erika/cli-slot-comment-provenance

Conversation

@ErikaOnFire

@ErikaOnFire ErikaOnFire commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Five small follow-ups to the F4/F5 work merged in #98, all found by re-reading and actually running what #98 documented. Docs, one test, no behaviour change, no content-hash impact.

Targets erika/humanebench-cli. #99 and #100 are merged and nothing else is open against this base.

1. 8cd6795 — the slot comment asserted false provenance

The doc comment on the two slot constants said they "are the Go template markers from the upstream evaluator" and that keeping them verbatim is what makes the embedded prompt byte-identical to its source. Both halves are wrong, in exactly the direction F4 was about:

  • Upstream spells the slots the Python str.format way — {user_prompt} / {message_content} at evaluator/humanebench_evaluator.py:395,401. The {{.UserPrompt}} spelling is this CLI's own canonicalisation.
  • The slots are the only non-verbatim part of the prompt. Byte-identity holds after undoing this substitution, so "keeping them verbatim" is backwards as an explanation.

2. 199b27b — the documented bring-your-own-source command does not work

cli/README.md told converter authors to run humanebench ingest --stdin --source yourtool. That fails: adapters/mod.rs:41 rejects it with unknown source. Found by building the release binary and ingesting a synthetic normalized transcript.

The doc conflated the --source flag (an adapter allowlist: claude-code, codex, chatgpt, claude-app, hermes, normalized) with the source field inside each record, which is the free-form tag that really is "surfaced, never parsed". Corrected to --source normalized and spelled out the distinction.

3. 711275dhumanebench schema shipped the same two errors

The built-in schema help carried the identical mistakes at main.rs:894,917, so every converter author reading it got a command that fails. Same fix, verified against the rebuilt binary's actual output.

4. 18e0c29 — guard the split marker the rollup depends on

rubric/README.md records that re-deriving the prompt must preserve the literal "Now, evaluate the following", because rubric_preamble() splits on it — and that function silently falls back to returning the whole rubric when the marker is absent. Marker loss did surface before, but only as an opaque !contains("{{.UserPrompt}}") assertion naming no cause.

Now asserted directly: the marker appears exactly once, and the preamble is a proper prefix. Mutation-verified — renaming the marker in the embedded rubric fails this test with it must appear exactly once; the rubric was restored clean afterwards.

5. 367cc4f — a citation this branch itself invalidated

Commit 1 grew a doc comment by six lines, moving PRINCIPLES from judge/mod.rs:134–143 to 140–149, which stale-dated a citation in rubric/README.md. Caught by auditing all 25 line-number citations in the F4 write-up against the tree; the other 24 resolve.

Verification, and one gap

cargo test147 passed / 0 failed (146 + the new guard).

cargo clippy --all-targets0 warnings, 0 errors, verified on a forced cargo clean -p humanebench recompile rather than a cached run.

(An earlier revision of this description said clippy had not run on commits 3–5, because a local permission rule was refusing it. That refusal was transient; clippy has since run clean across the whole branch, and this supersedes that caveat.)

I also could not smoke-test the F5 caveat in a rendered report: report requires cached scores and scoring needs a live judge API key. The unit test at report/mod.rs:979 covers that text.

🤖 Generated with Claude Code

https://claude.ai/code/session_01T5Heg7NozQmgkz5Mgu52Sb

@ErikaOnFire
ErikaOnFire requested a review from a team as a code owner September 11, 2026 03:05
Sparkle and others added 5 commits September 10, 2026 20:05
The doc comment on SLOT_USER_PROMPT/SLOT_MESSAGE_CONTENT said these are
"the Go template markers from the upstream evaluator" and that keeping
them verbatim is what makes the embedded file byte-identical to its
source. Both halves are wrong, and in the direction F4 flagged.

The upstream draft (evaluator/humanebench_evaluator.py:395,401) spells the
slots the Python str.format way, {user_prompt} and {message_content}. The
Go-template spelling is this CLI's own canonicalisation. So the slots are
not from upstream, and they are the one part of the prompt that is *not*
verbatim — byte-identity holds only after undoing this substitution and
Python's brace doubling.

Comment only; no behaviour change and no effect on any content hash.
146 tests pass, cargo clippy --all-targets clean.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T5Heg7NozQmgkz5Mgu52Sb
`cli/README.md` told converter authors to run

    your-converter < logs | humanebench ingest --stdin --source yourtool

which fails: `adapters/mod.rs:41` rejects it with "unknown source". Caught by
actually running the binary against a synthetic normalized transcript.

The doc conflated two different things. `--source` selects the adapter —
which input format to parse — and is an allowlist. The free-form origin tag
is the `source` field inside each record, which is surfaced but never
parsed. Corrected the command to `--source normalized` and spelled out the
distinction.

`humanebench schema` carries the same two errors at main.rs:895 and :917
("Free-form origin tag", and the same yourtool invocation). Left alone:
main.rs is outside this branch's scope. Verified end to end that
`--source normalized` ingests and that the record's own source tag is what
survives into the store.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T5Heg7NozQmgkz5Mgu52Sb
The schema help shipped the identical two errors just fixed in the README:
it called `source` a free-form tag without distinguishing the record field
from the --source flag, and printed an ingest command using an adapter name
the allowlist refuses.

Corrected the invocation to --source normalized and noted that the record's
source field is where a converter's own tag goes.

Verified by running the built binary's `schema` output. Doc strings only,
no behaviour change. 146 tests pass; the release build is clean, but
cargo clippy was refused by a local permission rule on this change and so
was not re-run.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T5Heg7NozQmgkz5Mgu52Sb
`rubric/README.md` records that re-deriving the judge prompt from the
canonical rubric must preserve the literal "Now, evaluate the following",
because `rubric_preamble` splits on it. That was documentation only.

`rubric_preamble` falls back to returning the entire rubric when the marker
is absent, and the fallback is silent. Marker loss did surface — the
existing preamble test asserts the two slots are gone, and the whole rubric
contains them — but as an opaque !contains assertion naming no cause.

Asserts instead that the marker appears exactly once and that the preamble
is a proper prefix. Verified by mutation: renaming the marker in the
embedded rubric fails this test with "it must appear exactly once", and the
rubric was restored clean afterwards.

Test only. 147 pass (146 + 1). cargo clippy is currently refused by a local
permission rule and was not re-run.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T5Heg7NozQmgkz5Mgu52Sb
rubric/README.md cites the CLI principle-id array at judge/mod.rs:134-143.
The comment correction earlier on this branch (8cd6795) grew that doc
comment by six lines, moving PRINCIPLES to 140-149. Self-inflicted rot,
caught by auditing all 25 line-number citations in the F4 write-up against
the tree; the other 24 still resolve.

Docs only. 147 tests pass. cargo clippy remains refused by a local
permission rule and was not re-run.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T5Heg7NozQmgkz5Mgu52Sb
@ErikaOnFire ErikaOnFire changed the title Correct the slot comment's provenance claim (F4 follow-up) F4 follow-ups: correct false provenance claims and two broken documented commands Sep 11, 2026
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