You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Refine macOS imaging presentation and repository specifications
- Updated slide content in the macOS imaging presentation to clarify timing, structure, and key points for better audience engagement.
- Adjusted the appendix descriptions and added details about the extended Q&A session.
- Enhanced visual concepts and talking points across multiple slides for clarity and emphasis on key messages.
- Revised repository specifications to explicitly exclude VMware Fusion as a v1 macOS guest provider due to current documentation limitations.
- Updated documentation references to reflect changes in cleanup processes and evidence capture requirements.
Copy file name to clipboardExpand all lines: docs/Hypervisor-Decision-Guide.md
+9-3Lines changed: 9 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,9 +5,9 @@
5
5
6
6
-**Status:** Active
7
7
-**Owner:** Frank Lesniak
8
-
-**Last Updated:** 2026-05-05
9
-
-**Scope:** Decision guide for choosing Parallels, UTM, or Tart in the `macOSLab` v1 lab.
10
-
-**Related:**[Prerequisites](Prereqs.md), [Apple Silicon Constraints](Apple-Silicon-Constraints.md), [Provider Version Matrix](Provider-Version-Matrix.md), [UTM macOS guest documentation](https://docs.getutm.app/guest-support/macos/), [Parallels macOS VM CLI documentation](https://docs.parallels.com/landing/parallels-desktop-developers-guide/command-line-interface-utility/manage-virtual-machines-from-cli/general-virtual-machine-management/create-a-virtual-machine)
8
+
-**Last Updated:** 2026-05-06
9
+
-**Scope:** Decision guide for choosing Parallels, UTM, or Tart in the `macOSLab` v1 lab, and for explaining why VMware Fusion is not a v1 macOS guest provider.
10
+
-**Related:**[Prerequisites](Prereqs.md), [Apple Silicon Constraints](Apple-Silicon-Constraints.md), [Provider Version Matrix](Provider-Version-Matrix.md), [UTM macOS guest documentation](https://docs.getutm.app/guest-support/macos/), [Parallels macOS VM CLI documentation](https://docs.parallels.com/landing/parallels-desktop-developers-guide/command-line-interface-utility/manage-virtual-machines-from-cli/general-virtual-machine-management/create-a-virtual-machine), [Broadcom Fusion Apple silicon compatibility](https://knowledge.broadcom.com/external/article/315602/compatibility-considerations-for-arm-gue.html)
11
11
12
12
Use Parallels first when you need the shortest path to the live demo. Use UTM when cost, openness, or provider-swap comparison matters more than full automation. Treat Tart as an advanced stub in v1.
13
13
@@ -19,6 +19,12 @@ Use Parallels first when you need the shortest path to the live demo. Use UTM wh
19
19
| UTM | Documented/manual provider-swap path | Secondary path, budget-sensitive labs, and provider comparison | Partial lifecycle automation where `utmctl` behavior is proven; creation and checkpoint paths are manual-step-required in v1 | Do not present UTM as full live Parallels parity. |
20
20
| Tart | Stubbed advanced path | Later CI/runner conversation | Mutating primitives fail clearly in v1 | Full Tart parity requires later explicit owner approval. |
21
21
22
+
## VMware Fusion Scope Note
23
+
24
+
VMware Fusion supports Apple-silicon hosts for Arm guest operating systems, including Arm Windows and Arm Linux. It is not a v1 `macOSLab` provider because current Broadcom documentation says Arm variants of macOS are not supported in Fusion VMs on Apple silicon.
25
+
26
+
Treat Fusion as a Q&A clarification, not a fourth core provider. The question is not whether Fusion supports Apple silicon; it does. The question is whether it supports the Apple-silicon macOS guest workflow this repository is built around; current Broadcom documentation says it does not.
Copy file name to clipboardExpand all lines: docs/Snapshot-Strategy.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,7 +6,7 @@
6
6
-**Status:** Active
7
7
-**Owner:** Frank Lesniak
8
8
-**Last Updated:** 2026-05-06
9
-
-**Scope:** Defines the five-checkpoint model, restore warnings, cloud cleanup posture, and checkpoint readiness expectations for `macOSLab`.
9
+
-**Scope:** Defines the five-checkpoint model, restore warnings, report-only cloud cleanup posture, and checkpoint readiness expectations for `macOSLab`.
10
10
-**Related:**[Fidelity Boundaries](Fidelity-Boundaries.md), [Provider Version Matrix](Provider-Version-Matrix.md), [Prerequisites](Prereqs.md), [macOSLab repository specification](spec/macOSLab-repository-spec.md)
11
11
12
12
Snapshots are the reason the lab is fast, but they are also where local state and cloud state can drift. Use the five canonical checkpoint names exactly.
@@ -19,7 +19,7 @@ Snapshots are the reason the lab is fast, but they are also where local state an
19
19
|`Pre-Enroll`|`Clean-OS` plus Intune Company Portal at the sign-in screen; not enrolled. |
20
20
|`Post-Enroll-Baseline`| Fully enrolled, recently synced, deterministic healthy baseline. For Demo 4, Visual Studio Code is installed and launches successfully here. |
21
21
|`Broken-Policy-State`| Deterministic intentionally broken state for the engineered demo failure. For Demo 4, the Gatekeeper/System Policy Control profile blocks VS Code. |
22
-
|`Recovered-Known-Good`| Post-rollback healthy state, captured after cloud cleanup or reconciliation. For Demo 4, `spctl` accepts VS Code and the app launches again. |
22
+
|`Recovered-Known-Good`| Post-rollback healthy state, captured after report-only cloud cleanup review or manual reconciliation notes. For Demo 4, `spctl` accepts VS Code and the app launches again. |
23
23
24
24
Alternative checkpoint names are not allowed in v1 unless a caller explicitly opts into non-canonical names for local experimentation.
25
25
@@ -33,7 +33,7 @@ Capture `Post-Enroll-Baseline` after enrollment, policy receipt, and enough sync
33
33
34
34
Capture `Broken-Policy-State` only when the failure is intentional and documented in the test plan.
35
35
36
-
Capture `Recovered-Known-Good` after rollback and any required cloud cleanup or reconciliation notes are complete.
36
+
Capture `Recovered-Known-Good` after rollback and after any required report-only cloud cleanup review or manual reconciliation notes are complete.
37
37
38
38
## Restore Rule
39
39
@@ -47,9 +47,9 @@ Restore commands must require explicit acknowledgement for non-interactive or un
47
47
48
48
Checkpoint capture should prefer a stopped guest. Snapshotting a running or paused VM can preserve transient identity, network, or MDM timing state that makes later evidence harder to explain. Providers must enforce or clearly document clean-shutdown requirements.
49
49
50
-
## Cloud Cleanup Posture
50
+
## Cloud Cleanup Review Posture
51
51
52
-
V1 local rollback does not delete or retire cloud records. Cloud cleanup remains report-only unless a later owner-approved Phase 10 change adds mutation. A valid report-only cleanup result may identify candidate Intune, Entra, and Defender records, explain why they may be stale, and show portal paths or Graph commands for manual cleanup.
52
+
V1 local rollback does not delete or retire cloud records. The cloud cleanup step is a report-only review unless a later owner-approved Phase 10 change adds mutation. A valid report-only cleanup result may identify candidate Intune, Entra, and Defender records, explain why they may be stale, and show portal paths or Graph commands for manual cleanup.
53
53
54
54
For the Gatekeeper stage path, disconnect VM networking immediately before restoring `Post-Enroll-Baseline` so the bad Intune assignment cannot immediately reapply during the local recovery proof. Capture `Post-Enroll-Baseline` itself in the normal enrolled and network-capable state.
Copy file name to clipboardExpand all lines: docs/planning/macOS-imaging-03a-bolstered-outline.md
+29-33Lines changed: 29 additions & 33 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -49,8 +49,8 @@ The session outline now aligns with the final `macOSLab` repository decisions:
49
49
| Primary speaker | Frank Lesniak |
50
50
| Co-speaker | Michael Niehaus |
51
51
| Event | Midwest Management Summit at the Mall of America 2026 |
52
-
| Total length | 105 minutes |
53
-
| Core content | 75 minutes |
52
+
| Total length |90-105 minutes |
53
+
| Core content |60-75 minutes; current deck target is 74:30|
54
54
| Extended Q&A | 30 minutes |
55
55
| Q&A format | Raise-hand questions; mic runner if the room is large; no live polling |
56
56
| Primary technology | Intune |
@@ -232,6 +232,8 @@ Use this once. Do not turn the session into polling.
232
232
| UTM | Cost-free experimentation path with Apple Virtualization and QEMU options; automation exists but does not mirror Parallels one-for-one. | Budget-sensitive labs, learning, and teams comfortable with templates/configuration artifacts. | Provider-swap demo. |
233
233
| Tart | CLI-first Apple Silicon VM tooling built for automation, CI, and image distribution. | Teams building repeatable macOS runners or pipeline-based test loops. | Repo/Q&A/appendix path, not a third equal branch in the core. |
234
234
235
+
VMware Fusion supports Apple-silicon hosts for Arm guest operating systems, including Arm Windows and Arm Linux. It is not a core provider for this session because current Broadcom documentation says Arm variants of macOS are not supported as Fusion guests on Apple silicon. Fusion may come up in Q&A as a Windows/Linux Arm option, but it is not a macOS guest lab path for this talk.
236
+
235
237
Do not frame the section as "which product is best." Frame it as:
236
238
237
239
> Which tool makes the safe behavior easiest for your team?
@@ -295,13 +297,13 @@ Avoid trying to show every Graph query, every profile payload, and every Intune
295
297
|`Pre-Enroll`| You want a clean device identity path for each enrollment test. | Best default for enrollment and MDM identity fidelity. | Slower because enrollment and sync rerun. |
296
298
|`Post-Enroll-Baseline`| You need a fast repeated policy regression loop. | Fastest and most stage-reliable. | Intune/Entra cloud state keeps moving while the VM rolls backward. |
297
299
|`Broken-Policy-State`| You need a deterministic demo failure. | Excellent for stage reliability. | Must be explained honestly as a checkpointed failure. |
298
-
|`Recovered-Known-Good`| You need proof that rollback returns the VM to a useful baseline. | Makes recovery visible. | Can hide cloud cleanup problems if not documented. |
300
+
|`Recovered-Known-Good`| You need proof that rollback returns the VM to a useful baseline. | Makes recovery visible. | Can hide cloud reconciliation problems if the report-only cleanup review is skipped. |
299
301
300
302
Recommended operational rule:
301
303
302
304
- Use `Pre-Enroll` as the gold-standard identity baseline.
303
305
- Use `Post-Enroll-Baseline` for speed and demo reliability.
304
-
- Pair post-enroll rollback with a documented cloud cleanup routine. In v1, that routine is report-only: it identifies candidate cloud records and manual cleanup steps, but it does not mutate Intune, Entra, or Defender records.
306
+
- Pair post-enroll rollback with a documented cloud cleanup review. In v1, that review is report-only: it identifies candidate cloud records and manual cleanup steps, but it does not mutate Intune, Entra, or Defender records.
305
307
- Teach "snapshot time travel" as a real anti-pattern.
306
308
307
309
Important stage warning:
@@ -324,14 +326,14 @@ The audience should believe that even the failure was engineered.
324
326
325
327
### Repo Timing
326
328
327
-
**Decision:** Publish the repo before the session, but reveal the QR/short URL near the end of the core.
329
+
**Decision:** Publish the repo before the session, but reveal the QR code and `https://github.com/franklesniak/macOSLab` URL near the end of the core.
328
330
329
331
Recommended stage pattern:
330
332
331
333
1. Show the command you would run.
332
334
2. Open a pre-cloned local copy.
333
335
3. Show the exact demo paths.
334
-
4. Reveal the QR/short URL at 73:00.
336
+
4. Reveal the QR target, `https://github.com/franklesniak/macOSLab`, near the end of the core talk.
335
337
5. Keep attention on the stage until the core content is done.
336
338
337
339
Do not depend on a live `git clone` over conference Wi-Fi.
@@ -1121,7 +1123,7 @@ Primary live flow:
1121
1123
7. Restore `Post-Enroll-Baseline`.
1122
1124
8. Run the recovered validation plan.
1123
1125
9. Show `spctl` accepts VS Code and the app launches.
1124
-
10. State clearly that the Intune assignment still needs cleanup before production expansion.
1126
+
10. State clearly that the Intune assignment still needs report-only cleanup review before production expansion.
- Include hypervisor and enrollment method if relevant.
1238
1240
1239
-
## Extended Q&A: 75:00-105:00
1241
+
Keep the CFP recap slide in the core talk. It repeats the four accepted takeaways with green checkmarks and one-line delivery notes.
1242
+
1243
+
## Extended Q&A: 74:30-104:30
1240
1244
1241
-
### Mechanics, 75:00-78:00
1245
+
### Mechanics, 74:30-77:30
1242
1246
1243
1247
Leave the Q&A bucket slide up.
1244
1248
@@ -1261,7 +1265,7 @@ Six buckets. Few enough that the slide is a real menu rather than a wall of text
1261
1265
| Evidence and change-board outputs | What do I attach to a change ticket? What does Log Analytics ingestion look like? How do I redact recovery-key proof safely? |
1262
1266
| CI, Tart, and inventory adjacencies | When do I move beyond desktop labs? Should I bridge any of this into ConfigMgr inventory? |
1263
1267
1264
-
### Structured Answer Framework, 78:00-102:00
1268
+
### Structured Answer Framework, 77:30-104:30
1265
1269
1266
1270
Use this pattern:
1267
1271
@@ -1285,18 +1289,9 @@ Use these if needed:
1285
1289
- "Who has a change board that wants more than 'the portal says assigned'?"
1286
1290
- "Who is trying to decide whether Tart belongs in a CI path?"
1287
1291
1288
-
### Close-Out, 102:00-105:00
1289
-
1290
-
End with the Monday plan:
1292
+
### Final Thank-You, 104:30-105:00
1291
1293
1292
-
1. Clone the repo.
1293
-
2. Build one VM.
1294
-
3. Take a `Pre-Enroll` snapshot.
1295
-
4. Enroll into a lab scope.
1296
-
5. Test one risky policy.
1297
-
6. Export redacted evidence.
1298
-
7. Roll back.
1299
-
8. Clean up the cloud record.
1294
+
End with the QR code, speaker names, and one sentence of thanks.
1300
1295
1301
1296
Final line:
1302
1297
@@ -1330,9 +1325,10 @@ Final line:
1330
1325
| 22 | Demo 4 evidence: VS Code blocked, `spctl` rejects, rollback restores. | During Demo 4 |
1331
1326
| 23 | FileVault and Defender proof boundaries: still required, not the live failure. | 68:00 |
1332
1327
| 24 | Dragons checklist updated for Gatekeeper and cloud state. | 70:00 |
1333
-
| 25 | Repo tree and Start Here. | 73:00 |
1334
-
| 26 | Q&A buckets. | 75:00 |
1335
-
| 27 | Monday plan and final reminder. | 102:00 |
1328
+
| 25 | Repo tree and Start Here. | 72:25 |
1329
+
| 26 | Monday plan and CFP recap. | 73:15 |
1330
+
| 27 | Q&A buckets. | 74:30 |
1331
+
| 28 | Final thank-you. | 104:30 |
1336
1332
1337
1333
## Windows-Admin Translation Cheat Sheet
1338
1334
@@ -1669,7 +1665,7 @@ Answer:
1669
1665
1670
1666
Answer:
1671
1667
1672
-
> No. Snapshot rollback restores the VM state. It does not erase Intune, Entra, Defender portal state, audit logs, or reporting history. The starter kit treats cloud cleanup as part of the lab lifecycle because otherwise you create haunted device objects.
1668
+
> No. Snapshot rollback restores the VM state. It does not erase Intune, Entra, Defender portal state, audit logs, or reporting history. The starter kit treats report-only cloud cleanup review as part of the lab lifecycle because otherwise you create stale cloud records that no longer match the restored VM.
1673
1669
1674
1670
### "Can you show the FileVault recovery key?"
1675
1671
@@ -1686,11 +1682,11 @@ Answer:
1686
1682
- Freeze demo tenant policies.
1687
1683
- Update placeholder build values throughout the deck and demo configs to your actual pinned build.
1688
1684
- Publish repo privately or publicly enough to validate links.
1689
-
- Run full 105-minute rehearsal.
1685
+
- Run a full 75-minute core rehearsal plus a 30-minute Q&A drill.
1690
1686
- Record Demo 4 success path.
1691
1687
- Rehearse the break-glass narration over the recording at least once.
1692
1688
- Validate screenshots.
1693
-
- Validate QR code and short URL.
1689
+
- Validate QR code and `https://github.com/franklesniak/macOSLab`.
1694
1690
- Confirm both speakers know handoffs.
1695
1691
- Confirm evidence redaction behavior.
1696
1692
- Confirm no full recovery key, token, secret, or private tenant detail appears in any public artifact.
@@ -1702,7 +1698,7 @@ Answer:
1702
1698
- Confirm all checkpoints.
1703
1699
- Export evidence from a clean run.
1704
1700
- Test hotspot or fallback network.
1705
-
- Confirm repo short URL.
1701
+
- Confirm repo URL.
1706
1702
- Re-run `Test-LabReadiness.ps1`.
1707
1703
- Rehearse failure pivots.
1708
1704
- Re-check Parallels, UTM, Tart, Apple, and Microsoft documentation for any changed behavior or version notes.
0 commit comments