Skip to content

Define canonical response-domain configuration - #1270

Merged
AlexanderFengler merged 3 commits into
codex/1265-response-domainsfrom
codex/1265-response-domains-contract
Aug 30, 2026
Merged

Define canonical response-domain configuration#1270
AlexanderFengler merged 3 commits into
codex/1265-response-domainsfrom
codex/1265-response-domains-contract

Conversation

@AlexanderFengler

@AlexanderFengler AlexanderFengler commented Aug 30, 2026

Copy link
Copy Markdown
Member

Purpose

  • define one canonical response_domains mapping keyed by the physical non-RT columns in Config.response
  • normalize legacy choices through the same resolver while preserving established DDM, multichoice, RLSSM, and aDDM behavior
  • validate categorical, continuous, and circular columns independently without model-name or response-width branches

Closes the 3A slice of #1265 and targets the cumulative draft sink #1266.

Contract

  • Config.response remains the ordered physical DataFrame schema; this PR adds no semantic alias layer
  • categorical labels are exact integers, continuous bounds are optional and closed, and circular bounds are required and half-open
  • RT remains first and retains its existing positivity, deadline, and missing-row rules
  • raw canonical and legacy metadata cannot be supplied together; resolved single-categorical configs retain only a matching derived choices view
  • resolved configs are construction snapshots; unsupported nested mutation fails closed on revalidation instead of creating a second mutable compatibility source
  • multidimensional responses use separate scalar physical columns

Complexity ledger

  • production delta: 8 files, +397/-145 (net +252)
  • new architecture: one internal typed mapping, one pure resolver, and one per-column validation loop
  • public surface: the response_domains field on existing configuration/model objects and the optional register_model(response_domains=...) argument; no new exported class, enum, module, or registry
  • removed duplication: the 57-line choice-only RL validator and the old global choice-validation branch
  • retained compatibility: legacy choices remains an input and a derived view for exactly one categorical response
  • no model-name dispatch, dependency change, predictive-width work, or simulator integration

Verification

  • 283 passed, 32 deselected across focused configuration, validation, missing/deadline, HSSM, RLSSM, aDDM, registration, and sampling-smoke compatibility tests
  • ruff check src/hssm
  • ruff format --check on all changed Python files
  • mypy src/hssm (83 files)
  • pyrefly check
  • git diff --check
  • python scripts/check_docs_weight.py

The existing aDDM five-draw sampling smokes ran only as compatibility tests; no benchmark, recovery study, evidence artifact, or scientific inference was produced.

Deferred

  • arbitrary likelihood/predictive observation widths remain the focused 3B child
  • synthetic 1D-4D lifecycle proof and public migration docs remain 3C
  • dev-only response_kind / response_bounds become resolver adapters only in the final main -> dev integration

@coderabbitai

coderabbitai Bot commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 556728f6-330c-45f0-9247-6bdee71cf140

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@AlexanderFengler
AlexanderFengler merged commit 86c92f5 into codex/1265-response-domains Aug 30, 2026
7 checks passed
@AlexanderFengler
AlexanderFengler deleted the codex/1265-response-domains-contract branch August 30, 2026 22:45
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