Skip to content

Commit f33c68c

Browse files
authored
feat: evidence policy, strict comparator, Snowflake recorder and append-only guard (#3)
* feat: evidence policy file and strict comparator * feat: cases, pending files, DuckDB replay, verify and audit * refactor: evidence and recorder layout * refactor: evidence crates follow the Rust structure rules * feat: Snowflake recorder, append-only guard and CI wiring * docs: evidence workflow, recorder settings and integrity * test: neutral stand-in column name * fix: rerun a batch case by case when Snowflake wraps a statement error * fix: install the connector's pandas extra for Arrow fetches and pin pyarrow 23 * fix: store only a hash of the query ID and no warehouse error messages * evidence: first Snowflake recording of the seed cases
1 parent 524995d commit f33c68c

202 files changed

Lines changed: 9186 additions & 71 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/workflows/ci.yml‎

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,17 @@ jobs:
2121
env:
2222
CARGO_TERM_COLOR: always
2323
CARGO_INCREMENTAL: "0"
24+
# The Snowflake recorder is never built or run in CI.
25+
RECORDER: "0"
26+
# `uv run` would otherwise sync the default groups, recorder included.
27+
UV_NO_SYNC: "1"
28+
# The append-only guard compares recorded results with the pull request base or the
29+
# previous main commit.
30+
EVIDENCE_BASE: ${{ github.event.pull_request.base.sha || github.event.before || 'origin/main' }}
2431
steps:
2532
- uses: actions/checkout@v4
33+
with:
34+
fetch-depth: 0
2635
- uses: astral-sh/setup-uv@v5
2736
with:
2837
version: "0.12.3"
@@ -36,8 +45,8 @@ jobs:
3645
shared-key: verify
3746
- name: Install Python
3847
run: uv python install 3.12
39-
- name: Install development tools
40-
run: uv sync --locked
48+
- name: Install development tools without the recorder
49+
run: uv sync --locked --no-group recorder
4150
- name: Run static checks
4251
run: make check-ci
4352
- name: Run tests

‎.gitignore‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,7 @@ __pycache__/
2929
/.agents/skills/
3030
/.claude/skills/
3131
/.opencode/skills/
32+
33+
# Derived evidence work files
34+
/evidence/pending/
35+
/evidence/audit/

‎AGENTS.md‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@
2525
- Everything that could be weakened to make a failing case pass (comparator tolerances, required
2626
edge-case inputs, known divergences) lives in one reviewed policy file. There are no per-case or
2727
per-rule overrides elsewhere.
28+
- Tests that need a result use DuckDB stand-ins written to temporary directories and marked as
29+
test fixtures. Never commit a stand-in under `evidence/results`; the evidence guard rejects any
30+
result the recorder did not write.
2831
- When a case fails, either fix the rule or make it refuse. Never widen a rule to raise the
2932
conversion rate.
3033

0 commit comments

Comments
 (0)