kadence 0.6.0 → 0.7.0

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
@@ -2,6 +2,106 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.7.0] — 2026-09-25
6
+
7
+ **One question over everything written down — and three fixes that had to come
8
+ first.** `kadence search` answers "what do we know about X" across tasks,
9
+ decisions, notes and documents at once. Getting there meant admitting that the
10
+ commands an agent already calls were returning answers it could not use: one
11
+ that could be forged by a note, one that read the whole journal twice on every
12
+ call, and one that returned four thousand tasks into a window that truncates at
13
+ twenty-five thousand tokens.
14
+
15
+ ### ⚠️ Upgrading — three defaults changed
16
+
17
+ Nothing was renamed or removed from `kadence schema --json`, so `kadence/v1`
18
+ stands. What a caller gets **by default** changed in three places, and a script
19
+ that assumed otherwise needs one flag:
20
+
21
+ | Was | Is | To get the old answer |
22
+ |---|---|---|
23
+ | `task list --json` carried `history` | it does not | `--fields id,label,history` |
24
+ | list commands returned everything | one page of 100 | `--limit 0` |
25
+ | `prime --json` carried full note text | capped at 2000 characters | `kadence note list --json` |
26
+
27
+ `history` was never promised there — the schema has always placed it in
28
+ `task show` — but it was emitted, and Hyrum's Law says somebody depended on it.
29
+ It is 61% of that response at 4000 tasks, which put the command past the point
30
+ where an agent's tool output is silently cut in half.
31
+
32
+ ### Added — `kadence search`
33
+
34
+ - **One query, every kind of record.** Tasks with their descriptions,
35
+ acceptance criteria and comments; decisions with their reason and the
36
+ alternative they rejected; notes; documents cut at their headings. Most of
37
+ that was unreachable by any command before this: `task list --search` covered
38
+ 24% of the journal's prose and only tasks.
39
+ - **Lexical, not semantic, and measured rather than assumed.** BM25,
40
+ hand-rolled, no dependency, over the folded projection — so labels exist
41
+ (I7), a superseded decision does not answer as though it were current, and
42
+ search cannot disagree with `task show`. An embedding model is 200 MB and
43
+ seconds of cold start against a 200 ms budget and a promise to work offline;
44
+ on a vocabulary of `ULID`, `KAD-N` and `FlowEvent` it is also the weaker
45
+ method. 26 ms a query over 829 units; 158 ms end to end (DEC-26).
46
+ - **A hit is something you can cite.** The ULID, never the derived label; the
47
+ lines a document section came from; and a quoted span whose offsets land on
48
+ the quoted text, so an agent quotes the journal instead of paraphrasing it.
49
+ - **`coverage` — how much of the question a record actually holds**, 0 to 1,
50
+ weighted by how rare each word is. Where the first hit is right this is 1.00
51
+ at the median; where it is wrong, 0.62. Below 0.7 the human output says the
52
+ passage answers part of the question. The obvious signal — the gap to the
53
+ second hit — was measured and does not work: 0.10 against 0.08 (DEC-30).
54
+ - **An empty answer, said plainly.** Below the coverage floor the result is
55
+ nothing, and the message says the journal has no answer. A model handed
56
+ passages that merely look relevant fabricates more than one handed none, so
57
+ this is a feature and not a cop-out. Nine of ten questions about things this
58
+ journal has never discussed get silence.
59
+ - **Quality is held by a test, not by hope.** `test/search-relevance.test.ts`
60
+ runs 25 real questions against the repository's own journal and fails below
61
+ recall@3 of 0.64. Three ranking ideas were measured this release and two were
62
+ removed for making it worse (DEC-27, DEC-28).
63
+
64
+ ### Fixed — `prime` could be forged, and repainted your terminal
65
+
66
+ - **A note carrying newlines rendered as sections of its own**, and the
67
+ cheapest section to forge is the `Go deeper:` block `prime` ends with. The
68
+ length was capped; the shape was not. An escape sequence went further and
69
+ cleared the screen — `prime` runs from the `SessionStart` hook without being
70
+ asked.
71
+ - **`prime --json` was unbounded.** One 200 KB note made the session preamble
72
+ 200,728 bytes. Free text is now capped at 2000 characters with `bytes`
73
+ alongside, the signal `documentation` already gave (DEC-21).
74
+
75
+ ### Fixed — a warm command read the whole journal anyway
76
+
77
+ - **`loadState` called `readAll` on every command**, purely to count corrupted
78
+ and unknown events for a warning, after the snapshot had already answered.
79
+ A warm call read all 10,103 files; a cold one read every event twice.
80
+ 345 ms to 201 ms end to end at 10k events; 204 ms to 5 ms in process.
81
+ - **The fingerprint counts bytes as well as names**, so a file rewritten in
82
+ place invalidates the cache. That also means `git checkout .kadence/` — the
83
+ remedy the corruption warning itself recommends — finally invalidates the
84
+ cache it needed to, which it never did (DEC-22).
85
+ - Every performance guardrail measured `loadOrBuild`; the CLI calls
86
+ `loadState`. The bug lived in the gap between them. Both are measured now.
87
+
88
+ ### Fixed — list commands returned the whole board
89
+
90
+ - **One page of 100, with the real total and the offset beside it.**
91
+ `task list --json` was 1.3M tokens at 4000 tasks against the 25k at which an
92
+ agent's tool output is cut — silently, so the agent answers on a fraction
93
+ while believing it saw everything. Now 50 KB. `--limit 0` returns everything;
94
+ `--offset` walks (DEC-24).
95
+ - 100 rather than 200 because this repository's own tasks run 1100 bytes each,
96
+ where the ceiling is 93.
97
+
98
+ ### Changed
99
+
100
+ - Documentation moved into the journal: 65 documents, `DOC-2` through `DOC-66`,
101
+ as `doc.written` events. `docs/` stays on disk as the working draft and links
102
+ are rewritten to `DOC-N` on publication (DEC-25). The npm package is
103
+ unaffected — `.kadence/` is not in `files`.
104
+
5
105
  ## [0.6.0] — 2026-09-23
6
106
 
7
107
  **Documentation in the journal, and an honest answer when something goes
@@ -318,7 +418,7 @@ command was renamed, and `--json` responses gain keys rather than losing them.
318
418
  - **`kadence task claim` / `task release`** — take a task, or give it back.
319
419
  `claim` with no argument takes the top of `ready`, which is one step instead
320
420
  of two. There is **no lock**, and the message says so: two machines can each
321
- claim before either pushes. See [ADR-011](docs/decisions/011-claims-as-events.md).
421
+ claim before either pushes. See ADR-011.
322
422
  - **`kadence note "text" [--task KAD-1]`** and `note list` — something learned
323
423
  that was never a choice. Deliberately not a decision: no `--why`, no
324
424
  `supersedes`, no number. The help says when to reach for `decision add`
@@ -354,7 +454,7 @@ command was renamed, and `--json` responses gain keys rather than losing them.
354
454
  events fold differently depending on where they were written. A detached HEAD
355
455
  and an unknown base both fail by name rather than reporting no work.
356
456
  The measurement that justified the flag, including what would make it wrong,
357
- is in [branch-context-2026-09.md](docs/research/branch-context-2026-09.md).
457
+ is in branch-context-2026-09.md.
358
458
  - **Acceptance criteria** — `task ac add|check|uncheck|list`. The number is a
359
459
  position in the folded list, assigned like `KAD-N` and never stored, so two
360
460
  branches can each add a criterion and merge without renumbering. Moving a task
@@ -395,7 +495,7 @@ command was renamed, and `--json` responses gain keys rather than losing them.
395
495
 
396
496
  What the neighbours call reports is, here, a fold over timestamps the journal
397
497
  already carries. The reasoning, the sources and the verdict per report are in
398
- [reports-discovery-2026-09.md](docs/research/reports-discovery-2026-09.md).
498
+ reports-discovery-2026-09.md.
399
499
  Velocity and cycle time stay out of the headline; they are a consequence, served
400
500
  to the person who asks.
401
501
 
@@ -426,7 +526,7 @@ to the person who asks.
426
526
 
427
527
  Each of these was a standing "no". Each is now tried in the shape that survives
428
528
  the three constraints, and each has a kill condition written before the code, in
429
- [feature-adoption-2026-09.md](docs/product/feature-adoption-2026-09.md).
529
+ feature-adoption-2026-09.md.
430
530
 
431
531
  - **`kadence board export --html`** — the board, the sprint, the burndown,
432
532
  milestones and decisions in force, as **one self-contained file**. No script
@@ -444,7 +544,7 @@ the three constraints, and each has a kill condition written before the code, in
444
544
  trusts. A marker in the issue body makes a second publish an edit rather than
445
545
  a duplicate, and the issue itself says that edits made there are overwritten.
446
546
  Nothing is ever read back. See
447
- [ADR-012](docs/decisions/012-network-only-in-packages.md), written before the
547
+ ADR-012, written before the
448
548
  code. Every test runs against a recorded `gh`, never the real one.
449
549
  - **`kadence task doc add KAD-1 docs/design.md`** — creates the file from a
450
550
  four-line template and records the link in one call. It never overwrites: a
@@ -475,7 +575,7 @@ the three constraints, and each has a kill condition written before the code, in
475
575
  adding different labels merged without a conflict and one label vanished with
476
576
  no warning. Not a merge failure — a fold storing *state* in an event, the
477
577
  exact mistake the product exists to avoid. Reasoning in
478
- [ADR-013](docs/decisions/013-labels-as-deltas.md).
578
+ ADR-013.
479
579
  - **`labels` in `ready --json`**, the seventh field, and in the guaranteed set.
480
580
 
481
581
  Source for this slice: a tech lead's feedback of 2026-09-10 — drift comes not
@@ -662,7 +762,7 @@ is additive within `kadence/v1`, which the contract permits at any version.
662
762
  The journal held what happened. It now holds **why** — and the reasoning cannot
663
763
  quietly go stale, because superseding a decision is one event rather than two
664
764
  edits somebody has to remember to make. Reasoning in
665
- [ADR-010](docs/decisions/010-decisions-as-events.md).
765
+ ADR-010.
666
766
 
667
767
  ### Added
668
768
 
@@ -687,7 +787,7 @@ edits somebody has to remember to make. Reasoning in
687
787
  explains this task, and that is the only thing recorded. A missing file is a
688
788
  warning, not a refusal — it may arrive in a later commit.
689
789
 
690
- Measured before building ([Probe D](docs/research/probe-d-docs-linkage.md)):
790
+ Measured before building (Probe D):
691
791
  across five real questions, grep finds the answering document every time and
692
792
  buries it among 10–35 candidates. The link saves the sifting, not the search.
693
793
 
@@ -758,8 +858,8 @@ published package rather than the source.
758
858
  The agent contract, made real. `schema: "kadence/v1"` used to be a version
759
859
  string that nothing checked; now the contract is published, the failures are
760
860
  machine-readable, and the responses can be narrowed to what an agent actually
761
- reads. Reasoning in [ADR-009](docs/decisions/009-the-agent-contract.md),
762
- measurements in [Probe C](docs/research/probe-c-agent-cost.md).
861
+ reads. Reasoning in ADR-009,
862
+ measurements in Probe C.
763
863
 
764
864
  ### Added
765
865
 
@@ -830,7 +930,7 @@ asked for.
830
930
  - Developer tooling (`.claude/`, `.serena/`) is no longer committed: 381 files
831
931
  and 3.8 MB of it, against 94 files of actual product. What belongs in git and
832
932
  what does not is written down in
833
- [ADR-007](docs/decisions/007-what-goes-into-git.md), and `.gitignore` now
933
+ ADR-007, and `.gitignore` now
834
934
  also covers `.env`, coverage output and editor leftovers.
835
935
 
836
936
  ## [0.1.3] — 2026-09-03
package/README.md CHANGED
@@ -56,7 +56,7 @@ reads the same thing as JSON.
56
56
  **And it stays one call.** That answer stays under a kilobyte whether the project
57
57
  holds ten tasks or a thousand — while the journal behind it grows from 5 KB to
58
58
  528 KB. The cost of asking does not grow with the history that makes the answer
59
- worth having. [Measured](docs/research/probe-c-agent-cost.md) at 948 bytes in
59
+ worth having. Measured at 948 bytes in
60
60
  0.2; 982 bytes at 0.4, after claims and acceptance criteria joined every record.
61
61
 
62
62
  ## Why events and not files
@@ -102,7 +102,9 @@ merged in every order. Zero conflicts, every author preserved, identical final
102
102
  state. That is an [integration test](test/integration/merge.test.ts), not a
103
103
  claim.
104
104
 
105
- Full data: [probe-a-results.md](docs/research/probe-a-results.md).
105
+ The measurement itself is a working paper and is not published (see
106
+ `.gitignore`); the mechanism it measures is proved here by
107
+ `test/integration/merge.test.ts`.
106
108
 
107
109
  ---
108
110
 
@@ -187,7 +189,7 @@ kadence task list --branch
187
189
 
188
190
  Nothing is stored for that: which tasks belong to a branch lives in git's
189
191
  history and is read when you ask. It narrows the answer between three and
190
- twenty times, [measured](docs/research/branch-context-2026-09.md) on real board
192
+ twenty times, measured on real board
191
193
  sizes.
192
194
 
193
195
  ### Also in the box
@@ -198,8 +200,8 @@ columns, reports folded from the same journal (`report flow`, `cfd`,
198
200
  `attention`; burndown, velocity and workload are in the repository and not yet
199
201
  on npm), a self-contained HTML or Markdown export, `compact` for long journals,
200
202
  and shell completion. None of it is required, and none of it is the point —
201
- it is what the journal happens to know. Commands and caveats:
202
- [docs/reports.md](docs/reports.md), and `--help` on each command.
203
+ it is what the journal happens to know. `--help` on each command is the
204
+ reference, and `kadence doc list` is what the journal knows about itself.
203
205
 
204
206
  ### Removing kadence
205
207
 
@@ -257,7 +259,7 @@ documentation can tell an agent what yours are.
257
259
 
258
260
  There is no MCP wrapper, and one gets built only as an **optional package**, when
259
261
  someone who cannot run a CLI asks for it: it costs about 700 tokens a session
260
- over the CLI path — [we measured it](docs/research/probe-c-agent-cost.md), and it
262
+ over the CLI path — we measured it, and it
261
263
  is not the saving the industry benchmarks suggest — it would be a second way to
262
264
  say the same thing, and it would not work for agents that have no MCP client at
263
265
  all.
@@ -340,10 +342,10 @@ end-to-end run through the installed binary.
340
342
  **Not verified.** That teams and their AI agents actually lose enough context to want
341
343
  this. The bet rests on reasoning and on the industry naming the problem out
342
344
  loud — not on our own users. That research, Probe B, is
343
- [designed](docs/research/interview-script.md) and not yet run: as of
344
- 2026-09-16, [zero conversations](docs/research/probe-b-results.md) and no
345
- external users. [The strategy](docs/product/strategy.md) says what happens next
346
- and on which dates.
345
+ designed and not yet run: as of
346
+ 2026-09-16, zero conversations and no external users. What happens next, and
347
+ on which dates, is recorded in this repository's own journal — `kadence
348
+ decision list` and `kadence note list`.
347
349
 
348
350
  **Not built, on purpose.** An MCP package — only if someone who cannot run a CLI
349
351
  asks for it, not as an inevitability.
@@ -382,7 +384,10 @@ branches writing at once produce two different files, and git merges them
382
384
  without a conflict by construction.
383
385
 
384
386
  Design decisions, each recording what was measured and what would make us
385
- revisit it: [docs/decisions/](docs/decisions/).
387
+ revisit it, are in the journal that ships with this repository — `kadence
388
+ decision list`, or `kadence decision show DEC-3` for one in full. The longer
389
+ write-ups behind them are working papers and are kept out of git on purpose;
390
+ the decision, its reason and the alternatives that lost are in the events.
386
391
 
387
392
  ## Contributing
388
393