Originality
Original does not mean unprecedented; it means knowing what exists and being
deliberate about differing from it. The expensive mistake is the fourth in-house
implementation of something the stdlib has had since 2019 — written confidently,
because nobody looked.
This is library-first extended past the repo boundary. Ten minutes here routinely
deletes a week.
1. Search inward first — the cheapest win
.claude/tools/codemap.sh # where a symbol already lives
.claude/tools/dupes.sh # blocks already repeated
.claude/tools/facts.sh # what the project already scripts
.claude/tools/scripts.sh list # the vetted external script registry
rg -i '<the concept, and its synonyms>'
Search behaviour, not your chosen name. The existing implementation is called
normalize, you were going to call it sanitize, and that is why you did not find it.
Try three names.
Check the dependency manifest too. The project very likely already pulls in a date
library, a validator, a fetch wrapper, a retry helper — rung 4 of
rules/minimalism-ladder.md.
2. Search outward — the ladder, in order
- The standard library. Check it properly.
itertools, slices, Intl,
<algorithm>, functools, coreutils. Most "utility" code is a stdlib call with a
different name.
- The platform. The OS, the database, the HTTP layer, the runtime. A unique index
beats an application-level duplicate check.
cron beats a scheduler.
- The ecosystem.
WebSearch for the problem in the language's own vocabulary. Read
the top issue list, not just the README.
3. Judge what you found — on evidence
For each real candidate:
| Question |
Why it decides |
| Maintained? Last release, open-issue trend |
An abandoned dependency is future work you have not scheduled |
| What does it pull in? |
A transitive tree is the real cost (rules/quality-bar.md layer 5) |
| Licence compatible? |
Not optional, and easy to check |
| How much of it do you need? |
Using 5% of a large library is a rung-5 helper wearing a dependency |
| How hard is it to remove? |
A library at the core is a decision; at the edge it is a choice |
4. Decide, and say which
Exactly one of:
- Reuse — it does the job. Use it. Say which version and why it is safe.
- Wrap — it does the job behind an interface you control, so swapping it later is
cheap. Correct when it is load-bearing but replaceable.
- Borrow the idea — the approach is right, the dependency is not (too big, wrong
licence, unmaintained). Implement the idea, credit the source, and say what you
left out.
- Build — nothing fits, and you can name what is genuinely different about this
case. This is the answer that needs the most evidence, not the least.
"Build" without the search is not originality, it is ignorance with good posture.
"Reuse" without reading the code is a supply-chain decision made by accident.
5. Be honest about what is actually new
When something genuinely is novel here, say what and why — the constraint nobody else
had, the combination nobody tried. And when it is not, say that too. A wrapper described
as an innovation costs you credibility you will want later.
Report
- Searched: the terms used, inward and outward. Someone will re-run them.
- Found: the candidates, with maintenance and dependency facts.
- Decision: reuse / wrap / borrow / build, in one line, with the reason.
- If build: what is different about this case that made every candidate wrong.
- If borrow: the source, credited, and what you deliberately left out.
1---2name: originality3description: Prior-art pass before writing something new — find what already does this, in the repo and outside it, then say plainly whether to reuse, wrap, or build and why. Auto-triggers on: "has this been done", "is there a library for", "should I build this", "prior art", "am I reinventing", "write a X from scratch"4---56# Originality78Original does not mean unprecedented; it means *knowing what exists and being9deliberate about differing from it*. The expensive mistake is the fourth in-house10implementation of something the stdlib has had since 2019 — written confidently,11because nobody looked.1213This is `library-first` extended past the repo boundary. Ten minutes here routinely14deletes a week.1516## 1. Search inward first — the cheapest win1718```sh19.claude/tools/codemap.sh # where a symbol already lives20.claude/tools/dupes.sh # blocks already repeated21.claude/tools/facts.sh # what the project already scripts22.claude/tools/scripts.sh list # the vetted external script registry23rg -i '<the concept, and its synonyms>'24```2526Search **behaviour, not your chosen name**. The existing implementation is called27`normalize`, you were going to call it `sanitize`, and that is why you did not find it.28Try three names.2930Check the dependency manifest too. The project very likely already pulls in a date31library, a validator, a fetch wrapper, a retry helper — rung 4 of32`rules/minimalism-ladder.md`.3334## 2. Search outward — the ladder, in order35361. **The standard library.** Check it properly. `itertools`, `slices`, `Intl`,37 `<algorithm>`, `functools`, coreutils. Most "utility" code is a stdlib call with a38 different name.392. **The platform.** The OS, the database, the HTTP layer, the runtime. A unique index40 beats an application-level duplicate check. `cron` beats a scheduler.413. **The ecosystem.** `WebSearch` for the problem in the language's own vocabulary. Read42 the top issue list, not just the README.4344## 3. Judge what you found — on evidence4546For each real candidate:4748| Question | Why it decides |49|---|---|50| Maintained? Last release, open-issue trend | An abandoned dependency is future work you have not scheduled |51| What does it pull in? | A transitive tree is the real cost (`rules/quality-bar.md` layer 5) |52| Licence compatible? | Not optional, and easy to check |53| How much of it do you need? | Using 5% of a large library is a rung-5 helper wearing a dependency |54| How hard is it to remove? | A library at the core is a decision; at the edge it is a choice |5556## 4. Decide, and say which5758Exactly one of:5960- **Reuse** — it does the job. Use it. Say which version and why it is safe.61- **Wrap** — it does the job behind an interface you control, so swapping it later is62 cheap. Correct when it is load-bearing but replaceable.63- **Borrow the idea** — the approach is right, the dependency is not (too big, wrong64 licence, unmaintained). Implement the idea, **credit the source**, and say what you65 left out.66- **Build** — nothing fits, and you can name what is genuinely different about this67 case. This is the answer that needs the most evidence, not the least.6869"Build" without the search is not originality, it is ignorance with good posture.70"Reuse" without reading the code is a supply-chain decision made by accident.7172## 5. Be honest about what is actually new7374When something genuinely is novel here, say what and why — the constraint nobody else75had, the combination nobody tried. And when it is not, say that too. A wrapper described76as an innovation costs you credibility you will want later.7778## Report7980- **Searched:** the terms used, inward and outward. Someone will re-run them.81- **Found:** the candidates, with maintenance and dependency facts.82- **Decision:** reuse / wrap / borrow / build, in one line, with the reason.83- **If build:** what is different about this case that made every candidate wrong.84- **If borrow:** the source, credited, and what you deliberately left out.