Skip to content

Commit 81890be

Browse files
author
Brad Kinnard
committed
docs: README exit codes and CONTRIBUTING platform-skip notes
The README exit-code table understated when exit 1 fires: warning-only runs with --strict, regressions with --fail-on-regression, and ingest parse failures all return 1, but the table only mentioned errors and --strict warnings. The 1-over-3 priority rule was only in CLAUDE.md. Surfaces both in the public README. CONTRIBUTING now documents which tests skip on Windows and why, so the next maintainer can read the test suite output without having to grep for skipif marks.
1 parent 8f7a001 commit 81890be

3 files changed

Lines changed: 24 additions & 1 deletion

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
### Changed
1111

12+
- README exit-codes table expanded: the `1` row now lists every escalation path (errors, warning-only run with `--strict`, regression with `--fail-on-regression`, ingest parse failure) and includes the `1` > `3` priority note that was previously only in `.github/CLAUDE.md`.
13+
- `CONTRIBUTING.md` documents platform-skipped tests so the next maintainer knows why pass/skip ratios differ across the CI matrix without having to grep the suite.
1214
- CLI mutual-exclusion block refactored to a single `_PAIRWISE_CONFLICTS` table walked by one loop, replacing nine hand-written `if ... and ...:` branches. Exit code 2 and stderr messages are unchanged.
1315
- `--history` now fans out across every target path instead of silently writing only when exactly one path is supplied. Each SKILL.md still gets its own per-skill `.skillcheck-history.json` next to it. `--fail-on-regression` escalates to exit 1 when any target regresses.
1416
- `--show-history` with multiple paths still reads only the first path's ledger (each skill has its own), but the extra paths now produce a stderr warning instead of being silently dropped.

CONTRIBUTING.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,24 @@
11
# Contributing
22

3+
## Testing
4+
5+
Run the suite from the repo root after installing the dev extras:
6+
7+
```bash
8+
pip install -e ".[dev]"
9+
pytest tests/ -v
10+
```
11+
12+
The README test-count line (`N tests cover ...`) is asserted by `tests/test_readme_test_count_claim.py`; when you add or remove tests, bump the README count in the same commit.
13+
14+
### Platform-skipped tests
15+
16+
A handful of tests skip on Windows because the underlying OS feature is unavailable or behaves differently. `pytest --collect-only` still counts them, so the README's `N tests cover ...` number is the same on every platform; only the pass/skip ratio shifts.
17+
18+
- `tests/test_references.py`: the two `os.symlink`-based tests use the module-level `_skip_symlink = pytest.mark.skipif(sys.platform == "win32", ...)` mark. `os.symlink` on Windows requires developer mode or admin privileges, so the symlink-escape coverage runs on Linux/macOS only.
19+
- `tests/test_cli_history.py` and `tests/test_history_io.py`: each has one `pytest.mark.skipif(sys.platform == "win32", ...)` test exercising POSIX file-mode permission errors that Windows does not enforce identically.
20+
- `tests/test_pre_commit.py`: both tests skip wherever the `pre-commit` binary is not installed. CI installs `pre-commit` so they run there; local runs without `pre-commit` show them as skipped.
21+
322
## Releasing
423

524
Every release pushes two tags pointing to the same commit:

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,12 @@ The same flow exists for capability graph extraction (`--emit-graph-prompt` / `-
9696
| Code | Meaning |
9797
|---|---|
9898
| `0` | No errors. Warnings alone exit 0 unless `--strict` is set. |
99-
| `1` | One or more errors, or warnings with `--strict`, or regression with `--fail-on-regression`. |
99+
| `1` | One or more errors. Also: warnings with `--strict` (the umbrella `--strict-vscode` / `--strict-cursor` only escalate their own diagnostics; the umbrella additionally escalates any warning-only run). Also: `history.skill.regressed` with `--fail-on-regression`. Also: any ingest parse failure. |
100100
| `2` | Input or argument error (missing path, conflicting flags, malformed input). |
101101
| `3` | Symbolic checks passed but an ingested critique reported semantic errors. |
102102

103+
When both `1` and `3` would apply, `1` wins so CI consumers see the higher-severity signal.
104+
103105
## Configuration
104106

105107
Defaults live in a `skillcheck.toml` discovered upward from the validated path. Override per invocation with `--config PATH`. Organization-specific frontmatter keys belong under `[frontmatter] extension_fields`. Override the name reserved-word list with `[frontmatter] reserved_words = ["acme", "internal"]` (an empty array reverts to the defaults).

0 commit comments

Comments
 (0)