Skip to content

S9 — Open a þing on target-scale and transform authority #93

Description

@Polichinel

Epic: #84 · Depends on: S1 · Blocks: nothing · Long-running, gated on people not code

Problem — the platform's most consequential contract is governed at the wrong altitude

Target scale and transform authority — who applies a transform, who inverts it, and what is authoritative about the numerical scale of a value — is currently governed entirely by repository-level records:

  • views-pipeline-core ADR-055Raw-Space Model I/O Contract, Status Proposed
  • views-models ADR-012Target Scale and Prefix Convention, Status Active
  • views-pipeline-core ADR-003Authority of Declarations over Inference

ADR-055's own Consulted list shows the true reach: views-hydranet ADR-003/046/028 and evaluation_contract_v1, views-stepshifter ADR-003, views-r2darts2 ADR-012, pipeline-core ADR-003/042, and CICs for ForecastingModelManager, DatasetTransformationModule, PredictionFrame. ADR-012 binds every modeling library — views-hydranet, views-stepshifter, views-baseline, views-r2darts2 — plus evaluation, ensembling, reporting, and the prediction store.

Apply ADR-0000's admission rule:

"An ADR belongs in this repository if and only if it binds more than one repository."

This binds at least six. It belongs here and it is not here.

Why this matters, and why it is not merely bookkeeping

The org-level record that should have governed this — ADR-0007 — instead asserted the opposite of current platform policy for two months (S1). That is the direct consequence of the decision living at repo level: the sibling repos reasoned it through carefully and correctly, and the organization-level record was never part of the conversation.

There is also live evidence the contract is not settled in practice. views-models ADR-012 states ln_/lx_ "must not appear as targets in new model configurations" — yet ln_ged_sb_dep, ln_sb_best, ln_ns_best, and ln_os_best are still present in views-models model configs. And ADR-055, the binding rule everything else defers to, is still Proposed.

ADR-012 also records a real incident: commit 5fcfe43 (2025-11-20) silently added np.log1p/np.expm1 inside views-stepshifter, forcing log-space training with no config declaration; 08ee2eb (2026-04-11) reverted it. Artifacts serialized during that five-month window may be in log-space with nothing recording it. That is the failure mode this contract exists to prevent, and it has already happened once.

Why this is a þing, not a pull request

Lifting this to org level means writing a record that binds six repositories, at least one of which (views-pipeline-core) has a Proposed record that everything else already defers to. That requires the seat-holders of those repositories to agree — it cannot be decided from this repository.

The þingit/ protocol exists for exactly this: cross-repo deliberation where each repo takes its turn from its own seat.

Work

  1. Open the matter via þingit/ — see þingit/README.md for the protocol. Seats needed at minimum: views-pipeline-core, views-models, views-hydranet, views-stepshifter, views-evaluation.
  2. Frame the question narrowly. Not "how should transforms work" — that is settled and well-reasoned in ADR-055. The question is:
    • Should the raw-space I/O contract be lifted to an org-level ADR in docs?
    • If yes, does ADR-055 get promoted, or does a new org-level record cite it?
    • What happens to the repo-level records — superseded, or retained as repo-specific applications?
    • Does ADR-055 move to Accepted as part of this?
  3. Carry the evidence in: the ln_ configs still live, the 5fcfe43/08ee2eb window, and ADR-0007's two-month contradiction.
  4. Record the outcome. If the þing concludes it should be lifted, write the org-level ADR here and supersede ADR-0007 against it (S1 will already have superseded it against the sibling records; this refines the pointer). If it concludes the decision should stay at repo level, record that as a deliberate exception to ADR-0000 cl. 2 — an unexplained exception is how the next ADR-0007 happens.
  5. Either outcome updates ADR-0000, which currently implies no such exception exists.

Blocked on

Seat-holder availability across five repositories. This is people-time, not implementation time, and should be opened early and run in parallel with the rest of epic #84 rather than gating it.

Acceptance criteria

  • þing opened with the question framed as above, and seats invited
  • Evidence pack included: live ln_ configs, the 5fcfe43/08ee2eb window, ADR-0007's contradiction
  • Outcome recorded — either an org-level ADR in docs/ADR/, or a documented exception to ADR-0000 cl. 2
  • If lifted: ADR-055's status resolved, and repo-level records' relationship to the new org-level record stated
  • If not lifted: ADR-0000 amended to describe when repo-level governance of a multi-repo concern is acceptable
  • ADR-0007's supersession pointer updated to reflect the outcome

Validation

Not mechanically verifiable — this is a deliberation. The check is that a reader can answer, from docs alone, "what is authoritative about the numerical scale of a prediction, and which record says so?" Today they cannot.

./scripts/validate_docs.sh                    # if a new ADR is written here
python3 scripts/generate_adr_index.py --check

Relevant files

  • þingit/README.md and þingit/_skeleton/ — the protocol
  • views-pipeline-core/documentation/ADRs/055_raw_space_model_io_contract.md (read-only)
  • views-models/docs/ADRs/012_target_scale_and_prefix_convention.md (read-only)
  • views-pipeline-core/documentation/ADRs/003_authority_of_declarations_over_inference.md (read-only)
  • views-pipeline-core/documentation/ADRs/042_prediction_frame_adoption.md (read-only)
  • ADR/00-meta/0000-federated-adrs-with-central-index.md — cl. 2, the admission rule at issue

Metadata

Metadata

Assignees

No one assigned

    Labels

    blockedCannot proceed until a dependency clearsneeds-decisionRequires a human judgement call before work startsplanningScoping, investigation, or decision workstoryA single implementable unit of an epic

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions