akm-cli 0.9.27-alpha.2 → 0.9.27

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.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,52 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.9.27] - 2026-10-07
10
+
11
+ The stable release of the 0.9.27 line: 0.9.27-alpha.1, alpha.2 and alpha.3.
12
+ When upgrading from 0.9.26:
13
+
14
+ - **The nightly queue stops refilling with duplicates.** Consolidate no longer
15
+ re-offers a memory whose body a reviewer rejected, and the drain's judge sees
16
+ the five knowledge notes nearest a promotion and rejects one they already
17
+ cover. A confident `subsumed` or `supersedes` retirement that the second look
18
+ confirms resolves unattended, like a duplicate (alpha.2).
19
+ - **The judge rejects a promotion that is not durable:** a status, rollout,
20
+ version or test count, a plan not yet carried out, or something retired or
21
+ replaced. On 65 labelled promotions it accepted 13 of 61 bad ones before and
22
+ 3 to 6 after, keeping 3 of the 4 good ones (alpha.3).
23
+ - **Distill writes a lesson only when its memory holds one.** The writer may
24
+ answer that there is none; its judge rejects a lesson that only records what
25
+ was done, repeats an asset the library holds or claims what the memory does
26
+ not say; both see the related lessons, knowledge notes and skills (alpha.2).
27
+ - **Reflect skips feedback an accepted exact fix already resolved**, and no
28
+ longer writes a second copy of a skill's reference files (alpha.1, alpha.2).
29
+ - **Fixed:** an old (0.9.1-era) index is recreated instead of crashing every
30
+ `akm index`; an updated index scores like a fresh one; strict APIs that reject
31
+ `chat_template_kwargs` get one retry without it, and every response schema is
32
+ strict-valid; extract reports a lesson it refuses; a codex dispatch with a
33
+ schema leaves no temp folder (alpha.1).
34
+ - **Removed:** `scripts/akm-eval`, now in itlackey/akm-eval (alpha.2).
35
+
36
+ ## [0.9.27-alpha.3] - 2026-10-07
37
+
38
+ ### Fixed
39
+
40
+ - **The drain's judge rejects a promotion that is a status snapshot, a plan or
41
+ something retired, not only a duplicate.** Its rubric for a promotion (a memory
42
+ proposed as a new knowledge note) said to reject a note that is wrong, a
43
+ duplicate or contradicts the live asset, and to accept a correct, valuable one,
44
+ so it judged only whether the note was new: the reasons it gave for accepting a
45
+ note pinned to commits and versions, a rollout status or a retired host were
46
+ "distinct from the existing notes". The reject line now also names a note that
47
+ reports the state of something that changes (a status, rollout, branch, commit,
48
+ version, test count, "as of <date>"), a plan not yet carried out, or something
49
+ already retired, replaced or superseded, and says a lesson drawn from an
50
+ incident is durable. On the owner's 65 labelled promotions (chat/qwen3.8-27b,
51
+ two runs each) the judge accepted 7 and 8 of the 14 stale ones and 4 and 5 of
52
+ the 7 ephemeral ones before, and 1 and 3, 0 and 1 after. Other proposals keep
53
+ the old rubric. No new settings.
54
+
9
55
  ## [0.9.27-alpha.2] - 2026-10-07
10
56
 
11
57
  ### Removed
@@ -144,6 +144,8 @@ export function fencedBlock(text) {
144
144
  }
145
145
  /** The judgment prompt: the proposal, the live asset it would overwrite, same-ref siblings, and for a promotion the nearest knowledge notes. */
146
146
  export function buildJudgmentPrompt(proposal, reason, ctx) {
147
+ // A promotion (a memory proposed as a new knowledge note) must also be durable.
148
+ const promotion = proposal.source === "consolidate" && ctx.liveAsset === undefined;
147
149
  const sections = [
148
150
  "You are adjudicating a pending knowledge-base proposal no quality judge has",
149
151
  "passed yet. Decide whether to accept, reject, or defer it.",
@@ -174,7 +176,9 @@ export function buildJudgmentPrompt(proposal, reason, ctx) {
174
176
  }
175
177
  sections.push("", "Reject the promotion if these notes already cover what it says, even in other words.");
176
178
  }
177
- sections.push("", "## Your task", 'Return ONLY a JSON object: {"decision": "accept" | "reject" | "defer", "reason": "<short reason>"}.', "- accept: the proposed content is a correct, valuable update worth committing.", "- reject: the proposal is wrong, a duplicate, or contradicts the live asset.", "- defer: you cannot decide from the provided context (leave it pending).", "Output the JSON object and nothing else.");
179
+ sections.push("", "## Your task", 'Return ONLY a JSON object: {"decision": "accept" | "reject" | "defer", "reason": "<short reason>"}.', "- accept: the proposed content is a correct, valuable update worth committing.", promotion
180
+ ? '- reject: the proposal is wrong, a duplicate, contradicts the live asset, or is not durable: it reports the state of something that changes (a status, rollout, branch, commit, version, test count, "as of <date>"), is a plan not yet carried out, or describes something already retired, replaced or superseded. A lesson drawn from an incident is durable.'
181
+ : "- reject: the proposal is wrong, a duplicate, or contradicts the live asset.", "- defer: you cannot decide from the provided context (leave it pending).", "Output the JSON object and nothing else.");
178
182
  return sections.join("\n");
179
183
  }
180
184
  /** A verdict from raw runner output (the first JSON object), or null. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "akm-cli",
3
- "version": "0.9.27-alpha.2",
3
+ "version": "0.9.27",
4
4
  "type": "module",
5
5
  "description": "akm (Agent Knowledge Manager) — a portable, local-first capability library for AI agents. Discover, load, share, and improve reusable skills, scripts, workflows, and knowledge across any shell-capable coding agent, including Claude Code, OpenCode, and Cursor.",
6
6
  "keywords": [