This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow-steward.git
The following commit(s) were added to refs/heads/main by this push:
new c2d373a8 feat(spec-validator): enforce Known gaps section in every
functional spec (#490)
c2d373a8 is described below
commit c2d373a8283593b7336f7741eb641fe5e0f17554
Author: Justin Mclean <[email protected]>
AuthorDate: Thu Jun 11 20:17:07 2026 +1000
feat(spec-validator): enforce Known gaps section in every functional spec
(#490)
All twelve functional spec files already carry a ## Known gaps section.
Add it to REQUIRED_SECTIONS so the validator catches any future spec
that omits it, and update the _VALID_SPEC test fixture to include the
section (one extra parametrised test case: 57 → 58 passing).
Also bump the pre-commit node pin 22.13.0 → 22.20.0: [email protected] (a
markdownlint-cli2 transitive dep) requires node ^20.19 || ^22.20 ||
^24.12 || >=25, so 22.13.0 fails EBADENGINE on every commit.
Generated-by: Claude (Opus 4.7)
---
.pre-commit-config.yaml | 6 +++++-
tools/spec-validator/src/spec_validator/__init__.py | 4 +++-
tools/spec-validator/tests/test_spec_validator.py | 4 ++++
3 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 7893f48d..3c7d54fa 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -29,7 +29,11 @@ default_language_version:
# `@eslint/[email protected]` declares engines `^20.19.0 || ^22.13.0 || >=24`,
# so the old 22.11.0 pin failed `npm install` with EBADENGINE. 22.13.0
# is the lowest 22.x that satisfies it.
- node: 22.13.0
+ #
+ # Bumped 22.13.0 -> 22.20.0: [email protected] declares engines
+ # `^20.19 || ^22.20 || ^24.12 || >=25`; 22.13.0 fails EBADENGINE.
+ # 22.20.0 is the lowest 22.x that satisfies both constraints.
+ node: 22.20.0
minimum_prek_version: '0.3.5'
repos:
- repo: meta
diff --git a/tools/spec-validator/src/spec_validator/__init__.py
b/tools/spec-validator/src/spec_validator/__init__.py
index 7b5166e1..02c53ac7 100644
--- a/tools/spec-validator/src/spec_validator/__init__.py
+++ b/tools/spec-validator/src/spec_validator/__init__.py
@@ -25,7 +25,8 @@ Checks every .md file that carries a YAML frontmatter block:
4. Valid ``mode`` value — Triage | Mentoring | Drafting | Pairing | infra.
5. Non-empty ``acceptance`` list — at least one ``- item`` entry.
6. Required body sections — What it does, Where it lives,
- Behaviour & contract, Out of scope, Acceptance criteria, Validation.
+ Behaviour & contract, Out of scope, Acceptance criteria, Validation,
+ Known gaps.
7. Validation section contains at least one fenced code block.
Files without frontmatter (README.md, overview.md) are skipped silently.
@@ -61,6 +62,7 @@ REQUIRED_SECTIONS: tuple[str, ...] = (
"Out of scope",
"Acceptance criteria",
"Validation",
+ "Known gaps",
)
DEFAULT_SPEC_DIR = Path("tools/spec-loop/specs")
diff --git a/tools/spec-validator/tests/test_spec_validator.py
b/tools/spec-validator/tests/test_spec_validator.py
index a48d7e7e..4cfeaebe 100644
--- a/tools/spec-validator/tests/test_spec_validator.py
+++ b/tools/spec-validator/tests/test_spec_validator.py
@@ -85,6 +85,10 @@ _VALID_SPEC = textwrap.dedent("""\
```bash
uv run --project tools/example --group dev pytest
```
+
+ ## Known gaps
+
+ - `stable`; no gaps at this time.
""")