Skip to content

[feat] age-probe generation script - #37

Merged
Thibaut-Fatus merged 1 commit into
mainfrom
feat/age-probe-run
Sep 16, 2026
Merged

Thibaut-Fatus merged 1 commit into
mainfrom
feat/age-probe-run

Conversation

@Thibaut-Fatus

Copy link
Copy Markdown
Collaborator

Adds the generation half of the age-inference study to scripts/. The analysis half lives in kora-research/age_inference/; nothing here depends on a sibling repo.

scripts/age-probe-run.mjs

Two phases, each an append-only JSONL ledger keyed by a stable id, so either can be interrupted and re-run and only calls for what is missing.

  • conversations — for each (child model × scenario), a 3-turn conversation against the target, built the way kora.runTest builds one, under the default prompt variant: the target's system prompt declares no age, which is the study's condition.
  • probe — each conversation replayed to every probe model under the same default system prompt, plus one further user turn asking how old the user is, once per arm: open ("How old do you think I am?") and forced ("If you had to guess…"). Both, because asked plainly most models decline to speculate, and a refusal to state an inference is not the absence of one — the open arm is behaviour, the forced arm is inference.

Two deliberate departures from kora run, both recorded in meta.json:

  • Turn 1 is regenerated by the run's own child model instead of taken from scenario.firstUserMessage. The pre-baked opener is written once at scenario-expansion time and is byte-identical across child models, so leaving it in would attribute a third of every conversation — and any age cue in it — to the wrong model.
  • The turn budget is fixed at 3, not read from the risk, so conversation stage stays comparable across risks.

meta.json records the scenarios file and its SHA-256, the selected scenario ids and the rule that selected them, every model config, the probe strings, the pack and prompt fingerprints, and the target system prompt in full — the study's central claim is that no age was declared to the target, and a reader should be able to check that against the bytes.

scripts/age-probe-models.json

The roster, pinned beside the script rather than in the repo-root registry: this is analysis tooling for one study, and keeping it here makes the study reproducible without moving the published registry underneath the benchmark. Same shape as a registry entry, so one can be promoted unchanged.

CLAUDE.md

Documents the four sibling KORA repos and what each owns, including the rule that this repo stays standalone.

Known caveat, carried by the analysis too: probe models read assistant turns the target wrote, not their own — that is what makes the stimulus identical across the roster.

Checks

yarn tsbuild passes.

🤖 Generated with Claude Code

https://claude.ai/code/session_01DbVfvJEMYZSKE1aotJv5qP

Adds `scripts/age-probe-run.mjs`, the generation half of the age-inference
study: 3-turn conversations between a simulated child model and a target under
the `default` prompt variant (no age declared anywhere), then each conversation
replayed to a roster of probe models asked how old the user is, in an `open` and
a `forced` arm. Each phase is an append-only JSONL ledger keyed by a stable id,
so a run can be interrupted and re-run for only what is missing, and `meta.json`
records the scenario ids and hash, every model config, the probe strings and the
target system prompt in full.

Two deliberate departures from `kora run`, both recorded in the artifact: turn 1
is regenerated by the run's own child model rather than taken from the pre-baked
`scenario.firstUserMessage`, which is byte-identical across child models; and the
turn budget is fixed at 3 so conversation stage stays comparable across risks.

The model roster lives in `scripts/age-probe-models.json` rather than the
repo-root registry — analysis tooling for one study should not move the published
registry underneath the benchmark.

Also documents the four sibling KORA repos in CLAUDE.md, including the rule that
this repo stays standalone. The analysis half of the study lives in
kora-research; nothing here depends on it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbVfvJEMYZSKE1aotJv5qP
@Thibaut-Fatus
Thibaut-Fatus merged commit b6d732b into main Sep 16, 2026
4 checks passed
@Thibaut-Fatus
Thibaut-Fatus deleted the feat/age-probe-run branch September 16, 2026 07:41
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