macadmins / macadmins/nudge

Nudge 2.1.3 + SOFA + Grace Period Question

Open
#706 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Swift
Stars
1.3k
Forks
207
PR merge metrics
No merged PRs in 30d

Description

Hi all,

I'm looking for some clarification on the expected behaviour of allowGracePeriods and gracePeriodInstallDelay when using Nudge 2.1.3 with SOFA and:
requiredMinimumOSVersion = latest-minor

What we're trying to achieve
Our goal is for every user to receive the same 14-day onboarding/grace period from the point Nudge is deployed, regardless of how old the Mac is or when the current macOS update was released.

For example:
• User A receives Nudge today on a Mac that has never had Nudge installed.
• User B receives Nudge today on an existing Mac that is several months old.
• User C receives Nudge today after being migrated to a new Nudge deployment.

In all three cases, we'd like the user to receive a fresh 14 days from the date Nudge is deployed, rather than inheriting a deadline that has already partially elapsed because the macOS update was released some time ago.

We're therefore using:

allowGracePeriods = true
gracePeriodInstallDelay = 336
gracePeriodPath = /Library/Application Support/Nudge/gracePeriod
with a marker file created at deployment time.

Configuration
requiredMinimumOSVersion
latest-minor

allowGracePeriods

gracePeriodInstallDelay
336

gracePeriodLaunchDelay
0

gracePeriodPath
/Library/Application Support/Nudge/gracePeriod

standardMinorUpdateSLA
14

nonActivelyExploitedCVEsMinorUpdateSLA
14

activelyExploitedCVEsMinorUpdateSLA
14

What I've observed
When I first tested this configuration, it appeared to work as expected. I saw log entries along the lines of:
Device permitted for gracePeriodInstallDelay

setting date from:
...

to:
...

This led me to believe that Nudge was taking the grace-period marker timestamp and extending the required installation date accordingly.
However, after doing considerably more testing, I can no longer reproduce this behaviour.

I've tested:
• Existing Mac running Nudge 2.1.3.81860
• Freshly imaged Mac
• Configuration profile deployed before the first Nudge launch
• Grace-period marker created before the first Nudge launch
• Fresh user state
• Fresh managed preferences
• Nudge stopped before testing
• Grace-period marker recreated multiple times

The profile is definitely installed and contains:
allowGracePeriods = true
gracePeriodInstallDelay = 336
gracePeriodPath = /Library/Application Support/Nudge/gracePeriod

The marker file also definitely exists and has a fresh timestamp before Nudge launches.
What Nudge is doing

On both machines, Nudge immediately evaluates SOFA and calculates a deadline from the SOFA feed.
For example:
Setting requiredInstallationDate via SOFA to 2026-08-20 00:00:00 +0000
SOFA Matched OS Version: 15.7.9

New Nudge event detected - resetting all deferral values

On another machine:
Setting requiredInstallationDate via SOFA to 2026-08-31 00:00:00 +0000
SOFA Matched OS Version: 26.6.2

What I don't see is:
Device permitted for gracePeriodInstallDelay
or:
Device within gracePeriodLaunchDelay

I also can't find any evidence in the logs that the timestamp of the grace-period marker is influencing the SOFA-derived deadline.
Searching the Nudge logs for grace returns nothing.

My question

When using:
requiredMinimumOSVersion = latest-minor
with SOFA-driven deadlines, should gracePeriodInstallDelay modify the SOFA-derived requiredInstallationDate for a newly deployed Nudge installation?
In other words, should a newly deployed Nudge installation be able to receive a fresh 14-day grace period from the deployment/marker timestamp, even if SOFA has calculated an earlier deadline based on the macOS update release date?

Or does the SOFA-derived requiredInstallationDate take precedence, effectively preventing the grace-period logic from extending the deadline in this scenario?

I noticed the Nudge changelog/documentation indicates that the grace-period logic is evaluated after the SOFA assessment, so I'm particularly interested in understanding how those two calculations are expected to interact.

If grace periods are expected to work with latest-minor and SOFA, what log entries should I expect to see that confirm Nudge has recognised and applied the grace-period marker?

Thanks in advance — I'm mainly trying to establish whether this is expected behaviour, a configuration issue, or potentially a change/regression in the 2.1.x releases.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the changelog/documentation sections describing SOFA assessment and grace-period evaluation, then trace the logged requiredInstallationDate calculation and the grace-period checks. Compare the SOFA-derived deadline with the marker timestamp and confirm whether the expected precedence and log entries are documented or reproducible.

Written by the indexing model from the issue text.

Assessment

Tech stack
macos, swift
Domain
operating-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.