akm-cli 0.10.261012-beta → 0.10.261013-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/CHANGELOG.md +216 -0
  2. package/SECURITY.md +2 -2
  3. package/STABILITY.md +2 -2
  4. package/dist/assets/hints/cli-hints-full.md +6 -7
  5. package/dist/assets/hints/cli-hints-short.md +3 -4
  6. package/dist/commands/command/execution-source-loader.js +10 -14
  7. package/dist/commands/env/env-binding.js +47 -58
  8. package/dist/commands/env/env-cli.js +20 -22
  9. package/dist/commands/env/env.js +10 -58
  10. package/dist/commands/env/secret-cli.js +9 -27
  11. package/dist/commands/env/secret.js +3 -10
  12. package/dist/commands/health/scheduler-binary.js +1 -1
  13. package/dist/commands/improve/distill.js +0 -2
  14. package/dist/commands/improve/eligibility.js +0 -2
  15. package/dist/commands/lint/env-key-rules.js +7 -6
  16. package/dist/commands/lint/index.js +1 -1
  17. package/dist/commands/proposal/validators/proposal-validators.js +1 -4
  18. package/dist/commands/read/show.js +4 -25
  19. package/dist/commands/sources/add-cli.js +8 -63
  20. package/dist/commands/sources/bundle-cli.js +8 -9
  21. package/dist/commands/sources/installed-stashes.js +117 -61
  22. package/dist/commands/sources/schema-repair.js +0 -2
  23. package/dist/commands/sources/source-clone.js +31 -7
  24. package/dist/commands/tasks/explain.js +1 -1
  25. package/dist/commands/tasks/tasks.js +38 -56
  26. package/dist/commands/ui/redact.js +4 -4
  27. package/dist/commands/ui/workspace-actions.js +1 -1
  28. package/dist/commands/workflow/plan.js +47 -8
  29. package/dist/commands/workflow-cli.js +37 -41
  30. package/dist/core/adapter/adapters/akm-adapter.js +3 -3
  31. package/dist/core/adapter/adapters/akm-lint.js +3 -4
  32. package/dist/core/adapter/adapters/akm-metadata.js +2 -2
  33. package/dist/core/adapter/adapters/akm-task-adapter.js +5 -6
  34. package/dist/core/adapter/adapters/dotenv-adapter.js +4 -3
  35. package/dist/core/asset/resolve-ref.js +5 -0
  36. package/dist/core/bundle-rename.js +12 -4
  37. package/dist/core/common.js +4 -52
  38. package/dist/core/config/config-walker.js +1 -1
  39. package/dist/core/config/config.js +55 -18
  40. package/dist/core/config/schema/primitives.js +12 -6
  41. package/dist/core/config/schema/sources-bundles.js +2 -2
  42. package/dist/core/env-secret-ref.js +84 -73
  43. package/dist/core/errors.js +1 -1
  44. package/dist/core/paths.js +1 -6
  45. package/dist/core/redaction.js +16 -3
  46. package/dist/core/ref-token.js +82 -0
  47. package/dist/core/secret-value.js +14 -0
  48. package/dist/core/write-source.js +20 -4
  49. package/dist/indexer/indexer.js +27 -36
  50. package/dist/indexer/installations.js +1 -8
  51. package/dist/indexer/lookup/adapter-concept-owner.js +40 -14
  52. package/dist/indexer/materialize-embeddings.js +1 -1
  53. package/dist/indexer/scan/drain-dir.js +3 -3
  54. package/dist/indexer/search/search-source.js +4 -2
  55. package/dist/indexer/walk/path-resolver.js +13 -68
  56. package/dist/indexer/walk/walker.js +18 -22
  57. package/dist/integrations/agent/engine-resolution.js +9 -7
  58. package/dist/integrations/agent/runner-dispatch.js +4 -5
  59. package/dist/integrations/agent/runner.js +2 -0
  60. package/dist/llm/client.js +1 -1
  61. package/dist/llm/embedders/remote.js +4 -3
  62. package/dist/output/renderers.js +3 -4
  63. package/dist/output/shapes/helpers.js +0 -2
  64. package/dist/output/text/command-format.js +12 -2
  65. package/dist/output/text/show-directives.js +16 -28
  66. package/dist/output/text/workflow-format.js +37 -7
  67. package/dist/scripts/akm-migrate-node.js +45865 -44692
  68. package/dist/scripts/akm-migrate.js +45804 -44630
  69. package/dist/setup/steps/tasks.js +1 -2
  70. package/dist/sources/providers/provider-utils.js +12 -0
  71. package/dist/sources/resolve.js +12 -16
  72. package/dist/sources/snapshot-fetchers/secret-seam.js +2 -4
  73. package/dist/sources/snapshot-fetchers/x.js +1 -1
  74. package/dist/storage/repositories/proposals-repository.js +2 -2
  75. package/dist/storage/repositories/task-history-repository.js +2 -2
  76. package/dist/storage/repositories/workflow-runs-repository.js +38 -116
  77. package/dist/tasks/embedded.js +1 -1
  78. package/dist/tasks/prepare/prepare-support.js +3 -2
  79. package/dist/tasks/prepare/prepare.js +3 -4
  80. package/dist/tasks/prepare/script-capture.js +8 -22
  81. package/dist/tasks/run/load-task.js +46 -14
  82. package/dist/tasks/run/run-native-task.js +0 -8
  83. package/dist/tasks/run/run-workflow-task.js +2 -2
  84. package/dist/tasks/scheduler-sync.js +0 -1
  85. package/dist/tasks/source/bounded-document.js +0 -41
  86. package/dist/tasks/source/parse-task-source.js +0 -1
  87. package/dist/tasks/source/task-source-v4.js +1 -4
  88. package/dist/workflows/compile.js +1 -15
  89. package/dist/workflows/exec/child-workflow.js +1 -2
  90. package/dist/workflows/exec/dispatch-redaction.js +24 -6
  91. package/dist/workflows/exec/environment.js +11 -74
  92. package/dist/workflows/exec/exec-unit.js +31 -23
  93. package/dist/workflows/exec/frozen-judge.js +17 -3
  94. package/dist/workflows/exec/native-executor.js +70 -26
  95. package/dist/workflows/exec/run-workflow.js +31 -18
  96. package/dist/workflows/exec/step-work.js +4 -3
  97. package/dist/workflows/exec/unit-dispatch.js +1 -8
  98. package/dist/workflows/freeze/environment.js +14 -119
  99. package/dist/workflows/freeze/freeze.js +0 -1
  100. package/dist/workflows/freeze/step-values.js +1 -2
  101. package/dist/workflows/freeze/targets/child-workflow.js +3 -5
  102. package/dist/workflows/freeze/targets/command.js +6 -9
  103. package/dist/workflows/freeze/targets/shell.js +0 -3
  104. package/dist/workflows/parser.js +6 -25
  105. package/dist/workflows/plan.js +6 -2
  106. package/dist/workflows/renderer.js +77 -4
  107. package/dist/workflows/runtime/run-plan.js +37 -23
  108. package/dist/workflows/runtime/runs.js +41 -84
  109. package/dist/workflows/runtime/workflow-asset-loader.js +55 -86
  110. package/dist/workflows/source-files.js +7 -19
  111. package/docs/architecture/0.10-process-rules.md +6 -6
  112. package/docs/architecture/architecture.md +6 -6
  113. package/docs/architecture/comparisons/claude-code-vs-akm-workflows-full.md +12 -18
  114. package/docs/architecture/decisions/0003-child-env-allowlist-and-provenance.md +6 -8
  115. package/docs/architecture/internals/storage-locations.md +4 -4
  116. package/docs/architecture/persisted-data-compat.md +3 -2
  117. package/docs/architecture/specs/0.9.0-public-api-issue-backlog.md +1 -1
  118. package/docs/architecture/specs/akm-format-neutral-bundle-workspace-spec.md +3 -3
  119. package/docs/architecture/testing/manual-testing-checklist.md +46 -78
  120. package/docs/architecture/testing/task-workflow-manual-tests.md +22 -40
  121. package/docs/architecture/testing/testing-workflow.md +9 -11
  122. package/docs/architecture/workflow-engine.md +41 -27
  123. package/docs/guides/author-bundles.md +14 -17
  124. package/docs/guides/author-workflows.md +43 -9
  125. package/docs/guides/bundles.md +16 -11
  126. package/docs/guides/claude-code-vs-akm-workflows.md +1 -1
  127. package/docs/guides/run-workflows.md +25 -13
  128. package/docs/guides/scheduling.md +1 -1
  129. package/docs/maintainers/README.md +2 -3
  130. package/docs/maintainers/release-checklist.md +73 -126
  131. package/docs/migration/v0.9-to-v0.10.md +5 -1
  132. package/docs/reference/cli.md +124 -112
  133. package/docs/reference/configuration.md +16 -9
  134. package/docs/reference/data-and-telemetry.md +1 -1
  135. package/docs/reference/env-and-secrets.md +66 -15
  136. package/docs/reference/registry.md +6 -11
  137. package/docs/reference/tasks.md +11 -3
  138. package/docs/reference/ui-api.md +3 -3
  139. package/docs/reference/workflow-schema.md +109 -36
  140. package/package.json +1 -1
  141. package/schemas/akm-task.json +2 -4
  142. package/dist/commands/sources/dangerous-env-audit.js +0 -134
  143. package/dist/core/activation-policy.js +0 -67
  144. package/dist/execution/directory-identity.js +0 -78
  145. package/dist/workflows/authoring/scope-key.js +0 -79
  146. package/dist/workflows/source-semantics.js +0 -110
@@ -80,8 +80,8 @@ back out of `sourceAdded`/`installed`. Without `--name`, akm derives one
80
80
  a `-<hash>` suffix only on a collision — that forgiving fallback applies
81
81
  solely to a derived name, never to an explicit `--name`.
82
82
 
83
- Git credentials must be symbolic references: `$VAR`, `${VAR}`, or
84
- `secret://name`. AKM resolves the reference only at the Git subprocess boundary
83
+ Git credentials must be symbolic references: `$VAR`, `${VAR}`, or an akm ref
84
+ such as `${secrets/gitea_token}`. AKM resolves the reference only at the Git subprocess boundary
85
85
  and sends it as an HTTPS bearer header; it does not put the token in the remote
86
86
  URL or `config.json`.
87
87
 
@@ -136,8 +136,10 @@ Valid `--kind` values are the four bundle providers: `filesystem`, `git`,
136
136
  ## akm bundle update / akm bundle remove
137
137
 
138
138
  `akm bundle update` refreshes git, npm, and website bundles. Each candidate is
139
- staged outside its active root, audited for dangerous environment keys, and
140
- only then published and indexed. `akm bundle remove` disconnects a bundle and
139
+ staged outside its active root and only then published and indexed. Installing
140
+ a bundle is the trust decision: neither `add` nor `update` inspects its `env/`
141
+ files, so a bundle that sets `PATH` in an env file installs and refreshes
142
+ unattended with no flag. `akm bundle remove` disconnects a bundle and
141
143
  re-indexes without it.
142
144
 
143
145
  Bundle refresh is deliberately explicit: Git bundles do not poll upstream on
@@ -152,7 +154,6 @@ akm bundle update @scope/bundle # One managed bundle
152
154
  akm bundle update --all # All managed bundles
153
155
  akm bundle update --all --force # Force fresh download even if version unchanged
154
156
  akm bundle update --all --skip-if-locked # Scheduled refresh: exit 0 on DB contention
155
- akm bundle update @scope/bundle --allow-dangerous-env-keys # Approve reviewed dangerous env keys
156
157
 
157
158
  # Remove
158
159
  akm bundle remove @scope/bundle # By npm id
@@ -161,12 +162,16 @@ akm bundle remove ~/.claude/skills # By path
161
162
  akm bundle remove my-provider # By name
162
163
  ```
163
164
 
164
- Dangerous keys prompt in a terminal (default: No) and block non-interactive
165
- updates unless `--allow-dangerous-env-keys` is explicit. `--yes` is a deprecated
166
- no-op on update; it never approves security findings.
167
- For `--all`, blocked and failed bundles are reported separately and later
168
- bundles continue. A rejected or failed bundle keeps its prior bytes, lock/config
169
- state, and search-index generation.
165
+ A read-only git or npm bundle whose upstream revision is unchanged is not
166
+ fetched or replaced again (`--force` fetches it anyway), so a task or workflow
167
+ running from it keeps its directory. When the revision does change, the
168
+ previous revision directory is kept and older ones are removed.
169
+
170
+ `--allow-dangerous-env-keys` and `--yes` are deprecated no-ops on update,
171
+ accepted through 0.10 so existing scripts keep working.
172
+ For `--all`, failed bundles are reported separately and later bundles continue.
173
+ A failed bundle keeps its prior bytes, lock/config state, and search-index
174
+ generation.
170
175
 
171
176
  Private bundles that intentionally version every file under `env/` and
172
177
  `secrets/` can place this documented marker anywhere in their root
@@ -6,7 +6,7 @@ subagents, runs them concurrently, and reports back before the session ends.
6
6
  AKM workflows are a different thing: a portable procedure that any supported
7
7
  agent harness can run, with durable state, retries, gates, and resume built
8
8
  in. A workflow source is Markdown `.md`, lowered to source IR version 1. Every run freezes the durable plan
9
- v4 family's executable `irVersion: 5` before execution; pre-`irVersion`-5
9
+ v4 family's executable `irVersion: 7` before execution; pre-`irVersion`-5
10
10
  stored plans are rejected.
11
11
  Neither replaces the other — they solve different problems, and the right
12
12
  choice depends on whether the work is a one-off inside a session or a
@@ -12,15 +12,23 @@ see [Scheduling](scheduling.md).
12
12
 
13
13
  ## Start or continue a run
14
14
 
15
- `akm workflow run <run-id|workflows/ref>` starts or continues a persisted run
16
- and executes it until completion, failure, verification rejection,
17
- interruption, or an explicit invocation limit. Run state is scoped to the
18
- current project directory (nearest `.akm/config.json`, git root, bundle root,
19
- or current directory), so the same workflow can run independently in separate
20
- projects.
15
+ `akm workflow run <workflows/ref>` always starts a new persisted run, and
16
+ `akm workflow run <run-id>` continues that exact run. Either way it executes
17
+ until completion, failure, verification rejection, interruption, or an
18
+ explicit invocation limit. A run is identified by its run id and a workflow by
19
+ its ref; the directory you run from never matters, so `akm workflow list` and
20
+ `akm workflow status` show the same runs from anywhere.
21
+
22
+ If other runs of the same ref are still active, a start says so in one
23
+ warning that names their ids and the `akm workflow run <id>` /
24
+ `akm workflow abandon <id>` commands. Starting is never refused.
25
+ `akm workflow resume <id>` is only for a blocked or failed run: it re-activates
26
+ the run so `akm workflow run <id>` can continue it.
27
+ `--new` is a deprecated no-op (a ref always starts a new run), kept through
28
+ 0.10 so existing scripts keep working.
21
29
 
22
30
  Every new run/start compiles source IR v1 and freezes the durable plan v4
23
- family's current executable format (`irVersion: 5`) before publishing the run.
31
+ family's current executable format (`irVersion: 7`) before publishing the run.
24
32
  A workflow ref is a Markdown `.md` source.
25
33
 
26
34
  ```sh
@@ -29,6 +37,9 @@ akm workflow run workflows/review --changed_files a.ts --changed_files b.ts
29
37
  akm workflow run <run-id> --max-retries 2 --timeout 10m
30
38
  ```
31
39
 
40
+ Parameters are accepted on every ref start. They cannot be combined with a run
41
+ id, which already has its parameters.
42
+
32
43
  Parameter flags must come after the target and exactly match declared
33
44
  `params` keys. Values are coerced through each parameter's JSON Schema:
34
45
  repeat an array flag, pass an object or whole array as JSON, and use a bare
@@ -58,7 +69,7 @@ and evidence — for a given run ID or workflow ref.
58
69
  ```sh
59
70
  akm workflow status <run-id>
60
71
  akm workflow status workflows/ship-release
61
- # When given a ref, resolves to the most-recently-updated run in the current scope
72
+ # When given a ref, shows the most recently updated run of that ref
62
73
  ```
63
74
 
64
75
  Use this to inspect where a run is after a context window break, or to verify
@@ -151,12 +162,13 @@ A child run id always works directly, listed or not — `akm workflow status
151
162
  <childRunId>`, `resume`, `abandon`, and `run` all operate on it exactly like
152
163
  any other run.
153
164
 
154
- ## List runs in scope
165
+ ## List runs
155
166
 
156
- `akm workflow list` shows workflow runs in the current scope.
167
+ `akm workflow list` shows every workflow run on this host, most recently
168
+ updated first. `--all-scopes` is a deprecated no-op, kept through 0.10.
157
169
 
158
170
  ```sh
159
- akm workflow list # All runs in this scope (any status)
171
+ akm workflow list # All runs (any status)
160
172
  akm workflow list --active # Only status=active (executable) runs
161
173
  akm workflow list --ref workflows/ship-release # Runs for a specific workflow
162
174
  ```
@@ -190,7 +202,7 @@ completed are skipped, not re-run (see
190
202
  A resume consumes the frozen plan and journaled attempts; it does not re-read
191
203
  configuration or the index, and reads the authored workflow only to warn once
192
204
  when it changed since the run was frozen (the run continues on the frozen
193
- plan; `akm workflow run <ref> --new` picks up the edit). A stored plan this akm
205
+ plan; `akm workflow run <ref>` starts a new run that picks up the edit). A stored plan this akm
194
206
  cannot decode is abandoned with a message naming how to start a new run.
195
207
 
196
208
  ## Abandon a run
@@ -249,7 +261,7 @@ treat package dependencies**:
249
261
  - **Audit before run** for any workflow that touches secrets, deploys to
250
262
  production, or writes outside the project tree. Read the `env:` bindings a
251
263
  workflow declares, and read its `exec.pass_env` lines.
252
- The durable v4 family (`irVersion: 5`) rejects `inherit_env`. Authors must
264
+ The durable v4 family (`irVersion: 7`) rejects `inherit_env`. Authors must
253
265
  use exact named bindings and `pass_env` names.
254
266
  - **Pin known-good versions** when adding workflow sources from a registry
255
267
  or git remote (`akm bundle add github:owner/repo#v1.2.3`), and update
@@ -61,7 +61,7 @@ different checkout or package. Editing definitions and running ordinary `akm
61
61
  task sync` preserves that captured runtime.
62
62
 
63
63
  A scheduled fire re-reads the guarded current source and creates a fresh
64
- durable-v4-family freeze at executable `irVersion: 5`.
64
+ durable-v4-family freeze at executable `irVersion: 7`.
65
65
  Scheduler sync/validation evidence is not an executable snapshot and is never reused as the later run plan.
66
66
 
67
67
  ## A scheduled `akm improve` covers one bundle
@@ -8,9 +8,8 @@ actually improve it, and the current state of the `curate` implementation.
8
8
  kind of contributor check (live source, built launcher, packed-package
9
9
  acceptance, global checkout install) and the verification commands to run
10
10
  before pushing.
11
- - [Release Checklist](release-checklist.md) — local release validation, exact
12
- candidate-SHA semantic/Docker/native-scheduler gates, and the evidence links
13
- required before publication.
11
+ - [Release Checklist](release-checklist.md) — the branch model and the steps to
12
+ cut, release and install akm and its plugins.
14
13
  - [akm-eval](https://github.com/itlackey/akm-eval) — the evals and benchmarks
15
14
  that measure whether `akm improve` and retrieval changes are actually
16
15
  working. The old in-repo toolkit is retired: see [eval.md](eval.md).
@@ -1,135 +1,82 @@
1
1
  # Release Checklist
2
2
 
3
- Use this checklist for every release candidate. Local release validation and
4
- scheduled CI are useful inputs, but neither substitutes for a successful gated
5
- run of the exact commit that will be published.
6
-
7
- ## 1. Freeze the candidate
8
-
9
- 1. Finish the version, changelog, migration-note, and release-PR changes. From
10
- 0.10 the version is a monthly release number, `0.10.YYMMNN` (see step 4):
11
- `bun scripts/release-version.ts next` prints the next free one for this
12
- month (UTC). Every release, whatever its stage, takes the next number.
13
- Commit it in `package.json` and cut the CHANGELOG as
14
- `## [0.10.YYMMNN] - YYYY-MM-DD`. A prerelease stage is not committed: it is
15
- chosen when the Release workflow runs, and the release's CHANGELOG section
16
- covers it.
17
- 2. Record `git rev-parse HEAD`. This is the full 40-character release-candidate SHA.
18
- 3. Run `bun run release:check` locally. If Docker is unavailable, run
19
- `./tests/release-check.sh --skip-docker` and rely on the gated Docker job
20
- below for the container matrix.
21
-
22
- Any commit added after this point creates a new candidate and invalidates the
23
- gated evidence collected for the previous SHA.
24
-
25
- ## 2. Collect exact-SHA gated evidence
26
-
27
- GitHub only offers a scheduled or manually dispatched workflow after its file
28
- exists on the default branch. When validating the commit that first introduces
29
- or changes this workflow, create a unique lightweight candidate tag at the
30
- recorded SHA:
3
+ `main` is the stable line (npm `latest`). The next version is developed on a
4
+ release branch, `release/<version>` (npm `next`), which merges to `main` when
5
+ it becomes stable. A fix for stable lands on `main` and is cherry-picked onto
6
+ the release branch when that branch needs it.
7
+
8
+ ## 1. Cut the version
9
+
10
+ On the branch you release from (`main` for stable, the release branch for
11
+ next):
12
+
13
+ 1. Set the version: `npm pkg set version=<version>`. From 0.10,
14
+ `bun scripts/release-version.ts next` prints the next free one (see
15
+ [Versions](#versions)).
16
+ 2. Cut the changelog: add `## [<version>] - <YYYY-MM-DD>` (UTC date) directly
17
+ under `## [Unreleased]`, so the unreleased entries become this release's
18
+ section. CI fails the release commit when the newest section does not name
19
+ the `package.json` version (`tests/workflow-release.test.ts`).
20
+ 3. Add a migration note if the release needs one (see
21
+ [CONTRIBUTING](https://github.com/itlackey/akm/blob/main/.github/CONTRIBUTING.md#shipping-a-release--migration-notes)).
22
+ 4. Commit `release: <version>`, push it to the branch, and let CI run on it.
23
+
24
+ ## 2. Release akm
25
+
26
+ ```sh
27
+ gh workflow run release.yml --ref <branch> -f version=<version> [-f stage=alpha|beta|rc]
28
+ ```
29
+
30
+ The Release workflow, on the pushed commit:
31
+
32
+ 1. runs Gated CI: semantic search with real embeddings, the Docker install
33
+ matrix, and the native schedulers on Linux, macOS and Windows;
34
+ 2. requires CI to have passed on the same commit (it does not run lint, the
35
+ typecheck or the test suites again);
36
+ 3. runs `tests/release-check.sh --skip-docker`: the packaged artifact's bin
37
+ targets and migrator, package acceptance, and the upgrade rehearsal against
38
+ the packed tarball;
39
+ 4. builds the package and standalone binaries, publishes to npm (`latest` for
40
+ a stable version, `next` for a prerelease) and creates the GitHub release.
41
+
42
+ If a job fails on a flake, rerun the failed jobs. If the fix needs a code
43
+ change, commit it and release that commit. npm can take several minutes to show
44
+ a new version: check `npm view akm-cli@<tag> version` before upgrading.
45
+
46
+ ## 3. Release the plugins
31
47
 
32
48
  ```sh
33
- candidate_sha="$(git rev-parse HEAD)"
34
- candidate_short_sha="$(git rev-parse --short=12 HEAD)"
35
- candidate_version="$(node -p 'require("./package.json").version')"
36
- candidate_tag="gated-ci/candidate-${candidate_version}-${candidate_short_sha}"
37
- git tag "$candidate_tag" "$candidate_sha"
38
- git push origin "refs/tags/$candidate_tag"
49
+ gh workflow run release.yml --repo itlackey/akm-plugins --ref <plugins branch> -f akm_version=<published akm version>
39
50
  ```
40
51
 
41
- Verify that the tag target is the exact candidate commit recorded in step 1.
42
- The `gated-ci/candidate-*` trigger runs every gated suite from the workflow in
43
- that tagged commit. The resolver checks that the checkout equals the immutable
44
- event SHA, and the final evidence job records both that SHA and the tag ref.
45
- Never force-move or reuse a candidate tag; a changed commit needs a new tag and
46
- a new run.
47
-
48
- After **Gated CI** exists on the default branch, manual dispatch is an
49
- equivalent exact-SHA path. From the repository's Actions page, choose **Run
50
- workflow** and supply:
51
-
52
- - `candidate_sha`: the full 40-character SHA recorded above, never a branch or
53
- tag name.
54
-
55
- Every suite runs; there is no suite selector.
56
-
57
- The manual request rejects abbreviated SHAs and checks out that immutable
58
- commit for every gate. Wait for all of these stable checks to succeed on either
59
- candidate path:
60
-
61
- - `Gated / Semantic Search`
62
- - `Gated / Docker Install`
63
- - `Gated / Native Scheduler / Linux`
64
- - `Gated / Native Scheduler / macOS`
65
- - `Gated / Native Scheduler / Windows`
66
- - `Gated / Release Candidate Evidence`
67
-
68
- The final evidence job records the requested and resolved SHA, the trigger ref,
69
- each suite's result, and a run link in the workflow summary. A weekly run is
70
- drift detection, not release evidence, because it may cover a different
71
- commit.
72
-
73
- Manual and tagged candidate runs are cache restore-only. Only a successful
74
- scheduled run of the workflow on the repository's default branch may save the
75
- HuggingFace model cache; its key identifies both the embedding model and the
76
- source/lock inputs. This prevents candidate-controlled workflow code from
77
- publishing cache entries while still avoiding repeated model downloads.
78
-
79
- Copy the successful run URL (for example,
80
- `https://github.com/itlackey/akm/actions/runs/<run-id>`) and the exact candidate
81
- SHA into both the release PR and its milestone/parent tracker. Do not publish
82
- from a candidate whose evidence link names a different SHA, whose final
83
- evidence job is skipped, or whose run was re-run after the candidate changed.
84
-
85
- ## 3. Gated CI does not run on pull requests
86
-
87
- Gated CI runs on three triggers only: the weekly schedule, an exact-SHA
88
- `workflow_dispatch`, and a `gated-ci/candidate-*` tag. All three run every
89
- suite.
90
-
91
- There used to be a `Gated / Detect Changed Paths` job that also ran these on
92
- PRs, selecting suites by regex-matching the diff against path lists. It was
93
- deleted in 0.9.8: the patterns had gone stale — they still named test files a
94
- reorganisation had moved or deleted, so it was silently under-selecting suites
95
- and nobody noticed. A build-policing job that quietly stops policing is worse
96
- than no job, because its green status is read as coverage.
97
-
98
- Nothing about release evidence changes. Step 2 was always the requirement, and
99
- it never went through the PR path.
100
-
101
- The candidate-tag trigger is reserved for release evidence and workflow
102
- rollout: it always runs `all`, because a tag-push workflow is the path available
103
- before the workflow file reaches the default branch.
104
-
105
- ## 4. Publish
106
-
107
- After the exact-SHA gated run and local release check are green, trigger the
108
- Release workflow with the version already committed in `package.json`. Keep the
109
- candidate SHA and Gated CI run URL in the release record so the published
110
- artifact's validation can be audited later.
52
+ Plugins match akm's major.minor and keep their own patch numbers; each plugin
53
+ release's notes name the akm version it requires. A plugin-only fix is released
54
+ the same way, with the akm version already published. The Claude marketplace
55
+ reads the plugins repository's `main`, so stable plugin releases come from
56
+ `main`.
57
+
58
+ ## 4. Upgrade
59
+
60
+ `akm upgrade` (stable) or `akm upgrade --next` (prerelease) updates akm and the
61
+ installed plugins.
62
+
63
+ ## Gated CI on its own
64
+
65
+ Gated CI also runs weekly on `main` to catch drift, and on demand from the
66
+ Actions tab on any ref. Only the weekly run saves the Hugging Face model cache.
67
+
68
+ ## Versions
111
69
 
112
70
  0.10 and later use monthly release numbers, `0.10.YYMMNN`: `YY` the UTC year,
113
71
  `MM` the month and `NN` the release in that month (`01` to `99`), two digits
114
- each (see [`STABILITY.md`](../../STABILITY.md)). The first release of 2026-10 is
115
- `0.10.261001`. `bun scripts/release-version.ts next` takes `NN` as one above the
116
- highest release already on npm for this UTC month, with or without a stage
117
- (`npm view akm-cli versions`), so numbering follows what was published, not
118
- what was committed. The retired 8-digit daily builds (`0.10.26101001-alpha` to
119
- `0.10.26101202-alpha`) are not counted.
120
-
121
- The workflow has two inputs:
122
-
123
- - `version`: the version committed in `package.json`, as before. The workflow
124
- rejects a malformed one (`scripts/release-version.ts`, tested in
125
- `tests/release-version.test.ts`): two digits each for `YY`, `MM`, `NN`, a
126
- month 01 to 12, `NN` 01 to 99; the old 8-digit daily form is rejected. For
127
- 0.9 and older it is the `X.Y.Z` as before.
128
- - `stage`: `none` publishes `<version>` to the npm `latest` tag and as a GitHub
129
- release. `alpha`, `beta` or `rc` publishes `<version>-<stage>` to `next` as a
130
- GitHub prerelease (no `.N`: every release has its own number). There is no
131
- promoting one build through stages: the next release, at any stage, commits
132
- the next number (`0.10.261001-alpha`, then `0.10.261002-beta`, then
133
- `0.10.261003`).
134
-
135
- `bun scripts/release-version.ts validate <version>` checks a version by hand.
72
+ each (see [`STABILITY.md`](../../STABILITY.md)). `bun scripts/release-version.ts
73
+ next` takes `NN` as one above the highest release already on npm for this UTC
74
+ month, with or without a stage, and `bun scripts/release-version.ts validate
75
+ <version>` checks one by hand. The retired 8-digit daily builds
76
+ (`0.10.26101001-alpha` to `0.10.26101202-alpha`) are not counted. 0.9 and older
77
+ use `X.Y.Z`.
78
+
79
+ The `stage` input is not committed: `none` (the default) publishes `<version>`
80
+ to `latest`; `alpha`, `beta` or `rc` publishes `<version>-<stage>` to `next` as
81
+ a GitHub prerelease. Every release, at any stage, takes the next number; a
82
+ build is not promoted through stages.
@@ -48,7 +48,11 @@ akm workflow list --active
48
48
  `script` target (both came from features 0.10 removed) cannot be decoded in
49
49
  0.10; `akm workflow run` abandons it. A run whose plan has `unit.isolation`
50
50
  still decodes and runs in the engine's working directory. Let active runs
51
- finish, or abandon them on purpose, before you upgrade.
51
+ finish, or abandon them on purpose, before you upgrade. In 0.10
52
+ `akm workflow run <ref>` always starts a new run (`akm workflow run <run-id>`
53
+ continues one; `resume` only re-activates a blocked or failed one), runs are no longer scoped
54
+ to a directory, and 0.9.15 does not see runs 0.10 started on the same
55
+ `state.db`. `--new` and `--all-scopes` are accepted and do nothing.
52
56
  - **Quit OpenCode.** `akm upgrade` skips (reports `deferred`) a plugin update
53
57
  while an OpenCode process runs. See [Plugins](#plugins).
54
58