Skip to content

docs: add viability test to contribution guidelines#641

Open
JensGrote wants to merge 3 commits into
LLM-Coding:mainfrom
JensGrote:docs/viability-test-contributing
Open

docs: add viability test to contribution guidelines#641
JensGrote wants to merge 3 commits into
LLM-Coding:mainfrom
JensGrote:docs/viability-test-contributing

Conversation

@JensGrote

@JensGrote JensGrote commented Jun 25, 2026

Copy link
Copy Markdown
Collaborator

(German version below)

docs: add viability test to contribution guidelines

Recognition ≠ activation. The current contribution workflow tests whether a model recognizes a proposed anchor term — but not whether naming it actually changes the output. The training-data-vs-practice article demonstrated empirically that these are different things: "Use-Case 3.0" is recognized by every model, yet naming it produces silent substitution or confabulation rather than reliable activation.

Implements the process side of Issue #640. Incorporates feedback from Ralf's review on #640: the rejection category is now named "Fails viability (recognized but inert)" to make the recognition/activation distinction explicit, and the dovetail with #585 (Formal Artifact Taxonomy) and #624 (Counter-consensus Framing) is documented — the three together form a refresh of the contribution-quality gate.

Changes

1. New section in CONTRIBUTING.adoc (EN + DE): "Viability Test — Does the Anchor Deliver?"

Positioned between "Testing Your Semantic Anchor" and "Developer Setup". Describes:

  • The Before/After test (same task without vs. with anchor — does structure change?)
  • Three failure modes to watch for (silent substitution, confabulation, no structural change)
  • Cross-model check (weak + strong model, mapped to ★★★/★★/★ tier system)
  • When to use a contract instead (passes quality criteria but fails viability → contract, not anchor)

2. New optional field in issue template (propose-anchor.yml)

"Viability Test" textarea — encourages proposers to include a before/after comparison. Starts as optional; can be made mandatory once adopted.

3. Renamed rejection category (rejected-proposals.adoc)

"Not in training data" → "Fails viability (recognized but inert)" — expanded definition covering the three failure modes, directly naming the Viability Test as methodology, and documenting the dovetail with #585 (what an anchor is) and #624 (what still gets rejected even if it passes all criteria). Updated the MIRRR UX Framework entry to use the new category name. German translation: "Viability-Test nicht bestanden (erkannt aber wirkungslos)".

Rationale

The existing four quality criteria (Precise, Rich, Consistent, Attributable) are necessary but not sufficient. A term can pass all four yet still fail in practice because:

  • The prior is too thin (silent substitution on weaker models)
  • The model confabulates (invents plausible but wrong content)
  • The term is recognized but doesn't actually reshape output

The viability test makes the implicit ★★★/★★/★ tier distinction explicit and testable — providing clear criteria for reviewers and a methodology proposers can follow.

Not included (deliberately)

  • No retroactive re-evaluation of existing anchors (the tier system already captures this implicitly)
  • No schema changes
  • The review agent workflow is not modified (future work)

Deutsche Version

docs: Viability-Test zu den Contribution-Guidelines hinzufügen

Erkennung ≠ Aktivierung. Der aktuelle Contribution-Workflow testet, ob ein Modell einen vorgeschlagenen Anchor-Term erkennt — aber nicht, ob das Benennen die Ausgabe tatsächlich verändert. Der training-data-vs-practice-Artikel hat empirisch gezeigt, dass das verschiedene Dinge sind: "Use-Case 3.0" wird von jedem Modell erkannt, produziert aber Silent Substitution oder Confabulation statt zuverlässiger Aktivierung.

Setzt die Prozessseite von Issue #640 um. Integriert das Feedback aus Ralfs Review zu #640: die Rejection-Kategorie heißt jetzt "Fails viability (recognized but inert)" (DE: "Viability-Test nicht bestanden (erkannt aber wirkungslos)"), und der Zusammenhang mit #585 (Formal Artifact Taxonomy) und #624 (Counter-consensus Framing) ist dokumentiert — die drei bilden zusammen ein erneuertes Contribution-Quality-Gate.

Änderungen

1. Neuer Abschnitt in CONTRIBUTING.adoc (EN + DE): "Viability-Test — Liefert der Anker?"

Positioniert zwischen "Testen Ihres semantischen Ankers" und "Entwickler-Setup". Beschreibt:

  • Den Before/After-Test (gleiche Aufgabe ohne vs. mit Anchor — ändert sich die Struktur?)
  • Drei Failure-Modes auf die zu achten ist (Silent Substitution, Confabulation, No Structural Change)
  • Cross-Model-Check (schwaches + starkes Modell, gemappt auf ★★★/★★/★ Tier-System)
  • Wann stattdessen einen Contract verwenden (besteht Qualitätskriterien aber nicht Viability → Contract, nicht Anchor)

2. Neues optionales Feld im Issue-Template (propose-anchor.yml)

"Viability Test" Textarea — ermutigt Proposer, einen Before/After-Vergleich einzufügen. Startet als optional; kann obligatorisch werden sobald adoptiert.

3. Umbenannte Rejection-Kategorie (rejected-proposals.adoc)

"Not in training data" → "Fails viability (recognized but inert)" (DE: "Viability-Test nicht bestanden (erkannt aber wirkungslos)") — erweiterte Definition die die drei Failure-Modes abdeckt, direkt den Viability-Test als Methodik nennt, und den Zusammenhang mit #585 (was ein Anker ist) und #624 (was trotz bestandener Kriterien abgelehnt wird) dokumentiert. MIRRR UX Framework-Eintrag auf neuen Kategorienamen aktualisiert.

Begründung

Die bestehenden vier Qualitätskriterien (Precise, Rich, Consistent, Attributable) sind notwendig aber nicht hinreichend. Ein Term kann alle vier bestehen und dennoch in der Praxis scheitern, weil:

  • Die Prior zu dünn ist (Silent Substitution auf schwächeren Modellen)
  • Das Modell konfabuliert (erfindet plausiblen aber falschen Inhalt)
  • Der Term erkannt wird aber die Ausgabe nicht tatsächlich verändert

Der Viability-Test macht die implizite ★★★/★★/★ Tier-Unterscheidung explizit und testbar — mit klaren Kriterien für Reviewer und einer Methodik der Proposer folgen können.

Summary by CodeRabbit

  • Neue Funktionen

    • Die Beitragsrichtlinien wurden um einen neuen „Viability-Test“ erweitert, der prüft, ob ein Konzept bei der Anwendung tatsächlich Wirkung zeigt.
    • Die Bewertungs- und Ablehnungskategorien wurden aktualisiert, um wirkungslose, aber erkannte Vorschläge klarer einzuordnen.
  • Dokumentation

    • Die Hinweise für Beitragsvorschläge wurden ergänzt und erläutern nun zusätzliche Prüfschritte, typische Fehlerbilder und die passende Einordnung von Ankern und Verträgen.

@coderabbitai

coderabbitai Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

Run ID: b5963fe5-a474-4c3d-9773-56bf9db397bf

📥 Commits

Reviewing files that changed from the base of the PR and between 48eaa62 and 9a031e1.

📒 Files selected for processing (2)
  • docs/rejected-proposals.adoc
  • docs/rejected-proposals.de.adoc

Walkthrough

Die PR ersetzt die Ablehnungskategorie „Insufficient training-data density“ / „Nicht in Trainingsdaten“ durch „Fails viability (recognized but inert)“ in den englischen und deutschen Rejected-Proposals-Seiten, aktualisiert zugehörige Tabelleneinträge und Hinweistexte, und ergänzt die deutsche Beitragsanleitung um einen neuen Viability-Test-Abschnitt.

Changes

Viability-Test und Dokumentation

Layer / File(s) Summary
Viability-Test-Abschnitt in Beitragsanleitung
website/public/CONTRIBUTING.de.adoc
Neuer Abschnitt „Viability-Test — Does the Anchor Deliver?“ mit Before/After-Test, drei Failure Modes (Silent Substitution, Confabulation, No Structural Change), Cross-Model-Check und Anchor/Contract-Abgrenzung, mit Verweis auf docs/training-data-vs-practice.adoc.
Ablehnungskategorie (Englisch)
docs/rejected-proposals.adoc
Kategorie „Insufficient training-data density“ wird zu „Fails viability (recognized but inert)“ umbenannt, Tabelleneintrag angepasst und ein NOTE-Block zum Contribution-Quality-Gate mit Issue-Verweisen ergänzt.
Ablehnungskategorie (Deutsch)
docs/rejected-proposals.de.adoc
Analog wird „Nicht in Trainingsdaten“ durch „Viability-Test nicht bestanden (erkannt aber wirkungslos)“ ersetzt, Tabelleneintrag und Hinweisblock aktualisiert.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Der Titel beschreibt die Hauptänderung in den Beitragsrichtlinien klar und prägnant.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/rejected-proposals.adoc`:
- Around line 12-13: The rejected-proposals category rename is only partially
applied, leaving mixed terminology between “Insufficient training-data density”
and the older label. Update the relevant rejected-proposals documentation and
any linked references in the same proposal stack so the category is named
consistently everywhere, using the existing anchor and section names in this
document to locate the affected entries.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

Run ID: 8fbd932c-68e8-4cac-bf96-838204d909f5

📥 Commits

Reviewing files that changed from the base of the PR and between 6b65efc and 48eaa62.

📒 Files selected for processing (5)
  • .github/ISSUE_TEMPLATE/propose-anchor.yml
  • CONTRIBUTING.adoc
  • docs/CONTRIBUTING.de.adoc
  • docs/rejected-proposals.adoc
  • website/public/CONTRIBUTING.de.adoc

Comment thread docs/rejected-proposals.adoc Outdated
JensGrote pushed a commit to JensGrote/Semantic-Anchors that referenced this pull request Jul 1, 2026
…nert)' per Ralf's LLM-Coding#640 review

Ralf's recommendation on LLM-Coding#640:
  'tie the new "fails viability (recognized but inert)" rejection
  reason into the rejected-proposals page. Worth noting this
  dovetails with LLM-Coding#624 (counter-consensus framing) and LLM-Coding#585
  (artifact taxonomy) — the three together are effectively a
  refresh of the contribution-quality gate.'

Changes:
- Rename 'Insufficient training-data density' → 'Fails viability
  (recognized but inert)' (EN + DE)
- Update MIRRR entry to use new category (EN + DE)
- Add dovetail note referencing LLM-Coding#585, LLM-Coding#624 as the broader
  contribution-quality gate framework

Refs: LLM-Coding#640, LLM-Coding#641, LLM-Coding#585, LLM-Coding#624
@raifdmueller

Copy link
Copy Markdown
Contributor

Review — the viability-test rewrite here (Before/After Test, Three Failure Modes, EN+DE) is a genuine improvement worth keeping. But please rebase on current main before merging — this branch predates several merged changes and would revert or collide with them:

Suggestion: rebase on main, drop the workflow hunks, and reconcile the Viability Test section with the ADR-008 topic-neutral gate. Then the content lands cleanly. (mergeable: CLEAN here is misleading — the base is stale.)

jensgrote and others added 3 commits July 8, 2026 13:01
Recognition ≠ activation. The existing activation test checks whether
a model knows a term, but not whether naming it changes the output.
Add a Viability Test section (EN + DE) that checks:
- Before/After structural change
- Silent substitution risk
- Confabulation risk
- Cross-model portability

Also: rename 'Not in training data' rejection category to
'Insufficient training-data density' with expanded definition
covering the three failure modes.

Refs: training-data-vs-practice article, LLM-Coding#585
…nert)' per Ralf's LLM-Coding#640 review

Ralf's recommendation on LLM-Coding#640:
  'tie the new "fails viability (recognized but inert)" rejection
  reason into the rejected-proposals page. Worth noting this
  dovetails with LLM-Coding#624 (counter-consensus framing) and LLM-Coding#585
  (artifact taxonomy) — the three together are effectively a
  refresh of the contribution-quality gate.'

Changes:
- Rename 'Insufficient training-data density' → 'Fails viability
  (recognized but inert)' (EN + DE)
- Update MIRRR entry to use new category (EN + DE)
- Add dovetail note referencing LLM-Coding#585, LLM-Coding#624 as the broader
  contribution-quality gate framework

Refs: LLM-Coding#640, LLM-Coding#641, LLM-Coding#585, LLM-Coding#624
@JensGrote
JensGrote force-pushed the docs/viability-test-contributing branch from dce6960 to 9a031e1 Compare July 8, 2026 11:02
@JensGrote

Copy link
Copy Markdown
Collaborator Author

Thanks for the review, @raifdmueller!

Resolved:

  • Rebased on current main (includes ADR-008 changes)
  • Workflow files (deploy.yml, test.yml) restored — no longer reverted
  • Viability Test section now coexists with ADR-008 topic-neutral Utility Gate (upstream already integrated the reconciled version)

Remaining diff (3 files):

Ready for re-review.

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.

3 participants