Skip to content

cli: choice parameter values reject hyphen/case aliases (sigmoid-novelty → sigmoid_novelty) #888

Closed

Description

@Birfy

Phenomenon

Algorithm parameter names already fold case and -/_ (batch-size → batch_size) and a near-miss typo ends with did you mean 'batch_size'? (#876). Algorithm names (#874), --kind (#882) and --agent (#884) do the same.

Parameter values that are declared choices= do not. A user who writes the hyphenated or shouty spelling of a documented choice — --param sampling=sigmoid-novelty, --param archive_mode=keep-all, --param mode=COSINE, or the same strings in a spec's algorithm.params — gets a hard reject that only dumps the list. There is no fold and no did you mean …?, even for a close typo such as novlty.

This blocks a quick algorithms run smoke: the help text shows sigmoid_novelty / keep_all, and people naturally type the hyphenated form they use everywhere else.

Evidence

On current main (ebf39689b49e1ef43e8442dd86c2ee62b25307de):

Shipped choice parameters today: archive_selection.sampling, dgm.archive_mode, skillopt.mode.

Expected

A string choice value that matches exactly one declared choice once case and -/_ are ignored resolves to that choice (sigmoid-novelty → sigmoid_novelty, KEEP_ALL → keep_all, Linear → linear). algorithms run … --param … and a spec's algorithm.params both store the canonical spelling (same Param.coerce path, so MCP / plugin hosts inherit it).

A remaining unknown that is a close typo of one choice names that guess (novlty → did you mean 'novelty'?). A nonsense value (greedy) still lists the choices and does not guess.

Acceptance

  • resolve_params(archive_selection, {"sampling": "sigmoid-novelty"}) (and SIGMOID_NOVELTY) returns sampling == "sigmoid_novelty"
  • dgm archive_mode=keep-all / KEEP_ALL → keep_all; skillopt mode=Linear → linear
  • algorithms run archive_selection <prompt> <cases> --param sampling=sigmoid-novelty writes that canonical value in the spec
  • sampling=novlty errors with did you mean 'novelty'?
  • sampling=greedy still errors with must be one of [… tit] and no guess
  • changelog.d fragment

Non-goals

  • Folding spaces or other punctuation (sigmoid novelty, sigmoid.novelty)
  • Changing what the algorithms do with a value once it is canonical
  • Adding new choice parameters

Risk hint

T1/T2 (Param.coerce validation only; no evolve-loop change).

Related

#876 / #877 (parameter-name fold), #874 (algorithm-name fold / did-you-mean), #882, #884.

Activity

  1. added
    bugSomething isn't working
    area:cliThe agentdescent command line (cli.py, doctor, plan/evolve/status/apply)
    on Nov 8, 2026
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

    area:cliThe agentdescent command line (cli.py, doctor, plan/evolve/status/apply)bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions