Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,6 @@ node_modules/
!website/public/logo.png
!website/public/icon.png
.playwright-mcp/
*:Zone.Identifier
website/public/CONTRIBUTING.html
website/public/CONTRIBUTING.de.html
2 changes: 2 additions & 0 deletions CONTRIBUTING.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ The anchor can be *traced to key proponents, publications, or documented standar
*Bad:* "Best practices" - no specific source or authority
====

TIP: Not sure if your proposal qualifies? Check our link:#/rejected-proposals[Rejected Proposals] page to see previously evaluated terms that didn't meet the criteria — and why.

== Testing Your Semantic Anchor

Before proposing, test the anchor with this prompt in an LLM:
Expand Down
19 changes: 19 additions & 0 deletions docs/plans/2026-03-09-rejected-proposals-design.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Rejected Proposals Page — Design

> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.

**Goal:** Static page listing evaluated but not qualified anchor proposals with categorized rejection reasons.

## Design Decisions

- **Format:** Static AsciiDoc (`docs/rejected-proposals.adoc` + `.de.adoc`), manually maintained
- **Placement:** Footer link + reference from Contributing page (not in main nav)
- **Rejection categories** (each links to quality criteria):
- "Structurally unsuitable" — too vague, no defined methodology (fails: Precise, Rich)
- "Not in training data" — good concept, LLMs don't reliably recognize it (fails: Consistent)
- "Too niche" — too specialized for reliable activation (fails: Consistent, Rich)
- **Scope:** Only actually submitted proposals. GoF Tier-3 stays in umbrella context only.
- **Initial entries:** TLDR, ELI5, MIRRR UX Framework (#150)
- **Tech:** Same pipeline as Changelog/AgentSkill — render-docs.js, i18n, bilingual

Closes #166
56 changes: 56 additions & 0 deletions docs/rejected-proposals.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
= Rejected Proposals

This page lists anchor proposals that were evaluated but did not meet the link:#/about[quality criteria] for semantic anchors. Each entry explains why the proposal was rejected.

Understanding why proposals are rejected helps contributors submit better proposals and avoids re-submission of already evaluated terms.

== Rejection Categories

Structurally unsuitable::
The term is too vague, has no defined methodology, or is a pure instruction rather than a concept. Fails the link:#/about[Precise] and/or link:#/about[Rich] criteria.

Not in training data::
A legitimate concept or framework, but not established enough in LLM training data to reliably activate the right knowledge. Fails the link:#/about[Consistent] criterion.

Too niche::
A real methodology but too specialized for reliable activation across different LLMs and contexts. Fails the link:#/about[Consistent] and/or link:#/about[Rich] criteria.

== Rejected Proposals

[cols="2,2,3", options="header"]
|===
| Proposal | Category | Reason

| *TLDR*
| Structurally unsuitable
| Underspecified instruction with no defined structure. Just means "be brief" without any framework for how. Not a methodology.

| *ELI5* (Explain Like I'm 5)
| Structurally unsuitable
| Vague target level with no pedagogical framework. No consistent interpretation of what "5-year-old level" means technically.

| *MIRRR UX Framework* (https://github.com/LLM-Coding/Semantic-Anchors/issues/150[#150])
| Not in training data
| A real UX framework with defined methodology, but not widely enough documented for LLMs to reliably recognize it and activate the correct concepts.

|===

== How We Evaluate

Every proposal is tested against our four quality criteria:

. *Precise* — Does it reference a specific, established body of knowledge?
. *Rich* — Does it activate multiple interconnected concepts?
. *Consistent* — Do different LLMs reliably understand it the same way?
. *Attributable* — Can it be traced to key proponents or publications?

We test by prompting an LLM with:

[quote]
____
What concepts do you associate with '<proposed term>'?
____

If the response is vague, inconsistent across models, or fails to activate a coherent body of knowledge, the proposal does not qualify.

See link:#/about[About] for the full quality criteria and examples.
56 changes: 56 additions & 0 deletions docs/rejected-proposals.de.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
= Abgelehnte Vorschläge

Diese Seite listet Anker-Vorschläge auf, die bewertet wurden, aber die link:#/about[Qualitätskriterien] für semantische Anker nicht erfüllen. Jeder Eintrag erklärt, warum der Vorschlag abgelehnt wurde.

Das Verständnis der Ablehnungsgründe hilft Mitwirkenden, bessere Vorschläge einzureichen und vermeidet die erneute Einreichung bereits bewerteter Begriffe.

== Ablehnungskategorien

Strukturell ungeeignet::
Der Begriff ist zu vage, hat keine definierte Methodik oder ist eine reine Anweisung statt eines Konzepts. Erfüllt das link:#/about[Precise]- und/oder link:#/about[Rich]-Kriterium nicht.

Nicht in Trainingsdaten::
Ein legitimes Konzept oder Framework, aber nicht ausreichend in den LLM-Trainingsdaten etabliert, um zuverlässig das richtige Wissen zu aktivieren. Erfüllt das link:#/about[Consistent]-Kriterium nicht.

Zu spezialisiert::
Eine echte Methodik, aber zu spezialisiert für zuverlässige Aktivierung über verschiedene LLMs und Kontexte hinweg. Erfüllt das link:#/about[Consistent]- und/oder link:#/about[Rich]-Kriterium nicht.

== Abgelehnte Vorschläge

[cols="2,2,3", options="header"]
|===
| Vorschlag | Kategorie | Begründung

| *TLDR*
| Strukturell ungeeignet
| Unterspezifizierte Anweisung ohne definierte Struktur. Bedeutet nur "fasse dich kurz" ohne ein Framework dafür. Keine Methodik.

| *ELI5* (Explain Like I'm 5)
| Strukturell ungeeignet
| Vages Zielniveau ohne pädagogisches Framework. Keine konsistente Interpretation dessen, was "Niveau eines 5-Jährigen" technisch bedeutet.

| *MIRRR UX Framework* (https://github.com/LLM-Coding/Semantic-Anchors/issues/150[#150])
| Nicht in Trainingsdaten
| Ein echtes UX-Framework mit definierter Methodik, aber nicht weit genug dokumentiert, damit LLMs es zuverlässig erkennen und die richtigen Konzepte aktivieren.

|===

== Wie wir bewerten

Jeder Vorschlag wird gegen unsere vier Qualitätskriterien getestet:

. *Precise* — Referenziert er ein spezifisches, etabliertes Wissensgebiet?
. *Rich* — Aktiviert er mehrere zusammenhängende Konzepte?
. *Consistent* — Verstehen verschiedene LLMs ihn zuverlässig gleich?
. *Attributable* — Lässt er sich auf Schlüsselvertreter oder Publikationen zurückführen?

Wir testen, indem wir ein LLM fragen:

[quote]
____
Welche Konzepte verbindest du mit '<vorgeschlagener Begriff>'?
____

Wenn die Antwort vage ist, über Modelle hinweg inkonsistent, oder kein kohärentes Wissensgebiet aktiviert, qualifiziert sich der Vorschlag nicht.

Siehe link:#/about[Über] für die vollständigen Qualitätskriterien und Beispiele.
9 changes: 9 additions & 0 deletions scripts/render-docs.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,5 +67,14 @@ renderFile(path.join(ROOT, 'docs/changelog.adoc'), path.join(WEB_DOCS, 'changelo
renderFile(path.join(ROOT, 'docs/agentskill.adoc'), path.join(WEB_DOCS, 'agentskill.html'))
renderFile(path.join(ROOT, 'docs/agentskill.de.adoc'), path.join(WEB_DOCS, 'agentskill.de.html'))

renderFile(
path.join(ROOT, 'docs/rejected-proposals.adoc'),
path.join(WEB_DOCS, 'rejected-proposals.html')
)
renderFile(
path.join(ROOT, 'docs/rejected-proposals.de.adoc'),
path.join(WEB_DOCS, 'rejected-proposals.de.html')
)

// all-anchors.adoc uses include:: directives — resolved automatically in Node.js
renderFile(path.join(ROOT, 'docs/all-anchors.adoc'), path.join(WEB_DOCS, 'all-anchors.html'))
6 changes: 6 additions & 0 deletions website/src/components/footer.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,12 @@ export function renderFooter(version) {
data-i18n="footer.allAnchors"
>${i18n.t('footer.allAnchors')}</a>
<span class="text-gray-300 dark:text-gray-600">|</span>
<a
href="#/rejected-proposals"
class="text-sm text-[var(--color-text-secondary)] hover:text-[var(--color-text)] transition-colors"
data-i18n="footer.rejectedProposals"
>${i18n.t('footer.rejectedProposals')}</a>
<span class="text-gray-300 dark:text-gray-600">|</span>
<a
href="https://github.com/LLM-Coding/Semantic-Anchors"
target="_blank"
Expand Down
12 changes: 12 additions & 0 deletions website/src/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ function initApp() {
addRoute('/contributing', renderContributingPage)
addRoute('/changelog', renderChangelogPage)
addRoute('/agentskill', renderAgentSkillPage)
addRoute('/rejected-proposals', renderRejectedProposalsPage)
addRoute('/all-anchors', renderAllAnchorsPage)

const app = document.querySelector('#app')
Expand Down Expand Up @@ -198,6 +199,15 @@ function renderAgentSkillPage() {
loadDocContent('docs/agentskill.adoc')
}

function renderRejectedProposalsPage() {
const pageContent = document.getElementById('page-content')
if (!pageContent) return

pageContent.innerHTML = renderDocPage()
updateActiveNavLink()
loadDocContent('docs/rejected-proposals.adoc')
}

function renderAllAnchorsPage() {
const pageContent = document.getElementById('page-content')
if (!pageContent) return
Expand Down Expand Up @@ -405,6 +415,8 @@ function handleLanguageChange() {
loadDocContent('docs/changelog.adoc')
} else if (currentRoute === '/agentskill') {
loadDocContent('docs/agentskill.adoc')
} else if (currentRoute === '/rejected-proposals') {
loadDocContent('docs/rejected-proposals.adoc')
} else if (currentRoute === '/all-anchors') {
loadDocContent('docs/all-anchors.adoc')
} else if (currentRoute === '/') {
Expand Down
1 change: 1 addition & 0 deletions website/src/translations/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
"footer.leaveStar": "Dir gefallen die semantischen Anker? Hinterlasse einen Stern!",
"footer.llmsTxt": "llms.txt",
"footer.allAnchors": "Vollständige Referenz",
"footer.rejectedProposals": "Abgelehnte Vorschläge",
"categories.communication-presentation": "Kommunikation & Präsentation",
"categories.design-principles": "Design-Prinzipien & Muster",
"categories.development-workflow": "Entwicklungs-Workflow",
Expand Down
1 change: 1 addition & 0 deletions website/src/translations/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
"footer.leaveStar": "Like Semantic Anchors? Leave a star!",
"footer.llmsTxt": "llms.txt",
"footer.allAnchors": "Full Reference",
"footer.rejectedProposals": "Rejected Proposals",
"categories.communication-presentation": "Communication & Presentation",
"categories.design-principles": "Design Principles & Patterns",
"categories.development-workflow": "Development Workflow",
Expand Down
Loading