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-055 — Raw-Space Model I/O Contract, Status Proposed
views-models ADR-012 — Target Scale and Prefix Convention, Status Active
views-pipeline-core ADR-003 — Authority 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
- 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.
- 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?
- Carry the evidence in: the
ln_ configs still live, the 5fcfe43/08ee2eb window, and ADR-0007's two-month contradiction.
- 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.
- 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
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
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-055— Raw-Space Model I/O Contract, Status Proposedviews-models ADR-012— Target Scale and Prefix Convention, Status Activeviews-pipeline-core ADR-003— Authority of Declarations over InferenceADR-055's own Consulted list shows the true reach:views-hydranetADR-003/046/028 andevaluation_contract_v1,views-stepshifterADR-003,views-r2darts2ADR-012,pipeline-coreADR-003/042, and CICs forForecastingModelManager,DatasetTransformationModule,PredictionFrame.ADR-012binds 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: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-012statesln_/lx_"must not appear as targets in new model configurations" — yetln_ged_sb_dep,ln_sb_best,ln_ns_best, andln_os_bestare still present inviews-modelsmodel configs. AndADR-055, the binding rule everything else defers to, is still Proposed.ADR-012also records a real incident: commit5fcfe43(2025-11-20) silently addednp.log1p/np.expm1insideviews-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 aProposedrecord 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
þingit/— seeþingit/README.mdfor the protocol. Seats needed at minimum:views-pipeline-core,views-models,views-hydranet,views-stepshifter,views-evaluation.ADR-055. The question is:docs?ADR-055get promoted, or does a new org-level record cite it?ADR-055move toAcceptedas part of this?ln_configs still live, the5fcfe43/08ee2ebwindow, and ADR-0007's two-month contradiction.ADR-0007against 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 toADR-0000cl. 2 — an unexplained exception is how the next ADR-0007 happens.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
ln_configs, the5fcfe43/08ee2ebwindow, ADR-0007's contradictiondocs/ADR/, or a documented exception toADR-0000cl. 2ADR-055's status resolved, and repo-level records' relationship to the new org-level record statedADR-0000amended to describe when repo-level governance of a multi-repo concern is acceptableADR-0007's supersession pointer updated to reflect the outcomeValidation
Not mechanically verifiable — this is a deliberation. The check is that a reader can answer, from
docsalone, "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 --checkRelevant files
þingit/README.mdandþingit/_skeleton/— the protocolviews-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