The canonical, project-specific dictionary for the Iris Protocol — the first place to look when a term feels load-bearing in docs/ or in the crates/, and the first place to update when new vocabulary lands. Other documents (architecture spec, implementation plans, threat model, crate READMEs, code comments) should use these names consistently; if you find a contradiction, fix the other document — or update the entry here and propagate.
RoundDispatcher are Rust identifiers; bolded names like Leader Node are protocol-level actors. The casing matches the place each term is defined.implementation_demo.html for Phases 0 → 4.5, implementation_mvp.md for Phase 5+).architecture.html §N for spec sections or crates/iris-foo for code locations.iris-nodeBolded everywhere in prose to keep cross-doc references readable (CLAUDE.md style convention). Full definitions with responsibilities, trust grants, and constraints live in architecture.html §1.2; this section is the quick reference.
iris-fetch enclaves. Each accepted vendor (AWS, Intel, AMD) is a distinct Attestor; the protocol is multi-vendor by design. Not an Iris network participant. See: architecture.html §1.2, §5.t-of-n BLS threshold signatures; rotates only on membership change, protocol-version bump, or scheduled DKG re-key. See: architecture.html §3.4.governance.html.governance.html.architecture.html §7.1 to aggregate manifests, run the normalization pipeline, select the medoid, and aggregate BLS shares. Leadership is a rotating duty with no extra fee — see Average Scenario. See: architecture.html §1.2, §7.1–§7.4.DataRequest events on GossipSub and submits finalized panels via IrisVerifier.deliverReport. Cannot forge consensus; can only censor (bounded by the on-chain timeout fallback). See: architecture.html §1.2, §8.7.DataRequest on-chain (specifying AoI, timestamp, fee) and consumes the resulting verified panel. Has no influence over consensus or panel content beyond the request parameters. See: architecture.html §1.2.The four nested state scopes that organize every protocol concept. Each layer has its own lifetime, its own mutation rules, and its own crate ownership. See: architecture.html §3.
Idle → Observing → Aggregating → PreCommit → Voting → Commit | Failed) lives here. Owned by iris-consensus (currently a stub) plus the iris-data RoundDispatcher which runs the Observing slice today. See: architecture.html §3.1.iris-core. See: architecture.html §3.2.States in the Layer-1 Round FSM. Capitalized in prose as proper nouns. Full state definitions (who's active, what's tracked, exit condition) are in architecture.html §3.1; this section is the one-liner reference.
iris/requests/v1 for the next DataRequest. Round has not yet started. See: architecture.html §3.1.iris-fetch enclave. Two sub-phases:
TlsCommitment proving the in-enclave TLS handshake succeeded. Failing to meet this deadline excludes the node from the round. See: architecture.html §7.2.BLAKE2b(payload) and attestation_hash, and publishes a full Manifest. See: architecture.html §7.2./iris/geotiff/1.0.0, runs the Normalization Pipeline, selects the medoid, pins it to IPFS, and broadcasts a Proposal. See: architecture.html §7.3.architecture.html §7.4) and either broadcasts a BLS signature share or a rejection.t valid shares advances to Commit; the voting_timeout_seconds timer expiring with < t shares fails the round.t partial shares into a single 48-byte BLS threshold signature; the Relayer submits IrisVerifier.deliverReport. See: architecture.html §3.1, §8.FailureReason, reportFailure is called on-chain, and contributor credits / slashing rules from architecture.html §8.8 apply. See: error_handling_strategies.md.Code-level abstractions inside a running iris-node. These are the words that show up in crates/*/src/*.rs, in PR descriptions, and in implementation_demo.html / implementation_mvp.md task breakdowns. They are process-internal — none of them are on-the-wire concepts. When discussing a Runtime Component in prose:
RoundDispatcher, SwarmHandle).crates/<crate>/src/<file>.rs.ActiveRoundHandleDiskCache exempt the active round's hashes from GC. See: crates/iris-data/src/dispatcher.rs.AssetCatalogDataRequest (AoI + timestamp) to one or more provider-specific asset URLs. StaticCatalog is the test impl; the production STAC client lands later. See: crates/iris-data/src/observer.rs.AttestationDocument~/.iris/attestations/<hash>.att via write_attestation_atomic. See: crates/iris-data/src/attestation_doc.rs; architecture.html §5.3.AttestationEnvelopeAttestationDocument for on-disk and over-the-wire transport. See: crates/iris-data/src/attestation_doc.rs.ChainWatcher)alloy-backed task that subscribes to the host chain via WebSocket, decodes DataRequest / EpochEvent / CommitteeRotated / UpgradeScheduled events, and forwards them on ChainWatcherInboxes. Reconnects with exponential backoff. See: crates/iris-network/src/chain_watcher.rs; architecture.html §8.ChainWatcherInboxescrates/iris-network/src/chain_watcher.rs.CommittedSessionIrisObservingWorker's provider race: the winning (provider, asset_url, AttestorSession) triple that Phase 2 will stream from. See: crates/iris-data/src/observer.rs.DiskCache~/.iris/cache/objects/<blake2b>.tiff) and attestations (~/.iris/attestations/<hash>.att). Atomic writes via tempfile-then-rename, recursive scan on startup, statvfs-based disk-pressure measurement. See: crates/iris-data/src/cache.rs; architecture.html §3.3.DispatcherHandleRoundDispatcher task without owning it. See: crates/iris-data/src/dispatcher.rs.EnclaveAttestoropen_session, attested_fetch, etc.). Per-vendor impls: MockAttestor (devnet only), Nitro, SGX, TDX, SEV-SNP. The dependency-injection seam between iris-data and the TEE SDKs. See: crates/iris-data/src/attestor.rs; architecture.html §5.2.EnclaveTransportHttpTransport so TLS terminates inside the enclave. The Phase 2.4 in-enclave fetch path. See: crates/iris-data/src/attestor.rs.GeotiffCache/iris/geotiff/1.0.0 serve-side to look up payloads by ContentHash. MemoryCache is a test impl; production uses DiskCache. See: crates/iris-network/src/transfer.rs.GeotiffRequest / GeotiffResponse/iris/geotiff/1.0.0 RequestResponse protocol. Direct stream, max payload 16 GB, timeout 3600 s. See: crates/iris-network/src/transfer.rs; architecture.html §4.5.HttpTransportreqwest so tests can inject a mock. ReqwestTransport is the production impl. See: crates/iris-data/src/transport.rs.iris-fetch enclaveiris-node. See: architecture.html §5.2.IrisObservingWorkerObservingWorker impl — runs the live two-phase Observing window inside iris-data. See: crates/iris-data/src/observer.rs.IrisTopiciris/requests/v1, iris/observations/v1, iris/consensus/v1). See: crates/iris-network/src/gossip.rs; architecture.html §4.4.MemoryCacheGeotiffCache impl for tests and the iris-network test-utils feature. See: crates/iris-network/src/transfer.rs.NodeIdentityPeerId derivation. Stored at ~/.iris/identity.key with 0600 permissions on disk. See: crates/iris-core/src/identity.rs; architecture.html §4.2.1.NoopObservingWorkerObservingWorker impl with with_simulated_work for dispatcher unit tests. Never appears in a release binary. See: crates/iris-data/src/dispatcher.rs.ObservationPublisherimpl ObservationPublisher for SwarmHandle. See: crates/iris-data/src/observer.rs.ObservingWorkerRoundDispatcher spawns one of these per DataRequest. See: crates/iris-data/src/dispatcher.rs.RoundDispatcher)iris-data task that owns the consumer side of RouterChannels::data_requests. Spawns one ObservingWorker per round; enforces the MVP single-active-round invariant via a mutex; will be subsumed into the Phase-4 Iris-BFT FSM with no API churn. See: crates/iris-data/src/dispatcher.rs; implementation_demo.html [2.1].RouterChannelsTopicRouter exposes to consumers (one per topic). See: crates/iris-network/src/codec.rs.Routed<T>crates/iris-network/src/codec.rs.RoundFailureRoundOutcome describing why an observation failed. Phase-2 variants live in iris-data::observer::ObservationFailed; Phase-4 will add consensus-side variants. See: crates/iris-data/src/dispatcher.rs; error_handling_strategies.md.RoundOutcomeObservingWorker over a oneshot to the dispatcher: { request_id, completed_phases, failure: Option<RoundFailure> }. See: crates/iris-data/src/dispatcher.rs.SignedRequestRecordDataRequest invocation (request bytes + ed25519 signature) bound into the attestation envelope. See: crates/iris-data/src/attestation_doc.rs.libp2p::Swarm event loop owned by iris-network. Composes the Noise XX transport, Yamux multiplexer, Identify, Kademlia, GossipSub v1.1, and two RequestResponse protocols (/iris/geotiff/1.0.0, /iris/attestation/1.0.0). Single-threaded by libp2p constraint; lives in a dedicated tokio::task. Exactly one Swarm per running node. See: crates/iris-network/src/swarm.rs; architecture.html §4.SwarmCommandmpsc carried by SwarmHandle. See: crates/iris-network/src/swarm.rs.SwarmEventcrates/iris-network/src/swarm.rs.SwarmHandleSwarmCommand mpsc sender and helpers like publish(topic, bytes). The seam every other crate uses to talk to libp2p without owning the event loop. See: crates/iris-network/src/swarm.rs.TopicRouterRouted<T> messages and demultiplexes them into the per-topic channels of RouterChannels. The Swarm hands raw bytes off here so consumers never see CBOR errors. See: crates/iris-network/src/codec.rs.WorkerDepsRoundDispatcher plugs into each spawned IrisObservingWorker: { providers, catalog, attestor, identity, publisher, cache, observation_phase1_deadline, geotiff_body_deadline, manifest_deadline }. The two deadline-trio fields split out from the legacy tls_commitment_deadline in [4.5.17]. See: crates/iris-data/src/observer.rs.The on-the-wire CBOR structs that cross node boundaries on GossipSub or direct streams. All defined in iris-core::types. Capitalized in prose as their Rust type name (backticks where appropriate).
AttestationRefManifest to point at the .att blob held by the publishing node. See: crates/iris-core/src/types.rs.CommitteeRotatedIrisVerifier.updateCommittee() succeeds — carries the new aggregate BLS key, threshold, and member set. See: architecture.html §8.3.ConsensusMessageiris/consensus/v1 covering Proposal, BlsShare, Rejection, etc. See: crates/iris-core/src/types.rs.DataRequestIrisVerifier. Specifies AoI, timestamp, fee. Travels onto iris/requests/v1 via the Relayer or self-watcher. See: architecture.html §3.1, §8.EpochEventManifest{request_id, image_hash, bounding_box, timestamp, attestation_hash, node_signature}. Published on iris/observations/v1 by deadline 300 s. See: architecture.html §3.1, §7.2.ObservationMessageiris/observations/v1 (variants: TlsCommitment, Manifest, ObservationFailure). See: crates/iris-core/src/types.rs.PanelProposalAggregating → PreCommit message broadcast by the Leader Node: {request_id, selected_image_hash, selected_index, ipfs_cid, contributors, similarity_matrix, leader_signature}. The full pairwise matrix is included so each node can deterministically verify the medoid pick. See: architecture.html §7.3.RejectionTlsCommitmentiris/observations/v1 by deadline 60 s. See: architecture.html §3.1, §7.2.UpgradeScheduledminProtocolVersion bump. Triggers epoch-windowed upgrade behavior in versioning_strategies.md. See: architecture.html §10.AggregateKeyIrisVerifier. Domain alias for BlsPublicKey. Re-derived only on epoch rotation. See: architecture.html §3.4, §7.5.AttestationHashBLAKE2b(attestation_doc_bytes). The .att file's content hash, surfaced in Manifest.attestation_hash. Domain alias for Blake2bHash. See: crates/iris-core/src/hash.rs.ContentHash, AttestationHash, signature digests, and IPFS-related content addressing. Implemented via the blake2 crate. See: architecture.html §10.1.ContentHashBLAKE2b(geotiff_payload). The content-addressable name of a GeoTIFF in the cache. Domain alias for Blake2bHash. See: crates/iris-core/src/hash.rs.ContributorIdPeerId of a node that contributed an observation in a given round. Domain alias for PeerId. See: architecture.html §3.1.DkgAborted retains the prior committee. See: architecture.html §3.4.PeerId-derived node identity and per-message signatures (leader_signature, node_signature, verify_tls_commitment_signature). Implemented via ed25519-dalek. See: architecture.html §4.2.1.architecture.html §7.1). Chosen for EVM precompile reproducibility, not throughput. Distinct from BLAKE2b, which covers all other off-chain hashes. See: architecture.html §10.1.LeaderIdPeerId of the elected leader for a round. Domain alias for PeerId. See: architecture.html §3.1.PeerIdmultihash(public_key_bytes) derived from the node's ed25519 public key. See: architecture.html §4.2.1.ProofHashcrates/iris-core/src/hash.rs.ProtocolVersionminProtocolVersion integer enforced by IrisVerifier and gated at epoch boundaries by versioning_strategies.md. Different from currentEpoch() and from the GossipSub vN topic suffix. See: architecture.html §10.RequestIdDataRequest (typically the on-chain log-index hash). See: crates/iris-core/src/types.rs.BlsSecretKeyShare / BlsPublicKeyShare. See: architecture.html §3.4.ThresholdSigt-of-n BLS signature carried in the on-chain panel report. 48 bytes. Domain alias for BlsSignature. See: architecture.html §7.5.t-of-n thresholdt > ⌊2n/3⌋. The BFT safety boundary. See: architecture.html §3.4, §7.5./iris/attestation/1.0.0RequestResponse direct-stream protocol for fetching .att blobs from peers. Max 256 KiB per message; 120 s timeout. See: architecture.html §4.5.2./iris/geotiff/1.0.0RequestResponse direct-stream protocol the Leader Node uses to pull contributor GeoTIFFs. Max 16 GB per payload; 3600 s timeout. Never runs over GossipSub. See: architecture.html §4.5.ciborium crate (chosen over the unmaintained serde-cbor). See: architecture.html §4.4.iris/requests/v1, iris/observations/v1, iris/consensus/v1) with mesh parameters D=6, D_low=4, D_high=12, D_lazy=6, heartbeat 1 s, message TTL 600 s. Total per-round mesh traffic: ~50 KB. Never carries GeoTIFFs. See: architecture.html §4.4.PeerId, software version (iris-node/v1.0.0), and supported sub-protocols. See: architecture.html §4.2.iris-network crate is built on. Pinned to an exact version (=0.56.0) because it has frequent breaking changes; bumps are deliberate PRs. See: architecture.html §4; root Cargo.toml.RequestResponse/iris/geotiff/1.0.0, /iris/attestation/1.0.0). Distinct from GossipSub — point-to-point, not mesh. See: architecture.html §4.5.The multi-vendor whitelist (architecture.html §5.5) accepts attestations from any of these vendors, with the explicit goal of bounding the blast radius of any single-vendor compromise. Vendor names appear inside iris-data::attestor::* and the [attestation] section of iris.toml.
crates/iris-data/src/attestor/sev_snp.rs.crates/iris-data/src/attestor/nitro.rs.iris-fetch enclaveMockAttestor.att documents with a fixture root key. Excluded from the testnet/mainnet whitelists by [2.8.3] config validation regardless of the mock Cargo feature flag. See: crates/iris-data/src/attestor/mock.rs.crates/iris-data/src/attestor/sgx.rs.crates/iris-data/src/attestor/tdx.rs.The on-chain contract surface (Phase 5). iris-contracts will host the alloy bindings; today it is a stub.
IIrisReceiverIrisVerifier invokes it on panel delivery. Error semantics are still open in architecture_review.md §2.8. See: architecture.html §8.5.IrisGovernancegovernance.html.IrisStakingIrisVerifiert, the currentEpoch() counter, and the panel acceptance path (deliverReport / reportFailure). See: architecture.html §8.2.Cross-cutting terms used in prose across the docs. None of these are types in any single crate; they describe ideas.
data_normalization.html.IrisVerifier. Every link is independently auditable; this is the protocol's central design philosophy. See: architecture.html §1.DataRequest reconstructs one panel — a single AoI at a single timestamp. The protocol's "Sphere of Flat Panels" analogy. See: architecture.html §2.iris-normalize; spec'd in data_normalization.html. See: architecture.html §6; crates/iris-normalize.Mutex<Option<RequestId>> in the RoundDispatcher. See: architecture.html §3.2; crates/iris-data/src/dispatcher.rs.𝒮 = α·σ_px/m + β·sec(θ_g) with Foundation-set α, β); at MVP+ it is a per-sensor σ_px/m cap with a sigma_max_default fallback. The phase-by-phase decision ladder is in design_q1_effective_nadir_angle.md. Manifests whose computed stress exceeds the cap are dropped before scoring. See: architecture.html §2.3, §6.1; SensorMeta; Sensor Registry.σ_px/m ≈ sin(θ_g)·cos(θ_g)·f / (h_s·p), where θ_g is the Earth-curvature-corrected ground-incidence angle, f is the sensor's focal length, h_s its orbit altitude, p its pixel pitch. Computed per contributor in Tier-1 verification using the contributor's declared sensor_id and the corresponding SensorMeta from the on-chain registry. Adopted as the envelope-stress proxy from MVP onward rather than raw off-nadir angle, since raw θ is not comparable across heterogeneous sensors (a 30° view from 1000 km altitude differs from a 30° view at 500 km even before optics enter). See: design_q1_effective_nadir_angle.md §1.3.1.b; data_normalization.html § Effective Nadir Angle.uint32 sensor_id. Carries the inputs the σ_px/m formula needs: (focal_length, orbit_altitude, pixel_pitch, detector_class, display_name). detector_class is one of Pushbroom | Whiskbroom | Frame, selecting which of the 2–3 MVP geometry formulas the Tier-1 verifier applies (design_q1 §1.3.3.b). iris-fetch parses sensor_id inside the enclave from GeoTIFF/NITF metadata and binds it into the BLAKE2b user_data commitment per architecture.html §5.2 / §5.4. See: design_q1_effective_nadir_angle.md §1.2.2.d; implementation_mvp.md [5.12].mapping(uint32 sensorId => SensorMeta) maintained by IrisGovernance. Single source of truth for which satellites are admissible into a round and what per-sensor envelope thresholds apply. Mutating entries (enrollSensor, updateSigmaMaxOverride) is gated by a 7-day soft-governance timelock per design_q1 §1.1.2.c; the shape (struct layout, key type) is fixed at deploy and changing it requires a MIN_PROTOCOL_VERSION hard fork. Tier-1 verifiers ([3.9.7]) fetch the full registry at round start and consume it locally without per-contributor on-chain calls. See: implementation_mvp.md [5.12]; SensorMeta.ciborium. Distinct from wiring. See: architecture.html §4.4.(col, row) resolves to world (lon, lat). In Iris this is the 2×3 affine GeoTransform in iris-normalize, populated from a GeoTIFF's ModelTiepointTag + ModelPixelScaleTag (or ModelTransformationTag) by read_geo_transform. Carried on every RawImage as transform: Option<GeoTransform> and consumed downstream by Orthorectification. Distinct from Geocoding, which is unrelated to imagery. See: crates/iris-normalize/src/image.rs (GeoTransform, RawImage, read_geo_transform); data_normalization.html §1."1600 Pennsylvania Ave" → (38.8977, -77.0365), or the reverse. Not part of the Iris protocol. DataRequests arrive on-chain already specifying their AoI as a BoundingBox (min/max lat-lon); resolving place names into coordinates is the Requester dapp's responsibility before submission. Sometimes used in the SAR/InSAR community as a loose synonym for projecting raw sensor pixels into a map frame — that role in Iris is filled by Orthorectification, not by anything called "geocoding". See: architecture.html §1.2 (Requester); Georeferencing; Orthorectification.ĥ(x, y) supplied by IrisDEM. Iris uses a flat-earth bilinear approximation at Demo (sufficient for nadir-pointed imagery); MVP/V1 swap in DEM-aware 3D reprojection over IrisDEM. See: architecture.html §6.1; data_normalization.html.ĥ(x, y) fed to the orthorectifier 𝒯 in Phase 3. Pinned per protocol version, not chosen by operators, because all nodes in a committee must produce byte-identical Ā. Rolled out in tiers: IrisDEM-D0 (constant per AoI, paired with the flat-earth bilinear ortho and the demo's single-scalar 10°-equivalent envelope cap); IrisDEM-M1 (a frozen Copernicus DEM GLO-30 snapshot with DEM-aware 3D reprojection, MVP — paired with the MVP per-sensor σ_px/m table); IrisDEM-V1 (Copernicus GLO-30 with NASADEM void-fill on a per-tile primary/fallback basis, paired with V1's harness-calibrated per-sensor table); IrisDEM-V1+ (commercial radar/LiDAR augmentation — TanDEM-X, WorldDEM Neo, Maxar Precision3D, regional LiDAR, ICESat-2/GEDI calibration — post-v1.0). Distributed as a Foundation-hosted, content-addressed tile-set with a BLAKE3 manifest pinned in iris.toml; DEM fetches go through the same TLS-in-TEE attestation envelope as satellite GeoTIFFs. See: data_normalization.html §IrisDEM; architecture.html §6.1; Effective Nadir Angle.iris_core::types::ProcessingLevel (#[repr(u8)]), the middle element of the (mission, processing_level, radiometric_units) tuple the §6.1.1 dispatch table accepts, and it is bound into the attestation's user_data so an enclave attesting L1C cannot be wrapped in a Manifest claiming L2A. The variant names (L1C, L2A, L1Grd, L1Slc) are borrowed from ESA's Sentinel product names and are Iris's normalized vocabulary — not a claim that every provider labels its products this way. See: crates/iris-core/src/types.rs; parameters.html §14.2.8; data_normalization.html §Vendor Preprocessing Chains; Vendor Level-Name Collision.docs/research/ surveys — bare L1 and L2 are shorthand for the two stages that actually matter to a comparison: L1 is top-of-atmosphere, radiometrically calibrated and geometrically corrected (orthorectified); L2 is surface reflectance, i.e. L1 with an atmospheric-correction model applied. The distinction is load-bearing because L2 is a model output, not a measurement — the same L1 scene through sen2cor, MAJA or LaSRC yields different numbers, so two contributors submitting different levels (or the same level from different processors) produce measurably divergent tensors for one physical scene. This is shorthand, not a product name: when citing a specific figure, use the mission's own name (Sentinel-2 L1C/L2A, Landsat L1TP/L2SP). See: image_comparison.html §3; data_normalization.html; Processing Level; TOA / BOA.iris_core::types::RadiometricUnits::{Toa, Boa}. TOA is what the sensor records including the atmospheric path; BOA is TOA with an atmospheric-correction model applied, i.e. surface reflectance. Both are dimensionless in [0, 1]. This field carries the physics that the Processing Level alone does not, and it is what keeps the (mission, processing_level, radiometric_units) triple unambiguous across vendors whose level names collide — a Sentinel-2 product ESA calls L2A and a Maxar product Maxar calls 2A land on (Sentinel2Msi, L2A, Boa) and (WorldView3, L1C, Toa) respectively, and stay distinguishable because level and units are declared separately. See: crates/iris-core/src/types.rs; parameters.html §14.2.8; Vendor Level-Name Collision.L2A is BOA surface reflectance from sen2cor. Maxar's Standard (2A) and Ortho Ready Standard (OR2A) are geometric and radiometric levels — map-projected to a plane at average or constant elevation with RPCs supplied for the consumer's own terrain correction, and calibrated to TOA reflectance via absCalFactor. They are not atmospherically corrected, so despite the shared "2A" spelling they must not map onto ProcessingLevel::L2A; the matrix maps Maxar Standard onto (WorldView3, L1C, Toa). Planet's PSScene 3B means orthorectified, not NASA Level-3 gridded composite; its surface-reflectance asset is ortho_analytic_*_sr, which is what carries it to (PlanetScope, L2A, Boa). Why it matters in Iris: ProcessingLevel is bound into attestation user_data and cohort homogeneity assumes one level per round, so a vendor product mapped onto the wrong variant would look homogeneous to the verifier while carrying different physics — inflating μ₁/μ₂/μ₃ against a boundary nobody declared. RadiometricUnits is the disambiguator; the per-vendor mapping is the accepted-tuple matrix's job. See: parameters.html §14.2.8; data_normalization.html §Other missions; image_comparison.html §3.S(μ) = 100·exp(−(β₁·μ_MAD + β₂·μ_MSE + β₃·μ_SAM)) that combines the three pairwise similarity metrics (MAD, MSE, SAM) into a single number used to build the matrix. See: architecture.html §6.3; data_normalization.html.TlsCommitment) and Phase 2 (≤300 s from round start, Manifest). Lets the Leader fail rounds early, before the expensive Aggregating phase, when fewer than t nodes commit. See: architecture.html §3.1, §7.2.Proposal within proposal_deadline_seconds. The k=3 view-change re-runs leader election with a deterministic offset, capped at three attempts before the round terminates with LeaderTimeout. See: architecture.html §7.1, §8.8.iris-node "wires" the RoundDispatcher to the SwarmHandle, both objects live inside one OS process — no network involved. Distinct from on-the-wire, which is between machines.The four product-release phases that the protocol ships under. Used as inline tags ([Demo v0.0.1], [MVP v0.1.0], [V1 v1.0.0], [V1+ post-v1]) throughout the concept docs to indicate design choices and constraints that vary by release. The canonical per-release ship-list lives in next_steps.md §Phase Roadmap. Distinct from the implementation Phase 0–5 in implementation_demo.html (Phases 0 → 4.5) and implementation_mvp.md (Phase 5) — internal engineering milestones leading up to a release cut — and from component-internal "Phase Roadmaps" in architecture.html §5.5 / §8.7 (whose Phase N labels are local to that component and mapped to product releases inline).
MockAttestor only). IrisDEM-D0 constant-plane. Flat-earth bilinear ortho. Single scalar envelope bar at 10°-equivalent, expressed as the composite stress score 𝒮 = α·σ_px/m + β·sec(θ_g) with Foundation-set (α, β) (no on-chain vote). Sentinel-only data provider. No on-chain. Single-active-round invariant. See: next_steps.md §Phase Roadmap.sigma_max_default fallback (β = 0, BRDF stress deferred to V1+ similarity kernel). Per-detector-class formulas (Pushbroom / Whiskbroom / Frame). Explicit sensor_id in attestation user_data via in-enclave parser. Sentinel + Maxar + Planet. On-chain DataRequest → Manifest. Threshold slashing only. Foundation Relayer. Single-active-round invariant carried forward. See: next_steps.md §Phase Roadmap; design_q1_effective_nadir_angle.md.user_data. Multi-active rounds (single-active-round lifted). Full slashing — threshold + submitFraudProof (BadMedoid + LeaderEquivocation + InvalidAttestation + WrongSensorClaimed). DKG + epoch rotation with BLS resharing. Cross-vendor quorum requirement. Reputation-gated Relayer Phase 2. Governance live. See: next_steps.md §Phase Roadmap.β·sec(θ_g) composite term retired at MVP); multi-chain expansion; threshold attestation; Relayer Phase 3 (fully permissionless). See: next_steps.md §Phase Roadmap; data_normalization.html §IrisDEM-V1+.