Recall: no stemming, one phrasing per call, and the failure records are outside the corpus #244

Closed
opened 2026-08-23 20:43:26 +00:00 by john · 0 comments
Owner

Recall ranks well over the corpus it sees, but three cheap wins in how it reads and ranks are still open. A fourth item in the original assessment - the corpus dying at every milestone close - shipped: .planning/ARCHIVE.md now receives each pruned phase's residue before the delete, and milestone-prune reports residue_rows.

1. No stemming

cadence-core/bin/lib/bm25.mjs:20 states it outright: "No stemming - recall and recalling are distinct terms." So seam misses seams, close misses closes.

A ~30-line suffix fold (s / es / ing / ed) applied identically at index time and query time. Deterministic, zero-dep, one file.

2. One phrasing per call

recall accepts a single query string, so a caller gets one lexical shot at the corpus. The natural fix is to accept N queries and union by max score inside the seam, in one subprocess, rather than making every caller issue several calls and merge them by hand.

3. The failure records are not in the corpus

The corpus walk covers SUMMARY deviations and open items, CAPTURE, UAT and CONTEXT. It skips the two artifacts that record what actually went wrong:

  • reports/plan-<k>.md, the executor deviations
  • REVIEW-*.md, the adjudicated findings

Both are exactly the prior art a planner should be handed, and neither is reachable today.

Ordering

Item 3 changes what recall can know; items 1 and 2 change how well it ranks what it already sees.


Moved to GitHub: https://github.com/crenshawdev/cadence/issues/93

This project's tracker is now GitHub; this repository remains the public archive. Closed here as migrated, not as resolved.

Recall ranks well over the corpus it sees, but three cheap wins in how it reads and ranks are still open. A fourth item in the original assessment - the corpus dying at every milestone close - shipped: `.planning/ARCHIVE.md` now receives each pruned phase's residue before the delete, and `milestone-prune` reports `residue_rows`. ## 1. No stemming `cadence-core/bin/lib/bm25.mjs:20` states it outright: "No stemming - `recall` and `recalling` are distinct terms." So `seam` misses `seams`, `close` misses `closes`. A ~30-line suffix fold (`s` / `es` / `ing` / `ed`) applied identically at index time and query time. Deterministic, zero-dep, one file. ## 2. One phrasing per call `recall` accepts a single query string, so a caller gets one lexical shot at the corpus. The natural fix is to accept N queries and union by max score inside the seam, in one subprocess, rather than making every caller issue several calls and merge them by hand. ## 3. The failure records are not in the corpus The corpus walk covers SUMMARY deviations and open items, CAPTURE, UAT and CONTEXT. It skips the two artifacts that record what actually went wrong: - `reports/plan-<k>.md`, the executor deviations - `REVIEW-*.md`, the adjudicated findings Both are exactly the prior art a planner should be handed, and neither is reachable today. ## Ordering Item 3 changes what recall can know; items 1 and 2 change how well it ranks what it already sees. --- **Moved to GitHub: https://github.com/crenshawdev/cadence/issues/93** This project's tracker is now GitHub; this repository remains the public archive. Closed here as migrated, not as resolved.
john closed this issue 2026-08-25 16:37:57 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: crenshawdev/cadence-archived#244
No description provided.