F4 follow-ups: correct false provenance claims and two broken documented commands - #101
Open
ErikaOnFire wants to merge 5 commits into
Open
ErikaOnFire wants to merge 5 commits into
ErikaOnFire wants to merge 5 commits into
Conversation
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
6 tasks
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.
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 provenanceThe 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:
str.formatway —{user_prompt}/{message_content}atevaluator/humanebench_evaluator.py:395,401. The{{.UserPrompt}}spelling is this CLI's own canonicalisation.2.
199b27b— the documented bring-your-own-source command does not workcli/README.mdtold converter authors to runhumanebench ingest --stdin --source yourtool. That fails:adapters/mod.rs:41rejects it withunknown source. Found by building the release binary and ingesting a synthetic normalized transcript.The doc conflated the
--sourceflag (an adapter allowlist:claude-code,codex,chatgpt,claude-app,hermes,normalized) with thesourcefield inside each record, which is the free-form tag that really is "surfaced, never parsed". Corrected to--source normalizedand spelled out the distinction.3.
711275d—humanebench schemashipped the same two errorsThe 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 onrubric/README.mdrecords that re-deriving the prompt must preserve the literal"Now, evaluate the following", becauserubric_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 invalidatedCommit 1 grew a doc comment by six lines, moving
PRINCIPLESfromjudge/mod.rs:134–143to140–149, which stale-dated a citation inrubric/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 test— 147 passed / 0 failed (146 + the new guard).cargo clippy --all-targets— 0 warnings, 0 errors, verified on a forcedcargo clean -p humanebenchrecompile 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:
reportrequires cached scores and scoring needs a live judge API key. The unit test atreport/mod.rs:979covers that text.🤖 Generated with Claude Code
https://claude.ai/code/session_01T5Heg7NozQmgkz5Mgu52Sb