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

Time Decay

Beliefs go stale. A sensor reading from a second ago is more credible than one from an hour ago. A score derived from observations over a week should treat last Tuesday differently than last Monday. The decay_with_half_life operator is how ArcFlow expresses that, on the standing-query surface, as a primitive every live aggregation can compose with.

Signature#

decay_with_half_life(value_expr, timestamp_expr, half_life_duration)
ArgumentTypeMeaning
value_exprnumericThe value to decay. Typically a confidence, a weight, a count.
timestamp_exprtimestampWhen the value was observed. Resolved against now() at evaluation time.
half_life_durationdurationA duration literal — duration('PT1H'), duration('P7D'). The time after which the value's contribution halves.

Returns a Float. The result is value × 2^((timestamp - now) / half_life) — exact at zero age, halved every half_life thereafter.

Worked example — decaying-confidence aggregation#

A live view aggregates per-entity confidence weighted by recency. Detections from the last minute count fully; detections from an hour ago contribute ~1.6%; older detections contribute almost nothing.

CREATE LIVE VIEW entity_confidence AS
MATCH (e:Entity)<-[:DETECTED]-(d:Detection)
RETURN
  e.id AS entity_id,
  SUM(decay_with_half_life(d.confidence, d.observed_at, duration('PT10M'))) AS score

As new detections arrive, the engine updates the score incrementally. As time advances without any new detection, the score decays — automatically, without any per-row rewrite.

Why this composes with live queries#

decay_with_half_life is linear in its first argument:

decay(w₁ + w₂, t, h)  ≡  decay(w₁, t, h) + decay(w₂, t, h)

That property is what lets it sit inside an incremental aggregation like SUM. When one detection arrives, the engine adds one term to the sum; it does not re-evaluate the whole window. The result is a standing query that maintains a recency-weighted score for every entity in the graph with cost proportional to the change, not the total.

Operators that are not linear (a normalisation, a log) cannot sit inside an incremental SUM without forcing a full re-aggregation on every change. decay_with_half_life was designed specifically so it can.

Semantics#

The operator is governed by four invariants the engine enforces. They matter when an agent is reasoning about what the value means.

  • Identity at zero age. A value observed right now emits unchanged: decay(w, now, h) = w. No implicit normalisation, no scaling.
  • Time-monotonic. For any fixed input, the magnitude of the output is non-increasing as now advances. A decayed value never grows.
  • NULL-propagating. If any argument is NULL — including a missing timestamp property — the result is NULL. Heterogeneous corpora are legal input; missing timestamps do not crash queries.
  • Subnormal flush. When the decay factor underflows below ~2.2e-308, the result is exactly 0.0 rather than a subnormal float. The effect on result precision is below anything an agent could observe; the effect on downstream arithmetic speed is significant.

Errors#

ConditionResult
Any argument is NULLResult is NULL.
value_expr evaluates to NULL for some rowsThose rows produce NULL; the rest decay normally.
timestamp_expr property is absent on some rowsThose rows produce NULL.
half_life_duration is zero or negativeQueryError::InvalidHalfLife. Caught at plan time when the half-life is a literal; at run time when it comes from an expression.
timestamp_expr is in the futureThe decay factor is > 1; the value is amplified. (Future timestamps are accepted but rarely intended — agents commonly clamp the timestamp to now().)

Composition recipes#

Newest-observation-wins#

When one observation should set the score, not a sum, use the decayed value directly:

MATCH (e:Entity)<-[:DETECTED]-(d:Detection)
WITH e, MAX(d.observed_at) AS latest
MATCH (e)<-[:DETECTED]-(d:Detection {observed_at: latest})
RETURN e.id, decay_with_half_life(d.confidence, d.observed_at, duration('PT5M')) AS score

Multiple half-lives#

A score can blend a fast and slow decay — the fast component reacts to new data; the slow component remembers history.

MATCH (e:Entity)<-[:DETECTED]-(d:Detection)
RETURN
  e.id,
  SUM(decay_with_half_life(d.confidence, d.observed_at, duration('PT1M'))) AS fast,
  SUM(decay_with_half_life(d.confidence, d.observed_at, duration('PT1H'))) AS slow

The agent reads fast as what's happening right now, slow as the longer baseline — both maintained by the engine in one pass.

Decay-as-confidence#

The decayed value is itself a confidence: a recency-weighted likelihood that the underlying value is still relevant. Threshold on it the same way as on any other confidence:

LIVE MATCH (e:Entity)<-[:DETECTED]-(d:Detection)
WITH e, decay_with_half_life(d.confidence, d.observed_at, duration('PT15M')) AS conf
WHERE conf > 0.5
RETURN e.id, conf

See also#

  • Live Queries — the standing-query surface this operator composes with.
  • Algorithms — the broader catalogue of built-in graph operations.
  • Confidence & Provenance — how decayed scores fit the broader confidence model.
  • Temporal — the timestamp / duration types this operator consumes.
← PreviousAdapter DisciplineNext →1. Perception Lake