Ethan's note
No note from Ethan as of Tuesday 1 September 2026, 18:39 UTC.
Agenda
Agenda last updated 2026-09-01 — today
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 deltaPOST/DELETE /api/autobuy/credentials— node-role check only, exempt from confirmationPOST /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:3101reachable on LAN and the tailnet - The WAF rule is an unversioned operational dependency
LIT_PASSWORDis 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.tsvsindex.tscase-sensitivity divergence — split-brain role classificationsync.ts:48vacuous-comparison shape, latentconfig/env.ts:13defaultslndGrpcHostto the DNS name proven to fail
Capital guardrails — 14 items
- Stale-state fail-open in the capital guardrails
setCapitalPolicywrites the capital policy with zero validation †- The sync loop auto-fails expansion executions stuck >1h
recommended_channel_size_satis published by the authority and discarded †- The freshness primitive this arc needs already exists, used for display only †
openTreasuryChannelis 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 †
assertCanExpandis silent on a pass- Stored
peer_cooldown_minutes = 0skips the cooldown check entirely - Two on-node verifications of the shipped guardrail work are deferred
recommended-peersreturns a confident wrong answer at 200swapPolicy.tspermit/refuse reads oflnd_channelswith 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'snowMsparameter is dead- A third one-step remediation variant —
lndFaultAlerts.ts's cert escalation certExpiryNotice.test.tshardcodes both API strings as fixtures — a mirror that rots silentlynever_synced+ expired cert renders reassuring-and-wrong copychannelStaleness.test.tsoperator-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.ymland the version-bump check disagree about what counts as a release- Worker
npm run deployhas no pre-deploy gate - CI grep gate for direct Worker fetches
- Worker-side browser-origin detector
- Bare
$GITHUB_RUN_IDin heredocs underset -euo pipefail - Node-20-deprecated action majors, force-run on newer Node
- Skipped-satisfies-required, unexercised on this repo
pr-checks.ymlversion-bump job is blind to bump-shaped commits- pr-checks gate detection gap — did-not-fire indistinguishable from pending *
docs/release-history.mdis four releases behinddocs/RELEASE.mdhardcodes "four paths entries" at two sitesdocs/RELEASE.mdis 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:248sync-loop log discards ln-service error discriminantsdefaultLndProbeDeps()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
withProbeTimeoutleaks its timer on a synchronous throw- Per-tick budget for the 15s sync loop — deferred
LND_GOSSIP_CALL_TIMEOUT_MS= 10s is argued, not derivedLND_SYNC_TIMING_LEVELis undocumented- Stale cross-file citations in
lndHealth.tsandlndProbeRoute.ts loopAvailability.tsbare 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_cursorreset 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
workerFetchbypasses - The Cowork project instructions hold conventions as values
- Ruleset
20756755provenance 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/loopfacts 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.versionreadslateston the published loopd imagedocs/LOOP_SETUP.mdis stale at:46,:99,:148docs/LOOP_SETUP.mdpredates 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.ymlis absent from docker-publish'spaths:filtergetSwapClient()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.mduntracked — 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.symlinkDirectoriesfor worktree disk cost- The 3109 reservation's fate
cloudflared:latestfloats- Fresh-grace guidance artifact's durable home
- Stage 5b (admin subscriptions view) + Stage 6 (Tier 3 live promotion)
types/ln-service.d.tsfabrication 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/webreported 30 npm vulnerabilities — untriagedapp/apitsconfig never typechecks test files; web doesSqliteError: no such tablestderr noise inaction-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.tsxseconds-vs-ms heuristic- Untraced clock provenance in three countdown surfaces
- Six raw
/api/channelsfetches with nor.okcheck - 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
FeeRecipientUpdateddone-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.92026-09-01 — todayv1.18.82026-08-26 — 6 days agov1.18.72026-08-22 — last weekv1.18.62026-08-20 — 2 weeks agov1.18.52026-08-19 — 2 weeks ago
Merged this week
Lightning application
- #298 release: v1.18.9 2026-09-01 — today, into
main - #297 feat(loop): swap the litd sidecar for standalone loopd (v1.18.9) 2026-08-31 — yesterday, into
develop - #296 fix(web): move the Loop restart step to the cert notice, label both scopes 2026-08-28 — 4 days ago, into
develop - #295 ci(docker-publish): add workflow_dispatch so a publish can be re-fired 2026-08-26 — 6 days ago, into
main - #294 Release v1.18.8 — member cert-expiry notice, LND call deadlines, capital guardrails, loopd image published 2026-08-26 — 6 days ago, into
main - #291 capital guardrails: policy validation, dead funding route removed, stale-data alert 2026-08-26 — 6 days ago, into
develop - #290 feat(loopd): Bitcorn-published multi-arch loopd image 2026-08-26 — 6 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-25 — 7 days ago, into
main