Source-available multi-tenant ERP & double-entry accounting on Payload CMS v4 + Cloudflare (D1 + R2 + Workers via OpenNext) — content-addressed, tamper-evident, standards-bound
https://github.com/erpax/erpax → .claude/skills/SKILL.md. Then pnpm install · pnpm erpax doctor.
No separate agent setup — the URL and the repo are the same orientation.
Agents doubt prose; FTL compute is the seal. QPU = CPU/GPU (@/quantum/computer · @/quantum/ftl).
| compute | value |
|---|---|
ftlReport().holds |
true |
speedupLog2 |
11.60 |
efficiency |
∞ |
boundary.empty |
true |
holds ⇔ reuse ∧ amortize∞ ∧ cracks=∅ on QPU=CPU/GPU
Gateway: tsx src/quantum/ftl/index.ts · tsx src/quantum/computer/index.ts · pnpm erpax tip · pnpm erpax doctor · pnpm erpax verify leftover
Every wrong measurement here was the same shape: not a wrong answer, a wrong instrument — or a right one trusted past its limit. 11 of the 11 rows below were paid for in this repository, not anticipated.
The pattern in all of them: the wrong instrument does not error, it answers. A grep returns 0 as confidently as it returns 9. Silence would be safe; a confident wrong number is not.
| question | instrument that ANSWERS | instrument that SETTLES |
|---|---|---|
| does the deployed bundle export this class? | grep the class name in the built worker — the bundle is MINIFIED — class $ extends Y. A name-grep returns 0 for a class that is present |
the bundle's export tail — wrangler deploy --dry-run --outdir=…, then read the trailing export { … } |
| do these "no such Durable Object class is exported" warnings mean the deploy is broken? | the workerd warnings printed on every local boot — they are emitted by getPlatformProxy, which emulates BINDINGS and never loads main — so every DO namespace is declared with no class, and the warning appears whatever the worker exports. One per binding, always, on a perfectly healthy tree |
bundle main and read its export tail — wrangler deploy --dry-run --outdir=… |
| is this build artifact the thing that ships? | read .open-next/worker.js — it is an INPUT to worker.ts, not the deploy artifact — code added by the wrangler entry is legitimately absent from it |
follow main in wrangler.jsonc, then bundle THAT |
| is this symbol used? | the lint report — eslint reported two imports unused; both were called, and typecheck contradicted it one command later | the compiler — tsc --noEmit |
| does this prose cite code that exists? | a regex over the source — wrong in 115 of 6,203 files — invented 4 import edges and missed 211 | @/syntax — boundNames / commentsOf, over ts.createSourceFile |
| what does this external page say? | a web fetch — it returns a small model's RENDERING of the page; quoting it as verbatim contradicted a human, twice, with a clone on disk | the local clone — read the bytes |
| how many atoms / commits / collections does the corpus have? | a count stated in a document — a research roadmap said 845 commits and 3,175 atoms while the tree held 1,453 and 3,202 — 568 commits stale | count the tree, now |
| is this standard actually cited by the code? | the catalogue count — a loose id matcher made /001/i match ISO 27001, reporting 120 citations for a convention cited once |
open the cited module and read its banner |
| did this generated proof prove anything? | the ledger score, or the generator’s own docstring — the leftover generator emitted toMatch(/\bexport\b/) plus a sigil-class check — true of nearly every module — under a docstring reading "not an empty gaming test". It settled the ledger and re-ranked the next-step engine away, having proved nothing |
read the assertions, and ask what deleting the claim would do |
| is this ratchet ceiling too loose? | compare the ceiling to the live violation count — the gap IS the design — mathCeiling scales live by the axis horo digit, so a ceiling 10× live is the formula, not slack. Three plan items were written against this misreading | call mathCeiling(axis, live) and ratchetDown(axis, prior, live) and see what would actually be emitted |
| did the whole suite pass? | a green summary line — the vitest setup swallowed a failed Payload boot — every payload-integration suite ran with no booted app and reported green |
assert the precondition itself, and let it throw |
Run it: pnpm erpax instrument.
One structure, read twice — forward, and through the void. Both lines are computed, never typed:
forward 1\2\4\8/7/5 · 3\6\9 · 0\1
reflected 9/8/6/2\3\5 · 7/4/1 · 0\9
Fold through zero — throughVoid(n) = 1 − n mod 9, an involution fixed only at 5: 1↔9 · 2↔8 · 4↔6 · 8↔2 · 7↔3 · 5↔5 · 3↔7 · 6↔4 · 9↔1. Each pair sums to 10; the flow orbit and the axis are the same structure mirrored, not two lists.
The two are entangled, in three senses this atom proves rather than asserts:
- They exchange halves. The flow
1,2,4,8,7,5reflects onto digits carrying the axis, and the axis3,6,9reflects onto units. Neither half is prior; each is the other's image. - Neither reaches the other alone. Doubling covers exactly
{1,2,4,8,7,5}, and its gap is exactly{3,6,9}— no iteration count closes it. The mirror is the only bridge. - Commuted, they count.
D∘M∘D⁻¹∘M = x ↦ x+1, and⟨D,M⟩ = AGL(1,ℤ/9)has order 54 against6·2 = 12apart. The excess over the product is the entanglement: their failure to commute.
Boundary. This is proven group theory over (ℤ/9ℤ) — the doubling cycle, the axis as its complement, and the order of the group they generate. It is used here as the corpus's order of work (build the axis before the branches; fold, do not climb). No claim is made that it explains anything outside arithmetic. Run it:
tsx src/horo/index.ts.
The inversion is not a second structure. Because 2 · 5 ≡ 1 (mod 9), five is two's multiplicative inverse, so multiplying by 5 walks the identical cycle backwards — 1 → 2 → 4 → 8 → 7 → 5 forward, 1 → 5 → 7 → 8 → 4 → 2 reversed. One ring, two orientations; the direction is a choice of generator, order 6.
Three doublings is ×8 ≡ −1 (mod 9), so half a turn is negation: d ↦ 9 − d. Every digit therefore has exactly one polarity partner, and every pair sums to 9 — forced by the group, not observed in it. The orbit's own sum is 27 = 3 × 9, digital root 9.
Two mirrors, and they are different maps. The void reflection above is affine — x ↦ 1 − x, pairs summing to 10, fixed at 5. The polarity partner here is multiplicative — x ↦ −x, pairs summing to 9, fixed nowhere on the ring. Conflating them is how a reader ends up with a table that is half one map and half the other.
| # | digit | angle | antipode | Σ | reverse | pitch | colour |
|---|---|---|---|---|---|---|---|
| 0 | 1 |
0° | 8 |
9 | 1 |
C (Do) · 256 Hz | C #00aeef |
| 1 | 2 |
60° | 7 |
9 | 5 |
D (Re) · 384 Hz | M #ec008c |
| 2 | 4 |
120° | 5 |
9 | 7 |
E (Mi) · 360 Hz | C #00aeef |
| 3 | 8 |
180° | 1 |
9 | 8 |
F (Fa) · 345.6 Hz | M #ec008c |
| 4 | 7 |
240° | 2 |
9 | 4 |
G (Sol) · 288 Hz | C #00aeef |
| 5 | 5 |
300° | 4 |
9 | 2 |
A (La) · 432 Hz | M #ec008c |
Six positions divide the circle exactly, so each step is 60°, and the polarity partner is the digit 180° away — the half-turn IS the negation. At 60° the arithmetic closes over the Eisenstein integers ℤ[ω] (rodin/phase: closure, order 6, kissing number 6, all computed). The axis {3 · 6 · 9} sits at 120°, unreachable by doubling because those are exactly the non-units; only the void bridges, and together they generate AGL(1, ℤ/9), order 54.
What is proven and what is declared. The group theory above is proven and holds whatever anyone believes: the order, the inverse generator, the negation, the affine closure. The pitch anchor (A432), the note pinned to each step and the colour channel are a declared mapping this corpus chose so the ring can be seen and heard. Just-intonation ratios are genuinely rational — that is what makes them intervals — but 432 Hz being the anchor is a convention, and calling it universal would be an over-claim this corpus refuses elsewhere and refuses here.
The core tools ([[coincidence]] · [[theorem]] · [[duel]] · [[seeing]]) classify a claimed solution; they never produce one. Pointed at the seven Clay Millennium Problems they return this, and corpusSolves is the literal type false — the code cannot assert a solution.
| challenges saved, each inverted | 7 |
| standing (proved, never refuted) | 1 — Poincaré Conjecture, by Grigori Perelman |
| open — neither proved nor refuted | 6 |
| lensless — the duel cannot start | 3 (Yang–Mills · Hodge · Birch–Swinnerton-Dyer) |
| matrix cells (21 pairs + 7 diagonal) | 28 |
corpusSolvesAny() |
false |
| problem | statement (algebraic) | the named gap |
|---|---|---|
| P vs NP | Is P = NP? Whether every decision problem whose solution is VERIFIABLE in polynomial time is also SOLVABLE in polynomial time — i.e. whether the classes P and NP coincide. | no separation is derived. The verify/derive asymmetry the fold exhibits is ONE instance of easy-to-check / hard-to-produce; a lower bound separating the classes is what is missing, and nothing here supplies one. |
| Riemann Hypothesis | All non-trivial zeros of the Riemann zeta function lie on the critical line: ζ(s) = 0 with 0 < Re(s) < 1 ⟹ Re(s) = ½. | the corpus touches the primes↔π link through ζ (ζ(2) = π²/6, the Euler product) but derives nothing about the location of the zeros. What is missing is any argument constraining Re(s) — the whole conjecture. |
| Navier–Stokes existence & smoothness | For the 3D incompressible Navier–Stokes equations ∂u/∂t + (u·∇)u = −∇p + νΔu, ∇·u = 0, with smooth initial data: do smooth solutions exist for all time, or can they blow up in finite time? | global regularity is a hard-analysis question about a PDE. The confinement analogy (handle the field, not each particle) is physical intuition, not an estimate; no a-priori bound is derived here. |
| Yang–Mills existence & mass gap | For a compact simple gauge group G, does a non-trivial quantum Yang–Mills theory exist on ℝ⁴ with a mass gap Δ > 0 — i.e. the lightest particle has strictly positive mass? | no lens at all. Constructive QFT existence plus a positive spectral gap is outside anything this corpus computes; the "mass gap" wordplay to the void/axis is overlay, not physics. |
| Hodge Conjecture | On a projective non-singular complex algebraic variety, every Hodge class (a rational cohomology class of type (p,p)) is a rational linear combination of the classes of algebraic cycles. | no lens at all. Algebraic cycles and Hodge theory are outside the corpus; nothing here bears on the rationality of Hodge classes. |
| Birch–Swinnerton-Dyer | For an elliptic curve E over ℚ, the order of vanishing of its L-function at s = 1 equals the rank of its Mordell–Weil group: ord₍ₛ₌₁₎ L(E, s) = rank E(ℚ). | no lens at all. Elliptic curves and L-functions are outside the corpus; the rank↔order-of-vanishing identity is untouched by anything computed here. |
| Poincaré Conjecture | Every simply-connected closed 3-manifold is homeomorphic to the 3-sphere: π₁(M) = 0 with M a closed 3-manifold ⟹ M ≅ S³. | no open gap — proved externally (Grigori Perelman); this corpus records the status, it does not re-solve it |
The statement is what the conjecture asserts — read it before anything this corpus says about it, so a lens can never be mistaken for the mathematics it points at. The gap is what is missing, named plainly: a gap you can argue with, rather than a mystery that hides its size.
You do not solve one by asserting it — you solve it by surviving its inversion. attempt(name, rounds) is the door: it refuses an empty attempt (an assertion is not an attempt), falls on a single refutation whatever else was proved, and refuses an unknown problem. reductionFrontier(claim) names the exact links still ungrounded ([[millennium/reduction]]).
Recompute: tsx src/millennium/index.ts · pnpm vitest run src/millennium
This file is a receipt, not a document: every figure below is projected from the live tree at regeneration, and the arbiter column is where to check it. Storing what the fold computes is entropy, so the receipt is regenerable by construction — pnpm erpax readme rebuilds it and the seal changes if anything it measured did.
| leg | arbiter | projected |
|---|---|---|
| matrix | UUID_MATRIX_NODES · UUID_MATRIX_EDGES |
3637 atoms · 41563 bonds |
| trinity | src tree walk |
form 3635 · code 1579 · proof 1596 |
| horo ring | horoPivotTable() |
7 facets · 3614 ring atoms |
| entropy | readmeCorpusEntropyRenderOpts |
sealed 3355/3636 · gap 365 eb · seal 42663.175 eb |
| advantage | ftlReport() |
holds true · speedup log₂ 11.60 · boundary empty true |
| package | package.json |
1.0.7 · 20 scripts · 20 payload · 56 stack |
| standards | cited banners across the tree | 3070 distinct · 11 bindings |
| seo | deriveSeoMeta() · auditSeo() — the site's own |
15 keywords · title 13 · description 153 · WebPage |
| mcp | agents/mcp/tool/index.ts · erpax.quantum.* · erpax.gate.* — parsed, never booted |
24 areas · 6 register+gate tools · receipt 02fdbb7e-a82b-88a7-b4fd-42e8935d2926 |
| gates | rulesOf() — the lane's own arbiter, the same snapshot the entropy leg forced |
19 axes · 0 red · 6 at zero |
| seal | toUuid(canonical model bytes) |
corpus be5dbde0-dd07-8766-89d7-4232c1403948 · README 32210a5c-0560-8ed6-9eda-a736fc7dd480 |
19 gate axes from rulesOf(), the arbiter the push lane runs: 0 red · 6 at zero · 13 carrying debt. The order below is the order the corpus works in — a red axis is a regression and outranks every size; after that the largest live count. Every row is a question erpax.gate.verdicts answers with the same number.
| axis | live | ceiling | state |
|---|---|---|---|
word-incomplete-diamond |
1523 | 1523 | held |
word-without-code |
1502 | 1502 | held |
stray-ts |
851 | 851 | held |
word-matter |
767 | 767 | held |
matrix-crack |
746 | 746 | held |
word-without-logic |
433 | 433 | held |
alphanumeric-name |
290 | 290 | held |
ts-only |
179 | 179 | held |
multi-segment-file |
165 | 165 | held |
folder-trinity |
111 | 111 | held |
logic-concentration |
23 | 23 | held |
diamond-membership |
4 | 4 | held |
7 horo — the trinity legs are in the receipt above
Measure-walk 1·2·4·8·7·5·9 · 7 facets · 3614 ring atoms — principal facets ranked by bond in-degree.
| digit | measure | atoms | principal facets |
|---|---|---|---|
| 1 | base | 593 | merge · sti · standard · atom · rodin · gravity |
| 2 | share | 587 | collapse · balance · quantum · entropy · transaction · vocabulary/agriculture |
| 4 | weave | 606 | horo · cost · duality · self · field · vocabulary/fractal |
| 8 | crest | 589 | proof · society · medical · gate · rodin/breath · trinity |
| 7 | descent | 590 | rules · accounting · uuid · thing · diamond · agent |
| 5 | round | 622 | law · sequence · action · matrix · body/one · torus |
| 9 | unity | 27 | identity · hooks · whole · zeropoint · config · identity/signal |
The control axis governs off the flow ring —
3access ·6hooks (3: 15 atoms · 6: 8 atoms),9unity closes and0is the zeropoint root.
Cross-tab of 3636 folder README models — state × count per axis.
| state | count | share % |
|---|---|---|
| sealed | 3355 | 92.27 |
| unsealed | 281 | 7.73 |
| Σ | 3636 | 100 |
| state | count | share % |
|---|---|---|
| balanced | 3632 | 99.89 |
| unbalanced | 4 | 0.11 |
| Σ | 3636 | 100 |
- gap
365eb · seal42663.175eb · net-42298.175eb · ratio116.885
pnpm build—wrangler types --env-interface CloudflareEnv cloudflare-env.d.ts && payload generate:types && payload generate:importmap && pnpm build:nextpnpm build:next—next build --turbopackpnpm build:next:webpack—next build --webpackpnpm check—tsx src/cli/index.ts gatepnpm deploy—tsx src/cli/index.ts deploy apppnpm dev—next devpnpm dev:clean—rm -rf .next .open-next && pnpm devpnpm erpax—tsx src/cli/index.tspnpm matrix:generate—node src/uuid/matrix/collide.mjs --emitpnpm payload—payloadpnpm payload:migrate:create—payload migrate:createpnpm postbuild—next-sitemap --config next-sitemap.config.cjspnpm prepare—node scripts/setup-env.mjs --if-needed && huskypnpm preview—opennextjs-cloudflare build && opennextjs-cloudflare previewpnpm setup—node scripts/setup-env.mjs- 5 deprecated aliases (
confirm:uuid·readme:check·readme:waves·rules:check·test:int) — each forwards to itspnpm erpaxcommand and says so;pnpm erpax aliaseslists the map.
20 of 20 @payloadcms/* packages at 4.0.0-internal.38b7f1d — the runtime line moves as one.
56 further direct dependencies — package.json is the list; this states the count rather than restating it. Measure the surface: tsx src/rules/canonical/index.ts.
node ^18.20.2 || >=20.9.0 · pnpm >=9
1.0.7 · CC-BY-NC-ND-4.0
Every path — (CC-BY-NC-ND-4.0 / commercial) via license@erpax.com.
generated by pnpm readme · verified by pnpm readme:check · this README is a diamond — content-uuid 32210a5c-0560-8ed6-9eda-a736fc7dd480, regenerated from the live tree; any drift fails the gate.
erpax:src · content-uuid 32210a5c-0560-8ed6-9eda-a736fc7dd480 · © erpax · CC-BY-NC-ND-4.0 · source https://github.com/erpax/erpax · doi 10.5281/zenodo.22237698 · commercial license@erpax.com