Add platform capabilities and comprehensive portability coverage - #36
Add platform capabilities and comprehensive portability coverage#36MrSeizy wants to merge 23 commits into
Conversation
|
@MrSeizy is attempting to deploy a commit to the Viewport Team on Vercel. A member of the Team first needs to authorize it. |
|
The latest update,
Regression coverage exercises combined native/storage deletion failures, clean and conflicting child environments, changed working directories, localized Windows cleanup outcomes, terminal alias quoting, overlapping runners in separate processes, reverse release order, failed persistence and restoration, lock contention during HTTP handoff, dead owners with surviving native helpers, and actual helper termination. Reliability and privacy documentation now explain the shared volume state and crash-repair procedure. Validation run before committing:
The 22/22 CI result in the PR description belongs to |
RadioCLI now models runtime eligibility and individual platform capabilities centrally. Playback, storage, browsing, and keyboard navigation remain usable when a scheduler, desktop helper, terminal application, mixer, inhibitor, or optional AirPlay sender is unavailable. Unsupported operations report the missing prerequisite and preserve failure evidence instead of reporting success.
This single draft PR contains the complete cross-platform initiative on
codex/comprehensive-cross-platform-support. It starts at6d8cc2dc7ef8a02e2bf8a2406800e6f6cbce3ab9(Release 0.2.3). The owner retains final review, merging, and release publication.Architecture and behavior
src/platform/separates host identity, upstream Node requirements, implemented adapters, observed capabilities, and project verification. It centralizes executable discovery, explicit package plans, storage paths and access inspection, desktop and terminal commands, shell boundaries, mpv IPC addressing, loopback networking, public-request policy, and terminal rendering policy. Existing operation owners inplayer,providers,storage,alarms,agent, anduiconsume those decisions.NO_COLOR, C/POSIX locales, dumb/redirected terminals, screen-reader output, and reduced motion are explicit invocation policies that do not rewrite saved preferences. Screen-reader mode disables receiver animation and mouse reporting while preserving keyboard controls.Doctor reports
support.scope=current-installation. It checks prerequisites without pretending to run packed-install/audio acceptance tests. Its conservative installation tier is independent of the reference CI configuration's recorded tier.Subsystems changed
src/platform/{runtime,support,capabilities,paths,executables,packages,desktop,terminals,shell,launch-command,terminal,network,loopback,ipc,storage}.tsand adapter/decision testssrc/player/{backend-install,command,command-diagnostics,mpv-ipc-client,player-controller,airplay-discovery}.ts, provider adapters/cache, update checkersrc/storage/store.ts, CLI diagnostics/setup, App/input/command hooks, adaptive rendering and screen components; failure and keyboard/focus integration testsCoverage before and after
The previous workflow tested Node 22/24 on one Ubuntu, macOS, and Windows runner each. Pull requests skipped live data, playback, and fresh-install checks. Platform/architecture claims were not tied to a recorded evidence tier.
--omit=optional. Global registry installs, desktop terminals, physical audio, and new schedulers were not the recorded checks.The 12 required native reference configurations are first-class for their recorded capabilities; the three BSD core routes are supported with the limits above. Other listed routes remain experimental or unsupported as stated.
The full platform guide covers minimum OS/libc requirements, x64/x86/arm64/ARMv7/ppc64 endianness/s390x/riscv64, installation, players, TUI, browser/clipboard, alarms, terminal reopening, system volume, inhibition/wake, AirPlay, execution method, tier, and limits.
Verification
Code checkpoint
fd57fdapassed all 22 jobs in run 34180703652. Final commit:7762f937933df43e9101e53657750f2215998062. Final CI: run 34181748384, 22/22 jobs passed on the final commit: 12 required native verification jobs, four Linux playback jobs, two documentation jobs, the guest artifact build, and three BSD guest jobs.Local native environment: macOS 26.5.2, Darwin 25.5.0, arm64. Node 22.23.2/npm 10.9.8 and Node 24.20.0/npm 11.19.0 were installed separately and used for clean dependency installation and acceptance. Supplementary Node 26.8.1 checks exercised the changed proxy/loopback and terminal paths. Mocked host tests are listed as unit evidence, not native verification.
Commands run on both maintained local runtime lines:
npm ci npm run check npm run lint npm run test npm run build npm run smoke:data npm run smoke:mcp npm run smoke:playback npm run pack:check npm run fresh:check -- --require-mpv npm run check:package npm run audit:runtime npm --prefix apps/docs ci npm run docs:check npm run docs:build npm run audit:docs node --test scripts/packed-smoke.test-node.mjs scripts/install-smoke-mpv.test-node.mjsThe local and eight macOS/Linux CI suites each passed 1,841 tests with three Windows-only skips. Each Windows Node 22 suite passed 1,828 with 16 platform-specific skips; each Windows Node 24 suite passed 1,826 with 18 skips, including two optional AirPlay source checks whose dependency files were absent. All native Windows PowerShell/console probes ran. The standalone package-harness suite passed 12 tests. No existing test deadline, capacity limit, or assertion was relaxed.
Final-run reference environments:
The final run selected macOS 26.5.2 for its arm64 Node 24 job; the earlier code checkpoint selected 26.6.2. The committed verification report retains that checkpoint's exact evidence, and this table records the final run.
Final commit tarball SHA-256 values:
50b0a334d094b023eb19429c7163c58394d5b0de5ec5008f9feb35a4101a86c3Each native target used the same target tarball for normal and
--omit=optionalacceptance. The run'spacked-*andplayback-*artifacts retain structured results; theportability-packageartifact retains the tarball executed in BSD, whose guest logs contain the structuredpacked_smokerecords.The packed harness uses the installed tarball, an isolated data home, paths with spaces, non-ASCII characters, and literal
#/%, offline cache hits and misses, direct URLs, library import/export, the generated npm wrapper, and MCP stdio/status with 31 tools. An offline fetch guard catches accidental live requests. Real mpv decodes a local WAV and verifies IPC readiness, volume, pause, resume, and stop using null audio. Normal and--omit=optionalinstalls have separate evidence records. Null audio does not establish audible hardware output.BSD jobs execute guest-native Node and mpv in same-CPU full guest kernels. The JavaScript package is built on Linux and then installed/executed in each BSD guest; compilation itself is not runtime evidence. NetBSD's minimal image needs the matching official X11 base set for the media package's shared libraries; CI verifies that set's pinned SHA-512 before extraction.
Visual evidence
The first commit captured 578 deterministic Ink snapshots before rendering changes: full/compact/micro screens at 100×30, 50×16, and 24×8, all full-size receivers, representative smaller receivers, ASCII/Unicode, and focused color fixtures.
All 335 Unicode/ANSI captures remain unchanged. Of 243 ASCII captures, 160 intentionally replace remaining decorative Unicode (bars, bullets, ellipses and receiver glyphs), while 83 are unchanged. Station names and metadata retain their characters. Representative before/after terminal captures and the complete snapshot fixture are linked below. These are renderer captures, not screenshots of another platform's terminal application.
Rendering and keyboard tests retain their original assertions, dimensions, and timeouts. Cleanup removes mounted Ink views and host terminal-size subprocesses; all 144 paired screen frames remain identical. A per-test footer-layout cache delegates every distinct input to the real function; all 124 paired journey frames remain identical. Polling tests assert that the active clock actually polls. The 500-alarm storage test retains its capacity limit and original deadline; timezone canonicalization performs one native validation per value instead of two.
Evidence: platform guide, audit, verification record, before/after terminal captures, and complete snapshot fixture.
Dependencies, security, and compatibility
No dependency versions, lockfiles, TypeScript strictness, lint/export checks, audit scripts, or existing security gates were weakened. There are no new runtime dependencies, persisted-schema changes, lifecycle system-package installations, external tap changes, publications, or releases. Required-runtime and documentation audit gates pass; normal installs retain the original two low-severity optional-tree advisories.
All CI actions use immutable full commit pins and read-only repository permissions. macOS/Windows mpv fixtures use fixed official release assets, pinned SHA-256 values, and native CPU-header checks. Linux/BSD catalogs and the VM provider's separately supplied maintained images remain documented external dependencies. Proxy credentials and local control tokens are excluded from diagnostics and terminal handoff payloads. TLS verification remains enabled.
Existing current/legacy library paths and setting defaults are preserved; no migration is necessary. Optional AirPlay remains experimental and macOS-only. A successful normal package install does not prove that its optional native sender loads or connects to a receiver.
Risks and remaining experimental work
The principal remaining risk is desktop/session policy: actual terminal applications, automation consent, scheduler registration and delivery, system mixers, sleep/wake behavior, physical audio devices, and screen-reader applications require evidence beyond unit mocks, fixed Ink captures, and null audio. Runner results apply to their exact OS/CPU/Node profiles, not every Windows desktop edition, older macOS version, Linux distribution, or WSL setup.
Termux devices, musl and less common CPUs, illumos/SmartOS, and AIX retain native verification gaps. Standard HaikuPorts Node 20 does not meet the runtime minimum, and AIX has no verified native player package route. Non-systemd/BSD/Termux background schedulers remain unavailable until they can demonstrate the existing occurrence/session/retry/catch-up guarantees. SOCKS transport and broader hardware wake verification are future work.
External owner-controlled check: the upstream Vercel preview reports “Authorization required to deploy.” Verification for this fork contribution is recorded in the linked fork CI runs; no deployment authorization, merge, or release has been performed.
Rollback and review
The owner can revert the initiative's commits or restore the previous installed package. There is no schema or lockfile migration to undo. Back up the library before changing versions. If this version registered alarm tasks, remove/repair them through its normal CLI while it remains installed, verify native cleanup, then re-register using the selected version. Preserve failed-cleanup and unverified live ownership records for diagnosis. Rendering/network environment overrides can be removed independently.
The PR remains draft for owner review. It has not been merged or published.