Skip to content

Architecture cleanup: fix live bugs, then deepen the LLM, eval-record, novelty, arms and process modules #4

Open

Description

@napetrov

Why

An architecture review of dokimi found several concepts implemented in more than one place: the LLM call path, reading answer/eval records, spawning subprocesses, parsing arm specs, novelty coverage. The copies have drifted apart, and some of that drift is live bugs on main. This issue lists the fix series and the order it lands in, so reviewers can see the whole plan and contributors know which files will be busy.

Wave 1: bug fixes

Each PR carries a regression test that fails on main.

Wave 2: current model defaults

Wave 3: low-conflict refactors

Wave 4: central modules

Busy files during this wave: llm.py, utils.py, eval/*, report/*.

Wave 5

Wave 6

  • Design issue: a harness = a profile + where the runner runs + a transcript parser.

How these land

  • Each PR has one purpose. Fixes, behaviour-preserving refactors, and changes to numbers or defaults are never mixed in one PR.
  • At most two open PRs per hot area. The next one is rebased after the previous one merges.
  • Wave 4 lands back-to-back. Until it is through, please hold PRs that touch llm.py, eval/* or report/*, or mention them here.

Activity

  1. napetrov commented on Oct 15, 2026

    @napetrov
    ContributorAuthor

    Heads-up for Wave 4: #49 touches eval/agent_runner.py only, in the tool-call loop and _summarize_tool_usage. It's a bug fix: arguments that fail to parse were replaced by {} and the tool still ran. It adds optional error/arguments_raw keys to transcript records and tool_usage.call_errors. It doesn't touch eval/arm_summary.py, report/ or llm.py.

    Planned follow-ups that do touch Wave 4 files, held until eval/records.py and eval/compare.py land:

    • arms run --reps N with a rep index, and choice consistency / pass^k in the selection summary;
    • call_errors aggregated in summarize_agentic_usage and the report;
    • selection metrics shown next to lift in the arms report.
  2. vlad-perevezentsev commented on Oct 28, 2026

    @vlad-perevezentsev
    Contributor

    Taking the second half of the Wave 5 item: the arms run module behind a typed run config. The shared CLI flags half stays with #94 (F1a #254 / F1b); nothing here touches flags.

    Two PRs:

    1. test(arms): pin what arms run, matrix-run and subjects run hand the arms runner #264 (open, tests only): pins what arms run, arms matrix-run and subjects run hand ArmRunner for every run-config field, both set away from its default and left out.
    2. After test(arms): pin what arms run, matrix-run and subjects run hand the arms runner #264 and fix(cli): run, compare, arms, tasks, explore and repo exit with a message on bad input or output #238 merge (fix(cli): run, compare, arms, tasks, explore and repo exit with a message on bad input or output #238 edits cmd_arms_matrix_run): a frozen ArmsRunConfig, built once from the parsed args, replaces the argparse.Namespace hand-off.
      • A matrix cell becomes dataclasses.replace(config, ...) instead of a copied and mutated Namespace.
      • subjects run builds the config directly; FORWARDED_RUN_CONFIG_FIELDS, forwarded_run_config() and the regex test over getattr(args, ...) go away.
      • The run itself moves out of commands/ into its own module (run_arms / run_matrix). commands/arms.py keeps argument parsing, output paths, printing and exit codes, and _build_arms_output leaves the growth baseline.
      • Field names stay the current dest names, and no flag is added, renamed or removed. F1b can then rename them to the registry's names in one place.
      • stdout and the arms.v1 artifact do not change, and test(arms): pin what arms run, matrix-run and subjects run hand the arms runner #264 must pass unchanged.

    Found while writing #264 and left as is, since adding them changes behaviour: subjects run has no --temperature, --seed, --judge-temperature, --judge-panel, --stats-correction, --session-turns or --turn-reminder, and arms matrix-run has no --session-turns/--turn-reminder.

    @napetrov, does this split with F1b work for you?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions