staleness-discipline · git:20260529.5656e38 · 2026-05-29 · sha256 b864cc294b5f0682
staleness-discipline git:20260529.5656e38A
Immutable. This exact content is served forever at /api/v1/blob/b864cc294b5f0682.
--- name: staleness-discipline description: "Detect, classify, and prune stale plugins in Alex_ACT_Plugin_Mall -- define what stale means and how to remove gracefully" lastReviewed: 2026-05-05 --- # Staleness Discipline Define what "stale" means in the Mall and how to remove entries without breaking heirs that depend on them. ## When to Use - Monthly mall audit (fired by `/audit-mall`) - A heir reports a broken or outdated entry - A `/prune-store` invocation - Coherence-check finds an Edition reference to a Mall entry that should be pruned ## What "Stale" Means An entry is stale if **any** of these apply: | Signal | Threshold | |---|---| | Link unreachable | HTTP 4xx/5xx for 2+ consecutive checks across 7 days | | Upstream archived | Repo settings show "Archived" or equivalent | | No upstream activity | No commits, releases, or issue activity in 18+ months | | License changed unfavorably | Switched to a more restrictive or unclear license | | Description drift | Mall description no longer matches upstream README's description | | Replaced by superior alternative | Another Mall entry covers the same ground better | | Heir reports persistent breakage | >= 2 heirs report the entry doesn't work as documented | | Missing plugin.json | Plugin folder lacks machine manifest | | Missing README.md | Plugin folder lacks human-readable description | | Shape mismatch | plugin.json shape doesn't match actual files in the folder | | Token cost stale | plugin.json token_cost differs from actual file sizes by >20% | ## Classification | Stale signal | Action | |---|---| | Link unreachable, but upstream still active | Refresh (update URL) — not prune | | Upstream archived but stable | Keep, mark `archived: stable` in entry | | No activity AND archived | Prune | | License change | Defer to ACT pass — license escalation may need user input | | Description drift only | Refresh | | Replaced by superior alternative | Prune the worse entry, update the better one's description | | Persistent heir breakage | Investigate before pruning — may be a Mall-side fix | ## Pruning Procedure Pruning is **always reversible by re-add**. Never delete history. 1. Run [mall-curation](../mall-curation/SKILL.md)'s decision tree to confirm prune is correct 2. Check coherence: does any Edition skill or instruction reference the entry being pruned? - If yes, fix the Edition reference *first* (open Edition PR), then prune - If no, proceed 3. Comment out the entry in STORES.md and CATALOG.json (do not delete) 4. Add a `pruned: YYYY-MM-DD reason: <reason>` line above the commented entry 5. Update README counts 6. Open Mall PR titled `prune: <entry name> (<reason>)` 7. After merge, document in `docs/` if this prune sets a class precedent 8. Record in `docs/ledgers/curation-log.md` with `M` or `S` classification ## Pruning Anti-Patterns | Anti-pattern | Correction | |---|---| | Hard-deleting the entry | Comment out instead — preserves history and reversibility | | Skipping the coherence check | Pruning a referenced entry breaks the Edition for fleet heirs | | Pruning without updating README counts | The Mall claims N stores; the count must match reality | | Pruning multiple entries in one PR without separate rationales | Each prune is a decision; bundle wastes the audit trail | ## Re-Add Procedure If a pruned store revives (un-archived, link restored, license clarified): 1. Run full [store-evaluation](../store-evaluation/SKILL.md) — past acceptance does not transfer 2. If it passes, uncomment in STORES.md and CATALOG.json 3. Update the prune line to `re-added: YYYY-MM-DD` 4. Increment counts ## Output Template (prune verdict) ```markdown # Prune Verdict — <store name> **Entry**: <STORES.md line or CATALOG.json ID> **Date**: YYYY-MM-DD **Reason**: <which staleness signal fired> ## Coherence Check - Edition references: <count> - References fixed first: yes/no - Files affected: <list> ## Counts After Prune - STORES.md: <before> → <after> - CATALOG.json: <before> → <after> - README badge: <before> → <after> ## ADR? Yes | No — <if yes, link to docs/ADR-NNN> ## ACT Pass Trail <markers> ``` ## Would Revise If Revise if pruned entries are re-added within 30 days under new evidence 2+ times in a quarter (signals over-pruning), or if entries flagged stale by the script remain useful to active heirs (signals threshold miscalibration). ## Related - [mall-curation](../mall-curation/SKILL.md) - [store-evaluation](../store-evaluation/SKILL.md) - [mall-maintenance-rules](../../instructions/mall-maintenance-rules.instructions.md) - `/prune-store` prompt