Repository navigation
Conversation
Review complete — corrected head c2ad534Reviewed the shared installation core, lease/admission/startup transitions, scoped hook preservation and automatic/manual workflow boundary. Fixed and pushed:
Exact-head CIAll nine automatic checks passed on c2ad534:
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 / dispositionKeep 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. |
Phase 3 publication and proposed disposable Mint validationPublished
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 accessUse 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 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 Current workspace inspection found no QEMU/virsh executable or 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 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
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 proveA — 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 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 reportingAt 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. |
Phase 3 publication / automatic CI resultPR head: 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. |
|
Published the reviewed disposable-Mint driver and approval packet in 018607b, plus isolated CI integration in 1b2f157.
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. |
|
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:
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. |
|
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. |
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
427b3f2artifact 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_localrequiressd_session_get_seatsuccess. The interactive authority selectsallow_anyfor nonlocal sessions. Our unchanged fixed policy usesallow_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
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 at8350cba.427b3f2050fc6511988d11b7a21ec51b6ae95796. The run succeeded. Native package execution and publication were false; exactly one Linux installer job ran, and Windows packaging was excluded. This produced disabled engineering artifacts, not enabled Update Now UAT certification.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 job117897197367through the connected GitHub log API. Reconstructingpins.jsonfrom 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.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.