Fuaran.UI.OpStream.Dag.Abstractions
0.39.0
Prefix Reserved
dotnet add package Fuaran.UI.OpStream.Dag.Abstractions --version 0.39.0
NuGet\Install-Package Fuaran.UI.OpStream.Dag.Abstractions -Version 0.39.0
<PackageReference Include="Fuaran.UI.OpStream.Dag.Abstractions" Version="0.39.0" />
<PackageVersion Include="Fuaran.UI.OpStream.Dag.Abstractions" Version="0.39.0" />
<PackageReference Include="Fuaran.UI.OpStream.Dag.Abstractions" />
paket add Fuaran.UI.OpStream.Dag.Abstractions --version 0.39.0
#r "nuget: Fuaran.UI.OpStream.Dag.Abstractions, 0.39.0"
#:package Fuaran.UI.OpStream.Dag.Abstractions@0.39.0
#addin nuget:?package=Fuaran.UI.OpStream.Dag.Abstractions&version=0.39.0
#tool nuget:?package=Fuaran.UI.OpStream.Dag.Abstractions&version=0.39.0
Fuaran.UI.OpStream.Dag.Abstractions
The opt-in, rung-4 branching-DAG generalisation of the Fuaran op-stream.
The linear op-stream (Fuaran.UI.OpStream.Abstractions) chains applied TreeOps
into a SHA-256 hash-chain — one parent per record, one head. This package
generalises the temporal graph to a content-addressed Merkle-DAG: records
carry Parents: string list (0..n parent hashes) instead of a single
PreviousHash, so a history can branch and merge.
The spatial graph is untouched: the Node<'Msg> tree stays a tree and the
10-op TreeOp algebra is unchanged. Branch and merge are properties of how
op-records link, never new TreeOp cases.
What ships here
| Type / module | Role |
|---|---|
DagOpRecord<'Msg> |
Content-addressed, multi-parent op-record. Parents in author order (primary first); hash sorts them so merge identity is parent-order-independent. Merge nodes commit to an outcome hash (the canonical hash of the resulting tree), not the op-path. |
DagOpRecord.ofLinear |
Embeds a linear OpRecord history as a single-parent DAG — the degenerate-equivalence path (same resulting tree, verifiable chain, no data migration). |
DagTopology |
Pure reachable / isAncestor / lca over a getParents lookup. LcaResult is None / Unique / Ambiguous (the last = "needs 3-way merge — Phase 179"). |
DagVerify |
Integrity check: parent-linkage + content-address recompute. Tombstoned records keep their hash (payload pruned) and the chain still verifies. |
IDagOpStreamSink<'Msg> |
Durable superset interface: content-addressed Add, atomic TryAdvanceHead CAS on the trunk head, topology queries, and tombstone pruning. |
Posture
- Opt-in. A consumer that references only
Fuaran.UI/.Renderer/.Ops/ the linear.OpStream.*packages pulls none of this binary or API. The merge engine (Fuaran.UI.OpStream.Dag.Merge) requiresIDagOpStreamSink, so DAG behaviour is structurally unreachable from the linear path. - FGP 2 / FGP 6. Depends on
FSharp.Core+Fuaran.UI+Fuaran.UI.Ops+ the linearFuaran.UI.OpStream.Abstractionsonly. No orchestration-private dependency; Apache-2.0-clean alongside the linear abstractions.
Apache-2.0 licensed — see the repo LICENSE.
| 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
- Fable.Core (>= 5.0.0)
- FSharp.Core (>= 10.1.300)
- Fuaran.Core.Column (>= 0.11.0)
- Fuaran.Core.DataFrame (>= 0.11.0)
- Fuaran.Core.Function (>= 0.11.0)
- Fuaran.Core.Ops (>= 0.11.0)
- Fuaran.Core.OpStream (>= 0.11.0)
- Fuaran.Core.Tree (>= 0.11.0)
- Fuaran.Core.Validator (>= 0.11.0)
- Fuaran.Core.Wire (>= 0.11.0)
- Fuaran.UI (>= 0.39.0)
- Fuaran.UI.Ops (>= 0.39.0)
- Fuaran.UI.OpStream.Abstractions (>= 0.39.0)
NuGet packages (4)
Showing the top 4 NuGet packages that depend on Fuaran.UI.OpStream.Dag.Abstractions:
| Package | Downloads |
|---|---|
|
Fuaran.UI.OpStream.Dag.Merge
M1 branch-merge engine for the Fuaran op-stream DAG (opt-in, rung-4). LCA over the DAG (unique-base), spine replay, fast-forward, and disjoint-(NodeId,facet) auto-merge with a deterministic NodeId-canonical-bytes tie-break (no wall-clock). Merge nodes commit to the canonical encoding of the resulting tree (outcome-hash), so two hosts agree iff they reach the same tree; overlapping changes refuse with the contended cells named. Requires IDagOpStreamSink, so DAG behaviour is structurally unreachable from the linear path. Apache-2.0 licensed. |
|
|
Fuaran.UI.OpStream.Dag.Inspect
DAG-aware op-stream inspector substrate for the Fuaran op-stream DAG (opt-in, rung-4). A derived, read-only view over the branching DAG: a layered render model (branches, merge nodes, heads/leaves from the sink topology), audition-by-content-addressed-coordinate (replay a node to its snapshot, with a host preview hook), a precedence + retention/tombstone overlay, and arbitrary-coordinate snapshot-diff (the DAG generalisation of the linear Phase 57 adjacent-step diff). Consumes the DAG abstractions + merge engine + the linear Replay TreeDiff; emits no op-stream records or telemetry (FGP 5 — a consumer of the stream, not a writer). Requires the DAG packages, so it is structurally unreachable from the light path. Apache-2.0 licensed. |
|
|
Fuaran.UI.OpStream.Dag.Sqlite
SQLite-backed IDagOpStreamSink — durable content-addressed branching-DAG sink. The trunk-head compare-and-swap is a conditional UPDATE … WHERE head = expected (atomic at the statement level), so concurrent advancers leave exactly one winner. Opt-in (rung-4) companion to Fuaran.UI.OpStream.Dag.Abstractions. Apache-2.0 licensed. |
|
|
Fuaran.UI.OpStream.Dag.InMemory
In-memory IDagOpStreamSink — per-process content-addressed branching-DAG sink with a guarded-ref tryAdvanceHead CAS. Opt-in (rung-4) companion to Fuaran.UI.OpStream.Dag.Abstractions, for tests and ephemeral preview environments. Apache-2.0 licensed. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.39.0 | 0 | 8/27/2026 |
| 0.35.0 | 104 | 8/24/2026 |
| 0.32.0 | 119 | 8/23/2026 |
| 0.31.0 | 124 | 8/21/2026 |
| 0.30.0 | 122 | 8/21/2026 |
| 0.29.0 | 156 | 8/19/2026 |
| 0.28.0 | 131 | 8/18/2026 |
| 0.27.0 | 128 | 8/18/2026 |
| 0.26.0 | 133 | 8/18/2026 |
| 0.18.0 | 128 | 8/10/2026 |
| 0.15.0 | 121 | 8/9/2026 |
| 0.12.0 | 144 | 7/31/2026 |
| 0.11.0 | 141 | 7/30/2026 |
| 0.10.0 | 142 | 7/29/2026 |
| 0.6.0 | 136 | 7/27/2026 |
| 0.4.0 | 141 | 7/26/2026 |
| 0.3.0 | 149 | 7/24/2026 |