@kaddo/cli 3.40.0 → 3.40.1

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/README.md CHANGED
@@ -538,6 +538,7 @@ create --from roadmap → owners → guard → explain`.
538
538
  | v3.39 | Existing capability discovery: state-aware `capabilities.md` (pre-ai/legacy = evidence-backed Capability Inventory + Gaps + Roadmap Candidate Signals; legacy adds criticality/change-risk/modernization); capability-agent discovers with evidence, roadmap-agent treats capabilities as primary source |
539
539
  | v3.39.1 | Domain-oriented capability inventory: pre-ai/legacy `capabilities.md` groups capabilities under `## Capability Domains` (functional domains, not technical folders); gaps/candidates name their `Domain`; roadmap-agent reads it as a domain map; work-item-agent recommends `related_domain` + `related_capability` |
540
540
  | v3.40 | ADR materialization: `kaddo adr` (alias `decisions`) detects decision candidates + ADRs and hands off the ADR files to create; `tech_decisions` status (none/candidates/draft-adrs/accepted-adrs) surfaced in `explain`/`context`/`understand`; adr-writing skill formalized |
541
+ | v3.40.1 | ADR slug cleanup + MCP: suggested ADR filenames strip list/heading prefixes (no `ADR-001-1-…`) and normalize acronyms; new read-only MCP resource `kaddo://tech-decisions` sharing `buildTechDecisions` with `kaddo adr` |
541
542
 
542
543
  **Optional modules (installed with `kaddo add`):**
543
544
 
package/dist/index.js CHANGED
@@ -8125,16 +8125,21 @@ function buildReadinessReport(dir, now = /* @__PURE__ */ new Date()) {
8125
8125
  // src/core/decisions.ts
8126
8126
  var CANDIDATES_PATH = "knowledge/tech/decision-candidates.md";
8127
8127
  var DECISIONS_DIR = "knowledge/tech/decisions";
8128
+ function cleanCandidateTitle(title) {
8129
+ return title.replace(/^\s*#{1,6}\s+/, "").replace(/^\s*[-*]\s+/, "").replace(/^\s*\(?\d+\)?[.):]\s+/, "").trim();
8130
+ }
8128
8131
  function slugify2(s) {
8129
- return s.toLowerCase().normalize("NFD").replace(/[̀-ͯ]/g, "").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 60);
8132
+ return cleanCandidateTitle(s).toLowerCase().normalize("NFD").replace(/[̀-ͯ]/g, "").replace(/[^a-z0-9]+/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "").slice(0, 70).replace(/-+$/g, "");
8130
8133
  }
8131
8134
  function parseDecisionCandidates(md) {
8132
8135
  const out = [];
8133
8136
  for (const line of md.split(/\r?\n/)) {
8134
8137
  const m = line.match(/^##\s+(.+?)\s*$/);
8135
8138
  if (m) {
8136
- const t = m[1].trim();
8137
- if (t && !/^_.*_$/.test(t)) out.push(t);
8139
+ const raw = m[1].trim();
8140
+ if (!raw || /^_.*_$/.test(raw)) continue;
8141
+ const t = cleanCandidateTitle(raw);
8142
+ if (t) out.push(t);
8138
8143
  }
8139
8144
  }
8140
8145
  return out;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaddo/cli",
3
- "version": "3.40.0",
3
+ "version": "3.40.1",
4
4
  "description": "Knowledge Driven Development toolkit",
5
5
  "license": "MIT",
6
6
  "repository": {