fix(check-path): data-standard check-path filtering + option-3 format (Part A / soda-core)#2778
Draft
m1n0 wants to merge 7 commits into
Draft
fix(check-path): data-standard check-path filtering + option-3 format (Part A / soda-core)#2778m1n0 wants to merge 7 commits into
m1n0 wants to merge 7 commits into
Conversation
…e across unit tests Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…es data-standard partial runs)
…th= filter fields Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…act collections
Non-contract check collections (e.g. data standards) now emit
checkPath as "{wire_source}.{collection_id}:{relative_path}" (option 3)
instead of the old "{collection_id}.{relative_path}" format. Contracts
stay bare (checkPath == relative_path). Adds a delimiter-safety guard
in base.py verify() that rejects collection_id values containing '.'
or ':' (reserved check-path delimiters). Updates all stub check_path
values in selector and alignment tests to the option-3 format.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…r guard, negative coverage
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Part A — soda-core engine (of a larger cross-repo change)
Fixes FE-triggered "run selected checks" on data-standard checks matching zero checks, and lays the engine groundwork for the option-3 check-path format.
Root cause
The FE round-trips the full wire
checkPath(data-standard paths are collection-prefixed); the engine's--check-pathsfilter matched the stripped path, so nothing matched. Contracts were unaffected (theircheckPathis already bare).What changed (design D1–D4)
CheckSelector.from_check_pathsnow matches the fullcheck_pathonly (not the stripped path). Fixes the data-standard partial run; contracts unchanged; no silent fan-out across collections.--check-filterfieldssource=,collection=/standard=,relative_path=,check_path=(mirroridentity_prefix = (wire_source, collection_id)).CheckImpl.path → relative_path,full_path → check_path(+Checkdataclass, wire builder). Wire JSON keycheckPathunchanged; contract emission byte-identical.{type}.{id}:{relative}(e.g.data-standard.my_std:columns.email.checks.missing); contracts stay bare. Grammar: one:, split-first;+delimiter guard forbidding./:incollection_id/wire_source.Design + plan:
docs/superpowers/specs/data_standards/2026-06-24-checkpath-filter-data-standards-{design,plan}.md(soda-punch workspace).Testing
test_check_paths_filter.py,test_check_selectors_filter.py, incl.test_backward_compat_check_paths) green against a live postgres — no contract regression.Part B (coordinated; sequencing = backend tolerant-parser → engine flip → FE):
CheckCollectionModule.firstSegmentOf+DataStandardIngestionFilterModulewith an option-3(type, id, relative)parser; make it tolerant of the legacy{id}.{relative}form during rollout.firstSegmentOf(checks-tree-table.fns.ts) + path builders parse the new grammar (split on first:).Cross-repo consumers of the D4 rename (break only when a soda-core release ships the rename; all pin soda-core by version; sweep of soda / soda-library / launcher = clean):
reconciliation_check_types.py:324-330— overridespathviasuper().path+reconciliation.{source}.prefix. Silent-regression risk: a naive fix drops the prefix. Migrate the override deliberately torelative_path/check_path.contract_migrator.py:436—check_impl.path→.relative_path.:; migratetest_data_standard_check_full_path_is_prefixed_with_standard_nameto option-3 and add the deferred real-engine e2e.Kept as draft until Part B is sequenced and the cross-repo consumers are ready.
🤖 Generated with Claude Code