Skip to content

docs-hygiene extract-ssot: reconsider the Rule of Three gate as a threshold of two with a judgment-based legitimate-divergence check #252

Description

@kyle-sexton

Summary

extract-ssot's headline refusal gate is the Rule of Three (Don
Roberts / Fowler) — it refuses extraction below 3 instances, on the basis
that premature abstraction is the dominant failure mode. This issue
proposes reconsidering that default as a threshold of two, paired with
a judgment-based legitimate-divergence check that replaces the blunt
count as the real decision.

Current behavior (grounded)

  • SKILL.md frontmatter: "refuses extraction below the Rule of Three."
  • Body: "If the same unit of prose appears 3+ times … collapse to one
    definition … Below 3 instances, inline is the disciplined call —
    premature abstraction is the dominant failure mode."
  • The gate is empirically motivated: the skill cites ~19% extraction-failure
    rate on curated skills and ~50% on practitioner-authored skills.
  • The skill already contemplates the change: its deferred-trigger table
    lists "Practitioner-authored skill failure rate drops below 20% … consider
    relaxing Rule of Three to Two for low-risk vocabulary."

Motivation

The owner's dedupe doctrine sets the duplication threshold at two, not
three: a passage, literal, or concept living in two or more places (verbatim
or reworded) is duplication to resolve by pointing, not something to tolerate
until a third copy appears. This doctrine is now embodied in the new
/re-anchor:point-dont-copy corrector (#249), which audits for duplication
at a threshold of two. extract-ssot's Rule-of-Three gate is the one place
in the marketplace that still encodes three as the default, creating an
inconsistency a consumer will hit when they route a two-copy cluster to
extract-ssot after point-dont-copy flagged it.

Proposal

Change the default gate from "refuse below 3" to "consolidate at 2, unless
a legitimate-divergence check passes"
:

  1. Threshold of two. Two instances that change together and have a
    namable identity are candidates for extraction, not an automatic refusal.
  2. Judgment-based legitimate-divergence check replaces the count. The
    real question is not "how many copies" but "should these stay separate on
    their merits" — e.g. the two instances are diverging deliberately, one is
    a contract token that must stay inline, or extraction would drag unrelated
    context. The existing 6-test gate (namable, stable, self-contained,
    bounded, one-level-deep) already carries most of this; this change makes
    the count subordinate to the judgment rather than a hard floor.
  3. Preserve the empirical caution as guidance, not a blanket floor. The
    ~19–50% failure data is real; keep it as a WARN / ROI caution and the
    reversibility guardrails, but stop letting a bare count veto a genuine
    two-copy consolidation.

Open questions

  • Does the empirical failure data hold at threshold two, or should the
    relaxation be scoped (the deferred trigger scopes it to "low-risk
    vocabulary")? The divergence check may be where that scoping lives.
  • How does this interact with the deferred trigger already in the skill —
    does this issue supersede it, or refine its condition?

Filed as part of the round-2 personal-skill graduation; point-dont-copy
(#249) is the reactive corrective that motivated surfacing the threshold
inconsistency.

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.priority: mediumReal value, no hard deadline; normal backlog flow.wayfind: designWayfind decision item: design-space or domain-model decision; human in the loop.

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions