Abstraction Registry Procedures
Generic Description
Nexyron now exposes a abstraction registry procedure family for several higher-level abstraction and runtime objects:
- abstractions
- features
- interventions
- scenarios
- snapshots
- split policies
- datasets
- models
- policies
The implemented procedures are:
CALL nexyron.abstraction_register(...)CALL nexyron.abstraction_list()CALL nexyron.abstraction_read(...)CALL nexyron.feature_register(...)CALL nexyron.feature_list()CALL nexyron.feature_read(...)CALL nexyron.intervention_register(...)CALL nexyron.intervention_list()CALL nexyron.intervention_read(...)CALL nexyron.intervention_record(...)CALL nexyron.intervention_response_record(...)CALL nexyron.scenario_register(...)CALL nexyron.scenario_list()CALL nexyron.scenario_read(...)CALL nexyron.snapshot_register(...)CALL nexyron.snapshot_list()CALL nexyron.snapshot_read(...)CALL nexyron.split_policy_register(...)CALL nexyron.split_policy_list()CALL nexyron.split_policy_read(...)CALL nexyron.dataset_register(...)CALL nexyron.dataset_list()CALL nexyron.dataset_read(...)CALL nexyron.model_register(...)CALL nexyron.model_list()CALL nexyron.model_read(...)CALL nexyron.policy_register(...)CALL nexyron.policy_list()CALL nexyron.policy_read(...)CALL nexyron.snapshot_build(...)CALL nexyron.snapshot_materialize(...)CALL nexyron.snapshot_materialized_list()CALL nexyron.snapshot_materialized_read(...)CALL nexyron.snapshot_materialized_drop(...)CALL nexyron.snapshot_refresh(...)CALL nexyron.dataset_build(...)CALL nexyron.dataset_materialize(...)CALL nexyron.dataset_materialized_list()CALL nexyron.dataset_materialized_read(...)CALL nexyron.dataset_materialized_drop(...)CALL nexyron.dataset_refresh(...)CALL nexyron.abstraction_artifact_status()CALL nexyron.abstraction_refresh_stale()CALL nexyron.abstraction_task_enqueue_stale()CALL nexyron.abstraction_task_list()CALL nexyron.abstraction_task_run_once()CALL nexyron.abstraction_task_run_all()CALL nexyron.abstraction_contract_status()CALL nexyron.feature_serve(...)CALL nexyron.feature_serve_many(...)CALL nexyron.model_score(...)CALL nexyron.model_explain(...)CALL nexyron.model_evaluate(...)CALL nexyron.model_compare(...)CALL nexyron.model_calibration_report(...)CALL nexyron.model_uncertainty_report(...)CALL nexyron.model_threshold_curve(...)CALL nexyron.model_gain_table(...)CALL nexyron.model_pr_curve(...)CALL nexyron.model_roc_curve(...)CALL nexyron.model_score_many(...)CALL nexyron.model_materialize(...)CALL nexyron.model_materialized_list()CALL nexyron.model_materialized_read(...)CALL nexyron.model_materialized_drop(...)CALL nexyron.model_refresh(...)CALL nexyron.policy_decide(...)CALL nexyron.policy_bandit_decide(...)CALL nexyron.policy_evaluate(...)CALL nexyron.policy_bandit_evaluate(...)CALL nexyron.policy_bandit_offpolicy_report(...)CALL nexyron.policy_bandit_subgroup_report(...)CALL nexyron.policy_bandit_sensitivity_report(...)CALL nexyron.policy_compare(...)CALL nexyron.policy_apply(...)CALL nexyron.policy_bandit_apply(...)CALL nexyron.policy_explain(...)CALL nexyron.policy_materialize(...)CALL nexyron.policy_materialized_list()CALL nexyron.policy_materialized_read(...)CALL nexyron.policy_materialized_drop(...)CALL nexyron.policy_refresh(...)CALL nexyron.policy_dataset_evaluate(...)CALL nexyron.policy_uplift_report(...)CALL nexyron.policy_offpolicy_report(...)CALL nexyron.policy_offpolicy_compare(...)CALL nexyron.policy_propensity_report(...)CALL nexyron.policy_propensity_overlap_report(...)CALL nexyron.policy_propensity_balance_report(...)CALL nexyron.policy_doubly_robust_report(...)CALL nexyron.policy_causal_diagnostic_report(...)CALL nexyron.policy_causal_compare(...)CALL nexyron.policy_doubly_robust_compare(...)CALL nexyron.policy_causal_value_report(...)CALL nexyron.policy_causal_bootstrap_report(...)CALL nexyron.policy_causal_score(...)CALL nexyron.policy_causal_value_curve(...)CALL nexyron.policy_causal_bandit_decide(...)CALL nexyron.policy_causal_optimize(...)CALL nexyron.policy_causal_gain_table(...)CALL nexyron.policy_uplift_compare(...)CALL nexyron.policy_dataset_compare(...)CALL nexyron.policy_gain_table(...)CALL nexyron.scenario_evaluate(...)CALL nexyron.abstraction_dependency_graph()
Consumer-Level Explanation
These procedures are the catalog-backed metadata layer for graph-native ML and simulation work.
Where it is logical as schema, Nexyron now also exposes direct Cypher DDL and discovery clauses for the abstraction catalog families:
CREATE FEATURE ... OPTIONS {...}/SHOW FEATURESCREATE INTERVENTION ... OPTIONS {...}/SHOW INTERVENTIONSCREATE SCENARIO ... OPTIONS {...}/SHOW SCENARIOSCREATE SNAPSHOT ... OPTIONS {...}/SHOW SNAPSHOTSCREATE SPLIT POLICY ... OPTIONS {...}/SHOW SPLIT POLICIESCREATE DATASET ... OPTIONS {...}/SHOW DATASETSCREATE MODEL ... OPTIONS {...}/SHOW MODELSCREATE POLICY ... OPTIONS {...}/SHOW POLICIES
The procedures remain the operational surface for build, materialize, serve, score, decide, apply, and evaluation work.
Use them when you want to define:
- which model-ready features exist
- which intervention types exist
- which hypothetical scenarios exist
- which point-in-time snapshot surfaces exist
- which train/validation/test split rules exist
- which named dataset contracts exist
- which native model contracts exist
- which intervention selection policies exist
- and now separate executable dataset label and dataset filter contracts from descriptive dataset metadata
- how scenario overlays should be described without mutating base graph data
- and now build logical snapshot, dataset, or scored model rows directly from registered contracts
They are not the final scoring or simulation runtime yet. They are the first-class registry that later runtime layers can consume.
Conceptual Explanation
This procedure family connects several Nexyron surfaces:
- graph labels and node identity stay in the normal LPG model
- time-varying state still lives in temporal properties
- richer registry payloads use document-style maps and lists in Cypher
- scenarios store sparse overlay operations instead of whole graph copies
That split is important.
The current implementation deliberately does not pretend that a scenario registry entry is already an executed projection or a causal effect model. It stores:
- abstraction definition
- typed metadata
- sparse overlay intent
- snapshot assembly intent
- split, dataset, model, and policy intent
On top of that registry layer, Nexyron now supports two executable procedures:
snapshot_build: executes the registered feature queries for one snapshot definition and returns rows shaped assubject_id, optionalsnapshot_ts, and afeaturesmapdataset_build: builds the snapshot rows, applies an optional split policy, and returnssubject_id, optionalsnapshot_ts,split,label_name,label_value, andfeaturesdataset_buildcan now also apply:label_query: an explicit Cypher query returningsubject_idandvaluefilter_query: an explicit Cypher query returningsubject_id
The executable builders also now accept optional at and system_at timestamps in epoch milliseconds. Inside registered feature, label, and filter queries, the current implementation exposes exact textual placeholders:
$snapshot_at_ms$snapshot_at_datetime$snapshot_system_at_ms$snapshot_system_at_datetime$snapshot_name$dataset_name$scenario_name
If at is provided and a feature query does not return snapshot_ts itself, the built row is still anchored to that requested time. system_at is currently a shared dual-time execution context and placeholder surface, not a full engine-enforced bitemporal join planner.
And four operational materialization families:
snapshot_materializeplussnapshot_materialized_list/read/drop: builds a snapshot contract once, stores feature values as per-feature temporal streams keyed by(timestamp, subject_id, value), reconstructs grouped snapshot rows for compatibility reads, persists them through database snapshot export/import and file-backed reopen, and lets later calls read or clean up those materialized stream points without recomputing features immediatelydataset_materializeplusdataset_materialized_list/read/drop: does the same for dataset rows after split and label assignmentmodel_materializeplusmodel_materialized_list/read/drop: scores every row from one registered model contract, stores the result as a abstraction artifact, and lets later calls reuse or inspect that scored output without rebuilding it immediatelypolicy_materializepluspolicy_materialized_list/read/drop: evaluates one registered policy contract, stores the selected intervention targets as a abstraction artifact, and lets later calls reuse or inspect that decision output without recomputing it immediately- all list procedures now also expose
requested_at_ms,requested_system_at_ms, andrefresh_required - all artifact families can now be recomputed in place with
snapshot_refresh,dataset_refresh,model_refresh, andpolicy_refresh feature_history: reads the canonical feature stream directly when callers need all values for one feature over a time range
There is also now a direct serving procedure:
feature_serve: resolve one snapshot contract for onesubject_id, optionally reuse matching materialized feature streams, and return the served feature map plus whether the result wasmaterializedorcomputedfeature_serve_many: do the same for an explicit list ofsubject_idvalues in one callmodel_score: score one subject from a registered model contract, preferring a matching materialized model artifact first, then a matching materialized snapshot, then on-demand snapshot computationmodel_explain: explain one subject score from a registered model contract by returning the exact resolved feature values and weighted per-feature contribution map used to produce the scoremodel_evaluate: evaluate one registered model against a labeled abstraction dataset and return aggregate classification metrics such as accuracy, precision, recall, F1, and ROC AUCmodel_compare: compare two registered models on the same labeled abstraction dataset and threshold, returning side-by-side aggregate quality metricsmodel_calibration_report: report probability-quality metrics for one registered model on a labeled abstraction dataset, including Brier score, log loss, expected calibration error, and maximum calibration errormodel_uncertainty_report: report aggregate uncertainty behavior for one registered model on a labeled abstraction dataset, including average uncertainty, maximum uncertainty, and high-uncertainty ratemodel_threshold_curve: evaluate one registered model across multiple operating thresholds on a labeled abstraction dataset and return one row per thresholdmodel_gain_table: build a rank-based gain table for one registered model on a labeled abstraction dataset and return one row per ranked bucketmodel_pr_curve: evaluate one registered model across multiple thresholds and return one precision/recall point per thresholdmodel_roc_curve: evaluate one registered model across multiple thresholds and return one ROC point per thresholdmodel_score_many: do the same for an explicit list ofsubject_idvalues in one callpolicy_decide: evaluate one registered policy contract, optionally reusing a matching materialized policy artifact first, then deriving ranked intervention targets from the policy’s bound model contractpolicy_bandit_decide: evaluate one multi-arm policy contract by choosing a concrete arm per subject with epsilon-greedy, LinUCB, or Thompson-style contextual exploration on top of the current model score and logged reward historypolicy_evaluate: summarize what has actually been observed for one policy by reading the intervention events and linked responses already recorded in the graphpolicy_bandit_evaluate: summarize one bandit policy's applied arms and realized feedback from the existing intervention-event and response graph pathpolicy_bandit_offpolicy_report: estimate one current bandit policy from logged intervention events with IPS, SNIPS, and doubly robust reward estimatespolicy_bandit_subgroup_report: summarize logged bandit outcomes by subgroup through a Cypher query that mapssubject_idvalues to group labelspolicy_bandit_sensitivity_report: sweep propensity clipping bounds for one logged bandit policy and show how IPS, SNIPS, and doubly robust values move under different clipping assumptionspolicy_dataset_evaluate: evaluate one registered policy against a labeled abstraction dataset using the policy’s current selection contractpolicy_uplift_report: build an observational treated-versus-control summary for one registered policy on a labeled abstraction datasetpolicy_offpolicy_report: build an inverse-propensity-weighted off-policy summary for one registered policy on a labeled abstraction dataset using an explicit propensity querypolicy_offpolicy_compare: compare two registered policies on the same labeled abstraction dataset using the same inverse-propensity-weighted off-policy contractpolicy_propensity_report: learn treatment propensities automatically from the current policy selections on a labeled abstraction dataset and summarize the learned propensity modelpolicy_propensity_overlap_report: diagnose common support, extreme propensities, and effective sample size from the native learned propensity modelpolicy_propensity_balance_report: show pre-weighting and propensity-weighted covariate balance over numeric snapshot features for one policypolicy_doubly_robust_report: learn propensities and treated/control outcome models automatically and return doubly robust treatment-effect estimatespolicy_causal_diagnostic_report: summarize overlap, balance, and effect-estimation quality for one causal policy contract in one rowpolicy_causal_compare: compare two current policy contracts by the learned treatment effects of the subjects each one would currently selectpolicy_doubly_robust_compare: compare two policies on the same labeled abstraction dataset using the native learned doubly robust pathpolicy_causal_value_report: summarize the current causal value of one policy after ranking by learned treatment effect and applying the current action budget, optionally witht_learnerorx_learnerpolicy_causal_bootstrap_report: estimate bootstrap uncertainty over the selected set's cumulative learned uplift for one policypolicy_causal_score: return subject-level learned treatment-effect estimates for one policy on a labeled abstraction dataset, optionally witht_learnerorx_learnerpolicy_causal_value_curve: build a budget-by-budget causal value frontier over the learned treatment-effect ranking, optionally witht_learnerorx_learnerpolicy_causal_bandit_decide: choose intervention targets from the learned causal ranking with a lightweight exploration componentpolicy_causal_optimize: optimize one policy on a labeled abstraction dataset by ranking eligible subjects by learned treatment effect instead of the current direct score, optionally witht_learnerorx_learnerpolicy_causal_gain_table: build ranked causal buckets over learned treatment effects so the optimizer can be inspected as a treatment-effect capture curve instead of only a selected-subject list, optionally witht_learnerorx_learnerpolicy_uplift_compare: compare two registered policies on the same labeled abstraction dataset by their observational treated-versus-control uplift summariespolicy_compare: compare two registered policies over both their current selected target sets and their observed response summariespolicy_dataset_compare: compare two registered policies on the same labeled abstraction dataset using their current selection contractspolicy_gain_table: build a rank-based gain table for one registered policy on a labeled abstraction dataset using the policy’s current decision contractpolicy_apply: turn the currently selected policy targets into observed intervention events in the graph using the policy’s bound intervention contractpolicy_bandit_apply: turn the selected multi-arm bandit targets into observed intervention events while logging chosen-arm and exploration metadata in the existing payload fieldpolicy_explain: explain why one subject was or was not selected by a policy right now, including subject-query matching, threshold pass/fail, rank position, and cutoff status
And two package-level operational procedures:
abstraction_artifact_status: list every materialized snapshot, dataset, model, and policy artifact with freshness metadataabstraction_refresh_stale: refresh every stale materialized artifact in dependency order, snapshots first, datasets after, models after their upstream snapshot inputs are current, and policies after their upstream model inputs are currentabstraction_task_enqueue_stale: queue stale artifacts for later execution instead of refreshing them immediatelyabstraction_task_list: inspect the pending abstraction refresh queueabstraction_task_run_once: execute one queued refresh task deterministically through the normal snapshot or dataset rebuild pathabstraction_task_run_all: drain the whole queued refresh backlog in one callabstraction_contract_status: summarize snapshot, dataset, model, and policy contract readiness, materialization coverage, staleness, and queued work in one result setabstraction_dependency_graph: inspect the current dependency edges from features to snapshots, snapshots to datasets, snapshots to models, models to policies, and live materialized artifacts back to their source contracts
In the current engine runtime, queued abstraction refresh work is also drained automatically before ordinary top-level Cypher queries. Semantic maintenance and introspection procedures themselves remain explicit, so abstraction_task_*, abstraction_contract_status, abstraction_artifact_status, and similar inspection calls do not silently consume the queue.
It also now supports:
intervention_record: writes one observed intervention event into the graph and links it to a target node when the target abstraction resolves to a backing labelintervention_response_record: writes one observed response event attached to an earlier intervention event and links it back to the same target when the abstraction resolves cleanlyscenario_evaluate: builds a baseline snapshot, rebuilds it with a named scenario overlay, and returns the changed fields for each subject- optional
cascade_refreshonfeature_register,snapshot_register,dataset_register,model_register, andpolicy_registerso contract changes can immediately rebuild already materialized dependent artifacts
Feature lifecycle status updates are metadata-only. Use abstraction_task_enqueue_stale, abstraction_refresh_stale, or an explicit materialize/refresh procedure when the intended action is to recompute artifacts.
That keeps the abstraction clean for later effect recomputation and policy evaluation.
More Detailed Explanation
In practical queries, start by deciding the row grain you want after the call: one row per node, one row per path, one row per registry object, one row per artifact, or one row per summary. Then keep that grain explicit with YIELD and named projections. That is the difference between a useful planner-facing example and a vague call that downstream tooling cannot safely compose. For contract-driven abstraction procedures, the executable examples on these pages intentionally inspect procedure metadata unless the required named artifacts are created in the same example.
Advanced Example
CALL nexyron.procedures()
YIELD name, description
WHERE name STARTS WITH 'nexyron.feature_'
OR name STARTS WITH 'nexyron.snapshot_'
OR name STARTS WITH 'nexyron.dataset_'
OR name STARTS WITH 'nexyron.model_'
OR name STARTS WITH 'nexyron.policy_'
RETURN name, description
ORDER BY name
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
CALL nexyron.procedures()
YIELD name, parameters, output_columns
WHERE name = 'nexyron.snapshot_build'
RETURN name, [p IN parameters | p.name] AS parameter_names, output_columns
Real Use Cases
- Registering reusable feature definitions without hardcoding feature metadata in notebooks or service code.
- Declaring intervention types separately from observed intervention events so policy design stays inspectable.
- Storing hypothetical scenario overlays as sparse operations instead of full graph projections.
- Defining named point-in-time snapshot contracts before building actual materialization workers.
- Defining split policies and datasets in the same catalog as features and scenarios so training surfaces are inspectable from Cypher.
- Keeping business-facing dataset descriptions in
filterwhile putting executable subject selection intofilter_query. - Joining labels from an explicit
label_querywhen the label is not already present as a feature in the snapshot. - Building lightweight logical snapshots on demand from feature queries without exporting the whole graph into a separate ML system first.
- Binding one explicit as-of moment into feature, label, and filter queries so point-in-time dataset assembly does not rely on each query inventing its own time anchor.
- Binding both business-time
atand system-timesystem_atinto feature, label, and filter queries when you need one shared dual-time evaluation context without forking query definitions. - Materializing one scenario-adjusted snapshot or dataset and re-reading it several times during validation, debugging, or human review without paying the query cost each time.
- Serving one actor’s current or as-of feature map directly from Cypher without building a whole training dataset first.
- Serving a bounded batch of actor feature maps from one shared snapshot contract without materializing a whole dataset.
- Registering a lightweight native scoring model directly in Nexyron when the runtime you need is a transparent weighted feature model rather than an external model service.
- Materializing scored outputs for one model contract when product, analytics, or intervention workflows need a stable predicted view to inspect repeatedly.
- Refreshing model artifacts after snapshot or model changes so decisioning and review surfaces stay aligned with the registered abstraction contract.
- Defining a native policy contract that ties a scored model surface to an intervention type so operational action selection stays queryable and versioned in the same abstraction catalog.
- Materializing a ranked intervention target list for one policy when operators or downstream systems need a stable decision artifact rather than recomputing selection every time.
- Applying one policy directly from Cypher when you want Nexyron to both choose the targets and record the resulting observed intervention events in one runtime path.
- Summarizing observed response rates and delays for one policy directly from Cypher when you want a contract-level operational view without writing a custom join over events and responses.
- Comparing two policy contracts directly from Cypher when you want to inspect target overlap and observed response-rate differences before changing strategy.
- Recording one observed response event directly against a prior intervention when you need the semantic runtime to retain the post-action reaction loop in graph form.
- Detecting stale materialized artifacts after a feature definition version changes and refreshing only the affected abstraction artifact instead of rediscovering the contract manually.
- Operating the whole semantic package as one managed surface by listing all materialized artifacts and bulk-refreshing the stale ones after contract changes.
- Separating stale-artifact detection from refresh execution when you want a deterministic queue to inspect or drain gradually instead of refreshing everything immediately.
- Draining a queued abstraction refresh backlog in one explicit operational step after reviewing what will be rebuilt.
- Letting ordinary Cypher workloads keep abstraction materializations fresh over time without forcing every caller to remember to run the queue manually.
- Checking whether a snapshot or dataset is merely defined, currently ready, or blocked on stale or queued artifact refresh without manually joining several procedure outputs.
- Propagating a contract change immediately into materialized dependents when you know the mutation should rebuild them now instead of waiting for a later maintenance step.
- Inspecting the current abstraction dependency chain directly from Cypher before deciding which contracts or artifacts to rebuild.
- Applying supported sparse scenario overrides such as
override_featureandinject_intervention_exposureat snapshot-build time. - Recording observed intervention events as graph data while keeping hypothetical interventions in the scenario layer.
- Comparing baseline and scenario-applied feature states directly from Cypher before deciding whether to operationalize a policy.
- Building a abstraction contract that future snapshot builders or simulators can read from one shared catalog.
Real Limitations And Tradeoffs
- The current executable layer is still logical and query-driven, not a persisted offline feature store with freshness workers or online serving caches.
- Materialized snapshot and dataset rows now persist through Nexyron database snapshot export/import and normal file-backed reopen because they are stored in the engine snapshot schema, but they are still not independently managed offline feature tables with freshness workers.
label_queryandfilter_querycurrently join bysubject_id, with optionalsnapshot_tssupport when the query returns it. They do not yet perform broader temporal interval joins or leakage checks on your behalf.- The current point-in-time placeholder contract is explicit but still textual. It is good enough to bind one shared timestamp into registered queries, but it is not yet the same thing as a full engine-enforced PIT optimizer or bitemporal join planner.
system_atcurrently gives you a shared dual-time execution context and artifact keying surface. It does not yet enforce valid-time versus system-time reconstruction inside arbitrary query logic unless the registered queries honor that contract.feature_servecurrently resolves through snapshot contracts and optional materialized snapshots. It is not yet a separate low-latency online KV plane with freshness SLAs, skew checks, or distributed serving guarantees.model_explainis exact for the current weighted linear/logistic native model family because it reuses the same snapshot row and weight map as the scorer. It is not yet a generic explanation surface for arbitrary external models or nonlinear learned interactions.model_evaluatecurrently assumes a binary label interpretation for aggregate metrics. It is useful for contract-bound classification evaluation, but it is not yet a multiclass evaluator, ranking evaluator, or survival-analysis metric surface.model_comparecompares aggregate dataset metrics under one threshold and one dataset contract. It is not yet a full model registry governance surface, statistical significance evaluator, drift monitor, or champion-challenger scheduler.model_calibration_reportis a contract-bound binary probability quality report. It is useful for checking whether emitted probabilities behave like probabilities, but it is not yet a full calibration workflow with per-bin row outputs, recalibration fitting, conformal guarantees, or drift-aware monitoring.model_uncertainty_reportonly reports over the uncertainty values emitted by the current native scorer. It does not yet validate whether those values are statistically correct, calibrated as confidence estimates, or decision-theoretically optimal.model_threshold_curveis a threshold-sweep evaluation helper for one fixed dataset contract. It does not yet optimize thresholds under business constraints, costs, capacity limits, or treatment effects.model_gain_tableis a rank-bucket analysis surface for one fixed scored dataset. It is useful for prioritization analysis, but it is not yet a treatment-yield model, uplift table, or constrained-action optimizer.model_pr_curveis a threshold-driven classification tradeoff surface. It is useful for understanding positive-class selection behavior, but it is not yet an average-precision summary, cost-sensitive optimizer, or capacity-aware action planner.model_roc_curveis a threshold-driven discrimination surface. It is useful for visualizing true-positive versus false-positive tradeoffs, but it is not yet a cost-weighted frontier, fairness-aware threshold planner, or operating-point optimizer.feature_serve_manyis a bounded batch convenience surface over the same snapshot contract. It is not yet a dedicated vectorized serving runtime or a transport-level bulk API.- The current native model runtime is intentionally narrow. It supports contract-bound weighted linear or logistic scoring, optional simple calibration, and simple uncertainty modes. It is not yet a native survival, sequence, graph-ML, or uplift serving stack.
- Materialized model artifacts are refreshed through the same abstraction artifact pipeline as snapshots and datasets. They are abstraction runtime artifacts, not a separate model deployment system or continuously managed serving tier.
- The current policy runtime is a ranking-and-threshold layer over the native model contract. It supports eligibility filtering, score thresholds, ordering, and action caps, but it is not yet a causal uplift optimizer, bandit runtime, or capacity-aware policy-learning engine.
policy_bandit_decideandpolicy_bandit_applyextend that current policy layer into a lightweight contextual-bandit baseline by choosing among configured arms with epsilon-greedy, LinUCB, or Thompson-style exploration on top of one existing model score and the logged reward history already present in the graph. That is useful for multi-action experimentation without introducing a separate bandit store, but it is still a lightweight in-engine learner rather than a full online contextual-bandit training system.policy_bandit_evaluatereads realized feedback from the existing intervention/response graph path and the standard payload fields logged bypolicy_bandit_apply. It is useful for operational bandit summaries, but it assumes the logged payload contract is respected.policy_bandit_offpolicy_reportlifts that same logged-event path into IPS, SNIPS, and doubly robust evaluation for the current bandit contract. It is useful for replay-style policy checking, but it still depends on the logged chosen-action propensity field and the current lightweight reward learner.policy_bandit_subgroup_reportandpolicy_bandit_sensitivity_reportmake the current bandit layer more diagnosable without changing the architecture. They are useful for fairness, stability, and clipping diagnostics, but they are still contract-driven reports, not a full research framework.policy_applyrecords observed intervention events through the existing intervention-event shape. It does not yet handle downstream delivery guarantees, retries, external channel acknowledgements, or response tracking on its own.policy_explainis an operational explanation surface over the current policy contract and current scored rows. It explains the policy selection path, but it is not yet a causal or counterfactual explanation system.policy_evaluateis observational summary logic over recorded events and responses. It is useful for contract-level monitoring, but it is not yet causal attribution, counterfactual evaluation, or off-policy estimation.policy_dataset_evaluateandpolicy_dataset_compareevaluate current policy selections against labeled abstraction datasets. They are useful for checking how current targeting rules line up with known outcomes, but they are not yet uplift evaluation, treatment-effect estimation, or constrained action optimization.policy_uplift_reportis an observational uplift-style surface over selected versus non-selected rows in one labeled abstraction dataset. It is useful for getting an immediate treated-versus-control proxy from the current policy contract, but it is not randomized evidence, not deconfounded causal estimation, and not a substitute for proper uplift modeling.policy_offpolicy_reportis a stronger but still contract-driven surface. It applies inverse-propensity weighting to the selected versus non-selected outcome rates using an explicit user-provided propensity query. That makes it useful for basic off-policy estimation experiments, but it still depends entirely on the quality of the supplied propensities and is not yet doubly robust estimation, automated propensity learning, or full causal identification.policy_offpolicy_comparecompares two inverse-propensity-weighted summaries side by side under the same user-supplied propensity contract. It is useful for comparing current policy contracts under one explicit off-policy assumption set, but it still depends on that supplied propensity model and is not yet doubly robust comparison, automated policy value learning, or constrained policy optimization.policy_propensity_reportis the first native automated propensity-learning surface in Nexyron. It learns one simple binary treatment model directly from the current policy selections and the snapshot features inside the chosen dataset. That is useful as an engine-native baseline, but it is still a lightweight learned propensity model rather than a dedicated treatment-assignment modeling stack.policy_propensity_overlap_reportextends that native propensity path into common-support diagnostics. It is useful when you need to see whether the learned treatment model is collapsing toward extreme assignment probabilities or leaving too little effective sample size for stable weighting, but it is still only as good as the same lightweight internal propensity learner.policy_propensity_balance_reportadds a second causal-diagnostic layer on top of the learned propensity path. It shows how far treated and control groups differ on numeric snapshot features before weighting and after inverse-propensity weighting, which is useful for checking whether the learned weighting actually improves balance. It is still a lightweight internal balance report, not a full causal-diagnostic suite.policy_doubly_robust_reportis the first native doubly robust surface in Nexyron. It automatically learns a simple propensity model and simple treated/control outcome models from the abstraction dataset, then combines them into a doubly robust estimate. That is meaningfully stronger than the purely observational and purely IPW-only reports, but it is still a lightweight engine-native estimator rather than a full causal-inference framework.policy_causal_diagnostic_reportis the Phase A umbrella summary for the learned causal path. It combines overlap counts, worst-case unweighted and weighted balance, and the current doubly robust/plugin/IPW estimates in one row, which is useful for a fast contract-level check before you trust a causal ranking. It still depends on the same internal learners and should be treated as a compact operational diagnostic, not a research audit.policy_causal_comparemoves the native causal layer from row-level scoring into current-policy comparison. It is useful when you want to compare the learned treatment-effect profile of the subjects each policy would select right now, but it still compares policies through the same internal treatment-effect estimates rather than through randomized or fully deconfounded evidence.policy_doubly_robust_compareextends that same learned DR path into direct policy-versus-policy comparison. It is useful when you want one native comparative effect estimate without supplying an external propensity query, but it is still constrained by the same lightweight internal learners and should be treated as comparative estimation, not a full benchmark suite.policy_causal_value_reportsummarizes one current causal policy under its chosen action budget. It is useful when you want a direct estimate of the selected set’s average and cumulative estimated uplift instead of only a row list. The current runtime supports botht_learnerandx_learner, which is useful for checking whether the ranking is stable across simple heterogeneous-treatment learners, but the estimate is still model-based rather than experimentally validated.policy_causal_bootstrap_reportadds a compact uncertainty layer on top of the same causal ranking. It repeatedly resamples the dataset rows inside the engine and reports mean, spread, and percentile bands for cumulative selected uplift. That is useful for seeing whether the estimated value is brittle, but it is still a deterministic internal bootstrap baseline rather than a full research resampling framework.policy_causal_scoreis the first subject-level heterogeneous treatment-effect serving surface in Nexyron. It makes the learned causal layer directly inspectable row by row, which is useful for debugging and triaging the optimizer. The current runtime supports botht_learnerandx_learner, but the returned treatment effects are still lightweight internal estimates rather than production-grade individualized treatment models.policy_causal_value_curveadds a budget frontier on top of that same learned ranking. It is useful when you need to inspect how estimated causal value changes as action capacity grows. The current runtime supports botht_learnerandx_learner, but it is still a model-based frontier rather than an experimentally validated budget curve.policy_causal_bandit_decideadds a lightweight exploration mechanism on top of the learned treatment-effect ranking. That makes it the first bandit-like action-selection surface in Nexyron, but it is still a simple internal exploration baseline rather than a full contextual-bandit learning system.policy_causal_optimizeis the first native causal policy optimizer in Nexyron. It ranks eligible subjects by learned treatment effect instead of the current direct score contract, which makes it a real causal optimization path rather than only a score-threshold policy. It now also supports optional overlap trimming and the samet_learner/x_learnerchoice as the other Phase A causal surfaces, but it still uses lightweight learned models and a labeled abstraction dataset, so it should be treated as an internal causal optimization baseline rather than a final production policy-learning stack.policy_causal_gain_tablegives the optimizer a ranked treatment-effect inspection surface similar to a gain table, but over estimated causal uplift instead of plain prediction score. It is useful for checking whether estimated uplift is concentrated in the top buckets, and it can now follow both the optional overlap band and the currentt_learner/x_learnerchoice, but it is still derived from the same internal treatment-effect estimates and is not a substitute for randomized policy validation.policy_uplift_comparecompares two observational uplift-style summaries side by side on the same labeled abstraction dataset. It is useful for checking which current policy contract produces the stronger treated-versus-control proxy under the same dataset assumptions, but it is still not causal identification, inverse-propensity estimation, doubly robust off-policy evaluation, or uplift model training.policy_gain_tableis a rank-bucket prioritization surface for one current policy contract on one labeled dataset. It is useful for understanding how much observed positive yield the top-ranked policy buckets capture, but it is not yet uplift ranking, treatment-yield estimation, or action-capacity optimization.policy_compareis a structural and observational comparison surface. It compares selected-subject overlap and observed summary rates, but it is not yet a true policy simulator, uplift estimator, or causal A/B evaluator.intervention_response_recordrecords the observed response structure, but it does not yet implement higher-level attribution, causal lift estimation, or automated state-transition learning from those responses.refresh_requiredcurrently tracks snapshot feature-version changes, and for datasets it also tracks key dataset contract fields such aslabel_query,filter_query, andsplit_policy. It is useful provenance, but it is not yet a full dependency graph or scheduler.abstraction_dependency_graphshows the current contract and artifact edges, but it is still an introspection surface, not a background refresh scheduler or a full cost-based dependency planner.- The abstraction task queue is durable catalog state and now also has an engine-owned background worker that drains queued refresh tasks without requiring a foreground query. The procedures are still useful for deterministic inspection and forcing immediate execution, but this is not yet a cost-based scheduler or a distributed refresh service.
abstraction_contract_statusis a high-level operational summary, not a replacement for the lower-level artifact list, dependency graph, or row-level serving and build procedures.- Point-in-time validation is now stricter for executable feature, label, and filter queries: rows with
snapshot_tsorsystem_snapshot_tsbeyond the requestedatorsystem_atfail loudly. That is useful leakage protection, but it still depends on the query emitting those anchors when relevant. - Observed intervention events are still something you should model in normal graph and temporal data. The registry does not replace event storage.
- Scenario overlays are stored as sparse patch intent, not as materialized projected graphs. The current executable support only applies safe row-level feature overrides during snapshot build and evaluation.
- Snapshot, dataset, model, and policy definitions are still contracts plus on-demand builders, not finished offline-training jobs, full model-training orchestration, advanced inference services, or causal intervention learning.