From 7964b6ddc6707b02b6a1f6096002a51bfd49b70e Mon Sep 17 00:00:00 2001 From: ksdisch Date: Tue, 28 Jul 2026 20:14:42 -0500 Subject: [PATCH] chore: run the offline test suites in CI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This repo ships 12 offline test_*.py suites that need no API key and make no paid calls, and nothing was running them. Copied decay-pin's workflow verbatim — same layout, same uv toolchain — and added the badge the repo had already earned. All 12 suites verified green locally before wiring this up. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01CbbGBe7FBXe2eQZoNygYkz --- .github/workflows/ci.yml | 30 ++++++++++++++++++++++++++++++ README.md | 2 ++ 2 files changed, 32 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..f08b26d --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,30 @@ +# Runs every offline test suite (test_*.py) on push to main and on PRs. +# The suites need no API key and make no paid calls — that's by design; +# they gate everything that does spend (see README "How to re-run"). +name: CI + +on: + push: + branches: [main] + pull_request: + +jobs: + offline-suites: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: astral-sh/setup-uv@v8.3.0 # no floating v8 major tag exists + with: + enable-cache: true + - name: Run all offline test suites + run: | + rc=0 + for f in test_*.py; do + echo "::group::$f" + if ! uv run "$f"; then + echo "FAILED: $f" + rc=1 + fi + echo "::endgroup::" + done + exit $rc diff --git a/README.md b/README.md index 65c9fec..11e69bd 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # ghost-patch +[![CI](https://github.com/ksdisch/ghost-patch/actions/workflows/ci.yml/badge.svg)](https://github.com/ksdisch/ghost-patch/actions/workflows/ci.yml) + Hobby-scale, pre-committed reproduction of **"Obey, Diverge, Collapse"** (arXiv 2607.04537): the claim that code LLMs recognize a wrong-location repair instruction as incorrect, follow it anyway, compound ghost errors across iterative repair passes, and land in a corrupted state that self-guided repair cannot recover — not even back to the original buggy baseline. Fourth in a lineage of reproduce-and-measure projects (forge-gap → decay-pin → lossy-wall); the target paper is days old, unreplicated, and its promised code appendix is absent from v1, so every prompt, filter, and gate here is independently built and disclosed. **Status: v1 COMPLETE — the chain is closed end-to-end (M4 closed 2026-07-11).** Measured on two cheap models — deepseek-chat-v3.1 and qwen3-coder-30b-a3b-instruct — over a frozen 186-problem RunBugRun bank, with every verdict rendered by a script written and dry-run **before** the paid data existed. Lifetime spend: **$1.4244** against a $5.00 guard.