feat(apps): add podsteadr app stack with player and FIPS access #163
Closed
ssmithx
wants to merge 0 commits from
feat/podsteadr-app into main
pull from: feat/podsteadr-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#163
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.
Summary
Adds podsteadr, a self-hosted, nostr-native podcast publishing and livestreaming server, plus its listener-side podsteadr player, as a four-container stack that installs, starts, stops and uninstalls as one app.
podsteadrlfg2025/podsteadr:1.0.0podsteadr-blossompodsteadr-mediamtxpodsteadr-playerlfg2025/podsteadr-player:1.0.0My Apps shows two cards, podsteadr and podsteadr player; blossom and MediaMTX are listed under Services.
FIPS mesh
auth: noneports as service ports, so the fips0 firewall list (fips/app_ports.rs) opens 8095, 8097 and 8098.http://<npub>.fips:...feed and media URLs when a feed is fetched over the mesh..fipsURLs directly when opened over the mesh. When opened by LAN address or HTTPS it goes through its own/fips/gateway. The gateway relays only podsteadr feeds and catalogs (8095) and blossom blobs (8098) onnpub….fipshosts, GET/HEAD only, without client cookies or credentials. It computes each host's mesh address from the npub, and runs onnetwork: pastabecause bridge networks can't reach FIPS addresses over IPv6.Stack registration (core)
Mirrors pine:
stack_member_app_ids/owning_packagetreat the four apps as one package.orchestrator_uninstall_app_idsandall_container_namescover all four containers.startup_orderstarts blossom, then mediamtx, then the player, then the app.podsteadr-netwith its DNS aliases.Images and build scripts
source.archipelago-foundation.org/lfg2025, withpull_policy: if-not-present.build-from-prototype.shbuilds both images locally under those tags;push-to-registry.sh <version>builds and pushes them./var/tmpread-only. Builds now stage under~/.cache/podman-build-tmp, and images are tagged by image id after the build, becausebuild -tof a fully cached image copies through/var/tmpand fails.Source
Both app repos live on nostr git (relay.ngit.dev), with a Gitea mirror. Manifest repo links go to gitworkshop.dev. The podsteadr repo carries
.claude/skills/archy-integration/SKILL.md, which maps its files to the archy files that must follow them.Other
serviceNames.tslists the blossom and mediamtx services.podsteadras its example of an unknown app, so it already failed on this branch. It now uses a made-up id.apps/PORTS.mdadds 8097.Before signing
apps/podsteadr/push-to-registry.sh 1.0.0. Until then, a node needs them built locally withbuild-from-prototype.sh.tests/lifecycle/run-gate.shon a node.apps/podsteadr/manifest.ymlsayslicense: MIT, but neither app repo has a LICENSE file.releases/app-catalog.jsonand re-sign. podsteadr is not in the per-app OTA update mapping (image-versions.sh,image_versions.rs), so new versions ship with an Archipelago release.Testing
scripts/validate-app-manifest.sh: all four APPROVED. blossom has onereadonly_rootwarning, which is expected.scripts/check-app-catalog-drift.py --release --strict: clean.scripts/check-app-build-contexts.py .: passes.cargo test -p archipelago-container: 83 passed, including the unauthenticated-endpoint allowlist with 8097.cargo test -p archipelago, targeted: 177 passed (stack membership, owning package, uninstall ids, container names, startup order, crash recovery). This needs Rust ≥ 1.96 foratomic_try_update.neode-uivitest:ConnectionJourney, is a timing test not touched here; it passes 3/3 alone on both this branch andmain.archipelagoandneode-ui: OK.🤖 Generated with Claude Code
Review continues on ngit
This contribution has been replicated to its canonical ngit proposal:
https://gitworkshop.dev/nevent1qqs9lw2lxmk47c2g6kn8363mpe3ru03rh08c75py3y59xyjv2e8lqugpz3mhxue69uhhyetvv9ujumn8d96zuer9wc8klunw
The exact existing Git history is preserved, including the review fixes, at
299cb20a2e9194dce9bc72965ba538d0b2011d7e. 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.
feat(apps): add podsteadr app packageto feat(apps): add podsteadr app stack with player and FIPS accessReconciled against canonical ngit review: feat(apps): add podsteadr app stack with player and FIPS access is applied.
This PR's exact head
99e6e915c0f7e32e4163219c6e7942c83af58fdcis 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