← Insights

Research architecture · Applied Research

What did the system know at the time?

A historical query needs to distinguish the observation period, public release, and the information a particular system had captured.

October 2026 · 7 min read

A research dashboard can explain a February decision with a number revised in April. The value may be correct in today's dataset. It may also have been unavailable when the decision was made.

That is an engineering failure with an unusually convincing interface. The chart looks orderly, the period label is familiar, and the source is authoritative. The missing detail is the information set the query reconstructed.

Historical research needs a clear contract for time. A system may be asked what is currently believed about a past period, what was publicly available at a particular cutoff, or what that particular system had captured by then. Those are three useful questions. They can legitimately produce different answers.

The design work starts by making the distinction explicit enough to implement, inspect, and test.

The observation period is only one clock

A financial or economic value often describes a period that ended before it was published. A later release can revise the same observation. A client may capture either release after it became public, and a downstream calculation may run later still.

At least four moments can therefore matter: the period being described, the source's publication or availability time, local capture, and the production time of a derived result. A task may require additional context, such as an amendment's effective date or the time a reviewer accepted an interpretation.

The purpose is to preserve what each timestamp means. A field called date cannot carry all of them. Nor can a retrieval timestamp prove that content was public before retrieval: it records an observation by the client, with a particular source and method.

The same problem appears beyond finance. A laboratory observation can be imported after its original report date. A registry can backfill a historical event. A corrected measurement can retain the period of the original observation. A timeline needs enough semantics to distinguish a new event from new information about an old event.

Choose the question before choosing the version

Consider three query contracts.

A current-view query asks for the latest supported account of a historical period. Its answer can include later revisions, because those revisions are part of the question.

A public-information query asks for the version available to an eligible observer by a stated cutoff. It needs an availability basis, including any uncertainty in that basis. Public release and contractual access are relevant: a source available to one subscriber is not necessarily available to everyone.

A local-history query asks what this particular system had captured by the cutoff. That adds local recording history. It can be useful for an operational audit, a research replay, or an explanation of why a feature did not react to information that had already become public.

The interface and API should identify which contract is being used. A generic “as of” label can otherwise make a local archive appear more complete than it was, or make a current revised series look like a historical information set.

Work through one observation by hand

Use a fictional January observation with three versions. These values and timestamps are synthetic; they represent no actual economic series or investment result.

Synthetic January observation: public release and local capture

Scroll to see all columns →

Synthetic January observation: public release and local capture
VersionValuePublic releaseLocal capture
First release100February 15, 09:00 UTCFebruary 16, 09:00 UTC
Revision104March 3, 09:00 UTCMarch 4, 09:00 UTC
Later correction102April 8, 09:00 UTCApril 9, 09:00 UTC

At noon UTC on March 3, the public-information question can select 104. The local-history question still selects 100, because the system does not capture the revision until the next day. A current-view query after April 9 selects 102.

All three values concern January. Selecting on the observation period alone cannot distinguish their availability.

Two timelines showing public releases and later local capture of synthetic values 100, 104, and 102, with a March 3 noon cutoff.
The historical cutoff applies to the information-set contract. A provider's release and a client's later capture are separate events. Open full-size figure ↗

This small example is worth doing before writing a query. If stakeholders cannot agree on the expected answer at these cutoffs, the implementation lacks an acceptance criterion.

A vintage archive illustrates the distinction

ALFRED retains historical vintages of economic data, allowing research with versions available on past dates. ALFRED documentation also describes how release dates are determined when the original source date is unavailable.

FRED's real-time-period API defaults to today's view and permits date-based selection of earlier information. Its specified real-time boundaries are inclusive dates. FRED real-time-period semantics should therefore be read as the provider's own contract.

An application can build a finer-grained timestamp model around captured evidence. That is an additional design choice. It should preserve the provider's date-level meaning rather than silently promote it to a precise intraday publication guarantee.

This distinction becomes especially important when an answer is near a cutoff. If the available source establishes only a date, a system should not invent a time of day to make the record fit. It can use a documented convention or preserve the ambiguity, depending on the task.

Make the selection rule visible

A minimal version record can identify the subject and observation period, the value and units, the retained source, its availability basis, and local capture. Corrections should produce a new version or a traceable revision record rather than overwrite the only account of what was previously known.

A public-information query then selects an eligible source version under the stated cutoff. A local-history query adds the local capture condition. If later corrections to the archive itself matter, the recording history of those corrections also needs to be preserved.

Illustrative pseudocode can make the intended contract clear:

eligible_versions = versions_for(subject, observation_period)
    where public_availability <= cutoff

if question == locally_captured_information:
    eligible_versions = eligible_versions
        where captured_at <= cutoff

return select_version_under_declared_revision_policy(eligible_versions)

The final line carries real design work. The correct version is not always the row with the largest ingestion timestamp. Source amendments, replacement identities, conflicting sources, withdrawals, and equal timestamps need explicit handling.

This example uses inclusive timestamp comparisons. A database may represent version lifetimes with half-open intervals or another convention. Either can be implemented coherently, but boundaries, time zones, and tie-breaking rules must be stated and tested.

Current aggregates need careful interpretation

A convenient current API can answer a different question from a retained filing archive. SEC documentation, for example, describes live submission histories and XBRL data, while its frames endpoint selects last-filed facts matching a calendar period. EDGAR API documentation makes the aggregation behavior relevant to historical research.

The engineering implication is to retain the filing and version context required by the task. An observation labeled with an earlier quarter does not establish that the displayed value was available during that quarter. A current company-level aggregate should not quietly become the evidence for an earlier screen or decision.

The same care applies to units and scope. A value must retain the context needed to compare it with another value. Historical availability does not by itself establish that two differently defined observations are analytically comparable.

A useful research result carries both kinds of context: which version was eligible at the cutoff, and what the selected value actually describes.

Show the selected information set to the reviewer

A result is easier to trust when the reviewer can inspect the selected version and the reason it was eligible. The interface can show the observation period, the cutoff contract, the source's release context, local capture, and whether a newer version exists outside the historical view.

Table showing different public-availability and local-capture answers at seven cutoffs for the fictional observation.
Synthetic as-of table. The March 3 and April 8 rows differ because a new public version has not yet been captured locally. Open full-size figure ↗

This does not require placing every timestamp on the main screen. The primary view should make the question clear; a detail view can expose the provenance needed to reproduce the selection.

An explanation should also identify important missing evidence. If the archive lacks an older artifact or the publication date is uncertain, that changes the strength of a reconstruction. Filling the gap with today's value makes the interface cleaner while answering a different question.

Preserving a useful incomplete historical view gives the research team a basis for deciding whether to retrieve more evidence or narrow the conclusion.

Test the archive at the awkward boundaries

A meaningful test set should include a release before capture, a late-arriving historical record, a correction to an earlier value, and two sources with conflicting availability information. It should also include an observation with no eligible version at the cutoff.

Boundary tests deserve their own expected results: exactly at release time, just before local capture, at the start of a day-based provider interval, and after a source correction changes the archive's metadata. Tests should state the time zone and precision used.

For derived research, retain the transformation and configuration used with the selected inputs. Repeating a historical source selection through a new calculation can be a valuable current analysis, but it is different from reproducing the old system's complete output.

An operational replay should be explicit about which of those tasks it performs. This makes disagreements diagnosable: the source selection may agree while the calculation version differs, or the calculation may agree while an earlier local capture was missing.

Build one source family all the way through

A practical first milestone can focus on one source family and one historical question. Capture immutable source versions, define their availability semantics, record local arrival, and implement a clearly named cutoff query.

Then follow a single observation through release, revision, late capture, and a derived answer. Give a reviewer enough information to explain why the public and local views differ at a chosen cutoff.

The value of this architecture is an honest account of the information used. It lets a team examine an old decision without importing later knowledge into it, compare a historical view with today's account, and identify exactly what remains unknown.

Protabyte builds research systems that keep source evidence, version history, and analytical context connected. Talk with us about temporal data design or the reproducibility of your research workflow.