Bitcorn — status

Built Tuesday 1 September 2026, 18:39 UTC.

Regenerated automatically every day at 06:00 UTC. If the date above is not today's date (UTC), generation has stopped and everything on this page is at least that old.

Sources read

Repo main — shipped develop — merged, pending release
Lightning applicationa647286 2026-09-01a647286 2026-09-01
Stablecoin rail78ce954 2026-08-07no develop branch
Insurance platforme9d8a3a 2026-08-25no develop branch

Source access token expires 2026-11-29 (in 89 days). This page stops updating when it lapses.

Ethan's note

No note from Ethan as of Tuesday 1 September 2026, 18:39 UTC.

Agenda

Security / authorization — 20 items

  • Unauthenticated open-channel routes + guardrail bypass, behind a public endpoint
  • /api/swaps/loop-out — an authorization gap, not an unguarded route
  • /api/admin/swaps/loop-out — a design question, not only an authorization gap
  • /api/pay — unauthenticated arbitrary-invoice payment, no UI caller
  • /api/member/open-channel — post-v1.18.6 authorization delta
  • POST/DELETE /api/autobuy/credentials — node-role check only, exempt from confirmation
  • POST /api/treasury/capital-policy — node-role only, exempt from confirmation, and it configures the guardrail layer
  • Ungated capital-moving routes outside any /api/admin/ + /api/treasury/ naming rule
  • Loop-* family has no capital guardrail
  • The Worker is a capital-authorization dependency †
  • Surface (H): 0.0.0.0:3101 reachable on LAN and the tailnet
  • The WAF rule is an unversioned operational dependency
  • LIT_PASSWORD is a known-value credential guarding a live admin listener
  • Secrets scan of the now-known-public repo — proposed, not run
  • Node credential scoping
  • Credential scoping — PARKED, not dropped
  • API mounts the whole LND data dir when it needs two files
  • sync.ts vs index.ts case-sensitivity divergence — split-brain role classification
  • sync.ts:48 vacuous-comparison shape, latent
  • config/env.ts:13 defaults lndGrpcHost to the DNS name proven to fail

Capital guardrails — 14 items

  • Stale-state fail-open in the capital guardrails
  • setCapitalPolicy writes the capital policy with zero validation †
  • The sync loop auto-fails expansion executions stuck >1h
  • recommended_channel_size_sat is published by the authority and discarded †
  • The freshness primitive this arc needs already exists, used for display only †
  • openTreasuryChannel is HELD-unbounded — two unguarded funding paths can hang with no audit row
  • The coverage derivation's unnamed fourth blind spot
  • Capital-policy validation ranges — undecided †
  • assertCanExpand is silent on a pass
  • Stored peer_cooldown_minutes = 0 skips the cooldown check entirely
  • Two on-node verifications of the shipped guardrail work are deferred
  • recommended-peers returns a confident wrong answer at 200
  • swapPolicy.ts permit/refuse reads of lnd_channels with no age predicate
  • Guardrails USDC fee-revenue carve-out

Banners & member-facing copy — 14 items

  • Cert-fault remediation copy — implemented, pushed, unmerged *
  • B2 farmer-facing cert-expiry banner — merged, pending release
  • Fleet cert-expiry reporting (member→treasury) — not yet open
  • Member-facing "contact your operator" copy violates the no-operator convention
  • SubscriptionPanel.tsx:754 "Contact operator" wired to a dead placeholder mailto
  • Two remediation banners contradict on the same member dashboard
  • Member advisor tells a farmer "Loop is not installed" when loopd is broken
  • certExpiryMessage's nowMs parameter is dead
  • A third one-step remediation variant — lndFaultAlerts.ts's cert escalation
  • certExpiryNotice.test.ts hardcodes both API strings as fixtures — a mirror that rots silently
  • never_synced + expired cert renders reassuring-and-wrong copy
  • channelStaleness.test.ts operator-ban loop has no anti-vacuity probe
  • Pin dispositions for the banner reconciliation
  • Farmer-facing Loop-unavailability is invisible or hostile in three ways

CI & release tooling — 14 items

  • docker-publish.yml and the version-bump check disagree about what counts as a release
  • Worker npm run deploy has no pre-deploy gate
  • CI grep gate for direct Worker fetches
  • Worker-side browser-origin detector
  • Bare $GITHUB_RUN_ID in heredocs under set -euo pipefail
  • Node-20-deprecated action majors, force-run on newer Node
  • Skipped-satisfies-required, unexercised on this repo
  • pr-checks.yml version-bump job is blind to bump-shaped commits
  • pr-checks gate detection gap — did-not-fire indistinguishable from pending *
  • docs/release-history.md is four releases behind
  • docs/RELEASE.md hardcodes "four paths entries" at two sites
  • docs/RELEASE.md is stale at six sites plus two satellite files
  • RELEASE.md's rollback is not expressible as an image-tag sed for a backend-changing release
  • The lockfile / reproducible-CI decision

LND reliability & sync loop — 13 items

  • index.ts:248 sync-loop log discards ln-service error discriminants
  • defaultLndProbeDeps() throws under the test runner
  • Seventh fault kind — separating wedged-but-connected from refused
  • Query-string dispatch: exact-equality routes 404 on any query
  • Two sync-tick steps fetch the same LND data twice
  • withProbeTimeout leaks its timer on a synchronous throw
  • Per-tick budget for the 15s sync loop — deferred
  • LND_GOSSIP_CALL_TIMEOUT_MS = 10s is argued, not derived
  • LND_SYNC_TIMING_LEVEL is undocumented
  • Stale cross-file citations in lndHealth.ts and lndProbeRoute.ts
  • loopAvailability.ts bare catches would swallow a fired Loop deadline
  • LND fault harness lives outside version control
  • LND self-open semantics for POST /api/member/open-channel — needs regtest

Decisions parked (Ethan's) — 13 items

  • Counsel review
  • Standalone Lightning Terminal: uninstall or keep
  • The PRIVATE_KEY migration
  • Per-node base_sync_cursor reset disposition
  • Whether the fee recipient moves off the admin Safe
  • The Jan-2 cap-raise expectation
  • The BitCorn_OS copy of BITCORN_CONTEXT.md
  • The announcement
  • Wallet-registration keep-vs-re-register
  • Hosted wallet registration on the treasury HTTPS origin
  • Disposition of the three undocumented workerFetch bypasses
  • The Cowork project instructions hold conventions as values
  • Ruleset 20756755 provenance unconfirmed as deliberate

loopd / Loop compose swap — 12 items

  • loopd compose swap — Phase 2 merged (PR #297), release not cut
  • Compose-swap risk posture: three upstream lightninglabs/loop facts
  • env.ts:69 "broken ARM builds" comment goes stale at the swap
  • Loop release-manifest signature verification is deferred
  • The version triplet becomes an ungated quadruplet at the compose swap
  • org.opencontainers.image.version reads latest on the published loopd image
  • docs/LOOP_SETUP.md is stale at :46, :99, :148
  • docs/LOOP_SETUP.md predates the litd sidecar in places
  • The loopd swap mutates litd's directory even with no schema migration
  • NTFNS EOF retry loop against the Loop swap server — not fully diagnosed
  • docker-compose.yml is absent from docker-publish's paths: filter
  • getSwapClient() caches against litd's own self-signed cert with no gate

Cleanup / hygiene / smaller — 11 items

  • Delete stale app/api/dist/rebalance/
  • .agents/, .codex/, AGENTS.md untracked — worktree removal needs --force
  • Two stale claims in the port-3101 containment record
  • Three stale remote branches survived the ~190-branch sweep
  • Duplicated CJS entrypoint guard comment in index.ts
  • worktree.symlinkDirectories for worktree disk cost
  • The 3109 reservation's fate
  • cloudflared:latest floats
  • Fresh-grace guidance artifact's durable home
  • Stage 5b (admin subscriptions view) + Stage 6 (Tier 3 live promotion)
  • types/ln-service.d.ts fabrication audit

Infrastructure, other ventures & process — 10 items

  • Monday status artifact — spec complete, implementation next
  • BACKLOG §2 split (file bloat) — not yet open
  • The insurance venture (own vault/repo) — packet intake paused on Cael
  • Cloudflare domain on Ethan's personal account/card — needs Kevin
  • NoMachine on the Dell tower
  • Lightning MCP — blocked on the Lightning Terminal decision
  • Top the deployer wallet
  • Workflow-tooling remainder
  • Vault-conventions remainder
  • Read first production subscription numbers

Tests — 8 items

  • The web include pattern excludes .test.tsx
  • Disk-vs-collected cross-check
  • All three CI collection floors are stored counts of growing suites
  • The JSX seam is unpinned for all three member-dashboard notice surfaces
  • app/web reported 30 npm vulnerabilities — untriaged
  • app/api tsconfig never typechecks test files; web does
  • SqliteError: no such table stderr noise in action-confirmation.route.test.ts
  • Rerun the v1.18.6 verification under a genuinely pinned runtime

Frontend / display — 6 items

  • Browser-ahead clock-skew gap
  • RefillChannel.tsx seconds-vs-ms heuristic
  • Untraced clock provenance in three countdown surfaces
  • Six raw /api/channels fetches with no r.ok check
  • SwapOperations latent defect on main
  • Orphaned client method /api/member-liquidity/clusters — 404s

Stablecoin rail & economics — 6 items

  • Rail verification tier-up
  • The economics rollup
  • Block timestamps on /base/events
  • Per-member fee attribution
  • The FeeRecipientUpdated done-when is inverted
  • Constructor seed-vs-ceiling validation

Owed to people — 2 items

  • Rock Sheet M1–M4
  • Hank's L10 to-dos

143 open items · 0 closed since the previous pass (2026-08-31 — BACKLOG.md unchanged at 522eabcf) · 5 items marked † are merged and released at v1.18.8, open on formality (re-judge) only.

* title paraphrased by the generator pass
fix merged and released at v1.18.8, open on formality (re-judge) only

Everything below shows code moving only — commits, pull requests, branches and tags in the three application repos. Work that happens in the research vaults is invisible here: a stretch of work can produce several vault records and no application-repo commits at all, and these sections would show nothing for it. Ethan's note above is what covers that gap.

Recently shipped

Lightning application

  • v1.18.9 2026-09-01today
  • v1.18.8 2026-08-266 days ago
  • v1.18.7 2026-08-22last week
  • v1.18.6 2026-08-202 weeks ago
  • v1.18.5 2026-08-192 weeks ago

Merged this week

Lightning application

  • #298 release: v1.18.9 2026-09-01today, into main
  • #297 feat(loop): swap the litd sidecar for standalone loopd (v1.18.9) 2026-08-31yesterday, into develop
  • #296 fix(web): move the Loop restart step to the cert notice, label both scopes 2026-08-284 days ago, into develop
  • #295 ci(docker-publish): add workflow_dispatch so a publish can be re-fired 2026-08-266 days ago, into main
  • #294 Release v1.18.8 — member cert-expiry notice, LND call deadlines, capital guardrails, loopd image published 2026-08-266 days ago, into main
  • #291 capital guardrails: policy validation, dead funding route removed, stale-data alert 2026-08-266 days ago, into develop
  • #290 feat(loopd): Bitcorn-published multi-arch loopd image 2026-08-266 days ago, into develop

Stablecoin rail

none this week

Insurance platform

  • #14 feat(schema): unit_structure_code gains EP — enterprise units by practice 2026-08-257 days ago, into main