Skip to content
Back to skills

Lakatos Degeneracy Detector

ASecurity

Detects degenerating research programmes in AI skill libraries by tracking whether version changes narrow a skill's declared scope to exclude anomalies (monster-barring) rather than accommodating them through improved theory. Operationalizes Lakatos's MSRP distinction between progressive problemshifts (novel predictive content) and degenerating ones (content-decreasing post-hoc exclusions), using four instrumented signals — Scope Contraction Rate, Novel-case Coverage Ratio, Failure-Exclusion ...

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 24, 2026
toolsgotestinggitapiperformance

Works with

  • api

Security analysis

A100/100

Pro scans all 9 files and shows the line behind each finding

Scanned September 24, 2026

npx -y skills add curiositech/port-daddy --skill lakatos-degeneracy-detector --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Lakatos Degeneracy Detector?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Lakatos Degeneracy Detector
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/curiositech-lakatos-degeneracy-detector/badge)](https://www.skillsdirectory.com/skills/curiositech-lakatos-degeneracy-detector)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: lakatos-degeneracy-detector
version: 0.1.0
description: >
  Detects degenerating research programmes in AI skill libraries by tracking whether
  version changes narrow a skill's declared scope to exclude anomalies (monster-barring)
  rather than accommodating them through improved theory. Operationalizes Lakatos's
  MSRP distinction between progressive problemshifts (novel predictive content) and
  degenerating ones (content-decreasing post-hoc exclusions), using four instrumented
  signals — Scope Contraction Rate, Novel-case Coverage Ratio, Failure-Exclusion
  Correlation, and Predictive Novelty Score — to emit selection-pressure alerts before
  a skill's hard core is silently hollowed out by accumulated monster-barring moves.
author: soma-windags-graft
tags: [skill-health, lakatosian-msrp, monster-barring, degeneracy-detection, skill-lifecycle, regression, eval, epistemics]
pairs-with: []
---

# Lakatos Degeneracy Detector

## When to Use

- A skill's `SKILL.md` gains new `exclude:`, `not_supported:`, or `preconditions:` clauses in a version bump, especially when no new capability is added in the same version.
- A skill's `NOT_FOR` section grows across revisions while its `When to Use` section stays flat or shrinks — the declared scope is contracting rather than expanding.
- Post-incident review of a skill that failed evaluation and was subsequently "fixed" by narrowing its contract rather than improving its implementation.

NOT for:
- Detecting performance regressions that leave scope unchanged (use AgentAssay or a standard regression harness for that).
- Evaluating whether a skill's initial scope definition is too narrow at creation time (this detector only tracks *changes* across versions).
- Cases where scope contraction is documented as a known temporary regression with an external cause and a tracked recovery plan — that is a "stagnant programme," not a degenerating one (see Adamou 2024).

## Core Concepts

**Hard Core vs. Protective Belt** (Lakatos 1978): A skill's hard core is its declared invariant capability — the contract stated in `SKILL.md` that defines what the skill *is*. The protective belt is everything adjustable without abandoning that contract: prompt templates, model pins, chunk sizes, retry logic, output formatting. Legitimate version improvements modify the belt. Monster-barring corrupts the hard core by retracting it.

**Monster-Barring** (Lakatos 1976): The strategy of handling a counterexample not by improving the proof or theory but by redefining the domain to exclude the offending case. In skill terms: after an input class causes failures in evaluation, adding a `precondition:` or `exclude:` clause that retroactively removes that class from the skill's declared scope. The theorem is "preserved" while its coverage quietly shrinks. Distinguishable from legitimate scope refinement by one test: does the change generate novel predictions (new capabilities), or does it only remove known anomalies?

**Progressive vs. Degenerating Problemshift** (Lakatos 1978): A sequence of modifications is *progressive* if each version is both theoretically progressive (predicts novel facts not predicted by the prior version) and empirically progressive (at least some novel predictions are corroborated by passing evals). A sequence is *degenerating* if modifications are content-decreasing — they re-describe known failures after the fact with no novel predictive power. The programme shrinks to avoid falsification rather than growing to explain more.

**Failure-Exclusion Correlation (FEC)**: The fraction of new scope restrictions added in version N for which a failing evaluation case matching that restriction existed in version N-1's eval logs. FEC > 0.7 means ≥70% of the new exclusions retroactively cover known failures — the monster-barring threshold. Computed by diffing `SKILL.md` scope clauses across versions and joining against the eval failure log.

**Predictive Novelty Score (PNS)**: Whether scope changes in `SKILL.md` were committed *before* matching eval failures appeared (legitimate anticipatory scoping) or *after* (post-hoc exclusion). Track `SKILL.md` commit timestamps against eval-failure timestamps. Legitimate refinements precede failures; monster-barring follows them. This is the causal direction test.

## Implementation Pattern

```
# Inputs:
#   skill_versions: list of (version_tag, SKILL_md_text, eval_run_log) tuples, oldest first
#   failure_log: list of (timestamp, version_tag, input_case, failure_reason)
#   commit_log: list of (timestamp, version_tag, changed_file, diff)

function detect_degeneracy(skill_versions, failure_log, commit_log):

    alerts = []

    for i in range(1, len(skill_versions)):
        prev_ver, prev_md, prev_evals = skill_versions[i-1]
        curr_ver, curr_md, curr_evals = skill_versions[i]

        # --- Signal 1: Scope Contraction Rate (SCR) ---
        prev_exclusions = extract_exclusion_clauses(prev_md)  # NOT_FOR + exclude: + preconditions:
        curr_exclusions = extract_exclusion_clauses(curr_md)
        new_exclusions = curr_exclusions - prev_exclusions
        SCR = len(new_exclusions)

        # --- Signal 2: Novel-case Coverage Ratio (NCR) ---
        new_passing = cases_passing_in_curr_not_in_prev(curr_evals, prev_evals)
        new_total_changes = len(new_exclusions) + len(new_passing)
        NCR = len(new_passing) / new_total_changes if new_total_changes > 0 else 0.0
        # Progressive: NCR > 0.5 (more expansions than contractions)
        # Degenerating: NCR < 0.2 (nearly all changes are exclusions)

        # --- Signal 3: Failure-Exclusion Correlation (FEC) ---
        prior_failures = [f for f in failure_log if f.version_tag == prev_ver]
        matched = 0
        for exclusion in new_exclusions:
            if any(exclusion_matches_failure(exclusion, f) for f in prior_failures):
                matched += 1
        FEC = matched / len(new_exclusions) if new_exclusions else 0.0
        # Monster-barring threshold: FEC > 0.7

        # --- Signal 4: Predictive Novelty Score (PNS) ---
        exclusion_commits = [c for c in commit_log
                             if c.version_tag == curr_ver
                             and 'SKILL.md' in c.changed_file
                             and any(e in c.diff for e in new_exclusions)]
        anticipatory = 0
        for commit in exclusion_commits:
            matching_failures = [f for f in failure_log
                                  if exclusion_matches_failure_by_text(commit.diff, f)
                                  and f.timestamp > commit.timestamp]
            if matching_failures:
                anticipatory += 1
        PNS = anticipatory / len(exclusion_commits) if exclusion_commits else 1.0
        # PNS == 1.0: all exclusions precede failures (legitimate)
        # PNS == 0.0: all exclusions follow failures (pure monster-barring)

        # --- Alert thresholds ---
        if SCR >= 1 and FEC > 0.7 and NCR < 0.2:
            alerts.append({
                "level": "DEGENERATING_PROGRAMME",
                "version": curr_ver,
                "SCR": SCR, "FEC": FEC, "NCR": NCR, "PNS": PNS,
                "new_exclusions": list(new_exclusions),
                "action": "require_positive_heuristic_roadmap"
            })
        elif SCR >= 1 and PNS < 0.3:
            alerts.append({
                "level": "MONSTER_BARRING_SUSPICION",
                "version": curr_ver,
                "SCR": SCR, "FEC": FEC, "NCR": NCR, "PNS": PNS,
                "new_exclusions": list(new_exclusions),
                "action": "flag_for_review_within_48h"
            })

    return alerts

# Gate: a skill version with SCR >= 1 and no corresponding expansion (NCR < 0.2)
# cannot merge without one of:
#   (a) a positive-heuristic roadmap: at least one new eval case in EXPANDED territory
#   (b) an exception documenting external cause (stagnant programme, not degenerating)
#       with a linked recovery issue
```

**Rehabilitation path**: A degenerating alert does not kill a skill. The required output is a positive-heuristic roadmap — a documented commitment to add eval cases in *expanded* territory (input classes outside both the old and new scope). This is tracked as a required follow-up issue and blocks the next version merge until at least one such case passes.

**Stagnant programme exemption**: If the scope contraction is caused by an external constraint (e.g., underlying model deprecated, API removed, compliance restriction), document the external cause explicitly and link a recovery issue. This maps to Adamou's (2024) "stagnant programme" third category — acceptable if external, not acceptable as a permanent state.

## Key References

1. **Lakatos, I. (1978).** *The Methodology of Scientific Research Programmes: Philosophical Papers, Volume 1.* Cambridge University Press. Primary source for hard core, protective belt, progressive/degenerating problemshift, negative/positive heuristic. SEP entry: https://plato.stanford.edu/entries/lakatos/

2. **Lakatos, I. (1976).** *Proofs and Refutations: The Logic of Mathematical Discovery.* Cambridge University Press. Primary source for monster-barring, exception-barring, lemma incorporation, and the Euler polyhedra case study that grounds the canonical definition.

3. **Dunleavy, P. (2022).** "Progressive and degenerative journals: on the growth and appraisal of knowledge in scholarly publishing." *Research Integrity and Peer Review.* PMC9643948. The most operationalized existing MSRP application: Mistake Index = articles / corrections; Scite Index = supporting / (supporting + contrasting). Working 2x2 classification matrix. https://pmc.ncbi.nlm.nih.gov/articles/PMC9643948/

4. **Adamou, A. (2024).** "Stagnant Lakatosian Research Programmes." arXiv:2404.18307. Formalizes the third category between progressive and degenerating — programmes blocked by external constraints rather than internal methodological failure. Provides four demarcation criteria. Critical for the stagnant-programme exemption gate. https://arxiv.org/html/2404.18307v2

5. **Barr, B. et al. (2026).** "AgentAssay: Token-Efficient Regression Testing for Non-Deterministic AI Agent Workflows." arXiv:2603.02601. Provides the statistical machinery (Wilson score intervals, Clopper-Pearson) for capability regression detection in agent systems — the closest existing implementation to what a skill health monitor needs for the eval-comparison step. https://arxiv.org/pdf/2603.02601

6. **Anonymous (2026).** "Benchmark Health Index: A Systematic Framework for Benchmarking the Benchmarks of LLMs." arXiv:2602.11674. Three-metric framework (Capability Discrimination, Anti-Saturation, Impact) applied to 106 benchmarks. Directly applicable to eval-suite health monitoring for the NCR signal. https://arxiv.org/abs/2602.11674

Files in this skill

  • CHANGELOG.md313 B
  • SKILL.md10.6 KB
  • affordance-scorecard.json849 B
  • diagrams/01_flowchart_decision-points.md2.1 KB
  • diagrams/INDEX.md254 B
  • references/INDEX.md570 B
  • references/lakatos-msrp.md5.1 KB
  • references/operationalizing-degeneracy.md4.9 KB
  • references/selection-pressure-for-skills.md6.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…