Skip to content

Rename the pro I/O gate to SAT_ADVANCED_IO - #83

Merged
jcelerier merged 2 commits into
masterfrom
2026-10
Oct 11, 2026
Merged

jcelerier merged 2 commits into
masterfrom
2026-10

Conversation

@jcelerier

@jcelerier jcelerier commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Part of a six-repo pass standardizing Suite SAT packaging on one convention. livepose is the reference implementation, so the changes here are small: the flag rename, and one latent bug.

The convention

  • artifact uploads: <tool>-${{ matrix.artifact-name }} and <tool>-pro-${{ matrix.artifact-name }}
  • release download pattern <tool>-*, which must match both editions
  • app-name differs per edition ("<Tool>" / "<Tool> Pro"), because tools/create-app.sh:234 derives the output filename from it -- two editions sharing a name produce one filename and silently overwrite
  • pro gated positively: environment leaves the flag commented out, environment-pro sets it

Flag rename

"Pro" means the same thing in every tool: basic is camera and file input, pro also has NDI / Spout / Syphon. A per-tool LIVEPOSE_ADVANCED_IO was redundant and made the four hosts look like four different policies. All four now read SAT_ADVANCED_IO. The variable is only ever set by the shipped environment-pro, so nothing external depends on the old name.

qmlcomponents/io/InputSourceSelector.qml is unchanged: its contract is that the host computes allowedBackends and the widget does the platform filtering, which is exactly what is wanted here.

Latent bug fixed

Both uploads read ${{ matrix.artifact-path || '<their own dir>' }}. A single matrix row adding an artifact-path override -- as the wasm rows in koaia and spm do -- would have pointed both uploads at the basic directory, publishing the basic package under the livepose-pro-* artifact name. livepose has no wasm row yet, so this was latent, but it is the same failure mode that shipped the wrong Domeport edition. The matrix now overrides only the file glob (artifact-file) and each upload keeps its own output directory.

Verification

value
basic upload livepose-${{ matrix.artifact-name }}
pro upload livepose-pro-${{ matrix.artifact-name }}
release pattern livepose-* -- matches both
filenames LivePose-* / LivePose-Pro-*

build.yml passes yaml.safe_load. These workflows cannot be run locally, so CI is the verification path.


The set

One convention across the Suite SAT tools; review these together:

speaker-setup-format-converter needs no change: it is not a score app and has no editions, and its speaker-layout-converter-* uploads already match its speaker-layout-converter-* release pattern.

qmlcomponents is unchanged. It is a git submodule in livepose, DomeportPro and spm, not a vendored copy, so there is one source of truth and no drift. InputSourceSelector is agnostic by contract — the host computes allowedBackends, the widget does the platform filtering — which is exactly what these PRs rely on.

…ads sharing one path override

"Pro" means the same thing in every Suite SAT tool: basic offers camera
and file input, pro also offers NDI / Spout / Syphon. A per-tool flag
name was therefore redundant, and it made the four hosts look like they
implemented four different policies. They now all read SAT_ADVANCED_IO,
set only by the shipped environment-pro. Nothing outside the packages
sets the old name, so the rename carries no migration.

The two uploads also both read `matrix.artifact-path`, defaulting to
their own directory. That default hid a trap: a single matrix row adding
an artifact-path override -- as the wasm rows in koaia and spm do -- would
have pointed the pro upload at the basic directory, publishing the basic
package under the pro artifact name. livepose has no such row yet, so
this was latent rather than live, but it is the same failure that shipped
the wrong Domeport edition. The matrix now overrides only the file glob
(artifact-file) and each upload keeps its own output directory.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019QYyvhRXvSMSRQPaq12Teq
Every other tool in the suite already gives its editions the same identifier --
DomeportPro uses ca.qc.sat.domeportpro for both, koaia ca.qc.sat.koaia -- and
livepose was the only one splitting it, so LivePose Pro built as
ca.qc.sat.liveposepro.

app-identifier only ever reaches CFBundleIdentifier on macOS (create-app.sh
exports it, create-app-macos.sh writes it into Info.plist); it is not the
settings scope, which comes from app-name and app-organization. So this moves no
user's preferences, and no Pro artifact has been released under the old
identifier.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019QYyvhRXvSMSRQPaq12Teq
@jcelerier

Copy link
Copy Markdown
Contributor Author

Triaged: the Package Custom App - linux-x86_64 failure is not in livepose. appimagetool is itself an AppImage and the self-hosted host has no usable FUSE under rootless docker, so it dies with fusermount3: mount failed: Operation not permitted and exit 127 after ~22 min of building.

Fixed in ossia/actions#29, which sets APPIMAGE_EXTRACT_AND_RUN on the two steps that write an AppImage — custom-score-build's Build (score's own, where this job died) and package-custom-app's packaging step (the app's own, the next place it would have failed). Since this repo pins the action at @master, re-running this job will keep failing identically until that merges; after it merges, no change is needed here.

Verified by A/B on appimagetool with no fusermount on $PATH: unset → exit 127 with the same open dir error line and no output file; APPIMAGE_EXTRACT_AND_RUN=1 → exit 0 and the AppImage is written.

@jcelerier
jcelerier merged commit 257f142 into master Oct 11, 2026
6 of 7 checks passed
jcelerier added a commit to ossia/actions that referenced this pull request Oct 11, 2026
Every Linux packaging job that goes through these actions dies after
about twenty minutes of building, at the first AppImage it has to write:

    /usr/bin/fusermount3: mount failed: Operation not permitted
    Cannot mount AppImage, please check your FUSE setup.
    open dir error: No such file or directory
    ##[error]Process completed with exit code 127.

appimagetool is itself an AppImage, so running it needs either FUSE --
unavailable under rootless docker on the self-hosted host -- or
APPIMAGE_EXTRACT_AND_RUN. score's own appimage.yml sets that on the job,
with the same reasoning in a comment, and ci/appimage.deps.sh says in so
many words that libfuse2 is therefore not required; a caller reaching
the same scripts through these actions has to set it too, and did not.

Two steps need it, one per AppImage that gets written:

- custom-score-build's Build, which runs score's ci/appimage.build.sh
  (this is where sat-mtl/livepose#83 failed)
- package-custom-app's Create custom app packages, which runs
  tools/create-app-linux.sh for the app's own AppImage -- the next place
  it would have failed

Checked with appimagetool on an AppDir with no fusermount on $PATH:
unset, exit 127 with the same "open dir error" line and no output file;
with the variable, exit 0 and the AppImage is written. The
`--appimage-extract` at create-app-linux.sh:57 was checked the same way
and needs no FUSE, so those two steps are the whole exposure.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019QYyvhRXvSMSRQPaq12Teq
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant