Releases: stgmt/omp-plan-kit
Release list
OMP Plan Kit v1.7.1
OMP Plan Kit v1.7.1
OMP Plan Kit v1.7.1 fixes the Plan Mode deadlock where a turn-budget block (PLAN_VALIDATOR_TURN_BLOCKED) could never be recovered inside the same planning session.
Key changes
- A successfully answered
askquestion now resets the turn budget: proposal count cleared, turn latch released, per-slug repair cycles dropped. A cancelledaskor any other tool result leaves the budget untouched. - All turn-budget and repair-stop messages now prescribe the Plan Mode legal recovery (call
ask, or use native Refine) instead of telling the agent to wait in prose, which the Plan Mode runtime forbids. - No validation semantics changed: limits (
MAX_TURN_PROPOSALS = 4,MAX_FAILED_VALIDATIONS = 3,MAX_SAME_HASH_REPEATS = 2,MAX_NO_PROGRESS_ATTEMPTS = 2) and the sticky latch are unchanged.
Verification
npm run buildpasses and produces deterministicdist/extension.jsbytes.npm run checkpasses.- Plan validator, mutation, convergence (now 8 tests incl. ask-reset), programmer, public hook, hook-mutation, and real-loader handoff scenarios pass.
- The release archive contains exactly
package/LICENSE,package/README.md,package/package.json, andpackage/dist/extension.js. - This release is distributed through GitHub Releases and the OMP marketplace path; it is not published to npm.
Install
omp plugin install github:stgmt/omp-plan-kit#v1.7.1OMP Plan Kit v1.7.0
OMP Plan Kit v1.7.0
OMP Plan Kit v1.7.0 removes the plugin-owned plan-specific LLM advisor and keeps plan handoff deterministic before native OMP review and watchdog logic.
Key changes
- Removed the plugin-owned advisor model lookup, configuration, cache, repair calls, limits, and advisor-only end-to-end suites.
- Kept the public
omp-plan-kit:enter-plan-modeevent on OMP's shared event bus. - Kept the exact exported
PLAN_CORE_TEMPLATEinjection and session-scoped requirement for activated Plan Mode sessions. - Kept fail-closed deterministic validation for missing, malformed, incomplete, or stale plan artifacts.
- Kept the legacy Markdown validation path for sessions that never receive the public Plan Mode event.
- Valid proposals continue to native OMP review and watchdog logic without a second plugin-owned model call.
Verification
npm run buildpasses and produces deterministicdist/extension.jsbytes.npm run checkpasses.- Plan validator, mutation, convergence, programmer, public hook, hook-mutation, and real-loader handoff scenarios pass.
- The release archive contains exactly
package/LICENSE,package/README.md,package/package.json, andpackage/dist/extension.js. - This release is distributed through GitHub Releases and the OMP marketplace path; it is not published to npm.
Install
omp plugin install github:stgmt/omp-plan-kit#v1.7.0OMP Plan Kit v1.6.0
OMP Plan Kit v1.6.0
OMP Plan Kit v1.6.0 makes the machine-readable plan core mandatory for proposals from sessions that entered OMP Plan Mode, while preserving the existing Markdown path for direct and legacy callers.
Key Changes
1. Mandatory plan core at Plan Mode entry
- The public
omp-plan-kit:enter-plan-modeevent now injects the exact exportedPLAN_CORE_TEMPLATEinto the hidden plan-mode instructions. - The same activation records a session-scoped requirement before
xd://proposecan proceed. - The template keeps the stable JSON keys
sections,context,approach,action,target,verification,command, andexpects; values may use any language.
2. Fail-closed handoff
- An activated session without a line-1 JSON core is blocked with
PLAN_CORE_REQUIRED. - Malformed, unterminated, or incomplete required cores are blocked with
PLAN_CORE_INVALIDand field-level diagnostics. - These failures occur before the bounded advisor and before native OMP review.
3. Compatibility and lifecycle
- Sessions that never observe the public Plan Mode event retain the existing Markdown validation contract.
- Requirement state is isolated by session, replaced by newer activations, and cleared on
session_shutdown. - External event subscribers, activation deduplication, late-listener rejection, and both OMP plugin load orders remain covered.
Verification
npm run buildandnpm run checkpass.- Validator and mutation suites pass with every declared mutant killed.
- Real-loader hook and hook-mutation suites pass; all requirement/template mutants are killed with non-zero broker calls.
- Real in-process handoff passes strict missing/malformed/incomplete/valid-core scenarios, native review dispatch, legacy Markdown compatibility, advisor ordering, cache behavior, and convergence behavior.
- Rebuilt
dist/extension.jsis deterministic and included in the release package.
Install
omp plugin install github:stgmt/omp-plan-kit#v1.6.0OMP Plan Kit v1.5.0
OMP Plan Kit v1.5.0
OMP Plan Kit v1.5.0 removes the last language-coupled surface of plan validation: plans may now carry an optional machine-readable JSON core, and when it is present the validator checks the data instead of parsing prose.
Key Changes
1. Machine-readable plan core (opt-in, JSON front-matter)
- A plan may start with a
--- { ... } ---JSON block describingsections.context,sections.approach(steps with exacttargets), andsections.verification(proofs withcommandand observableexpects). - With a valid core, the validator validates the DATA and skips Markdown entirely: a plan whose headings and body are entirely in Russian (or any language) passes with zero issues.
- Keys are format literals (like YAML keys) and are not translated; values are free language. Unknown extra keys are ignored.
2. Fail-closed core handling
- The block must start at line 1 and close within the first 100 lines.
- Invalid JSON inside the block produces
PLAN_CORE_INVALIDwith the exact violated field named in the repair packet — it is never silently parsed as Markdown. - A leading
---without a closing fence falls back to the Markdown path.
3. Design basis
- Closes the critique that marker-token whitelists (v1.3.1) and even positional rules (v1.4.0) left heading literals language-coupled: with the core, validation becomes schema checking — the same validation-by-construction technique used by GitHub Spec Kit templates and Copilot Workspace's structured plan objects.
- Competitor and literature research with sources:
audit-reports/research-competitor-plan-validation-2026-09-05.md(LLM-Modulo external-verifier principle; Gherkin language registry evaluated and not needed; LLM extraction rejected as nondeterministic).
Compatibility
- Strictly opt-in: plans without front-matter validate exactly as in v1.4.0. Works with OMP >= 17.3.7; no new runtime dependencies (the core is plain JSON).
Verification
- Full battery green:
npm run check, validator e2e (incl. core-path cases), convergence controller, programmer mutations, advisor contract, real in-process handoff, BDD mutation suite (12/12 mutants killed, includingM-drop-core-path,M-core-lenient-context,M-core-skip-expects, clean-environment run). - Build is deterministic: committed
dist/extension.jsequals a freshbun run build.
Install
omp plugin install github:stgmt/omp-plan-kit#v1.5.0OMP Plan Kit v1.4.0
OMP Plan Kit v1.4.0
OMP Plan Kit v1.4.0 makes plan verification language-neutral. The expected-result check after a fenced command block no longer depends on a marker word in any specific language — it is positional: the line immediately following the block (blank lines skipped) states the observable result, in whatever language the author writes.
Why
The previous design required a marker token after every fenced command block: Expected: (v1.2.0), then Ожидаемо: (v1.3.0, the wrong Russian form), then Ожидается: (v1.3.1). Each release extended a whitelist one word at a time, and every world language not on the list reproduced the same production failure seen on 2026-09-05: a correct plan rejected three times until the repair budget ran out. A whitelist cannot close this bug class — this release removes the mechanism.
Key Changes
1. Positional verification proof (VERIFICATION_NOT_ACTIONABLE form 2)
- A non-empty fenced command block must be followed (blank lines skipped) by a non-empty result line in ANY language:
Erwartet: alle Tests grün,预期:全部通过,всё зелёное— all pass without any marker. - Legacy markers
Expected:/Ожидается:/Ожидаемо:still work — they are ordinary result lines now, not required keywords. - A Markdown heading right after the block is structure, not a result, and does not qualify. A fenced block with nothing after it still fails. An empty fenced block (no command) still fails.
2. Repair hint states the real contract
- The
VERIFICATION_NOT_ACTIONABLEhint now says: a fenced command block followed immediately by a line stating the observable result (any language; markers accepted but not required).
3. Plan-format language contract, written down
- Section headings (
## Context,## Approach,## Verification) are format keys, like YAML keys: they stay exact English literals and are not translated. Plan body text is free language. The validator never judges body prose language.
4. Proof: scenario × mutation coverage
- The BDD mutation suite now kills three new defect classes: restoring the marker-token requirement, accepting a heading as a result, and dropping the non-empty-block guard. Scenarios cover German and Chinese result lines, blank-line tolerance, missing result lines, and headings after blocks.
Compatibility
- Strictly widening: every plan accepted by v1.3.1 remains accepted. Plans whose result lines were previously rejected for language reasons now pass. No breaking changes; works with OMP >= 17.3.7.
Verification
- Full battery green:
npm run check, validator e2e, convergence controller, programmer mutations, advisor contract, real in-process handoff, and the BDD mutation suite (9/9 mutants killed, clean-environment run). - Build is deterministic: committed
dist/extension.jsequals a freshbun run build.
Install
omp plugin install github:stgmt/omp-plan-kit#v1.4.0OMP 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.1OMP Plan Kit v1.3.0
OMP Plan Kit v1.3.0
OMP Plan Kit v1.3.0 introduces deterministic actionable plan contracts for Oh My Pi (OMP) plan mode, ensuring every plan step identifies an exact target and verification contains observable, actionable proof before invoking the AI plan advisor.
Key Changes
1. Approach Step Target Verification (APPROACH_TARGET_MISSING)
- Every step in
## Approachmust include an exact target using inline code outside code fences:- Path indicators:
/or\(e.g.src/file.ts,GET /api/orders,.\build\run.exe); - Anchor / symbol delimiters:
#(e.g.src/plan-validator.ts#validatePlanStructure); - Namespace delimiters:
::(e.g.crate::module::func); - Function calls:
name()(e.g.validatePlanStructure()); - Identifier chains:
name.member(e.g.PlanIssue.code,package.json); - Interface paths:
Name > Child(e.g.Settings > Billing).
- Path indicators:
- Step breakdown: H3 headings if present; otherwise top-level numbered list items (
1./1)); otherwise the entire section is evaluated as one step. - Pinpoints exact line numbers of missing targets and suggests concrete actionable examples.
2. Actionable Verification Proof (VERIFICATION_NOT_ACTIONABLE)
- The
## Verificationsection must contain at least one verifiable proof in either of two supported forms:- Inline action followed by an observable result:
<command or exact surface>→<observable expected result>(also accepts=>or->); - A non-empty fenced code block followed immediately by a non-empty
Expected: <observable result>orОжидаемо: <observable result>line.
- Inline action followed by an observable result:
- CLI allowlists are deliberately avoided: actions can be shell commands, API routes, browser UI screens (
Settings > Billing), TUI states, or manual verification steps.
3. All-Errors Repair Packet & Dependency Suppression
- New checks integrate into the single-pass validator: both missing targets and non-actionable verification are reported together with structural errors in a single repair packet.
- Dependent errors are suppressed: if
ApproachorVerificationis missing, empty, or duplicated, secondary target and actionability errors are omitted. - Issue signatures remain stable across cosmetic line-number and whitespace shifts.
4. Non-Goals & Architecture Integrity
- No custom non-native sections added: plans strictly follow the five canonical OMP sections (
Context,Approach,Critical files & anchors,Verification,Assumptions & contingencies). - No synthetic identifier schemes (FR/AC/T) enforced.
- No filesystem existence checks performed during plan validation (targets may be created during implementation).
- No LLM free-text meaning analysis in validator: deterministic token checks guard the boundary; semantic critique is handled by the bounded AI advisor.
Installation
Install as a user-scoped OMP plugin:
omp plugin install github:stgmt/omp-plan-kit#v1.3.0Verify installation:
omp plugin list --jsonRollback
To rollback to v1.2.0:
omp plugin uninstall omp-plan-kit
omp plugin install github:stgmt/omp-plan-kit#v1.2.0OMP Plan Kit v1.2.0
OMP Plan Kit v1.2.0
OMP Plan Kit v1.2.0 introduces deterministic batch structural plan validation and bounded repair convergence for Oh My Pi (OMP) plan mode.
Key Changes
1. Batch Structural Plan Validator (src/plan-validator.ts)
- Enforces canonical Markdown
##sections outside code fences:- Required in order:
## Context,## Approach,## Verification - Optional constrained placement:
## Critical files & anchors(strictly betweenApproachandVerification),## Assumptions & contingencies(strictly afterVerification)
- Required in order:
- Returns all independent structural errors in a single actionable repair packet, rather than failing fast on the first error.
- Suppresses dependent errors when sections are missing.
- Provides stable issue signatures based on sorted
code:sectionpairs, ignoring line-number shifts from cosmetic edits.
2. Bounded Repair Convergence Controller (src/extension.ts)
- Prevents infinite repair loops with hard, deterministic limits:
-
MAX_FAILED_VALIDATIONS = 3: maximum 3 failed validation attempts per slug; -
MAX_SAME_HASH_REPEATS = 2: maximum 2 repeated proposals of an unchanged invalid plan; -
MAX_NO_PROGRESS_ATTEMPTS = 2: maximum 2 consecutive proposals without reducing the issue count; -
MAX_TURN_PROPOSALS = 4: maximum 4 proposals per user turn across all slugs before turn-blocking ([PLAN_VALIDATOR_TURN_BLOCKED]).
-
- Implements a sticky turn latch: preserves rich
[PLAN_VALIDATOR_STOPPED]diagnostics in the transcript without invokingctx.abort()(which would overwrite error messages with a generic abort failure), while ensuring subsequent attempts fail fast in$O(1)$ time without re-running the validator or advisor. - Fresh budget on new prompt or native
Refine plan:before_agent_startresets turn and cycle blocks.
3. Pipeline Order & Advisor Savings
- Strict execution order: Preflight (0 tokens) → Plan Validator (0 tokens) → Advisor LLM Review (bounded) → OMP Native Review Overlay.
- Structurally invalid plans never invoke the LLM advisor, saving 100% of advisor tokens on malformed plans.
4. Batch Tool-Call Semantics Note
- Documents OMP's batch tool-call execution model: all
tool_callhooks execute before any tool writes files to disk. - Models must emit
write local://<slug>-plan.mdandwrite xd://propose <slug>in separate sequential turns.
Installation
Install as a user-scoped OMP plugin:
omp plugin install github:stgmt/omp-plan-kit#v1.2.0Verify installation:
omp plugin list --jsonRollback
To rollback to v1.1.0:
omp plugin uninstall omp-plan-kit
omp plugin install github:stgmt/omp-plan-kit#v1.1.0OMP Plan Kit v1.1.0 — advisor exit-gate
OMP Plan Kit v1.1.0 — advisor exit-gate
Advisor is now an economical exit-gate that runs only at plan handoff.
What changed
Economy
- Intermediate planning steps (todo updates, reads, scratch edits) spend 0 advisor tokens.
- Malformed payloads (bad slug, path traversal, missing plan file) are blocked as
PLAN_HANDOFF_*with 0 tokens. - The plan advisor runs strictly on
write xd://propose <slug>against the completed plan artifact.
Gate
REJECTverdict -> hard block[PLAN_ADVISOR_BLOCK] Советник отклонил план: <reason>before the OMP human-review overlay opens; the agent stays in plan mode with corrective feedback.APPROVEverdict -> handoff passes through to OMP core dispatch unchanged.- In-session SHA-256 cache: re-proposing an unchanged plan spends 0 additional tokens.
Technical
- Reworked
src/extension.tsaroundreviewProposedPlan()with a bounded prompt (redacted user objective + redacted plan excerpt) and nativecomplete()(maxTokens: 160,disableReasoning: true, per-session call cap3, timeout15s). Removed thetodo-as-trigger path and negative-scope regex heuristics. - Cleaned
src/extension.ts(removed tiny wrapper functions and the localisRecordguard). - Moved E2E suites from
scripts/totests/:e2e-programmer.mjs,e2e-advisor-contract.mjs,e2e-real-plan-handoff.mjs,e2e-advisor-live.mjs.scripts/now contains only install/uninstall helpers. - Added project rule
.omp/rules/tests.md(test discipline) and audit reportaudit-reports/plan-advisor-exit-gate-2026-09-03.md. - Updated
package.json,CHANGELOG.md,README.md,llms.txt.
Verification
All four suites pass; live suite executed on openai-codex/gpt-5.6-sol:
tests/e2e-programmer.mjs— 8 mutation cases, 3 profiles, stale-plan control.tests/e2e-advisor-contract.mjs— zero waste on syntax errors/todo, REJECT/APPROVE paths, bounded request shape, cache hits.tests/e2e-real-plan-handoff.mjs— real OMPdispatchResolutionDevice/resolveApprovedPlanproof: a rejected defective plan never reaches core, an approved clean plan opens the human review overlay.tests/e2e-advisor-live.mjs— live model rejected defective out-of-scope plan, approved a concrete in-scope plan with verification.
Install: omp plugin install github:stgmt/omp-plan-kit#v1.1.0
Profiles: node scripts/install-all-profiles.mjs
Evidence: audit-reports/plan-advisor-exit-gate-2026-09-03.md
v1.0.1 — aligned final v1.0 release
OMP Plan Kit v1.0.1
This patch release aligns the package, public install instructions, release tag, and review evidence on one main commit.
Included
- deterministic
xd://proposestale-plan guard; - exact session-local plan artifact validation;
- bounded native OMP advisor with disabled reasoning and a 160-token cap;
- OMP Plan Kit roadmap from handoff safety to plan-pomogator workflow and OMP Spec Kit synchronization;
- public README, AI-readable
llms.txt, security/contribution docs, and release evidence.
Manual verification
- OMP plugin manifest accepted by the official plugin manager.
- User installation verified in the default OMP profile.
- Manual mutation and edge E2E passed against the installed package and OMP's real loader/resolver.
- Native OMP advisor E2E passed with
openai-codex/gpt-5.6-sol, disabled reasoning, and 160 output tokens. - Rollback/reinstall and final default-profile verification passed.
Install
omp plugin install github:stgmt/omp-plan-kit#v1.0.1Release binding
Tag commit: 6804de3df7be5f859018b02f2d6f63ea0f999f88.
Attached artifact: omp-plan-kit-1.0.1.tgz.
SHA-256: 0d050d916ef0370aca6a0c6dc11d3a26ca797835373c348ef5aaf8e3251667c2.