EKOS — Enterprise Knowledge Operating System

The same repo. This time it parses.
And that changed what broke next.

The "cold run" deck left analytics/'s ClickHouse schema unrecovered — a real parse gap in sqlparser's `ClickHouseDialect`. RFC 0057 and RFC 0058 closed it. This deck re-analyzes the same repo, from a clean cache, to show the actual result — and the new thing that only became visible once real column data existed for it to happen to. Every screen here is real output, unedited, from this session.

sql-analyzer: empty graph objects=15, 0 warnings 6 tables merged into 1 a different, honest gap
§ 01 / clean re-run
Cleared cache, reran from scratch — real, unedited

Zero parse warnings, for the first time on this file.

terminal — real, unedited
$ ekos clean
Clean complete. 2 item(s) removed from artifact cache.

$ ekos recover
INFO running pass pass=sql-analyzer:priv/ingest_repo/structure.sql
INFO sql-analyzer complete
     pass=sql-analyzer:priv/ingest_repo/structure.sql
     objects=15 relationships=0
Recover complete.
  SQL files analysed: 2
  Passes run: 6

Before RFC 0057: falling back to empty graph. Now: 15 objects, zero WARN lines — every real CREATE TABLE in structure.sql, including the two CREATE DICTIONARY statements correctly stripped rather than crashing the whole-file parse.

Open the real transcript: recover-clean.txt
§ 02 / a real compiled object
plausible_events_db.sessions_v2 — real, unedited

43 real columns. Real types. Real evidence.

ekos query object — real, unedited
Object: plausible_events_db.sessions_v2 (Table)
  Properties:
    columns: [
      {"data_type":"UInt64","name":"session_id"},
      {"data_type":"INT8","name":"sign"},
      {"data_type":"DATETIME","name":"timestamp"},
      ... 40 more, including:
      {"data_type":"LowCardinality(FixedString(2))","name":"country_code"},
      {"data_type":"Array(STRING)","name":"entry_meta.key"},
      {"data_type":"LowCardinality(STRING)","name":"channel"}
    ]  // 43 columns total
  Evidence:
    [100%] priv/ingest_repo/structure.sql — "CREATE TABLE ...sessions_v2"

events_v2 resolves the same way — 39 real columns, correct Nullable(DECIMAL(18,3)) for the revenue fields, correct Array(STRING) for the meta.key/meta.value pair. Every ALIAS column present. Nothing here was true before RFC 0057 — the whole file compiled to an empty graph.

Open the real transcript: query-object-sessions-v2.txt
§ 03 / but count them
ekl "FIND Object WHERE kind = 'Table'" — real, unedited

15 tables parsed. 10 tables queryable.

terminal — real, unedited
$ ekos ekl "FIND Object WHERE kind = 'Table' RETURN name"
name
plausible_events_db.sessions_v2
plausible_events_db.location_data
plausible_events_db.ingest_counters
plausible_events_db.imported_visitors
plausible_events_db.imported_sources
plausible_events_db.imported_pages
plausible_events_db.imported_locations
plausible_events_db.imported_custom_events
plausible_events_db.events_v2
plausible_events_db.schema_migrations

10 row(s).

sql-analyzer reported 15. Five real tables — imported_operating_systems, imported_exit_pages, imported_entry_pages, imported_devices, imported_browsers — aren't in this list. Not a parsing regression: a different pipeline stage did this.

Open the real transcript: ekl-tables.txt
§ 04 / identity resolution, working almost too well
ekos resolve — real, unedited

Six real tables, merged into one, at confidence 0.93.

terminal — real, unedited
Merge proposals (3):
  ...
  3. 'plausible_events_db.imported_visitors' (Table)
     — 6 objects merged, confidence 0.93
       • imported_visitors
       • imported_operating_systems
       • imported_exit_pages
       • imported_entry_pages
       • imported_devices
       • imported_browsers

All six real ClickHouse tables — crates/identity/src/lib.rs:172 scores same-kind pairs as 0.7 × name_similarity + 0.3 × column_Jaccard against a 0.85 default merge threshold. Every imported_* table shares the same 8-column "spine" (site_id, date, visitors, visits, ...) and the same name prefix — high on both axes, for tables that are genuinely distinct in ClickHouse.

Open the real transcript: resolve-merge.txt
§ 05 / what actually goes missing
The surviving identity, queried directly — real, unedited

Five tables' distinguishing columns aren't retrievable under their own name.

ekos query object — real, unedited
Object: plausible_events_db.imported_visitors (Table)
  Properties:
    columns: [site_id, date, visitors, pageviews,
      bounces, visits, visit_duration, import_id]
      // imported_visitors' own 8 columns only —
      // operating_system, exit_page, entry_page,
      // device, browser are gone
  Evidence:
    [100%] ...structure.sql — "CREATE TABLE ...imported_visitors"
      // 1 evidence entry, not 6

This isn't a labeling quirk — the five merged-away tables' own distinguishing column and evidence are not attached to this identity at all. Anyone asking EKOS about imported_browsers' schema today gets imported_visitors' columns back instead.

Open the real transcript: resolve-merge.txt
§ 06 / precisely scoped
Two different pipeline stages, two different findings

RFC 0057/0058 fixed parsing. This is a separate, pre-existing stage.

recover
SQL DDL → 15 objects
resolve
identity merge
compile
CKM
commit
ledger

structural_score's column-Jaccard scoring (crates/identity/src/lib.rs:391) already existed before RFC 0057 touched anything — it just never had real ClickHouse column data to operate on, because every ClickHouse table compiled to an empty graph. This deck's own finding is a direct consequence of RFC 0057/0058 succeeding, not a defect they introduced: fixing the parser is what finally gave the identity resolver something real to over-match on.

Honest, not hidden

The parser gap is closed. A resolver gap is now visible because of it.

the open question
// crates/identity/src/lib.rs:172
let combined = 0.7 * name + 0.3 * structural;
// default merge_threshold: 0.85 — no per-kind
// override for Table, unlike Concept's 0.95
EKOS · re-analysis of analytics/ (Plausible Analytics) after RFC 0057/0058 · every example on this page is real output, unedited · github.com/alexeyban/EKOS