Skip to content

Follow-ups from the validation subsystem review #125

Description

@simontaurus

Findings from the review of #114 that are not covered by #118-#122. All verified against the branch.

These are five unrelated findings that happen to share an issue. They are separately assignable and do not have to land together. The ordering they fit into is #129.

Four are done and the fifth is in review. Item 5 turned out to be smaller than written.

Items

1. Parity is measured but cannot fail

.github/workflows/main.yml:80 ran the parity tests with continue-on-error: true, so a parity regression was reported and never failed the build.

Done. The parity step no longer carries continue-on-error. Gating was deliberately left until the meta-source swap rather than done first, because gating while verdicts were still moving would have blocked the changes that moved them.

2. The CLI and the MCP server disagree on filtering

cli.py:246-251 and mcp_server.py:292-296 applied the area and unchecked filters in opposite orders.

Done. select_rules now lives in check_registry.py:1210 and both front ends are formatting only. It was not only duplication: oold rules list --area RT --unchecked returned 15 rules across five areas, because the unchecked branch rebuilt the list and discarded --area. It returns 4 now.

3. A corrupt rules schema disables catalogue validation silently

meta_store.py. _read_rules separated absent from corrupt; _read_rules_schema returned None for both, so _catalog_problems returned [] and a corrupt oold-rules.schema.json meant the catalogue went unvalidated with nothing reported.

Done. The corrupt case is reported the way _read_rules does.

4. _MUST_LEVELS duplicates the level vocabulary

check_registry.py:104. The split into failure and advice was a hardcoded frozenset, and an unrecognised level silently became WARN.

Done. severity() raises on a level it does not classify, and a test ties both sets to the level enum of every tracked version. This was not hypothetical: NOT RECOMMENDED entered the vocabulary in OO-LD/oold-schema#136 and shipped in rc.3, and the old "anything not a MUST is advice" reading would have absorbed it silently.

5. Validation fetches by default

Half of this was never a gap. make validate has passed --offline since 80ee29a, the commit that added the validator, so there is nothing to change in the Makefile.

What remains is the asymmetry itself, and it is a documentation change. The library's offline parameter defaults to False, which is what enables cross-directory @context resolution, so it is the point rather than an oversight. But it sits oddly beside the vendored meta-schemas, whose stated purpose is that a released version cannot change meaning between runs. Context resolution has no equivalent guarantee, so two runs of one document can disagree if a remote context moves.

  • state the asymmetry where the offline flag is documented: the meta-schemas are pinned, the contexts a document reaches for are not

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions