The 561-group package invariant catalog. These are the rules that govern every package in this workspace.
Findings are charges, not booleans:
+ potential (conforms)
! active (violation)
# stable (held under law-allow)
· absurd (no evidence)
| ID | severity | layers | claim | way |
|---|---|---|---|---|
| M1 | error | lib, apps, services, sites | name is @561-group/<dir> (or @emsenn/<dir>) and matches the directory exactly | the name is a morphism |
| M2 | error | lib, apps, services, sites | type:module, private:true, sideEffects:false | programs are evidence |
| M3 | error | lib, apps, services, sites | exports map present with '.' and './package.json'; the map IS the boundary | the name is a morphism |
| M4 | error | lib, apps, services, sites | scripts include check and test (verify for lib) | hygiene |
| M5 | warning | lib, apps, services, sites | workspace deps use workspace:*; external runtime deps in lib need human sign-off | one descent, many worlds |
| M6 | info | lib, apps, services, sites | domain packages parse as <thing>-<form>: lib/<thing>-topology | lib/<thing>-codecs[-<standard>], apps/<thing>-computer, services/<thing>-tics (trace information & computing service; memetics = meme-tics), with -wire/-room and kin as they are specced; utility packages may diverge with cause | the name is a morphism |
| L1 | error | lib | lib depends only on lib (no lib→service/app/site inversions) | one descent, many worlds |
| L2 | error | apps | apps depend on lib only | one descent, many worlds |
| L3 | error | services, sites | services depend on lib + apps (a <thing>-tics is its <thing>-computer made available; the human, 2026-06-11); sites depend on lib + services | one descent, many worlds |
| L4 | error | lib | codec packages (*-codecs*) have zero runtime dependencies | one descent, many worlds |
| L5 | warning | lib, apps, services, sites | direct dependency count over 8 is the god-package smell | one descent, many worlds |
| S1 | error | lib, apps, services, sites | no wall-clock as ordering (clockDefault guard) | time only accumulates |
| S2 | error | lib, apps, services, sites | no destructive deletes; retraction is assertion (destructiveDelete guard) | time only accumulates |
| S3 | error | lib, apps, services, sites | no JSON.stringify as identity; canonical bytes only (stringifyIdentity guard) | the name is a morphism |
| S4 | error | lib, apps, services, sites | no ungated admission (ungatedAdmit guard) | no witness, no world |
| S5 | warning | lib, apps, services, sites | no domain-outcome throws; exceptions are for malformed shapes only (domainThrow guard) | contradiction is load-bearing |
| S6 | warning | services | no wall-clock interval as a service's primary tick; a tick is a witness-driven advance | time only accumulates |
| A1 | error | lib | lib root exports no boolean-returning is*/has*/can* judgments; judgments carry witness or obstruction | contradiction is load-bearing |
| A3 | error | lib, apps, services, sites | kind strings are Three-Dots-and-a-Dash conformant (lowercase atoms joined by . : - ; _ only as declared escape) | the name is a morphism |
| A4 | warning | lib | carriers frozen; no exported mutable state | everything is a trace |
| D1 | warning | lib, apps, services, sites | README.md exists and is substantive (what it IS, contract, quick-start) | documentation |
Total: 21 invariants