slop-design
Use when designing/planning for implementation, and to reflect on your design's domain behavior and real consumers.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Use when designing/planning for implementation, and to reflect on your design's domain behavior and real consumers.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
| name | slop-design |
| description | Use when designing/planning for implementation, and to reflect on your design's domain behavior and real consumers. |
| license | CC-BY-NC-4.0 |
Independent design means software artifacts serve the system that will run them, not the conversation that produced them. The test is: would an independent human engineer, planning and programming for themselves, design this the same way?
Follow this sequence: list the requested elements, identify the core engineering need, then implement for the real domain.
Do not use this to reject normal domain modeling. If a field drives behavior, persistence, validation, routing, permissions, or user output, keep it.
Keep the steps independent and in order. Start with what was requested, then test it against runtime behavior.
1. Enumerate requested elements → what was asked for
2. Classify each element → runtime behavior, user surface, persistence, or dependent artifact
3. Apply the independent-engineer test → would this exist without the request wording?
4. Delete or rename dependent elements → prefer domain names and single sources of truth
5. Replace static tests → test behavior through the surface, not copied structure
6. Re-check the design → every artifact has a current consumer or domain purpose
Common manifestations, not an exhaustive list:
| Pattern | Smell | Better move |
|---|---|---|
| Conversation-shaped naming | managerDashboardAccess, safeCheckoutStepName, or SarahsDashboard encode request context | Name the domain behavior: canViewAggregateMetrics, checkoutStepId, teamMetricsView |
| UI-flow API design | POST /checkout/review-and-confirm mirrors one screen flow | Model the domain action: POST /orders or POST /payments/confirm |
| Implementation-shaped observability | Metrics like redis_cache_hits or postgres_query_time leak current storage choices | Track stable behavior: cache_hits, storage_query_duration, unless the technology is the contract |
| Deployment-shaped config | awsLambdaTimeout or k8sReplicaCount appears before the product depends on that platform | Use current concepts: requestTimeout, instanceCount; specialize only when variation exists |
| Design-only metadata | suggestedFeatures, advisoryFlags, or explanatory notes never affect behavior | Put prose in docs, or wire metadata to an actual decision |
| Relationship without use | relatedItems, references, or allowedTransitions no code traverses | Remove, or implement the routing/validation that needs it |
| Structure-only tests | Tests assert exact headings, counts, object keys, or non-empty arrays | Test behavior through the surface |
| Checklist helpers | One-line wrappers or API methods with no semantic compression | Use direct access, or create one meaningful operation |
Before adding any element, answer:
| Gate | Required evidence |
|---|---|
| Consumer | What code reads this outside its definition/test? |
| Decision | Does it change a branch, route, permission, selection, validation, output, or persisted data? |
| Variation | Can it vary meaningfully today? |
| Domain name | Would this name make sense without knowing the request context? |
| Single source | Are repeated representations derived from one authoritative artifact? |
| Test value | Would the test fail if behavior broke, not just if copy changed? |
If the answer is “no” or “maybe later,” do not encode it as production structure. Keep the design independent: current consumers, current domain language, current behavior.
Bad tests prove generated structure exists:
expect(config.validationRules).toBeDefined()
expect(document.sections.length).toBeGreaterThan(0)
expect(Object.keys(response)).toContain("metadata")
Good tests drive the real surface:
const result = validateCheckout({ paymentMethod: "expired-card" })
expect(result.canSubmit).toBe(false)
expect(result.errors).toContain("payment-method-expired")
Static text checks are acceptable only when the exact text is the product surface or compatibility contract.
| Rationalization | Reality |
|---|---|
| "The request mentioned this field/name." | User wording is input, not the domain model. |
| "This keeps us future-proof." | Future-proofing without a current consumer is speculative generality. |
| "The structure enforces consistency." | Consistent unused structure is still unused structure. |
| "The tests cover every requested item." | Shape coverage is not behavioral confidence. |
| "The deadline requires proving completeness." | Completeness means the system works through its surface, not that every requested heading or field exists. |
| "It documents intent." | Documentation belongs in docs/comments unless the program consumes it. |
| "It is harmless." | Extra schema fields, fixtures, tests, and names create drift and maintenance cost. |
| "It is a public or internal contract." | Keep it only if a current consumer exists; otherwise it is speculative contract design. |
| "It will support future behavior." | Write the behavior first, then the schema/test that protects it. Future scaffolding is still future-proofing. |
| "It helps observability or debugging." | Observability data must be emitted, queried, or displayed. Undisplayed metadata is not observability. |
When a red flag appears, stop and re-enumerate: what real runtime behavior is this artifact supposed to serve?
Use when removing dead code, renaming symbols, or refactoring — any change with no external consumers. Triggers on deprecating dead code, wrapper shims, compatibility aliases, TODO-future-cleanup, or refactors that patch structure instead of simplifying.
Use when configuring custom providers for OpenCode.
Use when writing new React components that involve state derived from props, event-driven side effects, or external subscriptions. Also use when auditing existing code for unnecessary useEffect calls, reviewing useEffect-heavy components, or refactoring to eliminate cascading renders. Applies to React 18+ codebases.
Use when about to make git commits, when tempted to bundle unrelated changes behind a single message, or when commit history needs to support git bisect, revert, and cherry-pick workflows. Also use when reviewing a branch before creating a PR. If you are writing a plan, specify that the executor must load this skill before start working.
Use when configuring or enhancing oxlint rules for a JavaScript/TypeScript project, when deciding which lint rules to enable beyond the default correctness category, or when evaluating whether a lint rule's autofix status and noise level make it worth enabling. Also use when bulk-enabling pedantic or style categories has produced excessive noise.
Use when a user provides examples prefixed by "for example", "such as", "e.g.", "like", or ends a list with "etc." / "and so on". For architecture/design tasks, abstract first to identify the concept, then enumerate. For research/clarification tasks, enumerate first — the concept organizes the output but the list is the deliverable.