Give dataset identity room for a second provider and tick resolution #274
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Today a dataset is identified by a bare symbol string —
"FRA40","GER40". Two axes are silently collapsed into that one string, and both are set to change: which provider supplied the data, and at which resolution it was recorded. Neither has any representation today — not in the selection syntax, not in the store, not in the file index.The two collapsed axes
GER40from Pepperstone and from another source —"GER40"no longer identifies one dataset, and no authored reference can say which."FRA40"no longer names one series but must select between M1 and tick.Where the flat key sits (verified against the engine source)
The symbol string is the shared identity across the pipeline — but not uniformly, and the precise spread bounds any migration:
data.instruments: Vec<String>(crates/aura-research/src/lib.rs:475).list_m1_months(data_path, symbol)scans for<symbol>_YYYY_MM.m1files (crates/aura-ingest/src/lib.rs:460).CellRealization.instrument: String(crates/aura-registry/src/lineage.rs:149).content_id_of,crates/aura-research/src/lib.rs:712), and the symbol lives inside those bytes (a campaign doc'sinstruments). Changing the identity shape therefore re-serializes those docs to new content ids — the store is in the blast radius as content, not as key.--real <SYM>flag (crates/aura-cli/src/main.rs:553), and only campaign documents name instruments statically.So a move from
symbolto a structured identity is a core-vocabulary migration touching authored campaign documents, the file index, the fault surface, and (by re-hashing) the store at once — while leaving blueprints untouched. That cross-surface reach is why it reads as milestone-scale, not a single issue's worth of work.Filed now, not built now
Building any of this today would be premature: there is one provider and one resolution, so a multi-provider selector that always says "Pepperstone" is ballast, and a guessed identity shape is an abstraction that has to be torn out when the real requirement arrives. What is recorded now is the analysis — which axes collapse, where the flat key sits, why it is expensive — because that analysis is cheap while fresh and costly to reconstruct once a second provider or a tick import forces the question under time pressure.
Not the inspect surface's problem
The
aura data inforeshaping (#273) deliberately carries noproviderorresolutionfield and no stub for either. That verb inspects a dataset; it does not select one, and its JSON output is additively extensible — aproviderorresolutionsfield can appear there for free once the axes are real, in the shape reality then dictates. The identity/selection problem is upstream of the inspect surface and is what this issue holds.Open questions (not decided here)
provider:symbol, a separate field, or a list (one instrument recorded by several providers)?Re-anchoring note after the #295 shell-boundary extraction (merged
4ed6455): four of this issue's five source citations are unchanged and still accurate verbatim —crates/aura-research/src/lib.rs:475(pub instruments: Vec<String>),crates/aura-research/src/lib.rs:712(content_id_of),crates/aura-ingest/src/lib.rs:460(list_m1_months), andcrates/aura-registry/src/lineage.rs:148(CellRealization.instrument, off by one from the original #149 due to unrelated edits). None of aura-research, aura-ingest, or aura-registry were touched by #295's extraction.The fifth citation has drifted.
crates/aura-cli/src/main.rs:553no longer names the--real <SYM>flag; that line is nowmc_member_line, an unrelated report-formatting helper. The--realresolution now lives atdata_choice_from(crates/aura-cli/src/main.rs:~1576), and theDataChoice/DataSourcetype it constructs was moved out of aura-cli into the newaura-runnercrate as part of #295 (crates/aura-runner/src/family.rs, imported atcrates/aura-cli/src/main.rs:56). Binding an instrument at run time is therefore no longer a single-crate concern: the flag parse stays in aura-cli, but the type it produces, and the family builders that consume it, live in aura-runner.This does not change the issue's thrust. The decided document-first direction (#300) does not list
--realamong the flags migrating into document vocabulary (that list is --axis, --from/--to, --stop-length/--stop-k, --select, --block-len, --resamples, --seeds) — instrument selection is already document-expressible today viaDataSection.instruments, so--realremains CLI sugar for the ad-hoc single-instrument case rather than a flag needing new document vocabulary invented for it. Read together with the ledger's C25 amendment (text artifacts are the canonical layer; every control surface is a projection over them), the natural home for a future provider/resolution axis isDataSectionin aura-research, not a new CLI flag family — which answers this issue's open question about where the axis belongs, without deciding its shape (provider:symbol vs. separate field vs. list), which remains genuinely open. See also the C26 ledger entry (docs/design/INDEX.md,aura-runner'sbindingmodule) for the adjacent post-#295 crate split on column binding.