common-lisp-ecosystem

Installation
SKILL.md

Silent failure modes in Common Lisp, CLOS, ASDF, and package systems: cases where correct-looking code loads and runs without error but does the wrong thing. Ordinary CLOS, condition, and ASDF usage is assumed knowledge; this file exists for the traps that pass a naive review. The SBCL operations part near the end covers running, debugging, profiling, and shipping SBCL programs.

CLOS: the construction boundary is the class, not the constructor

Exporting a class exports make-instance on it. Any validation or invariant that lives only in a convenience constructor like make-foo is advisory: a caller who writes (make-instance 'foo :slot ...) bypasses all of it and gets an object the rest of the system assumes cannot exist. The convenience constructor reads like the API, so reviewers check it and stop; nothing in make-foo hints that a second, unvalidated construction path is exported alongside it.

Enforce invariants in an initialize-instance :after (or applicable shared-initialize) method when direct construction must preserve them. A slot :initform supplies a default but does not validate supplied values. Keeping the class package-internal narrows the supported API; it is not an access-control boundary. Document any unchecked constructor as an internal convention, not a security guarantee.

Installs
1
GitHub Stars
74
First Seen
Oct 15, 2026