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
Multiple remediation.portal.path strings shipped in data/registry.json (CheckID-authored) point at Microsoft admin-center menu locations that no longer exist in the current UI. Microsoft has reorganized the Entra admin center 3+ times in 18 months, dropping or restructuring entire hub sections (e.g., the "Protection" parent layer is gone in modern Entra; Conditional Access is now top-level).
ENTRA-SSPR-001 portal path: Entra admin center > Protection > Authentication methods > Registration campaign — "Protection" parent doesn't exist; current path is Entra ID > Authentication methods > Registration campaign
Conditional Access path: Entra ID > Protection > Conditional Access is wrong; CA is now directly accessible under Entra ID without a Protection hub
Of the ~250 checks with remediation.portal.path strings, an unknown subset are similarly stale. Each Microsoft UI reorg invalidates more.
Why this matters
portal.path strings are user-facing instructions. A consultant clicking through and not finding the named menu item:
Loses confidence in the report
Has to re-discover the actual path themselves
May give up and skip the remediation entirely
For a tool whose value proposition is "hands-off auditor handoff", stale UI paths are a credibility bug.
CheckID owns this field (it's in the source data/scf-check-mapping.json). Downstream consumers (M365-Assess, Az-Assess, EZ-CMMC) sync the registry on a recurring basis; M365-Assess-side fixes get clobbered on next sync. The fix has to land here.
For every check in data/scf-check-mapping.json with a remediation.portal.path string:
Open the path in the current Entra / Microsoft 365 / Defender / Intune / Purview admin centers
Mark verified / stale / moved
Update stale paths to current locations
Effort: ~1 day for ~250 checks × 30 seconds verification each.
Track 2 — Reduce future rot (structural change)
portal.path strings hard-code menu paths. Microsoft moves them. Recommended structural fix per M365-Assess#879:
Replace verbose menu paths with Microsoft Learn links as the primary remediation reference. Microsoft Learn URLs are stable; admin-center menu paths are not. Microsoft maintains those URLs as deep links to the current portal config experience anyway.
The path stays as a quick-reference (some auditors prefer click-paths to URL navigation), but the learnUrl becomes the canonical source. Each path entry carries a pathAsOfVersion so consumers can render "as of v3.4.0; verify against Learn URL if newer."
Track 3 — CI drift detection (optional, deferred)
The most thorough variant: a CI job that periodically scrapes the Microsoft Learn deep-link redirects and flags drift. Higher effort + brittle. Recommend deferring until Track 2 is in place.
Consumer-side change after this lands
M365-Assess (and other consumers) updates their renderer to:
// Render Learn URL primary, path as secondary "quick-reference"{check.remediation.portal.learnUrl&&(<ahref={check.remediation.portal.learnUrl}target="_blank">{check.remediation.portal.learnTitle}</a>)}{check.remediation.portal.path&&(<spanclassName="path-ref">
Click-through (as of {check.remediation.portal.pathAsOfVersion}): {check.remediation.portal.path}</span>)}
Visually flags the path as potentially-stale and surfaces Microsoft Learn as the source of truth.
Acceptance criteria
Track 1 (sweep)
Every check with remediation.portal.path opened against current admin center
Stale paths updated to current locations (or removed if no current equivalent)
PR includes a list of verified-stale findings with their before/after for review
Summary
Multiple
remediation.portal.pathstrings shipped indata/registry.json(CheckID-authored) point at Microsoft admin-center menu locations that no longer exist in the current UI. Microsoft has reorganized the Entra admin center 3+ times in 18 months, dropping or restructuring entire hub sections (e.g., the "Protection" parent layer is gone in modern Entra; Conditional Access is now top-level).Surfaced by Galvnyz/M365-Assess#879. Two specific cases observed:
ENTRA-SSPR-001portal path:Entra admin center > Protection > Authentication methods > Registration campaign— "Protection" parent doesn't exist; current path isEntra ID > Authentication methods > Registration campaignEntra ID > Protection > Conditional Accessis wrong; CA is now directly accessible under Entra ID without a Protection hubOf the ~250 checks with
remediation.portal.pathstrings, an unknown subset are similarly stale. Each Microsoft UI reorg invalidates more.Why this matters
portal.pathstrings are user-facing instructions. A consultant clicking through and not finding the named menu item:For a tool whose value proposition is "hands-off auditor handoff", stale UI paths are a credibility bug.
CheckID owns this field (it's in the source
data/scf-check-mapping.json). Downstream consumers (M365-Assess, Az-Assess, EZ-CMMC) sync the registry on a recurring basis; M365-Assess-side fixes get clobbered on next sync. The fix has to land here.Two-track approach (matches M365-Assess#879's recommendation)
Track 1 — One-time data sweep
For every check in
data/scf-check-mapping.jsonwith aremediation.portal.pathstring:Effort: ~1 day for ~250 checks × 30 seconds verification each.
Track 2 — Reduce future rot (structural change)
portal.pathstrings hard-code menu paths. Microsoft moves them. Recommended structural fix per M365-Assess#879:Replace verbose menu paths with Microsoft Learn links as the primary remediation reference. Microsoft Learn URLs are stable; admin-center menu paths are not. Microsoft maintains those URLs as deep links to the current portal config experience anyway.
Schema impact on
remediation.portal:The
pathstays as a quick-reference (some auditors prefer click-paths to URL navigation), but thelearnUrlbecomes the canonical source. Each path entry carries apathAsOfVersionso consumers can render "as of v3.4.0; verify against Learn URL if newer."Track 3 — CI drift detection (optional, deferred)
The most thorough variant: a CI job that periodically scrapes the Microsoft Learn deep-link redirects and flags drift. Higher effort + brittle. Recommend deferring until Track 2 is in place.
Consumer-side change after this lands
M365-Assess (and other consumers) updates their renderer to:
Visually flags the path as potentially-stale and surfaces Microsoft Learn as the source of truth.
Acceptance criteria
Track 1 (sweep)
remediation.portal.pathopened against current admin centerTrack 2 (structural)
learnUrl,learnTitle,pathAsOfVersion, optionalpathStaleness("verified" | "may-rot" | "deprecated")learnUrlpopulated where a Microsoft Learn equivalent existsdocs/SCHEMA-MIGRATION-3.x.md(or equivalent) explains the consumer migration pathEffort estimate
Recommend combined: while sweeping each check, also note the Learn URL → both updates happen in one pass.
Out of scope
powershell,graph,cli,notes) — they use stable command syntax / API references, less rotRelated
remediation— structured remediation block (feat: structured remediation object (#261 #264) — Path A step 3 #312 introduced the schema) with portal path + PowerShell + Graph API where applicable". This issue extends the schema to include Learn URL canonicality.