# CURRENT SYSTEM INVENTORY

**BB2G Election Command**
Snapshot taken 2026-08-15, 08:29 EDT, on this machine.
Node v24.15.0.

This is the first of the four documents the blueprint requires before any module
is called complete. Its job is narrow and unglamorous: **write down what actually
exists**, not what is planned.

The blueprint is explicit about why this comes first:

> "What the public record does not establish is that all 516 projects share the
> same business logic, database schema, authentication stack, or most-current
> source branch. That requires an actual repository-level audit. I therefore
> would not let Claude begin by rewriting the applications. Its first job should
> be inventory, version reconciliation, characterization testing, and
> identification of the code that really is canonical."

Everything below was measured. Commands are quoted with the output they actually
produced. Where something could not be measured, it says so.

---

## 1 · What this repository contains right now

`/Users/americasfuture/election-command`

```
$ git -C /Users/americasfuture/election-command status --short --branch
## No commits yet on main
?? assets/
?? brand/
?? media/
?? scripts/
?? test/

$ git -C /Users/americasfuture/election-command ls-files | wc -l
0

$ find /Users/americasfuture/election-command -type f -not -path '*/.git/*' | wc -l
32
```

**Nothing in this repository is committed yet.** The git repository is
initialised on `main` with zero commits and zero tracked files. Every file listed
below is untracked working-tree state.

### Source files that carry logic

```
$ wc -l assets/*.mjs test/*.mjs
     283 assets/authority.mjs
     386 assets/crypto.mjs
     709 assets/lockchain.mjs
     227 test/engine.mjs
     173 test/gate-authority.mjs
    1778 total
```

| File | What it is |
|---|---|
| `assets/crypto.mjs` | Portable primitives — bytes/hex/base64url, SHA-256/512, CanonicalJSON, Ed25519 (RFC 8032, pure BigInt), Merkle, constant-time hex compare, ULID. Lifted from `ballot-trail`. See `VERSION_RECONCILIATION.md`. |
| `assets/lockchain.mjs` | LockChain Core: canonical event, four integrity layers, the DATA→…→CONCLUSION evidence ladder, append-only `Ledger`, signed checkpoints, four-layer `verify()`. |
| `assets/authority.mjs` | Jurisdiction Rules Engine + Election Knowledge Currency Engine + the Copilot abstention rule. |
| `test/engine.mjs` | Gate over LockChain Core. 18 checks, 8 of them poison runs. |
| `test/gate-authority.mjs` | Gate over authority resolution, abstention and source currency. 14 checks. |

### Everything else on disk

`assets/house.css`, `assets/command.css`, `assets/motion.css`, `assets/motion.js`
(house style and the Lure motion system), `brand/` (6 icon/mark files),
`media/candidates.json`, `media/pb-picks.json`, `media/src/`, and 14 build/media
scripts in `scripts/`.

`pages/` exists and is **empty**. There is no built site in this repository at
the time of this snapshot.

### The two gates, run

```
$ node test/engine.mjs
LOCKCHAIN CORE
  ok   a clean ledger passes all four layers
  ok   POISON layer 1 · an edited event breaks RECORD integrity only
  ok   POISON layer 2 · a removed event breaks SEQUENCE integrity
  ok   POISON layer 2 · a reordered pair breaks SEQUENCE integrity
  ok   POISON layer 3 · an unregistered signer breaks SIGNER integrity
  ok   POISON layer 3 · a forged signature breaks SIGNER integrity
  ok   POISON layer 3 · THE DUPLICATE-LEAF COLLISION — a lied-about event_count is caught
  ok   POISON layer 4 · deleting a committed event breaks RETENTION integrity

DOCTRINE
  ok   a correction APPENDS and never edits the original
  ok   the Ledger exposes NO mutating method
  ok   a machine may not assert ALLEGATION, EVIDENCE, FINDING or CONCLUSION
  ok   a machine narrative using a conclusion word is REFUSED, and names the word
  ok   scanMachineText calibrates BOTH ways
  ok   a held sync state can never share a tone with a confirmed one
  ok   an event refuses to exist without an accountable actor
  ok   an inclusion proof verifies standalone against the signed root
  ok   describeLimits refuses the word "immutable" and states the truth boundary
  ok   a verification result never claims truth

18/18 passed
```

```
$ node test/gate-authority.mjs
AUTHORITY RESOLUTION
  ok   POISON A · a federal framework does NOT outrank controlling state law on PROCEDURE
  ok   POISON B · controlling state law does NOT make the framework irrelevant on CYBERSECURITY
  ok   the sort never uses issuer altitude — only specificity, then binding force
  ok   a superseded instrument is excluded and SAYS SO
  ok   an instrument not yet effective is excluded
  ok   an out-of-scope instrument does not leak across jurisdictions
  ok   resolution refuses to run without a jurisdiction

ABSTENTION
  ok   no controlling authority on a procedural question ⇒ the Copilot ABSTAINS
  ok   a RETRIEVED-but-unverified source ⇒ the Copilot still ABSTAINS
  ok   a good answer carries every required field and the "do not infer" guardrail

SOURCE CURRENCY
  ok   THE 2020-DEADLINE TRAP · a page that fetches fine can still be STALE per section
  ok   a successful fetch is RETRIEVED, never VERIFIED — only a named human promotes it
  ok   an old verification goes STALE on its own
  ok   certification counts are MEASUREMENTS with a timestamp, never constants

14/14 passed
```

### Uncomfortable truth: the repository was moving while it was being inventoried

At 08:24 EDT this directory also contained `build.mjs`, `package.json`,
`vercel.json`, `dist/`, `docs/`, `gates/`, `src/` and `tools/`. By 08:25 those
were gone; `assets/authority.mjs` and `test/gate-authority.mjs` appeared at
08:26–08:27. Other agents are writing this tree concurrently. **This inventory is
a snapshot at 08:29 EDT and will be stale the moment a build step runs.** Re-run
the commands above rather than trusting this page.

Two named consequences of that churn, both true at the time of the snapshot:

- `assets/crypto.mjs` and `assets/lockchain.mjs` reference gate files that do not
  exist here: `test/gate-provenance.mjs`, `test/gate-crypto.mjs`,
  `test/gate-boundary.mjs`, `test/gate-doctrine.mjs`, `test/gate-lockchain.mjs`.
  The checks those comments describe are, in fact, present inside
  `test/engine.mjs` — but the file names in the header comments are wrong, and a
  reader who goes looking for them will not find them.
- The Merkle section comment in `assets/crypto.mjs` still says `MBLTS-MERKLE-V1`
  three lines above the constant that now reads `BB2G-MERKLE-V1`. Stale comment,
  correct code.

Neither is a logic defect. Both are recorded because a document that only lists
the good news is not an inventory.

### Re-measurement seven minutes later, 08:36 EDT

The point above is not hypothetical. The same commands, run again at 08:36:

```
$ find /Users/americasfuture/election-command -type f -not -path '*/.git/*' | wc -l
86                        ← was 32 at 08:29

$ wc -l assets/*.mjs test/*.mjs
     283 assets/authority.mjs
     386 assets/crypto.mjs
     709 assets/lockchain.mjs
    1900 assets/registry.mjs       ← new, 08:31
     227 test/engine.mjs
     173 test/gate-authority.mjs
     243 test/gates.mjs            ← new, 08:36
    3921 total
```

Two things arrived that matter to the other three documents:

- **`assets/registry.mjs`** (1,900 lines, 122 KB) — the canonical module data:
  68 module records, 10 groups, 10 shared services, 11 completion dimensions,
  6 releases. `MODULE_REGISTRY.md` and `MODULE_COMPLETION_MATRIX.md` are both
  **generated from it** rather than hand-written, so those documents cannot
  drift from the data the application ships. Regenerate with
  `node scripts/docs-registry.mjs` and `node scripts/docs-matrix.mjs`; each doc
  prints the `sha256` of the `registry.mjs` it was generated from, so a stale
  document is detectable by comparing that line to
  `shasum -a 256 assets/registry.mjs`. That hash changed once during this
  session (`6a35b8cc…` → `b4a80c17…`) while the registry was still being
  written; both documents were regenerated against the later one.
- **`pages/`, which was empty at 08:29, now holds 9 page modules** —
  `index.mjs`, `verify.mjs`, `lockchain.mjs`, `layers.mjs`, `ladder.mjs`,
  `modules.mjs`, `authority.mjs`, `field.mjs`, `offline.mjs`. They had not been
  read, built or run at the time of this snapshot, and **no claim is made here
  about what they render.**
- **`test/gates.mjs`** (243 lines) appeared at 08:36. It had not been run when
  the gate output in §1 was recorded. The 18/18 and 14/14 results above are from
  `test/engine.mjs` and `test/gate-authority.mjs` only.

### The site gate, run at 08:38 — and it is red

`test/gates.mjs` was written by another agent minutes before this line and may
still be mid-development, but it runs, and it is recorded here as it answered:

```
$ node test/gates.mjs
16/18 gates passed
```

The two failures are worth naming because both are real:

1. **`the word "immutable" is never OUR claim`** — fails on `modules.html` and
   `platform.html`, both of which render the string *"Immutable Audit Log"*.
   That is the blueprint's own name for module 30, and this is exactly the
   collision `MODULE_REGISTRY.md` § *"One naming note that has to be recorded"*
   predicted. The register keeps the blueprint's wording so the mapping back to
   the source document stays unambiguous; **a product surface must not inherit
   it.** The doctrine word is *tamper-evident*. The gate is right and the pages
   are wrong.
2. **`every internal link resolves to a built file`** — 47 dead internal links
   across 10 pages, all pointing at four routes that do not exist yet:
   `/matrix.html`, `/film.html`, `/sources.html`, `/credits.html`.

Neither failure is in the engines this document gates at 18/18 and 14/14. Both
are in the page layer that arrived after them.

Treat every count in this document as *as-of 08:29–08:38 EDT on 2026-08-15* and
re-run the commands before relying on any of them.

---

## 2 · Other election-related source trees on this machine

`ls ~/` returns 223 entries. Filtering for election-relevant names:

```
$ ls ~/ | grep -i -E 'elect|ballot|vote|voting|poll|custody|lockchain|chain|precinct|county|maricopa|arizona|az-'
ballot-trail
bb2g-election-command
bb2g-election-os
election-command
election-integrity
lockchain-record
safe-vote
strongroom-elections
verifiable-elections
verified-vote
```

Measured state of each:

| Tree | Files | Git | Commits | Last commit | Origin |
|---|---:|---|---:|---|---|
| `ballot-trail` | 145 | yes | 3 | — | `kristenslab/ballot-trail` |
| `bb2g-election-command` | 295 | yes | 1 | 2026-08-15 08:26 — "BB2G Election Command — one adaptive interface over 70 election modules" | `kristenslab/bb2g-election-command` |
| `bb2g-election-os` | 23 | no | 0 | — | — |
| **`election-command`** (this build) | 32 | yes | **0** | — | none set |
| `election-integrity` | 134 | yes | 3 | 2026-08-13 23:57 | `kristenslab/election-integrity` |
| `lockchain-record` | 962 | no | 0 | — | — |
| `safe-vote` | 158 | yes | 5 | 2026-08-05 19:04 | `kristenslab/safe-vote` |
| `strongroom-elections` | 622 | yes | 12 | 2026-08-14 08:32 | `kristenslab/strongroom-elections` |
| `verifiable-elections` | 24 | yes | 8 | 2026-08-05 19:04 | `kristenslab/verifiable-elections` |
| `verified-vote` | 2840 | yes | 19 | 2026-08-06 01:29 | `kristenslab/verified-vote` |

### The finding that matters most

**There are three separate directories on this machine building something called
BB2G Election Command, and they are not the same code.**

- `~/election-command` — this build. LockChain Core + authority engine + two
  gates. 32 files, 0 commits.
- `~/bb2g-election-command` — a `src/` + `build.mjs` + `dist/` tree, 295 files,
  committed at 08:26 today with the message *"one adaptive interface over 70
  election modules"*. It contains no `assets/lockchain.mjs`; a
  machine-wide `find ~ -maxdepth 4 -name lockchain.mjs` returns exactly one hit,
  in this repository.
- `~/bb2g-election-os` — 23 files, no git, no commits.

That is the blueprint's warning arriving in real time: *"sixty copies of
authentication, evidence handling, audit logging, jurisdiction logic and
synchronization."* It is not sixty yet. It is three, on one laptop, in one
morning. **No merge has been performed and none is claimed here.** See
`VERSION_RECONCILIATION.md` §4.

Six further trees (`election-integrity`, `safe-vote`, `strongroom-elections`,
`verifiable-elections`, `verified-vote`, `lockchain-record`) predate this build,
are separately committed, and have **not been read, mapped into the module
registry, or reconciled**. The blueprint asks for exactly that mapping. It has
not been done.

---

## 3 · Live hosts, measured

```
$ for h in ...; do curl -s -o /dev/null -w "%{http_code}" -m 20 https://$h.bornbetween2generals.com/; done
```

| Host | HTTP | Served `<title>` |
|---|---:|---|
| `lockchain.bornbetween2generals.com` | **200** | Money Trail · Paper Trail — forty-nine accountability modules on one engine |
| `ballottrail.bornbetween2generals.com` | 200 | Overview · Ballot Trail |
| `strongroom.bornbetween2generals.com` | 200 | Strongroom — Built in the order that matters. |
| `proofcore.bornbetween2generals.com` | 200 | A shared trust layer for work that has consequences · ProofCore |
| `order-of-battle.bornbetween2generals.com` | 200 | Order of Battle — Born Between 2 Generals, LLC |
| `standard.bornbetween2generals.com` | 200 | The Standard — Born Between 2 Generals LLC |
| `receipts.bornbetween2generals.com` | 200 | Receipts — prove you said it first |
| `university.bornbetween2generals.com` | 308 | redirects → `/bbg-university.html`, then 200 |
| `electioncommand.bornbetween2generals.com` | **000** | — see below |

### `lockchain.bornbetween2generals.com` is OCCUPIED — and was deliberately not overwritten

The hostname `lockchain.bornbetween2generals.com` answers **200** and serves a
live, finished, unrelated application:

> **Money Trail · Paper Trail — forty-nine accountability modules on one engine**

A grep of the served page confirms the claim in its own title: `49 modules`.

The name "LockChain" in this blueprint refers to the **evidentiary spine**
(`assets/lockchain.mjs`), not to that site. They are different products that
happen to share a word. **This build did not deploy to that hostname, did not
alias it, and did not touch it.** Overwriting a live 49-module application to
claim a subdomain would have destroyed working software to satisfy a naming
preference.

This build's intended address is **`electioncommand.bornbetween2generals.com`**.

### `electioncommand.bornbetween2generals.com` is not deployed

```
$ dig +short electioncommand.bornbetween2generals.com
cname.vercel-dns.com.
66.33.60.35
76.76.21.123

$ curl -sS -o /dev/null -m 20 https://electioncommand.bornbetween2generals.com/
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to
      electioncommand.bornbetween2generals.com:443

$ curl -s -o /dev/null -w "%{http_code}" http://electioncommand.bornbetween2generals.com/
404
```

The wildcard DNS points at Vercel, but **no Vercel project claims this hostname**,
so no certificate has been issued and HTTPS cannot complete. There is nothing
live at this address. Any document that describes this build as "live" is wrong.

---

## 4 · What could NOT be inventoried

State this plainly, because the blueprint's own closing note does:

> "The remaining uncertainty is repository-level: the private source tree and
> exact canonical LockChain implementation were not available for inspection, so
> no responsible assessment can yet state that the sixty production modules are
> already implemented, identify the canonical branch for each, or certify the
> existing code as deployment-ready."

**That gap is not closed by this document.** Specifically, still unknown:

1. **The 516-project portfolio.** The blueprint cites the public BB2G Standard
   reporting 516 projects / 508 responding / 301 on the BornBetween2Generals
   domain / sixteen clusters, measured 2026-08-04 [1]. This inventory read
   **nine** local election-adjacent trees and probed **nine** hostnames. The
   remaining several hundred projects were not enumerated, not fetched, and not
   mapped to modules.
2. **Remote branches.** `git ls-remote` was not run against any
   `kristenslab/*` repository. Local commit counts above are *local* commit
   counts. A newer canonical branch may exist on GitHub for any of them.
3. **Which of the nine local trees is canonical for any given module.** No
   characterization tests were written against `verified-vote` (2,840 files),
   `strongroom-elections` (622 files), `lockchain-record` (962 files) or
   `election-integrity`. Their behaviour is unknown to this document. They were
   listed, not read.
4. **Any deployed database, authorization stack or authentication configuration.**
   None exists in this repository, and none was inspected elsewhere. There is no
   API, no schema, no migration, no session, no role assignment anywhere in this
   tree.
5. **Anything about a real jurisdiction's systems.** No Maricopa County, Arizona
   Secretary of State, EAC or CISA system was contacted, queried or integrated.
   Every reference to those bodies in this build is a citation to a public
   document by way of the blueprint, not an integration.
6. **The `@bbg/ledger` shared component** named in the blueprint via the public
   BB2G University [2]. It was not located on disk and not compared with
   `assets/lockchain.mjs`. Whether this build duplicates it is an open question.

Item 6 is the sharpest one. The entire argument of the blueprint is *do not grow
a second copy of the hard parts* — and this build has not yet proved that
`assets/lockchain.mjs` is not itself a second copy of something that already
exists in the portfolio. What it *has* proved is that its crypto layer is not a
second copy: see `VERSION_RECONCILIATION.md`.

---

## Sources cited

Cited as the blueprint cites them; no legal claim is added here.

- [1] The Standard — Born Between 2 Generals LLC — https://standard.bornbetween2generals.com/
- [2] Born Between 2 Generals University — https://university.bornbetween2generals.com/bbg-university.html
- [3] Receipts — prove you said it first — https://receipts.bornbetween2generals.com/
