{
  "dataset": "ekos-full",
  "agent": "ollama (llama3:latest)",
  "runtime": "local",
  "generated_at": "2026-09-14T19:38:21.695891163Z",
  "gates": {
    "min_answer_correctness": 0.85,
    "min_evidence_groundedness": 0.9,
    "min_completeness": 0.8,
    "min_recall_at_10": 0.8,
    "max_hallucination_rate": 0.05
  },
  "metrics": {
    "scenarios": 15,
    "passed": 8,
    "failed": 7,
    "answer_correctness": 0.54545456,
    "evidence_groundedness": 0.75,
    "completeness": 0.54545456,
    "recall_at_10": 0.5714285714285714,
    "hallucination_rate": 0.0,
    "fabrication_rate": null,
    "invalid_citation_rate": 0.0,
    "uncited_answers": 3,
    "avg_tokens": 2270.0,
    "p95_latency_ms": 76648.903179,
    "cache_hits": 0,
    "cache_misses": 12,
    "tokens_saved": null,
    "peak_rss_kb": 159052,
    "total_cpu_time_ms": 15800.0,
    "status_pass": false
  },
  "scenarios": [
    {
      "id": "code-001",
      "passed": true,
      "hallucinated": false,
      "answer_score": 1.0,
      "evidence_score": 1.0,
      "completeness_score": 1.0,
      "retrieval_recall": 1.0,
      "groundedness_score": 1.0,
      "trajectory_score": null,
      "input_tokens": 2076,
      "output_tokens": 53,
      "cache_hit": false,
      "rss_kb_end": 18192,
      "cpu_time_ms": 1030.0,
      "latency_ms": 46637.468609999996,
      "error": null,
      "attribution": "passed",
      "answer": "The function that parses SQL DDL into structural form inside sql_analyzer is `parse_ddl_structural`.",
      "evidence_text": "search match: sql_analyzer::parse_ddl_structural\npossible search match (partial term overlap): parse_ddl_structural — Parse SQL DDL and return a `KirGraph` with tables as `KirObject`s and FK constraints as `KirRelationship`s. No LLM; pure structural extraction.  `dialect` (RFC 0031) is resolved by the caller — `recover.rs` via the dialect registry, or `&GenericDialect {}` directly for ANSI-basel… [ekos/crates/recovery/src/sql_analyzer.rs:200]\npossible search match (partial term overlap): ekos_recovery::parse_ddl_structural\npossible search match (partial term overlap): sql_transform_analyzer::parse_sql_to_transform_graphs\nsearch match: benchmark/benches/sql_analyzer.rs — use criterion::{Criterion, criterion_group, criterion_main};\nuse ekos_recovery::parse_ddl_structural;\nuse sqlparser::dialect::GenericDialect;\n\nconst ECOMMERCE_SQL: &str = include_str!(\"../../tests/fixtures/ecommerce.sql\");\n\nfn bench_sql_analyzer(c: &mut Criterion) {\n    c.bench_f… [benchmark/benches/sql_analyzer.rs]\npossible search match (partial term overlap): sql_analyzer::SqlAnalyzerPass\npossible search match (partial term overlap): bench_sql_analyzer [benchmark/benches/sql_analyzer.rs:7]\npossible search match (partial term overlap): sql_transform_analyzer::SqlTransformStats\npossible search match (partial term overlap): sql_transform_analyzer::SqlTransformAnalyzerPass\npossible search match (partial term overlap): parse_sql_to_transform_graphs — Parses `sql` and returns one `TransformGraph` per top-level statement this pass understands (`SELECT`, `CREATE VIEW`, `CREATE PROCEDURE`, `CREATE FUNCTION`). `CREATE TABLE` and other DDL are left to `sql_analyzer.rs`'s `SqlAnalyzerPass` — this function only ever looks at transfor… [ekos/crates/recovery/src/sql_transform_analyzer.rs:204]\npossible search match (partial term overlap): parse_sql_statement_by_statement — Whole-file parse fallback (RFC 0039), engaged only when full-file structured parsing (plus the missing-`;` repair retry) both fail. Splits `sql` on top-level `;` and retries each fragment independently, so a `CREATE PROCEDURE` using unmodelable control flow doesn't take every oth… [ekos/crates/recovery/src/sql_transform_analyzer.rs:304]\nsearch match: ekos/crates/recovery/src/sql_analyzer.rs — //! `SqlAnalyzerPass` — extracts `KirObject`s (tables as entities) and\n//! `KirRelationship`s (FK edges) from SQL DDL, then uses LLM to add\n//! semantic names and descriptions.\n\nuse std::collections::HashMap;\nuse std::sync::Arc;\n\nuse async_trait::async_trait;\nuse ekos_compiler_co… [ekos/crates/recovery/src/sql_analyzer.rs]\npossible search match (partial term overlap): structural_score — Structural similarity between two objects, used as the 30% non-name term in `DefaultResolver::score`.  Objects of different `ObjectKind` never match. When both objects carry a `properties[\"columns\"]` array (as SQL-derived `KirObject`s from `parse_ddl_structural` do), structural s… [ekos/crates/identity/src/lib.rs:455]\npossible search match (partial term overlap): handle_function [ekos/crates/recovery/src/javascript_analyzer.rs:416]\nsearch match: ekos/crates/recovery/src/sql_transform_analyzer.rs — //! `SqlTransformAnalyzerPass` — converts SQL `SELECT`/`VIEW`/stored-procedure\n//! observation into the Transformation IR (RFC 0027 Phase 1), then lowers\n//! that IR into KIR via `ekos_semantic::transform_ir::lower_to_kir`.\n//!\n//! Distinct from `sql_analyzer.rs`'s `SqlAnalyzerPa… [ekos/crates/recovery/src/sql_transform_analyzer.rs]\npossible search match (partial term overlap): is_structurally_keyed — Whether `name` names a registered *structurally-keyed* `Custom` kind — the predicate `DefaultResolver` uses to exclude a kind from merge candidacy.  An **unknown** kind returns `false` (it is not excluded). The `ekos-identity` coverage test guarantees no `recover`/`compile`/`comm… [ekos/crates/kir/src/custom_kinds.rs:158]\npossible search match (partial term overlap): sqlparser::ast::Function\npossible search match (partial term overlap): as_aggregate_function [ekos/crates/recovery/src/sql_transform_analyzer.rs:547]\npossible search match (partial term overlap): function_to_graph — `CREATE FUNCTION ... AS $$ ... $$` (Postgres) / `AS '...'`: the body is a single string-literal `Expr` (PL/pgSQL, opaque to `sqlparser`'s expression grammar), not pre-parsed statements — unlike MSSQL's `CREATE PROCEDURE`. MVP: split the raw text on `;` and try parsing each fragme… [ekos/crates/recovery/src/sql_transform_analyzer.rs:650]\npossible search match (partial term overlap): function_body_text [ekos/crates/recovery/src/sql_transform_analyzer.rs:734]\nweb/api/app/config_io.py — related to parse — \"\"\"`ekos.toml` read / write / observe-diff (RFC 0130 §2).\n\n`tomlkit` only — it round-trips comments and formatting; `tomli-w` would flatten them. Validation\nand the preview-scan are delegated to `ekos config …` through the read-only subprocess allowlist\n(`readproc`); this module … [web/api/app/config_io.py]\n",
      "evidence_refs": [
        "d80eefe9-e996-4b93-9dd5-35f575c64006"
      ],
      "retrieved_ids": [
        "583916d7-b3db-54b5-a200-eef2d4d89d6e",
        "627d6f75-f3e8-5277-8b29-ff55036731c3",
        "99865dc4-1d07-5fc4-975b-15bc8390d6c3",
        "d40b8a1c-8672-5923-ad4d-38ad94bf97a8",
        "9f24ed23-7bfa-5f21-b42c-4937fbd2de4d",
        "161a08f7-746d-5aa5-9768-0c76c1409f57",
        "3a8e4dcf-850c-55ae-acfa-308b3c45b635",
        "d7ee4a21-d05c-5730-860c-011c081943ec",
        "53467467-74d3-5397-83e6-bccea32c7b45",
        "fbbf8304-b139-51e0-bbeb-a3ae80044130",
        "5496bf59-6cfe-5208-8e5c-2ac011f7f9d8",
        "cd768c5e-1640-51c3-b6ec-cb7ac78ade6d",
        "ca326423-f662-5267-86b4-e5c13edbb31e",
        "ff079ea5-acaa-573a-bee0-c64674808f87",
        "987e3fbb-31ec-576d-b794-7e801336e8c8",
        "dbc6e4f8-4070-55f3-b5fe-b260ddb1f271",
        "78b3564f-8a44-55ae-bf35-c94ad61660b1",
        "a2dbec2a-9c4a-517a-9cc0-1107daa41b02",
        "fb4a63c1-3690-5bee-b424-6e26e9a46525",
        "0ac287c3-3b30-59c8-870a-4ba97857d319",
        "e5257693-aa25-5b6e-bb88-43dc290233a7",
        "a616c944-3f59-514c-a2b3-4bc896567f5f",
        "5de42a8c-c1e7-56e3-949a-81a083777a9e",
        "620e68e7-cc68-5327-bcdb-235f2a72f686",
        "faa4f7d3-1887-5ad4-9720-77e01d51d0d5",
        "590311ca-281e-528a-ae35-6f89aceae476",
        "4d84dfe6-6fb1-5a01-a843-961cf1744ee7",
        "ac857c0a-e7e1-5b8d-972d-dd8184852f15",
        "cc76104d-128b-5cc0-bcc8-9f5a4f895888",
        "7d43ef03-d9aa-5afa-8592-2ecf225afeb4",
        "06b9daea-4751-5bdb-b829-60923e1b7e91",
        "d6354cb7-e017-5735-9618-4163ae491b69",
        "69f63d0b-b0ea-5e15-b73e-7514154062d5",
        "5fedc248-e713-5749-865e-909f63819859",
        "82404f0f-7998-578f-a9ea-dabcccb77964",
        "6e78850d-5644-54fc-acc2-b9da345186cd",
        "12ff3686-8a62-598e-af96-62c83955b85d",
        "b2e8d7d1-0359-5c54-9006-5003dac51d63",
        "f784bab1-c5b1-5155-b44d-018b4df1cf66",
        "039afc5d-079a-5e3c-873e-01887b33fc06",
        "0cf2eb37-7bff-50e2-9a76-cab49998cbd3",
        "1299777d-de94-5dcc-a207-66cde26f7a41",
        "d8a4bbd2-9d47-53c2-8746-6e817d24d7f5",
        "183af0c4-fe42-5273-beff-98b642123c3e",
        "d5ed49f2-c9b7-5de6-9672-17b3454dbee7",
        "1b487803-4faf-58d8-8ba2-ba44bcd507f4",
        "2899db5a-e981-5360-9b5e-4d92c7b5b465",
        "2c446572-839f-5362-9f05-99e568697d62",
        "b954f76c-b28d-578b-a82b-cf5b8d11dec0",
        "ef3e8cfe-7d30-5c83-90a2-89d521028bfb"
      ],
      "planned_query_type": "lexical"
    },
    {
      "id": "code-002",
      "passed": false,
      "hallucinated": false,
      "answer_score": 0.0,
      "evidence_score": 1.0,
      "completeness_score": 0.0,
      "retrieval_recall": 0.0,
      "groundedness_score": 1.0,
      "trajectory_score": null,
      "input_tokens": 779,
      "output_tokens": 57,
      "cache_hit": false,
      "rss_kb_end": 158172,
      "cpu_time_ms": 130.0,
      "latency_ms": 13464.563248999999,
      "error": null,
      "attribution": "retrieval",
      "answer": "The `LlmProvider` is built by the `ekos::crates::recovery::llm` function.",
      "evidence_text": "LlmProvider.name = LlmProvider [ekos/crates/recovery/src/llm.rs:69]\nLlmProvider.kind = RustSymbol [ekos/crates/recovery/src/llm.rs:69]\nLlmProvider.description = Provider-agnostic interface for LLM completions.  # Contract (RFC 0008) - Every implementation MUST send `temperature: 0`. - Every implementation MUST include the model name in the cache key. - Structured (JSON) output is expected; callers reject free-text responses. [ekos/crates/recovery/src/llm.rs:69]\nLlmProvider.source_span = {\"end_line\":113,\"start_line\":69} [ekos/crates/recovery/src/llm.rs:69]\nLlmProvider.symbol_kind = trait [ekos/crates/recovery/src/llm.rs:69]\n",
      "evidence_refs": [
        "83177183-9438-4b9f-b0d6-fd5ea4ddf90d"
      ],
      "retrieved_ids": [
        "2ae9f74a-5457-51fd-8d1a-065b84d52ae2",
        "952b3eaf-406f-5c22-b538-f5c2d5fbe2f9",
        "3eb9eeea-08e9-53ea-9ba5-f2dde1b5987a",
        "d3a5247e-e2ff-51e1-aa45-7da95c1d25e3",
        "2b1d458b-2cbb-5b8a-9932-9c15c981a99e",
        "33f8e8d4-78a2-55a9-8e2e-3b9dcf38f97c",
        "e8aa469a-a862-544c-8b58-a4fe53e92b87",
        "35d66bca-9810-586e-ab21-06379463afaf",
        "cec7b6ff-d268-5496-a16f-c9bd8dd4bbc2",
        "deedde2c-6e1b-58b4-a594-0ccffed4591e",
        "ba47c906-98aa-549f-86ae-ee6103362f06",
        "ff079ea5-acaa-573a-bee0-c64674808f87",
        "0e7c2703-ef93-5032-ae92-9e22c2b22a8a",
        "6c849d64-25f5-5847-817c-5d96d2541f83",
        "5014292b-d90c-52f8-aa11-8fdb2602c281",
        "1179bc96-34ee-5466-adf6-ba015a070ffe",
        "cb08bf13-3812-5cf0-b94a-30254f9d3c6f",
        "78b3564f-8a44-55ae-bf35-c94ad61660b1",
        "a2dbec2a-9c4a-517a-9cc0-1107daa41b02",
        "fb4a63c1-3690-5bee-b424-6e26e9a46525",
        "0ac287c3-3b30-59c8-870a-4ba97857d319",
        "83096480-2d74-594d-820b-ada857c0cd8b",
        "10d67e5a-c754-5199-915e-23349038a6f5",
        "5a57188e-5640-5c40-8eb9-08eda1c1a388",
        "b01f4b48-503f-58b0-9150-5c3747d9200e",
        "969405ac-7662-56fa-8941-e8c7a8996c38",
        "3c285316-0d6d-57c0-a3e3-b0bf8da8a06e",
        "260a34db-f775-5c88-b53a-f97a529cc60a",
        "2128a4f3-2ce7-5853-b89d-97dbf0512b0f",
        "912bedec-b234-52a1-9a63-5c07df0971eb",
        "e7e75efa-39cb-5182-b056-2fd16dfdc739",
        "e5257693-aa25-5b6e-bb88-43dc290233a7",
        "81acf5eb-ac0d-5f0f-bf79-34e852525dba",
        "3961c92a-2f20-528e-9213-7a9f9ff401c8",
        "856cc9bd-1cec-5f5a-89c3-4b921f2a1910",
        "7d87884f-8550-5f2e-99ce-d792b1a3aedf",
        "38e3b18c-438d-5560-8598-5f26c22c6831",
        "909cf66d-3266-5671-87ce-7494bb46818e",
        "d454db52-b977-5cf8-8af9-6f5559a47666",
        "fd4f3b9f-8b1d-5420-9625-a27c03f0b48c",
        "667c0112-6979-5c5d-b10a-efbf67234215",
        "2c912e37-e952-5ea7-916d-10de893dafe1",
        "301142ba-f4f3-52eb-a1f4-22384b692244",
        "868af59a-0508-5cc6-a395-3f4aad7819f6",
        "bef6187a-5f5e-5bd3-8ebb-bf647872f25d",
        "3d345785-def2-570c-9fa7-18f52a633082",
        "4bc39aee-7900-55fb-bd1c-d99d4302f53e",
        "db6bbc65-26e5-505e-94f9-a3d139eb911b",
        "0929411a-a901-5538-9d03-ddc8c3e1ce05",
        "96ccb0d3-e6b8-5e88-b6c5-1c33cb67d152"
      ],
      "planned_query_type": "structural"
    },
    {
      "id": "code-003",
      "passed": false,
      "hallucinated": false,
      "answer_score": null,
      "evidence_score": null,
      "completeness_score": null,
      "retrieval_recall": null,
      "groundedness_score": 0.0,
      "trajectory_score": 0.0,
      "input_tokens": 3263,
      "output_tokens": 229,
      "cache_hit": false,
      "rss_kb_end": 159052,
      "cpu_time_ms": 1600.0,
      "latency_ms": 76648.903179,
      "error": null,
      "attribution": "n/a",
      "diagnostics": [
        "AI001: LLM response did not include a valid cited_evidence block"
      ],
      "answer": "The `SqlAnalyzerPass` is a part of the EKOS recovery system that extracts `KirObject`s (tables as entities) and `KirRelationship`s (FK edges) from SQL DDL, then uses LLM to add semantic names and descriptions.\n\nBased on the evidence claims provided, it can be concluded that `SqlAnalyzerPass` is responsible for analyzing SQL dialects and extracting relevant information. This pass is used in the recovery process to identify tables and relationships in a database.\n\nThe specific claims that support this conclusion are:\n\n* Claim 1: `search match: sql_analyzer::SqlAnalyzerPass`\n* Claim 2: `//! `SqlAnalyzerPass` — extracts `KirObject`s (tables as entities) and `KirRelationship`s (FK edges) from SQL DDL, then uses LLM to add semantic names and descriptions.`\n\nThese claims indicate that `SqlAnalyzerPass` is a part of the EKOS recovery system that analyzes SQL dialects and extracts relevant information.\n\nCited evidence: [\"946fb0f8-b40c-51cf-908a-08d84eb2921a\"]",
      "evidence_text": "search match: sql_analyzer::SqlAnalyzerPass\nsearch match: ekos/crates/recovery/src/sql_analyzer.rs — //! `SqlAnalyzerPass` — extracts `KirObject`s (tables as entities) and\n//! `KirRelationship`s (FK edges) from SQL DDL, then uses LLM to add\n//! semantic names and descriptions.\n\nuse std::collections::HashMap;\nuse std::sync::Arc;\n\nuse async_trait::async_trait;\nuse ekos_compiler_co… [ekos/crates/recovery/src/sql_analyzer.rs]\nsearch match: ekos/crates/recovery/src/sql_transform_analyzer.rs — //! `SqlTransformAnalyzerPass` — converts SQL `SELECT`/`VIEW`/stored-procedure\n//! observation into the Transformation IR (RFC 0027 Phase 1), then lowers\n//! that IR into KIR via `ekos_semantic::transform_ir::lower_to_kir`.\n//!\n//! Distinct from `sql_analyzer.rs`'s `SqlAnalyzerPa… [ekos/crates/recovery/src/sql_transform_analyzer.rs]\nsearch match: ekos/crates/recovery/src/clickhouse_analyzer.rs — //! `ClickHouseAnalyzerPass` — converts ClickHouse table observation artifacts (RFC 0056,\n//! `ekos-plugin-clickhouse`) into KIR. Produces one `KirObject(kind=ObjectKind::Table)` per\n//! table, `properties[\"columns\"]` in the exact `[{\"name\", \"data_type\"}, ...]` shape\n//! `SqlAnal… [ekos/crates/recovery/src/clickhouse_analyzer.rs]\nsearch match: ekos/docs/rfcs/0031-pluggable-sql-dialects.md — # RFC 0031 — Pluggable SQL Dialect Parsers\n\n**Status:** Accepted\n**Author:** EKOS team\n**Created:** 2026-08-05\n\n---\n\n## Motivation\n\nSQL recovery has two independent, inconsistent dialect stories today, both found while testing\nEKOS cold against two real public GitHub ETL repos (d… [ekos/docs/rfcs/0031-pluggable-sql-dialects.md]\nsearch match: ekos/docs/rfcs/0031-pluggable-sql-dialects.md — # RFC 0031 — Pluggable SQL Dialect Parsers\n\n**Status:** Accepted\n**Author:** EKOS team\n**Created:** 2026-08-05\n\n---\n\n## Motivation\n\nSQL recovery has two independent, inconsistent dialect stories today, both found while testing\nEKOS cold against two real public GitHub ETL repos (d… [ekos/docs/rfcs/0031-pluggable-sql-dialects.md]\nsearch match: ekos/plugins/sql-dialect-mssql/src/lib.rs — //! MSSQL (T-SQL) `SqlDialectParser` (RFC 0039, extending RFC 0031's pattern).\n//!\n//! Wraps `sqlparser::dialect::MsSqlDialect` — already available in the pinned\n//! `sqlparser = \"0.53\"` dependency, zero new dependency, and already used internally by\n//! `sql_transform_analyzer.r… [ekos/plugins/sql-dialect-mssql/src/lib.rs]\nsearch match: ekos/plugins/sql-dialect-databricks/src/lib.rs — //! Databricks (Spark SQL) `SqlDialectParser` (RFC 0039, extending RFC 0031's pattern).\n//!\n//! Wraps `sqlparser::dialect::DatabricksDialect` — already available in the pinned\n//! `sqlparser = \"0.53\"` dependency, zero new dependency, and already used internally by\n//! `sql_transf… [ekos/plugins/sql-dialect-databricks/src/lib.rs]\nsearch match: ekos/plugins/sql-dialect-snowflake/src/lib.rs — //! Snowflake `SqlDialectParser` (RFC 0039, extending RFC 0031's pattern).\n//!\n//! Wraps `sqlparser::dialect::SnowflakeDialect` — already available in the pinned\n//! `sqlparser = \"0.53\"` dependency, zero new dependency. Previously only reachable via\n//! `sql_transform_analyzer.rs… [ekos/plugins/sql-dialect-snowflake/src/lib.rs]\nsearch match: ekos/plugins/sql-dialect-postgres/src/lib.rs — //! PostgreSQL `SqlDialectParser` (RFC 0031).\n//!\n//! Wraps `sqlparser::dialect::PostgreSqlDialect`. Previously only used inside\n//! `sql_transform_analyzer.rs`'s private `dialect_for` for `SELECT`/`CREATE VIEW`/`CREATE\n//! PROCEDURE`/`CREATE FUNCTION` recovery — this crate makes… [ekos/plugins/sql-dialect-postgres/src/lib.rs]\nsearch match: ekos/docs/rfcs/0031-pluggable-sql-dialects.md: section 1 — # RFC 0031 — Pluggable SQL Dialect Parsers\n\n**Status:** Accepted\n**Author:** EKOS team\n**Created:** 2026-08-05\n\n---\n\n## Motivation\n\nSQL recovery has two independent, inconsistent dialect stories today, both found while testing\nEKOS cold against two real public GitHub ETL repos (d… [ekos/docs/rfcs/0031-pluggable-sql-dialects.md]\nsearch match: ekos/docs/rfcs/0039-sql-pentaho-phase1-gaps.md: section 1 — # RFC 0039 — Phase 1: Close SQL/Pentaho Gaps (RFC 0038 Phase 1)\n\n**Status:** Draft\n**Author:** EKOS team\n**Created:** 2026-08-08\n\n---\n\n## Motivation\n\nRFC 0038's Phase 1 scoped \"close existing SQL/Pentaho gaps\" at a high level. Investigating the\nactual code before implementing sur… [ekos/docs/rfcs/0039-sql-pentaho-phase1-gaps.md]\nsearch match: ekos/docs/rfcs/0039-sql-pentaho-phase1-gaps.md: section 2 — 1. Finish RFC 0031: `SqlTransformAnalyzerPass` uses the same resolved `SqlDialectParser`\n   (`Box<dyn Dialect + Send + Sync>`) `SqlAnalyzerPass` already gets from the registry, instead of\n   its own private `dialect_for`. The dialect *name* string stays (still needed for\n   `SqlT… [ekos/docs/rfcs/0039-sql-pentaho-phase1-gaps.md]\nsearch match: ekos/docs/rfcs/0139-answer-quality.md: section 9 — 2. **Fix the identifier tokenisation mismatch.** The mismatch is **CamelCase specifically**, not\n   underscores: `search.rs:283-291` splits queries on `_`/`::`/`-`/`.`, and `SimpleTokenizer` splits\n   *content* the same way, so a content occurrence of `sql_analyzer` does split — … [ekos/docs/rfcs/0139-answer-quality.md]\nsearch match: devlogs/devlog_32.md: section 1 — # Devlog 32 — RFC 0031: Pluggable SQL Dialect Parsers\n\n**Date:** 2026-08-05\n**PRs:** none yet — uncommitted, pending review\n**Branch:** main (working tree)\n\n---\n\n## Summary\n\nFollow-up to devlog_31's identity-resolution bug fix: this session addressed the underlying\nSQL-dialect ga… [devlogs/devlog_32.md]\nsearch match: ekos/docs/rfcs/0059-postgres-sequence-and-ddl-preprocessing.md: section 1 — # RFC 0059 — Postgres Dialect: Preprocess `CREATE`/`ALTER SEQUENCE`, `UNLOGGED`, `NOT VALID`\n\n**Status:** Accepted\n**Author:** EKOS team\n**Created:** 2026-08-20\n\n---\n\n## Motivation\n\nDevlog 60's whole-repo cold run against `analytics/` (Plausible Analytics) exercised the Postgres\n… [ekos/docs/rfcs/0059-postgres-sequence-and-ddl-preprocessing.md]\nsearch match: devlogs/devlog_2.md: section 3 — | `crates/recovery/src/anthropic.rs` | AnthropicProvider HTTP client |\n| `crates/recovery/src/sql_analyzer.rs` | SqlAnalyzerPass + parse_ddl_structural + 5 tests |\n| `crates/recovery/src/git_analyzer.rs` | GitAnalyzerPass (events, contributors, coupling) + 3 tests |\n| `crates/rec… [devlogs/devlog_2.md]\nsearch match: ekos/docs/rfcs/0027-unified-transformation-semantics.md: section 2 — Every format-specific plugin (a future Pentaho `Observer`, the existing SQL observation path) emits\nraw facts as `ObservationArtifact`s, exactly as today. A new `CompilerPass` per format —\n`SqlTransformAnalyzerPass`, `PentahoAnalyzerPass` (Phase 2/3, not this RFC) — reads those a… [ekos/docs/rfcs/0027-unified-transformation-semantics.md]\nsearch match: TODO.md: section 46 — a `node_type` property, one evidence record citing the source path, and `Filter.condition`/\n  `Calculate.expr` land in `properties[\"excerpt\"]` so they're searchable via `ekos_search`/\n  `ekos ask` for free. Deterministic ids for both objects and evidence\n  (`transform_node_kir_id… [TODO.md]\nsearch match: TODO.md: section 170 — are appended below, so recall/MRR/nDCG over the BM25 list is provably non-decreasing versus\n      strict-only, protecting RFC 0126's CI gate with no re-baselining needed. §3.2's CamelCase\n      subword expansion (`6637592`) fixed `code-006` (`sql_analyzer` → `sql`+`analyzer` vs t… [TODO.md]\nekos/crates/recovery/src/sql_analyzer.rs — related to SqlAnalyzerPass — //! `SqlAnalyzerPass` — extracts `KirObject`s (tables as entities) and\n//! `KirRelationship`s (FK edges) from SQL DDL, then uses LLM to add\n//! semantic names and descriptions.\n\nuse std::collections::HashMap;\nuse std::sync::Arc;\n\nuse async_trait::async_trait;\nuse ekos_compiler_co… [ekos/crates/recovery/src/sql_analyzer.rs]\n",
      "retrieved_ids": [
        "161a08f7-746d-5aa5-9768-0c76c1409f57",
        "cd768c5e-1640-51c3-b6ec-cb7ac78ade6d",
        "987e3fbb-31ec-576d-b794-7e801336e8c8",
        "4ef63b23-ef9f-54c0-a442-1753da2951bb",
        "d122a8ab-8f41-5534-a69a-70dfbf3b246b",
        "11ff3b01-0a03-521d-b294-b8fe9e1b8b87",
        "c59f040e-79f2-52ac-86f5-a2484a89b01f",
        "e03746a2-2ca7-57cf-abcf-b40da11fd1d4",
        "0417a4c7-1d0b-52f5-b2de-f52571e9dc2b",
        "4635063b-44e9-5cfb-97e8-4e39451ffe73",
        "b8a8a03a-e13e-5661-8ac0-9ce5d1acce80",
        "dbd7fd71-6dd7-560b-99de-138f3ee5c31d",
        "43985fbb-4e30-5a7f-9973-0c7ab8bf3410",
        "133b60d9-fdf1-564d-8d74-6dda6217b9d4",
        "db5140ff-0b8d-53b0-9ea5-2dd2b90eb362",
        "40d1ba15-65bd-57b0-82e1-4e294990a812",
        "1efd9423-6467-52d2-8099-2852e352636d",
        "08307d65-f994-5777-8cc6-9847943778de",
        "844a8006-88de-5570-ad43-5691fcd52d46",
        "c8ae28b5-2a5d-59cb-a000-a2b9cdb93358",
        "4cd259d5-1dc5-5534-a611-4c4e5f09aca9",
        "3c8880d1-bc8c-5c3d-98a7-95107c2601e3",
        "3a8e4dcf-850c-55ae-acfa-308b3c45b635",
        "9f24ed23-7bfa-5f21-b42c-4937fbd2de4d",
        "d7ee4a21-d05c-5730-860c-011c081943ec",
        "53467467-74d3-5397-83e6-bccea32c7b45",
        "fb2833a3-8600-5c1b-8042-919a2eb44206",
        "583916d7-b3db-54b5-a200-eef2d4d89d6e",
        "d40b8a1c-8672-5923-ad4d-38ad94bf97a8",
        "9650fe07-6a5c-57dc-9a45-705995b82a4a",
        "c51bc059-bfbc-5734-bb51-779360ef6513",
        "7191c316-4a84-5088-b3d4-af80f6d54fc2",
        "0ec946b4-c4c1-58b4-ac58-08579bdab77c",
        "29bcfbc3-380c-5c71-a3c2-4b3dc741a5c8",
        "93d4e99b-2baa-5d08-bbeb-20f802e24e97",
        "72e084ac-67b4-50b6-9e98-940543704a33",
        "5f717ac2-8e67-5e00-9e06-b22474bfbaef",
        "9ca783d4-fd52-550f-b315-fea93bc8c379",
        "b978f67e-1411-54ed-8040-7140ab142191",
        "9fac7ea0-9720-5f74-bf2c-9eb40f9dfc13",
        "5a7eb675-ec33-5530-b06e-d516943845e6",
        "7c89685b-940e-58c9-a980-8e9c7fb7c9ae",
        "497a7f39-84a0-5b9b-aed9-2071c9ad9bc9",
        "de319df9-de3f-53a4-afb6-e1a1c342c130",
        "54f386c6-052c-5ff2-b2ff-825f4c8a874c",
        "903e2986-10af-5ac2-b2b0-7ba0dcc207cd",
        "b4c5d7dd-62f8-5133-9cd3-46b4c69277c6",
        "4049790d-53a8-5cb4-a75f-7fea944af2ae",
        "6d2134ba-46ac-5f0b-ae84-2d42302d7422",
        "103955e6-cff2-5cd3-8cc0-e334f891ffc0"
      ],
      "planned_query_type": "lexical"
    },
    {
      "id": "code-004",
      "passed": false,
      "hallucinated": false,
      "answer_score": 0.0,
      "evidence_score": 1.0,
      "completeness_score": 0.0,
      "retrieval_recall": null,
      "groundedness_score": 1.0,
      "trajectory_score": null,
      "input_tokens": 2699,
      "output_tokens": 24,
      "cache_hit": false,
      "rss_kb_end": 155616,
      "cpu_time_ms": 1359.9999999999998,
      "latency_ms": 37180.45536,
      "error": null,
      "attribution": "retrieval",
      "diagnostics": [
        "RSN007: skipped supporting neighbourhood of ekos — 47 neighbours exceeds the 40-item budget for background context; a hub entity's neighbourhood describes the corpus, not this question"
      ],
      "answer": "The EKOS Cargo workspace targets Rust edition 1.",
      "evidence_text": "search match: ekos/plugins/rust/Cargo.toml — [package]\nname = \"ekos-plugin-rust\"\ndescription = \"Rust (.rs) observer plugin (RFC 0041)\"\nversion.workspace = true\nedition.workspace = true\n\n[dependencies]\nekos-common.workspace = true\nekos-observation-sdk.workspace = true\nekos-artifact.workspace = true\nasync-trait.workspace = tr… [ekos/plugins/rust/Cargo.toml]\nsearch match: ekos/Cargo.lock — # This file is automatically @generated by Cargo.\n# It is not intended for manual editing.\nversion = 4\n\n[[package]]\nname = \"adler2\"\nversion = \"2.0.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6… [ekos/Cargo.lock]\npossible search match (partial term overlap): ekos/Cargo.toml — [workspace]\nresolver = \"2\"\nmembers = [\n    \"crates/common\",\n    \"crates/kir\",\n    \"crates/artifact\",\n    \"crates/compiler-core\",\n    \"crates/compiler-sdk\",\n    \"crates/scheduler\",\n    \"crates/observation-sdk\",\n    \"crates/sql-dialect-sdk\",\n    \"crates/segment-backend\",\n    \"crate… [ekos/Cargo.toml]\npossible search match (partial term overlap): ekos-plugin-rust — Rust (.rs) observer plugin (RFC 0041)\npossible search match (partial term overlap): ekos/plugins/rust\npossible search match (partial term overlap): ekos/crates/ledger/Cargo.toml — [package]\nname = \"ekos-ledger\"\ndescription = \"Append-only semantic knowledge ledger (skeleton — SQLite backend)\"\nversion.workspace = true\nedition.workspace = true\n\n[dev-dependencies]\ntempfile = \"3\"\n# Tests exercise a full SegmentStore round-trip on ObjectStoreBackend (RFC 0113 B2… [ekos/crates/ledger/Cargo.toml]\npossible search match (partial term overlap): ekos/crates/scheduler/Cargo.toml — [package]\nname = \"ekos-scheduler\"\ndescription = \"Re-exports scheduler types from compiler-core (Phase 1 — thin crate)\"\nversion.workspace = true\nedition.workspace = true\n\n[dependencies]\nekos-compiler-core.workspace = true [ekos/crates/scheduler/Cargo.toml]\nsearch match: ekos/crates/ekl/Cargo.toml — [package]\nname = \"ekos-ekl\"\ndescription = \"Enterprise Knowledge Language: parser + interpreter (RFC 0010)\"\nversion.workspace = true\nedition.workspace = true\n\n[dependencies]\nekos-kir.workspace = true\nekos-runtime.workspace = true\nthiserror.workspace = true\nserde_json.workspace = t… [ekos/crates/ekl/Cargo.toml]\npossible search match (partial term overlap): ekos/crates/identity/Cargo.toml — [package]\nname = \"ekos-identity\"\ndescription = \"Identity resolution — merges synonymous concepts (Phase 7)\"\nversion.workspace = true\nedition.workspace = true\n\n[dependencies]\nekos-kir.workspace = true\nthiserror.workspace = true\nserde.workspace = true\nserde_json.workspace = true\n\n[… [ekos/crates/identity/Cargo.toml]\nsearch match: ekos/crates/kir/Cargo.toml — [package]\nname = \"ekos-kir\"\ndescription = \"Knowledge Intermediate Representation — the four canonical node types\"\nversion.workspace = true\nedition.workspace = true\n\n[dependencies]\nekos-common.workspace = true\nserde.workspace = true\nserde_json.workspace = true\nuuid.workspace = tru… [ekos/crates/kir/Cargo.toml]\nsearch match: ekos/plugins/git/Cargo.toml — [package]\nname = \"ekos-plugin-git\"\ndescription = \"Git repository observer plugin (Phase 4)\"\nversion.workspace = true\nedition.workspace = true\n\n[dependencies]\nekos-common.workspace = true\nekos-observation-sdk.workspace = true\nekos-artifact.workspace = true\nasync-trait.workspace = … [ekos/plugins/git/Cargo.toml]\nsearch match: ekos/crates/common/Cargo.toml — [package]\nname = \"ekos-common\"\ndescription = \"Shared types and utilities for EKOS\"\nversion.workspace = true\nedition.workspace = true\n\n[dependencies]\nserde.workspace = true\nserde_json.workspace = true\nuuid.workspace = true\nchrono.workspace = true\nthiserror.workspace = true\nsha2.wo… [ekos/crates/common/Cargo.toml]\nsearch match: ekos/plugins/file/Cargo.toml — [package]\nname = \"ekos-plugin-file\"\ndescription = \"File system observer plugin (Phase 3)\"\nversion.workspace = true\nedition.workspace = true\n\n[dependencies]\nekos-common.workspace = true\nekos-observation-sdk.workspace = true\nekos-artifact.workspace = true\nasync-trait.workspace = tr… [ekos/plugins/file/Cargo.toml]\nsearch match: ekos/plugins/elixir/Cargo.toml — [package]\nname = \"ekos-plugin-elixir\"\ndescription = \"Elixir (.ex/.exs) observer plugin (RFC 0081)\"\nversion.workspace = true\nedition.workspace = true\n\n[dependencies]\nekos-common.workspace = true\nekos-observation-sdk.workspace = true\nekos-artifact.workspace = true\nasync-trait.works… [ekos/plugins/elixir/Cargo.toml]\nsearch match: ekos/crates/artifact/Cargo.toml — [package]\nname = \"ekos-artifact\"\ndescription = \"Content-addressable artifact types (Phase 2 — stub)\"\nversion.workspace = true\nedition.workspace = true\n\n[dependencies]\nekos-common.workspace = true\nekos-kir.workspace = true\nserde.workspace = true\nserde_json.workspace = true\nuuid.wo… [ekos/crates/artifact/Cargo.toml]\nsearch match: ekos/crates/runtime/Cargo.toml — [package]\nname = \"ekos-runtime\"\ndescription = \"Read-only state reconstruction from the ledger\"\nversion.workspace = true\nedition.workspace = true\n\n[dependencies]\nekos-artifact.workspace = true\nekos-kir.workspace = true\nekos-ledger.workspace = true\nekos-identity.workspace = true\nek… [ekos/crates/runtime/Cargo.toml]\nsearch match: ekos/crates/semantic/Cargo.toml — [package]\nname = \"ekos-semantic\"\ndescription = \"Semantic compiler pass: KIR → Canonical Knowledge Model (Phase 8)\"\nversion.workspace = true\nedition.workspace = true\n\n[dependencies]\nekos-common.workspace = true\nekos-kir.workspace = true\nekos-artifact.workspace = true\nekos-compiler… [ekos/crates/semantic/Cargo.toml]\nsearch match: ekos/plugins/confluence/Cargo.toml — [package]\nname = \"ekos-plugin-confluence\"\ndescription = \"Confluence page observer plugin (proof-of-concept — see RFC 0022)\"\nversion.workspace = true\nedition.workspace = true\n\n[dependencies]\nekos-common.workspace = true\nekos-observation-sdk.workspace = true\nekos-artifact.workspace… [ekos/plugins/confluence/Cargo.toml]\nsearch match: ekos/plugins/python/Cargo.toml — [package]\nname = \"ekos-plugin-python\"\ndescription = \"Python (.py) observer plugin (RFC 0038/0040 Phase 2)\"\nversion.workspace = true\nedition.workspace = true\n\n[dependencies]\nekos-common.workspace = true\nekos-observation-sdk.workspace = true\nekos-artifact.workspace = true\nasync-tra… [ekos/plugins/python/Cargo.toml]\nsearch match: ekos/plugins/snowflake/Cargo.toml — [package]\nname = \"ekos-plugin-snowflake\"\ndescription = \"Snowflake schema observer plugin (Phase 14, scaffold — see RFC 0012)\"\nversion.workspace = true\nedition.workspace = true\n\n[dependencies]\nekos-common.workspace = true\nekos-observation-sdk.workspace = true\nekos-artifact.workspa… [ekos/plugins/snowflake/Cargo.toml]\n",
      "evidence_refs": [
        "ad63f0bb-fafa-5ec5-9c27-05b0188083fa",
        "1ef5b60e-2c57-555e-976d-62ccd58c8869"
      ],
      "retrieved_ids": [
        "dfdd069f-fd17-5aeb-9596-b83fb0a2c788",
        "73446dcb-2c16-57b2-98d2-e0f469cd2380",
        "849cea78-63d1-5484-934a-4e6587c67515",
        "07179bab-d486-5b14-8c68-6e743e45b3f6",
        "3b69f97f-12c6-5b92-8196-eed82bf026d6",
        "49581cd8-178a-5d25-a441-8faf16cae124",
        "36367efa-f47a-5128-bdc4-c6e5498e4b1f",
        "b31ee0b2-7af2-5643-a473-1b20006591e6",
        "eb1a8094-d4a7-53c0-b566-89b8439d2506",
        "9d21a111-dd3f-5173-a4ca-0ff0c8ac3f26",
        "de0e9b2a-e46f-56b7-8adf-8bebadc42048",
        "64e6073b-fc7d-5613-a431-e54bd2b800f5",
        "acae13df-dfe5-57f3-a785-0252f1a5ce77",
        "284cf3a1-b1ec-5607-8c2a-45ec4eb3bc2d",
        "ec53eab7-e4a6-5a18-8b54-d0d73bf12f83",
        "e7851889-11dd-5b29-83ec-ad9d03543067",
        "04adefce-9ec7-5a32-9677-5e96c3ec343c",
        "48fa6510-8e03-5dcb-a190-a3a9d1240892",
        "07c3a002-f6ea-5e09-89b3-2983df83a973",
        "65819206-297a-5b7b-9b16-b97e3fd25e47",
        "7a0b0b3f-be96-554e-8987-26b3d22ddc2d",
        "ab48cde6-37d7-5240-88f8-946454f0d137",
        "4d7a948e-bacd-555b-a928-ab1257668aee",
        "2cbb745c-00cd-5424-b26c-699cc1cb0f3b",
        "8b9eb490-6a08-58e9-befd-b0e776eca5df",
        "3bf69319-bbfa-5ba9-a23e-df3ec538df3c",
        "2d28b82a-a6d7-5c8c-9ba6-21b96be7ba66",
        "7264cb5e-c41d-5d24-96dd-0dc4626af651",
        "8d6ab47f-f8ab-5c0a-8b43-373b3a046cc1",
        "b91b6309-f3db-56cd-80d1-d1d38239ed70",
        "d8c09ac0-9251-522d-a257-7e85bc36df65",
        "1918daf0-2011-544a-b34b-d765fd1508c8",
        "039ee6a5-dc52-5cf5-aaac-21bb61c008ee",
        "17e350f6-b618-5531-902b-b7205f8cdb60",
        "8df8e217-a1e6-5860-8fd8-842bde22ab17",
        "c0ff2e6c-7e2f-5107-a5be-197e2c66ecef",
        "b8491512-637b-527a-8ff2-4f0479359de0",
        "be25fd98-4e64-5f17-a978-92391990c68d",
        "cdf63051-2dae-5705-b9bc-8f1840ad3313",
        "4127bf74-06b0-5389-aa97-54da7e40fb19",
        "c32437f6-ac12-57c4-8443-f32f5ee69868",
        "20a4d155-8fd5-5fd9-94a0-6540ae324611",
        "695ff876-2df6-5150-8468-c4ce01d48c15",
        "ad44819f-e6f2-56c6-898d-e332eba0fb03",
        "d48422bb-e581-5c0a-88cd-5ca3928ea5bb",
        "8bd33342-cac2-5f5e-b076-ee49a7b9dad0",
        "d5e526e0-76bd-5601-a03c-af24fb029be3",
        "5524ffc2-48ff-56c1-90dc-d297f0b2cf15",
        "fd61bc87-2dc5-59f7-9eda-6e2a8fc31e9d",
        "66b8078f-6843-5768-a99d-c27a94604fdb"
      ],
      "planned_query_type": "lexical"
    },
    {
      "id": "code-005",
      "passed": true,
      "hallucinated": false,
      "answer_score": 1.0,
      "evidence_score": 1.0,
      "completeness_score": 1.0,
      "retrieval_recall": null,
      "groundedness_score": 1.0,
      "trajectory_score": null,
      "input_tokens": 2159,
      "output_tokens": 63,
      "cache_hit": false,
      "rss_kb_end": 148520,
      "cpu_time_ms": 800.0,
      "latency_ms": 34448.434796999994,
      "error": null,
      "attribution": "passed",
      "answer": "The query planning logic that turns a natural-language question into a QueryPlan is implemented in the `crate::reason` module.",
      "evidence_text": "possible search match (partial term overlap): crate::reason::plan_question\npossible search match (partial term overlap): plan_question — Understand + plan `question` against the ledger `runtime` wraps. [ekos/crates/runtime/src/reason.rs:724]\npossible search match (partial term overlap): crate::reason::QueryPlan\npossible search match (partial term overlap): QueryPlan — A compiled question. [ekos/crates/runtime/src/reason.rs:75]\npossible search match (partial term overlap): ekos_runtime::reason::plan_question\npossible search match (partial term overlap): crate::ai::QUESTION_STOPWORDS\npossible search match (partial term overlap): reason::QueryPlan\npossible search match (partial term overlap): ekos/crates/clickhouse-query\npossible search match (partial term overlap): current_module [ekos/crates/recovery/src/elixir_analyzer.rs:249]\npossible search match (partial term overlap): answer_question — Mirrors `crates/cli/src/commands/ask.rs::run` exactly — same config resolution, same provider selection, same evidence-mapping pattern (`ask.rs:29`) — just returning JSON instead of printing to stdout. [ekos/crates/demo-server/src/ask.rs:32]\npossible search match (partial term overlap): ekos/docs/rfcs/0123-reason-query-plan.md — # RFC 0123 — REASON: the Query Plan IR, rules planner, and typed Evidence Set\n\n**Status:** Draft\n**Author:** EKOS team\n**Created:** 2026-09-01\n**Phase 4 of:** RFC 0118 · **builds on:** RFC 0121 (understanding) + RFC 0122 (QUERY surface)\n\n---\n\n## Motivation\n\n`AiRuntime::gather_con… [ekos/docs/rfcs/0123-reason-query-plan.md]\npossible search match (partial term overlap): ekos/docs/rfcs/0123-reason-query-plan.md — # RFC 0123 — REASON: the Query Plan IR, rules planner, and typed Evidence Set\n\n**Status:** Draft\n**Author:** EKOS team\n**Created:** 2026-09-01\n**Phase 4 of:** RFC 0118 · **builds on:** RFC 0121 (understanding) + RFC 0122 (QUERY surface)\n\n---\n\n## Motivation\n\n`AiRuntime::gather_con… [ekos/docs/rfcs/0123-reason-query-plan.md]\npossible search match (partial term overlap): ekos/crates/clickhouse-query/src/audit.rs — //! Auditability (RFC 0056 Stage 2) — every live query is appended to the ledger as an\n//! Evidence/Event pair via `&dyn KnowledgeStore` directly, the same access level\n//! `commit.rs`/`crates/simulation` already have. The row data itself is never ledgered, only the\n//! fact that… [ekos/crates/clickhouse-query/src/audit.rs]\npossible search match (partial term overlap): DescriptionScope::wants_modules [ekos/crates/recovery/src/llm_description.rs:81]\npossible search match (partial term overlap): extract_module_name [ekos/crates/recovery/src/elixir_analyzer.rs:604]\npossible search match (partial term overlap): build_module_prompt [ekos/crates/recovery/src/llm_description.rs:196]\npossible search match (partial term overlap): ekos/crates/clickhouse-query/Cargo.toml — [package]\nname = \"ekos-clickhouse-query\"\ndescription = \"Live NL-to-SQL query engine over a compiled ClickHouse schema (RFC 0056, Stage 2)\"\nversion.workspace = true\nedition.workspace = true\n\n[dependencies]\nekos-kir.workspace = true\nekos-ledger.workspace = true\nekos-runtime.workspa… [ekos/crates/clickhouse-query/Cargo.toml]\npossible search match (partial term overlap): ekos/docs/rfcs/0123-reason-query-plan.md: section 1 — # RFC 0123 — REASON: the Query Plan IR, rules planner, and typed Evidence Set\n\n**Status:** Draft\n**Author:** EKOS team\n**Created:** 2026-09-01\n**Phase 4 of:** RFC 0118 · **builds on:** RFC 0121 (understanding) + RFC 0122 (QUERY surface)\n\n---\n\n## Motivation\n\n`AiRuntime::gather_con… [ekos/docs/rfcs/0123-reason-query-plan.md]\npossible search match (partial term overlap): ekos/crates/cli/src/commands/query.rs — use super::store::open_store_read_only;\nuse anyhow::Result;\nuse ekos_compiler_core::EkosConfig;\nuse ekos_kir::KirId;\nuse ekos_ledger::KnowledgeStore;\nuse ekos_runtime::reason::{plan_question, render_plan};\nuse ekos_runtime::{RetrievalRequest, Runtime};\nuse std::{path::Path, str::… [ekos/crates/cli/src/commands/query.rs]\npossible search match (partial term overlap): ekos/crates/clickhouse-query/src/lib.rs — //! Live NL-to-SQL query engine over a compiled ClickHouse schema (RFC 0056, Stage 2).\n//!\n//! This is the one path in EKOS that crosses the \"AI systems consume knowledge through the\n//! Runtime only... they never touch raw enterprise systems directly\" invariant stated in\n//! `CL… [ekos/crates/clickhouse-query/src/lib.rs]\nekos/crates/runtime/src/reason.rs — related to QueryPlan — //! RFC 0123 (Phase 4 of RFC 0118) — REASON: the Query Plan IR, the rules planner, and the typed\n//! Evidence Set.\n//!\n//! A question is compiled — [`plan`] turns a [`QueryUnderstanding`](crate::retrieval) into a\n//! typed [`QueryPlan`], [`execute`] runs it against the QUERY surf… [ekos/crates/runtime/src/reason.rs]\n",
      "evidence_refs": [
        "c12a0eb4-4bce-422b-98c0-74c1ceb6f5de"
      ],
      "retrieved_ids": [
        "ec21afec-501d-5280-9a99-4aadf13c1272",
        "07f4f731-1686-566d-bff3-56d9d1e63691",
        "27c8c4bb-7116-5c5e-9c16-22bddc219f8b",
        "bfd44eb8-b3d3-5a93-bf94-aa18eead60b5",
        "de24ee58-0850-573c-b648-198a743e03f6",
        "c48c6c64-d824-585d-8924-3dca9c9ba40e",
        "220c904a-86a6-5960-9989-33f461f1fd08",
        "2e50b306-5229-5c70-8f04-add1b5b3325f",
        "73f76a80-e2ec-5815-8afb-7e9fd917869f",
        "3998780f-75ba-513f-8429-dbf224d9cc02",
        "8f976ed1-ed82-56bd-b4eb-d7d0d5e30d5a",
        "cb7e10e1-3fdc-5edb-836d-ba2751634ce8",
        "5f8eda6d-90c1-538e-b861-ae58b148d539",
        "0acfaa93-b966-526f-836e-fdff8ed68c02",
        "f9819505-18be-5a94-baf4-0d117a09e08f",
        "dfe9e581-6696-58eb-800b-b1be8126a0b6",
        "d5e526e0-76bd-5601-a03c-af24fb029be3",
        "e5bddffb-8cbe-509e-b2b2-6210e72342f7",
        "76b10d14-834f-5bcb-8858-f46092b1989c",
        "1c90a1c9-205c-5cea-803a-709c5520488b",
        "39944ed9-67a2-5778-a2a4-969d42463b08",
        "f4d84615-4323-5c36-a0b7-b0be7480fb2a",
        "ba6beb12-4fde-5cc8-8860-0fb6fd6fbf23",
        "d3b1fb94-dfcf-5671-a653-6ef71a56280e",
        "2ad480fc-7182-5373-b8e0-f26c0824afd9",
        "bde86177-783c-5f93-94aa-e1f586b0c38d",
        "f764a415-955b-54aa-9588-7f04fd055bcf",
        "d3531f43-0f57-50d0-9562-ccf131137e60",
        "22873165-bc32-5c38-a219-22586895465f",
        "12d0dd12-20c5-57da-aca4-f87c55d80182",
        "19b157e2-478e-5f5f-86da-07fd0d203f5d",
        "2fe4830f-81d8-5a37-a226-b4f086a77407",
        "1b6e4eee-f6b8-573b-ae28-88f15e4afdcd",
        "3228aca6-7878-5a96-b5d9-94f66bb79049",
        "735dd268-4d4b-5926-8552-7e9a6c5ffe30",
        "dac9be2b-c6b5-5bc5-981b-dc2b6e7b1ef8",
        "a222c7b0-8a31-5c66-895f-195e662b97a2",
        "2337819b-6019-5096-ad54-d38a7dcbd667",
        "c6b7e9ee-d82a-5993-a9ec-7527ad47ce56",
        "1afc3c19-504d-5583-b064-1d8620975b63",
        "86457429-48a8-5f08-b95a-d0416f4cbc66",
        "713750f8-8ac0-5308-940c-1f36ef7e89fd",
        "47211aee-7a8b-5e1a-8ae4-5f71ea3f7059",
        "ce1c56bc-4017-5ccc-ad00-9b5a7873fd6e",
        "2bcfb548-a018-57ea-b18f-1d55f79783b4",
        "f6a184f1-c752-5d7a-9b90-18c78130a72a",
        "4ef96008-24c6-58a6-b7a7-91b47295ad53",
        "b3a45d7c-dd18-536e-8ccd-8be5cef9f816",
        "28cd3306-17f9-542a-b79d-acad33fc7f16",
        "e3af1d02-6fa0-589b-ada0-77b79f13bafc"
      ],
      "planned_query_type": "lexical"
    },
    {
      "id": "code-006",
      "passed": true,
      "hallucinated": false,
      "answer_score": null,
      "evidence_score": null,
      "completeness_score": null,
      "retrieval_recall": 1.0,
      "groundedness_score": null,
      "trajectory_score": null,
      "input_tokens": null,
      "output_tokens": null,
      "cache_hit": null,
      "rss_kb_end": 148532,
      "cpu_time_ms": 0.0,
      "latency_ms": 1.949752,
      "error": null,
      "attribution": "n/a",
      "retrieved_ids": [
        "161a08f7-746d-5aa5-9768-0c76c1409f57",
        "3a8e4dcf-850c-55ae-acfa-308b3c45b635",
        "9f24ed23-7bfa-5f21-b42c-4937fbd2de4d",
        "d7ee4a21-d05c-5730-860c-011c081943ec",
        "53467467-74d3-5397-83e6-bccea32c7b45",
        "583916d7-b3db-54b5-a200-eef2d4d89d6e",
        "d40b8a1c-8672-5923-ad4d-38ad94bf97a8",
        "cd768c5e-1640-51c3-b6ec-cb7ac78ade6d",
        "987e3fbb-31ec-576d-b794-7e801336e8c8",
        "4ef63b23-ef9f-54c0-a442-1753da2951bb",
        "d122a8ab-8f41-5534-a69a-70dfbf3b246b",
        "11ff3b01-0a03-521d-b294-b8fe9e1b8b87",
        "da99cc68-8ee0-53ba-9f83-d44663744e8f",
        "455cf020-190d-53ec-9700-97a65a9a5656",
        "823e2fdd-8a34-513a-84e3-9675bbea749f",
        "c59f040e-79f2-52ac-86f5-a2484a89b01f",
        "ce3d2f1b-e1c6-55d7-92bc-c1b69f76dbca",
        "e03746a2-2ca7-57cf-abcf-b40da11fd1d4",
        "0417a4c7-1d0b-52f5-b2de-f52571e9dc2b",
        "4635063b-44e9-5cfb-97e8-4e39451ffe73",
        "19dc0d7c-211b-5d53-a00a-385e9f698472",
        "eb101aed-59b1-5521-9deb-283867a8113e",
        "97d2091d-5221-54be-8adf-256308ba9226",
        "5c2586e7-c7da-5f19-8610-cbc4794b8bb2",
        "a12df746-77ef-5551-a4f5-7586167e13b6",
        "b8a8a03a-e13e-5661-8ac0-9ce5d1acce80",
        "fa65338f-3f44-5e4a-84ef-ae285a0ef36e",
        "fdcee708-d6ab-566e-9328-13c095f25ef7",
        "da3d99db-6b84-59fd-a6d6-7d207240184a",
        "250b866b-ad3b-58b5-bc19-52f5df0a0d24",
        "dbd7fd71-6dd7-560b-99de-138f3ee5c31d",
        "43985fbb-4e30-5a7f-9973-0c7ab8bf3410",
        "f5d7bb96-5d6e-5fab-8f23-62fcda7f7e19",
        "5068e0f7-90cc-5852-8e4f-76c213cabeea",
        "bad899ac-d11d-5e18-8330-bb7c6039e123",
        "5158b69f-cbcb-5b6e-bb02-322612281acb",
        "b62c3fdb-44ac-5904-bd76-dcaacd469076",
        "dccdb416-0c11-5ae4-9246-705697d78175",
        "6d3092b6-29fc-5d83-9627-91637351befa",
        "f08d581f-1f9f-5555-820f-c57d20211b4d",
        "289f1679-39a4-5621-adba-bd7f541a1851",
        "1efd7869-7242-51b9-8e6b-f538f32a3558",
        "fc382df9-9618-52c7-83c2-5d8ebcad3415",
        "e16fa419-f6eb-5f59-9ce9-3aff4409cdeb",
        "b9cc2269-08bb-538b-95be-68877aba4d47",
        "1c90a1c9-205c-5cea-803a-709c5520488b",
        "ca2cbd55-ab6b-5547-b803-efd311ea8680",
        "a98c14df-6c30-5a63-bd1f-2bdd166fd2b1",
        "40d1ba15-65bd-57b0-82e1-4e294990a812",
        "4970a964-ac5f-5670-8e33-70a2cf323c8f"
      ]
    },
    {
      "id": "code-007",
      "passed": false,
      "hallucinated": false,
      "answer_score": 0.0,
      "evidence_score": null,
      "completeness_score": 0.0,
      "retrieval_recall": null,
      "groundedness_score": 0.0,
      "trajectory_score": null,
      "input_tokens": 2093,
      "output_tokens": 40,
      "cache_hit": false,
      "rss_kb_end": 156076,
      "cpu_time_ms": 630.0,
      "latency_ms": 30804.519077999998,
      "error": null,
      "attribution": "generation",
      "diagnostics": [
        "AI001: LLM response did not include a valid cited_evidence block"
      ],
      "answer": "EKOS's coding rules do not mention the `unsafe` keyword in CLAUDE.md. \n\nInsufficient evidence.\nI looked for claims that directly address or describe the `unsafe` keyword.",
      "evidence_text": "CLAUDE.md: section 8 — dependency of CLAUDE.md — - Artifacts are **content-addressable** (id + checksum + metadata + dependencies + version).\n- **Secrets/PII are never observed or stored** (RFC 0043) — a built-in redaction baseline\n  (`ekos_common::redaction`) runs at every raw-content entry point; `ekos.toml`'s `[security]`\n  … [CLAUDE.md]\nCLAUDE.md: section 5 — dependency of CLAUDE.md — | `semantic` | Semantic compiler: KIR + resolved identities → CKM; `transform_ir.rs` is the shared Transformation IR (RFC 0027) every legacy-format parser (Pentaho, SQL) compiles into. `concentration_risks` (RFC 0094) derives real, persisted `Custom(\"Risk\")` objects — `risk_type:… [CLAUDE.md]\nCLAUDE.md: section 6 — dependency of CLAUDE.md — | `docs-gen` | Deterministic Markdown/HTML rendering from the compiled ledger (RFC 0035) — `render_object_page` (`--layout objects`, one page per significant object) and `render_readme`/`render_architecture`/`render_api`/`render_sequence_diagrams` (`--layout curated`, RFC 0037/00… [CLAUDE.md]\nCLAUDE.md: section 9 — dependency of CLAUDE.md — 1. **Design** — write an RFC in `docs/rfcs/NNNN-<topic>.md` before any code\n2. **Architecture Review** — validate against the compiler model above\n3. **Interfaces** — define public traits and types first\n4. **Tests** — write tests before implementation\n5. **Implementation**\n6. **… [CLAUDE.md]\nCLAUDE.md: section 7 — dependency of CLAUDE.md — | `common` | Shared utilities — `ContentHash`, zstd compression, and `redaction` (RFC 0043: built-in, non-disable-able secrets/PII pattern table + excluded-file globs, the single module both `build.rs` and `recover.rs`'s direct-file-read blocks call before anything reaches the ar… [CLAUDE.md]\nCLAUDE.md: section 2 — dependency of CLAUDE.md — cargo run -p ekos -- identity scan          # cross-system candidate matches (RFC 0029)\ncargo run -p ekos -- marketing publish      # devlog -> tweet -> approval -> X (RFC 0030)\ncargo run -p ekos -- mcp serve --workspace <dir>\ncargo run -p ekos -- docs generate --layout curated -… [CLAUDE.md]\nCLAUDE.md: section 4 — dependency of CLAUDE.md — | `identity` | Identity Resolution — `DefaultResolver` merges same-source-kind duplicates before the CKM exists (RFC 0007), but only when a group's normalized names match *exactly*; fuzzy matches (no confidence threshold reliably separates real correct fuzzy merges from real inco… [CLAUDE.md]\nCLAUDE.md: section 10 — dependency of CLAUDE.md — <Non-obvious facts, gotchas, SDK quirks, production behaviour, or patterns\n that should not be re-discovered from scratch. Each item should answer:\n \"What would a future developer need to know to avoid the same mistake?\">\n\n---\n\n## Files Changed\n| File | Change summary |\n```\n\n### … [CLAUDE.md]\nCLAUDE.md: section 1 — dependency of CLAUDE.md — # CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Project Status\n\nEKOS has an implemented Rust (2024 edition) Cargo workspace — this is not a design-phase repo.\nRead `devlogs/devlog_*.md` (numbered chronologica… [CLAUDE.md]\nCLAUDE.md: section 3 — dependency of CLAUDE.md — | `recovery` | Knowledge-recovery passes: one analyzer per source kind (`sql_analyzer` — DDL, `sql_transform_analyzer` — SELECT/VIEW/procedures into the Transformation IR, `pentaho_analyzer`, `git_analyzer`, `github_analyzer`, `confluence_analyzer`, `local_docs_analyzer`, `docume… [CLAUDE.md]\nCLAUDE.md.name = CLAUDE.md [CLAUDE.md]\nCLAUDE.md.kind = Document [CLAUDE.md]\nCLAUDE.md.doc_format = md [CLAUDE.md]\nCLAUDE.md.excerpt = # CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Project Status\n\nEKOS has an implemented Rust (2024 edition) Cargo workspace — this is not a design-phase repo.\nRead `devlogs/devlog_*.md` (numbered chronologically — the highest-numbered file is the latest,\n`devlog_148.md` as of this writing) before starting non-trivial work: they are the project's\nlong-term memory and record what shipped, why, and what was learned. `TODO.md` tracks the\nphase-by-phase roadmap; RFCs are split across two locations for historical reasons, not a\n [CLAUDE.md]\nCLAUDE.md.page_count = null [CLAUDE.md]\nCLAUDE.md.path = CLAUDE.md [CLAUDE.md]\n",
      "retrieved_ids": [
        "bbdc0c84-bdb2-5a47-a55b-447d3de25435",
        "99f8d1b1-826c-5008-897d-946bf970d480",
        "a0f174d3-a1ae-5c38-86aa-9920ae2beb45",
        "6e34dc38-652b-512d-a36b-14b09d2a7032",
        "5e183c99-6db2-5577-9bfd-c549d7dedef0",
        "60902e35-1d21-5a95-aa9f-f6f616615ed0",
        "98a7cc4f-bcc8-594f-a9c1-20807b9af09a",
        "df5fe9e7-da4e-5f5f-a720-f1202bd3cb00",
        "a68f2064-57cb-5029-862a-59908847f369",
        "86caf851-6aad-569e-9498-03bb208f3628",
        "5ed170f6-14a6-5281-87dd-f598dcb528af",
        "8b4a8177-22a8-5624-a3f5-f388dce1bd64",
        "fb0c5ce5-be4b-52c0-9008-f0cd02b6c6b9",
        "22faadcd-43d6-546c-9153-bf801e43a7b3",
        "7efa420f-0c96-532d-9343-75f3f8a54fcd",
        "36f75f66-5d13-5ea4-91a6-3b2110ca579e",
        "d8d4e4a8-6e9d-5b6d-a699-fe2d97a8071c",
        "34ebe6e3-6729-5e55-a0e8-f85730f2eb99",
        "d64243b2-605e-5af2-9373-b2f6483c166a",
        "38399e71-0542-53ba-aff4-0d6148798bb7",
        "00d9442f-d37c-5bd2-81e4-33f4fe030583",
        "7bf77ef4-6325-54fb-ae8c-6526da086cb0",
        "6e24f58b-2cf8-5b61-a108-50679ab61f7e",
        "1cb22073-b61a-5178-a206-e087ae25f2d3",
        "383d49e6-cbdf-5d95-bb87-94dec68075b2",
        "e777822e-357c-59e0-823e-1d96a00e18e9",
        "bd723a8f-ab2a-53b0-aa57-5c8f8b467d99",
        "d9d358c1-08d5-552b-be18-98dcb19d09dd",
        "3144bcb8-6269-5a70-9818-06039ab467da",
        "b62c3fdb-44ac-5904-bd76-dcaacd469076",
        "353829f9-f9f3-5912-a420-9658b633a5a8",
        "84f3f670-312d-5c72-9ff7-0a09e3f595df",
        "55739ba0-71c6-519c-99bd-f87669c233e4",
        "b4c5d7dd-62f8-5133-9cd3-46b4c69277c6",
        "770ff847-b2f4-594a-9768-7444649e2489",
        "ef3e8cfe-7d30-5c83-90a2-89d521028bfb",
        "c32437f6-ac12-57c4-8443-f32f5ee69868",
        "b60eebb1-ab9e-50e7-a550-162f7c6481ec",
        "251e54ef-3f28-5954-9014-ee9ae388c8ba",
        "6928e6e6-24c5-5c5b-97dc-65a658626c42",
        "c7b8c545-2aa6-535b-b942-f8419dddd5d8",
        "8af4ee85-e7c9-5344-bd30-c0427dbb89af",
        "276db848-e065-50cd-9954-915ca8cd3e3f",
        "122a89a7-128a-5a42-84c9-4b30bc3640b6",
        "0ffc2e75-f2c0-56f8-ada0-09949d65a9eb",
        "c68ce14b-a760-5e01-8c7b-23f78acd7302",
        "7db50704-c3ca-5602-b766-c5bb57816934",
        "6b2c7e14-ceb8-56b5-8952-ad9822ac81fe",
        "ec55a856-48be-51ae-b29e-65af6ed27c2b",
        "2b25bb2a-e681-533f-a46e-8bffddcb3664"
      ],
      "planned_query_type": "structural"
    },
    {
      "id": "code-008",
      "passed": false,
      "hallucinated": false,
      "answer_score": 0.0,
      "evidence_score": 1.0,
      "completeness_score": 0.0,
      "retrieval_recall": null,
      "groundedness_score": 1.0,
      "trajectory_score": null,
      "input_tokens": 727,
      "output_tokens": 53,
      "cache_hit": false,
      "rss_kb_end": 156224,
      "cpu_time_ms": 120.0,
      "latency_ms": 11366.890173,
      "error": null,
      "attribution": "retrieval",
      "diagnostics": [
        "RSN004: KirObject has no \"type\" fact"
      ],
      "answer": "The ekos crate owns the KirObject, KirRelationship, and KirEvidence type definitions.",
      "evidence_text": "KirObject.name = KirObject [ekos/crates/kir/src/lib.rs:190]\nKirObject.kind = RustSymbol [ekos/crates/kir/src/lib.rs:190]\nKirObject.description = The identity of a concept in the enterprise (table, entity, service, rule…). [ekos/crates/kir/src/lib.rs:190]\nKirObject.source_span = {\"end_line\":201,\"start_line\":190} [ekos/crates/kir/src/lib.rs:190]\nKirObject.symbol_kind = struct [ekos/crates/kir/src/lib.rs:190]\n",
      "evidence_refs": [
        "2b5b7b36-7350-4218-8dc6-39f271e2a68e"
      ],
      "retrieved_ids": [
        "9da2e9bc-5c40-5dc0-accb-2d8914275fe5",
        "84216060-701f-5eda-ab56-b2c2b4e1c08e",
        "b9db10f5-7e5b-57af-b2ef-f5693b398784",
        "3fdfb3b4-df68-58dc-995b-f6d90e4b08d6",
        "68500468-1708-5dea-ba07-641484d0a488",
        "17b4566a-87c4-59ef-80e1-fa8e4808b3b7",
        "cd957737-5090-52ce-b6bb-9747733e7559",
        "665a7287-e7d7-5668-b61b-75b73ea62707",
        "8bfbda90-3848-539f-bfdd-932ad7f515ae",
        "7e9142c0-df4b-5483-a023-116d571f4a52",
        "84add3e7-5caa-502f-bd00-94301bcac26b",
        "e44def5d-7d3a-55b4-b026-c7f2664cec51",
        "3e5a56c5-b9ef-510b-b939-73a0160df17e",
        "47de4d6e-f31c-5894-b4c7-03e40a20cde4",
        "6467979a-bda4-542d-af11-0ed8edac940d",
        "2f2577d7-abac-5539-9f6d-db05caceb7d7",
        "8041cbbf-8aa9-5a24-9a77-03d904ecdd97",
        "0d3b089a-3d02-5f05-b09d-34e6ebb0c2a1",
        "075168fd-3373-5f30-a5cc-0a92d2fdbb75",
        "6a01df01-53c4-5f47-8a59-6c7a265c27b0",
        "0c893673-e02e-5996-9834-01744627fe26",
        "ae3d501b-656d-5b09-b406-042ef6dc5e8a",
        "02e7a2c8-1ee2-5ef4-8fac-773b16fa7ddd",
        "6d1f569f-ac0b-58ea-aabf-76b4212f5850",
        "bfa9f045-6652-502b-a505-e758ac13116a",
        "cb7e9188-7b13-5964-86bc-33b43b1c60d5",
        "94035953-7037-5f1b-8938-6436ebb328e5",
        "38d0e14e-a1c7-5833-88c8-7477392b4974",
        "4e0ee2f3-cbc8-57eb-b68b-eb0b6b1ab0b6",
        "9c27f3ae-907a-5b9a-af7b-250f660e35ef",
        "87f077e5-6707-50aa-b5db-e75b99ab8b5b",
        "1aeb8461-57b3-5aa9-803a-5e39033e7718",
        "013cb6d9-f9c9-5045-b3af-cc0741087e2c",
        "dfcdc7e7-695f-5eb5-8749-7ee0fd5c7bc1",
        "684b129b-29f4-5861-9ac6-313188567fb4",
        "69504698-9265-54f9-8b22-3ad848dfe06e",
        "db55b4f6-b5d9-5858-987d-e5a1ec9d4077",
        "83764758-1115-54df-bb75-4a49e7334245",
        "9e9a0b61-2e1b-5474-b050-e5065d6069ab",
        "efc2085a-34f1-52eb-bca5-c8dfc3400ea9",
        "d6983054-bcae-52db-8653-66f2337d866b",
        "606fd7c6-25cc-5376-8391-b31516895dab",
        "9c7b3883-e098-590c-8485-7679d3e96fc3",
        "c13aa3d4-2f69-56d7-8b30-c643c78450ea",
        "c69dafba-afdb-58a0-87b5-d52a0d494060",
        "94c95a8b-e28c-584d-ba0f-e8212edd1910",
        "49576809-e712-5bd4-91a2-edf1ee60a47d",
        "b2c88510-792a-5dc7-8c04-f5e81cf9e666",
        "4ddace2b-17ce-56ea-9ad1-60e061f45328",
        "0fcb350b-d6ea-517c-9b61-5a97e36994d5"
      ],
      "planned_query_type": "lexical"
    },
    {
      "id": "code-009",
      "passed": true,
      "hallucinated": false,
      "answer_score": 1.0,
      "evidence_score": 1.0,
      "completeness_score": 1.0,
      "retrieval_recall": 0.0,
      "groundedness_score": 1.0,
      "trajectory_score": null,
      "input_tokens": 3331,
      "output_tokens": 101,
      "cache_hit": false,
      "rss_kb_end": 144824,
      "cpu_time_ms": 3480.0,
      "latency_ms": 63575.008245,
      "error": null,
      "attribution": "passed",
      "answer": "The function in `ekos_common` that performs secrets/PII redaction on raw content is `redact`. This function is part of the `ekos-common::redaction` module and is responsible for replacing every match of every built-in pattern, plus every valid `config.extra_patterns` regex, with `[REDACTED:<label>]`.",
      "evidence_text": "search match: ekos/docs/rfcs/0043-secrets-and-pii-redaction.md — # RFC 0043 — Global Secrets/PII Redaction\n\n**Status:** Draft\n**Author:** EKOS team\n**Created:** 2026-08-09\n\n---\n\n## Motivation\n\nEKOS observes raw file content from every connected system and compiles it into an append-only\nledger — a ledger that, by the project's own core invaria… [ekos/docs/rfcs/0043-secrets-and-pii-redaction.md]\nsearch match: ekos/docs/rfcs/0043-secrets-and-pii-redaction.md — # RFC 0043 — Global Secrets/PII Redaction\n\n**Status:** Draft\n**Author:** EKOS team\n**Created:** 2026-08-09\n\n---\n\n## Motivation\n\nEKOS observes raw file content from every connected system and compiles it into an append-only\nledger — a ledger that, by the project's own core invaria… [ekos/docs/rfcs/0043-secrets-and-pii-redaction.md]\npossible search match (partial term overlap): ekos/docs/rfcs/0043-secrets-and-pii-redaction.md: section 6 — observed; zero artifacts/objects are written for it.\n- `recover.rs` integration test: a `Cargo.toml`/SQL/workflow fixture containing a fake secret is\n  fed through the relevant analyzer pass; the resulting `KnowledgeArtifact`'s KIR contains the\n  redaction placeholder, never the … [ekos/docs/rfcs/0043-secrets-and-pii-redaction.md]\nsearch match: ekos/docs/rfcs/0043-secrets-and-pii-redaction.md: section 4 — would break a real, intentional feature (contributor attribution). This RFC only touches raw\n  free-text content fields (`excerpt`, `symbols`, SQL/manifest/workflow file bodies), never\n  already-structured connector metadata.\n\n## Design\n\n### `ekos-common::redaction` (new module)\n… [ekos/docs/rfcs/0043-secrets-and-pii-redaction.md]\nsearch match: ekos/docs/rfcs/0043-secrets-and-pii-redaction.md: section 1 — # RFC 0043 — Global Secrets/PII Redaction\n\n**Status:** Draft\n**Author:** EKOS team\n**Created:** 2026-08-09\n\n---\n\n## Motivation\n\nEKOS observes raw file content from every connected system and compiles it into an append-only\nledger — a ledger that, by the project's own core invaria… [ekos/docs/rfcs/0043-secrets-and-pii-redaction.md]\npossible search match (partial term overlap): ekos_common::redaction::redact\npossible search match (partial term overlap): ekos/docs/rfcs/0043-secrets-and-pii-redaction.md: section 3 — `recover.rs`'s four direct-read blocks), plus a new `[security]` `ekos.toml` config section that\ncan only add to the baseline.\n\n## Non-goals / Known limitations\n\n- **Not a DLP/entropy-based scanner.** Like `dependency_analyzer.rs`'s own pattern table, this is\n  a fixed, transpare… [ekos/docs/rfcs/0043-secrets-and-pii-redaction.md]\npossible search match (partial term overlap): ekos/docs/rfcs/0043-secrets-and-pii-redaction.md: section 5 — right after `let mut package = observer.scan(&ctx).await?;`, before either the artifact-write\n  loop or the `KirObject`-property loop reads `package.artifacts`: `package.artifacts.retain(|a|\n  !is_excluded_path(&a.content.target, &redaction_config))`, then `for artifact in &mut\n … [ekos/docs/rfcs/0043-secrets-and-pii-redaction.md]\npossible search match (partial term overlap): ekos/docs/rfcs/0043-secrets-and-pii-redaction.md: section 2 — DeFi/cryptocurrency export data mapping, not secret detection); no existing secret-scanning code\n  exists anywhere to reuse. `dependency_analyzer.rs`'s pattern-table shape (`const PATTERNS: &[(&str,\n  &str)]`, case-insensitive substring match, RFC 0019) is the closest precedent a… [ekos/docs/rfcs/0043-secrets-and-pii-redaction.md]\npossible search match (partial term overlap): ekos_common::redaction::self\npossible search match (partial term overlap): ekos_common::redaction::RedactionConfig\npossible search match (partial term overlap): ekos/crates/common/src/redaction.rs — //! Global secrets/PII redaction (RFC 0043) — a baseline content filter EKOS applies at every\n//! point raw file content enters the pipeline (`ekos build`'s observation artifacts, `ekos\n//! recover`'s direct file reads), so no analyzer or future connector can forget to sanitize i… [ekos/crates/common/src/redaction.rs]\npossible search match (partial term overlap): Concentration risk: ekos_common::redaction::RedactionConfig\npossible search match (partial term overlap): build_redacts_a_fake_secret_from_the_observed_excerpt [ekos/crates/cli/tests/skeleton.rs:145]\npossible search match (partial term overlap): recover_redacts_a_fake_secret_from_a_cicd_workflow_step — `recover.rs`'s CI/CD workflow file collection (RFC 0042) reads `.github/workflows/*.yml` directly, bypassing `build.rs`'s artifact-store redaction pass entirely — this exercises that separate direct-read call site's own redaction wiring (RFC 0043). [ekos/crates/cli/tests/skeleton.rs:216]\npossible search match (partial term overlap): handle_function [ekos/crates/recovery/src/javascript_analyzer.rs:416]\npossible search match (partial term overlap): secrets\npossible search match (partial term overlap): ekos-common — Shared types and utilities for EKOS\npossible search match (partial term overlap): redact — Replaces every match of every built-in pattern, plus every valid `config.extra_patterns` regex, with `[REDACTED:<label>]`. An invalid regex in `extra_patterns` is skipped silently (config-driven, so a typo there must not be able to disable the built-in baseline by erroring out th… [ekos/crates/common/src/redaction.rs:226]\npossible search match (partial term overlap): content_signature — Content signature used for version-equality — excludes volatile fields (`created_at`) so re-appending logically-identical content (same name, kind, properties, evidence) is recognized as unchanged even though a fresh `KirObject::new`/`KirRelationship::new` call stamps a new `crea… [ekos/crates/ledger/src/lib.rs:36]\nekos-plugin-clickhouse — related to ekos-common — ClickHouse schema observer plugin — real HTTP client (RFC 0056)\nekos-plugin-file — related to ekos-common — File system observer plugin (Phase 3)\nekos — related to ekos-common — Enterprise Knowledge Operating System — CLI\nekos-observation-sdk — related to ekos-common — Observer trait and connector contract (Phase 3)\nekos-plugin-elixir — related to ekos-common — Elixir (.ex/.exs) observer plugin (RFC 0081)\nekos-plugin-sap — related to ekos-common — SAP OData observer plugin (Phase 14, scaffold — see RFC 0012)\nuuid — related to ekos-common\nserde_json — related to ekos-common\nekos-compiler-core — related to ekos-common — Compiler infrastructure: PassManager, Scheduler, Diagnostics, Config\nekos-plugin-snowflake — related to ekos-common — Snowflake schema observer plugin (Phase 14, scaffold — see RFC 0012)\nthiserror — related to ekos-common\nekos-plugin-confluence — related to ekos-common — Confluence page observer plugin (proof-of-concept — see RFC 0022)\nsha2 — related to ekos-common\nekos-plugin-github — related to ekos-common — GitHub issues/PRs observer plugin (proof-of-concept — see RFC 0020)\nekos-ledger — related to ekos-common — Append-only semantic knowledge ledger (skeleton — SQLite backend)\nekos-plugin-pentaho — related to ekos-common — Pentaho Kettle (.ktr/.kjb) observer plugin (RFC 0027 Phase 3)\nserde — related to ekos-common\nekos-plugin-oracle — related to ekos-common — Oracle schema observer plugin (Phase 14, scaffold — see RFC 0012)\nekos-plugin-python — related to ekos-common — Python (.py) observer plugin (RFC 0038/0040 Phase 2)\nConcentration risk: ekos-common — related to ekos-common [ekos/crates/semantic/Cargo.toml]\nekos-artifact — related to ekos-common — Content-addressable artifact types (Phase 2 — stub)\nekos-simulation — related to ekos-common — Deterministic multi-round simulation engine: agent decisions, actions, and world updates over the ledger (RFC 0050)\nregex — related to ekos-common\nekos-plugin-localdocs — related to ekos-common — Local document observer plugin — PDF/DOCX text, tables, and image OCR (RFC 0023)\nekos-plugin-rust — related to ekos-common — Rust (.rs) observer plugin (RFC 0041)\nekos-plugin-git — related to ekos-common — Git repository observer plugin (Phase 4)\nekos-runtime — related to ekos-common — Read-only state reconstruction from the ledger\nekos-recovery — related to ekos-common — Knowledge Recovery compiler passes: SqlAnalyzer, GitAnalyzer, LLM integration\nekos-plugin-crypto — related to ekos-common — DeFi Sentinel crypto entity/relationship/evidence observer plugin (see RFC 0017)\nekos-clickhouse-query — related to ekos-common — Live NL-to-SQL query engine over a compiled ClickHouse schema (RFC 0056, Stage 2)\nhex — related to ekos-common\nekos-semantic — related to ekos-common — Semantic compiler pass: KIR → Canonical Knowledge Model (Phase 8)\nzstd — related to ekos-common\nekos-plugin-salesforce — related to ekos-common — Salesforce sObject schema observer plugin (Phase 14, scaffold — see RFC 0012)\nekos-plugin-javascript — related to ekos-common — JavaScript/TypeScript (.js/.jsx/.ts/.tsx/.mjs/.cjs) observer plugin (RFC 0085)\nchrono — related to ekos-common\nekos-plugin-fabric — related to ekos-common — Microsoft Fabric workspace observer plugin (Phase 14, scaffold — see RFC 0012)\nglob — related to ekos-common\nekos-kir — related to ekos-common — Knowledge Intermediate Representation — the four canonical node types\n",
      "evidence_refs": [
        "d1d7e570-b1ed-45fa-a589-b87da175e662"
      ],
      "retrieved_ids": [
        "5c0543f1-af7f-5683-ac95-1e74de8b0e27",
        "169901e8-08e3-5456-8237-260e3109e2b8",
        "80b144fb-53ab-5831-8888-5dbea26705de",
        "b73d27b3-7741-5341-88c1-4035f1ce7dc1",
        "7a31c783-a557-562e-b133-d5bd2c1dc944",
        "1578886d-e145-5ef0-a989-4f0162bdf044",
        "61aedc2e-d2e9-50e6-a074-25dea5b79fd7",
        "56355ecb-dc9e-54c6-888e-054386b959d4",
        "995df50a-b222-5596-a3b1-29128eb9789e",
        "f3031758-f00b-5d25-a770-3a15d1eebb37",
        "b57bde1d-9a1e-538b-8cd1-2eaf7f5323f3",
        "75768e21-6208-5b55-933c-b98b65d52e4e",
        "5123d973-7a1c-54ed-ae21-4796d446ee1b",
        "3b326736-3b83-52ae-8cc6-1e925b8c1146",
        "100381d0-7f9f-5a7e-9cf3-436b098fa154",
        "ff079ea5-acaa-573a-bee0-c64674808f87",
        "d68e1726-557f-57f2-847a-f1c6561403c3",
        "dc169f0a-98f1-5c7c-8dd0-1dbc8504e9c9",
        "2641fb34-3ec0-544b-9e1d-fb93042b7ea4",
        "66c7da48-70e5-57fb-9882-5a5b05933963",
        "e1e4fef0-5cfb-5508-b8a0-f1d735957900",
        "78b3564f-8a44-55ae-bf35-c94ad61660b1",
        "a2dbec2a-9c4a-517a-9cc0-1107daa41b02",
        "fb4a63c1-3690-5bee-b424-6e26e9a46525",
        "0ac287c3-3b30-59c8-870a-4ba97857d319",
        "b5bb1598-06cb-5273-b6b4-ea02baf2112a",
        "be4b7353-317e-58f9-a870-099ca471e2d5",
        "60147563-32a2-5b89-8b28-56b22f0aaf33",
        "a904d91c-af3b-5cc4-926b-a39c8a31d1d5",
        "51d4d18f-087f-529d-948d-d08f466a736c",
        "47de4d6e-f31c-5894-b4c7-03e40a20cde4",
        "772eeb91-6bc0-5bb9-81b6-78042a449e90",
        "68328ad4-597d-5947-afb0-8d5a0804e3dd",
        "e5257693-aa25-5b6e-bb88-43dc290233a7",
        "262b1893-57a1-5961-a14f-e3bd5776f66c",
        "e1da57b7-834b-5ec6-aaa8-ccb775efd8bc",
        "d34fdca8-cb7f-5efa-bf77-acf0e6f3479b",
        "6ad205db-670c-586e-bdd7-0583f7792d09",
        "64e6073b-fc7d-5613-a431-e54bd2b800f5",
        "f7898044-dbad-50df-8c1b-62adde097c68",
        "baf41b7a-1ef7-5a05-9152-5eb0218f0896",
        "fea06eab-a982-55b6-b617-e108220998c7",
        "453bee65-6715-5e30-944b-8d6a56518b6a",
        "255b79ca-c6ab-50de-a026-0f44c09d7cf0",
        "d0b6a5e2-2547-5253-9e28-0dcdaa640fa8",
        "32e4cd4a-ec64-5382-a2b5-31bbc313cc22",
        "bf76d5c8-1ef1-58d4-860e-f365e0f1abf6",
        "84e5964b-026e-5d24-b948-970e16f067b1",
        "393c9f64-6946-5953-88bc-c0073df31981",
        "b3685a9b-7d9a-5e55-a57a-d19c24185442"
      ],
      "planned_query_type": "lexical"
    },
    {
      "id": "code-010",
      "passed": true,
      "hallucinated": false,
      "answer_score": null,
      "evidence_score": null,
      "completeness_score": null,
      "retrieval_recall": 1.0,
      "groundedness_score": null,
      "trajectory_score": null,
      "input_tokens": null,
      "output_tokens": null,
      "cache_hit": null,
      "rss_kb_end": 144956,
      "cpu_time_ms": 0.0,
      "latency_ms": 2.393594,
      "error": null,
      "attribution": "n/a",
      "retrieved_ids": [
        "903e2986-10af-5ac2-b2b0-7ba0dcc207cd",
        "f908320d-aaa8-525a-9521-e6581d42da30",
        "cdac712f-456b-54d4-ac54-9449d1844e84",
        "c4aeec10-37cc-5235-86d7-a9ab8619ef47",
        "db54d50f-21bd-58a1-8e71-95ae2d226814",
        "e53e7403-ba57-5785-bd1a-66a4cf92d7fe",
        "75af41e2-7258-5d31-a3e8-dfd72449d820",
        "ee68c875-431a-504b-aa03-2598fdfeb0d9",
        "ecf79282-dc50-5f7f-acc6-77a71e992661",
        "e72ed0df-875f-5fc3-b0ff-eb2ae02f0416",
        "b62c3fdb-44ac-5904-bd76-dcaacd469076",
        "211ef1a8-9be1-5a87-b45a-04361a70a307",
        "50479ac5-29a2-5ce7-80da-5509e05864a8",
        "3d4d43bd-dc53-5bdd-a3eb-1ac063c52c7f",
        "164fc316-1c09-5753-b360-994a1dcee12d",
        "becee830-f63f-56b8-85c6-d3b76f06be0f",
        "b13c5ef1-a816-5496-b2b3-756bf482e3c8",
        "edda48c1-32ee-5f34-bbf8-dc7602e8e576",
        "1efd9423-6467-52d2-8099-2852e352636d",
        "61526d5e-47fe-5c7d-b3ee-62734553e9aa",
        "79cc04b2-893d-530a-ba68-830754b4444f",
        "95c231ef-feb6-5576-a118-35c2691eec3b",
        "a129f832-cf45-5644-80ba-d68a095fe49e",
        "734b00b0-641d-54fd-a6dc-dbe5c8fc0989",
        "17c79304-37f9-544e-81f5-5de8f132b828",
        "ccef8ff0-ced2-514a-8b76-61fd8c7af8f4",
        "f662f818-7a5a-5b40-b8dd-7633ba4c0205",
        "51774db4-ca4b-59cb-a6d2-0c283082c568",
        "29723caf-2f77-5c7b-83da-a8806308e15d",
        "2a07d0ec-bc56-57d6-a5d6-cb71fef61761",
        "67d7473a-ac10-5903-8ecf-6037164d72d3",
        "18f5965f-a38a-55a1-a11b-41c4bf1231e6",
        "9475895e-c99f-5a1b-b785-feede906f33f",
        "f46947a3-744f-5aaf-80f4-0306c46a65e1",
        "bcd4b1bf-2306-5408-b5fc-03912522c5ac",
        "a91cde94-ce6c-54e7-b66f-505644a2d3f0",
        "708b4880-d82d-5467-a566-5fbb031c323e",
        "d8af0c4d-feb7-5f76-88d7-e0ed69f4ac73",
        "8abce172-5838-5a3e-86bc-652b0b017f2f",
        "9d80e56b-c587-5223-b26a-634d05c8fd56",
        "d3d77143-29b0-546c-94c8-dc858dbe0dec",
        "79f89fe5-b5b9-5865-93d4-8ee611337921",
        "41a36ffc-f23f-5e20-9175-c4c46c04a0b2",
        "526133db-a2e9-5255-a346-09f44519c2f8",
        "ae2dcbe5-364c-5b39-b003-32e0f78bfa04",
        "2029a54d-4318-55b6-ab27-f13823485cc5",
        "fd949798-d2d0-59d4-9cee-aaf12f5228ca",
        "59ec06f9-6fff-5923-ad4f-27ca66043190",
        "641823d5-0a7c-5137-bdcc-aa85f6e69158",
        "bdc13bb1-4283-581b-9e9a-39dbdb04b448"
      ]
    },
    {
      "id": "code-011",
      "passed": true,
      "hallucinated": false,
      "answer_score": 1.0,
      "evidence_score": 1.0,
      "completeness_score": 1.0,
      "retrieval_recall": null,
      "groundedness_score": 1.0,
      "trajectory_score": null,
      "input_tokens": 2253,
      "output_tokens": 73,
      "cache_hit": false,
      "rss_kb_end": 145564,
      "cpu_time_ms": 850.0,
      "latency_ms": 38501.045494000005,
      "error": null,
      "attribution": "passed",
      "diagnostics": [
        "RSN007: skipped supporting neighbourhood of ekos — 47 neighbours exceeds the 40-item budget for background context; a hub entity's neighbourhood describes the corpus, not this question"
      ],
      "answer": "The `ekos_runtime::AiRuntime` struct wraps to answer natural-language questions.",
      "evidence_text": "possible search match (partial term overlap): answer_question — Mirrors `crates/cli/src/commands/ask.rs::run` exactly — same config resolution, same provider selection, same evidence-mapping pattern (`ask.rs:29`) — just returning JSON instead of printing to stdout. [ekos/crates/demo-server/src/ask.rs:32]\npossible search match (partial term overlap): ekos_runtime::AiRuntime\npossible search match (partial term overlap): AiRuntime::search_for_question — Turns a natural-language `question` into a search that `Runtime::find_objects` (backed by SQLite FTS5) can actually match (RFC 0061), instead of passing the raw sentence straight through as `gather_context` used to.  `Ledger::find_objects` (`crates/ledger/src/lib.rs`) treats *any… [ekos/crates/runtime/src/ai.rs:567]\npossible search match (partial term overlap): ekos_runtime::reason::plan_question\npossible search match (partial term overlap): Concentration risk: ekos_runtime::AiRuntime\npossible search match (partial term overlap): ekos/docs/rfcs/0061-ai-runtime-question-keyword-extraction.md — # RFC 0061 — AI Runtime: Extract Search Keywords From Natural-Language Questions\n\n**Status:** Accepted\n**Author:** EKOS team\n**Created:** 2026-08-20\n\n---\n\n## Motivation\n\nDevlog 60's `ekos ask` Q&A set against the compiled `analytics/` ledger found `ask` consistently\nretrieving ze… [ekos/docs/rfcs/0061-ai-runtime-question-keyword-extraction.md]\npossible search match (partial term overlap): ekos/docs/rfcs/0061-ai-runtime-question-keyword-extraction.md — # RFC 0061 — AI Runtime: Extract Search Keywords From Natural-Language Questions\n\n**Status:** Accepted\n**Author:** EKOS team\n**Created:** 2026-08-20\n\n---\n\n## Motivation\n\nDevlog 60's `ekos ask` Q&A set against the compiled `analytics/` ledger found `ask` consistently\nretrieving ze… [ekos/docs/rfcs/0061-ai-runtime-question-keyword-extraction.md]\npossible search match (partial term overlap): ekos/docs/rfcs/0061-ai-runtime-question-keyword-extraction.md: section 5 — - [x] Live: rebuilt `target/release/ekos`, confirmed the exact previously-failing real question\n      now retrieves and correctly answers from real evidence.\n\n## Files Changed\n\n| File | Change |\n|---|---|\n| `ekos/docs/rfcs/0061-ai-runtime-question-keyword-extraction.md` | This RF… [ekos/docs/rfcs/0061-ai-runtime-question-keyword-extraction.md]\npossible search match (partial term overlap): ekos/docs/rfcs/0061-ai-runtime-question-keyword-extraction.md: section 3 — even after this fix, that specific question still correctly retrieves nothing — a correct\n  \"I don't know\" is the right behavior for a question this system's retrieval genuinely cannot\n  answer, not a regression.\n- **Not adding stemming, synonym expansion, or fuzzy matching** to … [ekos/docs/rfcs/0061-ai-runtime-question-keyword-extraction.md]\npossible search match (partial term overlap): ekos/docs/rfcs/0061-ai-runtime-question-keyword-extraction.md: section 1 — # RFC 0061 — AI Runtime: Extract Search Keywords From Natural-Language Questions\n\n**Status:** Accepted\n**Author:** EKOS team\n**Created:** 2026-08-20\n\n---\n\n## Motivation\n\nDevlog 60's `ekos ask` Q&A set against the compiled `analytics/` ledger found `ask` consistently\nretrieving ze… [ekos/docs/rfcs/0061-ai-runtime-question-keyword-extraction.md]\npossible search match (partial term overlap): wrap_layer_into_rows — Splits one topological layer's node indices into one or more visual rows of at most [`MAX_NODES_PER_ROW`], preserving [`layer_nodes`]'s existing deterministic order (chunking, never re-sorting). Each returned row is paired with whether it's the layer's *first* row — [`render_grap… [ekos/crates/docs-gen/src/lib.rs:1671]\npossible search match (partial term overlap): ekos/docs/rfcs/0061-ai-runtime-question-keyword-extraction.md: section 2 — a phrase-escaping defect) and is explicitly **not** addressed by this RFC — see Non-goals.\n\n## Scope\n\nAdd `AiRuntime::search_for_question` (`crates/runtime/src/ai.rs`), called from `gather_context` in\nplace of the direct `self.runtime.find_objects(question)` call:\n\n1. `extract_se… [ekos/docs/rfcs/0061-ai-runtime-question-keyword-extraction.md]\npossible search match (partial term overlap): ekos/docs/rfcs/0061-ai-runtime-question-keyword-extraction.md: section 4 — - **Rewriting the question into a search string via the LLM itself** (a query-rewriting prompt\n  before the grounding prompt) — rejected as unnecessary complexity and an extra LLM round-trip\n  for a problem a deterministic tokenizer/stopword-filter already solves for every real c… [ekos/docs/rfcs/0061-ai-runtime-question-keyword-extraction.md]\npossible search match (partial term overlap): ekos_runtime::Runtime\npossible search match (partial term overlap): AiRuntime — Answers natural-language questions grounded in the Knowledge Ledger.  Pipeline: retrieve candidate objects via `Runtime::find_objects`, expand each into its neighbourhood via `Runtime::load_neighborhood`, ground the prompt with `Runtime::reconstruct_state` (object + relationships… [ekos/crates/runtime/src/ai.rs:197]\npossible search match (partial term overlap): plan_question — Understand + plan `question` against the ledger `runtime` wraps. [ekos/crates/runtime/src/reason.rs:724]\npossible search match (partial term overlap): ekos-runtime — Read-only state reconstruction from the ledger\npossible search match (partial term overlap): ai::AiRuntime\npossible search match (partial term overlap): AiRuntime::new [ekos/crates/runtime/src/ai.rs:214]\npossible search match (partial term overlap): AiRuntime::plan — Compile `question` into a [`QueryPlan`] (understand → rules planner). Offline, no LLM. [ekos/crates/runtime/src/ai.rs:291]\n",
      "evidence_refs": [
        "105adef1-646c-4454-92f0-154f9d233a65",
        "3bd0ee96-06b9-4418-b28e-c6afa2ea37f6"
      ],
      "retrieved_ids": [
        "3998780f-75ba-513f-8429-dbf224d9cc02",
        "ef2f4031-23a0-5aa7-a49c-5b967ce9d440",
        "735dd268-4d4b-5926-8552-7e9a6c5ffe30",
        "de24ee58-0850-573c-b648-198a743e03f6",
        "0b9bcc5a-9668-52d6-b02e-8b7678cf9592",
        "276db848-e065-50cd-9954-915ca8cd3e3f",
        "8af4ee85-e7c9-5344-bd30-c0427dbb89af",
        "ec55a856-48be-51ae-b29e-65af6ed27c2b",
        "dc756314-ccf8-5dc2-a50f-e52281f8fd3e",
        "5da76389-6d24-5730-9453-7e017263b75b",
        "f7a63ec0-678e-5f61-b0cc-7df78c7c4ef3",
        "ee2882bd-2258-5fd3-a9cc-2b229cbdfea0",
        "e3a3dcfc-8074-5eab-846f-f65ce29252b9",
        "91d0a104-38fd-5f95-be7f-51ec6f752da8",
        "841a157c-3c31-5e06-a289-714a8a13eb83",
        "07f4f731-1686-566d-bff3-56d9d1e63691",
        "f4cd2d3b-f0b0-5234-ab2b-39de3275d717",
        "91e12abf-e267-580c-9611-57805bf65064",
        "fdba7532-9486-5920-bc90-a196434ef62c",
        "b3a45d7c-dd18-536e-8ccd-8be5cef9f816",
        "d454db52-b977-5cf8-8af9-6f5559a47666",
        "b69f314e-99a1-50ca-96af-468798a60a23",
        "6d8ae86c-60a4-5040-a095-83ec91380f68",
        "8ae2bdb0-7767-50f6-8ce1-68f98d48a3e9",
        "75afde64-bc52-5624-a851-ac615ba1c7be",
        "d25e03f7-bc1d-5016-885f-68c89ced9222",
        "f811b927-4102-5b15-b58c-56c78578a93e",
        "5903c128-b262-5141-8155-5227155b040f",
        "11db3a5e-b888-57b6-be29-2144a2de513e",
        "93444f0e-282a-5baa-ace2-2ff766585bfe",
        "b4afefae-6322-5ed9-828d-71bc00cdf054",
        "fc7c69b2-f30c-5461-ad05-0be370c4f7d6",
        "e0e5f206-042c-5a81-8e86-1b9fbc4ab976",
        "16a4740e-e365-54bd-8525-c5506a4e4cc5",
        "8535c5c1-17d1-5e63-94e5-76c188cc6f3d",
        "4bc39aee-7900-55fb-bd1c-d99d4302f53e",
        "2fc35be8-a574-50c1-bed3-d156c84a42bc",
        "f89e25e7-27ab-5f66-b8fe-9c08e7426a06",
        "ba21c6f1-e765-567d-826d-64466dda22c2",
        "c48c6c64-d824-585d-8924-3dca9c9ba40e",
        "ec21afec-501d-5280-9a99-4aadf13c1272",
        "77256510-98b7-59c6-8453-fc0e8439c3b9",
        "e85e734d-ef58-5185-835a-34896d2da3f1",
        "377b73ff-b9e6-5f39-a3a1-b4d46b7a4515",
        "e7851889-11dd-5b29-83ec-ad9d03543067",
        "76b24c26-b7ee-521c-90cd-fa60f8e7b023",
        "be78be34-320d-5bf0-9746-a07621a0ebae",
        "d6ef4b16-22b8-5c37-adf2-fb61c7c3d7e5",
        "5ad6004b-62b5-54d5-90da-e9a0672eeeff",
        "5dc383c5-274f-5b88-a0c6-f808d00be8ca"
      ],
      "planned_query_type": "lexical"
    },
    {
      "id": "code-012",
      "passed": true,
      "hallucinated": false,
      "answer_score": 1.0,
      "evidence_score": 1.0,
      "completeness_score": 1.0,
      "retrieval_recall": null,
      "groundedness_score": 1.0,
      "trajectory_score": null,
      "input_tokens": 2129,
      "output_tokens": 98,
      "cache_hit": false,
      "rss_kb_end": 129224,
      "cpu_time_ms": 2710.0,
      "latency_ms": 42429.408273,
      "error": null,
      "attribution": "passed",
      "answer": "The crate that implements the dbt-model code generator that renders the Transformation IR into executable SQL is `ekos-dbt-gen`. This is supported by claim 10, which describes the package as \"RFC 0036 — Pentaho to dbt Model Export: renders compiled Transformation IR nodes as dbt SQL models + schema.yml\".",
      "evidence_text": "possible search match (partial term overlap): render_dbt_model — Render one dbt `.sql` model for `object` (must be a `Custom(\"TransformNode\")` object — callers filter with [`is_transform_node`] first).  `upstream_models` are this node's upstream model names, already resolved via [`upstream_model_names`] — passed in rather than recomputed here … [ekos/crates/dbt-gen/src/lib.rs:164]\npossible search match (partial term overlap): ekos/crates/semantic/src/transform_ir.rs — //! Unified Transformation IR (RFC 0027, Phase 1).\n//!\n//! The shared target representation every format-specific parser (SQL, Pentaho,\n//! stored-procedure embedded SQL — Phases 2/3, not this module) compiles into,\n//! so transformation logic recovered from one source format can… [ekos/crates/semantic/src/transform_ir.rs]\nsearch match: docs/presentations/dbt-transformation.html — EKOS — Enterprise Knowledge Operating System\n\n# Pentaho already compiled.\n# Now compile it into dbt.\n\nEKOS recovers Pentaho ETL logic into the Transformation IR (RFC 0027) — the same compiled graph `ekos docs generate` already renders as documentation. `ekos dbt generate` renders… [docs/presentations/dbt-transformation.html]\npossible search match (partial term overlap): docs/presentations/dbt-transformation.html — <!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>Pentaho → dbt — EKOS</title>\n<meta name=\"description\" content=\"ekos dbt generate: compiles already-recovered Pentaho ETL logic into real dbt … [docs/presentations/dbt-transformation.html]\npossible search match (partial term overlap): crate::reason::execute\npossible search match (partial term overlap): dbt_model_name — dbt-safe snake_case slug used as both a node's model name (for `ref()`) and its `.sql` file name stem — e.g. `fact_sales.ktr:10` -> `fact_sales_ktr_10`. Every `TransformNode` object's name is already unique (`{source_path}:{node_index}`, see `transform_ir.rs::lower_to_kir`), so n… [ekos/crates/dbt-gen/src/lib.rs:50]\npossible search match (partial term overlap): ekos/crates/recovery/src/sql_transform_analyzer.rs — //! `SqlTransformAnalyzerPass` — converts SQL `SELECT`/`VIEW`/stored-procedure\n//! observation into the Transformation IR (RFC 0027 Phase 1), then lowers\n//! that IR into KIR via `ekos_semantic::transform_ir::lower_to_kir`.\n//!\n//! Distinct from `sql_analyzer.rs`'s `SqlAnalyzerPa… [ekos/crates/recovery/src/sql_transform_analyzer.rs]\nsearch match: docs/presentations/dbt-transformation.html: section 1 — EKOS — Enterprise Knowledge Operating System\n\n# Pentaho already compiled.\n# Now compile it into dbt.\n\nEKOS recovers Pentaho ETL logic into the Transformation IR (RFC 0027) — the same compiled graph `ekos docs generate` already renders as documentation. `ekos dbt generate` renders… [docs/presentations/dbt-transformation.html]\npossible search match (partial term overlap): sql_transform_analyzer::parse_sql_to_transform_graphs\nsearch match: ekos/crates/dbt-gen/Cargo.toml — [package]\nname = \"ekos-dbt-gen\"\ndescription = \"RFC 0036 — Pentaho to dbt Model Export: renders compiled Transformation IR nodes as dbt SQL models + schema.yml\"\nversion.workspace = true\nedition.workspace = true\n\n[dependencies]\nekos-kir.workspace = true\nserde_json.workspace = true\n… [ekos/crates/dbt-gen/Cargo.toml]\npossible search match (partial term overlap): ekos_semantic::transform_ir::TransformGraph\npossible search match (partial term overlap): ekos_semantic::transform_ir::JoinKind\npossible search match (partial term overlap): ekos_semantic::transform_ir::TransformNode\npossible search match (partial term overlap): ekos_semantic::transform_ir::NodeId\npossible search match (partial term overlap): ekos_semantic::transform_ir::AggExpr\npossible search match (partial term overlap): ekos_semantic::transform_ir::TransformOrigin\nsearch match: ekos/crates/cli/src/commands/dbt.rs — //! `ekos dbt generate` — Pentaho -> dbt model export (RFC 0036).\n//!\n//! Reads every already-committed `Custom(\"TransformNode\")` object from the ledger (RFC 0027's\n//! Transformation IR), resolves each node's upstream model via real `FeedsInto` relationships,\n//! and renders one… [ekos/crates/cli/src/commands/dbt.rs]\npossible search match (partial term overlap): docs/presentations/dbt-transformation.html: section 4 — Source repojoseph-higaki/etl_adventureworks_sales_purchases_datamart — a real public GitHub repo\nModels rendered98, from 10 real .ktr/.kjb jobs\nSource tables23, real object names from compiled Source nodes\nReal Pentaho joins with populated keys2 of 2, after the fix — 0 of 2 befor… [docs/presentations/dbt-transformation.html]\npossible search match (partial term overlap): sql_transform_analyzer::SqlTransformStats\npossible search match (partial term overlap): sql_transform_analyzer::SqlTransformAnalyzerPass\nweb/ui/dist/assets/GraphCanvas-CKFsYUYF.js — related to ir — import{r as X,R as Ri,j as ft}from\"./index-B_mfgpUO.js\";import{b as It,d as En,e as zn,f as Ii,o as Ni,m as Rn,a as In,P as m}from\"./index-DOJX39Qm.js\";import{c as Sr,i as Di}from\"./Graph-Xv89Uopb.js\";function ji(e,n){let r=0;for(let i of e)(i=+i)&&(r+=i);return r}var Nn=180/Math… [web/ui/dist/assets/GraphCanvas-CKFsYUYF.js]\n",
      "evidence_refs": [
        "67f0b6e1-cdea-58a2-a56d-dade42ac6215"
      ],
      "retrieved_ids": [
        "95ef6862-37ab-54fa-99de-4e67f2dffd69",
        "b4fdd24c-8184-5879-9136-f0a70208955e",
        "0927eb82-d0f5-56e4-aa69-63ee87df395f",
        "57a2bf2a-457c-54b9-965c-ea065814e8a8",
        "40fa4f91-42a6-59ae-9f97-dea292fb9552",
        "4e0e3bc6-d261-5d55-a9da-1bd8f3173cf8",
        "987e3fbb-31ec-576d-b794-7e801336e8c8",
        "5eaf5639-fca7-51aa-867c-b6e3f8eed8ad",
        "d40b8a1c-8672-5923-ad4d-38ad94bf97a8",
        "d48422bb-e581-5c0a-88cd-5ca3928ea5bb",
        "81edbd88-d1cd-5af1-82f2-e462abefee09",
        "1ed6cb9d-c0bc-5bb3-819e-912ea8f02ba0",
        "98bba68f-c1e2-5243-bf98-becc8f8e4b55",
        "19efad75-5713-5594-86e6-0a06ad91f6f3",
        "41be2391-d59b-5a79-9a6e-e835e0875988",
        "a3e58c83-6547-5734-aab4-a9ce51b8289d",
        "d3579ceb-9751-53ad-b6be-693f17509a70",
        "c5a63e45-8ed9-5d76-bd73-bd75d04d6684",
        "d7ee4a21-d05c-5730-860c-011c081943ec",
        "53467467-74d3-5397-83e6-bccea32c7b45",
        "db34b005-6e13-5f8e-987f-8b891e47e2da",
        "20d45ed0-c411-592d-8034-6486682f898c",
        "d5860b97-418b-5b8d-b5cd-e3ab528fd493",
        "3c69514b-d08d-5107-a7a7-1d51413864bb",
        "25ae5e9b-4573-519c-b65d-c74c090b2dfc",
        "fbbf8304-b139-51e0-bbeb-a3ae80044130",
        "649f6de4-d823-567c-9b23-bee300784f37",
        "36b017d8-fa37-5fdf-849e-1687be47b3ac",
        "218e1dbe-d927-5728-a4f4-ab89b9f9e650",
        "ef200c89-e32d-5c2f-896d-374f7d58f681",
        "79244210-aed1-5372-84e2-7f444529bf41",
        "d847d75b-26bd-5716-8495-9306a8ade91a",
        "6a174c0c-dd2e-54cc-b53b-0490c9a99a14",
        "8270ffd7-e77a-518d-a315-d7272d11a592",
        "f4c788da-b34a-5739-bbe4-371cf3b2374c",
        "76300796-46e3-59c9-9584-63916053fb99",
        "83d52422-435d-5452-b95b-d9e329969e1e",
        "cc9ed88a-29b4-56c1-8897-465fa4eea83c",
        "9d98b13a-b69d-5278-996a-6d7080a965e7",
        "da99cc68-8ee0-53ba-9f83-d44663744e8f",
        "4724797f-ed41-5fdd-aea1-235c3d013640",
        "feb95d3d-5916-525d-86e3-ad4cee4ff906",
        "9b66a043-a009-58d6-b446-20001b04c706",
        "104b06ad-cae8-5bf9-b9b7-e553655979ca",
        "fdf08ffe-7240-5ca8-8c11-a5c1ff260cb4",
        "34286b4b-6060-5181-bb33-54656e937bd1",
        "4e81d108-40e7-5e6a-ad9b-9abff45c5610",
        "993fbda8-e4f2-5737-af37-78633c80d5b9",
        "5a7c3797-2cda-58d5-b801-53f036e5fb20",
        "783b41b0-7d36-5a7a-baa9-7d8fd96fd469"
      ],
      "planned_query_type": "lexical"
    },
    {
      "id": "code-013",
      "passed": false,
      "hallucinated": false,
      "answer_score": 1.0,
      "evidence_score": null,
      "completeness_score": 1.0,
      "retrieval_recall": 0.0,
      "groundedness_score": 0.0,
      "trajectory_score": null,
      "input_tokens": 2462,
      "output_tokens": 48,
      "cache_hit": false,
      "rss_kb_end": 54776,
      "cpu_time_ms": 2160.0,
      "latency_ms": 39277.386077999996,
      "error": null,
      "attribution": "passed",
      "diagnostics": [
        "RSN007: skipped supporting neighbourhood of ekos — 47 neighbours exceeds the 40-item budget for background context; a hub entity's neighbourhood describes the corpus, not this question",
        "AI001: LLM response did not include a valid cited_evidence block"
      ],
      "answer": "The EKOS CLI compiles to the binary crate name \"ekos\".\n\n{\"cited_evidence\": [\"a6a3ffc6-6b31-5abb-b830-565138bc5bf9\", ...]}",
      "evidence_text": "possible search match (partial term overlap): ekos/crates/cli/src/commands/compile.rs — use anyhow::Result;\nuse ekos_artifact::{ArtifactStore, PackArtifactStore};\nuse ekos_compiler_core::{EkosConfig, pass::PassContext, scheduler::FailureMode};\nuse ekos_kir::ObjectKind;\nuse ekos_semantic::{CkModel, SemanticCompilerPass};\nuse std::{collections::HashSet, path::Path, sy… [ekos/crates/cli/src/commands/compile.rs]\npossible search match (partial term overlap): ekos/crates/cli\npossible search match (partial term overlap): crate::reason::execute\npossible search match (partial term overlap): ekos/crates/cli/Cargo.toml — [package]\nname = \"ekos\"\ndescription = \"Enterprise Knowledge Operating System — CLI\"\nversion.workspace = true\nedition.workspace = true\n\n[lib]\nname = \"ekos\"\npath = \"src/lib.rs\"\n\n[[bin]]\nname = \"ekos\"\npath = \"src/bin/ekos.rs\"\n\n[features]\ndefault = []\n# RFC 0113 B4 — lets `ekos query… [ekos/crates/cli/Cargo.toml]\npossible search match (partial term overlap): ekos/crates/cli/src/bin/ekos.rs — use anyhow::{Context, Result};\nuse chrono::{DateTime, Utc};\nuse clap::{Parser, Subcommand};\nuse std::path::PathBuf;\n\n#[derive(Parser)]\n#[command(\n    name = \"ekos\",\n    about = \"Enterprise Knowledge Operating System\",\n    version,\n    propagate_version = true\n)]\nstruct Cli {\n    … [ekos/crates/cli/src/bin/ekos.rs]\npossible search match (partial term overlap): init_creates_ekos_directory [ekos/crates/cli/tests/skeleton.rs:33]\npossible search match (partial term overlap): ekos/crates/compiler-core/src/compiler.rs — use std::{path::PathBuf, sync::Arc};\nuse thiserror::Error;\n\nuse crate::{\n    config::EkosConfig,\n    pass::{CompilerPass, PassContext, SchedulerError},\n    scheduler::{ExecutionReport, FailureMode, Scheduler},\n};\n\n#[derive(Debug, Error)]\npub enum CompilerError {\n    #[error(\"depe… [ekos/crates/compiler-core/src/compiler.rs]\npossible search match (partial term overlap): ekos/crates/recovery/src/package_json_analyzer.rs — //! `PackageJsonAnalyzerPass` — real npm/yarn/pnpm dependency extraction from `package.json`\n//! (RFC 0082, Phase 2 of the source-decomposition plan).\n//!\n//! Frontend `Technology`/`DependsOn` data previously came only from `dependency_analyzer.rs`'s\n//! narrow substring-pattern … [ekos/crates/recovery/src/package_json_analyzer.rs]\npossible search match (partial term overlap): ekos/crates/compiler-sdk\npossible search match (partial term overlap): ekos/crates/compiler-core\npossible search match (partial term overlap): ekos/crates/cli/tests/skeleton.rs — //! End-to-end skeleton test: init → build → query\n//!\n//! This test stays green through Phases 2–10 as each skeleton stub is replaced\n//! by its real implementation. It is the canary proving the pipeline never\n//! breaks while individual layers are widened.\n\nuse std::path::Path;… [ekos/crates/cli/tests/skeleton.rs]\npossible search match (partial term overlap): ekos/crates/compiler-sdk/Cargo.toml — [package]\nname = \"ekos-compiler-sdk\"\ndescription = \"Public SDK for extending the compiler (Phase 1 — stub)\"\nversion.workspace = true\nedition.workspace = true\n\n[dependencies]\nekos-compiler-core.workspace = true [ekos/crates/compiler-sdk/Cargo.toml]\npossible search match (partial term overlap): ekos/crates/cli/src/commands/branch.rs — use anyhow::Result;\nuse ekos_compiler_core::EkosConfig;\nuse ekos_ledger::{FactLedger, KnowledgeStore, merge_stores};\nuse std::path::{Path, PathBuf};\n\nuse super::store::{open_store, uses_fact_engine};\n\n/// Branch location for the active backend: a `.db` file for SQLite, a\n/// dire… [ekos/crates/cli/src/commands/branch.rs]\npossible search match (partial term overlap): ekos/crates/cli/src/lib.rs — pub mod commands; [ekos/crates/cli/src/lib.rs]\npossible search match (partial term overlap): ekos/crates/cli/src/commands/ask.rs — use super::recover::build_llm_provider;\nuse super::store::open_store_read_only;\nuse anyhow::Result;\nuse ekos_artifact::PackArtifactStore;\nuse ekos_compiler_core::EkosConfig;\nuse ekos_runtime::ai::ConversationTurn;\nuse ekos_runtime::reason::{render_evidence, render_plan};\nuse ekos… [ekos/crates/cli/src/commands/ask.rs]\npossible search match (partial term overlap): ekos/crates/cli/src/commands/clickhouse.rs — //! `ekos clickhouse ask` — live NL-to-SQL query engine over a compiled ClickHouse schema\n//! (RFC 0056, Stage 2). Always available from the CLI regardless of the\n//! `[clickhouse].enable-mcp-query` config flag — that flag only gates the MCP tool\n//! (`commands/mcp.rs`), which is… [ekos/crates/cli/src/commands/clickhouse.rs]\npossible search match (partial term overlap): ekos/crates/cli/tests/mcp_session.rs — //! Agent-session integration test: how Claude Code actually uses EKOS.\n//!\n//! Drives the full pipeline (init → build → recover → compile → commit) over a\n//! small fixture project, then scripts the MCP session a coding agent would\n//! run — each tool call consuming the previous… [ekos/crates/cli/tests/mcp_session.rs]\npossible search match (partial term overlap): ekos/crates/cli/src/commands/dbt.rs — //! `ekos dbt generate` — Pentaho -> dbt model export (RFC 0036).\n//!\n//! Reads every already-committed `Custom(\"TransformNode\")` object from the ledger (RFC 0027's\n//! Transformation IR), resolves each node's upstream model via real `FeedsInto` relationships,\n//! and renders one… [ekos/crates/cli/src/commands/dbt.rs]\npossible search match (partial term overlap): ekos/crates/compiler-core/Cargo.toml — [package]\nname = \"ekos-compiler-core\"\ndescription = \"Compiler infrastructure: PassManager, Scheduler, Diagnostics, Config\"\nversion.workspace = true\nedition.workspace = true\n\n[dependencies]\nekos-common.workspace = true\nekos-kir.workspace = true\nekos-artifact.workspace = true\nasync… [ekos/crates/compiler-core/Cargo.toml]\npossible search match (partial term overlap): ekos/crates/cli/src/commands/replay.rs — //! `ekos replay <scenario.yaml> [--round N]` (RFC 0054) — reads a\n//! *previously recorded* simulation back out of its ledger. Deliberately\n//! does not call `load_scenario_from_path` (which always writes, as a\n//! loader): replay only reads, so names are resolved straight from … [ekos/crates/cli/src/commands/replay.rs]\n",
      "retrieved_ids": [
        "187a8810-a032-5178-ac4c-33a24e5cc42a",
        "3196ae01-7e03-5e6d-aa49-cf1ae40e2fc2",
        "40fa4f91-42a6-59ae-9f97-dea292fb9552",
        "c0ff2e6c-7e2f-5107-a5be-197e2c66ecef",
        "67ea4c4e-5e03-5c3a-8066-adf7aaed8a3e",
        "83a765f7-1004-5a65-9fda-0e393a6a043b",
        "3b7209fe-32c4-588e-b8b5-5fa2165ff88b",
        "b4b90f8d-effb-5ac5-8eba-8a04c51eba5e",
        "c2ec0ccd-11b2-5455-9cff-141a0b96d4eb",
        "b4f46ecb-f2d8-59ce-9228-c49bd86d625c",
        "c39b7026-a223-5e82-b5c8-7ed254f6ba84",
        "20a4d155-8fd5-5fd9-94a0-6540ae324611",
        "8ae8543c-ebb4-545a-b5fe-5735e3953e88",
        "d6df1b3e-10e4-5907-a989-e6b6a1cebdab",
        "e7e75efa-39cb-5182-b056-2fd16dfdc739",
        "393eb379-588a-5dbe-b333-a4066c2926d3",
        "201efc61-073b-5bcd-a5a8-a6c476333729",
        "d3579ceb-9751-53ad-b6be-693f17509a70",
        "5524ffc2-48ff-56c1-90dc-d297f0b2cf15",
        "710d0ec4-729f-52c6-b428-0805fec775b6",
        "162a5e91-5e60-5951-9a1c-14c60cd6109b",
        "09ce8f9a-f135-5bd0-be4d-ce2d81b75833",
        "9ee26bdb-fd3f-5d06-a63d-5cf43a13ad2b",
        "4ed5ca6d-a35f-5cde-a080-af09a742cfb9",
        "306def2e-bd5a-5784-9453-692c119e8d43",
        "5474158b-24e3-532c-ba1d-70a2347d1160",
        "4387dc6a-4eb2-525c-9777-fa249d63ddaf",
        "76b10d14-834f-5bcb-8858-f46092b1989c",
        "bc65014d-7e0a-5fdc-8a2b-fde4edce2935",
        "6b6902bf-7bb5-59f8-a210-ce0acd18d7ec",
        "7e02bcf9-a7b4-5099-8255-130d9ef401bb",
        "06db81a6-f2c1-538b-bfce-452cf905f733",
        "f6e3418b-d664-536b-8a69-b723a534ff1a",
        "bf90b1ff-2e7e-599e-8d6e-12b2e6522003",
        "117003db-05ca-5009-9ea3-90c845aff5f4",
        "00bf5c8a-7198-5df3-a6eb-5bf22bc8ddcb",
        "3c69514b-d08d-5107-a7a7-1d51413864bb",
        "e4550c2d-5dcf-5779-b25d-ac86e4019342",
        "5e4a4ad6-2688-5ad6-ae39-a1fbd5ec1bb3",
        "0ccb7d47-8c4d-5547-bbd5-24f7701fb4e7",
        "f48ae11b-a9a7-54f0-8cc6-a192b1641436",
        "5503d15b-112f-541f-8189-8be05a060beb",
        "ff76bb73-9285-5295-927c-5cb33a5bbc25",
        "6c5b5ba9-c786-51c5-bfeb-5949010affa8",
        "6f5dc4e7-3ce8-5dd3-ad8f-f66bbb5fabf5",
        "ce2ed217-2b42-5760-9d2e-e2ca1574a517",
        "5189d0a2-3e2b-529e-adbf-3984a77be404",
        "b724f052-e380-5932-b547-86637c463b0e",
        "5ad6004b-62b5-54d5-90da-e9a0672eeeff",
        "7bea4b92-902b-5072-8b4f-740613d85745"
      ],
      "planned_query_type": "lexical"
    },
    {
      "id": "code-014",
      "passed": false,
      "hallucinated": false,
      "answer_score": 0.0,
      "evidence_score": 1.0,
      "completeness_score": 0.0,
      "retrieval_recall": null,
      "groundedness_score": 1.0,
      "trajectory_score": null,
      "input_tokens": 2370,
      "output_tokens": 60,
      "cache_hit": false,
      "rss_kb_end": 147396,
      "cpu_time_ms": 930.0,
      "latency_ms": 39064.386116999995,
      "error": null,
      "attribution": "retrieval",
      "diagnostics": [
        "RSN007: skipped supporting neighbourhood of ekos-recovery — 47 neighbours exceeds the 40-item budget for background context; a hub entity's neighbourhood describes the corpus, not this question"
      ],
      "answer": "The pass in ekos-recovery responsible for real AST + Calls function-call graph recovery for Rust source is `calls_to_nodes`.",
      "evidence_text": "possible search match (partial term overlap): call_name — The callable name of `expr` when it's a `Call` — `mapped_column(String(64), ...)`'s first positional arg is `Call{func: Name{\"String\"}, ...}`, so this gives the real `\"String\"` hint; `sa.Integer` (qualified) resolves via the `Attribute` arm the same way `linearize_chain` already … [ekos/crates/recovery/src/python_analyzer.rs:427]\npossible search match (partial term overlap): oxc_ast::ast::Function\npossible search match (partial term overlap): sqlparser::ast::Function\npossible search match (partial term overlap): QueryWorkerClient::call — Hold the write lock across the whole round-trip (write **and** read). The gateway fans a query to many partitions concurrently over one pooled connection per worker; separate write/read mutexes would let those concurrent calls read each other's response frame. [ekos/crates/distributed/src/worker_client.rs:40]\npossible search match (partial term overlap): call_tool — One agent turn: send a tools/call, decode the JSON body out of the MCP content envelope the way an MCP client does. `cache` is the same `StoreCache` across every turn in a session (RFC 0097) — this test's whole point is exercising that a real multi-turn session behaves correctly … [ekos/crates/cli/tests/mcp_session.rs:48]\npossible search match (partial term overlap): CoordinatorClient::call — Send one request, read one response. The write lock is held across the whole round-trip (write **and** read), so two concurrent callers on this shared connection — e.g. a `CompileWorker`'s heartbeat `lease_renew` racing its guard's `manifest_commit`, or the gateway's concurrent f… [ekos/crates/cluster/src/client.rs:30]\npossible search match (partial term overlap): call_tool — One agent turn — identical helper to `mcp_session.rs`'s, duplicated rather than shared across two independent test binaries (Rust's per-binary `tests/` compilation model gives each file no access to a shared, non-`pub` support module without a `tests/common/mod.rs` restructuring … [ekos/crates/cli/tests/transformation_benchmark.rs:121]\npossible search match (partial term overlap): log_call — RFC 0114: appends one usage-log entry. Best-effort — a logging failure must never fail the query it's describing, so any `io::Error` here is silently dropped. [ekos/crates/cli/src/commands/mcp.rs:982]\npossible search match (partial term overlap): tools_call — Execute a tools/call request. Tool failures (bad query, unknown id, missing ledger) are reported as `isError: true` results — readable by the agent — never as protocol errors.  RFC 0114: every read tool (everything except the two write-capable ones, which already record their own… [ekos/crates/cli/src/commands/mcp.rs:1007]\npossible search match (partial term overlap): call_claude [docs/spikes/recovery_spike.py:72]\npossible search match (partial term overlap): call_tool [ekos/crates/cli/src/commands/mcp.rs:1097]\npossible search match (partial term overlap): call_and_apply [ekos/crates/recovery/src/llm_description.rs:315]\npossible search match (partial term overlap): calls_to_nodes — Turns a linearized chain of `.method(...)` calls into `TransformNode`s. Not every call produces a node — intermediate calls like `.format(...)`/`.mode(...)`/`.option(...)` (part of a `.read`/`.write` builder chain) are structurally passed through without interruption, same as any… [ekos/crates/recovery/src/python_analyzer.rs:930]\npossible search match (partial term overlap): DistributedLedger::call_coordinator — Run `f` against the pooled coordinator connection, reconnecting and retrying once if the pooled connection turned out to be dead (the peer closed it, a prior call's I/O failed). [ekos/crates/distributed/src/gateway.rs:169]\npossible search match (partial term overlap): DistributedLedger::call_worker — Run `f` against the pooled connection for worker `idx`, reconnecting and retrying once on a dead pooled connection — the same one-retry contract as [`Self::call_coordinator`]. [ekos/crates/distributed/src/gateway.rs:208]\npossible search match (partial term overlap): estimate_call_counts — Real, cheap (no LLM call) upper-bound call-count estimate for the cost-confirmation gate `commit.rs` shows before spending — `(modules, symbols)`, each already filtered to `scope`. An upper bound, not exact: a real run may skip some via `skipped_cached`/ `symbols_without_span`, s… [ekos/crates/recovery/src/llm_description.rs:377]\npossible search match (partial term overlap): DistributedLedger::call_worker_failover — Like [`Self::call_worker`], but on a **connection** failure (worker process down, peer closed, connect refused) move on to the next worker in rotation and try there — every query worker can materialise and serve any partition (RFC 0113 B4), so a dead worker is not a dead partitio… [ekos/crates/distributed/src/gateway.rs:225]\npossible search match (partial term overlap): CallVisitor::visit_expr_call [ekos/crates/recovery/src/rust_analyzer.rs:637]\npossible search match (partial term overlap): render_call_sequences_section — The `## Call Sequences` section appended to `SequenceDiagrams.md` (RFC 0042): real `RelationshipKind::Calls` edges, grouped by the caller's containing module (via `Contains` edges module→symbol, the same association `render_api` uses), one small `sequenceDiagram` per module — cap… [ekos/crates/docs-gen/src/lib.rs:3212]\npossible search match (partial term overlap): ekos/docs/rfcs/0041-rust-source-analyzer.md — # RFC 0041 — Rust Source Analyzer (real symbols + import graph + real Calls edges)\n\n**Status:** Draft\n**Author:** EKOS team\n**Created:** 2026-08-08\n\n---\n\n## Motivation\n\nFollowing RFC 0038's Phase 2 (Python/PySpark analyzer, RFC 0040), the user asked for the same\ntreatment for Rus… [ekos/docs/rfcs/0041-rust-source-analyzer.md]\n",
      "evidence_refs": [
        "96d88b88-a5d4-4e20-8773-190e9d6999ba"
      ],
      "retrieved_ids": [
        "9115f110-11ef-5638-8470-deeb86b5bf4f",
        "e5257693-aa25-5b6e-bb88-43dc290233a7",
        "78b3564f-8a44-55ae-bf35-c94ad61660b1",
        "1cdf8ac9-aee9-5ae1-85b3-8b53d835bb32",
        "79df7d9c-60b9-5b0c-82a0-8fea3e18a0a0",
        "9f1ecf87-5979-5455-b2f5-5b746aa0553e",
        "a762a492-3442-53ed-993e-68a448c9584b",
        "f53481a7-35bd-5bdc-b976-9e669fc450ab",
        "52440250-4db8-5d19-8d69-bf98b9de4bd1",
        "7db50704-c3ca-5602-b766-c5bb57816934",
        "0e48bbfe-3249-5440-a944-a03fcd474757",
        "3f666496-3a5b-5518-8529-4998fdff4e27",
        "73d9612b-4af4-5e0f-b10f-ddfc27015e27",
        "55f50236-33bc-58c3-b222-553c9aed3dea",
        "64d2c007-db98-5b3a-bed1-960c78dad1df",
        "9a09a153-6a0a-5ba4-af4f-8d85056b38e1",
        "1e39c74f-7a92-5a5e-a9ff-fd18d99603e3",
        "45eb033b-2184-5f93-b0a6-dd59942d76ed",
        "fbb1d6fe-cedd-5ae7-adea-bdbf8ff8247e",
        "b05d1f14-c9aa-5061-96ca-2d9857544281",
        "39be2e39-4923-56fe-8a52-13af5c30465d",
        "50cde56d-1f82-53a6-bc71-b5b2f7c711bc",
        "a802d3bd-3555-5cda-98a5-8cebe80076e3",
        "b1955ce9-9233-5141-b814-0551cac1d287",
        "fb4a63c1-3690-5bee-b424-6e26e9a46525",
        "b434d5b5-d555-5b7b-80e1-c97e16f14de6",
        "c31fee94-126a-5870-b461-0eac6cdf51e5",
        "dd5a8942-3c75-5270-a707-38d8ef5e6bf6",
        "fdcee708-d6ab-566e-9328-13c095f25ef7",
        "49fa4da6-ed18-5849-94b6-d2f966946ce0",
        "33d3b469-0553-5f14-a124-22fdc1652dc9",
        "feafd0e9-4c34-5a81-82ad-1baf30de283b",
        "923d1cdd-35ae-5279-8861-c6ce665fe1d4",
        "db08b255-576a-5a3a-bc96-50b050ce1bf1",
        "6920a493-f349-5dc9-815e-b102be6c5356",
        "d2ce2379-4673-5dbc-9284-bc1d39f90ebb",
        "d31d58f2-473f-5eba-b29d-778234422e06",
        "8de7c1e6-682d-54b2-a686-97eb6d67ac38",
        "ff079ea5-acaa-573a-bee0-c64674808f87",
        "07179bab-d486-5b14-8c68-6e743e45b3f6",
        "3b69f97f-12c6-5b92-8196-eed82bf026d6",
        "e664e678-4a0c-5659-98ea-794cf210d8b7",
        "6e38d862-2134-5ff9-917b-9c7c56f49a8e",
        "23620f23-85cb-5ce3-bf86-a1c834b17ebd",
        "75923916-379c-5b98-a9b4-c4b9264c6d2d",
        "56ac944b-5f84-584d-bb8b-dcc1106b60e4",
        "a86c3a35-0aed-501e-8eae-5e12a308c69c",
        "df6da2f3-5412-55c8-8862-2f81f0a9a10b",
        "db95e1f5-63ba-50bb-a83e-460a988004f4",
        "a280426f-bbbe-50ea-aaf6-5d19c44fb756"
      ],
      "planned_query_type": "lexical"
    },
    {
      "id": "code-015",
      "passed": true,
      "hallucinated": false,
      "answer_score": null,
      "evidence_score": null,
      "completeness_score": null,
      "retrieval_recall": 1.0,
      "groundedness_score": null,
      "trajectory_score": null,
      "input_tokens": null,
      "output_tokens": null,
      "cache_hit": null,
      "rss_kb_end": 157156,
      "cpu_time_ms": 0.0,
      "latency_ms": 1.025967,
      "error": null,
      "attribution": "n/a",
      "retrieved_ids": [
        "2641fb34-3ec0-544b-9e1d-fb93042b7ea4",
        "1578886d-e145-5ef0-a989-4f0162bdf044",
        "a904d91c-af3b-5cc4-926b-a39c8a31d1d5",
        "fea06eab-a982-55b6-b617-e108220998c7",
        "453bee65-6715-5e30-944b-8d6a56518b6a",
        "f3031758-f00b-5d25-a770-3a15d1eebb37",
        "b57bde1d-9a1e-538b-8cd1-2eaf7f5323f3",
        "75768e21-6208-5b55-933c-b98b65d52e4e",
        "5123d973-7a1c-54ed-ae21-4796d446ee1b",
        "5c0543f1-af7f-5683-ac95-1e74de8b0e27",
        "169901e8-08e3-5456-8237-260e3109e2b8",
        "80b144fb-53ab-5831-8888-5dbea26705de",
        "56355ecb-dc9e-54c6-888e-054386b959d4",
        "3b326736-3b83-52ae-8cc6-1e925b8c1146",
        "b73d27b3-7741-5341-88c1-4035f1ce7dc1",
        "61aedc2e-d2e9-50e6-a074-25dea5b79fd7",
        "100381d0-7f9f-5a7e-9cf3-436b098fa154",
        "7a31c783-a557-562e-b133-d5bd2c1dc944",
        "995df50a-b222-5596-a3b1-29128eb9789e",
        "48549be1-b827-5e98-9c9d-72a8e21dc3da",
        "baf41b7a-1ef7-5a05-9152-5eb0218f0896",
        "97f2bb5d-49d6-54df-af1c-6e85d2831acd",
        "d7340744-7cf6-5d2b-912a-63efde92caba",
        "cb86c2a8-7169-54bf-9a91-76a8df42014f",
        "d993ffb7-965c-5bb4-8a95-c836e3b95360",
        "42cd77ef-121a-5f2d-9afe-7243f07d7947",
        "d3d77143-29b0-546c-94c8-dc858dbe0dec",
        "db031b8b-e856-5e18-b37a-2ad6051ce72a",
        "f7729c3a-1c9e-5498-8bd6-e08b004203f4",
        "ba1fbaa2-1fbe-502f-a7f3-788af704ef03",
        "e5a50cd7-bdf1-52ad-81ca-d7c6308f1868",
        "77cbebdf-9f50-5b84-ae22-24dd57095427",
        "5e807a86-2e24-5cab-b72c-ff4130840c4f",
        "f6840b08-d435-5547-8231-679599b599c1",
        "3eb19de2-217c-5c6c-9702-f31f0022441c",
        "1c294939-a478-529a-a090-3ff9b23741e0",
        "b0831590-3880-59f7-9aa1-3159e8396bef",
        "60ac245c-18d7-5f9b-83f5-0ad24b09d832",
        "7b8a58b4-eaa3-5550-b67b-732181bd1d13",
        "3784703f-2bc7-587a-be31-f04cdb2c6aed",
        "8ab126d2-a3f3-5ca5-b5f7-9e3f0402df47",
        "4bd9b8e9-9e02-5a7d-a85f-16409b2f3833",
        "fa988f8c-25bf-5784-9850-5e5a0572ceee",
        "6118d2ff-3c43-5024-8cb5-7576024ff464",
        "7d74e1d1-d372-5e90-820b-7c9f20e6756f",
        "ca5b216d-5f63-59c9-8e61-22588149666e",
        "3c4612eb-5984-55ec-ade2-d06caf2270a8",
        "12a159ab-12c6-5379-bcea-fce9a66c95ca",
        "1bd7f9b2-f594-574f-8e4f-32d179f2e99c",
        "b47b9a66-31eb-512b-b220-2f83d98048d7"
      ]
    }
  ],
  "ruler_version": 5
}