Skip to content

docs(claude): add Strict WSDL parity principle + guard test (#199)#200

Merged
axisrow merged 1 commit into
mainfrom
docs/strict-wsdl-parity-claude-md
May 20, 2026
Merged

docs(claude): add Strict WSDL parity principle + guard test (#199)#200
axisrow merged 1 commit into
mainfrom
docs/strict-wsdl-parity-claude-md

Conversation

@axisrow

@axisrow axisrow commented May 20, 2026

Copy link
Copy Markdown
Owner

Summary

Closes #199 — locks the «strict WSDL parity, no helper/legacy skip categories» policy in docs and CI so the bidmodifiers.delete mis-classification cannot regress.

Why

bidmodifiers.delete was incorrectly tagged as «Helper/legacy surface; not part of strict WSDL parity claim» in DRY_RUN_PAYLOAD_EXCLUSIONS and propagated through PR #185 body + #176 audit + final milestone report — until PR #194 finally removed the entry. The code-fix landed, but the policy gap that allowed the mis-classification in the first place was never closed.

Change

  1. CLAUDE.md — new «Strict WSDL parity» convention in Key Conventions, listing the only five legitimate permanent exclusion categories (read-path *.get / runtime-deprecated / v4-not-in-v5-wsdl / custom non-RPC / covered by test_dry_run.py). Explicitly bans helper/legacy/not-part-of-strict-WSDL-parity rationale as mis-classification.

  2. tests/test_api_coverage.py — new test_dry_run_exclusions_have_no_helper_or_legacy_rationale guard that fails if any rationale uses banned phrases. Verified both positive (passes on clean main) and negative (temporarily added Helper/legacy surface ... entry and it failed with clear offender list + 0.3.8 — Strict WSDL parity: убрать категорию «Helper/legacy» из DRY_RUN_PAYLOAD_EXCLUSIONS #199 ref).

Verification

  • pytest -q tests/test_api_coverage.py::TestApiCoverage::test_dry_run_exclusions_have_no_helper_or_legacy_rationale → 1 passed.
  • Negative manual check confirmed: guard catches helper/legacy rationale with clear error message.
  • Offline suite → 684 passed, 5 skipped (was 683 — net +1 from the new guard).
  • ruff check tests/test_api_coverage.py → clean.

Closes #199. Two artifacts to make the strict-parity policy stick:

1. CLAUDE.md — new 'Strict WSDL parity' convention listing the five
   legitimate exclusion categories; explicitly bans «helper» /
   «legacy» / «not part of strict WSDL parity» rationale as
   mis-classification (as happened with bidmodifiers.delete pre-#194).

2. tests/test_api_coverage.py — guard test
   test_dry_run_exclusions_have_no_helper_or_legacy_rationale that
   fails if any rationale in DRY_RUN_PAYLOAD_EXCLUSIONS contains the
   banned phrases.

The actual code-fix landed in PR #194 — this PR locks the policy in
docs + CI so it cannot regress.
Copilot AI review requested due to automatic review settings May 20, 2026 09:20
@axisrow
axisrow merged commit 7ba51bb into main May 20, 2026
7 checks passed
@axisrow
axisrow deleted the docs/strict-wsdl-parity-claude-md branch May 20, 2026 09:20

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR formalizes the “Strict WSDL parity (no helper/legacy skip categories)” policy in documentation and adds a CI guard test to prevent regressions in DRY_RUN_PAYLOAD_EXCLUSIONS rationale wording.

Changes:

  • Added a new tests/test_api_coverage.py guard that fails if any DRY_RUN_PAYLOAD_EXCLUSIONS rationale contains banned “helper/legacy/strict parity” phrasing.
  • Documented the strict parity principle and the intended (limited) set of legitimate exclusion categories in CLAUDE.md.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
tests/test_api_coverage.py Adds a test that enforces banned rationale phrasing in DRY_RUN_PAYLOAD_EXCLUSIONS.
CLAUDE.md Documents the strict WSDL parity principle and references the new guard test.

Comment thread CLAUDE.md
Comment on lines +46 to +54
**Strict WSDL parity:** `DRY_RUN_PAYLOAD_EXCLUSIONS` in `tests/api_coverage_payloads.py` must NOT contain any entry whose rationale claims the CLI surface is a «helper», «legacy», or «not part of strict WSDL parity». If the WSDL declares the operation, the CLI mirrors it 1:1 with a `PAYLOAD_CASES` fixture. Legitimate permanent exclusions are limited to:
- read-path `*.get` (covered by SelectionCriteria tests);
- runtime-deprecated methods (see `RUNTIME_DEPRECATED_METHODS`);
- v4 methods that have no v5 WSDL (covered by `direct_cli/v4_contracts.py`);
- custom non-RPC endpoints (e.g. `reports.get` — TSV stream);
- methods explicitly covered by `tests/test_dry_run.py::test_<service>_<op>_payload`.

A guard in `tests/test_api_coverage.py::test_dry_run_exclusions_have_no_helper_or_legacy_rationale` enforces this — any rationale outside those five categories that uses the banned phrasing is a mis-classification: write a `PAYLOAD_CASES` fixture instead. See post-mortem in issue #199.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0.3.8 — Strict WSDL parity: убрать категорию «Helper/legacy» из DRY_RUN_PAYLOAD_EXCLUSIONS

2 participants