Skip to content

Hold the knowledge half-life seed files out of the release (unblocks v1.97.19) - #746

Open
davekilleen wants to merge 1 commit into
mainfrom
claude/sleepy-thompson-utmjv0
Open

davekilleen wants to merge 1 commit into
mainfrom
claude/sleepy-thompson-utmjv0

Conversation

@davekilleen

Copy link
Copy Markdown
Owner

Linked Issue

What Changed

  • .distignore now excludes System/knowledge-half-life.yaml and System/knowledge-half-life.example.yaml from the built release, with a comment explaining why.
  • Why: Restack knowledge half-life onto current main (#569) #744 added both as seed paths and taught core/portable_contract.py about them, but an update is planned by the installed vault's contract (natively via core.lifecycle.service, or through the bridge via the pinned v1.81.16 foundation's service). Every contract before Restack knowledge half-life onto current main (#569) #744 returns unclassified-never-write for both, so build_update_plan raises release contains a path the ownership contract refuses for every existing vault. That is the exact historic-fleet-darwin-pr-canary failure on Daily rituals stop doing the same work twice (release v1.97.19) #741's last head. These two files are the first shipped paths added since the foundation was pinned, which is why nothing else trips it.
  • The feature is an unwired proposal (Proposal: declare how long an observation stays trustworthy, and measure it #569) and core/utils/freshness.py treats a missing config as UNAVAILABLE by design, so no user-visible change. The rules stay in the contract, so a later release can ship the files once installed contracts know them.
  • No version bump: main is already at 1.97.19 and untagged; v1.97.19 gets tagged on the main head after this lands.

Test Plan

  • Unit/integration tests added or updated: none needed; this is a distribution list change. The gate that would have caught the regression is the fleet canary, which runs on this PR.
  • Negative/error-path tests added or updated: n/a.
  • Commands run locally: resolved the release file list through scripts/resolve-distignore-files.sh and checked every included path with the v1.81.16 foundation contract's update_write_verdict: 0 refused (2 before this change). scripts/verify-distribution.sh, scripts/check-portable-contract.sh, scripts/check-tracked-ignored.py, scripts/check-tau-removal.py all pass. test_security_gate, test_product_agents_bootstrap, test_freshness, test_portable_contract pass. Three test_distribution_artifacts bundle-build tests fail identically with and without this change in the sandbox (exit 127 from build-vault-bundle.sh, a tool the sandbox lacks).

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. Two files leave the release; nothing reads them yet.
  • Rollback plan: revert this commit once installed contracts carry the half-life rules (one release after they ship in the contract), which is the intended path to shipping the files.

Docs Impact

  • Files updated: none.
  • If none, reason: the exclusion is explained in .distignore itself; the feature's own docs describe it as a proposal.

🤖 Generated with Claude Code

https://claude.ai/code/session_0113icGZrCbSBmwomv7e49bH


Generated by Claude Code

#744 added System/knowledge-half-life.yaml and its .example.yaml as seed
paths and taught the ownership contract about them. But an update is planned
by the installed vault's contract (and, through the bridge, by the pinned
foundation release's), and every contract before #744 returns
unclassified-never-write for both paths. A release carrying them is refused
by every existing vault with "release contains a path the ownership contract
refuses", which is exactly what the historic-fleet canary reported on #741.

Hold both files back in .distignore until installed contracts know them. The
feature is an unwired proposal and core/utils/freshness.py reads a missing
config as UNAVAILABLE by design, so users see no change. Proven locally: the
release file list resolved through .distignore has zero paths refused by the
v1.81.16 foundation contract, against two before this change.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0113icGZrCbSBmwomv7e49bH
@github-actions

Copy link
Copy Markdown

What this pull request touches

  • other parts of Dex — No mapped product journey was detected for these paths.

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 1 changed file.

@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 running after the first check poll, and nothing in the remaining signals or approval policy requires human review. No reviewers were assigned.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

This branch has not been deployed

No deployments
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