--- name: fpf:decay description: "Manage evidence freshness by identifying stale decisions and providing governance actions" --- # Evidence Freshness Management Manages **evidence freshness** by identifying stale decisions and providing governance actions. Implements FPF B.3.4 (Evidence Decay). **Key principle:** Evidence is perishable. Decisions built on expired evidence carry hidden risk. --- ## Quick Concepts ### What is "stale" evidence? Every piece of evidence has a `valid_until` date. A benchmark from 6 months ago may no longer reflect current system performance. A security audit from before a major dependency update doesn't account for new vulnerabilities. When evidence expires, the decision it supports becomes **questionable** - not necessarily wrong, just unverified. ### What is "waiving"? **Waiving = "I know this evidence is stale, I accept the risk temporarily."** Use it when: - You're about to launch and don't have time to re-run all tests - The evidence is only slightly expired and probably still valid - You have a scheduled date to refresh it properly A waiver is NOT ignoring the problem - it's **explicitly documenting** that you know about the risk and accept it until a specific date. ### The Three Actions | Situation | Action | What it does | |-----------|--------|--------------| | Evidence is old but decision is still good | **Refresh** | Re-run the test, get fresh evidence | | Decision is obsolete, needs rethinking | **Deprecate** | Downgrade hypothesis, restart evaluation | | Accept risk temporarily | **Waive** | Record the risk acceptance with deadline | --- ## Action (Run-Time) ### Step 1: Generate Freshness Report 1. List all evidence files in `.fpf/evidence/` 2. For each evidence file: - Read `valid_until` from frontmatter - Compare with current date - Classify as FRESH, STALE, or EXPIRED ### Step 2: Present Report ```markdown ## Evidence Freshness Report ### EXPIRED (Requires Action) | Evidence | Hypothesis | Expired | Days Overdue | |----------|------------|---------|--------------| | ev-benchmark-2024-06-15 | redis-caching | 2024-12-15 | 45 | | ev-security-2024-07-01 | auth-module | 2025-01-01 | 14 | ### STALE (Warning) | Evidence | Hypothesis | Expires | Days Left | |----------|------------|---------|-----------| | ev-loadtest-2024-10-01 | api-gateway | 2025-01-20 | 5 | ### FRESH | Evidence | Hypothesis | Expires | |----------|------------|---------| | ev-unittest-2025-01-10 | validation-lib | 2025-07-10 | ### WAIVED | Evidence | Waived Until | Rationale | |----------|--------------|-----------| | ev-perf-old | 2025-02-01 | Migration pending | ``` ### Step 3: Handle User Actions Based on user response, perform one of: #### Refresh User: "Refresh the redis caching evidence" 1. Navigate to the hypothesis in `.fpf/knowledge/L2/` 2. Re-run validation to create fresh evidence #### Deprecate User: "Deprecate the auth module decision" 1. Move hypothesis from L2 to L1 (or L1 to L0) 2. Create deprecation record: ```markdown # In .fpf/evidence/deprecate-auth-module-2025-01-15.md --- id: deprecate-auth-module-2025-01-15 hypothesis_id: auth-module action: deprecate from_layer: L2 to_layer: L1 created: 2025-01-15T10:00:00Z --- # Deprecation: auth-module **Reason**: Evidence expired, technology landscape changed **Next Steps**: Run `/fpf:propose-hypotheses` to explore alternatives ``` 3. Move the hypothesis file: ```bash mv .fpf/knowledge/L2/auth-module.md .fpf/knowledge/L1/auth-module.md ``` #### Waive User: "Waive the benchmark until February" 1. Create waiver record: ```markdown # In .fpf/evidence/waiver-benchmark-2025-01-15.md --- id: waiver-benchmark-2025-01-15 evidence_id: ev-benchmark-2024-06-15 waived_until: 2025-02-01 created: 2025-01-15T10:00:00Z --- # Waiver: ev-benchmark-2024-06-15 **Evidence**: ev-benchmark-2024-06-15 **Hypothesis**: redis-caching **Waived Until**: 2025-02-01 **Rationale**: Migration pending, will re-run after completion **Accepted By**: User **Created**: 2025-01-15 **WARNING**: This evidence returns to EXPIRED status after 2025-02-01. ``` --- ## Natural Language Usage **You don't need to memorize evidence IDs.** Just describe what you want. ### Example Workflow ``` User: /fpf:decay Agent shows report with stale evidence User: Waive the benchmark until February, we'll re-run it after the migration. Agent: Creating waiver for ev-benchmark-2024-06-15 until 2025-02-01. Rationale: "Re-run after migration" [Creates .fpf/evidence/waiver-benchmark-2025-01-15.md] User: The vendor API is being discontinued. Deprecate that decision. Agent: Deprecating hypothesis-vendor-api from L2 to L1. [Moves file, creates deprecation record] Next step: Run /fpf:propose-hypotheses to explore alternatives. ``` --- ## WLNK Principle A hypothesis is **STALE** if *any* of its evidence is expired (and not waived). This is the Weakest Link (WLNK) principle: reliability = min(all evidence). One stale piece makes the whole decision questionable. --- ## Audit Trail All actions are logged: | Action | What's Recorded | |--------|-----------------| | Deprecate | from_layer, to_layer, reason, date | | Waive | evidence_id, until_date, rationale, date | Files created in `.fpf/evidence/`: - `deprecate-{hypothesis}-{date}.md` - `waiver-{evidence}-{date}.md` --- ## Common Workflows ### Weekly Maintenance ``` /fpf:decay # See what's stale # For each stale item: refresh, deprecate, or waive ``` ### Pre-Release ``` /fpf:decay # Check for stale decisions # Either refresh evidence or explicitly waive with documented rationale # Waiver rationales become part of release documentation ``` ### After Major Change ``` # Dependency update, API change, security advisory... /fpf:decay # See what's affected # Deprecate obsolete decisions # Start new hypothesis cycle for replacements ```