Skip to content

Add Linux app-only Update Now foundations and native validation path (#72) - #73

Draft
rdpollard wants to merge 33 commits into
mainfrom
feat/issue72-app-only-pr
Draft

rdpollard wants to merge 33 commits into
mainfrom
feat/issue72-app-only-pr

Conversation

@rdpollard

@rdpollard rdpollard commented Oct 17, 2026 •

Copy link
Copy Markdown
Member

Current Mint diagnosis and artifact correction — 2026-10-19

Current implementation HEAD: 43c4f24. The owner-reported Mint session is active/local, UID 1000, with polkit running and SDE 1.2.9 installed. The fixed temporary broker/action are absent and the external maintenance entry/helper lack V2 support. An attempted unelevated launch of Cinnamon's packaged GNOME agent failed registration because an authentication agent already exists for the subject. The limited process scan did not establish absence. The accessibility-bus warning names a root-cache socket; its relevance to the original missing prompt is unproven. No second agent launch, guessed settings repair or authorization retry is requested.

The old 427b3f2 artifact pins below remain historical build evidence. Its synthetic 1.2.1/1.2.2 pair is unsuitable for the installed spare and must not be used to force a downgrade. Fixture build preparation and the ignored native driver now target an unpublished same-version 1.2.9 prerequisite baseline and 1.2.10 candidate. These are test identities, not a release allocation. The prerequisite baseline contains new code and different bytes; it would require a separately reviewed same-version reinstall, not an assumption of compatibility. No replacement installer dispatch or package operation was performed for this diagnosis.

Recorded owner-supplied diagnosis. The subsequent read-only owner report identifies session c11 as xrdp-sesman, display :10, with no logind Seat despite Active=yes and Remote=no. Cinnamon PID 15648 has a system-bus connection in c11; polkit reports an agent already registered. Upstream Cinnamon 6.6 includes its own agent, so absence of a standalone agent executable is not evidence of absence. Its precise installed version/registered object owner has not been independently attested.

In matching upstream polkit 124 session-monitor code, is_session_local requires sd_session_get_seat success. The interactive authority selects allow_any for nonlocal sessions. Our unchanged fixed policy uses allow_any=no; this explains the current XRDP context's expected no-prompt denial. It is not retrospective proof of the original attempt's unrecorded subject/session or a new native denial test. Cinnamon's built-in agent source.

Next: verify an active physical-console Cinnamon session with a nonempty seat, normally seat0, before reviewing/authorizing the two-file disabled-broker retry. Keep local-only policy unchanged; no additional agent, root-cache permission change or service/package repair is needed. The direct console instructions are supplied in chat. Local focused archive/workflow/Rust checks, Clippy, formatting and actionlint pass. Automatic PR checks passed at this HEAD. Source execution/close gates remain false; PR remains draft/unmerged.

Update Now needs an OS-authorized app-only worker that survives GUI closure and installs only after every SDE session closes. This draft implements the shared core, protected Linux request/progress/close paths and Schedule UI for #72. Update Now and protected close remain disabled pending native proof.

The approved reduced-scope decision governs behavior: explicit upfront installation consent covers ordinary close/crashes; keeping a window open defers installation; no immediate cancellation; 15-minute overall and two-minute Ready deadlines include suspend. The existing signature, package identity, recovery and maintenance protections remain.

Implementation

  • Shared installation core borrows caller-held O/A/S leases, retains durable intent on uncertainty, skips development tools in app-only scope, and preserves scheduled maintenance behavior. Package hooks read protected app-only scope and preserve maintenance configuration.
  • Fixed polkit broker and detached one-shot worker use trusted snapshots, protected per-user receipts/progress, exact candidate/deployed-file capability hashes, bounded retention and deadlines. Stdout/progress never supplies installation authority or proves worker liveness. Unknown receipts/recovery block another attempt.
  • Schedule supports authenticated read-only official stable discovery, upfront consent, preparation/Ready/results and protected receipt reconnection. Prepared fixed launch/close transports retain common operation exclusion. Desktop execution, broker execution and close source gates remain false. Restricted startup uses a native notice; Windows privilege/progress implementation remains pending.
  • The Linux maintenance adapter now enters new sessions through I/A/I/S/I and blocks orphaned scope intent. Inherited sessions retain S without reentering A. V2 source support does not migrate installed external helpers or apply a tool baseline.
  • Linux-only installer selection and an opt-in unpublished DEB fixture pair/test-driver build now support native preparation without Windows packaging, native execution, signing or publication. The ignored root driver pins artifacts/installed bytes and exercises one real app-only upgrade through the existing authenticated staging/shared core. It checks admission, retained leases, postchecks and other-package/tool/schedule/pause preservation. It issues no native capability receipt. Test-only signatures remain rejected by the production key.

Validation and current build

At 427b3f2, local QA passes: 65 updater library tests (ACL/native package cases ignored), all-target updater Clippy/Rustfmt, four archive/diagnostic checks, 11 CI boundaries, nine CI-scope checks, ten broker mocks, twelve hook mocks, seven backend contracts, Linux runtime/integrity and actionlint. Three pure Python admission cases pass; nine protected cases were skipped locally; the existing disposable-root CI job passed all 12 Python checks (nine protected plus three pure). Archive tests construct temporary DEBs but never install them. Unchanged UI/desktop/browser areas reuse the prior green evidence: 142 UI tests, 18 ordinary desktop tests and three affected browser cases at 8350cba.

Remaining release gates

The owner's latest continuation authorizes native/build/release progress and supersedes historical blanket deferrals. The stopped spare-Mint attempt still requires a reviewed exact plan and specific authorization before retry. A pinned read-only desktop diagnostic is prepared; no retry or agent repair is assumed. Optional runner/VM/media infrastructure and Windows implementation/packaging remain paused.

Remaining engineering/native gates: installed external-helper migration; working graphical authorization and original-UID correlation; real kernel ACL/user separation; independent worker/child accounting, close/reopen/suspend/recovery; compatible installed baseline/candidate artifacts; isolated full-worker signed-discovery fixture and evidence-backed capability provisioning/renewal; actual GUI exit/restricted-startup behavior and owner Mint UAT. Windows implementation/native UAT follows before the intended stable promotion. The synthetic 1.2.1/1.2.2 pair must not cause a downgrade of a newer installed spare; public stable v1.2.9 is not assumed hook-compatible. PR stays draft/unmerged until the applicable gates pass; no release is yet published.

Historical evidence remains preserved: W2h's message-authorship counterexample, W2m's immediate cleanup failure, limited W2i–W2l evidence, managed-filesystem ACL EOPNOTSUPP, and the earlier accidental selection of two Windows package-changing tests on disposable CI runners. Those tests are now ignored/manual-opt-in/script-guarded. The spare-Mint two-file attempt returned 127 without a prompt; it was not cancellation or approved entry. User-reported ownership/hash/inode/mode-checked cleanup removed those two files only. No whole-host cleanup or authentication safety is inferred. Stopped-attempt record.

Produced Linux artifact pins

Build source: 427b3f2050fc6511988d11b7a21ec51b6ae95796. The generated record was read from native job 117897197367 through the connected GitHub log API. Reconstructing pins.json from that record reproduced its reported SHA-256 exactly. Cloud artifact ZIP download was blocked by the storage-host policy; no local DEB-byte verification or native execution is claimed.

Input SHA-256
pins.json f1871823cf36b310f2351047bf0bf4b390a467728cd0333588c4b1d0de013299
Baseline DEB (synthetic fixture 1.2.1) 85935e4c88a67f0130795c4390691abdb6789f8dbd5060bfdff295ff5d1e764d
Candidate DEB (synthetic fixture 1.2.2) c41ec0130e53f723e6b9d1fb26b94db85926e861be6fd143e38b8d1c2dd355c2
Compiled native-tests b63000a93cf854b4efcc7dfa63f979b54fd642a1a985ba29241fc12b50e56910
Fixture artifact ZIP 1721584af6d33d7e720ef5190e79eabef671ae77955efb72f084a1b2495afef6

Before any native deployment, verify the downloaded ZIP, pin file and each contained file against these hashes and the record. The original Mint retry is still stopped. The read-only existing-desktop diagnostic is the next host input; exact agent/package/root operations will be reviewed against that result. No source execution gate or capability receipt was enabled by building these artifacts.

Physical-console authorization gate (14ab47b)

The owner-reported latest Mint session is UID 1000, seat0, lightdm/X11, display :0, active, Remote=no. The preceding XRDP session had no seat: polkit 124 selects implicit-any=no there. This predicts denial, but the original attempt's session was not captured and its cause is not proved.

The reviewed installed-spare packet pins helper/source commit bca5aa4. It proposes only two temporary root-owned files, one visible cancellation, one approved disabled entry (exit 78), and identity-checked removal retaining a private journal. It does not bootstrap, install packages, migrate helpers, start another agent, enable execution/close or create capabilities. The owner's required specific retry authorization is still pending; nothing has executed on Mint.

Validation: 13 new disposable-filesystem/refusal tests, 11 workflow-boundary tests, nine CI-scope tests and four artifact tests pass locally; actionlint, six Bash command-block syntax checks and whitespace checks pass. Existing app evidence is reused. Automatic CI at current HEAD is pending; no replacement installer build or native package dispatch was requested. Full-worker/capability, V2 migration/package and protected-close native gates remain before enabled Linux UAT and eventual Windows UAT/stable promotion.

Copy link
Copy Markdown
Member Author

Review complete — corrected head c2ad534

Reviewed the shared installation core, lease/admission/startup transitions, scoped hook preservation and automatic/manual workflow boundary. Fixed and pushed:

  1. Windows journal sharing: a live no-sharing journal writer blocked package-hook readers. Publication now flushes then seals the journal into a read-only, reader-sharing handle that still excludes writes/deletion. Terminal cleanup does not attempt to flush a read-only Windows handle.
  2. Legacy worker compatibility: older deployed Windows workers still retain their original exclusive journal handles. Hooks now use a separate closed protected installation-scope.json hint rather than reading that older journal. Only app-only transactions publish the hint, before native launch. Missing hint preserves legacy scheduled behavior; malformed present hints fail closed. Hint/journal both block startup, and terminal cleanup removes the hint before the journal; hint cleanup failure preserves the journal. Actual installed old-to-new DEB/NSIS proof remains pending.
  3. False-green Windows CI: multi-command Rust validation now uses fail-fast Bash, so later formatting/lint success cannot mask test failures. Bounded escaped annotations expose test failures through the GitHub API. Corrected the Windows capability fixture owner instead of weakening production ownership checks.
  4. Stale contract test: release dependency assertions now check the required validation/native prerequisites and explicit publication choices rather than an exact outdated dependency-list string.
  5. Package-changing tests hidden in desktop unit execution: the initial workflow split missed two existing Windows tests gated only by GITHUB_ACTIONS (Node migration and Chocolatey fixture installation). Automatic CI reached that step; package operations may have occurred on disposable runners. A cancellation attempt found the run already complete, so this is NOT recorded as prevented. Both tests are now ignored by default, require an explicit native-package opt-in, and run only from the manually gated native step. The Node migration script independently requires the opt-in. No student PC was targeted.

Exact-head CI

All nine automatic checks passed on c2ad534:

  • Application validation run: scope, UI/browser/accessibility/backend checks, Ubuntu/Windows trust and isolated coordination checks, Ubuntu/Windows desktop compilation and ordinary unit tests. Installer/native-package job and release job both SKIPPED.
  • Fixture helper run: workflow definitions and disposable Windows/Mint fixture setup/restoration.

Local affected QA also passed: 16 protected Linux coordination test entries (required UID-0 fixture execution; empty final inventory and container/image removal), 40 updater library tests (four native/protected cases deliberately filtered), Windows GNU coordination lint/compilation, Rust formatting, actionlint/shellcheck, backend contracts, 21 workflow-policy/evidence/reporting tests, seven mocked Linux hook checks, and fifteen PowerShell scope-parser cases. Native Windows CI additionally executes the coordination and pure parser checks; Linux/cross-compilation evidence is not substituted for Windows execution.

No application-build or native-package workflow was explicitly dispatched and no release preparation/publication occurred. The earlier automatic desktop-test exposure is a distinct acknowledged exception, now corrected, rather than a claim of zero package execution across every prior CI attempt.

Remaining gates / disposition

Keep this PR draft and unmerged. Update Now remains unwired/disabled. Before enabling it, complete deployed bootstrap/launcher/package-hook capability migration, fixed authorization/request claiming and independent worker/progress/deadline integration, installed DEB/NSIS upgrade preservation/recovery tests, and native durability proof. Owner desktop UAT remains pending on owned Mint and Windows 11 PCs after an authorized test build. Windows Server CI does not certify Windows 11 desktop UAT.

Historical evidence remains unchanged: W2h is a counterexample; W2m immediate cleanup remains Fail; W2n native N1/N2 remain NotRun. Diagnostic completion, cleanup correctness, authentication safety and production readiness remain separate. No production-readiness claim is made by these green foundation checks.

rdpollard commented Oct 17, 2026 •

Copy link
Copy Markdown
Member Author

Phase 3 publication and proposed disposable Mint validation

Published a2a518684a77a5fc86287144f932c1510f1971e8 to this draft PR's branch. The reviewed implementation, local evidence and retained ACL failure are in:

  • docs/design/APP-UPDATE-NOW-REDUCED-SCOPE-PHASE3.md
  • docs/design/evidence/ISSUE72-PHASE3-LOCAL.json

This is a proposal for approval, not an executed native test or permission to enable Update Now. Keep the PR draft/unmerged, application builds/native package workflows/release work deferred. No student laptop or installed SDE should be used for these tests.

Environment and access

Use one ephemeral Linux Mint 22.3 Cinnamon x86-64 VM, 2 vCPUs, 4 GiB RAM, a 30-GiB disposable ext4 disk, its real kernel/systemd/logind/polkit/Cinnamon session and authentication agent. Boot/install official Cinnamon media; verify its SHA-256 against the signed upstream checksum list and the repository's pinned Mint signing fingerprint 27DEB15644C6B3CF3BD7D291300F846BA25BAE09. Record and pin the exact media digest before execution. Do not reuse the repository's Xfce ISO digest for Cinnamon or treat the existing Mint-userland container as a desktop VM.

Preferred host: a disposable Ubuntu 24.04 x86-64 hosted runner with verified working KVM. This would require a separately authorized, explicit validation-only dispatch, not any existing application-build or native-package workflow. Preflight /dev/kvm, usable virtualization, RAM/disk, signed-media access and console automation before provisioning. If KVM/media/desktop access is unavailable, stop and report the specific environment blocker; do not silently substitute Docker, chroot, Xvfb, TCG or an installed student PC. No VM/workflow has been created or dispatched by this proposal.

Current workspace inspection found no QEMU/virsh executable or /dev/kvm, and managed-environment readiness reports no attached remote-host capability/credentials. A suitable host and authenticated Cinnamon-media checksum are prerequisites, not established access. Allowed media hosts must be checked through the supported network-policy configuration; do not bypass a denied download.

Guest control: ephemeral SSH key from runner to guest over loopback-only forwarding, graphical console/automation local to the host, no public VNC/SSH listener, no host home/socket/source writable mounts. Three fresh guest accounts: non-admin sde-student, unrelated non-admin sde-other, admin sde-mentor. Generate guest-only credentials securely and omit credentials, typed passwords and authentication-dialog secrets from artifacts. Launch authorization from an actual active Cinnamon session, not SSH or root runuser with copied session environment. Record loginctl session and subject PID evidence. User desktop UAT on the owner's PCs remains separate.

Development components and investigating disposable access are already authorized. The remaining approval concerns executing the bounded privileged guest tests below; it does not ask the owner to choose routine engineering tools.

Exact privileged operations requested for that VM only

  1. Provision the disposable Mint guest, test accounts/admin membership, ext4 storage and active Cinnamon login. Install only missing OS/test development components necessary for console automation, ACL inspection, compiling the updater verifier/probe and SSH; record versions. Do not install, upgrade, repair or remove an SDE application/tool package. This is OS/test-environment provisioning, not permission to run application package tests.
  2. Assert the VM contains no installed SDE, production updater state or colliding fixed fixture paths. Abort rather than overwrite an existing installation. Create an ownership manifest and before-state inventory. Provision a root-owned fixture tree at /var/lib/skyview-robotics/self-update; record every created file/identity. Do not create or modify /var/lib/skyview-robotics-coordination: the proposed failure-path/sentinel cases do not require it. Existing ancestors must be trusted and preserved. Use app-only and app-only/runs traversal directories 0711, request.gate 0600, private engine/run contents and bounded UUID receipts.
  3. Create a manifest-owned /opt/sde-phase3-validation/ tree with a root-owned 0755 copy of the exact verifier tool for unprivileged read-only progress queries (the private worker snapshot itself stays 0700). Copy the exact reviewed broker to /usr/local/libexec/skyview-app-update-request (root:root, regular single-link file, 0755) and the exact reviewed policy to /usr/share/polkit-1/actions/org.skyviewrobotics.sde.app-update.policy (root:root, 0644). Allow polkit's normal policy-file discovery/reload; do not grant broad interpreter/sudo authorization, add permissive rules, or create/register an SDE task/service/timer. Do not modify the weekly maintenance entry point.
  4. Seed only synthetic protected engine/active receipts for the named tests. For the real production-worker test, place an intentionally invalid empty capability receipt {}, not a native-validation attestation. It must fail capabilities before installed-identity discovery, network staging or any package probe/install. No receipt claiming nativeValidation: linux-app-only-v1, candidate allowlist, V2 maintenance relabeling or feature enablement is authorized.
  5. Act as the fresh guest accounts to exercise real polkit denial/authorization and kernel ACL access. As guest root, inspect ownership, ACLs, process/session/cgroup identities, claimed requests and bounded progress; signal only positively identified run-owned GUI surrogates, authentication-agent instances if specifically needed, and sentinel workers. Do not signal a real installer, package manager, unrelated process or uncertain child. No real installer will be present or invoked in this validation.
  6. Export bounded, sanitized test evidence, verify owned processes/descriptors ended, remove only manifest-owned fixture files/accounts/policy/launcher after identity checks, and destroy the entire VM/disk/key material. If ownership or child termination is uncertain, do not clear evidence to resume testing; stop, preserve bounded evidence, then discard the VM. Never weaken permissions as a cleanup workaround.

Host-side privilege, if needed, is limited to development/virtualization provisioning and this one guest. No changes to the host's SDE state, polkit policy, maintenance or package database for SDE are included. The validation driver/fixture implementation and validation-only workflow must be reviewed before execution; this plan does not yet contain a ready-to-run driver.

Tests and what they can prove

A — prerequisite and owned-file ACL control. Run the exact ignored Rust ACL case by full test name only, inspect the kernel ACL and effective permissions on supported guest storage, and remove the owned scratch file. Then test root-owned publication through the real production-worker path in B. Pass: intended UID reads; other UID/group cannot read; neither non-admin UID can modify, replace or link protected records/ancestors. Stop on EOPNOTSUPP, wrong masks/ownership or unexpected access. The earlier managed-filesystem EOPNOTSUPP failure remains preserved even if Mint passes.

B — actual broker + actual production worker, deliberate safe deferral. Use a release-profile build of the exact updater-verifier tool, verify it fits the unchanged 64-MiB snapshot bound (development compilation only, no Tauri/application installer build), root fixture engine and invalid {} capability receipt. Launch the fixed broker via pkexec from the active student desktop. Test dismissal/wrong authorization, correct alternate-admin authorization, extra-argument rejection and inactive-subject rejection. Record the polkit action/subject and authenticated result without secret data. Successful OS authorization should return a request UUID; the exact production worker should claim once and publish protected Deferred progress with the invalid-capability error. Confirm no installed identity/package probe, network staging, tool command, A/S admission or installation intent was reached. Verify original student UID remains progress reader after mentor authorization; progress CLI under the other UID fails. Replaying a claimed snapshot must fail without another claim or action. Denial or rejected arguments must create no request. This proves a real fixed authorization/claim/progress failure path, not the admitted installation path.

C — broker lifecycle using an explicitly harmless sentinel worker. In a separate fresh fixture/snapshot, let the unchanged broker copy/start a clearly marked test-only sentinel executable under the expected worker filename. No production capability receipt or install entry point is used. The sentinel only records its identity and waits on a root-owned bounded barrier; it cannot discover/download/install anything. Observe the sentinel at the barrier before closing/killing the run-owned desktop GUI surrogate or ending its launcher/authorization-agent process. Record executable digest, PID plus process-instance identity, PPID, SID/PGID, cgroup, UID, FDs and barrier ordering before/after. Require no inherited GUI-control/stdio/gate descriptors and continued sentinel responsiveness until explicitly released. Include normal parent closure and abrupt surrogate loss; separately record whether desktop/application-scope teardown kills the child. A new session alone is not proof of cgroup independence. Stop on any unexpected child loss, retained GUI pipe or ownership ambiguity. This is evidence about the unchanged broker's subprocess lifetime, not production worker admission, actual Tauri scope behavior, replacement, or package-child supervision.

Bounds, pass/fail and reporting

At most eight retained attempts per fresh fixture; preserve the production 32-publication/4096-byte progress bounds, 64-MiB worker bound and approved 15-minute/2-minute production deadlines unchanged. Lifecycle sentinel barrier deadline: explicitly test-only 30 seconds; outer case timeout 90 seconds and whole validation 30 minutes, never applied to an installer. Cap text evidence at 64 KiB per case / 1 MiB total; exclude secrets and raw package output. Evidence failure stops before advancing a case. Record unsupported prerequisites as Unsupported/NotRun, failed assertions as Fail, and cleanup separately. Do not tune permissions, capacities or authentication policy to obtain a pass.

Stop the suite on unexpected authorization, request/reader mismatch, replay, broader access, filesystem unsupported behavior, premature admission/install activity, escaping/unknown children or cleanup uncertainty. Record failures before teardown. No retries that reset authorization/claims or erase failure evidence. Verify non-invocation using the pinned source ordering and bounded execution evidence where available; lack of an output log alone is not proof that a command did not run. Do not trace unprivileged pkexec in a way that disables or changes setuid authorization semantics.

Still unproven after A–C: positive production capabilities and actual O/A/S handoff; production GUI/application-scope and replacement lifetime; package children; suspend/reboot and native deadline races; durable recovery and current/candidate hook migration; a complete app-only upgrade; Windows privilege behavior. A future validation stage must authorize those explicitly. B is intentionally blocked before them, and C's sentinel must never be described as authenticating or safely installing SDE.

Preserve historical W2h counterexample, W2i–W2l limited results, W2m immediate cleanup Fail and W2n N1/N2 NotRun. Diagnostic completion, cleanup correctness, authentication safety and production readiness remain distinct.

Copy link
Copy Markdown
Member Author

Phase 3 publication / automatic CI result

PR head: a2a518684a77a5fc86287144f932c1510f1971e8 (published reviewed Phase 3 commit). PR remains draft, open and unmerged.

The main automatic validation run passed: https://github.com/stormbots/Tactics-Strategy-Dev-Environments/actions/runs/39045654949 . It includes UI/accessibility/workflow checks, actual Windows and Linux compilation/tests, trust and isolated coordination. Installer/native-package and release jobs were skipped; no application-build, native-package or release workflow was dispatched.

The first fixture-helper attempt failed during authenticated Mint environment preparation with curl exit 28 (download timeout): https://github.com/stormbots/Tactics-Strategy-Dev-Environments/actions/runs/39045654874/job/117433733698 . No Mint fixture test ran in that attempt; the subsequent artifact step also failed because no evidence had been produced. Raw log download is blocked by the managed network policy; failure classification uses the job step and GitHub annotation. A single rerun of that automatic Mint job was requested, not an application/native-package dispatch. Preserve this original infrastructure failure separately from subsequent test results.

Final result: all nine automatic checks pass on this exact head. Mint succeeded on the single targeted retry (attempt 2): https://github.com/stormbots/Tactics-Strategy-Dev-Environments/actions/runs/39045654874/job/117436593283 . No source change was needed for this transient environment-download failure. Windows compilation/tests passed natively on Server 2022; this does not replace Win11 desktop UAT.

The concrete, unexecuted disposable Mint proposal is in #73 (comment) . It identifies environment prerequisites and exact guest privileged operations; its native tests and setup have not run. Real worker safe deferral/progress and test-only sentinel lifecycle evidence have distinct scopes. Managed-filesystem ACL EOPNOTSUPP and historical counterexamples/failures remain preserved. No native authentication/cleanup/production-readiness claim follows from automatic CI.

Copy link
Copy Markdown
Member Author

Published the reviewed disposable-Mint driver and approval packet in 018607b, plus isolated CI integration in 1b2f157.

  • Added automatic mocked-checks and a separate read-only host-preflight job in mint-validation-preflight.yml; neither needs a merge or installer dispatch.
  • Local QA: 28 mocked driver checks, 10 static workflow-boundary checks and 7 scope-policy checks passed. Embedded probe syntax and whitespace checks passed without executing native probes locally.
  • Preflight observes host resources, trusted tool presence and KVM API only. No dependency installation, media download, VM creation, elevation, guest testing or device-permission changes. Its JSON always retains ready=false and explicit media/provisioning/guest-authorization gates. A successful inventory is not native validation.
  • Read-only permissions, credential-free checkout, no secrets, bounded execution and seven-day artifact retention. The existing application/package/publication boundaries are unchanged.
  • Runbook: docs/design/ISSUE72-MINT-VALIDATION-RUNBOOK.md. CI boundary review: docs/design/ISSUE72-MINT-PREFLIGHT-CI.md.

PR #73 remains draft and unmerged. No application build, native package workflow or release preparation was dispatched. Privileged guest operations and native guest tests remain deferred. Historical W2m cleanup failure and other research outcomes remain preserved; diagnostic completion, cleanup correctness and authentication safety remain distinct.

Copy link
Copy Markdown
Member Author

Follow-up: fixed an incorrect artifact-upload action SHA in 50f81a0 using the verified upstream actions/upload-artifact v4 ref. Both new jobs now pass on 50f81a0:
https://github.com/stormbots/Tactics-Strategy-Dev-Environments/actions/runs/39069256268

  • mocked-checks: Pass (28 mocked tests)
  • host-preflight: Pass; mint-host-preflight JSON artifact uploaded
  • workflow-boundary local rerun: 10 Pass

The initial preflight job failed in setup before any probe; it is retained as failed evidence. The corrected automatic PR run passed. No explicit workflow dispatch occurred.

The environment's network path returned Forbidden when fetching the Actions log download endpoint, so the actual host capability values and artifact contents have not yet been inspected here. A green inventory job does not establish KVM/media/console readiness. Existing broader PR CI was still in progress at this check; no all-checks-green claim.

PR remains draft/unmerged. Privileged guest operations, native guest tests, application/package workflow dispatch and release preparation remain deferred. Next step: inspect the preflight evidence, resolve host/media/console prerequisites through separately reviewed preparation, and present exact guest operations for authorization before execution.

Copy link
Copy Markdown
Member Author

Inspected the read-only host report through the Checks API after artifact storage returned 403. Published 2027415 adds a bounded, escaped notice containing the same non-secret JSON; 2f520dc records observed evidence and the conditional guest authorization packet.

Observed Ubuntu 24.04/x86_64, 4 CPUs, ~14.2 GiB available RAM and ~85.8 GiB disk. KVM API unavailable to probe; fixed tool set failed. This does not identify missing hardware vs permissions. Console isolation and media remain unestablished. No fallback used.

Review packet: ISSUE72-MINT-EXECUTION-AUTHORIZATION.md. Raw observed JSON is alongside it under evidence/. It binds the run/check IDs and PR merge SHA, without conflating that SHA with feature HEAD.

Access blockers: no attached usable KVM host; official Mint metadata download returned 403; self-hosted runner inventory returned 403 Resource not accessible by integration. No host, media or console readiness claim. Resolving these needs secure host access/network configuration, not relaxing updater checks or approving package tests.

Local rerun: 28 mocked checks and 10 workflow boundary checks Pass; probe syntax and whitespace Pass. On 2027415, host/mocks/workflow/Windows fixtures/Linux desktop and both trust checks passed; general checks, Windows desktop and Mint fixtures were still pending when inspected. Later checks must be read against their exact head; no all-green claim.

Conditional guest authorization scope is precise: fresh guest/accounts/test dependencies; five root-staged artifacts and bound approval; only the exact named ACL test; temporary fixed broker/polkit/fixture paths with invalid {} capabilities; six negative/lifecycle cases; enrolled GUI-surrogate pidfd signal only; sealed ownership cleanup and whole-VM disposal. Host/media/console gates must pass first. No authorization is requested to modify student PCs or install SDE packages.

PR #73 remains draft/unmerged. No privileged guest execution, native guest tests, application-build dispatch, native-package workflow dispatch or release preparation occurred. Historical failure/outcome distinctions are preserved.

@rdpollard rdpollard changed the title Add app-only updater foundations and separate validation from packaging Add app-only updater foundations and disabled Schedule integration (#72) Oct 18, 2026
@rdpollard rdpollard changed the title Add app-only updater foundations and disabled Schedule integration (#72) Add Linux app-only Update Now foundations and native validation path (#72) Oct 19, 2026

This branch has not been deployed

No deployments
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