UIAO FedRAMP and CISA Enhancement Recommendations

Enhancement recommendations from FedRAMP/CISA engagement analysis

Author

Michael Stratton

Published

April 1, 2026

## UIAO Enhancement Recommendations

Drawing from the full body of evidence — RFC-0026 forum (FedRAMP/community #130), cisagov/ScubaConnect Discussion #27, cisagov/ScubaGear open issues, and the UIAO canon (UIAO_002, UIAO_132, ADR-043, adapter-registry, gcc-boundary-gap-registry, specs/) — here is a prioritized set of enhancement recommendations followed by recommended forum responses.

---

### Enhancement 1 — Complete the Connect.gov POA&M Submission Automation (UIAO_132 Open Item O1)

**The gap.** UIAO_132 §2.3 explicitly notes that the Connect.gov POA&M upload is a manual operator task and flags it as Open Item O1, gated to enforcement start (2027-01-01). The RFC-0026 corrective action ladder starts at the first failure in January 2027. A manual upload step is a compliance risk: if an operator misses a month, UIAO could trigger a first-strike notification even though the evidence was generated and ready.

**Recommendation.** Implement a `conmon-submit-poam` GitHub Actions workflow that automates upload to Connect.gov using the FedRAMP Managed Repository API or SFTP endpoint. The workflow should fire as a post-step of `conmon-aggregate.yml`, verify the upload receipt, and write an artifact to `evidence/submissions/<yyyy-mm>/connect-gov-receipt.json`. Failure to submit should fire a governance issue with an SLA identical to the 72-hour critical-finding SLA in §2.2. This closes O1 before the enforcement clock starts and removes the largest single operational risk in the RFC-0026 compliance track.

---

### Enhancement 2 — ScubaGear Release Tracking and Mapping Drift CI Gate

**The gap.** UIAO_002 Risk G-1 documents the risk that `SCUBA_TO_KSI_MAP` becomes stale when ScubaGear introduces new policies. The open issues in `cisagov/ScubaGear` show this is not hypothetical: seven new `MS.SECURITYSUITE` policy group issues (#2104–#2110) were filed April 21, targeting the Qwilfish milestone (due June 30, 2026) — the same date RFC-0026 enforcement begins gradual adoption. The Qwilfish release will add policies that UIAO's mapping table doesn't contain, causing them to appear as unmapped orphans in normalization output.

Additionally, issues #2089–#2091 document a migration of the Exchange Online and Defender providers away from the `ExchangeOnlineManagement` PowerShell module to direct Microsoft Graph API calls. This may alter the JSON output field structure that `scubagear_adapter.py`'s `normalize_scuba.py` parses.

**Recommendation.** Create a CI workflow `scubagear-upstream-track.yml` that: (a) watches the `cisagov/ScubaGear` releases feed for new tags, (b) when a new release appears, runs a diff of the new release's `ScubaResults` schema against the schemas UIAO currently expects, (c) runs `uiao scuba transform` against a pinned golden-file test fixture and flags any new unmapped KSI IDs, and (d) opens a canon-change issue automatically with the specific policies needing new `SCUBA_TO_KSI_MAP` entries. In parallel, pre-populate `SCUBA_TO_KSI_MAP` now with the seven new SECURITYSUITE policy identifiers visible in the open issues — their NIST control mappings can be inferred from UIAO_002 Appendix C's existing SECURITYSUITE rows and the issue descriptions. Don't wait for Qwilfish to ship.

---

### Enhancement 3 — OPA Version Verification in the ScubaGear Adapter Pre-Flight

**The gap.** ScubaGear Issue #2075 (filed by MichaelHicks-MSFT, accepted into Qwilfish) identifies that `Reset-ScubaGearDependencies` silently ignores OPA version skew. UIAO's `scubagear_adapter.py` ingests ScubaGear output, but if the underlying ScubaGear run used an incompatible OPA binary, the Rego policy evaluations may be wrong in ways that produce plausible-looking but incorrect JSON — failing controls that should pass, or vice versa. UIAO currently has no visibility into the OPA version that produced the ScubaGear output it's consuming.

**Recommendation.** Add an OPA version field check to the normalization pre-flight in `normalize_scuba.py`. ScubaGear's output JSON includes metadata about the tool version; extend the normalization envelope to extract and validate the reported OPA version against a minimum known-good version pinned in `scuba.yaml`. If the OPA version is absent or below the pin, emit a `DRIFT-PROVENANCE` warning rather than failing silently. Once ScubaGear #2075 ships (Qwilfish), the ScubaGear run manifest will include OPA version detail — update the adapter to consume it. Log it in the run manifest so it's auditable.

---

### Enhancement 4 — PIM for Groups Escalation Risk as Agency-Specific Desired State

**The gap.** ScubaGear Issue #2072 documents that `MS.AAD.7.4v1` doesn't warn about the password reset escalation path when PIM for Groups is used — a real attack surface in GCC Moderate tenants. UIAO maps `MS.AAD.7.4v1` to `AU-6` (audit log analysis), but the PIM escalation concern actually implicates `AC-6` (least privilege) and `AC-2` (account management). This is exactly the category of agency-specific desired state beyond the SCuBA minimum that UIAO's architecture explicitly supports.

**Recommendation.** Add a new entry to `gcc-boundary-gap-registry.yaml` documenting the PIM for Groups password reset escalation path as a known GCC Moderate gap. Create a desired-state rule in UIAO's rules layer (a Rego rule or a KSI supplemental check) that evaluates whether PIM for Groups is active on any groups with password reset permissions for privileged accounts. Wire this to the existing `entra_policy_targeting.py` adapter. Register it as a `DRIFT-AUTHZ`-class finding. This fills the gap upstream before ScubaGear closes it in their baseline, and demonstrates the value of UIAO's agency-specific desired-state layer as described in Discussion #27 to the ScubaConnect community.

---

### Enhancement 5 — Multi-Agency Artifact Distribution Layer (RFC-0026 Structural Gap)

**The gap.** UIAO_132 §3.2 and §3.3 describe OSCAL drops to Connect.gov and a signed read-only feed for agency customers, but these are described as manual or aspirational. The core unresolved gap in RFC-0026 — confirmed by CSP-AB, cb-axon, acloudcj, and ADI — is that the traditional pathway requires making ConMon artifacts *accessible* to all agency customers, with the burden of proof being that access was provided and documented, not that every agency actually consumed the data. UIAO currently has no mechanism to enumerate its agency customer list, distribute notifications, and record distribution events.

**Recommendation.** Create an `agency-customer-registry.yaml` in canon (analogous to `adapter-registry.yaml`) that registers each agency ATO holder with a designated ConMon contact, preferred delivery channel (Connect.gov folder path, email notification, OSCAL feed endpoint), and ConMon agreement date. Extend `conmon-aggregate.yml` to iterate this registry and emit per-agency distribution receipts (signed with the same HMAC-SHA256 chain used for evidence bundles). Store receipts in `evidence/distribution/<agency-id>/<yyyy-mm>/`. This gives UIAO machine-trackable proof of the "provided to all agency customers" requirement — which is exactly what acloudcj flagged as the definition the RFC needs to clarify. UIAO can model the correct behavior independently of whether FedRAMP ever issues formal guidance.

---

### Enhancement 6 — Scope Trigger Automation for New Agency ATOs

**The gap.** Commenter acloudcj in RFC-0026 asked whether the collaborative ConMon obligation triggers the moment a second ATO is granted, or only after both are fully active. UIAO_132 is silent on this. If a new agency ATO is in-process or just granted, UIAO needs to onboard that agency to the distribution registry and include them in the next monthly meeting without a gap.

**Recommendation.** Extend the `onboarding/` module with an `ato-onboarding` workflow that: (a) accepts a new agency ATO event (can be manually triggered initially), (b) adds the agency to `agency-customer-registry.yaml` via a PR with required review, (c) sends a welcome packet to the designated ConMon contact with the Connect.gov folder path and OSCAL feed URL, and (d) adds them to the next monthly meeting invite. This creates an auditable onboarding trail that UIAO can reference if a failure dispute arises.

---

### Enhancement 7 — Raw Scan Redaction Layer for Traditional-Pathway VLN Compliance

**The gap.** The most-upvoted thread in RFC-0026 — CSP-AB, cb-axon, judgecspab-max, rgaffey, mjprager — argues that the traditional pathway's raw scan distribution requirement is both operationally impractical and actively dangerous for IaaS providers. UIAO is in the traditional pathway (Pathway 2) per ADR-043. UIAO_132 §2.3 notes the manual POA&M submission but doesn't address the raw scan distribution question at all. The RFC currently requires sharing OS/DB/web/container/service config scans monthly, which in a GCC Moderate environment means ScubaGear JSON output and any supplemental scan artifacts.

**Recommendation.** Implement a `scan-redaction-pipeline` in the evidence layer that, before distributing scan artifacts to the agency-customer-registry, applies a configurable redaction profile to remove specific exploit-path details (analogous to `VDR-RPT-NID`'s responsible disclosure principle) while preserving risk level, control family, CSP-assigned tracking ID, and finding state. Store unredacted artifacts in `evidence/raw/` (accessible to 3PAO and FedRAMP corrective action use only), and distribute redacted artifacts to agency customers via `evidence/distribution/<agency-id>/`. Document the redaction policy in a new ADR. This positions UIAO ahead of any RFC-0026 clarification on this point, and gives UIAO a concrete implementation to reference if and when FedRAMP addresses the disclosure asymmetry.

---

### Enhancement 8 — Pathway-1 (VDR/CCM BIR) Migration Readiness Gates

**The gap.** UIAO_132 §2.4 and §3.4 describe the Pathway-1 migration as triggered by upstream publication of the VDR and CCM Balance Improvement Releases. badgerinspace's comment in RFC-0026 noted a direct contradiction between RFC-0026 (which treats both pathways as co-equal options indefinitely) and FedRAMP Notice 0009 (which sets mandatory VDR adoption by June 2027 and mandatory CCM BIR adoption by April 2027). UIAO needs to be on Pathway 1 by those dates regardless of whether the RFC ever formally mandates it.

**Recommendation.** Add the Notice 0009 deadlines to the ADR-043 enforcement timeline and create dated migration readiness gates in `conmon-aggregate.yml`: a readiness check that activates 90 days before each Notice 0009 deadline, validates that the relevant BIR adapter exists and is tested, and opens a governance issue if the migration hasn't started. Create skeleton adapters for `vdr_adapter.py` and `ccm_bir_adapter.py` now (even as stubs), registered in `adapter-registry.yaml` with `status: reserved` and `mandatory-by` dates. This makes the migration path visible and traceable rather than a future surprise.

---

## Recommended Forum Responses

These are specific, substantive contributions UIAO could make to each forum to advance the project's presence and address open questions. Each is drafted as if WhalerMike were posting, using UIAO's documented architecture.

---

### Response A — FedRAMP/community Discussion #130 (RFC-0026)

**Post as a follow-up to WhalerMike's April 11 comment, addressing the two most active unresolved threads:**

**On the raw scan disclosure problem (CSP-AB, cb-axon, acloudcj):**

> Following up on my earlier comment about the SCuBA/BOD 25-01 gap — we've now implemented a redaction layer in our governance substrate for exactly this issue. For traditional-pathway VLN compliance in a GCC Moderate environment, we store unredacted scan artifacts in a restricted evidence tier accessible only during 3PAO review and FedRAMP corrective action, and distribute redacted artifacts (risk level, control family, tracking ID, and finding state preserved; plugin IDs, CVE identifiers, and exploit path details removed) to agency customers via signed, dated distribution receipts.

>

> This operationally implements the CSP-AB recommendation without waiting for FedRAMP to formalize the disclosure asymmetry fix. It also creates machine-trackable proof that distribution happened, which addresses acloudcj's question about what "conduct" means for meeting the requirement.

>

> Happy to share the schema for the redaction profile and distribution receipt format if it would be useful input to FedRAMP's thinking on the traditional-pathway language.

**On the meeting definition gap (austinsonger, Raj P., ADI):**

> On the "what constitutes hosting a meeting" question: we've implemented a standing ConMon meeting spec that includes: published agenda 5 business days prior, open attendee list by agency customer of record, recording and signed minutes attached to the monthly evidence pack, and a structured agenda covering POA&M delta, critical findings, upstream tool changes, and agency Q&A. The meeting and all its artifacts are machine-recorded in the same evidence chain as the scan outputs.

>

> The key distinction this makes is separating "the CSP's obligation to facilitate and document" from "agency attendance" — we record that we provided access and published the agenda regardless of whether every agency sent someone. That's the right framing for acloudcj's concern, and it would be worth FedRAMP making explicit in the final rule.

---

### Response B — cisagov/ScubaConnect Discussion #27 (follow-up to MichaelHicks-MSFT's UTCM suggestion)

**Post as WhalerMike, closing the loop on the UTCM discussion:**

> @MichaelHicks-MSFT — wanted to follow up now that I've had time to build this out. You're right that UTCM is the commercial-space answer to this problem, and for non-FedRAMP tenants it's probably the right call. The GCC Moderate blocker I raised turned out to be real — UTCM has no GCC-resident deployment model yet, so it's not available to FCEB agencies under FedRAMP-Moderate rules.

>

> We ended up building the governance layer I described as an open project: [link to WhalerMike/uiao]. The short version: it consumes ScubaGear's JSON/CSV output directly (no changes to ScubaGear or ScubaConnect required), maintains a canonical desired-state definition for the full tenant configuration beyond the SCuBA minimums, runs continuous drift detection between scheduled ScubaGear runs using a drift engine, and produces OSCAL 1.1.2-compliant SSP/POA&M/SAR artifacts with cryptographically signed evidence chains. It operates entirely within the GCC Moderate boundary.

>

> With RFC-0026 enforcement starting January 2027, the "persistent compliance state between scan intervals" problem is now a formal ConMon requirement, not just a nice-to-have. Curious whether the ScubaConnect team has thought about how ScubaConnect's output schema might evolve to make downstream governance tooling easier to consume — specifically whether a stable `findings-delta.json` artifact alongside the current output would be worth adding.

---

### Response C — cisagov/ScubaGear Issue #2075 (MichaelHicks-MSFT's OPA dependency issue)

**Post as WhalerMike, adding a downstream consumer perspective:**

> Adding a downstream consumer perspective here: tools that ingest ScubaGear output have no way to verify the OPA version that produced the assessment, which means we can't detect if OPA version skew caused evaluation errors in the upstream run. The current output JSON doesn't carry the OPA version in the metadata.

>

> When this fix ships, it would be valuable if the `Reset-ScubaGearDependencies` output (or the ScubaGear run manifest) exposed the OPA version used for the assessment in a stable, machine-readable field — ideally in `ScubaResults.json` alongside the existing tool version metadata. This would let downstream pipelines add a provenance check against a minimum known-good OPA version and flag assessments that may need re-running.

---

### Response D — cisagov/ScubaGear (new issue, proactively)

**File a new issue as WhalerMike, raising the SECURITYSUITE mapping gap before Qwilfish ships:**

> **Title:** Stable machine-readable policy manifest for SECURITYSUITE and future baseline additions

>

> **Summary:** As ScubaGear adds new policy groups (SECURITYSUITE currently, additional groups in future milestones), downstream tools that maintain static policy-to-control mappings (like OSCAL generators) need to update their mapping tables every time a new policy group ships. Today this requires reading release notes and manually extracting policy IDs.

>

> **Request:** Consider publishing a `policy-manifest.json` (or extending `ScubaConfigDefaults.json`) that provides a stable, machine-readable list of all current policy IDs, their associated product baselines, their NIST SP 800-53 control family, and their version string. This would let downstream tools auto-detect new policies on first run and flag unmapped entries for human review, rather than failing silently or requiring manual mapping table maintenance.

>

> This would be particularly useful for the SECURITYSUITE group (#2104–#2110) being added in Qwilfish, where the NIST control mappings are known but need to be formally published somewhere machine-consumable.

## Assessment of Latest Claude Code Output

The repo is currently at commit `7f974d8` (merged ~10 minutes before this assessment). Here is a precise status of every recommendation from the prior session, mapped to what Claude Code has and hasn't shipped.

---

### What Has Been Implemented

**Enhancement 3 — OPA Version Verification** ✅ **Fully landed, in two PRs.**

This is the most complete implementation. PR #171 (`feat(scuba): preserve ScubaGear envelope metadata + add OPA version pin`) and PR #173 (`feat(scuba): DRIFT-PROVENANCE pre-flight for OPA version`) together constitute a two-stage implementation exactly matching the recommendation.

PR #171 extended `discover_scuba_input / _load_single_file` to return a 3-tuple `(format_desc, results, source_metadata)`, where `source_metadata` is the top-level JSON envelope from the ScubaGear run. `assessment_metadata.tool_version` now reflects the ScubaGear `ToolVersion` field when present. A new `assessment_metadata.source_envelope` field carries the full envelope for downstream provenance.

PR #173 added the active validation layer on top: the normalizer reads the ScubaGear run's OPA version against the `opa_version_minimum` pin declared in `scuba.yaml` (currently pinned to `0.59.0`, with a code comment explicitly citing `cisagov/ScubaGear#2075` and noting the field will be machine-readable once Qwilfish ships). The classification ladder is: missing from envelope → `DRIFT-PROVENANCE` (risky), below pin → `DRIFT-PROVENANCE` (unauth), unparseable → `DRIFT-PROVENANCE` (risky), no pin configured → no drift. The result attaches to `assessment_metadata.provenance_preflight` and emits a `WARNING`-level log with an explicit `DRIFT-PROVENANCE` status rather than failing normalization silently.

This exactly implements what was recommended — and it correctly anticipates the Qwilfish fix by being graceful about missing OPA version fields rather than hard-failing. The `scuba.yaml` pin is a clean integration point.

**Enhancement 2 (partial) — SECURITYSUITE mapping pre-population** ✅ **Done.**

The `scubagear_adapter.py` `SCUBA_TO_KSI_MAP` now contains all 23 `MS.SECURITYSUITE` policy entries (`MS.SECURITYSUITE.1.1v1` through `MS.SECURITYSUITE.8.2v1`). This is ahead of the Qwilfish release. The mapping is consistent with the NIST control assignments in UIAO_002 Appendix C. Groups 4–8 that the open ScubaGear issues (#2104–#2110) are implementing are already mapped. This removes the orphan-policy risk on Qwilfish day-one.

---

### What Has Been Partially Addressed

**Enhancement 2 — ScubaGear Release Tracking CI Gate** ⚠️ **Not yet.** |

The SECURITYSUITE entries are pre-populated, but there is no `scubagear-upstream-track.yml` workflow watching the cisagov/ScubaGear releases feed. If another unexpected policy group ships in a future milestone, UIAO will be in the same position it was before this work. The automated diff-and-alert mechanism is still missing. This should be the next CI workflow to build.

**Enhancement 8 — Pathway-1 Migration Gates / Notice 0009 deadlines** ⚠️ **Scaffolded but not complete.** |

`conmon-aggregate.yml` exists and landed on Apr 21 (from earlier work), and the `fedramp-rfc-0026-ca7-integration.md` spec documents Pathway-1 migration triggers. However, there are no `vdr_adapter.py` or `ccm_bir_adapter.py` stub files, no `mandatory-by` dates in `adapter-registry.yaml`, and no dated readiness-check gates wired into `conmon-aggregate.yml`. UIAO_132 Open Items O4 (draft Pathway-1 migration ADR) and O2 (schema-promote the RFC-0026 block) are still open.

---

### What Has Not Been Implemented Yet

**Enhancement 1 — Connect.gov POA&M Submission Automation** ❌ **Not started.**

UIAO_132 Open Item O1 is still marked as a manual operator task gated to the 2027-01-01 enforcement date. The `conmon-aggregate.yml` workflow emits `conmon-aggregate-summary.json` with per-adapter RFC-0026 cards (O5, done Apr 21), but there is no submission step. This is the highest enforcement-risk item in the backlog. Six months remain before it matters; it should be the next major workflow.

**Enhancement 4 — PIM for Groups Escalation as Agency-Specific Desired State** ❌ **Not started.**

Nothing in `gcc-boundary-gap-registry.yaml`, the rules layer, or `entra_policy_targeting.py` addresses the PIM escalation path. The ScubaGear issue #2072 is still open upstream. This is a meaningful gap given UIAO's identity-first positioning.

**Enhancement 5 — Multi-Agency Artifact Distribution Layer** ❌ **Not started.**

No `agency-customer-registry.yaml` exists in canon. The distribution and receipt system described in the recommendation has no implementation. The monitoring module (`event_processor.py`, `ongoing_auth.py`, `sentinel_hook.py`) appears to be an existing event-processing layer rather than a new distribution mechanism. This is the largest structural gap relative to RFC-0026 enforcement.

**Enhancement 6 — ATO Onboarding Workflow** ❌ **Not started.**

The `onboarding/` module exists but has not been extended with an `ato-onboarding` trigger or the agency registry PR workflow.

**Enhancement 7 — Raw Scan Redaction Layer** ❌ **Not started.**

No redaction pipeline exists in the evidence layer. The `vulnscan_adapter.py` file exists but its content does not include a redaction or tiered-distribution mechanism. For the traditional Pathway-2 VLN pathway, this remains an unmitigated disclosure risk.

---

### Quality Observations on What Was Built

The OPA version verification implementation is technically well-executed. The two-PR approach — first extracting envelope metadata, then adding the validation layer — is a clean separation of concerns matching UIAO's adapter pattern. The `DRIFT-PROVENANCE` classification is correct: this is a provenance integrity question, not a schema or semantic one. The graceful degradation (warning rather than hard-fail when OPA version is absent) is the right call for a field that ScubaGear doesn't yet emit.

One minor issue to note: the `scubagear_adapter.py` still has a stale docstring referencing `src/uiao/impl/adapters/scubagear_adapter.py` in the file comment — it should be `src/uiao/adapters/scubagear_adapter.py` per ADR-032's post-consolidation layout. Also `substrate-drift.yml` now shows a failure flag in the commit history (the `docs:` commit) — worth checking whether the substrate-drift gate is catching something real there.

---

### Prioritized Next Steps for Claude Code

Given what's done and what isn't, the recommended sequencing for the next Claude Code session is:

1. **Enhancement 5 (agency-customer-registry + distribution receipts)** — highest RFC-0026 compliance value, completely unstarted, blocks O1 automation.

2. **Enhancement 1 (Connect.gov submission automation)** — can't land until Enhancement 5 provides the registry, but the submission workflow logic can be scaffolded now.

3. **Enhancement 2 CI gate (scubagear-upstream-track.yml)** — low implementation cost, eliminates future mapping-drift risk permanently.

4. **Enhancement 4 (PIM escalation rule)** — good fit for the next Entra adapter work; makes UIAO's agency-specific desired-state claim concrete.

5. **Enhancement 7 (redaction layer)** — can be a thin evidence-filter module; important for Pathway-2 VLN defensibility.

6. **Enhancement 8 completion (BIR stubs + mandatory-by dates)** — governance housekeeping, low effort, high audit value.

Back to top