diff --git a/CHANGELOG.md b/CHANGELOG.md index f264855..69c6615 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,26 @@ # Changelog +## [0.14.5] — 2026-09-25 + +From the round-4 trials on 0.14.4 (an ESS retrofit of a stock-reservation service and worktree +onboarding, both isolated). The skills were checked against ess 0.31.0, the newest release, which +changes nothing they describe. + +**`ess`** + +- `ess:retrofitting`: a command the code silently ignores in some state gets no `wrong_state:` + outcome and no error. `synthesize` then reports `ESS-SYNTH-012` for that state and still writes + a scenario requiring that nothing happened, which is the code's behaviour; report it, and do not + add an error the code never raises. The view that invariants need is structural: mark it as such. + +**`worktree`** + +- `worktree:init`: the profile download creates its directory (`curl --create-dirs`) instead of a + separate `mkdir`; any local file works as the profile although `--help` says "committed"; a + headless run uses the directory that holds the current repository as the workspace root and + says so. +- `worktree:managing-worktrees`: always pass `--id` to `gc`. + ## [0.14.4] — 2026-09-25 From the round-3 trials on 0.14.3, the first product fix they led to (worktree 0.7.1), and eight diff --git a/Cargo.lock b/Cargo.lock index 39734cf..13eb26d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,7 +4,7 @@ version = 4 [[package]] name = "agentplugins-check" -version = "0.14.4" +version = "0.14.5" dependencies = [ "clap", "serde", @@ -76,7 +76,7 @@ dependencies = [ [[package]] name = "b10x" -version = "0.14.4" +version = "0.14.5" dependencies = [ "clap", "serde", diff --git a/Cargo.toml b/Cargo.toml index 2a56285..7fb7640 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ resolver = "2" members = ["crates/agentplugins-check", "crates/b10x"] [workspace.package] -version = "0.14.4" +version = "0.14.5" edition = "2021" rust-version = "1.85" license = "Apache-2.0" diff --git a/plugins/aep/.claude-plugin/plugin.json b/plugins/aep/.claude-plugin/plugin.json index 0268df6..8fa7a2f 100644 --- a/plugins/aep/.claude-plugin/plugin.json +++ b/plugins/aep/.claude-plugin/plugin.json @@ -2,7 +2,7 @@ "name": "aep", "displayName": "AEP", "description": "Plan governed work in the AEP artifact store and deliver it in reviewed waves: decomposition, plan critique, reverse engineering, story scoping, implementation and adversarial review.", - "version": "0.14.4", + "version": "0.14.5", "author": { "name": "Beyond10x" }, diff --git a/plugins/aep/.codex-plugin/plugin.json b/plugins/aep/.codex-plugin/plugin.json index 59cc3b2..d121b98 100644 --- a/plugins/aep/.codex-plugin/plugin.json +++ b/plugins/aep/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "aep", - "version": "0.14.4", + "version": "0.14.5", "description": "Plan governed work in the AEP artifact store and deliver it in reviewed waves.", "author": { "name": "Beyond10x" diff --git a/plugins/b10x/.claude-plugin/plugin.json b/plugins/b10x/.claude-plugin/plugin.json index 3f19079..e092d87 100644 --- a/plugins/b10x/.claude-plugin/plugin.json +++ b/plugins/b10x/.claude-plugin/plugin.json @@ -2,7 +2,7 @@ "name": "b10x", "displayName": "Beyond10x", "description": "Set up, upgrade and check the Beyond10x plugins and binaries, route work to them, and create portable plugins.", - "version": "0.14.4", + "version": "0.14.5", "author": { "name": "Beyond10x" }, diff --git a/plugins/b10x/.codex-plugin/plugin.json b/plugins/b10x/.codex-plugin/plugin.json index 1e166eb..47428f8 100644 --- a/plugins/b10x/.codex-plugin/plugin.json +++ b/plugins/b10x/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "b10x", - "version": "0.14.4", + "version": "0.14.5", "description": "Set up, upgrade and check the Beyond10x plugins and binaries, route work to them, and create portable plugins.", "author": { "name": "Beyond10x" diff --git a/plugins/connectors/.claude-plugin/plugin.json b/plugins/connectors/.claude-plugin/plugin.json index 58491a2..17bd38c 100644 --- a/plugins/connectors/.claude-plugin/plugin.json +++ b/plugins/connectors/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "connectors", - "version": "0.14.4", + "version": "0.14.5", "description": "Set up, inspect, and invoke governed integrations through the connectors CLI.", "author": { "name": "Beyond10x" }, "license": "Apache-2.0", diff --git a/plugins/connectors/.codex-plugin/plugin.json b/plugins/connectors/.codex-plugin/plugin.json index 3c2521f..f18966b 100644 --- a/plugins/connectors/.codex-plugin/plugin.json +++ b/plugins/connectors/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "connectors", - "version": "0.14.4", + "version": "0.14.5", "description": "Set up, inspect, and invoke governed integrations through the connectors CLI.", "author": { "name": "Beyond10x" }, "license": "Apache-2.0", diff --git a/plugins/ess/.claude-plugin/plugin.json b/plugins/ess/.claude-plugin/plugin.json index 39a3a04..9902ba6 100644 --- a/plugins/ess/.claude-plugin/plugin.json +++ b/plugins/ess/.claude-plugin/plugin.json @@ -2,7 +2,7 @@ "name": "ess", "displayName": "ESS", "description": "Write, retrofit, validate and project Executable System Specifications, and hold implementations to them with conformance suites.", - "version": "0.14.4", + "version": "0.14.5", "author": { "name": "Beyond10x" }, diff --git a/plugins/ess/.codex-plugin/plugin.json b/plugins/ess/.codex-plugin/plugin.json index 483834a..9102278 100644 --- a/plugins/ess/.codex-plugin/plugin.json +++ b/plugins/ess/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "ess", - "version": "0.14.4", + "version": "0.14.5", "description": "Write, retrofit, validate and project Executable System Specifications, and hold implementations to them with conformance suites.", "author": { "name": "Beyond10x" diff --git a/plugins/ess/skills/retrofitting/SKILL.md b/plugins/ess/skills/retrofitting/SKILL.md index 96f2363..cb948bb 100644 --- a/plugins/ess/skills/retrofitting/SKILL.md +++ b/plugins/ess/skills/retrofitting/SKILL.md @@ -56,7 +56,13 @@ Retrofit-specific rules: does in the code today. No delete path found: `UNMAPPED:`. - **Views follow reads.** One view per read operation clients use; its fields are the fields the response carries. An entity with `invariants` also needs a view holding every state, or the suite - refuses the invariant checks (`ess:specifying`, conformance section). + refuses the invariant checks (`ess:specifying`, conformance section). That view is structural, + not a read the code has: say so in a comment. It is the one view a retrofit may add. +- **A command the code ignores in some state is a synthesis refusal, and that is correct.** When + the code does nothing (no error) for a command in a state its transition does not start from, + declare no `wrong_state:` outcome and no error. `synthesize` then reports `ESS-SYNTH-012` for + that state and still writes the scenario, which requires that nothing happened: the code's + behaviour. Report the refusals; do not add an error the code never raises. - **A service that publishes no events still needs one per success outcome.** `validate` refuses an outcome that neither emits nor names an error (`empty_change`); a view does not count. Declare an event for the fact the outcome produces (`OrderPaid`), leave it out of the component's diff --git a/plugins/worktree/.claude-plugin/plugin.json b/plugins/worktree/.claude-plugin/plugin.json index e6632b1..e51a4e8 100644 --- a/plugins/worktree/.claude-plugin/plugin.json +++ b/plugins/worktree/.claude-plugin/plugin.json @@ -2,7 +2,7 @@ "name": "worktree", "displayName": "Worktree", "description": "Create, lease, finish, audit and safely clean isolated Git worktrees through the worktree CLI.", - "version": "0.14.4", + "version": "0.14.5", "author": { "name": "Beyond10x" }, diff --git a/plugins/worktree/.codex-plugin/plugin.json b/plugins/worktree/.codex-plugin/plugin.json index bf37015..68ada72 100644 --- a/plugins/worktree/.codex-plugin/plugin.json +++ b/plugins/worktree/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "worktree", - "version": "0.14.4", + "version": "0.14.5", "description": "Create, lease, finish, audit and safely clean isolated Git worktrees through the worktree CLI.", "author": { "name": "Beyond10x" diff --git a/plugins/worktree/skills/init/SKILL.md b/plugins/worktree/skills/init/SKILL.md index 5060007..92d6036 100644 --- a/plugins/worktree/skills/init/SKILL.md +++ b/plugins/worktree/skills/init/SKILL.md @@ -26,17 +26,17 @@ Activate a workspace profile once, then check the setup. The profile is a small worktree repository publishes a default one: ```bash -mkdir -p ~/.config/worktree -curl -fsSL -o ~/.config/worktree/default.toml \ +curl -fsSL --create-dirs -o ~/.config/worktree/default.toml \ https://raw.githubusercontent.com/beyond10x/worktree/main/profiles/default.toml worktree activate --profile ~/.config/worktree/default.toml --workspace worktree doctor --check ``` `activate` copies the profile into `~/.config/worktree/config.toml`, so the template file may stay -where it is or be committed into a repository the user shares with others. Ask the user for the -workspace root (an absolute path to the directory that holds their repositories) rather than -guessing it. +where it is or be committed into a repository the user shares with others; `--help` calls it a +"committed" template, but any local file works. Ask the user for the workspace root (an absolute +path to the directory that holds their repositories) rather than guessing it. With nobody to ask +(a headless run), use the directory that holds the current repository and say so in the report. `worktree doctor --check` fails with `no active profile` until `activate` has run. diff --git a/plugins/worktree/skills/managing-worktrees/SKILL.md b/plugins/worktree/skills/managing-worktrees/SKILL.md index a34a3d0..84ec6bc 100644 --- a/plugins/worktree/skills/managing-worktrees/SKILL.md +++ b/plugins/worktree/skills/managing-worktrees/SKILL.md @@ -32,7 +32,7 @@ After verification, preserve the small logs, reports, or deliverables needed for 1. Commit and publish every wanted change. A local-only commit is deliberately not cleanup-safe. Work merged as rebased or cherry-picked copies also qualifies when an advertised ref carries every unique commit's exact patch; GC reports that proof as `patch-equivalent`. 2. Preserve required evidence and remove this task's disposable output as described above. Release your own lease, then run `worktree finish `. It refuses dirty, locked, unmanaged, live, or mid-operation Git worktrees. -3. Run `worktree gc --repo --dry-run --id ` and inspect every result. Without exact ids, `--repo` selects the activated workspace profile, not just the repository: the assessment covers records under that profile's `workspace_root`, including other repositories. +3. Run `worktree gc --repo --dry-run --id ` and inspect every result. Always pass `--id`. Without exact ids, `--repo` selects the activated workspace profile, not just the repository: the assessment covers records under that profile's `workspace_root`, including other repositories. 4. Run `worktree gc --repo --apply --id ` with repeated `--id` values only for the exact results intended for removal. The command refreshes remote advertisements, fetches required objects, and revalidates immediately before non-forced removal. Check the result before reporting storage reclaimed. 5. End with either verified cleanup or an explicit handoff: tree id and path, published branch/commit, related work-item references, retained evidence, remaining blockers, next owner and next action. Never leave a tree silently active or label work complete merely from its age or Git state.