Skip to content

Releases: juan294/sutura

v0.3.2

Choose a tag to compare

@juan294 juan294 released this 23 Sep 10:39
96d3d2e

Fixed

  • The failing CI command now survives log truncation: the classifier's 20 KB front-cutting tail carries the nearest Run/$ header past the byte cap instead of dropping it, and the adapter falls back to a custom-named step's ##[group]Run header when the step's display name never matches. Fixtures are the real failed-step windows of 15 gated fleet runs; 16 of 17 measured gated fleet runs now yield a real command (#150).
  • The dependency snapshot now admits the files named in pnpm.patchedDependencies, with the same refusals as file:/vendor directories; preparation-failure excerpts are redacted before publication, and redaction now recognises npm _authToken=/_auth= values and npm_ granular tokens.
  • The sandbox Git baseline now adds its manifest with git add --force, so files a repository tracks under its own .gitignore (the cc-rpi layout: .claude/**, docs/agents, docs/research) are no longer refused; the refusal stopped the run at infra-stop, and 9 of 19 local fleet checkouts track such paths (#152).
  • The Case Lab controller is now pinned to the commit that carries the release rather than the tag, so the demo's controller checkout reads a release.json naming the newest release instead of the previous one; the first live publish after every tag no longer fails.
  • The Case Lab release-check gate reads the controller commit's release.json from git when gh is unauthenticated, instead of failing on the GitHub contents API.
  • The release gate retries the --unshallow deepen fetch on .git/shallow.lock contention, fixing a collision when the pre-push hook runs concurrently on a shallow CI checkout.
  • The Case Lab release check deepens a shallow checkout before testing tag reachability; in CI a one-commit checkout made every earlier tag read as unreachable and the check refused the release squash with "no v* tag is reachable".

Sutura v0.3.1

Choose a tag to compare

@juan294 juan294 released this 17 Sep 09:46
e724f3b

Added

  • Repair proposals and diagnosis hypotheses request response_format: json_object instead of json_schema; the proposal and hypothesis contracts are enforced locally (parseProposal, validateHypotheses). Provider contract sutura-super-repair-v6. Reason: on 2026-09-16 Nebius Token Factory's schema-guided decoding began dropping string escapes ({n return for {\n return) on every Nemotron model, producing uncompilable patches; the same request with json_object is correct. Raw evidence in packages/core/src/llm/__fixtures__/nebius-json-schema-drift-2026-09-16/; replay compares the two request shapes as one so bundles captured before the change still replay.

  • Optional GPT-6 Astra second opinion on the adjudication gate: when OPENAI_API_KEY is configured, a different provider re-runs the same adversarial audit as a veto-only check (it can reject a Nemotron approval but never approve on its own); absent, failed, timed out, or over its own USD 0.30 budget, it is recorded skipped and the run proceeds on Nemotron alone. The runtime model remains Nemotron on Nebius Token Factory.

  • Optional TypeSafe Jev calibrated audit as a third, veto-only voice on the adjudication gate: when TYPESAFE_API_KEY is configured, a System One decision model answers the same adversarial question as a typed choice with calibrated probabilities (it can reject a Nemotron approval when P(green-wash) is at or above 0.5 at confidence at or above 0.7, but never approve on its own); uncertain, absent, failed, or over its own USD 0.02 budget (repair-typesafe-audit-usd), it is recorded and the run proceeds on the other gates. The call is recorded as an optional typesafe replay boundary.

  • The public Case Lab tracks the newest release tag: release:case-lab gate wired into pre-push and CI, release-mode Placebo benchmark (--release-tag), and the Case Lab live-run cap raised to 24 runs / USD 18 per day.

Fixed

  • Replay bundle identity checks (publish.ts, replay.ts) compare actionSha against the release commit instead of the demo commit, fixing a v0.3.0 regression that blocked every live Case Lab dispatch from publishing a result.
  • release:case-lab deploy links to the correct Vercel project by name before building or deploying, instead of silently creating a new one when no local link exists.
  • Replay compares updateCheckRun without the checkout-derived check annotations, so a real live bundle replays deterministically; the v0.3.0 Case Lab live bundle (run 34977342282) is now a named replay fixture for the gave-up path and for the release-bound actionSha guard.
  • release:case-lab resolves repository paths against the repository root and builds @sutura/case-lab before verify-pin, so check and bump behave the same from any working directory or fresh worktree.
  • runTest no longer discards a trusted test run's evidence when its combined stdout+stderr exceeds the 16KB cap; it now always records the bounded, truncated output and lets the actual exit code decide pass/fail, instead of refusing a possibly-correct patch outright.
  • The public demo's repair-monitor workflow had lost its case-lab/ and matrix/ branch guards and its pinned Action reference; both are restored, and the demo's own contract tests are now shape-based instead of asserting literal pinned values, so they cannot silently go stale the same way again.

v0.3.0

Choose a tag to compare

@juan294 juan294 released this 14 Sep 16:25
c94eee2

Added

  • Add cumulative fleet dogfood metrics with bounded evidence collection, collaborator-repository support, and separate counts for attempted, claimed, provider-invoked, search-started, fixed, non-repairable, and unknown runs.
  • Add structured terminal-failure telemetry for Action identity, target commit and pull request, failure code and stage, runtime detection, provider calls, sandbox operations, search state, and terminal-comment state.
  • Add SUTURA_DISABLED=true as a repository-level opt-out for deferred or unsupported projects.

Fixed

  • Detect the project runtime from root manifests before scanning nested files, while bounding traversal and retained evidence for large monorepositories.
  • Bind replay and terminal evidence to the installed Sutura Action commit instead of the default-branch workflow SHA.
  • Complete an existing pull-request or commit comment when a claimed repair attempt terminates unexpectedly.
  • Preserve infrastructure stops and distinguish non-repairable CI conclusions in fleet metrics.
  • Let the CLI bundle and Placebo patch-sweep verification finish before their test processes exit.

Changed

  • Record the clean Stage 3 development and validation measurement: 80/80 terminal results, 15/15 deceptive patches rejected, zero false approvals, and zero infrastructure stops.
  • Refresh production and development dependencies.

Retired guidance: none.

Sutura v0.2.1

Choose a tag to compare

@juan294 juan294 released this 13 Sep 10:02
5fe1649

Sutura v0.2.1 expands verified self-healing CI with supplied-patch verification, controller-owned behavioral challenges, bounded two-file repairs, deterministic replay, and candidate-bound evaluation. It also adds the public Case Lab and submission media, hardens benchmark recovery and Action outputs, closes four CodeQL regex findings, and refreshes development dependencies.

The completed 80-case development measurement observed zero false approvals, rejected 15/15 deceptive patches, and classified 10/10 flakes. Repair rate was 33/42 (78.6%), and hidden repair preservation remained incomplete, so these results are reported as development evidence rather than release-acceptance proof.

Added

  • Reject ES module import/export syntax introduced into CommonJS files as an unsafe repair, naming the target module system and the policy violation.
  • Add a develop push freeze (pnpm run push-freeze on|off|status) shared across worktrees; .husky/pre-push refuses to push while a paid live run has the branch frozen.
  • Verify patches supplied by other agents through the same isolated reproduction, challenge, policy, clean-rerun, and audit pipeline used for generated repairs.
  • Add controller-owned behavioral challenges, bounded two-file repair transactions, deterministic replay views, and candidate-bound evaluation tooling.
  • Add the public Case Lab, sanitized ATIF and Data Lab exports, maintainer-study tooling, and a complete Devpost submission gallery.

Fixed

  • Pin the Python repair runtime to an importable Linux image manifest and prove Python, uv, Git, and tar availability before live evidence runs.
  • Preserve safe vendored file:vendor/... packages during isolated dependency preparation so grounded upstream repairs can run.
  • Emit bounded terminal failure evidence when the Action or matrix stops before a normal case file exists.
  • Keep unavailable cost evidence as unknown instead of reporting an unproven zero.
  • Retry one invalid diagnosis response under the same strict schema and cost envelope, then fail closed.
  • Recover adaptive search branches that repeat an identical proposal by requesting a materially different repair instead of stalling.
  • Preserve cumulative benchmark spend and pending GitHub jobs across restarts, including delayed workflow-title recovery and terminal notifications.
  • Preserve the primary Action outcome when later output writes fail, and harden four CodeQL-reported regular expressions against polynomial backtracking.

Changed

  • A Super reply that reaches the completion-token limit now ends only its own search branch; the search stops early only when such replies outnumber applied proposals.
  • Split hidden repair preservation from deceptive-patch rejection in the v2 Placebo score contract.
  • Require the provider and Python runtime canaries in candidate and dogfood gates.
  • Make candidate benchmark and matrix evidence bind to measured package content, exact commits, and complete terminal outcomes.
  • Expand Placebo v0.2 to a frozen 100-case inventory with development, validation, flake, deception, upstream, and hidden-preservation strata.
  • Refresh development dependencies and document the completed 80-case development measurement, including its failed repair and hidden-preservation gates.

Retired guidance: none.

Sutura v0.2.0

Choose a tag to compare

@juan294 juan294 released this 31 Aug 11:46
a943ded

Sutura v0.2.0 delivers the bounded repair agent and its verified production release path.

Highlights

  • Bounded adaptive repair with exact source targeting, automatic patch verification, and independent final audit
  • Deterministic model routing, provider canary, progressive flake triage, and Nebius Token Factory contracts
  • Verified JavaScript and Python repair support with adversarial Placebo coverage
  • Deterministic replay capture, sanitized ATIF exports, GitHub Checks, and audit-only mode
  • Candidate and public package verification, external release matrices, fail-closed evidence, and the canonical 10/10 live repair ledger
  • npm 11 and npm 12 candidate-package verification
  • Clear GitHub Actions labels for repair requested, unnecessary, and not triggered states

Retirement ledger: none.

Sutura v0.1.1

Choose a tag to compare

@juan294 juan294 released this 28 Aug 12:42
ff69e96

Sutura v0.1.1 gives the GitHub Action a unique Marketplace name.

It repairs actionable failures from pull requests, pushes, schedules, and manual dispatches. Direct runs receive evidence on the failing commit.

Sutura rejects stale branch heads before repair. The installer publishes as sutura@0.1.1 through npm trusted publishing.

Sutura v0.1.0

Choose a tag to compare

@juan294 juan294 released this 28 Aug 11:50
9c29512

Sutura verifies AI-generated CI repairs before it opens a pull request.

This first public release adds:

  • A root GitHub Action for failed workflow runs.
  • The sutura npm installer and doctor command.
  • Repository-owned Nebius, ConTree, and optional Tavily credentials.
  • Isolated reproduction, repair races, and adversarial audit.
  • Evidence-backed pull requests that require human review.

Install it with npx sutura@latest init.

ConTree access remains an access-controlled prerequisite during the public beta.