ktx/packages/cli/test/context/ingest
Andrey Avtomonov f3f893bf01
fix: read semantic sources safely (#284)
* fix: read semantic sources safely

* test: retarget reindex per-scope error case to a broken manifest

Reading a broken standalone source was made non-fatal in de1f1a8d (it is
surfaced for repair instead of throwing), so the reindex per-scope error
test no longer captured an error. Point it at a corrupt manifest shard,
which is the remaining fatal read failure the per-scope catch must
isolate, and assert the captured error names the offending file.

* fix(sl): decouple semantic-layer file names from warehouse naming rules

The in-file `name:` field is now the sole source identity; the filename is
a derived label that never participates in identity. This removes the
"Unsafe semantic-layer source name" failure class entirely: any warehouse
identifier (Snowflake's uppercase SIGNED_UP, EVENT$LOG, dotted names) can
be read, overlaid, edited, and deleted.

- New `source-files.ts`: one total filename derivation (safe lowercase
  names verbatim; otherwise slug + sha256-hash suffix, immune to
  case-insensitive-filesystem collisions) and one by-name file resolver.
- Reads resolve by name everywhere; the path-from-name fast path and
  `assertSafeSourceName` are gone.
- Writes resolve-then-write: rewrites land on the file that declares the
  name (human renames survive); new sources get a derived filename; a
  derived path occupied by a different source fails instead of clobbering.
- `readSourceFile` returns null for missing files instead of forcing every
  caller to launder IO errors; `deleteSource` distinguishes manifest-backed
  sources from not-found instead of silently succeeding.
- `sl_write_source` accepts verbatim warehouse identifiers (snake_case is
  now a recommendation for new sources) and rejects sourceName/source.name
  mismatches; `sl_edit_source` rejects name-changing edits.
- Ingest projection commits, gate-repair allowlists, and touched-source
  derivation use resolved paths / in-file names instead of interpolating
  `<connId>/<name>.yaml`.
- Collapsed the five parallel path derivations and duplicated path-token
  helpers onto the shared module; dropped dead service methods.

* fix(sl): resolve sources by declared name end-to-end and gate warehouse SQL with the parser-backed validator

- Key broken/renamed semantic-layer files by their recoverable in-file
  name (slSourceNameForFile) so mid-edit sources stay reachable under
  their real identity in reads, listings, and search
- Derive finalization touched sources from composed-source diffs and
  recover deleted files' declared names from the pre-change commit
  instead of parsing hash-derived filenames
- Resolve revert/rollback paths against history (listFilesAtCommit) so
  human-renamed files are restored where they lived at preHead
- Validate ingest sql_execution through the daemon's sqlglot
  validateReadOnly in the connection's dialect, sharing one
  driver-to-dialect map (sql-analysis/dialect.ts) across MCP and ingest
- Harden the local read-only SQL backstop: accept leading comments,
  reject smuggled second statements, and strip trailing
  semicolons/comments before row-limit wrapping
2026-06-10 14:06:13 +02:00
..
adapters feat(setup): wizard prompt tweaks and quieter query-history filter output (#259) 2026-06-04 14:11:08 +02:00
clustering test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
context-candidates test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
context-evidence test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
dbt-shared test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
historic-sql-probes test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
isolated-diff fix(ingest): recover textual-conflict gate failures; fix query-history adapter (#255) 2026-06-03 13:05:59 +02:00
memory-flow fix(ingest): drive work-unit progress from tool calls, not turn counts (#269) 2026-06-08 15:30:35 +02:00
page-triage test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
stages test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
tools fix: read semantic sources safely (#284) 2026-06-10 14:06:13 +02:00
action-identity.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
artifact-gates.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
canonical-pins.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
diff-set.service.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
final-gate-repair.test.ts fix: read semantic sources safely (#284) 2026-06-10 14:06:13 +02:00
finalization-scope.test.ts fix: read semantic sources safely (#284) 2026-06-10 14:06:13 +02:00
historic-sql-probes.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
ingest-bundle.runner.isolated-diff.test.ts fix: read semantic sources safely (#284) 2026-06-10 14:06:13 +02:00
ingest-bundle.runner.test.ts fix: read semantic sources safely (#284) 2026-06-10 14:06:13 +02:00
ingest-profile.test.ts feat(cli): profile ingest runs and split model vs tool time (#249) 2026-06-01 15:49:17 +02:00
ingest-prompts.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
ingest-runtime-assets.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
ingest-trace.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
local-adapters.test.ts feat(query-history): scope mining to modeled schemas by default (#258) 2026-06-03 17:19:42 +02:00
local-bundle-ingest.test.ts fix(ingest): attribute historic-sql evidence writes in bundle report (#220) 2026-05-26 12:21:53 +02:00
local-bundle-runtime.test.ts feat(setup): apply per-role LLM model presets, remove --llm-model (#268) 2026-06-08 15:30:48 +02:00
local-embedding-provider.integration.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
local-mapping-reconcile.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
local-metabase-ingest.test.ts fix(cli): treat artifact-producing ingests with failures as partial (#238) 2026-05-30 00:42:59 +02:00
local-stage-ingest.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
raw-sources-paths.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
repo-fetch.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
report-snapshot.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
reports.test.ts fix(cli): treat artifact-producing ingests with failures as partial (#238) 2026-05-30 00:42:59 +02:00
semantic-layer-target-policy.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
source-adapter-registry.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
sqlite-bundle-ingest-store.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
sqlite-local-ingest-store.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
wiki-body-refs.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00
wiki-sl-ref-repair.test.ts test: split cli tests from source tree (#216) 2026-05-26 08:49:05 +02:00