fix(btcpay): declare btcpay-db-password; stop reconcile failing on absent apps #166
Closed
ssmithx
wants to merge 0 commits from
fix/btcpay-db-password into main
pull from: fix/btcpay-db-password
merge into: :main
:main
:pr/feat/first-install-owner-network-20261112
:pr/demo-intro-ux-polish
:docs/security-audit-2.0.3-alpha
:docs/fips-compute-market-proposal
:feat/routstr-fips-llama
:docs/ui-uat-pr-rule
:fix/routstr-xcashu-change
:fix/lifecycle-lock-wait
:fix/btcpay-db-password
:feat/podsteadr-app
:feat/qortal-app
:fix/quadlet-iec-memory-limits
:feat/podsteadr-app-package
:arm64-pi-test
:feat/nostr-vpn-seller-app
:work/terminal-developer-spec-20261009
:feat/justworks-integration-review
:conduit-market-archyapp
:fix/gitea-portainer-20260930
:fix/app-install-lifecycle-20260930
:fix/filebrowser-purchase-filing
:fix/ecash-paid-download-v2-keyset
:fix/paid-content-payment-not-lost
:fix/mint-error-detail-swallowed
:investigate/framework-lnd-startup
:fix/minibits-already-redeemed
:cuprate-fixes
:feature/dojobay-app
:fix/bitcoin-core-tor-service-name
:docs/openwrt-gateway-setup
:cuprate-cpu-fix
:fix/cuprate-explicit-logging-levels
:companion/session-2026-08-31
:companion/0.5.28-deploy-handoff
:companion/0.5.28-ship
:companion/0.5.28
:app-bumps-mirror-pending
:cuprate-archyapp
:docs/todo-list
:companion/0.5.27-version-meta
:companion/0.5.27-ship
:companion/0.5.27-clipboard-qr-restart
:ux-at-last
:fix/mesh-send-content-inline-federation-fallback
:cashu-error-messages
:gsd/phase-13-aiui-functional-conversational-node-control-and-content-surf
:rotate-release-root
:chore/aiui-monorepo-migration
:wip/phase-13-p13-02
:wip/phase-13-p13-01
:fix/bitcoin-conf-conflict-crash-loop
:demo-build
:archy-hwconfig
:openwrt-enhancements
:a3-10-endpoint-fallback
:public-prelaunch
:release/1.7.115-prep
:fix/web-listener-ipv6
:fips-companion-5g-hardening
:fix/connection-accept-deadlock
:fix/demo-images-path-filter
:fix/companion-autologin-replay-intro
:networking-profits-dashboard
:identities-mobile-polish
:companion-qr-scan-fix
:companion-qr-pairing
:intro-reliability-video-perf
:login-bg-continuity
:audio-bottom-bar
:demo-intro-every-visit
:intro-entrance-fixes
:cloud-feedback-demo-content
:cloud-tabs-search
:ark-wallet-ui-demo
:demo-nginx-app-assets
:demo-ui-fixes
:ark-wallet-barkd
No Reviewers
Labels
Clear labels
companion-agent
queued
roadmap
waiting-external
Companion-app agent's handover list (node-side parts tracked separately)
Triaged, next in this session's queue after current release work
Feature/effort item, deliberately unscheduled — needs scoping + a slot, not a fix today
Waiting on a person outside this session (tester, operator)
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: lfg2025/archy#166
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Problem
On a node where btcpay is not installed, every ~50s reconcile pass logged:
(and the same for
archy-nbxplorerandbtcpay-server).reconcile pass completed with failures ok=67 failed=3.There are two causes:
btcpay-db-passwordviasecret_env, but none lists it ingenerated_secrets. Only the legacystacks.rsinstaller (read_or_generate_secret) creates it.ensure_running_with_moderanresolve_dynamic_envbefore checking whether the app has a container, so an uninstalled app's missing secret counted as a reconcile failure. Each failing pass also holds the app-lifecycle lock longer, which makes the user-click refusals fixed in #165 more likely.Fix
fix(reconcile): inExistingOnlymode, if env resolution fails for a non-baseline app that has no container and no quadlet unit, reportLeft("absent"), which is what the container check returns anyway. Installed apps still fail loudly.fix(btcpay): declarebtcpay-db-password(hex32) ingenerated_secretson all three members. Generation is idempotent, so a node with an existing readable password keeps it and running btcpay databases are unaffected.Catalog
The signed catalog overrides disk manifests, so the manifest commit takes effect for catalog-covered nodes only after the catalog is regenerated and re-signed (offline signing). The reconcile commit fixes the log noise on its own.
Tests
reconcile_existing_leaves_absent_app_with_unresolvable_secret_alone.all_shipped_manifests_parseandcatalog_overlay_accepts_all_real_image_manifestspass.main(7 there); they needscripts/test-backend-isolated.sh.Verified on a real node without btcpay installed: before, every pass logged
failed=3; after the deploy, passes ran with no failures, and installed apps were unaffected.🤖 Generated with Claude Code
Boot reconcile resolved every catalog manifest's env, secrets included, before checking whether the app had a container. An uninstalled app whose secret is only created at install time (btcpay's btcpay-db-password) therefore failed every ~50s pass, logging three errors and lengthening the lifecycle-lock hold that blocks user clicks. In ExistingOnly mode, a resolve failure for a non-baseline app with no container and no quadlet unit is now reported as Left("absent"), which is what the container check would have returned anyway. Installed apps still fail loudly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>Reconciled against canonical ngit review: fix(btcpay): declare btcpay-db-password; stop reconcile failing on absent apps is applied.
This PR's exact head
b7a20c4ed85124e4b18847a990b775c88f337e85is already an ancestor of accepted main1a4ea15df9c8800b6d288277d2839c7b93662ff7, which matches on ngit and Gitea. The existing review fixes and commit history are preserved.Closing the redundant Gitea PR record because its contribution has already been integrated through ngit. No second merge or history rewrite is being performed. Artifact publication and installed-device acceptance remain separate from this source-review disposition.
Pull request closed