Skip to content

Commit d819a2b

Browse files
committed
docs(qa): note CI 20-case limit, regex compile-probe, maturin build
1 parent 4d0baff commit d819a2b

1 file changed

Lines changed: 32 additions & 0 deletions

File tree

QA.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,38 @@ pipx-published binary. For QA code-review smoke, always use the absolute path
9494
`/Users/nikolay/.local/bin/diffctx`. Tests, builds, and pre-commit need the venv
9595
binary; only the user-facing smoke / review step needs the pipx one.
9696

97+
## YAML Cases: CI Runs Only the First 20
98+
99+
`ci.yml` sets `DIFFCTX_YAML_CASES_LIMIT: "20"`, so `cargo test --test yaml_cases`
100+
in CI runs only the first 20 discovered cases (sorted by filename). Everything
101+
alphabetically after that — `kubernetes_*`, later `bal2_*`, etc. — **never runs
102+
in CI**. A green CI does NOT mean the full case suite passes. On every QA pass,
103+
run the FULL suite locally (`cd diffctx && cargo test --release --test yaml_cases`)
104+
and triage cases below the score threshold (default `min_score=10`, override via
105+
`DIFFCTX_YAML_MIN_SCORE`). A failing case scores `100 * recall * (1 - forbidden_rate)`;
106+
`forbidden_rate=100%` means the selection pulled in every "unrelated" manifest.
107+
108+
## Edge-Builder Regexes: Compile-Probe, Not Pipeline Coverage
109+
110+
The diff pipeline does NOT force every edge-builder `Lazy<Regex>` for small test
111+
inputs (PPR can pull a fragment in via a structural edge without ever invoking
112+
the k8s selector/label extraction). So a YAML case that "passes" does not prove
113+
the edge regexes even compile. A nested bounded repetition of a Unicode negated
114+
class — `(?:...[^\n:]{1,200}\n){1,50}` — compiles past regex's default 10 MiB
115+
limit and `.unwrap()` aborts the process the first time it's forced (a real k8s
116+
repo via the CLI hits it; the test suite did not). The deterministic guard is a
117+
`#[cfg(test)]` probe that forces every regex in the module to compile
118+
(`kubernetes::tests::all_kubernetes_regexes_compile`). Unbound the value class
119+
(`[^\n:]+`) instead of bounding it — the regex crate is linear-time, so no ReDoS.
120+
121+
## Building the Extension: maturin, Not `cargo build --features python`
122+
123+
`cargo build --features python` fails at the link step (`linking with cc failed`,
124+
undefined Python symbols) because the `extension-module` pyo3 feature expects the
125+
host interpreter to provide symbols at import time. To compile-check the Python
126+
bridge, use `.venv/bin/python -m maturin develop --release` (or `cargo build`
127+
WITHOUT `--features python` / `cargo test --lib` for the pure-Rust paths).
128+
97129
## Empty-Diff Warning Is Expected on Docs-Only HEAD
98130

99131
`diffctx --diff` (bare, no range → defaults to HEAD) on a docs-only HEAD prints

0 commit comments

Comments
 (0)