Force one concrete sentence to find orphaned surfaces, duplicate verbs, inert abstractions. Use for "what does X actually do", "in one sentence", "too many options", or auditing whether a surface or abstraction is coherent. For a plain code-comprehension question, answer directly instead.
74
92%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Related skills: use post-implementation-review when the sentence is part of a post-change second read, and greenfield-clean-breaks when the sentence drives an API, ownership, lifecycle, or package boundary change.
Core move. Before continuing, stop and write one concrete sentence that describes the subject. Name the objects, verbs, and scope. No marketing words. No "flexibly handles." No "unified experience." Then use the sentence as an audit tool.
Show your work. Write the sentence out in your response, visibly. The value is in the reader seeing the gap between what the prose claims and what the subject actually is: that only happens if the reduction is on the page, not silent in your head.
If the sentence keeps drifting as you write it, the design isn't coherent yet: that's the finding. Name the ambiguity before continuing.
The move has two applications. They're distinct lenses on the same discipline: pick the one that fits the subject.
Subject: a design, spec, or surface (commands, endpoints, options, tables) whose coherence is in question. The sentence is the thesis; every surface is audited against it.
Signals:
Audit the thesis against each surface:
After the surface audit, run an asymmetric wins check. This skill only detects the opportunity; asymmetric-wins owns the decision, candidate list, and refusal template.
1. List the convenience features, rare modes, old shapes, and fast paths.
2. Circle the one that forces the most extra surface area.
3. Remove that one from the sentence.
4. If the sentence still describes a useful product, run the asymmetric-wins
pass.This matters most before greenfield implementation, when AI can make a second path feel cheap. The second path is still a permanent invariant.
A notification API has grown: notify.send, notify.schedule, notify.batch, notify.digest, notify.preferences, notify.channels.register, notify.history. Feels bloated.
First try: "A notification system." Too vague: fails.
Second try: "Send messages to users across channels." Doesn't cover preferences or history.
Third try: "Deliver a message to a user on their preferred channel, honoring their quiet hours, and remember we sent it."
Audit:
send: deliver ✓preferences: preferred channel + quiet hours ✓channels.register: preferred channel ✓history: remember we sent it ✓schedule: not in sentence. Separate product (a scheduler).batch, digest: sentence says a message to a user. Different thesis.Finding: schedule, batch, digest belong to a sibling product. The cohesion test surfaced what the audit existed to find.
Bad: "A CLI for managing your workspace." Vague. Could be anything.
Good: "Introspect and invoke defineQuery/defineMutation actions in epicenter.config.ts, either locally or on a peer that's online right now."
The good sentence names the objects (actions), their source (config file), the verbs (introspect, invoke), and the scope (local or live peer). Every CLI command maps to one of those verbs or objects. Anything else is a surface that does not belong.
Subject: a single utility, wrapper, flag, endpoint, or config option whose value is in question. The sentence describes what the code actually does, ignoring docs, then specializes under the defaults in use.
Signals:
Three reductions in order. Don't skip.
Strip-docs reduction. Ignore the name, JSDoc, README. Read the body. Finish this sentence in plain language: "This function ______." No adjectives. Just the mechanics.
Default-config reduction. Specialize: "Under the defaults actually in use, this function ______." Features gated behind non-default options don't count. If a knob is set to Infinity, false, or null, the code path it guards is inert.
Caller-need check. Does the caller's use case actually need the default-config version? If not, you've found a mismatch: wrong tool, wrong defaults, or a wrapper adding zero value.
createDisposableCache has a page of JSDoc about refcounted Y.Doc lifecycles, cache eviction, idle timeouts, deterministic cleanup.
Strip-docs reduction:
"Dedup by id, refcount open/close, destroy when refcount hits
zero after an idle timeout."
Default-config reduction (gcTime: Infinity):
"Dedup by id. Close is explicit: docs live forever."
→ Refcount is inert. No eviction ever fires.
Caller-need check: wrapping the singleton openFuji with this.
The caller has exactly one id and one lifetime. Dedup of a
singleton is a no-op. Explicit close already exists on the
underlying doc.
Verdict: the wrapper contributes zero. Delete it.The reduction did the work. The JSDoc had been hiding that the defaults neuter the main feature, and the caller didn't need the main feature anyway.
Infinity, false, null) disables the mechanism the docs advertise.After the move, you can state in one concrete sentence what the subject is (cohesion audit) or what it's buying this caller (value-add audit). If you cannot, or the honest sentence is "nothing, really", the design or abstraction does not earn its keep.
cb12bcc
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.