OMP Plan Kit v1.3.1
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>alongsideExpected: <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_MISSINGhint 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_ACTIONABLEhint 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 onlyxd://proposecalls that pass the deterministic preflight. Malformed payloads (full Markdown, empty, whitespace, path traversal — 0 disk reads) and missing exact artifacts (onefs.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 shippedtests/e2e-programmer.mjsfailed onorigin/mainfor 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 ase2e:mutationsand wired intocheckande2e: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) andtests/e2e-programmer.mjs(end-to-end budget ordering: uncounted rejections, four counted attempts, 5th trip, sticky latch — schemaomp-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.jsequals a freshbun 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