Restack knowledge half-life onto current main (#569) - #744
Merged
Merged
Conversation
…ure it Concrete basis for the discussion in #565, deliberately not wired into any skill. The design decisions worth arguing about are which artefacts require what, and that should be settled before anything enforces it. The problem: context carries no freshness marker. A calendar read from four hours ago and one from a minute ago sit side by side with identical authority, which is how a long session ends up using yesterday's date, an unchecked inbox, and a stale task list while sounding entirely current. Three pieces. **A per-vault declaration** (System/knowledge-half-life.yaml, shipped as seed so user tuning is never overwritten). Volatility is personal: one person's pipeline moves weekly, another's task list hourly, so a fixed table ships wrong for most people. Sources that do not decay are declared `never`, because a user's decisions and corrections are superseded rather than aged out. **Observations recorded mechanically.** A PostToolUse hook stamps a source the moment a tool that reads it is called. This is the part that matters: an assistant that cannot notice its context has gone stale is exactly the one that will forget to record when it last looked, so self-reporting would inherit the original defect. The ledger reflects what happened, not what was believed. **An artefact contract**, which is the half that can honestly be enforced. An assistant cannot audit its own memory for staleness, but "a daily plan requires a calendar read newer than its half-life" is checkable from outside. On this vault, run against yesterday's daily plan, it returns exactly the failure that occurred: email STALE at 240 minutes, week_priorities NOT OBSERVED. Distinctions the module refuses to collapse, each of which has already caused a real failure somewhere in this codebase: a missing config is UNAVAILABLE rather than everything-is-fresh; a typo in a half-life fails loudly rather than silently becoming fresh-forever; an unknown source gets the cautious answer; and "stale" reads differently from "never observed" because they call for different responses. 18 tests. All twelve quality gates pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Co-authored-by: davekilleen <davekilleen@users.noreply.github.com>
Raised on review. The single meetings entry conflated two things with opposite decay: whether new captures exist, which goes stale within the hour, and what was said in a meeting, which does not go stale at all. A finalised transcript is a record, superseded by a later meeting rather than aged out, so it belongs with decisions and corrections in the never category. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: davekilleen <davekilleen@users.noreply.github.com>
What this pull request touches
Gates that will judge this change
Based on 10 changed files. |
davekilleen
marked this pull request as ready for review
September 22, 2026 12:29
9 tasks
This was referenced Sep 22, 2026
davekilleen
added a commit
that referenced
this pull request
Sep 25, 2026
#744's two new System/ seed paths are refused as unclassified by every installed ownership contract before #744 (and by the pinned v1.81.16 update foundation), so a release carrying them cannot be installed by any existing vault. Exclude them in .distignore until installed contracts know the paths; the feature is unwired and reads a missing config as UNAVAILABLE. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0113icGZrCbSBmwomv7e49bH
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Linked Issue
What Changed
origin/main(8cf7dd84, the Capture corrections when they happen, not at the end of the day #568 squash)DIRTYTest Plan
core/tests/test_freshness.pycarried forwardgit merge-treeof this branch ontoorigin/mainis clean; compare is 3 commits ahead, 0 behindRalph Wiggum Loop
Quality Gates
Risk & Rollback
Docs Impact
docs/architecture/INVENTORY.md(generated),docs/examples/dex-lens-catalog-enriched-preview.json(generated)Notes
knowledge-half-life(f35e24df)