Skip to content
This repository was archived by the owner on Nov 12, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
b76058d
fix(msdk): preserve literal names in generated starters
Oct 26, 2026
1a0d616
feat(msdk): generate standalone typed GTK applications and qualify th…
Oct 26, 2026
ccbd73e
test(msdk): provision and pin offline generated model dependencies
Oct 26, 2026
c3f4b72
feat(msdk): package generated native apps and validate install lifecycle
Oct 26, 2026
287886e
fix(msdk): qualify native lifecycle, schema, keyboard controls and pr…
Oct 26, 2026
ed9bc5b
test(msdk): retain source-matched native qualification receipts and b…
Oct 26, 2026
8ece6a5
Add typed service replies, owned processes and storage reference flow
Oct 26, 2026
e8a974b
Retain source-matched macOS runtime and reference-flow validation
Oct 26, 2026
da9f403
Add bounded process streaming and owned partial output subscriptions
Oct 26, 2026
5a4bb35
Retain exact-source bounded streaming qualification on macOS
Oct 26, 2026
4677299
Validate manifests atomically and publish candidate compatibility policy
Oct 26, 2026
1559dfd
Retain version and atomic-manifest core qualification receipts
Oct 26, 2026
050ea0d
Stop SDK commands and preview on manifest or activation failures
Oct 26, 2026
afb2c13
Retain executable CLI failure-path qualification receipts
Oct 26, 2026
f4c94cf
Add request context generations and scoped process cancellation
Oct 26, 2026
659e24b
Retain request context and scoped process qualification receipts
Oct 26, 2026
cb77b66
Qualify native SDK reference flow and make storage output readable
Oct 26, 2026
7a5f4d2
Retain source-matched native runtime and reference app qualification
Oct 26, 2026
6b7c505
Preserve request context through typed GTK reply and error queues
Oct 26, 2026
baf858d
Retain native GTK context-delivery race qualification
Oct 26, 2026
bd002fa
Scope SDK qualification without requiring native ports of every app
Oct 26, 2026
f0a70e0
Add isolated model authoring discovery harness and pinned trial inputs
Oct 26, 2026
0ea6c03
Pin all model sampling penalties and retain packaged defaults
Oct 26, 2026
eb9de20
Retain offline authoring preflight and deferred model admission evidence
Oct 26, 2026
019aee1
Qualify benchmark packaging and clean quit checks
Oct 26, 2026
1d502ec
Retain benchmark packaging preflight evidence
Oct 26, 2026
3a58b4b
Bind streaming process output to request contexts
Oct 26, 2026
6379f7e
Test stale buffered streaming output after exit
Oct 26, 2026
4909d91
Expose scenario gates to SDK authoring trials
Oct 26, 2026
b7b3a99
Keep built-in feeds independent of provider version
Oct 26, 2026
0415f90
Record source-matched ARM SDK validation
Oct 26, 2026
bb90bf7
Add context-bound GTK feed delivery
Oct 26, 2026
a02652b
Record native context-bound feed validation
Oct 26, 2026
dbf4eee
Allow fixture injection of extension version mismatch
Oct 26, 2026
970497c
Record fixture validation and accessibility retry
Oct 26, 2026
e2e6763
Retain accessibility failure and report early app exits
Oct 26, 2026
390e464
Add candidate usage observation semantics
Oct 26, 2026
725cfd2
Validate usage observation snapshots
Oct 26, 2026
eb5218b
Group usage observations for presentation
Oct 26, 2026
aef2e7f
Add candidate GTK usage observation rows
Oct 26, 2026
d4bd990
Capture synthetic usage component previews
Oct 26, 2026
edf7a4e
Fix GTK usage orientation spelling
Oct 26, 2026
f4bcd11
Retain and review candidate usage preview
Oct 26, 2026
dd96c00
Refine usage card hierarchy and stale labels
Oct 26, 2026
d43af49
Retain refined usage card review
Oct 26, 2026
2111eb1
Add provider marks and scrolling usage fixture
Oct 26, 2026
340f370
Retain multi-provider usage review
Oct 26, 2026
0951bde
Show usage provider coverage before accounts
Oct 26, 2026
5a5388e
Retain provider overview visual review
Oct 26, 2026
cc2dace
Add bounded refreshable usage viewport
Oct 26, 2026
c6ec8e6
Retain usage viewport refresh evidence
Oct 26, 2026
ee2eb68
Decode bounded CodexBar provider snapshots
Oct 26, 2026
ce44bab
Record CodexBar decoder validation
Oct 26, 2026
9e8fecc
Add scoped direct CodexBar snapshot read
Oct 26, 2026
2a2882d
Record scoped CodexBar read validation
Oct 26, 2026
5a6a1e6
Apply scoped usage reads safely in GTK
Oct 26, 2026
afd5dcd
Record scoped usage delivery validation
Oct 26, 2026
58dd831
Manage on-demand CodexBar refresh lifecycle
Oct 26, 2026
ee9cd5e
Fix refresh controller strict lint
Oct 26, 2026
4d1f73b
Record on-demand usage refresh validation
Oct 26, 2026
a5b0ff2
Add usage refresh control and failure preview
Oct 26, 2026
e1c91a8
Refine usage failure recovery prompt
Oct 26, 2026
7fc3c7d
Retain usage refresh failure review
Oct 26, 2026
34a26fa
Exercise usage refresh with keyboard and AT-SPI
Oct 26, 2026
9dac12e
Retain usage accessibility probe failures
Oct 26, 2026
477234a
Use explicit usage refresh button label
Oct 26, 2026
78bc524
Retain usage keyboard and accessibility evidence
Oct 26, 2026
5c7dcbc
Add candidate usage status anchor
Oct 26, 2026
dc1c147
Check mapped state for usage anchor hover
Oct 26, 2026
98867b8
Fix usage anchor pinning and interaction probe
Oct 26, 2026
c7e6cdb
Record usage anchor pointer travel diagnostics
Oct 26, 2026
9df8317
Check pointer containment before closing usage popup
Oct 26, 2026
4c1dba2
Trace usage popup pointer transitions in isolated probe
Oct 26, 2026
8465596
Preserve usage reads during popup pin transition
Oct 26, 2026
4570a09
Inspect popup pointer input window
Oct 26, 2026
7fa281f
Keep usage popup open while pointer is on its surface
Oct 26, 2026
26a71f7
Verify unpinned usage popup closes on pointer exit
Oct 26, 2026
7484331
Record passing ARM usage anchor validation
Oct 26, 2026
64ca2db
Add opt-in SDK usage page to shared desktop status menu
Oct 26, 2026
2505254
Record desktop SDK host ARM workflow evidence
Oct 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
208 changes: 208 additions & 0 deletions .github/workflows/msdk.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
name: M-series SDK developer path

on:
workflow_dispatch:
pull_request:
paths:
- "rust/msdk/**"
- "rust/msdk-gtk/**"
- "rust/claude-pantheon-rs/sdk/**"
- "rust/mseries-greeter/data/greeter.ui.json"
- "mseries/sdk-tests/**"
- "mseries/sdk-status-host/**"
- "mseries/dock-taskbar/TaskbarT3RPopover.vala"
- "mseries/codexbar-wingpanel/JsonBoundary.vala"
- "mseries/sdk-bench/**"
- ".github/workflows/msdk.yml"
push:
branches: [dev]
paths:
- "rust/msdk/**"
- "rust/msdk-gtk/**"
- "mseries/sdk-tests/**"
- "mseries/sdk-status-host/**"
- "mseries/dock-taskbar/TaskbarT3RPopover.vala"
- "mseries/codexbar-wingpanel/JsonBoundary.vala"
- "mseries/sdk-bench/**"
- ".github/workflows/msdk.yml"

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
qualify:
runs-on: ubuntu-26.04-arm
timeout-minutes: 25
env:
CARGO_TARGET_DIR: ${{ github.workspace }}/work/sdk-target
steps:
- uses: actions/checkout@v7
- name: Provision native SDK test environment
run: |
# The Azure mirror took >25 minutes for two Rust archives in run
# 40355512113. Use official Ubuntu ports with the existing signed trust.
sudo python3 - <<'PYTHON'
from pathlib import Path
import re
path = Path('/etc/apt/sources.list.d/ubuntu.sources')
text = path.read_text()
path.write_text(re.sub(r'(?m)^URIs:.*$', 'URIs: http://ports.ubuntu.com/ubuntu-ports', text))
PYTHON
sudo apt-get -o Acquire::Retries=2 -o Acquire::http::Timeout=20 update
sudo apt-get -o Acquire::Retries=2 -o Acquire::http::Timeout=20 install -y --no-install-recommends cargo rustc rustfmt rust-clippy \
build-essential pkg-config valac libgtk-4-dev libgranite-7-dev libjson-glib-dev libwayland-dev libwayland-bin \
xvfb xauth dbus-x11 at-spi2-core dpkg-dev desktop-file-utils appstream python3-jsonschema python3-pyatspi python3-dbus xdotool x11-utils
- uses: actions/cache@v6
with:
path: |
~/.cargo/registry
work/sdk-target
key: msdk-native-${{ runner.arch }}-${{ hashFiles('rust/Cargo.lock') }}
restore-keys: msdk-native-${{ runner.arch }}-
- name: Prepare isolated SDK workspace
run: python3 mseries/sdk-tests/prepare.py "$RUNNER_TEMP/sdk"
- name: Core tests and strict lint
run: |
python3 -m unittest discover -s mseries/sdk-bench -p 'test_*.py'
cargo fmt --manifest-path "$RUNNER_TEMP/sdk/Cargo.toml" -p msdk --check
cargo test --manifest-path "$RUNNER_TEMP/sdk/Cargo.toml" -p msdk
cargo clippy --manifest-path "$RUNNER_TEMP/sdk/Cargo.toml" -p msdk --all-targets -- -D warnings
- name: Independent schema and checker agreement
run: python3 mseries/sdk-tests/check-schema.py --msdk "$CARGO_TARGET_DIR/debug/msdk" --rust-root "$RUNNER_TEMP/sdk"
- name: Build and test generated native application
run: |
mkdir -p "$RUNNER_TEMP/sdk-evidence"
"$CARGO_TARGET_DIR/debug/msdk" new settings "$RUNNER_TEMP/starter" --name 'SDK Settings' --id io.github.techmore.SdkSettings
"$CARGO_TARGET_DIR/debug/msdk" gen "$RUNNER_TEMP/starter/app.ui.json" "$RUNNER_TEMP/generated" --sdk-root "$RUNNER_TEMP/sdk"
cargo fmt --manifest-path "$RUNNER_TEMP/generated/Cargo.toml"
cargo test --manifest-path "$RUNNER_TEMP/generated/Cargo.toml" --all-targets
cargo clippy --manifest-path "$RUNNER_TEMP/generated/Cargo.toml" --all-targets -- -D warnings
for mode in light dark; do
theme=Adwaita
if [ "$mode" = dark ]; then theme=Adwaita:dark; fi
GTK_THEME="$theme" GSK_RENDERER=cairo xvfb-run -a dbus-run-session -- \
"$CARGO_TARGET_DIR/debug/msdk-sdksettings" --screenshot "$RUNNER_TEMP/sdk-evidence/settings-$mode.png"
done
cp "$RUNNER_TEMP/sdk/Cargo.lock" "$RUNNER_TEMP/sdk-evidence/sdk-Cargo.lock"
cp "$RUNNER_TEMP/generated/Cargo.lock" "$RUNNER_TEMP/sdk-evidence/generated-Cargo.lock"
git rev-parse HEAD > "$RUNNER_TEMP/sdk-evidence/source.txt"
sha256sum "$CARGO_TARGET_DIR/debug/msdk-sdksettings" > "$RUNNER_TEMP/sdk-evidence/binary.sha256"
- name: Actual keyboard and accessibility controls
run: |
MSDK_PRIVATE_TEST_BUS=1 GSK_RENDERER=cairo xvfb-run -a dbus-run-session -- \
python3 mseries/sdk-tests/controls.py --binary "$CARGO_TARGET_DIR/debug/msdk-sdksettings" --output "$RUNNER_TEMP/sdk-evidence/controls.json"
- name: Compact and larger-text render matrix
run: bash mseries/sdk-tests/render-matrix.sh "$CARGO_TARGET_DIR/debug/msdk-sdksettings" "$RUNNER_TEMP/sdk-evidence/matrix"
- name: Native host lifecycle
run: |
cargo clippy --manifest-path "$RUNNER_TEMP/sdk/Cargo.toml" -p msdk-gtk --all-targets -- -D warnings
MSDK_PRIVATE_TEST_BUS=1 XDG_DATA_HOME="$RUNNER_TEMP/sdk-state" GSK_RENDERER=cairo xvfb-run -a dbus-run-session -- \
cargo test --manifest-path "$RUNNER_TEMP/sdk/Cargo.toml" -p msdk-gtk --test lifecycle --test runtime --test cli --test usage --test codexbar -- --test-threads=1
- name: C host SDK usage boundary
run: |
cargo build --manifest-path "$RUNNER_TEMP/sdk/Cargo.toml" -p msdk-gtk --lib
cc -Wall -Wextra -Werror mseries/sdk-tests/usage-host-abi.c \
-I "$RUNNER_TEMP/sdk/msdk-gtk/include" $(pkg-config --cflags --libs gtk4) \
-L "$CARGO_TARGET_DIR/debug" -lmsdk_gtk -Wl,-rpath,"$CARGO_TARGET_DIR/debug" \
-o "$RUNNER_TEMP/usage-host-abi"
printf '#!/bin/sh\nprintf x >> "%s"\necho "{}"\n' "$RUNNER_TEMP/usage-host-read" > "$RUNNER_TEMP/usage-host-fixture"
chmod 700 "$RUNNER_TEMP/usage-host-fixture"
GSK_RENDERER=cairo xvfb-run -a dbus-run-session -- \
"$RUNNER_TEMP/usage-host-abi" "$RUNNER_TEMP/usage-host-fixture" "$RUNNER_TEMP/usage-host-read"
mkdir -p "$RUNNER_TEMP/vala-output"
valac --directory "$RUNNER_TEMP/vala-output" --pkg gtk4 --vapidir mseries/sdk-status-host --pkg msdk-usage \
-X "-I$RUNNER_TEMP/sdk/msdk-gtk/include" -X "-L$CARGO_TARGET_DIR/debug" -X -lmsdk_gtk \
-X "-Wl,-rpath,$CARGO_TARGET_DIR/debug" -o "$RUNNER_TEMP/usage-vala-host" mseries/sdk-status-host/UsagePage.vala mseries/sdk-tests/usage-vala-host.vala
rm -f "$RUNNER_TEMP/usage-host-read"
GSK_RENDERER=cairo xvfb-run -a dbus-run-session -- \
"$RUNNER_TEMP/usage-vala-host" "$RUNNER_TEMP/usage-host-fixture" "$RUNNER_TEMP/usage-host-read"
- name: Shared desktop status menu with SDK usage
run: |
mkdir -p "$RUNNER_TEMP/status-home/.local/bin" "$RUNNER_TEMP/status-home/.config" "$RUNNER_TEMP/status-home/.cache" "$RUNNER_TEMP/vala-output"
cat > "$RUNNER_TEMP/status-home/.local/bin/codexbar-linux" <<'SCRIPT'
#!/bin/sh
printf x >> "$HOME/reads"
now=$(date -u +%Y-%m-%dT%H:%M:%SZ)
printf '{"schemaVersion":1,"entries":[{"provider":"codex","updatedAt":"%s","windows":[{"key":"week","label":"7 day","remaining":75,"resetsAt":""}]}]}\n' "$now"
SCRIPT
chmod 700 "$RUNNER_TEMP/status-home/.local/bin/codexbar-linux"
valac --directory "$RUNNER_TEMP/vala-output" --define MSDK_STATUS_HOST --pkg gtk4 --pkg granite-7 --pkg json-glib-1.0 --pkg gio-unix-2.0 \
--vapidir mseries/sdk-status-host --pkg msdk-usage \
-X "-I$RUNNER_TEMP/sdk/msdk-gtk/include" -X "-L$CARGO_TARGET_DIR/debug" -X -lmsdk_gtk -X "-Wl,-rpath,$CARGO_TARGET_DIR/debug" \
-o "$RUNNER_TEMP/status-host-integration" mseries/sdk-status-host/UsagePage.vala \
mseries/dock-taskbar/TaskbarT3RPopover.vala mseries/codexbar-wingpanel/JsonBoundary.vala \
mseries/sdk-tests/status-host-stubs.vala mseries/sdk-tests/status-host-integration.vala
for mode in wingpanel dock; do
rm -f "$RUNNER_TEMP/status-home/reads"
HOME="$RUNNER_TEMP/status-home" XDG_CONFIG_HOME="$RUNNER_TEMP/status-home/.config" XDG_CACHE_HOME="$RUNNER_TEMP/status-home/.cache" \
GSETTINGS_BACKEND=memory GTK_A11Y=none G_DEBUG=fatal-criticals GSK_RENDERER=cairo \
xvfb-run -a dbus-run-session -- "$RUNNER_TEMP/status-host-integration" "$RUNNER_TEMP/status-home/reads" "$mode"
done
- name: Capture candidate usage rows for review
run: |
cargo build --manifest-path "$RUNNER_TEMP/sdk/Cargo.toml" -p msdk-gtk --examples
printf '#!/bin/sh\nprintf invalid-json\n' > "$RUNNER_TEMP/usage-fixture-failure"
chmod 700 "$RUNNER_TEMP/usage-fixture-failure"
icons="$RUNNER_TEMP/usage-data/icons/hicolor/scalable/apps"
mkdir -p "$icons"
for provider in openai claude grok opencode; do
install -m 644 "mseries/codexbar-wingpanel/icons/$provider.svg" "$icons/mseries-codexbar-$provider-symbolic.svg"
done
for mode in light dark; do
theme=Adwaita
if [ "$mode" = dark ]; then theme=Adwaita:dark; fi
for points in 10 15; do
config="$RUNNER_TEMP/usage-config-$mode-$points"
mkdir -p "$config/gtk-4.0"
printf '[Settings]\ngtk-font-name=Sans %s\n' "$points" > "$config/gtk-4.0/settings.ini"
XDG_DATA_HOME="$RUNNER_TEMP/usage-data" XDG_CONFIG_HOME="$config" GTK_THEME="$theme" GSK_RENDERER=cairo MSDK_MATRIX_POINTS="$points" \
xvfb-run -a dbus-run-session -- bash -eu -c '
python3 mseries/sdk-tests/font-profile.py
"$CARGO_TARGET_DIR/debug/examples/usage_preview" "$RUNNER_TEMP/sdk-evidence/usage-'"$mode"'-'"$points"'.png"
'
XDG_DATA_HOME="$RUNNER_TEMP/usage-data" XDG_CONFIG_HOME="$config" GTK_THEME="$theme" GSK_RENDERER=cairo MSDK_USAGE_SCROLL_END=1 \
xvfb-run -a dbus-run-session -- \
"$CARGO_TARGET_DIR/debug/examples/usage_preview" "$RUNNER_TEMP/sdk-evidence/usage-$mode-$points-end.png"
XDG_DATA_HOME="$RUNNER_TEMP/usage-data" XDG_CONFIG_HOME="$config" GTK_THEME="$theme" GSK_RENDERER=cairo \
xvfb-run -a dbus-run-session -- \
"$CARGO_TARGET_DIR/debug/examples/usage_control_preview" "$RUNNER_TEMP/sdk-evidence/usage-error-$mode-$points.png" "$RUNNER_TEMP/usage-fixture-failure"
done
done
- name: Usage refresh keyboard and accessibility
run: |
MSDK_PRIVATE_TEST_BUS=1 GSK_RENDERER=cairo xvfb-run -a dbus-run-session -- \
python3 mseries/sdk-tests/usage-controls.py \
--binary "$CARGO_TARGET_DIR/debug/examples/usage_control_interactive" \
--output "$RUNNER_TEMP/sdk-evidence/usage-controls.json"
- name: Candidate usage anchor interactions
run: |
MSDK_PRIVATE_TEST_BUS=1 GSK_RENDERER=cairo xvfb-run -a dbus-run-session -- \
python3 mseries/sdk-tests/usage-anchor-controls.py \
--binary "$CARGO_TARGET_DIR/debug/examples/usage_anchor_interactive" \
--output "$RUNNER_TEMP/sdk-evidence/usage-anchor-controls.json"
- name: Package, install, reinstall and remove the generated app
run: |
"$CARGO_TARGET_DIR/debug/msdk" pack "$RUNNER_TEMP/generated" \
--binary "$CARGO_TARGET_DIR/debug/msdk-sdksettings" \
--output "$RUNNER_TEMP/sdk-evidence/settings.deb"
dpkg-deb --info "$RUNNER_TEMP/sdk-evidence/settings.deb" > "$RUNNER_TEMP/sdk-evidence/package-info.txt"
sudo dpkg --install "$RUNNER_TEMP/sdk-evidence/settings.deb"
sudo dpkg --install "$RUNNER_TEMP/sdk-evidence/settings.deb"
cmp "$CARGO_TARGET_DIR/debug/msdk-sdksettings" /usr/bin/io.github.techmore.SdkSettings
GTK_THEME=Adwaita GSK_RENDERER=cairo xvfb-run -a dbus-run-session -- \
/usr/bin/io.github.techmore.SdkSettings --screenshot "$RUNNER_TEMP/sdk-evidence/installed.png"
sha256sum /usr/bin/io.github.techmore.SdkSettings > "$RUNNER_TEMP/sdk-evidence/installed.sha256"
sudo dpkg --remove msdk-io.github.techmore.sdksettings
test ! -e /usr/bin/io.github.techmore.SdkSettings
test ! -e /usr/share/applications/io.github.techmore.SdkSettings.desktop
test ! -e /usr/share/icons/hicolor/scalable/apps/io.github.techmore.SdkSettings.svg
- uses: actions/upload-artifact@v7
if: always()
with:
name: msdk-native-${{ github.run_id }}
path: ${{ runner.temp }}/sdk-evidence/
if-no-files-found: warn
22 changes: 17 additions & 5 deletions mseries/APP-BUILDING-GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@ The owner rejected the result. Both apps are incomplete and deferred.

## First establish what the person will experience

The owner clarified on 2026-10-26 that not every app needs a native experience.
Choose the UI architecture for the actual product journey: existing web UI,
wrapper, webview/hybrid or native controls as appropriate. SDK completion needs
reusable capabilities and representative integration proof, not native rewrites
of every app or full feature parity with every existing client. Do not promise
a WebView vocabulary component or other integration that has not been shipped.

Write a short outcome contract before implementation:

- What opens, which window owns navigation, and what each primary action does.
Expand Down Expand Up @@ -37,8 +44,9 @@ necessary. Do not add recurring notifications or timers just to enforce this rul

## Use the implemented SDK authoring path

Descriptions (`.msdk` or JSON), rules and declared services are the primary
authoring path. `msdk new` already generates a description, gates and README
For SDK-rendered native UI, descriptions (`.msdk` or JSON), rules and declared
services are the primary authoring path. This is not a requirement to replace
an appropriate existing frontend. `msdk new` generates a description, gates and README
from six templates; it does not generate a complete Cargo project, backend,
standalone executable or package. Use app-local Rust `Services`/`Logic` only
where the supported vocabulary is insufficient; record each escape hatch and
Expand All @@ -51,9 +59,13 @@ transport, account mappings and GitHub services remain app-specific adapters.

Use `cargo run -p msdk -- templates` from `rust/` to discover actual starters,
then the CLI's `describe`, `check` and `gate` commands. Consult
[RUST-PANTHEON-SDK.md](RUST-PANTHEON-SDK.md) for boundaries. Do not present
proposed `msdk gen`, `msdk pack`, `msdk parity` or live introspection commands
as available. Keep native chrome, scaling, accessibility, recoverable states,
[RUST-PANTHEON-SDK.md](RUST-PANTHEON-SDK.md) for boundaries. Use `msdk gen <description> <new-directory> --sdk-root <checkout>/rust`
when a standalone Cargo executable and typed models are needed. It preserves
rules and the GTK host; custom service backends are app-owned extension points.
Use `msdk pack <generated-project> --binary <built-ELF> --output <new.deb>`
on the matching Linux architecture after building the intended artifact; package
creation is separate from install/reinstall/remove and loaded-host qualification.
Do not present proposed `msdk parity` or live introspection commands as available. Keep native chrome, scaling, accessibility, recoverable states,
diagnostics and install/remove behavior in the delivered outcome contract.

## Keep development builds fast
Expand Down
Loading
Loading