Commit Graph
208 Commits
Author SHA1 Message Date
admin d45eb74772 test(er): cover country-qualified stable identifiers 2026-09-07 18:09:46 +02:00
admin 195c4611dc chore: remove redundant search definition index 2026-09-07 18:09:44 +02:00
admin e13d550837 fix(er): country-qualify company registration identifiers 2026-09-07 18:09:12 +02:00
admin 9961ac7e03 refactor: make search definitions restart-safe 2026-09-07 18:09:05 +02:00
admin 7e2b5304b7 test(er): pin review-only fuzzy company boundary 2026-09-07 18:08:24 +02:00
admin dd01fe76c9 feat: add durable versioned search definition repository 2026-09-07 18:08:09 +02:00
admin 04d861b920 fix(er): require human review for score-only company matches 2026-09-07 18:07:56 +02:00
admin 1c1d14a3eb feat: persist versioned search index definitions 2026-09-07 18:07:45 +02:00
admin ccda286022 feat: expose tenant-safe dataset version describe route 2026-09-07 18:07:09 +02:00
admin e70acc8981 feat: expose durable dataset version create and query routes 2026-09-07 18:07:01 +02:00
admin b5ffdbc091 feat: expose tenant-safe dataset describe route 2026-09-07 18:06:46 +02:00
admin 102e1e1616 feat: expose tenant-safe dataset registry HTTP surface 2026-09-07 18:06:36 +02:00
admin 70fd81dc4d feat: share durable dataset services across route modules 2026-09-07 18:06:21 +02:00
admin 97f26834c7 ci: run durable dataset and AUD0 outbox tests on live Postgres 2026-09-07 18:05:59 +02:00
admin 851e43d8db test: prove dataset registry and versions against real Postgres 2026-09-07 18:05:15 +02:00
admin 3c5850fbe5 refactor: persist dataset versions and make lineage retry-stable 2026-09-07 18:03:21 +02:00
admin 3ccdcf0cf6 fix: use postgres arrays and normalized idempotency comparison 2026-09-07 18:02:38 +02:00
admin 906fe9ac37 feat: add durable dataset version repository 2026-09-07 18:01:56 +02:00
admin a3bad9aa12 refactor: extract canonical dataset version types 2026-09-07 18:01:24 +02:00
admin 8432d19d8c fix: scope dataset version idempotency uniqueness to real keys 2026-09-07 18:01:14 +02:00
admin 298c965448 feat: add durable dataset version store 2026-09-07 18:00:58 +02:00
admin ea02f4e9f7 refactor: persist DatasetService through repository boundary 2026-09-07 18:00:47 +02:00
admin 5dbd53045c feat: add durable dataset registry repository 2026-09-07 18:00:29 +02:00
admin 6a687212a1 test: pin lineage queued-vs-emitted semantics 2026-09-07 17:59:20 +02:00
admin ad213b4400 test: prove hard non-match blocks transitive ER merge 2026-09-07 17:58:43 +02:00
admin 3826f115ec fix: enforce canonical hard non-match constraints across ER clusters 2026-09-07 17:58:06 +02:00
admin 5338975eea fix: make conflicting company identifiers dominate ER matches 2026-09-07 17:57:23 +02:00
admin 4c7132728a fix: use raw AUD0 client in outbox dispatcher 2026-09-07 17:55:10 +02:00
admin f0958cf708 fix: centralize lineage durability in AUD0 client boundary 2026-09-07 17:54:55 +02:00
admin 020a4be7e8 feat(evidence): make standard AUD0 client durable by default 2026-09-07 17:23:20 +02:00
admin 351afc54e1 security(er): validate internal ER bridge thresholds and scope 2026-09-07 17:22:05 +02:00
admin 09e3a01acd ci: make Python engine tests a blocking PR gate 2026-09-07 17:21:34 +02:00
admin 257e6d3410 test(er): cover canonical bridge application and fail-closed behavior 2026-09-07 17:21:19 +02:00
admin 21ff9af769 refactor(er): route production pipeline through canonical TS ER engine 2026-09-07 17:20:52 +02:00
admin ebb9521801 refactor(er): remove duplicate Python scoring engine 2026-09-07 17:20:26 +02:00
admin 3d0c211af8 security: allow only authenticated internal access to canonical ER bridge 2026-09-07 17:19:26 +02:00
admin 71f2d13ae1 feat(er): expose canonical ER candidate engine to internal pipeline 2026-09-07 17:19:10 +02:00
admin aef384b1e0 ci: turn dedicated 0pt security scan into a blocking gate 2026-09-07 17:17:54 +02:00
admin d9c398e4fb ci: make HIGH/CRITICAL security findings block 0pt merges 2026-09-07 17:17:45 +02:00
admin eab6a1fcce security: protect evidence outbox dispatch as internal-only 2026-09-07 17:15:55 +02:00
admin 56b1ce01b3 feat(evidence): add protected AUD0 outbox dispatch endpoint 2026-09-07 17:15:36 +02:00
admin 9f46e12447 feat(lineage): route production evidence through durable AUD0 outbox 2026-09-07 17:14:54 +02:00
admin 2a79ae6e60 test(evidence): verify AUD0 outbox durability against Postgres 2026-09-07 17:13:57 +02:00
admin 76a3cae776 test(evidence): cover AUD0 outbox delivery and failure semantics 2026-09-07 17:13:35 +02:00
admin 79942a2431 feat(evidence): implement durable AUD0 outbox and dispatcher 2026-09-07 17:13:02 +02:00
admin ca0b060c6d feat(evidence): add durable AUD0 outbox schema 2026-09-07 17:11:31 +02:00
admin 483c7b8491 Merge pull request 'fix(BI-P147): flytta MetricFlow-pinnen ovanför licensgränsen (0.208.1 var BUSL-1.1)' (#39) from fix/bi-p147-metricflow-licence-boundary into main
Deploy to Coolify / deploy (push) Successful in 1s
Security Scan (SIAX Cloud) / security (push) Successful in 13s
CI (SIAX Cloud) / security (push) Successful in 17s
CI (SIAX Cloud) / integration (push) Successful in 29s
CI (SIAX Cloud) / quality (push) Successful in 31s
2026-09-07 07:05:27 +00:00
siax-agentandClaude Opus 5 0e0e1fec56 fix(BI-P147): flytta MetricFlow-pinnen ovanför licensgränsen (0.208.1 var BUSL)
Security Scan (SIAX Cloud) / security (push) Successful in 15s
CI (SIAX Cloud) / security (pull_request) Successful in 16s
Security Scan (SIAX Cloud) / security (pull_request) Successful in 20s
CI (SIAX Cloud) / security (push) Successful in 29s
CI (SIAX Cloud) / quality (push) Successful in 36s
CI (SIAX Cloud) / integration (pull_request) Successful in 37s
CI (SIAX Cloud) / integration (push) Successful in 49s
CI (SIAX Cloud) / quality (pull_request) Successful in 51s
Certifieringslanan (BI-P147) hittade det; jag verifierade det oberoende mot
LICENSE-filen vid respektive git-tagg 2026-09-07:

  v0.208.1  Business Source License 1.1   — source-available, INTE öppen källkod
  v0.209.0  Apache License 2.0

dbt Labs licensierade om MetricFlow vid 0.209.0. Den gamla pinnen låg alltså
exakt en patch under gränsen. För en självhostad plattform vars hela premiss
är att inte ha ett proprietärt runtime-beroende är det en licensdefekt, inte
en smaksak: BUSL begränsar produktionsanvändning fram till sitt change date.

Notera metodpunkten: PyPI redovisar INGET licensfält för någondera versionen,
så en metadatakontroll hade inte hittat något. Skillnaden syns bara i
LICENSE-filen vid taggen.

Ny grind: `tests/unit/metricflow-licence.test.ts` asserterar att pinnen ligger
på eller över `METRICFLOW_FIRST_OPEN_SOURCE_VERSION`, och — som negativ
kontroll — att alla tre kända BUSL-versionerna (0.207.3, 0.208.0, 0.208.1)
faktiskt förkastas av samma jämförelse. Utan den andra assertionen hade den
första kunnat passera med en jämförelse som inte diskriminerar.

Detta gör INTE MetricFlow verifierad: `providerReadiness()` returnerar
fortfarande `verified: false`, ingen supply-chain-granskning är gjord och
providern har aldrig körts (ingen Python-runtime är provisionerad). Att laga
licensen är inte samma sak som att bevisa komponenten.

typecheck rent, 2/2 tester gröna.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-07 09:04:30 +02:00
adminandClaude Opus 5 fe606d1941 BI-P029 + BI-P103: two prompts cited as done were not (#38)
Deploy to Coolify / deploy (push) Successful in 1s
CI (SIAX Cloud) / security (push) Successful in 19s
Security Scan (SIAX Cloud) / security (push) Successful in 21s
CI (SIAX Cloud) / integration (push) Successful in 27s
CI (SIAX Cloud) / quality (push) Successful in 34s
BI-P029 + BI-P103: two prompts cited as done were not (#38)

The BI-P029 parity test and the BI-P103 baseline evidence were both cited in
headers and neither existed. Writing the parity test exposed metric definition
filters (BI-P028 MetricSpec.filters) being dropped by the ClickHouse compile
path, so a metric defined as "revenue excluding internal transfers" executed as
"revenue" -- 11 249 instead of 1 250 on the committed fixture.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-07 06:32:13 +00:00
Claude Opus 5 7441de5429 BI-P103: the cited evidence/bi-p103 did not exist — measure it
Security Scan (SIAX Cloud) / security (pull_request) Successful in 15s
Security Scan (SIAX Cloud) / security (push) Successful in 16s
CI (SIAX Cloud) / security (push) Successful in 33s
CI (SIAX Cloud) / security (pull_request) Successful in 32s
CI (SIAX Cloud) / integration (pull_request) Successful in 36s
CI (SIAX Cloud) / quality (pull_request) Successful in 48s
CI (SIAX Cloud) / quality (push) Successful in 53s
CI (SIAX Cloud) / integration (push) Successful in 54s
Same shape as the BI-P029 finding in the previous commit. `bi-slo.ts` said
"evidence/bi-p103 records the first baselines". There was no evidence/bi-p103.

The catalogue and the evaluator were both real and both well covered — against
SYNTHETIC events. A synthetic event carries whatever duration the test author
typed, so that suite proves the arithmetic and nothing about the system: it
cannot tell you whether a dashboard query takes 8 ms or 8 s. BI-P103's DoD is
one sentence, "measured baselines exist", and it was the part not done.

tests/integration/bi-p103-slo-baseline.integration.test.ts runs 460 real
queries against a live ClickHouse over a 400 000-row fact table -- 120 cold
dashboard queries (each a different bucket so the BI-P020 cache genuinely
misses), the same 120 again through the same shipped cache now hitting, and
220 exploration queries, that last number chosen so explore.p99's min_samples
of 200 is MET rather than reported low-confidence. Every duration is
wall-clock around the real call, and the telemetry goes through the shipped
producer and the shipped evaluator, so the evidence is written by the code
under test.

Measured: 7 of 11 objectives produced a number, `fully_measured` false,
measured_fraction 0.64. The four that did not each say why -- dashboard
freshness is a property of the dataset, the exploration timeout is a
configured ceiling, report completion has no producer in 0pt at all, and
report delivery is N0TIFY's receipt. A baseline table listing only the rows
that worked is how an estate comes to believe it measures more than it does.

The evidence also records what is NARROWER than production, because these
numbers will be quoted: the cached path is the in-process reference cache and
not Valkey, every latency is the engine round trip with no HTTP or
authorization layer, and there is no concurrency.

The suite is adversarial about its own inputs: a "cold" sample that came from
the cache fails, a cache "hit" that missed fails, a cached p95 that is not
faster than the cold p95 fails, and dropping the exploration sample to 60
fails on explore.p99 being low-confidence rather than quietly recording a
p99 over 60 requests.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-07 08:27:37 +02:00