Skip to content

Isolate Mint preparation helpers and mocked-only CI - #76

Merged
rdpollard merged 5 commits into
mainfrom
infra/mint-media-console-checks
Oct 18, 2026
Merged

rdpollard merged 5 commits into
mainfrom
infra/mint-media-console-checks

Conversation

@rdpollard

@rdpollard rdpollard commented Oct 18, 2026 •

Copy link
Copy Markdown
Member

Adds the reviewed, isolated Mint media-authentication and offline console-plan helpers on a separate infrastructure branch. Helpers have no CLI or active workflow caller. Retains the inventory closeout, ownership/signature/digest/resource/stop gates, and explicit native-validation limitations.

Automatic hosted-Ubuntu validation runs static policy checks and mocked helper tests only. The existing scope classifier skips installer jobs for the three exact helper/test paths; unknown paths, mixed application changes, signing-key changes and application-workflow changes retain application CI. The fixed spare-host inventory workflow and activation controls are unchanged.

Validation: 55 local checks passed (38 mocked helper, 9 scope, 8 policy), focused actionlint passed, and git diff --check passed. The complete seven-file PR diff classifies application_required=false; adding an application path classifies true. No native media authentication, cleanup or console behavior is claimed validated.

Keep this PR unmerged. No helper activation, runner registration/start, workflow dispatch, spare-host download, guest boot, application packaging or release preparation is authorized. PR #73 stays draft and unmerged. Historical #72 research failures remain preserved.

Review follow-up 6c278dd fixes descriptor cleanup on initial file inspection failure and tests actual installer gates. The focused preparation job is mocked-only. Follow-up b72c597 gates legacy Windows/Mint native fixture jobs behind workflow_dispatch with run_native=true (default false); automatic events run static validation only. Native job payloads are unchanged and remain separately authorized operations. See the review comment for these limits and current CI status.

Copy link
Copy Markdown
Member Author

Review fix published in 6c278dd:

  • Closed an untracked FD leak if Workspace.create fails initial fstat/ownership inspection. Cleanup is attempted once, and close failure reports DESCRIPTOR_CLEANUP_UNCERTAIN. Mocked regression cases cover inspection failure, ownership rejection and close uncertainty.
  • Added checks against the actual application-workflow gate, scope output and release dependencies, beyond testing the classifier alone.
  • Full PR diff classifies application_required=false. Mixed application, signing-key and unknown-workflow controls classify true. Live inventory and application workflow files remain unchanged.

Local QA: 53 passed (38 mocked helpers, 9 scope, 6 policy), focused actionlint and git diff --check passed. Native helper authentication and cleanup remain unvalidated.

Boundary clarification: the preparation policy job is mocked/static only. The pre-existing fixture workflow also runs automatically because this PR changes ci_scope.py; it includes Windows native filesystem/ACL checks and hosted Mint-container media/dependency preparation. Those results must not be represented as mocked checks or spare-host/guest validation. No manual workflow dispatch or new native caller was added. The previous scope run explicitly skipped checks/native/update-trust/release; updated-head CI is pending.

Both #73 and #76 remain draft/open/unmerged. No spare-host execution, helper activation, runner operation, application packaging or release preparation was performed.

Copy link
Copy Markdown
Member Author

Legacy fixture-trigger assessment (no workflow/code change made):

The pull_request path filter in native-uat-fixtures.yml includes tests/ci_scope.py and tests/test_ci_scope.py. Those changes trigger the whole workflow, including ISO acquisition/extraction, container dependency installation and native fixture checks, even for this infrastructure-only PR. Installer-skip classification does not gate that separate workflow.

Smallest proposed change: remove those two paths from the legacy fixture trigger. Both remain covered on PRs and main pushes by mint-host-inventory-checks.yml, which already executes the scope suite. Retain legacy native triggers for the fixture implementation, its regression/CLI checks, preparation script and native workflow itself. A read-only YAML/set simulation confirmed these coverage relationships. Mixed PRs changing fixture files would still trigger native fixture CI; mixed application changes would still retain application CI. Changing the legacy workflow itself would trigger its native jobs, so any implementation of this proposal must explicitly handle that one-time execution boundary before publication, rather than quietly launching package/media work.

Broader alternative: separate static workflow validation from native fixture jobs and gate native execution through explicit workflow_dispatch authorization. That aligns with the desired package-operation boundary but changes existing fixture-validation policy and is a separate reviewed change, not needed to fix these helpers. No skip-ci labels, runner labels or user-supplied path claims should be used as security boundaries.

Previous-head fixture run 39089612246 has now completed successfully. Latest-head Mint result is still pending; all other latest-head checks passed, and application checks/native/update-trust/release are skipped. No rerun or manual dispatch was requested. Both PRs remain draft/unmerged.

Copy link
Copy Markdown
Member Author

Latest-head CI is now complete at 6c278dd:

  • Mint fixture job 117563749385: success, 8m42s (run 39089742907).
  • Windows fixtures, workflow checks, preparation policy and application scope: success.
  • Application checks, native installer build, update-trust and release: skipped.

No failure required a fix, no code changed in this follow-up, and no rerun/manual dispatch was initiated. Both #73 and #76 remain draft/open/unmerged. This is legacy hosted fixture evidence, not native validation of the new Cinnamon preparation helpers or spare-host console behavior.

See the preceding trigger assessment: the smallest change removes ci_scope.py and test_ci_scope.py from the legacy native fixture trigger while preserving their automatic focused coverage. Any workflow change must account for its own native trigger before publication; a separately reviewed static/native split with explicit native dispatch is the stronger option if all native media/package preparation must require dispatch. No workflow-policy change has been made in this assessment.

Copy link
Copy Markdown
Member Author

Implemented and reviewed the static/native split in b72c597.

  • Automatic PR/push events retain hosted static validation. Both native fixture jobs require workflow_dispatch on the canonical repository, explicit run_native=true (typed boolean, default false), and successful static validation. Native job payloads are unchanged. No dispatch was performed.
  • Policy checks exercise event/repository/opt-in combinations and inspect static steps, native dependencies, path coverage and actual application gates.
  • The exact legacy workflow file is covered by the focused policy workflow and the narrow infrastructure-only main-push exception. Full PR/future infrastructure-only main diffs skip installers; mixed application and signing-key controls retain application CI.
  • Local QA: 55 passed (38 mocked helper, 9 scope, 8 policy), focused actionlint and git diff --check passed.

Observed automatic CI on this exact head:

  • policy: success (run 39095677337).
  • scope: success; checks/native/update-trust/release: skipped (run 39095677339).
  • workflow-checks: success; windows-fixtures/mint-fixtures: skipped (run 39095677361).

Thus publishing this workflow change did not start native media or package preparation. No spare-host operation, runner registration/start, media download, guest boot, application build/package/release operation or merge was performed. #73 and #76 remain draft/open/unmerged. Native behavior of the new media/console helpers remains unvalidated; historical #72 findings remain preserved. Manual entry-point availability on main awaits a separately authorized merge.

Copy link
Copy Markdown
Member Author

Final dispatch-boundary review at b72c597: technically ready to merge; no blocking findings identified.

Verified current-head CI: policy/scope/workflow-checks succeeded. windows-fixtures and mint-fixtures were skipped on the PR event; application checks/native/update-trust/release were also skipped. Focused actionlint was rechecked locally and passed. Existing 55 local checks and exact-head automatic policy checks cover the boundary; no native rerun or dispatch was performed.

Native jobs require the canonical repository, workflow_dispatch, explicit boolean run_native=true (default false), and successful static validation. Automatic events retain static validation only. This is a GitHub dispatch permission boundary, not a separate environment-review or immutable-SHA approval mechanism; eligible repository users can intentionally dispatch a selected ref after the workflow is available on main. No self-hosted runner or protected host is selected by these native jobs.

Complete eight-file diff remains infrastructure-only. The exact-path main-push exception prevents installer preparation after a future authorized merge; unknown/application/signing-key changes retain normal application CI. Live spare-host inventory and application workflow definitions are unchanged. Manual native payloads remain unchanged, and preparation-helper native authentication/cleanup/console behavior remains unvalidated and separately gated.

GitHub reports MERGEABLE with REVIEW_REQUIRED, no submitted reviews, draft=true and no auto-merge request. This engineering review is not a qualifying GitHub approval. #73 and #76 remain draft/open/unmerged. No code changes, host operations, native execution, workflow dispatch, builds, packages or release work were performed during this final review.

@rdpollard
rdpollard marked this pull request as ready for review October 18, 2026 04:07
@rdpollard
rdpollard merged commit ecd1003 into main Oct 18, 2026
9 checks passed
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