Skip to content

feat: define M2 SourceOS Recovery/Installer packaging spec#14

Merged
mdheller merged 2 commits intomainfrom
copilot/define-m2-recovery-installer-packaging-spec
Apr 30, 2026
Merged

feat: define M2 SourceOS Recovery/Installer packaging spec#14
mdheller merged 2 commits intomainfrom
copilot/define-m2-recovery-installer-packaging-spec

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 30, 2026

Defines packaging responsibilities and required inputs for the two SourceOS boot entries on Apple Silicon (M2): normal boot and Recovery/Installer. Adds dry-run fixtures only — no host mutation, boot-entry creation, or disk writes.

New doc

docs/M2_RECOVERY_INSTALLER_PACKAGING.md

  • Two-entry model: live channel (normal boot, diskWrite: forbidden) vs recovery+installer channels (Recovery/Installer, diskWrite: installer-only)
  • Required input → BootReleaseSet field mapping for both entry types: BootReleaseSet, ReleaseSet, NLBoot plan, artifact cache evidence, AppleSiliconAdapterEvidence, BootProofRecord
  • Asahi-style boot picker integration design (side-effect-free, execute=false)
  • Adapter flow, evidence model, non-Apple-Silicon platform coverage, known gaps

New fixtures

File Channels diskWrite
examples/m2-recovery-installer/normal-boot.example.json live forbidden
examples/m2-recovery-installer/recovery-installer.example.json recovery, installer installer-only

Both are minimal valid BootReleaseSet v1 documents validated by the existing validate_boot_release_set.py.

Makefile / maturity

  • make validate now syntax-checks both new fixtures alongside existing examples
  • repo.maturity.yaml: evidence items added for new doc and fixtures; next actions updated — generic "Add Apple Silicon M2 PAL design notes" replaced with specific AppleSiliconAdapterEvidence normalization and packaging adapter wiring items

Known gaps (explicit)

  • AppleSiliconAdapterEvidence normalization is a design stub; no Secure Enclave interaction implemented
  • nlboot RSA-PSS/SHA-256 manifest signature verification not yet wired into the adapter
  • Artifact content-addressed cache fetch/verification not yet implemented; fixture digests use placeholders

Copilot AI linked an issue Apr 30, 2026 that may be closed by this pull request
@mdheller mdheller marked this pull request as ready for review April 30, 2026 17:36
Copy link
Copy Markdown
Contributor

@copilot This PR is currently draft with zero changed files. Please complete the bounded issue #13 scope in this branch: packaging spec doc, dry-run fixtures, Makefile validation update, and repo.maturity.yaml next actions. Keep it docs/fixtures/validation only and include validation evidence, or report the blocker.

- Add docs/M2_RECOVERY_INSTALLER_PACKAGING.md with packaging
  responsibilities, required inputs, Asahi-style boot picker
  integration, evidence model, adapter flow, and known gaps
- Add examples/m2-recovery-installer/normal-boot.example.json
  (dry-run BootReleaseSet, channels: live, diskWrite: forbidden)
- Add examples/m2-recovery-installer/recovery-installer.example.json
  (dry-run BootReleaseSet, channels: recovery+installer,
  diskWrite: installer-only)
- Update Makefile validate target to syntax-check new fixtures
- Update repo.maturity.yaml evidence and nextActions

make validate passes. No host mutation implemented.

Agent-Logs-Url: https://github.com/SourceOS-Linux/sourceos-boot/sessions/d9c27adc-9492-43b4-8f82-2bde5d99f79f

Co-authored-by: mdheller <21163552+mdheller@users.noreply.github.com>
Copilot AI changed the title [WIP] Add M2 recovery installer packaging spec documentation feat: define M2 SourceOS Recovery/Installer packaging spec Apr 30, 2026
Copilot AI requested a review from mdheller April 30, 2026 17:38
Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 30, 2026

@copilot This PR is currently draft with zero changed files. Please complete the bounded issue #13 scope in this branch: packaging spec doc, dry-run fixtures, Makefile validation update, and repo.matu...

All deliverables are complete in commit 66b8979 — the comment was posted while the PR was still being drafted. Here's the validation evidence:

make validate
PASS examples/boot-release-set.example.json
PASS examples/m2-recovery-installer/normal-boot.example.json
PASS examples/m2-recovery-installer/recovery-installer.example.json
[nlboot adapter output — exit 0]

python -m pytest
8 passed in 0.10s

Files changed:

  • docs/M2_RECOVERY_INSTALLER_PACKAGING.md — packaging spec (entry types, required inputs, Asahi boot picker integration, evidence model, known gaps)
  • examples/m2-recovery-installer/normal-boot.example.json — dry-run BootReleaseSet, channels: ["live"], diskWrite: "forbidden"
  • examples/m2-recovery-installer/recovery-installer.example.json — dry-run BootReleaseSet, channels: ["recovery","installer"], diskWrite: "installer-only"
  • Makefilevalidate target now syntax-checks both new fixtures
  • repo.maturity.yaml — evidence items and next actions updated

No host mutation, boot-entry creation, disk writes, or kexec implemented.

Copy link
Copy Markdown
Contributor

@mdheller mdheller left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved. Scope matches issue #13: M2 Recovery/Installer packaging spec, dry-run fixtures, Makefile validation update, and repo maturity next actions. This is docs/fixtures/validation only; no host-changing behavior, boot-entry mutation, disk write, rollback execution, or kexec behavior is introduced. CI is action_required, but the PR includes validation evidence and the change is non-mutating.

@mdheller mdheller merged commit 386aa3f into main Apr 30, 2026
1 check 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.

Agent task: define M2 SourceOS Recovery Installer packaging spec

2 participants