v5.0.0
What the API is doing and what it will refuse to do are both visible now. GET /ops/overview reports the store and its triple count, the Caffeine hit ratio across the caches, the slowest queries still in a 200 entry ring buffer, both depth limits and the headline of the last quality run, and every query is also a Micrometer timer tagged with the template it came from at /actuator/metrics/tradegraph.sparql. A cost guard answers 422 instead of running an unbounded property path or a walk deeper than the configuration allows, and the two limits are separate, four for exposure and five for lineage. deploy/fuseki adds a read only /ds-inf service backed by a Jena generic rule reasoner that materialises the transitive closure of subsidiaryOf and the inverse hasSubsidiary, which is what Stardog gives with reasoning=true for this vocabulary; with tradegraph.store.reasoning=true the exposure clauses ask for one hop instead of the bounded alternation and the lineage queries filter to direct parents. ReasoningParityIT loads the fixture into that service and asserts the exposure total is identical either way, and that the two hop edges exist only where the reasoner is running. The demo script prints the operations overview and no longer hardcodes the API version, and the README demo block is the output of the run that shipped this tag. Tests are 40 ETL pytest, 56 API unit, 27 Testcontainers integration and 9 explorer specs, all green against Fuseki.