MultiSiteManufacturing - glossary
This page is part of the documentation for Orleans.Lattice 9.9.0 (release line 9.9), built 2026-10-04. It is also published as markdown, with every table and list, at glossary.md, and llms.txt lists every page.Terms used throughout the sample. Split into the domain side (manufacturing / quality / traceability) and the technical side (Orleans, Lattice, CRDTs, replication).
Domain
| Term | Meaning |
|---|---|
| HPT blade | High-Pressure Turbine blade. The single product family modelled in v1 (HPT-BLD-S1). |
| Family | Short code identifying a product line (e.g. HPT-BLD-S1, HPT-DSK-S1, LPC-BLD). |
| Serial number | Globally unique part identifier, shaped {family}-{year}-{seq:D5}. Example: HPT-BLD-S1-2028-00142. |
| Process stage | A point in the part lifecycle: Forge, HeatTreat, Machining, NDT, MRB, FAI. |
| Process site | A physical facility where a stage is performed (e.g. Ohio Forge, Toulouse NDT Lab). One-to-many with stages. |
| Forge | Raw forging operation - the first stage. |
| Heat treat | Vacuum / aging thermal cycles that develop material properties. |
| Machining | 5-axis milling to final geometry. |
| CMM | Coordinate Measuring Machine - dimensional inspection. |
| NDT | Non-Destructive Testing - finds flaws without damaging the part. |
| FPI | Fluorescent Penetrant Inspection - NDT technique for surface cracks. |
| Eddy current | NDT technique using electromagnetic induction for near-surface flaws. |
| X-ray | NDT technique for internal defects. |
| NC / NCR | Non-Conformance / Non-Conformance Report. Raised when a defect is discovered; carries a severity (Minor, Major, Critical). |
| MRB | Material Review Board. Dispositions non-conformances as UseAsIs, Rework, Scrap, or ReturnToVendor. |
| Disposition | The decision an MRB makes about a non-conforming part. |
| UseAsIs | MRB disposition accepting the part despite a non-conformance; demotes FlaggedForReview (and armed Rework) back to Nominal. |
| Rework | Corrective operation to bring a non-conforming part back into spec. Also the corresponding lattice state. |
| Scrap | Terminal disposition - the part is destroyed. Terminal compliance state. |
| FAI | First Article Inspection - the final certification step; produces a FaiReportId and an InspectorId. |
| Heat lot | A batch of material sharing the same heat-treat history; carried on ProcessStepCompleted facts where relevant. |
| Digital thread | The ordered, queryable history of every fact recorded against a part across sites. What the sample's UI renders per part. |
| Severity lattice | The totally ordered set of compliance states: Nominal < UnderInspection < FlaggedForReview < Rework < Scrap. |
| ComplianceState | Current lattice position of a part, computed by folding its fact log. |
| Retest armed | Internal flag that gates MrbDisposition(UseAsIs) demotion of Rework -> Nominal. Set by a passing post-rework inspection or ReworkCompleted(retestPassed=true); cleared by a failed retest or failed inspection, by any non-conformance, and by any MRB disposition. |
| Operator | Human user driving the UI. The sample uses a static operator:demo identity - no operator sign-in in v1. |
Technical
Orleans and hosting
| Term | Meaning |
|---|---|
| Orleans | Distributed actor framework ("virtual actors" called grains) used by the sample for single-writer-per-entity coordination, timers, reminders, and persistence. |
| Grain | Virtual actor - a uniquely-keyed, single-threaded object managed by Orleans. Transparently activated on first use and deactivated when idle. |
| Grain interface | The public API of a grain (ISomethingGrain). All grain calls go through this interface. |
| Grain key | The identity of a grain instance. In this sample, site names like "OhioForge" (the ProcessSite value as a string), short strings like backend names ("baseline", "lattice") and part serials, and the fixed integer key 0 for the singleton grains. |
| Silo | An Orleans host process. This sample runs two silos per cluster. |
| Cluster | A set of silos sharing a membership table. The sample runs two - us and eu. |
| Grain storage | Orleans' persistent state facility. Here backed by Azure Table Storage; the sample's own grains use the msmfgGrainState provider. |
| Grain timer | A periodic callback registered inside a grain activation. No minimum period; auto-disposed on deactivation. Used for the replication shipper's steady-state pump (every 100 ms by default). |
| Reminder | Durable, cluster-wide scheduled callback surviving silo restarts. Minimum period of 1 minute. Used for the replication shipper's keepalive. |
| RequestContext | Orleans per-call ambient dictionary flowing across grain calls. The sample no longer threads its own loop-break flag through it - loop-breaking now rides the origin stamped on every write-ahead-log record (see Replication section below). |
| TestingHost | Orleans' in-process test-cluster fixture. Each of the sample's test fixtures stands up its own single-silo cluster with in-memory storage (the gRPC contract tests instead start the host itself in its in-memory Testing environment); the coordinated-restore test stands up two such clusters over one shared backup sink directory. |
Lattice
| Term | Meaning |
|---|---|
| Orleans.Lattice | The library this sample exercises. Distributed B+ tree with string keys and byte[] values, sharded across Orleans grains. |
| Tree | A named Lattice namespace (e.g. mfg-facts). Independent key space, independent persistence. |
| ILattice | The public tree API - GetAsync, SetAsync, DeleteAsync, range scans. |
| HLC | Hybrid Logical Clock. A (wallClockTicks, counter) pair that provides a monotonic, roughly-wall-clock-aligned ordering across distributed producers. |
| Range scan | Half-open key-range iteration over a tree; the primitive behind per-part history and the partition-heal shadow sweep. |
| Tag index | The built-in Orleans.Lattice secondary index (opened through the injected ILatticeTagIndexFactory). Associates tags with keys and answers WithAnyTags / WithAllTags queries from a sibling tag-{name} membership tree. Powers the sample's per-site "parts at site X" view over the part-major mfg-site-activity tree. |
| Lex order | Lexicographic byte order of keys. Zero-padded HLC components (D20, D10) embedded in keys make lex order match HLC order. |
CRDTs and convergence
| Term | Meaning |
|---|---|
| CRDT | Conflict-free Replicated Data Type. A structure whose merge operation is commutative, associative, and idempotent, so replicas converge regardless of delivery order or duplication. |
| OR-Set | Observed-remove set. Supports add and remove; merge unions the add and remove dots, so a concurrent add beats a remove (add-wins). Used for mfg-part-labels (one OR-Set per serial). |
| LWW register | Last-Writer-Wins register. A single-cell CRDT where the "latest" write (by some timestamp) wins. Used for mfg-part-operator (one register per serial). Safe only when every replica compares the same timestamp - which is why the sample leaves that tree out of cross-cluster replication. |
| Fold | Left-to-right reduction over a sequence - (state, fact) → state'. Both backends fold the same fact list; they differ only in the order. |
| HLC-ordered fold | Folding after sorting by (WallClockTicks, Counter, FactId). Converges under reorder. The sample's lattice backend. |
| Arrival-order fold | Folding in the order facts were appended to a grain's list. Drifts under reorder. The sample's baseline backend. |
| Convergence | Property that replicas processing the same set of updates (in any order) reach the same state. |
| Divergence | State where two replicas (or two backends) disagree. In the sample, dashboard rows where baseline ≠ lattice are highlighted red. |
| Shadow prefix | Key-prefix discipline used by PartCrdtStore during a simulated partition - writes go to a shadow key, and PartitionHealHostedService promotes them back onto the canonical key on heal. |
Replication
Provided by Orleans.Lattice.Replication (shipper + applier, shipping
from the core write-ahead log) and Orleans.Lattice.Replication.Grpc
(HTTP/2 gRPC push transport).
| Term | Meaning |
|---|---|
| WAL | The core Orleans.Lattice per-tree write-ahead log of every committed mutation, persisted here by Orleans.Lattice.Storage.AzureTable. Replication ships from it; it replaces the sample's earlier hand-rolled _replog__{tree} tree. |
| Shipper grain | One package-managed grain per (tree, peer-cluster) pair. Drains the WAL, calls IReplicationTransport.SendAsync, advances its per-peer cursor on ack. |
| Applier | Receiver-side package component that merges incoming batches into the local lattice using the tree's CRDT semantics (LwwRegister, OrFlag, or OrSet). |
| Cursor | The shipper's per-peer resume position: for each WAL partition, the next unread sequence number, advanced past an entry only once the peer acknowledges it, kept alongside the highest HLC shipped and acknowledged. The sequence, not the HLC, marks what has been shipped - HLCs are not monotonic within a partition, so an entry below the highest shipped HLC can still be unshipped. The package persists both in grain storage. |
| Replication mode | Per-tree CRDT semantic chosen on opt-in. LwwRegister for mfg-facts (write-once keys) and mfg-site-activity (the newest fact per part-at-site wins); OrFlag for the tag-mfg-site membership tree (enable-wins flag-CRDT membership); OrSet for set-typed values (mfg-part-labels); unreplicated trees stay cluster-local. |
| Per-origin HWM | The receiver's per-tree, per-origin high-water mark: the highest HLC applied from each origin - a progress frontier, not a drop threshold. Re-deliveries are suppressed by other means: entries at or below a snapshot-pinned floor are filtered, recent exact repeats of the same origin, HLC, key and operation are dropped, and older repeats re-apply idempotently under the tree's merge semantics. Loop-breaking is separate - a replicated apply lands in the receiver's WAL under its source origin, and a shipper ships only locally-authored entries. Together they replace the sample's earlier RequestContext["lattice.replay"] flag. |
| IReplicationApplier | Package-side seam invoked once per cross-cluster apply. BaselineReplicationApplier (sample-side) decorates the package's singleton to mirror mfg-facts writes into the divergence-visualisation backend and raise FederationRouter.FactReplicated; ChaosReplicationApplier (sample-side, Tier 4b inbound half) wraps it outermost and rejects every apply while the disconnect flag is set. |
| IReplicationTransport | Single-method (SendAsync) seam between the shipper and the wire. ChaosReplicationTransport (sample-side, Tier 4b) decorates it; the package-side gRPC push transport is the concrete implementation. |
| Opt-in (tree level) | LatticeReplicationOptions.ReplicatedTrees - a tree -> LatticeMergeMode map. The shipper observes only listed trees. |
| Traefik | The HTTP reverse proxy fronting each cluster. Four routers per cluster: sticky-session (with an active health check) for the UI, round-robin (no health check) for the /orleans.lattice.replication.* gRPC service path, and round-robin with active health check for both the /orleans.lattice.api.state/* read-only state API browsed by the explorer and the /orleans.lattice.api.backup/* backup control API. |
| Multi-homed container | A container attached to more than one Docker network. In this sample, each Traefik is attached to both cluster networks and is the only route between the two clusters' silos; the shared azurite-backup account and Prometheus are multi-homed onto both cluster networks too. |
| Tier-N chaos | The sample's fault-injection taxonomy (tiers 1-5 + 4b). Each tier models a distinct failure class at a distinct seam. See approach.md §4. |
Storage
| Term | Meaning |
|---|---|
| Azurite | The local Azure Storage emulator. The sample runs three instances under Docker Compose: one per cluster plus the shared azurite-backup account both clusters reach. |
msmfgGrainState |
Grain-storage provider name (not a table) for the sample's own grains - chaos config, seed flag, baseline part grains. Like every Azure Table grain-storage provider in the sample it writes Orleans' default OrleansGrainState table. |
OrleansLatticeWal |
Azure Table holding the core write-ahead log of every Lattice tree - mfg-facts, mfg-site-activity, tag-mfg-site, mfg-part-labels, mfg-part-operator, and the view trees behind the library-maintained views (the Orleans.Lattice.Storage.AzureTable default table name). The trees' node state lives in OrleansGrainState through the lattice grain-storage provider, as do the replication shipper's cursors. |
Acronyms at a glance
| Acronym | Meaning |
|---|---|
| CMM | Coordinate Measuring Machine |
| CRDT | Conflict-free Replicated Data Type |
| FAI | First Article Inspection |
| FPI | Fluorescent Penetrant Inspection |
| HLC | Hybrid Logical Clock |
| HPT | High-Pressure Turbine |
| LB | Load Balancer |
| LPC | Low-Pressure Compressor |
| LWW | Last-Writer-Wins |
| MES | Manufacturing Execution System |
| MRB | Material Review Board |
| NC / NCR | Non-Conformance / Non-Conformance Report |
| NDT | Non-Destructive Testing |
| QMS | Quality Management System |
| RTV | Return To Vendor |