Deterministic Metric Catalog and Feature DAG¶
P5 exposes three JSON-only data-layer capabilities: metric_catalog,
feature_dag_execute, and multi_source_comparison. They do not accept formula
text, source code, Python, Bash, notebooks, templates, or HTML. A caller can only
select a registered (formula_id, formula_version) and bind its declared inputs
to PIT facts or earlier DAG nodes.
Catalog contract¶
Every formula declares its input schema and value kinds, output kind, frequency,
unit, currency semantics, missing-value policy, time semantics, resource cost,
operator id, semantic version, and at least one test vector. Catalog version
metric-catalog-v1 contains the migrated neutral metrics and the fixed
margin_gap compatibility formula. Formula vector tests run the same fixed
operator implementations used by the DAG.
Execution and identity¶
The DAG rejects duplicate ids, undeclared parameters, unknown formulas or
versions, missing bindings, cycles, future-known/future-effective facts, missing
evidence, and resource overruns. Limits cover facts, nodes, edges, depth, cost,
and array items. Ready nodes are ordered lexicographically, numbers use Decimal,
and request/output serialization uses sorted compact canonical JSON. Cache keys
bind the tenant, as-of time, facts, evidence, formula versions, graph, outputs,
limits, and catalog version.
Errors are structured codes: feature_dag_cycle,
feature_resource_limit_exceeded, unknown_feature,
feature_version_not_found, missing_pit_input,
feature_input_schema_mismatch, and feature_calculation_error.
Derived lineage and comparison¶
Each derived value carries its formula id/version, direct inputs, transitive input
fact ids, every evidence id, every provider id, request as_of, maximum input
known_at, and a canonical content hash. Nested nodes never collapse lineage.
Multi-source comparison groups by field, preserves all provider observations,
time, evidence, quality, and coverage, then emits every pairwise equality and
numeric delta. selection is always null: the payload never decides which source
or view is best and never silently overwrites a disagreement.
Only scalar, array, matrix, enum, and metadata fields are valid metric outputs. The service produces no narrative interpretation, report, prediction, signal, score, recommendation, target weight, optimization, or strategy conclusion.