From cbcbfaeabf384d2b160a07aa8244e135c4a8fe9e Mon Sep 17 00:00:00 2001 From: Fahmi Harun <34875577+kuker24@users.noreply.github.com> Date: Wed, 16 Sep 2026 13:08:33 +0700 Subject: [PATCH] docs(anti-slop): selective merge of net-new anti-slop patterns --- CHANGELOG.md | 2 +- docs/warehouse-inventory.md | 18 ++++++++++++++++++ rules/03-prose-discipline.md | 2 ++ skills/impeccable/SKILL.md | 1 + skills/impeccable/reference/taste-guard.md | 4 ++++ skills/install-anti-slop/NOTICE.md | 2 +- skills/writing-for-agents/SKILL.md | 6 ++++++ tests/test_taste_integration.py | 3 +++ 8 files changed, 36 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ae76da..b800381 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## Unreleased -None. +- Selective merge of net-new anti-slop patterns from `miqdadbadjuber/anti-slop` v3.2.x into existing surfaces (`taste-guard.md`, `03-prose-discipline.md`, `writing-for-agents`, `install-anti-slop/NOTICE.md`, and `docs/warehouse-inventory.md`): Two-State Layout, Decorative Status Dot, Over-Explained Comment, and DESIGN.md conflict resolution. Zero new skills added; catalog totals stay 64 (48 model-invoked, 16 manual slash commands). ## 1.8.3 — 2026-09-15 diff --git a/docs/warehouse-inventory.md b/docs/warehouse-inventory.md index a655e53..6b22543 100644 --- a/docs/warehouse-inventory.md +++ b/docs/warehouse-inventory.md @@ -383,3 +383,21 @@ Microsoft MarkItDown as an ingest converter, not a second document OS. SmartDoc | Azure Document Intelligence / Content Understanding | **DEFER** | `-` | No keys in config. | | youtube / audio extras | **DEFER** | `-` | Out of document lane. | | Duplicate SmartDoc modes | **REJECT** | `-` | SmartDoc keeps contract/QA/render. | + +--- + +## Wave Anti-Slop (miqdad) + +Selective merge of net-new anti-slop patterns (`miqdadbadjuber/anti-slop` v3.2.7+) into existing OCBF surfaces. Filter, not a second style system. + +| Candidate | Decision | BestFriend Target | Reason | +| :--- | :---: | :--- | :--- | +| 6 skills (`antislop`, `antislop-ui`, `copywriting`, `human`, `layoutmobile`, `code`) | **REJECT** | `-` | No catalog twins; filter folded into existing specialists. | +| `npx antislop-ai`, Claude/Cursor plugins, AGENTS.md pointer they write | **REJECT** | `-` | Foreign installer scripts and host config mutators rejected. | +| Delivery Gate 4-block report every turn | **REJECT** | `-` | Rigid per-turn ceremony rejected; verification profiles stay authoritative. | +| dmmulroy Oxlint `install-anti-slop` | **KEEP** | `skills/install-anti-slop` | TypeScript/JavaScript static linter; do not mix UI rules into it. | +| Existing taste-guard + `03-prose-discipline` slop lines from #21 | **KEEP** | `taste-guard.md`, `rules/03-prose-discipline.md` | Core fences preserved intact. | +| Two-State Layout | **MERGE** | `skills/impeccable/reference/taste-guard.md` | §7 Responsiveness: phone stack + desktop grid with nothing between is slop. | +| Decorative Status Dot | **MERGE** | `skills/impeccable/reference/taste-guard.md` | §9 Motivated Visual Effects: glowing/pulsing dot must mark a real state. | +| Over-Explained Comment | **MERGE** | `skills/writing-for-agents/SKILL.md` | Comment discipline: multi-line around one-line fact is slop; no `// ====` banners. | +| DESIGN.md conflict (R-37) | **MERGE** | `skills/impeccable/reference/taste-guard.md` | Precedence: ask keep-or-drop when brief asks for slop; identity palette/type is not slop. | diff --git a/rules/03-prose-discipline.md b/rules/03-prose-discipline.md index c38ec45..6ee758e 100644 --- a/rules/03-prose-discipline.md +++ b/rules/03-prose-discipline.md @@ -17,6 +17,8 @@ This is not a skill. It does not auto-apply. It does not rewrite code. - Cut words that do no work. - Cut kickoff slop and AI promotional clichés (“Let’s dive in”, “Supercharge your workflow”, “In this fast-paced world”, “Unleash the power of”). - Cut fake social proof: never author synthetic testimonials, fabricated reviews, or unverified star ratings. +- Cut fabricated metrics and uncited statistics: never invent precise percentages, multipliers, or benchmark numbers. +- Cut beta-pill voice and sparkle-CTA fluff: do not decorate action buttons with sparkles, emoji flair, or artificial status pills. - Never “polish” source code, tests, or command output as if they were marketing copy. For full prose rewrites and systematic AI-tell removal, use the `humanizer` specialist (manual slash alias: `/unslop`). diff --git a/skills/impeccable/SKILL.md b/skills/impeccable/SKILL.md index aa8b472..af5b37a 100644 --- a/skills/impeccable/SKILL.md +++ b/skills/impeccable/SKILL.md @@ -30,6 +30,7 @@ Core principles: ## How to design - **The brief wins.** Honor pinned aesthetics, eras, materials, fonts, and palettes even when they conflict with a saturated-pattern warning. Redirecting a clear brief toward your taste is failure. +- **Anti-slop hard rules.** Enforce named bans from [reference/taste-guard.md](reference/taste-guard.md): Two-State Layout, Decorative Status Dot, and DESIGN.md conflict resolution. Do not load an external anti-slop specialist. - **Refinement preserves; redesign replaces.** Refinement keeps the incumbent identity, behavior, copy, and everything outside scope. Ask before replacing factual copy or adding claims. Redesign keeps product truth, content, function, native affordances, and constraints, but treats the old look as evidence and anti-reference; choose a replacement world in new-work and replace DESIGN.md. Never split the difference into polish on the discarded look. - **Visual authority is evidence, not a filename.** Missing DESIGN.md alone does not make a project greenfield; new-work decides whether to preserve, expand, or replace the incumbent world. diff --git a/skills/impeccable/reference/taste-guard.md b/skills/impeccable/reference/taste-guard.md index b366f0c..01c3c37 100644 --- a/skills/impeccable/reference/taste-guard.md +++ b/skills/impeccable/reference/taste-guard.md @@ -16,6 +16,8 @@ When guidelines diverge, resolve in strict order: *Anti-Dogma Rule*: Taste guidelines discourage unexamined category defaults, but they are NOT absolute bans. Purple accents, Inter font, SVG icons, symmetrical grids, eyebrows, or cards are fully permitted when the brand, project, or user requests them. +- **DESIGN.md Conflict**: If an explicit pin or `DESIGN.md` asks for a named slop pattern, name the element and the conflict, then ask keep-or-drop. Never silently follow and never silently override. Palette and typography that constitute brand identity are never slop. + --- ## The 11 Core Quality Guardrails @@ -52,6 +54,7 @@ When guidelines diverge, resolve in strict order: ### 7. Responsiveness & Breakpoint Defense - Explicit mobile collapse (`< 768px`) for every multi-column layout or bento grid; verify no horizontal overflow. +- **Two-State Layout**: A phone stack plus desktop grid with nothing defined between is slop. Need at least one mid breakpoint or an explicit single-canvas choice. - Viewport stability: use `min-h-[100dvh]` rather than `h-screen` to prevent iOS address-bar layout jumping. - Test with real copy at actual target viewports, not placeholder words that never wrap. @@ -62,6 +65,7 @@ When guidelines diverge, resolve in strict order: ### 9. Motivated Visual Effects - Every animation must have a clear purpose: hierarchy, feedback, narrative pacing, or state change. If an effect cannot be justified in one sentence, omit it. +- **Decorative Status Dot**: A glowing or pulsing dot must mark a real state (online, error, recording). If it marks nothing, remove it. - Avoid unmotivated glassmorphism, glowing borders, or arbitrary parallax loops. - Horizontal marquees: at most one per page where content genuinely benefits from continuous stream. diff --git a/skills/install-anti-slop/NOTICE.md b/skills/install-anti-slop/NOTICE.md index 45e41e2..d3e839b 100644 --- a/skills/install-anti-slop/NOTICE.md +++ b/skills/install-anti-slop/NOTICE.md @@ -20,4 +20,4 @@ This skill vendors and adapts the Anti-Slop Oxlint plugin originally authored by - Strictly segregated from core OCBF Python dependencies (no Oxlint forced onto OCBF itself). ## Additional Attribution -Prose and UI anti-slop guidelines in `rules/03-prose-discipline.md` and `skills/impeccable/reference/taste-guard.md` incorporate concepts and patterns adapted from [miqdadbadjuber/anti-slop](https://github.com/miqdadbadjuber/anti-slop) (MIT License, Copyright (c) 2024 Miqdad Badjuber). Zero extra catalog skills or external runtime dependencies added. +UI and copy named patterns in `rules/03-prose-discipline.md`, `skills/impeccable/reference/taste-guard.md`, and `skills/writing-for-agents/SKILL.md` also draw on [miqdadbadjuber/anti-slop](https://github.com/miqdadbadjuber/anti-slop) MIT (v3.2.x patterns; no verbatim dump, zero extra catalog skills or external runtime dependencies added). diff --git a/skills/writing-for-agents/SKILL.md b/skills/writing-for-agents/SKILL.md index e4510e1..33c9805 100644 --- a/skills/writing-for-agents/SKILL.md +++ b/skills/writing-for-agents/SKILL.md @@ -80,3 +80,9 @@ You win twice: fewer tokens, and a sharper hook for the agent to hang its thinki - The **environment** is a source of truth too — `package.json` scripts, config files, the directory layout, `--help` output — and a document that restates it is a **cache**: a copy of a lookup, earning its load only when the lookup is expensive. Cache what the agent cannot find by looking: the unwritten convention, the reason behind a choice, the gotcha no config confesses. Leave the one-file, one-command lookups to the environment, where they cannot go stale. - Check every line for **relevance**: does it still bear on what the document does? A line loses relevance by never bearing on the task (mere exposition, or a branch that should be disclosed) or by going stale as the behaviour or world it describes changes. Shorter documents are easier to keep relevant. Without a pruning discipline the default fate is **sediment**: stale layers that settle because adding feels safe and removing feels risky, until you must core down through them to find what is still live. - Hunt **no-ops** sentence by sentence: an instruction the model already obeys by default pays load to say nothing. The test — does it change behaviour versus the default? — is model-relative, not reader-relative: two people disagreeing about a no-op disagree about the default, and settle it by running the document, not by debate. When a sentence fails, delete the whole sentence rather than trim words from it. The test also grades leading words: a word too weak to beat the default (_be thorough_ when the agent is already thorough-ish) is a no-op, and the fix is a stronger word (_relentless_), not a different technique. + +## Comment discipline + +- **Over-Explained Comment**: a multi-line comment around a one-line fact is slop. State the why in one clear line; omit restatements of what the code already says. +- **Decorative Banners**: decorative `// ====` banners and divider blocks are slop. +- When cleaning comments, do not touch executable code, identifiers, or control flow. diff --git a/tests/test_taste_integration.py b/tests/test_taste_integration.py index b6cb6d5..dd7ac61 100644 --- a/tests/test_taste_integration.py +++ b/tests/test_taste_integration.py @@ -40,6 +40,9 @@ def test_precedence_and_anti_dogma_rules(self): self.assertIn("Explicit brief, pinned aesthetic, brand guidelines, and user constraints always win", text) self.assertIn("Anti-Dogma Rule", text) self.assertIn("Purple accents, Inter font, SVG icons", text) + self.assertIn("DESIGN.md Conflict", text) + self.assertIn("Two-State Layout", text) + self.assertIn("Decorative Status Dot", text) def test_provenance_and_sources_inventory(self): sources = json.loads((ROOT / "vendor" / "sources.json").read_text(encoding="utf-8"))