Skip to content

OMP Plan Kit v1.3.1

Choose a tag to compare

@github-actions github-actions released this 05 Sep 17:48
· 16 commits to main since this release

OMP Plan Kit v1.3.1

OMP Plan Kit v1.3.1 is a bugfix release for plan validation and turn-budget accounting, driven by a production failure on 2026-09-05: a correct Russian-language plan was rejected three times (each attempt made progress) until the repair budget was exhausted, and the plan had to be approved manually.

Key Changes

1. Natural Russian verification token accepted (Ожидается:)

  • Form 2 of VERIFICATION_NOT_ACTIONABLE (fenced code block followed by an expected-result line) now accepts Ожидается: <result> alongside Expected: <result> and the v1.3.0-documented Ожидаемо: <result>.
  • Expected: and Ожидаемо: remain accepted for backward compatibility; bullet-list (- ) and numbered (1)) continuations before the token stay supported.

2. Repair hints state the exact contract

  • SECTION_MISSING hint now says the heading line must be exactly ## <Section> — the English literal; translated, bilingual, or decorated headings are not matched. Previously the hint read as "add a section about Context", which led the author model to try ## Context / Контекст.
  • VERIFICATION_NOT_ACTIONABLE hint now names every accepted token: Expected: / Ожидается: / Ожидаемо:.

3. Turn budget counts only preflight-passed proposals

  • MAX_TURN_PROPOSALS (4 per turn) in the convergence controller now counts only xd://propose calls that pass the deterministic preflight. Malformed payloads (full Markdown, empty, whitespace, path traversal — 0 disk reads) and missing exact artifacts (one fs.stat) are rejected uncounted.
  • Before this fix, four malformed calls burned the whole per-turn budget and latched PLAN_VALIDATOR_TURN_BLOCKED, so a valid plan in the same turn could not be submitted at all. The shipped tests/e2e-programmer.mjs failed on origin/main for exactly this reason.
  • Sticky-latch semantics are unchanged: the 5th counted proposal trips the budget, further calls get a constant-time latch response, and a new user prompt or native Refine resets the turn.

4. New BDD scenario × mutation test suite

  • tests/e2e-validator-mutations.mjs: 10 Given/When/Then scenarios run against the real build (baseline) and against 11 source mutants (token alternation, bullet prefix, repair hints, heading exactness, immediate-Expected rule, budget ordering, budget bounds, sticky latch). Every mutant must be killed by at least one scenario or the suite fails. Registered as e2e:mutations and wired into check and e2e:all.
  • Extended coverage in tests/e2e-plan-validator.mjs (Russian tokens plain and bulleted, exact-literal hint assertions, bilingual-heading rejection, token-list hint assertion) and tests/e2e-programmer.mjs (end-to-end budget ordering: uncounted rejections, four counted attempts, 5th trip, sticky latch — schema omp-plan-kit-programmer-e2e@3).
  • The mutation harness loads bundles through OMP's loadLegacyPiModule (same as every other suite), so it works in clean environments without ambient module paths.

Verification

  • Reproduction matrix of the production failure passes clean: Ожидается: / Expected: / Ожидаемо: all accepted; bilingual and translated headings correctly rejected with the exact-literal hint.
  • Full battery green: npm run check, validator e2e (23 tests), convergence controller (7 tests), programmer mutations, advisor contract, real in-process handoff, BDD mutation suite (11/11 mutants killed).
  • Build is deterministic: committed dist/extension.js equals a fresh bun run build.

Compatibility

  • No plan-format breaking changes: all previously accepted plans remain accepted; the Russian acceptance set is strictly wider.
  • Works with OMP >= 17.3.7; no new runtime dependencies.

Install

omp plugin install github:stgmt/omp-plan-kit#v1.3.1