Repository navigation
Description
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):
resolve_params(archive_selection, {"sampling": "sigmoid-novelty"})→algorithm.params.sampling: must be one of ['sigmoid_novelty', 'novelty', 'performance', 'uniform', 'best'], got 'sigmoid-novelty'{"sampling": "SIGMOID_NOVELTY"}and{"archive_mode": "keep-all"}/{"archive_mode": "KEEP_ALL"}(dgm) and{"mode": "COSINE"}(skillopt) fail the same way{"sampling": "novlty"}dumps the list with nodid you mean 'novelty'?- Contrast:
{"batch-size": 2}already resolves tobatch_size(algorithms: unknown parameter names don't fold hyphens or suggest a near-miss (batch-size / bacth_size → batch_size) #876);algorithms show archive-selectionalready folds the card name (algorithms show/run: algorithm names are case- and hyphen-sensitive #696)
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"})(andSIGMOID_NOVELTY) returnssampling == "sigmoid_novelty" -
dgmarchive_mode=keep-all/KEEP_ALL→keep_all;skilloptmode=Linear→linear -
algorithms run archive_selection <prompt> <cases> --param sampling=sigmoid-noveltywrites that canonical value in the spec -
sampling=novltyerrors withdid you mean 'novelty'? -
sampling=greedystill errors withmust 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