akm-cli 0.9.29 → 0.9.31

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 (162) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +10 -10
  3. package/ROADMAP.md +112 -0
  4. package/dist/commands/improve/improve-cli.js +33 -12
  5. package/dist/commands/sources/plugin-upgrade.js +46 -23
  6. package/dist/core/file-lock.js +10 -1
  7. package/dist/llm/client.js +33 -3
  8. package/dist/scripts/akm-migrate-node.js +5 -1
  9. package/dist/scripts/akm-migrate.js +5 -1
  10. package/docs/README.md +42 -41
  11. package/docs/agents/README.md +15 -0
  12. package/docs/agents/agent-install.md +14 -0
  13. package/docs/architecture/README.md +67 -0
  14. package/docs/architecture/adapters.md +272 -0
  15. package/docs/architecture/akm-architecture-decision-history.md +2055 -0
  16. package/docs/architecture/akm-core-principles.md +126 -0
  17. package/docs/architecture/architecture.md +579 -0
  18. package/docs/architecture/comparisons/claude-code-vs-akm-workflows-full.md +550 -0
  19. package/docs/architecture/decisions/0001-no-interpolation-attached-structured-context.md +72 -0
  20. package/docs/architecture/decisions/0002-unit-reuse-and-input-hash-scope.md +142 -0
  21. package/docs/architecture/decisions/0003-child-env-allowlist-and-provenance.md +189 -0
  22. package/docs/architecture/decisions/0004-task-input-contract-and-flag-coercion.md +97 -0
  23. package/docs/architecture/decisions/0005-task-result-vocabulary-and-legacy-read-mapping.md +108 -0
  24. package/docs/architecture/decisions/0006-task-source-version-routing.md +124 -0
  25. package/docs/architecture/decisions/0007-workflow-composition-bounds.md +83 -0
  26. package/docs/architecture/decisions/0008-task-binding-normalization.md +88 -0
  27. package/docs/architecture/decisions/0009-child-run-publication-column-parity.md +80 -0
  28. package/docs/architecture/decisions/0010-driver-protocol-cut.md +36 -0
  29. package/docs/architecture/decisions/0011-engine-run-loop-invariants.md +125 -0
  30. package/docs/architecture/decisions/README.md +62 -0
  31. package/docs/architecture/improvement.md +440 -0
  32. package/docs/architecture/internals/classification.md +154 -0
  33. package/docs/architecture/internals/fresh-host-rebuild-runbook.md +40 -0
  34. package/docs/architecture/internals/functional-contract-patterns.md +340 -0
  35. package/docs/architecture/internals/health-advisories.md +110 -0
  36. package/docs/architecture/internals/improve-workflow.md +713 -0
  37. package/docs/architecture/internals/indexing.md +498 -0
  38. package/docs/architecture/internals/registry-network-boundary.md +57 -0
  39. package/docs/architecture/internals/search.md +249 -0
  40. package/docs/architecture/internals/storage-locations.md +943 -0
  41. package/docs/architecture/persisted-data-compat.md +59 -0
  42. package/docs/architecture/reviews/env-secret-access.md +319 -0
  43. package/docs/architecture/runtime-boundary-design.md +153 -0
  44. package/docs/architecture/specs/0.9.0-close-out-plan.md +361 -0
  45. package/docs/architecture/specs/0.9.0-decisions.md +528 -0
  46. package/docs/architecture/specs/0.9.0-docs-code-drift-register.md +745 -0
  47. package/docs/architecture/specs/0.9.0-open-items-register.md +135 -0
  48. package/docs/architecture/specs/0.9.0-public-api-issue-backlog.md +740 -0
  49. package/docs/architecture/specs/0.9.0-release-surface-review.md +636 -0
  50. package/docs/architecture/specs/agent-command-engine-model-design.md +513 -0
  51. package/docs/architecture/specs/akm-0.9.0-bundle-adapter-spec.md +501 -0
  52. package/docs/architecture/specs/akm-0.9.0-ref-grammar-decision.md +291 -0
  53. package/docs/architecture/specs/akm-format-neutral-bundle-workspace-spec.md +2059 -0
  54. package/docs/architecture/specs/di-seams-plan.md +539 -0
  55. package/docs/architecture/specs/driver-protocol-keep-or-cut.md +275 -0
  56. package/docs/architecture/specs/fact-asset-type.md +142 -0
  57. package/docs/architecture/specs/improve-collapse-churn-detector-design.md +634 -0
  58. package/docs/architecture/specs/okf-support.md +148 -0
  59. package/docs/architecture/specs/ref.md +329 -0
  60. package/docs/architecture/specs/reviews/task-workflow-unification/README.md +72 -0
  61. package/docs/architecture/specs/reviews/task-workflow-unification/findings-consolidated.md +152 -0
  62. package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-alternatives.md +352 -0
  63. package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-bunqueue.md +300 -0
  64. package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-openworkflow.md +402 -0
  65. package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-1.md +758 -0
  66. package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-2.md +645 -0
  67. package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-3.md +602 -0
  68. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-adversarial.md +27 -0
  69. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-architecture.md +27 -0
  70. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-coverage.md +74 -0
  71. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-security.md +15 -0
  72. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r2-adversarial.md +132 -0
  73. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r2-verification.md +147 -0
  74. package/docs/architecture/specs/stash-conventions-code-spec.md +275 -0
  75. package/docs/architecture/specs/stash-organization-conventions.md +377 -0
  76. package/docs/architecture/specs/task-workflow-format-unification.md +721 -0
  77. package/docs/architecture/specs/workflow-engine-buy-vs-build.md +231 -0
  78. package/docs/architecture/specs/workflow-format-unification.md +437 -0
  79. package/docs/architecture/testing/manual-testing-checklist.md +3420 -0
  80. package/docs/architecture/testing/okf-v0.2-conformance-runbook.md +924 -0
  81. package/docs/architecture/testing/task-workflow-manual-tests.md +1817 -0
  82. package/docs/architecture/testing/testing-workflow.md +446 -0
  83. package/docs/architecture/workflow-engine.md +274 -0
  84. package/docs/guides/README.md +33 -0
  85. package/docs/guides/author-bundles.md +310 -0
  86. package/docs/guides/author-workflows.md +520 -0
  87. package/docs/guides/bundles.md +321 -0
  88. package/docs/guides/capture-knowledge.md +136 -0
  89. package/docs/guides/claude-code-vs-akm-workflows.md +30 -0
  90. package/docs/guides/concepts.md +93 -0
  91. package/docs/guides/discover-and-load.md +158 -0
  92. package/docs/guides/getting-started.md +240 -0
  93. package/docs/guides/improve-the-library.md +246 -0
  94. package/docs/guides/knowledge-management.md +18 -0
  95. package/docs/guides/recipes/headless-install.md +97 -0
  96. package/docs/guides/recipes/website-source.md +28 -0
  97. package/docs/guides/run-workflows.md +279 -0
  98. package/docs/guides/scheduling.md +123 -0
  99. package/docs/guides/use-with-any-agent.md +129 -0
  100. package/docs/guides/wikis.md +81 -0
  101. package/docs/maintainers/README.md +19 -0
  102. package/docs/maintainers/curate-workmap.md +336 -0
  103. package/docs/maintainers/eval.md +3 -0
  104. package/docs/maintainers/local-development.md +108 -0
  105. package/docs/maintainers/release-checklist.md +103 -0
  106. package/docs/migration/README.md +2 -2
  107. package/docs/migration/release-notes/0.0.13.md +1 -1
  108. package/docs/migration/release-notes/0.1.0.md +1 -1
  109. package/docs/migration/release-notes/0.2.0.md +1 -1
  110. package/docs/migration/release-notes/0.3.0.md +1 -1
  111. package/docs/migration/release-notes/0.5.0.md +1 -1
  112. package/docs/migration/release-notes/0.6.0.md +1 -1
  113. package/docs/migration/release-notes/0.7.0.md +1 -1
  114. package/docs/migration/release-notes/0.7.3.md +2 -2
  115. package/docs/migration/release-notes/0.7.4.md +1 -1
  116. package/docs/migration/release-notes/0.7.5.md +1 -1
  117. package/docs/migration/release-notes/0.8.0.md +1 -1
  118. package/docs/migration/release-notes/0.9.0.md +1 -1
  119. package/docs/migration/release-notes/0.9.14.md +1 -1
  120. package/docs/migration/release-notes/0.9.15.md +1 -1
  121. package/docs/migration/release-notes/0.9.16.md +1 -1
  122. package/docs/migration/release-notes/0.9.17.md +1 -1
  123. package/docs/migration/release-notes/0.9.19.md +1 -1
  124. package/docs/migration/release-notes/0.9.2.md +1 -1
  125. package/docs/migration/release-notes/README.md +27 -31
  126. package/docs/migration/v0.5-to-v0.6.md +759 -0
  127. package/docs/migration/v0.8-to-v0.9.md +1 -1
  128. package/docs/plans/0.9.2-agent-command-workflow-plan.md +423 -0
  129. package/docs/posts/README.md +30 -0
  130. package/docs/posts/akm-command-tour.md +495 -0
  131. package/docs/posts/akm-logo-sized.webp +0 -0
  132. package/docs/posts/belief-aware-memory-12.md +139 -0
  133. package/docs/posts/config-v2-lessons-16.md +191 -0
  134. package/docs/posts/improve-loop-autonomous-10.md +225 -0
  135. package/docs/posts/improve-pipeline-debugging-0803.md +179 -0
  136. package/docs/posts/intro-part-01.md +76 -0
  137. package/docs/posts/intro-part-02.md +221 -0
  138. package/docs/posts/intro-part-03.md +190 -0
  139. package/docs/posts/intro-part-04.md +221 -0
  140. package/docs/posts/llm-mode-reflect-13.md +166 -0
  141. package/docs/posts/openpalm-built-on-akm.md +86 -0
  142. package/docs/posts/progressive-disclosure-06.md +129 -0
  143. package/docs/posts/proposal-safety-net-15.md +112 -0
  144. package/docs/posts/release-0.5.0.md +247 -0
  145. package/docs/posts/release-0.6.0.md +117 -0
  146. package/docs/posts/release-0.7.0.md +159 -0
  147. package/docs/posts/release-0.8.0.md +332 -0
  148. package/docs/posts/scattered-skills-05.md +100 -0
  149. package/docs/posts/task-assets-persistent-workflows-11.md +222 -0
  150. package/docs/posts/team-skills-07.md +198 -0
  151. package/docs/posts/wiki-agent-knowledge-08.md +223 -0
  152. package/docs/posts/workflows-vaults-09.md +321 -0
  153. package/docs/product-surface.md +54 -0
  154. package/docs/reference/README.md +1 -2
  155. package/docs/reference/asset-types.md +168 -0
  156. package/docs/reference/cli.md +5 -6
  157. package/docs/reference/env-and-secrets.md +126 -0
  158. package/docs/reference/memory.md +124 -0
  159. package/docs/reference/refs.md +156 -0
  160. package/docs/reference/registry.md +489 -0
  161. package/docs/reference/website-sources.md +141 -0
  162. package/package.json +12 -15
@@ -0,0 +1,745 @@
1
+ # Docs–code drift register and intent questions — ruled 2026-07-26 (v0.9.0-rc.10)
2
+
3
+ Status: maintainer rulings recorded 2026-07-26 — all 19 questions ruled.
4
+ Re-verified 2026-07-27 against `2d2edc1` (code identical to `453a0ba`; the
5
+ delta is docs-only). That pass corrected three register entries that had
6
+ drifted from the tree — Q-12 (landed, not open), the R-004 companion item
7
+ (user-facing print already removed), and the Q-18 remediation sketch (the
8
+ suggested predicate overshoots — see the amended landmine note).
9
+ Note: items below cite `docs/agents/AGENTS.md` / `AGENTS.full.md`. Those files
10
+ were deleted during the 0.9.0 docs sweep; their still-true content now lives in
11
+ `src/assets/hints/cli-hints-full.md` / `cli-hints-short.md`, which is what
12
+ `akm hints` prints.
13
+ Companion to: `0.9.0-public-api-issue-backlog.md` (implementation-only findings).
14
+ This register covers the complement: places where the **documentation and the
15
+ code disagree**, and places where the **intended implementation is genuinely
16
+ unclear** because the project's own decision records conflict with shipped
17
+ behavior.
18
+
19
+ Method: three independent audits (README + guides; architecture/specs/agent
20
+ docs + STABILITY/AGENTS/SECURITY; docs/reference) compared documented claims
21
+ against `src/` with file:line verification, plus live CLI execution for the
22
+ highest-stakes items. Items verified by actually running the CLI are marked
23
+ **[verified live]**. Line references may drift; every item names the file and
24
+ observable behavior so it can be re-verified.
25
+
26
+ Reading order: Part 1 records the intent conflicts and now carries the
27
+ **maintainer rulings (2026-07-26)** that settle them — the rulings table is
28
+ the authoritative direction; the question bodies remain as the evidence
29
+ record. Parts 2–3 are mechanical now that Part 1 is decided. Part 4 records
30
+ false alarms and verified-clean surfaces so future audits don't re-litigate
31
+ them.
32
+
33
+ ---
34
+
35
+ ## Part 1 — Decision needed (now ruled): the intent conflicts
36
+
37
+ Each question cites both sides. "Docs-as-intent" means the fix is code work;
38
+ "code-as-intent" means the fix is doc work — but several of these have the
39
+ *decision record itself* (STABILITY.md, `0.9.0-decisions.md`, `ref.md`) on the
40
+ losing side, which is why a ruling was needed first.
41
+
42
+ ### Maintainer rulings — 2026-07-26
43
+
44
+ Ruled by the maintainer in session review. Each ruling names the winning side
45
+ and the required follow-through; the question bodies below are kept as the
46
+ evidence record.
47
+
48
+ Until each follow-through lands, these rulings supersede conflicting statements
49
+ in the older records — `0.9.0-decisions.md` (notably D3's `mv` removal and D9's
50
+ `--auto-accept` wording), STABILITY.md (the `mv`-removal claim, the six-format
51
+ wording amended by Q-04, the missing tier entries), `ref.md`, and the
52
+ scaffolded stash assets such as `facts/conventions/organization.md`. Where any
53
+ of those contradicts this table, the table wins; treat the contradiction as
54
+ un-swept drift, not authority.
55
+
56
+ | Q | Ruling |
57
+ | --- | --- |
58
+ | Q-01 | Keep `akm mv`. Supersede D3; add an Experimental tier entry for `mv` to STABILITY.md; rewrite the scaffolded `facts/conventions/organization.md` fact and the other D3-side docs to teach the command. |
59
+ | Q-02 | Slash grammar only. Implement the decided slash form including `bundle//` enumeration; **remove the colon form entirely — no alias, no deprecation window**. Sweep `search --help`, `akm hints`, and the ref-prefix tests to slash. |
60
+ | Q-03 | Delete the `show` view modes per D2 (`SHOW_VIEW_MODES`, `normalizeShowArgv`, hidden `--akm*` flags). Fragment refs (D1) are the successor. |
61
+ | Q-04 | Implement basic support for all output formats on every non-exempt command, with `text` and `md` **collapsed into a single format**. Align the persisted `output.format` schema with the CLI's accepted set and fix the `INVALID_FORMAT_VALUE` hint. Follow-through detail: both `text` and `md` stay accepted as flag values resolving to the one collapsed renderer (amend here if a spelling is instead dropped); STABILITY.md's "all six formats" wording (`:70-77`) updates to the collapsed set; D7's exemption mechanism is in scope — exemptions must be declared and warned, never silent. Downstream: D-08's global `--format` table, the `INVALID_FORMAT_VALUE` hint, and completions (backlog R-052) update to the final accepted set. |
62
+ | Q-05 | Implement both gates (`experimental.workflowEngine`, `experimental.improveAutonomy`) as STABILITY.md documents them. |
63
+ | Q-06 | `show`-only is the intended 0.9.0 scope for fragment refs. State that scope in ref.md/D1; wider rollout is post-0.9.0. |
64
+ | Q-07 | Honor D11: fix the ref-parser seam centrally so opaque adapter conceptIds are accepted by the ref-consuming commands (graph, tasks, improve, proposals, utility repo, indexer walk). |
65
+ | Q-08 | Slash spelling only (`env/<name>`, `secrets/<name>`). Update every help/doc surface that teaches `env:`/`secret:`; **no colon alias**. |
66
+ | Q-09 | Keep the code's provider taxonomy (`filesystem`/`git`/`npm`/`website`); fix the docs that teach `local`/`managed`/`remote`. |
67
+ | Q-10 | `--rerank` was designed-then-dropped: remove the cli.md reference and the setup-wizard prose. |
68
+ | Q-11 | Keep flat `--name`; hierarchical placement goes through **`--path`, like other commands**. Document `--path` in cli.md and drop the "slashes in names" claim. **Doc-only work — verified 2026-07-26:** `workflow create` already declares `--path` (`workflow-cli.ts:204`), already routes it through the shared `normalizeCreateSubPath`/`combineCreatePath` helpers (`:227`) used by `knowledge`, `contribute`, and the env/secret create paths, and its `--name` help already reads "flat, no '/'; use --path for a subdirectory" (`:201`). Only `docs/reference/cli.md:574-577` is wrong. |
69
+ | Q-12 | Implement the STABILITY.md contract: parse `--auto-accept`, warn "deprecated and ignored" in 0.9, hard error in 0.10. Align D9/E4 wording. |
70
+ | Q-13 | Treat as a regression: restore the 7-day (static-index) and 24-hour (skills-sh) stale-fallback windows. |
71
+ | Q-14 | Adopt the convention: every registered command gets a tier and the reference either documents it or explicitly lists it internal. `extract`, `proposal drain`, and `improve canary` are tiered **Experimental**. Open follow-through: tiers for `lint`, `backup`, and the workflow exec/driver family (`run`/`brief`/`report`/`watch`/`abandon`) are still unassigned — record them when the STABILITY.md re-tier (Part 5, step 3) lands. |
72
+ | Q-15 | Code wins: fix the docs wording (`raw/**` is indexed as `wiki-source` documents, not pages). |
73
+ | Q-16 | Trim §4 to the five implemented contracts (`RankingContributor`, `SearchHitEnricher`, `ActionContributor`, `ProposalValidator`, `SessionLogHarness`); delete the seven unimplemented entries. §3.9's seam name updates to the shipped `RunnerSpec`/`executeRunner` (`runner-dispatch.ts`) so the doc describes reality throughout. |
74
+ | Q-17 | Do not keep the standalone brief: **consolidate** `runtime-boundary-design.md` into the other architecture docs, keeping only the still-necessary details; retire the file. Destination: fold the `bun:sqlite`/`Bun.*` import-boundary rule and the `database.ts`/`runtime.ts` export table into `architecture.md` (Module Boundaries / Tech Stack); drop the stale "Architect: investigate" checklists and the outdated 3-hard-import-files claim rather than carrying them over; remove the file's row from `docs/architecture/README.md` when retiring it. |
75
+ | Q-18 | Both halves. The two-registry split stays the core truth: `KNOWN_TYPES` is the presentation vocabulary, `PLACEMENT_SPECS` the stash-resident subset, and the exhaustiveness check asserts placement keys ⊆ known types (adapter-emitted `instruction` docs round-trip via the Q-07 opaque-conceptId fix). **And** the akm adapter gains `instruction` as a stash-resident asset type — a `PLACEMENT_SPECS` entry with an `instructions/` stash dir on the markdown spec — so instruction assets become creatable, browsable, and listed by `akm info` like knowledge. |
76
+ | Q-19 | Fix the resolver: `resolveSourcesForOrigin` must match install refs (`github:owner/repo`) so `//meta` and the `akm add` error hint work as documented. |
77
+
78
+ ### Implementation status against the base branch (`claude/0-9-0-release-review-bcjxxu` @ `453a0ba`)
79
+
80
+ Re-verified 2026-07-26 after merging the base branch. The questions below were
81
+ written against `a8464f2`; the base branch has since implemented part of the
82
+ ruling set. Status per ruling:
83
+
84
+ | Q | Status | Evidence |
85
+ | --- | --- | --- |
86
+ | Q-01 | **Landed** | `mv` retained and declared Experimental (`STABILITY.md:72`); D3 explicitly excluded from the removal list (`:345`). |
87
+ | Q-02 | **Landed** | `parseRefPrefixQuery` now takes conceptId-prefix/`bundle//` slash forms and no colon form (`fts-query.ts:88-100`). |
88
+ | Q-03 | **Landed** | `SHOW_VIEW_MODES` and `normalizeShowArgv` deleted; `#fragment` golden replaces the lines-view golden. |
89
+ | Q-04 | **Conflict — see below** | All six formats implemented with an exemption registry (`output/format-exempt.ts`, `cli/shared.ts:219-244`), but `text` and `md` are **separate** renderers. |
90
+ | Q-05 | **Partial** | `experimental.improveAutonomy` shipped (`config/schema/experimental.ts:29`, `improve/autonomy-gate.ts`, reported by `tasks doctor`), and `453a0ba` closed the two lanes that were still silently gated — `memoryCleanup` and `contradiction` have no `processes.<name>.enabled` flag, so `applyAutonomyGate` structurally could not see them and suppressed them with no warning, event, or doctor line (the exact silent no-op the contract forbids). It also moved the gate off the read-only `analyzeMemoryCleanup` onto `applyMemoryCleanup`, so review-first runs get their preview back. `experimental.workflowEngine` still has zero code. |
91
+ | Q-14 | **Partial** | The workflow exec/driver family is now tiered Experimental (`STABILITY.md:230-240`). `extract`, `proposal drain`, `improve canary`, `lint`, and `backup` still have no tier entry and no `cli.md` section. |
92
+ | Q-06 | Open | `parseRefInput` still rejects `#fragment` outright (`asset/resolve-ref.ts:257-262`); `show` still works only by bypassing it. Recommendation: the ruling makes this doc-only for 0.9.0 — add one "scope: `show` only in 0.9.0" sentence to `ref.md` § Fragments and D1's Status line; no code change. |
93
+ | Q-07 | **Renderer half advanced; parser half open** | `453a0ba` replaced `show`'s OKF-only branch with `usesIndexedProjection` (`read/show.ts:536-559`): OKF plus **any** indexed item whose type AKM does not place now keeps its adapter's projection. That is the format-agnostic direction D11 asked for, on the *render* seam. The *parser* seam is untouched — `parseRefInput` still throws when a conceptId has no known asset-type prefix (`resolve-ref.ts:265-271`), so graph, tasks, improve, proposals, the utility repo, and the indexer walk remain strict. |
94
+ | Q-08 | Open | Colon spellings still taught by `env-cli.ts:392,455`, `secret-cli.ts:95,160`, `prompts.ts:78`, `AGENTS.md:44`. |
95
+ | Q-09 | Code correct | `VALID_SOURCE_KINDS` unchanged (`sources/sources-cli.ts:34`) — the ruled direction; the doc sweep is outstanding. |
96
+ | Q-10 | Open | `curate --rerank` still advertised by the setup wizard (`connection.ts:365,424`); cli.md reference also unswept. Recommendation: two-line deletion in each file, no dependencies — batch with the Part 5 step-2 sweep. |
97
+ | Q-11 | Open | `cli.md:613-614` still claims slashes are supported in workflow names. |
98
+ | Q-12 | **Landed** (0.9 half) — the register had this wrong | `resolveScopeAfterRetiredAutoAccept` (`improve-cli.ts:103-117`, shipped `2a68c7a`) warns "--auto-accept was removed in 0.9 and is ignored", names the replacement (`proposal drain --promote` / triage `applyMode: "promote"`), announces the 0.10 hard error, and **drops the poisoned positional** — the space-separated form (`--auto-accept 90`) previously read `90` as the scope, matched nothing, and exited 0. Remaining: align D9/E4 wording (E4 still says the runtime "does not parse" the flag). |
99
+ | Q-13 | Open | No second stale window in the registry cache. Recommendation: add a per-provider `staleWindowMs` to `fetchCachedJson` (`registry-cache.ts:136-141`) and have `getRegistryIndexCache` return rows past TTL but inside the window with a `stale: true` marker — the doc'd 7d/24h numbers become the two providers' constants. Small, self-contained. |
100
+ | Q-15 | Open | `wikis.md:59-60` still says `raw/` is "never indexed as pages". |
101
+ | Q-16, Q-17 | Open | §4 still lists all twelve contracts; `runtime-boundary-design.md` still present. |
102
+ | Q-18 | Open — **and now has a landmine, see below** | `instruction` still absent from `PLACEMENT_SPECS`. |
103
+ | Q-19 | Open | `resolveSourcesForOrigin` still matches derived installation ids only (`registry/origin-resolve.ts:18-23`). Recommendation: also compare `origin` against each installation's install ref (`installations.ts:98-110` already derives it) — an additive `||` in the filter; land together with backlog R-007 so the `akm add` hint chain works end to end. |
104
+
105
+ **Q-04 conflict — RESOLVED 2026-07-27: keep six formats.** The maintainer
106
+ amended the ruling to accept D7 as shipped: six distinct formats (`text` for
107
+ terminal rendering, `md` for document artifacts) plus the exemption registry.
108
+ The collapse is off the table. Follow-through landed the same day: the
109
+ `INVALID_FORMAT_VALUE` hint (`errors.ts:111`) and bash completions
110
+ (`completions.ts`) now carry the six-value set, completions dropped the bogus
111
+ `--detail summary` value and gained `--shape`, and the per-command `--format`
112
+ help strings on search/curate/show were updated. Q-04's original follow-through
113
+ detail in the rulings table is superseded by this note; STABILITY.md's
114
+ six-format wording stands as-is. Related same-day rulings: **R-029** —
115
+ `akm backup` is removed from the CLI (the capability lives at
116
+ `akm-migrate backup`/`restore`, which already existed; migration docs swept);
117
+ **R-047** — the scope-narrowing axis unifies on `--filter` for both `search`
118
+ and `show`, `--scope` removed with **no alias** (the old spelling now fails
119
+ loudly via the extra-positional guard, pinned by test). The paragraph below is
120
+ kept as the evidence record.
121
+
122
+ Original conflict note: The ruling recorded above says
123
+ "collapse `text` and `md` into a single format". The base branch instead landed
124
+ D7 as *six distinct* formats: `md` gained a renderer registry plus a generic
125
+ markdown fallback, explicitly so that "no command emits JSON under `--format
126
+ md` any more" (`cli/shared.ts:234-241`). It also built the exemption registry
127
+ D7 asked for (`format-exempt.ts`), which the ruling wanted. So the shipped work
128
+ satisfies the ruling's first half and contradicts its second. Either the
129
+ collapse is applied on top of D7 (deleting one of the two renderer paths), or
130
+ the ruling is amended to accept six formats. Until that is decided, the Q-04
131
+ follow-through detail recorded in the table above is provisional.
132
+
133
+ **Q-18 now collides with `usesIndexedProjection` — sequence the work.** `453a0ba`
134
+ made `show` decide between the adapter's indexed projection and the AKM matcher
135
+ by asking `!placementTypes().includes(entry.type)` (`read/show.ts:557`). Today
136
+ `instruction` is not a placement type, so adapter-emitted `CLAUDE.md`/`AGENTS.md`
137
+ items (claude/opencode adapters, `tool-dir-shared.ts:110-112`) take the
138
+ projection and render with their indexed content — the behavior that commit was
139
+ written to restore. The moment Q-18's ruling lands and `instruction` joins
140
+ `PLACEMENT_SPECS`, that predicate flips to `false` for those items and `show`
141
+ starts re-deriving them through `recognizeMatch`, reintroducing for `instruction`
142
+ exactly the regression `453a0ba` fixed for `website`/`file`. Implementing Q-18
143
+ therefore requires widening the predicate at the same time.
144
+
145
+ **Amended 2026-07-27 — the sketch above overshoots.** Gating on
146
+ `entry.adapterId !== "akm"` would change behavior for four other adapters:
147
+ `agent-skills`, `akm-task`, `akm-workflow`, and `llm-wiki` all publish
148
+ `document.content` AND emit AKM-placed types (`skill`, `task`, `workflow`,
149
+ `knowledge`) whose items deliberately render through AKM's bespoke type
150
+ renderers today (a skill keeps its run-command action, a task its schedule
151
+ view). Flipping them to the generic projection is a second regression wearing
152
+ the fix's clothes. The correct shape is an explicit ownership signal rather
153
+ than either inference: when `instruction` joins `PLACEMENT_SPECS`, either (a)
154
+ route `instruction`-typed items from the `claude`/`opencode` adapters to the
155
+ projection by adapter id — a two-member allowlist, honest about being one — or
156
+ (b) add an adapter-declared `ownsPresentation` marker on the indexed document
157
+ and let `usesIndexedProjection` read it. (b) is the durable fix; (a) is
158
+ acceptable 0.9.0 scope. Either way, land a guard test pinning
159
+ instruction-item `show` output BEFORE the `PLACEMENT_SPECS` change, so the
160
+ flip fails a test instead of shipping silently. **Ruled 2026-07-27: option
161
+ (b), the `ownsPresentation` marker** — adapters stamp presentation ownership
162
+ on the documents they index and `usesIndexedProjection` reads the stamp;
163
+ `index.db` being a regenerable cache, the schema addition needs only a
164
+ reindex. Implement the marker together with (or before) the
165
+ `PLACEMENT_SPECS.instruction` entry, guard test first. This remains the concrete cost
166
+ of the two-registry split: placement is now load-bearing for rendering, not
167
+ just for storage.
168
+
169
+ ### Q-01 — `akm mv`: decided removed, fully shipped. Which wins?
170
+
171
+ - **Removed, per:** `0.9.0-decisions.md` D3 (`:67-117`), `STABILITY.md:60-62`,
172
+ `ref.md:259-286`, `architecture.md:110-111`, `docs/agents/AGENTS.full.md:215`,
173
+ `stash-conventions-code-spec.md:189-195`, and the **scaffolded stash asset**
174
+ `facts/conventions/organization.md` ("A rename is delete plus create. There
175
+ is no command that preserves an asset's identity or learned state").
176
+ - **Shipped, per:** `src/cli.ts:98,529`; `src/commands/mv-cli.ts` (1,300+ LOC)
177
+ whose header states it re-keys the index row, usage_events history, and
178
+ state.db salience rows **in place** — the exact inverse of D3's contract —
179
+ and `docs/reference/cli.md:888-921` documenting it as live. `mv-cli.ts`
180
+ self-labels "Experimental — see STABILITY.md", but STABILITY.md has no `mv`
181
+ tier entry. D3's cleanup item (delete the `mv` fs-txn kind) is also
182
+ unexecuted (`MV_TXN_KIND`, `mv-cli.ts:300`).
183
+ - **Cost of ambiguity:** agents reading the shipped conventions fact avoid the
184
+ safe command and hand-roll the dangerous procedure it automates.
185
+
186
+ ### Q-02 — Ref-prefix browse grammar: slash (decided) vs colon (implemented)
187
+
188
+ - **Decided grammar (slash), per:** D4, `STABILITY.md:50-52` (**Stable tier**),
189
+ `ref.md:159-186`, `docs/guides/concepts.md:237-253` ("that spelling is
190
+ gone"), `docs/reference/cli.md:338,344`, and `akm hints` output
191
+ (`akm search "memories/projectA/"`).
192
+ - **Implemented grammar (colon), per:** `parseRefPrefixQuery`
193
+ (`src/indexer/search/fts-query.ts:85-102`) accepts exactly
194
+ `<singular-type>:` / `<singular-type>:<prefix>/`; no-colon queries return
195
+ `null` and fall through to keyword FTS. Bundle enumeration (`bundle//`) has
196
+ **no code path**. `search --help` (`search-cli.ts:36`) documents the colon
197
+ form; tests pin it (`tests/integration/search-ref-prefix.test.ts:160,184,348`).
198
+ - **[verified live]** `akm search "memories/"` → keyword search (returned an
199
+ unrelated fact); `akm search "memory:"` → actual type enumeration.
200
+ - Note: `akm hints` shows BOTH spellings (`"memories/projectA/"` and
201
+ `"knowledge:"`) — the tool's own agent guidance is internally split.
202
+
203
+ ### Q-03 — `akm show` view modes: decided deleted, still live and advertised
204
+
205
+ - **Deleted, per:** D2 (`0.9.0-decisions.md:44-63`), `ref.md:144-157` — the
206
+ positional `toc|section|lines|frontmatter|full` grammar, `normalizeShowArgv`,
207
+ and the hidden `--akmView/--akmHeading/--akmStart/--akmEnd` flags.
208
+ - **Live, per:** `show.ts:672` (`SHOW_VIEW_MODES`), `show.ts:695-766`
209
+ (`normalizeShowArgv`), invoked pre-citty at `src/cli.ts:605`; the view modes
210
+ are the headline example in `show --help` and in `akm hints`.
211
+
212
+ ### Q-04 — `--format` universality: a Stable-tier contract with no implementation
213
+
214
+ - **Contract, per:** D7, `STABILITY.md:70-77`: all six formats on every
215
+ non-exempt command; exemptions "declared, documented, and warned about
216
+ rather than silent".
217
+ - **Code:** `html` throws for every command except `health`
218
+ (`src/cli/shared.ts:208-215`; health intercept `src/cli.ts:341`); `md`
219
+ silently returns the JSON envelope except for health (`shared.ts:201-207`);
220
+ `text` falls back to `JSON.stringify` where no renderer is registered
221
+ (`shared.ts:196-199`); no exemption registry exists (0 hits for
222
+ `FORMAT_EXEMPT`). `USAGE_HINTS.INVALID_FORMAT_VALUE`
223
+ (`src/core/errors.ts:111`) lists only four of the six accepted values.
224
+ - **Related asymmetry:** persisted `output.format` schema accepts only
225
+ `json|yaml|text` (`src/core/config/schema/output.ts:15`) while the CLI flag
226
+ accepts six — a saved `md` preference is silently dropped.
227
+
228
+ ### Q-05 — `experimental.workflowEngine` / `experimental.improveAutonomy`: documented gates, zero code
229
+
230
+ - **Contract, per:** `STABILITY.md:192-218` (gate table; "a gated lane never
231
+ degrades into a silent no-op"), D8 (`0.9.0-decisions.md:226`),
232
+ `0.9.0-release-surface-review.md:438,517,522`.
233
+ - **Code:** zero occurrences of `experimental` / `workflowEngine` /
234
+ `improveAutonomy` in `src/` or `schemas/akm-config.json`; `akm workflow run`
235
+ (`workflow-cli.ts:331`) is ungated. Because the top-level schema is
236
+ `.passthrough()`, setting the keys is accepted and inert — precisely the
237
+ silent no-op the contract forbids.
238
+ - **Question:** are the gates still intended for 0.9.0 final, or is the
239
+ STABILITY.md section to be dropped?
240
+
241
+ ### Q-06 — Fragment refs (`#fragment`): implemented for `show` only
242
+
243
+ - D1 (`0.9.0-decisions.md:19-40`) and `ref.md:111-142` declare the fragment
244
+ production resolved. `parseRefInput` still throws `INVALID_FLAG_VALUE` on
245
+ any fragment (`resolve-ref.ts:255-264`; docblock: "No input boundary
246
+ consumes an export fragment"). `show` works by bypassing it
247
+ (`show.ts:312,370,390-397`).
248
+ - **Question:** is "show only" the intended scope of D1, or an incomplete
249
+ rollout across the other ref-consuming commands?
250
+
251
+ ### Q-07 — Opaque adapter conceptIds (the OKF/format-agnostic promise)
252
+
253
+ - **Contract, per:** `okf-support.md:42-45` (item 5) and D11
254
+ (`0.9.0-decisions.md:302-313`): `okfbundle//tables/customers` must be
255
+ accepted by "show and other applicable ref-consuming commands"; the
256
+ leading-segment (known type dir) requirement "is therefore an OKF support
257
+ bug". `ref.md:33-37,84-86`: conceptIds are opaque paths.
258
+ - **Code:** `typeNameFromConceptId` requires a known stash subdir and
259
+ `parseRefInput` throws otherwise (`resolve-ref.ts:230-236,265-271`). Only
260
+ `show` bypasses. Still routed through the strict parser: graph
261
+ (`graph.ts:634`), tasks (`validator.ts:46,76`, `runner.ts:361,578`), improve
262
+ (`improve.ts:460`), proposals repo (`proposals-repository.ts:62`), utility
263
+ repo (`index-utility-repository.ts:163`), indexer walk
264
+ (`path-resolver.ts:25`).
265
+ - **Question:** which commands are "applicable"? This is the single biggest
266
+ blocker to the stated agent/harness/format-agnostic direction.
267
+
268
+ ### Q-08 — env/secret ref spelling: `env/prod` vs `env:prod`
269
+
270
+ - **Code canonical:** `env/<name>`, `secrets/<name>`; bare names auto-qualify
271
+ (`src/core/env-secret-ref.ts:55-62,128`).
272
+ - **Colon spellings taught by:** `secret --help` example
273
+ `akm secret path secret:deploy-key` (`secret-cli.ts:95`), `env set/unset`
274
+ help (`env-cli.ts:392,455`), the vault-removal signpost itself ("use `env:`
275
+ … or `secret:`", `env-secret-ref.ts:49`), `docs/agents/AGENTS.md:44-45`,
276
+ and `docs/migration/v0.8-to-v0.9.md` (TL;DR `akm env run env:<name>`;
277
+ "entries surface under `env:`").
278
+ - **[verified live]** `akm secret path secret:deploy-key` → `Secret not
279
+ found: secrets/secret:deploy-key`; `akm env path env:prod` → `Env not
280
+ found: env/env:prod`; slash and bare forms work.
281
+ - **Question:** should the colon forms be accepted as aliases (they are the
282
+ spelling every help surface teaches), or should every emitter be swept to
283
+ the slash form?
284
+
285
+ ### Q-09 — `akm list --kind`: conceptual vs provider taxonomy
286
+
287
+ - **Docs:** `local | managed | remote` used consistently
288
+ (`docs/guides/sources-registries.md:52-56`, `docs/reference/cli.md:754-764`,
289
+ registry.md prose).
290
+ - **Code:** `VALID_SOURCE_KINDS = filesystem|git|npm|website`
291
+ (`sources-cli.ts:36-47`); every documented example exits 2.
292
+ - Both taxonomies are coherent (the lock-backed "managed" distinction exists
293
+ in code as a *behavioral* split — see backlog R-015). Which is the intended
294
+ user-facing axis?
295
+
296
+ ### Q-10 — `curate --rerank`: two independent references, zero implementation
297
+
298
+ - Referenced by `docs/reference/cli.md:129` **and** live setup-wizard prose
299
+ (`src/setup/steps/connection.ts:365,424`). No such flag exists
300
+ (`search-cli.ts:119-137`). Designed-then-dropped, or specced-never-built?
301
+ - **Resolved (0.9.15, #951):** the setup-wizard reference is already gone;
302
+ the remaining `--rerank` / "curate reranks by intent" claims
303
+ (`docs/reference/cli.md`, `docs/guides/getting-started.md`,
304
+ `docs/guides/discover-and-load.md`, and the `curate` command description
305
+ in `search-cli.ts`) were deleted rather than implemented — no `--rerank`
306
+ flag or reranking behavior exists in `akm curate`. A `rerank` engine kind
307
+ (the lab's cross-encoder endpoint from the same fleet review) is real
308
+ feature work, not a doc fix, and is deferred to its own issue.
309
+
310
+ ### Q-11 — `workflow create` hierarchical names
311
+
312
+ - `docs/reference/cli.md:574-577`: "Forward slashes are supported for
313
+ hierarchical names (e.g. `release/ship`)."
314
+ - Code: `assertFlatAssetName` rejects any `/` in `--name`
315
+ (`workflow-cli.ts:226`, `asset-create.ts:44-51`) — yet the post-combine
316
+ validation regex explicitly permits `/` (`workflow-cli.ts:228-229`), and
317
+ `--path` (undocumented in cli.md) reintroduces it. The regex permitting `/`
318
+ suggests the flat guard may be the later, unintended restriction.
319
+
320
+ ### Q-12 — `--auto-accept` removal contract: two docs, two contracts, code matches neither
321
+
322
+ - D9 / `0.9.0-release-surface-review.md` E4: the strict 0.9 runtime "does not
323
+ parse" the flag (implies hard failure). `STABILITY.md:114-116`: "deprecated
324
+ and ignored; becomes a hard error in 0.10."
325
+ - Code: no such arg is declared and no deprecation warning exists — citty
326
+ silently drops it. Neither doc's signposting reaches the user.
327
+
328
+ ### Q-13 — Registry stale-fallback windows: doc'd tiers may be a code regression
329
+
330
+ - `docs/reference/registry.md:325,345`: static-index has a "7-day stale
331
+ fallback"; skills-sh "up to 24 hours" on network failure.
332
+ - Code: no second window exists — `getRegistryIndexCache` returns `undefined`
333
+ past TTL (`registry-index-cache-repository.ts:80`); the stale branch in
334
+ `fetchCachedJson` (`registry-cache.ts:136-141`) can only fire within TTL.
335
+ The numbers are too specific to be invented, and the cache helper was
336
+ extracted with a "behaviour-preserving extraction" note (`:95-97`) —
337
+ possibly lost functionality rather than doc fiction.
338
+
339
+ ### Q-14 — What is public surface? (the undocumented command families)
340
+
341
+ `akm lint`, `akm extract`, `akm backup`, `akm proposal drain`,
342
+ `akm improve canary`, and the workflow exec/driver family
343
+ (`run/brief/report/watch/abandon`) have **no section in
344
+ `docs/reference/cli.md`** (which calls itself authoritative), and STABILITY.md
345
+ assigns them no tier. Only `mv` is marked Experimental anywhere. Deliberate
346
+ hiding vs. doc debt is undecidable — and it matters for a 1.0 contract
347
+ freeze. A convention is needed: every registered command gets a tier
348
+ (stable/experimental/internal) and the reference either documents it or
349
+ explicitly lists it as internal.
350
+
351
+ ### Q-15 — Wiki `raw/**` indexing vs "never indexed"
352
+
353
+ `docs/guides/wikis.md:60` (and adapter prose elsewhere) say `raw/` is
354
+ structural and "never indexed as pages". The llm-wiki adapter indexes
355
+ `raw/**.md` as first-class searchable documents with `type: "wiki-source"`
356
+ (`llm-wiki-adapter.ts:82-83,271,291` — "First-class addressable +
357
+ searchable"). Literally consistent ("not *pages*"), practically misleading.
358
+ Intended behavior or over-indexing?
359
+
360
+ ### Q-16 — `functional-contract-patterns.md` §4: aspiration or contract?
361
+
362
+ 7 of 12 "Recommended Contracts" have no implementation (`PathResolver`,
363
+ `MatchContributor`, `MetadataContributor`, `LintContributor`,
364
+ `ImproveContributor`, `IndexPostProcessor`, `AgentRunner`); §3.9 states the
365
+ `AgentRunner` seam as a *rule*, but the actual seam is
366
+ `RunnerSpec`/`executeRunner` (`runner-dispatch.ts`). Mark the doc as
367
+ aspirational, or reconcile the seam names.
368
+
369
+ ### Q-17 — `runtime-boundary-design.md`: shipped, amended, or superseded?
370
+
371
+ Still written as an open brief with unchecked "Architect: investigate" boxes
372
+ (`:32-37,69-73,104-106,132-140`), yet both target files exist and are complete
373
+ (`src/storage/database.ts`, `src/runtime.ts` — all 11 tabled exports present).
374
+ Its "3 hard-import files" no longer match the tree. Originally flagged as
375
+ needing a status banner; ruled instead (see the rulings table): consolidate the
376
+ still-necessary details into the other architecture docs and retire the file.
377
+
378
+ ### Q-18 — The `instruction` asset type: half-registered
379
+
380
+ Present in `KNOWN_TYPES`/`TYPE_PRESENTATION` (renderer + action builder),
381
+ absent from `PLACEMENT_SPECS` — so it is invisible to `akm info`, unbrowsable,
382
+ and its refs don't round-trip (`recognition-util.ts:92-106` vs
383
+ `asset-placement.ts:89-166`). Register fully or remove; either way, add a
384
+ compile-time exhaustiveness check tying the two registries together.
385
+
386
+ ### Q-19 — Install-ref meta resolution: aspirational error message
387
+
388
+ `concepts.md:343` documents `akm show github:owner/repo//meta`, and
389
+ `showStashMeta`'s own error says "Run: akm add ${metaRef.origin}"
390
+ (`show.ts:149`) — but `resolveSourcesForOrigin` matches derived installation
391
+ ids that can never equal `github:owner/repo` (`origin-resolve.ts:18-23`,
392
+ `installations.ts:98-110`). Either the resolver lost install-ref support or
393
+ the doc + error message are aspirational.
394
+
395
+ ---
396
+
397
+ ## Part 2 — Verified drift register (docs describe behavior the code doesn't have)
398
+
399
+ ### 2.1 STABILITY.md (contract-tier claims)
400
+
401
+ - **D-01** ✅ **Fixed** (D4 landed): slash enumeration incl. `bundle//` is the
402
+ implementation; the colon form is gone. Was: listed Stable; not implemented.
403
+ - **D-02** ✅ **Fixed as six formats** (D7 landed): registries + generic
404
+ md/html fallbacks + declared exemptions. NOTE the Q-04 collapse ruling is
405
+ still unresolved against this — see the Q-04 conflict note.
406
+ - **D-03** ✅ **Fixed** (Q-01 landed): STABILITY.md now carries the
407
+ Experimental `mv` entry and no removal claim.
408
+ - **D-04** Proposal status vocabulary wrong: doc says
409
+ `accepted/pending/proposed/rejected/archived` (`STABILITY.md:145-147`);
410
+ actual `ProposalStatus = pending|accepted|rejected|reverted`
411
+ (`proposal-types.ts:157`, `proposal-cli.ts:55`). `proposed` is an entry
412
+ *quality*, `archived` is not a status, `reverted` is documented nowhere.
413
+ - **D-05** ✅ **Fixed** (Q-12 landed, `2a68c7a`): warn-and-ignore implemented
414
+ incl. the scope-poisoning drop; see the corrected Q-12 status row.
415
+
416
+ ### 2.2 Root `AGENTS.md` (contributor guidance)
417
+
418
+ - **D-06** Instructs configuring `llm.maxTokens` / `llm.timeoutMs` /
419
+ `llm.concurrency` in config.json (`AGENTS.md:46-48`) — a top-level `llm`
420
+ key is **hard-rejected** at load with exit 78
421
+ (`config-schema.ts:157-165`: "llm is retired in 0.9").
422
+ `docs/architecture/internals/indexing.md:6,78-89` repeats the retired keys,
423
+ as does a stale comment at `indexer.ts:1601`.
424
+ - **D-07** Error envelope documented as `{ok:false, error, code}`; code also
425
+ emits `hint` (`cli/shared.ts:93`). Exit-code table omits 4 (health warn,
426
+ `cli.ts:583`) and 70 (INTERNAL, `shared.ts:45`); same omission in
427
+ `docs/agents/AGENTS.md:60-67`.
428
+
429
+ ### 2.3 `docs/reference/cli.md`
430
+
431
+ - **D-08** ◐ **Partial**: the global `--format` table now lists all six values
432
+ (`cli.md:18`, updated with D7); the `--output` global-flag row is **still
433
+ missing**. Remaining work: one table row. (Value set may shrink again if the
434
+ Q-04 collapse is chosen.)
435
+ - **D-09** `init` dir list stale: missing `tasks/`, `sessions/`, `facts/`
436
+ (13 dirs via `stashDirNames()`, `init.ts:126`, `asset-placement.ts:203`).
437
+ Note: Q-18's ruling adds an `instructions/` placement dir (13 → 14) — sweep
438
+ this item and D-46 after that change lands, regenerating from
439
+ `stashDirNames()` rather than re-hardcoding.
440
+ - **D-10** `akm.llm` indexing claim uses the retired key (see D-06).
441
+ - **D-11** ◐ **Partial**: `--report` and `--window-compare` are now documented
442
+ (health redesign, `0475870`) and `--compare` no longer exists to document;
443
+ `--group-by` and `--windows` still have no table row.
444
+ - **D-12** search: `--shape summary` described as a silent no-op alias of
445
+ brief (`cli.md:365,395`); code rejects it at startup and in the shape
446
+ registry (`cli.ts:632-634`, `shapes.ts:94-107`). cli.md:47-51 states the
447
+ correct behavior — the doc contradicts itself.
448
+ - **D-13** search `--type` list incomplete (missing `task`, `session`,
449
+ `fact`); undocumented flags `--belief` (table), `--no-project-context`,
450
+ `--include-sessions`. Shape-source pointer cites `src/output/shapes.ts` for
451
+ functions that live in `src/output/shapes/helpers.ts:342,385`.
452
+ - **D-14** show: `path`/`editable` are always projected, not `--detail full`
453
+ additions (`helpers.ts:492-495`); only `schemaVersion`/`editHint` are
454
+ full-only.
455
+ - **D-15** workflow: 5 of 14 subcommands undocumented (`run`, `brief`,
456
+ `report`, `watch`, `abandon`); `complete --summary` (required, gate-validated,
457
+ `workflow-cli.ts:112-132`) undocumented; `start --force`, `status --units`,
458
+ `complete --evidence` undocumented; hierarchical-name claim false (Q-11).
459
+ - **D-16** add: dangerous-env-key block exits **1**, not 2
460
+ (`add-cli.ts:200,221,355`); key list "23 total" vs 41 literals + 2 pattern
461
+ families (`env-key-rules.ts:35-109`); scan is top-level `env/*.env` only,
462
+ not "every file" (`add-cli.ts:87`).
463
+ - **D-17** list: `--kind` values wrong — all four documented examples exit 2
464
+ (Q-09). `remove --yes/-y` undocumented.
465
+ - **D-18** feedback/history/log: missing `--failure-mode`, repeatable `--tag`
466
+ (`feedback-cli.ts:212-222`); `history --include-proposals`,
467
+ `--accept-rate-by-source` (`sources-cli.ts:307-320`); `log --include-tags`,
468
+ `--exclude-tags` (`observability-cli.ts:53-60`).
469
+ - **D-19** registry: "four subcommands" (five exist; the doc itself documents
470
+ five); `registry remove --yes` undocumented.
471
+ - **D-20** config: `validate`, `show`, `enable`, `disable` subcommands and
472
+ `--silent` undocumented (`config-cli.ts:138-260`) — `validate` is
473
+ load-bearing (startup bypass allowlist, `cli.ts:575`) and `enable`/`disable`
474
+ are referenced by registry.md:347.
475
+ - **D-21** env: subcommand table omits `set`/`unset` (both registered,
476
+ `env-cli.ts:509-510`); `create --sensitive/--path/--target` never in a flag
477
+ table.
478
+ - **D-22** improve: `archiveRetentionDays` documented as `improve.*` with
479
+ default 30 — actually **top-level** with default **90**
480
+ (`config-schema.ts:149`, `repository.ts:1054`); `--skip-if-locked`,
481
+ `--sync/--no-sync`, `--push/--no-push` undocumented; `improve canary
482
+ [--refresh]` entirely undocumented (`improve-cli.ts:49,96,160-163`).
483
+ - **D-23** proposal: `drain` verb undocumented while cli.md:1991 asserts a
484
+ six-verb grammar (`proposal-cli.ts:339-383`, 8 flags); bulk
485
+ `--max-diff-lines`/`--older-than`/`--dry-run` undocumented.
486
+ - **D-24** tasks: `tasks_invoked`/`tasks_completed` events do not exist —
487
+ task runs write the `task_history` table, surfaced by `akm tasks history`,
488
+ not `akm log` (`runner.ts:24`, `task-history-repository.ts:112,162`);
489
+ `tasks add --disabled/--force/--rebind` and `init`'s CI skip undocumented.
490
+ - **D-25** `akm lint`, `akm extract`, `akm backup` have no cli.md section at
491
+ all (Q-14).
492
+ - **D-26** Cross-reference anchors into configuration.md don't exist
493
+ (`#defaultwritetarget`, `#memory-scope`, `#graph-boost-search-tuning`).
494
+ - **D-27** agent/propose: `agent --cwd`, `propose --path` undocumented.
495
+
496
+ ### 2.4 `docs/reference/configuration.md`
497
+
498
+ - **D-28** 11 of 18 real top-level keys undocumented: `bundles`,
499
+ `defaultBundle`, `defaultWriteTarget`, `search`, `feedback`,
500
+ `archiveRetentionDays`, `output`, `semanticSearchMode`, `embedding`,
501
+ `registries`, `setup` (`config-schema.ts:120-153`). Several are
502
+ load-bearing for the CLI reference's own flows.
503
+ - **D-29** Environment table missing `AKM_DATA_DIR`, `AKM_CACHE_DIR`,
504
+ `AKM_STATE_DIR`, `XDG_*`, `AKM_VERBOSE`, `AKM_DEBUG`,
505
+ `AKM_DISABLE_PROJECT_CONTEXT`.
506
+ - **D-30** ✅ **Fixed** (D7): `output.format` schema widened to all six values
507
+ (`schema/output.ts`), schema regenerated. A saved `md` preference now works.
508
+ (Re-shrinks if the Q-04 collapse is chosen — keep in the Q-04 blast radius.)
509
+
510
+ ### 2.5 `docs/reference/registry.md`
511
+
512
+ - **D-31** Teaches retired `config.installed` (`:219-221`) and `sources[]`
513
+ (`:316-317`) — both hard-rejected (`config-schema.ts:184-192`). Should be
514
+ `bundles`.
515
+ - **D-32** Lists retired `wiki` asset type (`:431`); cites
516
+ `src/core/asset/asset-spec.ts` as "the authority" — file does not exist.
517
+ - **D-33** `build-index` "scans the current directory" — it does not; it fans
518
+ out to manual entries + npm keyword search + GitHub topic search
519
+ (`build-index.ts:99-112`). Its command meta also says "v2" while emitting
520
+ `version: 3` (`registry-cli.ts:133`, `build-index.ts:112`).
521
+ - **D-34** Stale-fallback windows don't exist (Q-13). Cache layout shape
522
+ wrong (`provider-utils.ts:83-99`; no `<timestamp>-<random>` component).
523
+
524
+ ### 2.6 `docs/reference/data-and-telemetry.md`
525
+
526
+ - **D-35** `logs.db` missing from the data-directory table — a third durable
527
+ database (`logs-db.ts:6,55-60`); the "safe to delete" guidance is
528
+ incomplete. (roadmap.md:39-41 names it correctly.)
529
+ - **D-36** Maps events to nonexistent commands: `akm distill` (no such
530
+ command), `akm lint --repair` (flag is `--fix`);
531
+ `workflow_step_completed/updated` attributed to `workflow next` — emitted
532
+ by `complete` (`runs.ts:707-719`).
533
+ - **D-37** "Full event type list" (~33 rows) vs ≥53 emitted types; missing
534
+ include `improve_invoked` (which cli.md:234 relies on), `llm_usage`, `mv`
535
+ (documented at cli.md:965!), `env_access`, `secret_access`,
536
+ `workflow_unit_*`, `collapse_detector_alert`, and ~15 more.
537
+ - **D-38** `akm log list --limit 20` — `log list` has no `--limit`
538
+ (`observability-cli.ts:46-61`); only `tail --max-events`.
539
+ - **D-39** Retired `stashDir` config override taught (`:71`); still says
540
+ "0.8.0" (`:237`); lists `wikis` as a stash dir (`:68`).
541
+
542
+ ### 2.7 `docs/reference/akm-eval.md`
543
+
544
+ - **D-40** "Three runner types" — nine exist (`scripts/akm-eval/src/types.ts:7-16`);
545
+ `reflect-quality` and `planner-waste` never mentioned though both ship
546
+ runners and cases. `improve-smoke` case count "8" — 12 case files ship.
547
+ Cites `src/core/proposals.ts` (does not exist).
548
+
549
+ ### 2.8 `docs/guides/*`
550
+
551
+ - **D-41** concepts.md: prefix-grammar claims (Q-02); `wikis/` as a stash
552
+ type dir (no `wiki` placement spec; llm-wiki probe is bundle-root
553
+ `schema.md`+`pages/`, `llm-wiki-adapter.ts:429-436`); `akm mv` removal
554
+ claim (Q-01); belief filter "default current for memory search" — default
555
+ is `all` everywhere (`search-cli.ts:62`, `search.ts:166`).
556
+ - **D-42** search-discovery.md: `ref` availability stated backwards — present
557
+ at `brief` (the default), absent at `normal`, per the REC-03 comment
558
+ (`helpers.ts:366-379`).
559
+ - **D-43** sources-registries.md: `--kind local|managed|remote` examples all
560
+ exit 2 (Q-09).
561
+ - **D-44** knowledge-management.md: `remember --name ops/prod-secrets`
562
+ rejected by the flat-name guard (`remember-cli.ts:151`,
563
+ `asset-create.ts:44-51`) — correct form is `--path ops --name prod-secrets`;
564
+ "akm does not edit entries" contradicted by `env set`/`unset` (and by the
565
+ same doc 17 lines later); secrets documented under `env/` — they live in
566
+ `secrets/` (`asset-placement.ts:135-140`).
567
+ - **D-45** improvement-loop.md: `feedback --negative` without `--reason`
568
+ fails (`requireReason` defaults true, `feedback-cli.ts:271-283`);
569
+ `log list --since 7d` unsupported (strict ISO parser, `time.ts:86-108`;
570
+ shorthand is health-only); "there is no auto-accept threshold" — false: the
571
+ doc-recommended `proactive-maintenance` strategy ships
572
+ `applyMode:"promote", maxAcceptsPerRun:100`
573
+ (`assets/improve-strategies/proactive-maintenance.json`,
574
+ `improve.ts:804-830`), and `proposal drain --apply` is a second promote
575
+ surface.
576
+ - **D-46** getting-started.md: setup dir list includes `wikis/` (never
577
+ created) and omits `tasks/`, `sessions/`, `facts/`.
578
+ - **D-47** agent-integration.md: `akm show "npm:@scope/pkg//…"` /
579
+ `"github:owner/repo//…"` rejected by the bundle-slug charset
580
+ (`asset-ref.ts:65,156-161`); concepts.md:214-215 correctly restricts
581
+ install refs to `add`/`clone` — the two guides contradict each other.
582
+ - **D-48** stash-makers.md: `dangerous-vault-key` issue code stale (actual
583
+ `dangerous-env-key`, `env-key-rules.ts:175`); "and 20 others" undercounts
584
+ (41 + patterns); `wikis/` layout again.
585
+ - **D-49** claude-code-vs-akm-workflows.md Parts B–E describe the pre-engine
586
+ world: "akm does not execute workflow steps" / "strictly sequential" /
587
+ "no workers" / "two tables" / "a workflow is a document, not a program" —
588
+ overtaken by `workflow run`'s native executor, fan-out scheduler with
589
+ concurrency caps, worktree isolation, `workflow_run_units` + migrations
590
+ 004/005, and YAML v2 programs. Part F lists `watch` (NDJSON stream) and
591
+ fan-out as future work; both shipped. Subcommand list missing five verbs.
592
+ - **D-50** `.github/README.npm.md`: "community skills from skills.sh in a
593
+ single query" — the skills.sh registry ships `enabled: false`
594
+ (`config.ts:109-112`). README asset-type tables list 12 types, omitting
595
+ `session` (concepts.md says thirteen).
596
+
597
+ ### 2.9 `docs/architecture/*` (architecture.md + internals)
598
+
599
+ - **D-51** Dead files/symbols cited as authoritative:
600
+ `src/core/asset/asset-spec.ts` + re-export shims `src/core/asset-spec.ts`,
601
+ `src/core/asset-ref.ts`, `src/core/config.ts` (architecture.md:34,451-453);
602
+ `TYPE_DIRS` (storage-locations.md:445); `parseAssetRef`
603
+ (improve-workflow.md:199); `akmManifest()` (search.md:217-222);
604
+ fact-asset-type.md implementation table — 5 of 9 rows dead.
605
+ - **D-52** `RegistryProvider` documented with `searchKits/searchAssets/getKit/
606
+ canHandle` (architecture.md:279-287); the real contract is a single
607
+ `search()` (`registry/providers/types.ts:35-45`).
608
+ - **D-53** storage-locations.md documents on-disk proposal stores
609
+ (`.akm/proposals/<uuid>/`, archive dirs) and `.akm/graph.json` — proposals
610
+ are a `state.db` table ("archival is a status flip",
611
+ `proposal/repository.ts:16-24`); graph lives in `index.db` tables; 0 refs
612
+ to graph.json in `src/`. `backupExistingConfig` attributed to paths.ts —
613
+ lives in `config-io.ts:111`.
614
+ - **D-54** indexing.md table inventory: 6 tables documented, 14+ created
615
+ (`index-schema.ts` — adds `index_dir_state`, `llm_enrichment_cache`,
616
+ `registry_index_cache`, `utility_scores_scoped`, `graph_*`). The former FTS
617
+ dirty queue was removed when entry mutations took ownership of their FTS
618
+ projection.
619
+ - **D-55** architecture.md: `wiki` listed as built-in type mapped to `wikis/`
620
+ (retired; `recognition-util.ts:80-106`); `pushOnCommit` "deprecated" —
621
+ actually hard-rejected (`sources-bundles.ts:31-35`); `renderers.ts`
622
+ "replaced" — still exists and self-registers (592+ lines); static-index
623
+ described as v2-only (code reads v2/v3).
624
+ - **D-56** akm-0.9.0-bundle-adapter-spec.md: `akm bundle rename` cited as
625
+ first-class — the `bundle` group was removed by D5; the 7 optional facet
626
+ methods (§2) are deliberately deferred in code
627
+ (`bundle-adapter.ts:113-120` "DEFERRED … FLAGGED for maintainer") with no
628
+ status marker in the spec.
629
+ - **D-57** fresh-host-rebuild-runbook.md: retired `stashDir` key
630
+ (`:26-27`).
631
+
632
+ ### 2.10 `docs/agents/*` (the agent-facing docs)
633
+
634
+ - **D-58** AGENTS.full.md documents the removed `akm wiki` family in full
635
+ (`:50,64,67,131-163`) — `list|create|show|pages|search|stash|lint|ingest|
636
+ remove`, `--type wiki`, `--wiki`, `show wiki:<name>`, wiki exit codes.
637
+ AGENTS.md repeats `wiki list/stash/ingest` (`:21-24,46`).
638
+ stash-conventions-code-spec.md cites `src/wiki/wiki.ts` (no such dir).
639
+ Note the migration guide records the *intent*: the family was deliberately
640
+ removed in 0.9.0 in favor of the `llm-wiki` bundle format — these docs and
641
+ the shipped hints corpus (backlog R-001) were never swept.
642
+ - **D-59** AGENTS.md teaches `env run env:<name>` / `secret run
643
+ secret:<name>` — both 404 (Q-08) **[verified live]**.
644
+ - **D-60** AGENTS.full.md `akm search "knowledge:"` works only because the
645
+ retired colon grammar is still the implementation (Q-02); AGENTS.md:107
646
+ omits the `reverted` proposal status.
647
+ - **D-61** agent-install.md: `stashDir`/`sources` listed as valid
648
+ `setup --config` keys and `akm config get stashDir` shown — both
649
+ hard-rejected/unresolvable (`config-schema.ts:181-189,382`).
650
+
651
+ ### 2.11 `docs/migration/v0.8-to-v0.9.md`
652
+
653
+ - **D-62** Verification snippet `akm info --format=json | jq -r .stashDir`
654
+ fails — `InfoResponse` has no `stashDir` field (`info.ts:64-78`)
655
+ **[verified live]**.
656
+ - **D-63** TL;DR teaches `akm env run env:<name> -- <command>` (404s, Q-08);
657
+ "entries surface under `env:`" uses the retired spelling.
658
+
659
+ ### 2.12 In-CLI doc surfaces (shipped assets, help text)
660
+
661
+ Tracked in the backlog (R-001..R-006, R-052) and repeated here for
662
+ completeness because they are documentation in the product's own voice:
663
+ `akm hints` documents the removed wiki family and drifts by install method;
664
+ `show --format text` renders `type:name` feedback commands; `feedback` help
665
+ contradicts the immediate EMA update; a hint references `akm events list`;
666
+ the scaffolded conventions fact contradicts `akm mv`; bash completions
667
+ advertise `--detail summary` and omit `md/html`.
668
+
669
+ ---
670
+
671
+ ## Part 3 — Code that still emits the retired `type:name` grammar
672
+
673
+ The grammar decision (`STABILITY.md:42`, `ref.md:106`, D-R3 "nowhere after
674
+ the flip") is violated by live **output**, not just docs:
675
+
676
+ - **E-01** `formatRefForMessage()` returns `origin//type:name`
677
+ (`write-source.ts:1148-1158`) — used in **git commit subjects**
678
+ (`knowledge.ts:786`), env/secret boundary commits
679
+ (`env-secret-ref.ts:273`), and write errors (`write-source.ts:317,343`).
680
+ - **E-02** `sources/resolve.ts:46,58,67,82` — "Stash asset not found for
681
+ ref: ${type}:${name}".
682
+ - **E-03** `show.ts:393` — "Fragments are not supported for
683
+ ${displayType}:${displayName}".
684
+ - **E-04** `mv-cli.ts:1052,1064,1080` — error text renders
685
+ `${source.type}:${source.name}`.
686
+ - **E-05** The `show` APPLY footer (`show-directives.ts:26,57,75,87`) —
687
+ backlog R-002.
688
+ - **E-06** env/secret help examples and the vault signpost (Q-08).
689
+ - **E-07** ◐ **Partial** (re-verified 2026-07-27): the `search --help` and
690
+ `akm hints` prefix examples were swept to slash with D4. Survivors:
691
+ `sources-cli.ts:213` clone example (`npm:@scope/pkg//script:deploy.sh`),
692
+ five `skill:akm-dream` examples in `proposal-cli.ts` (`:98,178,271,304` +
693
+ one), and `init.ts:152`'s `memory:…` reference. All are one-line help-string
694
+ edits — batch into the Part 5 step-2 sweep.
695
+
696
+ ---
697
+
698
+ ## Part 4 — False alarms and verified-clean surfaces
699
+
700
+ Recorded so future audits don't re-litigate.
701
+
702
+ - **`migrate apply --dry-run` is NOT broken.** The arg is declared camelCase
703
+ (`dryRun`, `migrate-cli.ts:28`), and an audit flagged that citty might not
704
+ bind `--dry-run` to it — a real apply masquerading as a dry run.
705
+ **[verified live]**: citty auto-camelizes; `--dry-run` binds to both
706
+ `args.dryRun` and `args["dry-run"]`. However, this disproves the comment at
707
+ `src/output/context.ts:87-93` ("citty does not auto-camelise hyphenated arg
708
+ keys") — the codebase's quoted-kebab arg convention rests on a false
709
+ premise, worth a note where that comment lives.
710
+ - **Verified clean:** `docs/reference/roadmap.md` (no shipped-but-absent or
711
+ future-but-present items) and `docs/reference/wiki-snapshot-fetchers.md`
712
+ (every claim matches `snapshot-fetchers/registry.ts`, `types.ts`,
713
+ `website-ingest.ts`).
714
+ - **Verified exact:** the model-alias table in agent-integration.md matches
715
+ `model-aliases.ts:45-76` byte-for-byte; storage paths, search/curate
716
+ defaults and limits, website crawl caps (50 pages / depth 3 / 12h),
717
+ `tasks` subcommands incl. `--rebind`, `env run --clean`,
718
+ `secret run <ref> <VAR> -- cmd`, completions XDG install path,
719
+ `history` oldest-first ordering, "installation is not activation"
720
+ (`activation-policy.ts`), and workflow `complete --summary` gating all
721
+ check out against code.
722
+ - **Stale code comment that misled the audit itself:**
723
+ `llm-wiki-adapter.ts:63-64` claims the adapter barrel is test-only;
724
+ `core/adapter/registry.ts:33` imports it in production. The adapter is
725
+ live; the comment is wrong.
726
+
727
+ ---
728
+
729
+ ## Part 5 — Suggested triage order
730
+
731
+ 1. **Rulings — done 2026-07-26** (all 19; see the Part 1 table). They decided
732
+ whether ~40% of Part 2 is doc work or code work. Of the execute-first trio,
733
+ **Q-02 has landed** (slash enumeration incl. `bundle//`, colon form gone);
734
+ Q-07's renderer half landed (`usesIndexedProjection`) with the parser half
735
+ open; Q-08 is untouched. Q-08 and Q-07's parser seam are now the
736
+ highest-leverage remaining code items.
737
+ 2. **Sweep the agent-copy-paste surfaces** (Part 3 + §2.10/2.12): everything
738
+ an agent will paste from — hints, help examples, error messages, the show
739
+ footer, AGENTS.md — should speak one grammar.
740
+ 3. **Re-tier STABILITY.md** so nothing marked Stable is unimplemented and
741
+ every registered command has a tier (Q-14).
742
+ 4. **Mechanical doc sweep** for the remainder of Part 2, ideally with a CI
743
+ check that executes every fenced `akm …` example in docs/ against a
744
+ scratch stash (the `--kind`, `--since 7d`, `remember --name a/b`, and
745
+ colon-spelling failures would all have been caught by running the docs).