skills.by true||false
LibraryHow to run

A product of true||false

Every item lists its source, license and what we changed.

library
skillengineeringtrueorfalse

package-choice

Runs a dependency decision tree and recommends stdlib, an existing dep, a default pick or a small local function.

looks for

  • a new entry in package.json / requirements / Cargo.toml
  • two libraries that overlap (two date libs, two HTTP clients)
  • a heavy package used for one function
  • an unmaintained, unlicensed or copyleft package

outputs

  • → a recommendation (no dep / existing dep / named package + version)
  • → a short scorecard (size, license, last release, downloads, deps, scripts)
drawing flowchart…
flow.mmd

SKILL.md

Package choice

Every dependency is code you ship, audit and upgrade forever. Add one only when it clearly beats writing and owning the code yourself.

Decision tree

  1. Is the need real now? Not "might need later". No → stop.
  2. Does the platform already do it? (fetch, URL, Intl, structuredClone, crypto.randomUUID, AbortController, Array.prototype.toSorted, CSS :has/container queries, <dialog>.) Yes → use it.
  3. Does an existing dependency already do it? Yes → use that. Never two libraries for one job.
  4. Is it under ~30 lines you understand and can test? Yes → write it. (Debounce, clamp, a slugify, a tiny event emitter.)
  5. Otherwise pick a package and score it:
CheckPassRed flag
LicenseMIT, Apache-2.0, BSD, ISCnone, unclear, AGPL/GPL in a closed product, custom
Maintenancerelease or commit within ~12 months, issues answeredarchived, single maintainer gone quiet
Adoptionwidely used, used by projects you trustbrand new with no users
Sizesmall, tree-shakeable, ESMpulls in a large transitive tree
Install scriptsnonepostinstall that downloads or runs code
Typesbuilt-in TS typesnone and no @types
Securityno open critical advisoriesrepeated advisories, typo-squat-looking name
Fitdoes one job wella framework for a one-function need
  1. Pin and record. Exact version in the lockfile; one line in the PR or an ADR saying why this package and what was rejected.

Need → default pick (web / TypeScript)

See references/defaults.md for the full table. Short version:

NeedDefault
Schema validationzod
Datesnative Intl / Temporal; date-fns if you need more
Server state / fetching (React)TanStack Query
Client state (small)zustand
Forms (React)react-hook-form + zod
Iconslucide-react
Unit testsvitest
E2E testsPlaywright
Animation (React)motion
Markdownreact-markdown + remark-gfm
Zip in browserfflate
IDscrypto.randomUUID()
Class namesclsx (+ tailwind-merge with Tailwind)

Removing is a win

When you touch an area, check for dependencies you can drop (replaced by the platform, used once, duplicated). Note the bundle-size saving.

Customize for your project

  • {{LANGUAGE}} / {{PACKAGE_MANAGER}} and your own default-pick table.
  • Licenses your company forbids ({{FORBIDDEN_LICENSES}}).
  • The audit command you run in CI (e.g. npm audit --omit=dev).

audit trail

source
original
author
trueorfalse.dev
license
MIT
imported
2026-11-13
verified
2026-11-13
changes
Written new for the catalog.
privacy scan
pass
scripts
none
in the zip
2 files

works with

Claude, Codex, ChatGPT

pairs with

  • personatrueorfalse

    tech-lead

    Locks contracts and architecture decisions before specialists build, and unblocks them when the design is unclear.

    • a change that crosses module or service boundaries
    • a new or changed endpoint, event or table
    • a proposed new dependency
    Claude · Codex · ChatGPT
  • personatrueorfalse

    engineer-mindset

    Applies a clarify → smallest change → verify → explain loop so changes are small, correct and honest.

    • a vague or underspecified request
    • urge to refactor, generalize or add a dependency
    • a fix that touches many files
    Claude · Codex · ChatGPT
  • skilltrueorfalse

    adr

    Captures one decision with its context, rejected options and consequences in a numbered, immutable record.

    • a technology or vendor choice
    • a change that is hard to reverse
    • a decision made in chat that nobody wrote down
    Claude · Codex · ChatGPT
  • ruletrueorfalse

    agent-directives

    Gives every agent the same baseline rules on scope, reuse, reading order and verification.

    • a new agent or session starting in the repo
    • blind repo-wide scans
    • new dependencies added without a check
    Claude · Codex · ChatGPT