Skip to content

Wire the vs-context7 drift check into CI so req-4's mechanical guarantee fires at the PR gate #48

Description

@kiki830621

Problem

The compare_context7.py --emit-readme --check drift guard (and its test_emit_readme_block_matches_committed_readme twin) is genuinely fail-loud when run, but .github/workflows/ci.yml runs only swift build + swift test — the Python suite is manual/periodic by project policy (CLAUDE.md: "CI runs swift build + swift test per push/PR"). So a reviewer who hand-edits the README competitive chart's numbers merges green through CI; the drift is caught only if a human independently remembers to run pytest or --check.

The verify ensemble (requirements + devil's-advocate lenses, #46) flagged this as the guard is least likely to fire precisely when it is needed — nothing prompts a --check after a prose/README edit, unlike sync-test-counts.sh which a dev naturally triggers when touching tests.

Why this is a separate issue (not part of #46)

#46's locked scope was README-top + chart + harness-generated, and its framing was explicitly "à la sync-test-counts.sh" — which is also manual. Making the Python suite (or a targeted --emit-readme --check step) part of CI is a pre-existing project CI-policy decision that predates #46 and affects the whole Python suite, not just the chart.

Options

  • Add a lightweight python3 evals/look-up/compare_context7.py --emit-readme --check step to ci.yml (cheapest — just the chart drift, no claude -p cost).
  • Or run the full pytest evals/look-up/tests/ in CI (broader, but the suite is deliberately kept off the critical path because run_eval.py makes real claude -p calls — note the unit tests don't).

Expected

A decision + (if yes) a CI step so the "measured, never asserted" guarantee is enforced mechanically at the PR gate, not just on a remembered manual run.


Source: surfaced during /idd-verify #46 (requirements + devil's-advocate lenses). Non-blocking follow-up — beyond #46's locked scope.

Current Status

Phase: closed (merged + verified; see Closing Summary)

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions