Schema · v5 · bitemporal · append-only

The substrate,
specified.

G-Nosis is built on a schematised, bitemporal, append-only event log of decisions. No tribal knowledge. No "interpret the comment field". Twenty-seven edge types, versioned, addressable, immutable.

I · First-class events

Everything that
matters is a type.

Proposals, rules, exceptions, approvals, citations, mandates, breaches, cures, executions, reversals. Each is a typed event with a schema-v5 contract: identifier, actor, source system, transaction time, valid time, schema version, and a structured payload validated at write.

The structured payload is not optional. Free-text notes are an audit liability and an extraction tax we refuse to pay later. Every claim about a decision is a field, not a sentence.

10 EVENT KINDS 27 EDGE TYPES SCHEMA · V5
II · Edge types

The graph speaks in verbs.

All twenty-seven, alphabetised. Each is a directed edge between two typed events. Schema-versioned. Index-backed.

APPROVED_BYDecision was approved by an actor with declared standing.
BREACHED_MANDATEDecision violates a fund mandate at the time of valuation.
CITES_PRECEDENTDecision references a prior decision as the basis for its outcome.
CURED_BYA breach was resolved by a cure mechanism within a defined window.
DERIVED_FROMA signal or input was computed from upstream data.
EXECUTED_ASDecision was acted upon by an order/route/booking.
FIRED_BY_RULEDecision was triggered by a named rule at a schema version.
FLAGGED_BYDecision was raised for review by a monitor or system.
HEDGED_BYRisk on a decision was offset by a paired position.
INHERITS_FROMMandate or policy was extended from a parent entity.
ISSUED_BYDocument or instrument originated from a named entity.
LINKED_TOGeneric cross-reference; weakest edge, last resort.
OVERRIDDEN_BYA rule was suspended for this decision by a privileged actor.
OWNED_BYDecision belongs to a desk, book, or portfolio.
PROPOSED_BYDecision was opened by an actor at a transaction time.
REPRICED_BYRisk or value was recomputed by an engine.
REVERSED_BYA decision was unwound by a subsequent decision.
REVIEWED_BYDecision was inspected and signed off without firing rule changes.
SCOPED_TODecision applies to a named fund, mandate, or jurisdiction.
SEALED_ATDecision was committed to the append-only log.
SETTLED_ONExecution reached terminal settlement.
SUPERSEDESDecision replaces an earlier proposal of the same scope.
TAGGED_ASFree-form classification; schema-controlled vocabulary.
TRIGGERED_BYDecision was initiated by an exogenous event (corp action, news).
VIOLATES_LIMITDecision crosses a configured risk or exposure threshold.
WITNESSED_BYA counterparty or external party attested to a decision element.
WRITTEN_BYProvenance of the structured payload itself.
III · Time, twice

Transaction time
and valid time.

Each event records when we wrote it and when it was true of the world. The two rarely match. A trade booked at 09:14 GMT with effective date T+2 has a transaction time of 09:14 and a valid time of T+2 settlement. A rule patched to RULES-V5 §sector-concentration in May 2026 retroactively re-evaluates a January 2024 decision — without rewriting history.

TX · 09:14 GMTDEC-2147 proposed · sector cap breach +0.6% · valid_time = T0
TX · 09:14:02RULE-114 fires under SCHEMA-V4 (live at write) · valid_time = T0
TX · 09:14:48DEC-2147 sealed · cure window approved · valid_time = T0..T0+30d
TX · MAY 2026SCHEMA-V5 promoted · §sector-concentration re-scored · valid_time = retroactive
TX · MAY 2026DEC-2147 trace re-readable at v4 or v5 · history un-rewritten
IV · Append-only

No edits.
No deletes.
Reversal is an event.

The log only grows. If a decision is wrong, the correction is a new event with a typed REVERSED_BY edge. If a fact is updated, the new fact is written with a fresh valid time. The prior fact stays where it was. There is no "edit history" tab to inspect, because there is no edit.

This is not a stylistic choice. It is the only design that makes the log regulator-grade, SOX-friendly, and forensic.

V · RULES-V5

The engine that
does the firing.

RULES-V5 is the rule layer above the event log. Each rule is a named, versioned, decidable predicate over the graph — written in a constrained DSL, reviewed like code, deployed like an API.

A decision passing the predicate gets a FIRED_BY_RULE edge, the rule version, and a re-pricing hook. A future schema bump re-runs the predicate retroactively against the old facts; the trace stays consistent because the version was bound at write.

§SECTOR-CONCENTRATION §COUNTERPARTY-LIMITS §LIQUIDITY-TIERS §MANDATE-COVENANTS
VI · API surface

Two verbs.
Write and trace.

Everything else is sugar. Connectors translate OMS / risk / compliance source systems into typed write calls. The trace API returns a graph slice at a chosen schema version.

gnosis.events.write
# Append a typed event to the log POST /v5/events { "kind": "DECISION", "id": "DEC-2147", "actor": "trader:gmurthy", "source": "oms:fidessa", "valid_time": "2026-05-08T09:14:00Z", "schema_version": "v5.2.1", "payload": { "scope": "fund:global_growth", "event": "mandate_breach", "delta_bps": 60 } }
gnosis.trace.read
# Return the trace at a chosen schema version GET /v5/trace/DEC-2147?at=v5.2.1 &hops=3 &include=CITES_PRECEDENT,FIRED_BY_RULE → returns graph slice: · DEC-2147 → FIRED_BY_RULE → RULE-114 · RULE-114 → DERIVED_FROM → §sector-conc · DEC-2147 → CITES_PRECEDENT → DEC-1893 · DEC-1893 → CURED_BY → CURE-W30D
OMS · FIDESSA · CHARLES RIVER RISK · MSCI · BARRA COMPLIANCE · BLOOMBERG AIM IDENTITY · SAML · SCIM
Bring your own schema

We will help you
specify yours.

Onboarding always starts by sitting with the desk and writing the v0 of your decision schema. That conversation is the first decision G-Nosis records.