Qortal app (Core node + Hub API + gateway), manifest credentials, quadlet IEC memory limits #164
Closed
ssmithx
wants to merge 0 commits from
feat/qortal-app into main
pull from: feat/qortal-app
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#164
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.
Adds Qortal (Core v6.1.9) as an Archipelago app: a full Qortal node that desktop or mobile Qortal Hub can connect to, plus the built-in gateway for Qortal websites and Q-Apps. Minting is out of scope for this PR.
What's in it
apps/qortal/localAuthBypassEnabledis true orapiRestrictedis false.Network:
network: pasta, so inbound p2p peers keep their real IPs and Core stays off the shared rootless netns.API key: generated as a manifest secret (
hex32) and handed to Core viasecret_env. Core requires it on every admin route.Ports:
auth: open(rationale in the manifest; Core enforces its own API key)New manifest feature:
credentialsblock (8287467). Apps can declare credentials forpackage.credentials, sourced from their owngenerated_secrets, with optionalprompt_before_launch: false. Qortal uses it to show the Hub API key on its dashboard page without a launch prompt. Documented indocs/app-manifest-spec.md.App store: entries in
app-catalog/catalog.jsonandneode-ui/public/catalog.json, plus the generated launch-port and title entries.Platform fix: memory limits (
294dc3a)The quadlet renderer's
parse_memory_mibonly understood4g/512m. It silently dropped4Gi/512Mi, the form used by 64 manifests, so none of those apps got a memory cap. It now accepts IEC suffixes.Tested on archy-x250-pa3
settings.json, ownership (data_uid) and the secret were all created correctly.healthythroughout the bootstrap.--memory=4096mand the cap is live (4 GiB)./core/admin/stop.Qortalsite (after the expected first-fetch "Loading" page).Before release
qortal-core:6.1.9to thesource.archipelago-foundation.org/lfg2025mirror. It is only built locally so far.releases/app-catalog.json.tests/lifecycle/run-gate.shon a node.Found along the way (not fixed here)
archipelago.servicecan fail to restart withFailed to spawn executor: Device or resource busy. Podman leaves nested emptyruntime/cgroups (296 deep on x250-pa3) under the delegated service cgroup. Removing them deepest-first fixes it.scripts/generate-app-catalog.pypicks up untracked app dirs, which putnomusinto the generated launch-port and title lists until it was removed by hand.🤖 Generated with Claude Code
credentialsblock for package.credentials 8287467daeApps that hand the operator something to use elsewhere (an API key for an external client, a first login) needed a hardcoded branch in handle_package_credentials. Now a manifest declares it: credentials: title: ... prompt_before_launch: false items: - { label: API key, secret_file: <own generated secret> } - { label: Username, value: admin } - Validation fails closed: a secret_file must be a file this app's own generated_secrets produce, so a registry manifest cannot surface another app's secret (Bitcoin RPC password, ...). Exactly one of value/secret_file; non-empty title, labels and items. - package.credentials renders it from the effective manifest (verified catalog first, then disk) after the existing per-app branches; secret items are read at request time and always marked sensitive. - prompt_before_launch (default false) lets credentials used by another client skip the Apps-tab pre-launch modal while still showing on the app page. Responses without the field keep the historical prompt. - Older daemons ignore the block (it lands in extensions). First user: qortal's Hub API key, which its own UI cannot safely serve (no way to verify the dashboard session from a container; gated ports can be flipped to open at runtime). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>Review continues on ngit
This contribution has been replicated to its canonical ngit proposal:
https://gitworkshop.dev/nevent1qqs2z50zhx3zwlhz7rj2fsv24r5hpkw9axeyhakve8780a0jdcsuujcpz3mhxue69uhhyetvv9ujumn8d96zuer9wc3ca960
The exact existing Git history is preserved, including the review fixes, at
4cc625e4d1aebe57fece3ef5bb8e70f40b372732. No squash, rebase, or merge was performed. The ngit proposal includes the original description, outstanding tasks, and updated source-test results/limitations.Please continue review and updates on ngit. This Gitea PR remains open as historical context; it has not been merged or marked accepted. Reviews and discussions are platform-specific and have not been copied as approvals.
Reconciled against canonical ngit review: Qortal app (Core node + Hub API + gateway), manifest credentials, quadlet IEC memory limits is applied.
This PR's exact head
4cc625e4d1aebe57fece3ef5bb8e70f40b372732is 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