ArcFlow
Company
Managed Services
Markets
  • News
  • LOG IN
  • GET STARTED

OZ brings Visual Intelligence to physical venues, a managed edge layer that lets real-world environments see, understand, and act in real time.

Talk to us

ArcFlow

  • World Models
  • Sensors

Managed Services

  • OZ VI Venue 1
  • Case Studies

Markets

  • Sports
  • Broadcasting
  • Robotics

Company

  • About
  • Technology
  • Careers
  • Contact

Ready to see it live?

Talk to the OZ team about deploying at your venues, from a single pilot match to a full regional rollout.

Schedule a deployment review

© 2026 OZ. All rights reserved.

LinkedIn
ArcFlow Docs
Start
  • Quickstart
  • Installation
  • Bindings
  • Platforms
  • Get Started
Concepts
  • World Model
  • Graph Model
  • Evidence Model
  • Observations
  • Confidence & Provenance
  • Proof Artifacts & Gates
  • SQL vs GQL
  • Graph Patterns
  • Parameters
  • Query Results
  • Persistence & WAL
  • Snapshot-Pinned Reads
  • Error Handling
  • Execution Models
  • Causal Edges
  • Adapter Discipline
  • Time Decay
  • Layers
  • 1. Perception Lake
  • 2. World Graph
  • 3. Query Engine
  • 4. Live Surface
  • 5. Event Bus
  • 6. Behavior Engine
  • 7. Algorithm Library
WorldCypher
  • Overview
  • Statements
  • MATCH
  • WHERE
  • RETURN
  • OPTIONAL MATCH
  • CREATE
  • SET
  • MERGE
  • DELETE
  • REMOVE
  • Composition
  • WITH
  • UNION
  • UNWIND
  • CASE
  • Schema
  • Schema Overview
  • Indexes
  • Constraints
  • Functions
  • Built-in Functions
  • Aggregations
  • Procedures
  • Shortest Path
  • EXPLAIN
  • PROFILE
  • Temporal Queriesfacet
  • Spatial Queriesfacet
  • Algorithmsfacet
  • Triggers
Capabilities
  • Live Queries
  • Vector Search
  • Trusted RAG
  • Spatial Knowledge
  • Temporal
  • Behavior Graphs
  • Graph Algorithms
  • Skills
  • CREATE SKILL
  • PROCESS NODE
  • REPROCESS EDGES
  • Sync
  • Programs
  • GPU Acceleration
  • Agent-Native
  • MCP Server
  • Event Sourcing
  • Intent Relay
  • Event Bus
Use Cases
  • Agent Tooling
  • Trusted RAG
  • Knowledge Management
  • Behavior Graphs
  • Autonomous Systems
  • Physical AI
  • Digital Twins
  • Robotics & Perception
  • Sports Analytics
  • Grounded Neural Objects
  • Fraud Detection
Walkthroughs
    Guides
  • Agent Integration
  • Building a World Model
  • Modeling a Social Graph
  • Build a RAG Pipeline
  • Using Skills
  • Behavior Graphs
  • Swarm & Multi-Agent
  • Fleet Coordination
  • Migrate from Cypher / Neo4j
  • From SQL to GQL
  • Filesystem Workspace
  • Data Quality
  • Code Intelligence
  • Scale Patterns
  • v0.7 → v0.8 Lakehouse Fast-Path
  • Tutorials
  • Knowledge Graph
  • Entity Linking
  • Vector Search
  • Graph Algorithms
  • Recipes
  • CRUD
  • Multi-MATCH
  • MERGE (Upsert)
  • Full-Text Search
  • Batch Projection
  • Multi-Source Observation
  • Sports Analytics
Operations
  • CLI
  • REPL Commands
  • Snapshot & Restore
  • Filesystem Projection
  • Server Modes & PG Wire
  • Persistence (ops)
  • Import & Export
  • Deployment
  • Daemon (UDS)
  • Architecture
  • Engine Architecture
  • Cloud Architecture
  • Sync Protocol (Deep Dive)
  • World Graph Substrate (Preview)
Reference
  • TypeScript API
  • Glossary
  • Naming & Domain Map
  • Data Types
  • Operators
  • Error Codes
  • GQL Reference
  • Known Issues
  • Versioning
  • Licensing
  • Conformance
  • GQL Conformance
  • openCypher TCK
  • Extension Regressions
GQL Conformance
  • Conformance Dashboard
  • openCypher TCK Results
  • Extension Regressions
GQL Features
  • MATCH Basic
  • CREATE Nodes Edges
  • SET REMOVE Properties
  • DELETE Detach DELETE
  • RETURN WITH WHERE
  • Order BY Limit Skip
  • Order BY Nulls First Last
  • UNWIND
  • Aggregate Functions
  • OPTIONAL MATCH
  • Variable Length Paths
  • Label OR AND NOT Expressions
  • Label Wildcard
  • Quantified Path Sugar
  • Path Modes Walk Trail Simple Acyclic
  • Shortest Path Variants
  • IS Labeled Predicate
  • Element ID Function
  • IS Type Predicate
  • Binary Literals
  • Line Comments Solidus
  • Line Comments Minus
  • GQLSTATUS Result Codes
  • GQL Error Code Mapping
  • Transaction Control Syntax
  • SET Session
  • Conditional Execution WHEN THEN ELSE
  • RETURN NEXT Pipeline
  • Primary Key Constraint
  • Unique Constraint
  • Deterministic MERGE Via PK
  • Undirected Edge MATCH
  • Cast Type Conversion
  • GQL Directories
  • Multiple Labels Per Node
  • GQL Flagger
  • NEXT Linear Composition
  • Cardinality Function
  • INT64 BIGINT Type Names
  • FLOAT64 Double Type Names
  • Log10 Log2 Functions
  • Trim Leading Trailing Both
  • FILTER Clause
  • LET Statement
  • Group BY Explicit
  • EXCEPT SET Operations
  • INTERSECT SET Operations
  • ALL Different Predicate
  • Same Predicate
  • Property Exists Function
  • Path Variable Binding
  • USE Graph Clause
  • FOR IN List
  • Typed Temporal Literals
  • Session SET Value Params
  • Typed List Annotations
  • arcflow.cosine() function
  • arcflow.embed() function
  • arcflow.similar() procedure
  • arcflow.graphrag() procedure
ArcFlow Extensions
  • LIVE Queries
  • Triggered Write-Back Views
  • Evidence Algebra
  • Relationship Skills
  • AI Function Namespace
  • Graph Embedding Algorithms
  • ASOF JOIN
  • Durable Workflows
  • Incremental Z-Set Engine
  • GPU GraphBLAS
  • Triggers
  • HNSW Vector Index
  • Extensions Moat

Multi-source observation with confidence

Real-world telemetry rarely comes from one infallible sensor. A multi-camera tracking system has three independent vendors observing the same play. A network event is reported by two scanners that disagree on severity. A customer-record update arrives from CRM and from a partner feed at different times.

ArcFlow's _confidence and _observation_class properties were designed for this case: every observation carries its own confidence weight, and the query layer respects those weights via the confidence-weighted aggregates. Nothing is thrown away; the consensus is computable from the data.

Modelling#

Each observation is a node with a _confidence float (0.0–1.0) and an _observation_class tag identifying the source. The fact being observed sits in shared properties.

// Vendor A reports the play at high confidence:
CREATE (:Observation {
  play_id: 4711,
  speed_mph: 22.4,
  _confidence: 0.95,
  _observation_class: 'vendor_a'
})
 
// Vendor B reports the same play with lower confidence:
CREATE (:Observation {
  play_id: 4711,
  speed_mph: 23.1,
  _confidence: 0.7,
  _observation_class: 'vendor_b'
})
 
// A noisy ML estimate adds another low-confidence row:
CREATE (:Observation {
  play_id: 4711,
  speed_mph: 19.0,
  _confidence: 0.3,
  _observation_class: 'ml_v3'
})

Querying the consensus#

avg_conf(value, confidence) returns the confidence-weighted mean, weighting each observation by its _confidence:

MATCH (o:Observation)
WHERE o.play_id = 4711
RETURN avg(o.speed_mph)                       AS naive,
       avg_conf(o.speed_mph, o._confidence)   AS weighted

For the rows above, naive ≈ 21.5 mph (the simple mean treats all rows equally), and weighted ≈ 22.4 mph (the high-confidence vendor pulls the consensus toward its value).

Filtering by confidence threshold#

count_conf(confidence, threshold) and min_conf / max_conf accept a threshold:

MATCH (o:Observation)
WHERE o.play_id = 4711
RETURN count_conf(o._confidence, 0.5)              AS trusted_count,
       min_conf(o.speed_mph, o._confidence, 0.5)   AS min_speed,
       max_conf(o.speed_mph, o._confidence, 0.5)   AS max_speed

This counts and bounds only observations whose _confidence is at least 0.5. The 0.3-confidence ML row is excluded.

Per-source breakdown#

Group by _observation_class to see how each source compares:

MATCH (o:Observation)
WHERE o.play_id = 4711
WITH o._observation_class AS source,
     avg_conf(o.speed_mph, o._confidence) AS speed,
     count(o)                              AS n
RETURN source, speed, n
ORDER BY speed DESC

When to use which aggregate#

If you wantUse
Naive mean (every row equal)avg(x)
Trust-weighted meanavg_conf(x, conf)
Trust-weighted totalsum_conf(x, conf)
How many high-confidence rows?count_conf(conf, threshold)
Min / max among trusted rowsmin_conf(x, conf, t) / max_conf(x, conf, t)

The naive count(*) and count(distinct ...) continue to do what they always do — confidence is a property like any other, so you can also filter manually with WHERE o._confidence >= 0.5. The _conf aggregates exist because they fold the threshold into a single operator, which keeps the engine's typed pipeline tight (no extra filter stage).

Anti-pattern#

Don't drop observations to "deduplicate" before storing them. Keep every source's row with its confidence, then let queries pick the consensus they want at read time. Going from many rows to one is lossy; going from one row to many is impossible.

← PreviousBatch ProjectionNext →Sports Analytics