Skip to content

Multi-language SCIP oracle + Python (small-corpus runner) #164

@skakri

Description

@skakri

Tracking epic for the SCIP-oracle reorg, Python support, and a unified small-corpus oracle runner with a before/after resolution table. Plan: docs/plans/2026-06-15-scip-oracle-multilang-runner.md (local, gitignored).

Goal

  1. Reorganize GitHub Actions (consolidate the two near-duplicate oracle-* workflows; consistent naming + least-privilege permissions).
  2. Add Python indexing + scip-python oracle backend.
  3. One corpus-profile-driven runner over small, real repos (semver / cJSON / requests) emitting a typed before/after resolution report (JSON), with a per-PR Δ-vs-main comment via a glue script. Heavy repos (cargo/kernel) keep producing the Bencher series on release.

Sequenced sub-tasks

  • A1 chore(ci): workflow naming + least-privilege permissions: sweep; bump deprecated actions (independent)
  • C0 feat(oracle): report/profile schema contract + fixture-DB tests — the stabilizer; locks OracleResolutionReport JSON (schema version + provenance envelope + corpus_profile_hash), denominator semantics, and fixture tests for every verdict transition (unresolved→upgraded, unresolved→resolved_external, exact→confirmed, exact→contradicted, oracle-only calls, skipped_drifted, monikers)
  • B1–B5 feat(lang): Python indexing (Language enum, tree-sitter grammar, symbols, edges, policy/fixture/tests incl. the import/alias/decorator bad-signal assertions)
  • B6 feat(oracle): scip-python backend (OracleTool::ScipPython, manifest, argv test)
  • C2 feat(oracle): typed before/after resolution report implementing the C0 contract (TOON + JSON only, no markdown); BMF derived from it
  • C1+C3 feat(ci): corpus-profile-driven oracle.yml + tools/oracle-run.sh with the per-corpus health gate; delete oracle-rust.yml/oracle-kernel.yml/tools/{rust-scip,kernel-c}-oracle.sh
  • C5 feat(ci): tools/oracle-report-md.py glue (JSON→markdown, Δ-vs-baseline, clean baseline-missing degradation) → job summary + fork-safe PR sticky comment
  • C-python test(oracle): small Python corpus profile (package-dir scope, full venv) + validate scip-python resolution

Decisions locked: small corpora run per-PR; heavy corpora → Bencher on release; full venv for the Python corpus; package-dir scope; rag-rat emits JSON/TOON only (markdown via glue); per-report schema version + profile hash; clean baseline-missing degradation; per-corpus health thresholds.

Suggested path: A1 → C0 → (B ∥ C2) → B6 → C1+C3 → C5 → C-python.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions