Skip to content

Restack knowledge half-life onto current main (#569) - #744

Merged
davekilleen merged 3 commits into
mainfrom
cursor/knowledge-half-life-restack-18f1
Sep 22, 2026
Merged

davekilleen merged 3 commits into
mainfrom
cursor/knowledge-half-life-restack-18f1

Conversation

@davekilleen

Copy link
Copy Markdown
Owner

Linked Issue

What Changed

Test Plan

Ralph Wiggum Loop

  • I implemented the change.
  • I self-reviewed for defects and edge cases.
  • I requested specialist review for risky areas (testing/infra/security when relevant).
  • I addressed review findings and re-ran checks.

Quality Gates

  • I added/updated tests or documented why no tests are needed.
  • I added a regression test for bug fixes, or this PR is not a bug fix.
  • I validated failure modes / edge cases.
  • I updated docs or confirmed no docs impact.
  • CI checks for lint + tests + coverage are expected to pass.

Risk & Rollback

  • Risk level (low/medium/high): low
  • Rollback plan: close this PR; the three commits are only additive seed/machinery files

Docs Impact

  • Files updated: docs/architecture/INVENTORY.md (generated), docs/examples/dex-lens-catalog-enriched-preview.json (generated)
  • If none, reason: n/a

Notes

Open in Web Open in Cursor 

chrisjackson-coding and others added 3 commits September 22, 2026 12:22
…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>
@github-actions

Copy link
Copy Markdown

What this pull request touches

  • session hooks — feeds starting sessions and carrying useful context into the next interaction.
  • tests — feeds catching regressions before contributors and users encounter them.

Gates that will judge this change

  • Personal-data gate: added lines must not expose real identities or personal vault content.
  • Change-aware gates: source changes are checked for tests, path-contract use, documentation drift, and touched-file coverage.
  • Tests and coverage: the Python, MCP, migration, hook, and script suites must remain healthy.
  • Safety and quality: security, lint, distribution, path consistency, and large-vault checks still apply.

Based on 10 changed files.

@davekilleen
davekilleen marked this pull request as ready for review September 22, 2026 12:29

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved. Cursor Bugbot was not present after the first check poll, so that signal was skipped; no applicable approval policy required human review. No reviewers were assigned.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@davekilleen
davekilleen merged commit e37b4b8 into main Sep 22, 2026
14 of 15 checks passed
@davekilleen
davekilleen deleted the cursor/knowledge-half-life-restack-18f1 branch September 22, 2026 12:46
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants