ToolUp.Facts.Shared
0.38.1
Prefix Reserved
dotnet add package ToolUp.Facts.Shared --version 0.38.1
NuGet\Install-Package ToolUp.Facts.Shared -Version 0.38.1
<PackageReference Include="ToolUp.Facts.Shared" Version="0.38.1" />
<PackageVersion Include="ToolUp.Facts.Shared" Version="0.38.1" />
<PackageReference Include="ToolUp.Facts.Shared" />
paket add ToolUp.Facts.Shared --version 0.38.1
#r "nuget: ToolUp.Facts.Shared, 0.38.1"
#:package ToolUp.Facts.Shared@0.38.1
#addin nuget:?package=ToolUp.Facts.Shared&version=0.38.1
#tool nuget:?package=ToolUp.Facts.Shared&version=0.38.1
ToolUp.Facts
A bitemporal, content-addressed fact store for ToolUp.Platform — the typed memory tier that numeric answers quote verbatim. Companion package (Phase 520); a deployment that composes no fact store pays zero runtime cost.
What this is
A fact is a verified assertion about a (subject, metric, period): a
value, with provenance, produced by deterministic computation, asserted by
a human, or imported from a peer. The model is deliberately small and every
guarantee is decidable:
- Content-addressed —
FactId = hash(subject, metric, period, method, inputHashes). Re-asserting an identical tuple is idempotent (the store converges under replay); a changed input yields a new fact whose supersession edge is derived, never declared. - Bitemporal —
Periodis valid time,AsOfis transaction time. "The fact base as of May 3" is a first-class query. A forecast is simply a fact whose valid time extends beyond its transaction time — no flag; the timestamps carry it. - Append-only — a correction is a supersession (a new fact with a
later
AsOf), never a mutation. - Disclosure-classified at birth — every fact carries a
Disclosure(Surfaceable/Internal/Restricted policy) from its first assertion. Egress enforcement is a later phase; the field lands here.
| Concern | File | Types |
|---|---|---|
| Fact model + laws | Shared/FactTypes.fs |
Fact, FactValue, MethodRef, Disclosure, TemporalExtent, Fact.compute / lineageKey / Freshness.derive |
| Store contract | Server/IFactStore.fs |
IFactStore, FactDraft, FactQuery |
| Blob-backed default | Server/BlobFactStore.fs |
BlobFactStore.create |
Why a companion, not core SDK
A fact base is a grounding capability, not platform substrate. Nothing
else in the SDK depends on IFactStore; analytics-only or CRUD-only
deployments never need it. Same rationale as ToolUp.AI / ToolUp.RAG not
living in ToolUp.Platform.
The companion is a consumer of substrate (IBlobStorage for storage,
IEventStore for the GP 6 audit trail under the reserved _facts source
module), not substrate itself.
How to use
open ToolUp.Facts
let store = BlobFactStore.create blobStorage eventStore
let! asserted =
store.Assert(
scopeId,
{ Subject = { Hierarchy = "geography"; Path = [ "uk" ] }
Metric = MetricRef "revenue"
Value = Scalar 1_250_000m
Period = { From = q2Start; To = q2End; Label = Some "Q2-2026" }
Method = Computed("sales.rollup", "1", paramHash)
Evidence = { ResultRef = Some resultId; InputHashes = [ dataHash ]; TriggerRef = None }
Confidence = None
Disclosure = Surfaceable }
)
// Reconstruct what we knew at a past transaction time (law L4):
let! asOfMay3 = store.Query(scopeId, FactQuery.forSubjectMetric subject metric |> FactQuery.asOf may3)
ServerConfig.FactStore (default NoFactStore) is the composition slot the
introspection manifest reports; BlobFactStore.create composes the store
directly today.
See also
docs/platform/facts.md— the fact model, and what belongs in a fact vs a result vs a model artifact.docs/platform/metric-registry.md— the metric & subject registry a fact references (Phase 519).
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Fuaran.Compute.DataFrame (>= 0.42.0)
- Fuaran.Core.Column (>= 0.40.2)
- ToolUp.Platform.Core (>= 0.38.1)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on ToolUp.Facts.Shared:
| Package | Downloads |
|---|---|
|
ToolUp.Facts.Server
ToolUp.Facts Server — IFactStore (append-only, bitemporal, content-addressed fact base with derived supersession + AsOf reconstruction) + BlobFactStore default. Depends on ToolUp.Platform.Server + ToolUp.Facts.Core. Phase 520. |
|
|
ToolUp.Facts.Client
ToolUp.Facts Client — the fact browse companion: a multi-page Feliz module over IFactBrowseApi showing declared fact tables, their run history and change summaries, and server-paged drill-down rows with one fact's provenance. Separate from the knowledge base client; depends on ToolUp.Platform.Client + ToolUp.Facts.Shared. Phase 895. |
|
|
ToolUp.Facts.Presentation
ToolUp.Facts.Presentation — from a gated fact series to a Fuaran-UI node. A presentation request (trend, breakdown, comparison or table; the whole of what a model may author for a block) and its JSON codec, and pure builders that draw a FactSeries as a validated Fuaran-UI node with the BlockProvenance that produced it. A withheld or absent point is never drawn as a number: it is left out of the rows and named with its reason. And the pipeline block: the request an evaluate_pipeline block part persists, the re-run's wire result and remoting contract, and the grid a result is drawn as. And the requests a stored page names — a presentation request or a pipeline request — in their canonical JSON, with the data a resolution of one carries. Compiled by both compilers, so a browser rebuilds exactly what a server built. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.38.1 | 0 | 11/1/2026 |
| 0.38.0 | 0 | 10/31/2026 |
| 0.37.0 | 93 | 10/29/2026 |
| 0.36.0 | 108 | 10/29/2026 |
| 0.35.0 | 70 | 10/28/2026 |
| 0.34.1 | 113 | 10/27/2026 |
| 0.34.0 | 123 | 10/26/2026 |
| 0.33.0 | 109 | 10/25/2026 |
| 0.32.0 | 127 | 10/24/2026 |
| 0.31.0 | 151 | 10/22/2026 |
| 0.30.0 | 153 | 10/20/2026 |
| 0.29.0 | 119 | 10/19/2026 |
| 0.28.0 | 111 | 10/19/2026 |
| 0.27.0 | 132 | 10/16/2026 |
| 0.26.0 | 126 | 10/12/2026 |
| 0.25.1 | 129 | 10/9/2026 |
| 0.24.1 | 135 | 10/6/2026 |