• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

archetech / archon / 30719926489
94%

Build:
DEFAULT BRANCH: main
Ran 01 Aug 2026 09:52PM UTC
Jobs 1
Files 88
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

01 Aug 2026 09:48PM UTC coverage: 90.652% (+1.7%) from 88.925%
30719926489

push

github

web-flow
test(gatekeeper): cover the sqlite backend (#823)

* test(gatekeeper): cover the sqlite backend

packages/gatekeeper/src/db/sqlite.ts had zero coverage. Until #822 that
was invisible; collectCoverageFrom surfaced it as the largest untested
file (166 lines), which is what this closes.

28 tests take it to 91.6%: lifecycle (every method rejects before
start(), stop is idempotent, state survives a restart on the same file),
event append and hydration by opid, setEvents replacement, DID deletion
and key listing, queue depth and per-registry isolation, clearQueue
filtering by proof value, block storage and lookup by height/hash/latest,
standalone operations, resetDb, malformed-row recovery, and the
runExclusive serialization under ten concurrent writers.

Each test opens a real sqlite file in its own temp directory and always
closes the connection — an open handle would keep Jest alive, and CI runs
without --forceExit.

Three of my initial expectations were wrong, and each documents a gap
between the code and its declared types. All are pinned by test rather
than "fixed", since only the first is unambiguously unintended:

- getBlock() returns `time` as a string. The blocks table declares
  `time TEXT NOT NULL` while BlockInfo.time is typed `number`, so the
  value is silently stringified across the SQL boundary and TypeScript
  cannot catch it. Arithmetic or strict comparison on block.time is
  wrong today.
- A different hash at the same height silently displaces the existing
  block: INSERT OR REPLACE resolves the idx_registry_height clash by
  deleting the conflicting row, and addBlock still returns true, so the
  caller gets no signal that a block was evicted.
- An event carrying an operation but no opid loses it permanently.
  setEventsStrict strips `operation` unconditionally but only copies it
  to the operations table when an opid is present, so it is neither
  stored inline nor rehydratable. Probably unreachable, since callers set
  opid, but nothi... (continued)

3410 of 4060 branches covered (83.99%)

Branch coverage included in aggregate %.

7985 of 8510 relevant lines covered (93.83%)

668.86 hits per line

Jobs
ID Job ID Ran Files Coverage
1 30719926489.1 01 Aug 2026 09:52PM UTC 176
91.9
GitHub Action Run
Source Files on build 30719926489
  • Tree
  • List 88
  • Changed 73
  • Source Changed 1
  • Coverage Changed 73
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #30719926489
  • ccf4f310 on github
  • Prev Build on main (#30717090692)
  • Next Build on main (#30721660868)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc