Release 1.4.0 - #97
Merged
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #97 +/- ##
=======================================
Coverage 92.38% 92.38%
=======================================
Files 43 43
Lines 3743 3743
Branches 381 381
=======================================
Hits 3458 3458
Misses 172 172
Partials 113 113 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
ubmarco
marked this pull request as ready for review
July 29, 2026 12:26
ubmarco
added a commit
that referenced
this pull request
Jul 30, 2026
Follow-up to #97. Adds the traceability artifacts for the substantial features that landed since 1.3.0 without any. ## Audit Every merged PR in the `1.3.0` → `1.4.0` window, checked against `features.rst` and the `@` markers in `src/`: | PR | Substantial feature? | Traceability | |---|---|---| | #92 Bash language support | yes | ✅ `FE_BASH` + `FAULT_BASH_1/2` + `IMPL_BASH_1/2/3` + added to `IMPL_LANG_1` | | #85 Preprocessor-aware C/C++ engine (libclang) | yes | ❌ **none** — no feature need, no markers | | #89 Marker anchoring fix | no (fix to existing traced code, `IMPL_OLP_1`) | n/a | | #83 Declarative fixture tests | no (test infra, no `src/` change) | n/a | | #84 / #86 Dependency caps | no | n/a | So the libclang engine was the one gap: 4 new modules and 353 lines in `analyse/preproc/`, plus wiring in `analyse.py` / `config.py` / `cmd.py` / `src_trace.py`, with zero traceability. ## Changes **`docs/source/components/features.rst`** — new `FE_PREPROC` feature need, placed after the language-support block, with three `fault` children: - `FAULT_PREPROC_1` — objects in inactive branches are extracted (false positives, the defect the engine exists to prevent) - `FAULT_PREPROC_2` — objects in active branches are dropped (false negatives) - `FAULT_PREPROC_3` — flags resolved from the wrong compilation database entry, so the wrong branches evaluate as active **Six `@` markers**, one per capability listed in the need, so the mapping is 1:1 and reviewable: | Marker | Site | Capability | |---|---|---| | `IMPL_PREPROC_1` | `analyse.py::create_src_objects_libclang` | engine entry / opt-in | | `IMPL_PREPROC_2` | `preproc/libclang_parser.py::extract_active_comments` | drop inactive-branch comments | | `IMPL_PREPROC_3` | `preproc/compile_db.py::find_compile_db` | walk-up database discovery | | `IMPL_PREPROC_4` | `preproc/compile_db.py::load_flags_map` | per-file compiler flags | | `IMPL_PREPROC_5` | `preproc/compile_db.py::defines_to_args` | standalone header parsing | | `IMPL_PREPROC_6` | `preproc/loader.py::load_clang_cindex` | optional-dependency guard | Comments only — no logic touched. ## Verification A green `-nW` build alone would not prove the markers work: a marker that fails to parse produces no need and no error. So the built output was checked directly. ``` $ tox -e docs-clean # sphinx-build -nW --keep-going build succeeded. $ grep -o 'id="IMPL_PREPROC_[0-9]"' docs/_build/html/development/traceability.html | sort -u id="IMPL_PREPROC_1" … id="IMPL_PREPROC_6" # all six needs materialized $ grep -o 'href="[^"]*#FE_PREPROC"[^>]*title="IMPL_PREPROC_[0-9]"' … | sort -u IMPL_PREPROC_1 … IMPL_PREPROC_6 # all six link to the feature ``` - `tox -e py312-sphinx8-needs5` — 345 passed, 1 skipped, 58 snapshots passed - `tox -e mypy` — no issues in 20 source files - `pre-commit run --files …` — all hooks pass ## Deliberately out of scope Pre-existing gaps, all predating the 1.3.0 → 1.4.0 window this PR was scoped to. Flagging rather than fixing, since each is a separate judgment call: - **`FE_CSHARP` is an orphan.** It has no incoming `impl` link — it is missing from the `IMPL_LANG_1` list in `analyse/utils.py:110` even though `init_tree_sitter` handles `CommentType.cs` (utils.py:122). C# is the only supported language whose implementation is untraced. One-word fix if you want it here. - **No feature need for the `src-trace` directive, nor for source-link URL generation** (`local-url` / `remote-url`), while the CLI has three (`FE_CLI_*`). This asymmetry may be intentional — capability-level needs covering *what* is traced regardless of interface — so changing it is a feature-model decision, not a gap fix. - **The test-needs layer is empty.** `docs/ubproject.toml` defines a `test` type and `development/traceability.rst` runs a `src-trace` over the `tests` project, but `tests/` carries no `@` markers, so zero `TEST_` needs exist. ## Note on sequencing No changelog entry here, deliberately: this PR is based on `main`, where the `Unreleased` heading still holds the Bash entry that #97 converts into the dated `1.4.0` section. Editing it would conflict with the open release PR. Since these artifacts document a feature already listed in the 1.4.0 notes, either fold a line into #97 before merging it, or let the next release's notes pick this up — your call on the order.
patdhlk
approved these changes
Jul 30, 2026
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.
Prepares the 1.4.0 release.
Release changes
1.3.0→1.4.0inpyproject.toml.Unreleasedheading into a dated1.4.0section (released 30.07.2026). Only 1 of the 6 PRs merged since 1.3.0 (feat(analyse): add Bash language support #92) had added a changelog entry, so this also documents the 5 that were missing one, plus the traceability artifacts from docs(traceability): trace the preprocessor-aware C/C++ engine #98.Minor bump: two new user-facing features, no removals or config-breaking changes.
Changelog for 1.4.0
New and Improved
analysemodule (feat(analyse): add Bash language support #92)Fixes
typerandsphinxcontrib-typerto keep the documentation build working (fix(docs): cap typer <0.26.8 (0.26.8 broke the Documentation build) #84, fix(docs): cap sphinxcontrib-typer <0.9.1 (0.9.1 needs typer.rich_utils.STYLE_TYPES) #86)Behavior change worth calling out
#89 is released as a fix, but it does narrow marker matching: a newline-terminated one-line marker (default
@…) is now only recognized when nothing but comment decoration and whitespace precedes the start sequence. A project that deliberately embedded such markers after prose on the same line will stop seeing them — the fix is what stops@in prose from producing bogus need IDs andInvalidNeedException. Explicitly bounded markers (e.g.[[ … ]]) are unaffected.Verification
Rebased onto
mainat #98, so this branch carries the full 1.4.0 content.tox -e py312-sphinx8-needs5— 345 passed, 1 skipped (58 snapshots passed).tox -e docs-clean(sphinx-build -nW --keep-going) — build succeeded, 0 warnings.pre-commit run --files docs/source/development/change_log.rst pyproject.toml— all hooks pass.Not included
Pre-existing traceability gaps are left for a follow-up, since all predate 1.3.0:
FE_CSHARPhas no incomingimpllink; the five enum-site markers carrying a trailing;(IMPL_BASH_1,IMPL_GO_1,IMPL_RUST_1,IMPL_RUST_2,IMPL_JSONC_1) are inert and produce no needs, so file-extension discovery is untraced for every language; andIMPL_C_1/IMPL_PY_1/IMPL_GO_2are anchored onCOMMENT_MARKERS, which has no readers. See the discussion in #98.After merge
1.4.0on the merge commit (matching the existing1.0.0–1.3.0tags). TheReleaseworkflow triggers on that tag pattern and publishes to PyPI.