Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Validates FedRAMP Plan of Action and Milestones (POAM) files for structural integrity, naming conventions, deduplication, and cross-sheet consistency
.claude/skills/williamzujkowski-fedramp-poam-quality-check/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -5% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -5% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 41% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 177% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 131% | 0% |
Use this skill when you need to validate a FedRAMP Plan of Action and Milestones (POAM) file before submission or continuous monitoring updates. The POAM tracks system weaknesses and deficiencies with corrective actions and timelines according to FedRAMP requirements (accessed 2025-10-25T21:04:34-04:00: https://www.fedramp.gov/assets/resources/documents/CSP_POAM_Template_Completion_Guide.pdf).
Trigger conditions:
Required validations before proceeding:
poam_tsv file exists and is readableNOW_ET using NIST time.gov semantics (America/New_York, ISO-8601)naming_convention provided, validate JSON schema structurerequired_fields, date_format, severity_levelsAbort conditions:
Goal: Fast validation for 80% of common issues
POA&M Item ID, Control Identifier, Weakness DescriptionRisk Level (or Severity), Scheduled Completion Date, Statusjson { "errors": [ {"row": 12, "field": "Scheduled Completion Date", "issue": "Invalid date format", "severity": "error"} ], "warnings": [], "stats": {"total_rows": 47, "duplicates": 0, "missing_required": 3} }
Token budget: ≤2k
Goal: Enforce naming standards and detect duplicates
POA&M Item ID format (e.g., POAM-YYYY-### or custom regex)Control Identifier against NIST 800-53 rev4/rev5 catalogStatus values: {Open, In Progress, Completed, Risk Accepted}Control Identifier, Weakness Description, Resource)NOW_ET comparisonwarnings for near-duplicates and overdue timelinesduplicates count in statsToken budget: ≤6k
Goal: Deep validation across Open/Closed sheets and logical integrity
Completion Date and Status = CompletedRisk LevelWeakness Description with known CVE/CWE patternsOriginal Detection Date ≤ Scheduled Completion DateResources Required field is populated for High/Moderate itemsmarkdown ## Critical Issues (3)
## Warnings (7)
## Recommendations
Token budget: ≤12k
Ambiguity thresholds:
Abort/stop conditions:
Escalation triggers:
Primary output (findings.json):
json{ "errors": [ { "row": 12, "field": "Scheduled Completion Date", "issue": "Invalid date format (expected YYYY-MM-DD)", "severity": "error" } ], "warnings": [ { "row": 8, "field": "Risk Level", "issue": "High-severity item overdue by 15 days", "severity": "warning" } ], "stats": { "total_rows": 47, "duplicates": 2, "missing_required": 3, "overdue_high": 1, "overdue_moderate": 4 } }
Secondary output (fix_suggestions.md):
Required fields in all outputs:
timestamp: ISO-8601 Eastern Time (NOW_ET)skill_version: "1.0.0"input_file: original filenameExample 1: Basic T1 validation (≤30 lines)
python# Input: poam_tsv = "fedramp_poam_2025.tsv" findings = { "errors": [ {"row": 5, "field": "POA&M Item ID", "issue": "Missing"}, {"row": 12, "field": "Date", "issue": "Invalid '13/45/2025'"} ], "warnings": [ {"row": 8, "issue": "High overdue 15d"} ], "stats": {"total_rows": 47, "duplicates": 2} } fix_suggestions = """ ## Critical (2) - Row 5: Add POA&M Item ID (POAM-2025-NNN) - Row 12: Fix date (YYYY-MM-DD) ## Warnings (1) - Row 8: High past 30-day window """ import json print(json.dumps(findings)) print(fix_suggestions) # Output: JSON findings + markdown suggestions
Token budgets (mandatory):
Safety checks:
Auditability:
Determinism:
Performance targets:
Official FedRAMP guidance:
NIST references:
OSCAL resources:
Helper tools (linked in resources/):
naming_convention_schema.json - Default FedRAMP field validation rulessimilarity_thresholds.yaml - Tunable deduplication parameters| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 25,007 | 12,210 | -51% | 1 | 1 | 0% | 6,242 | 5,944 | -5% | 0 | 0 | — |
case-02 | fail→pass | 24,415 | 11,878 | -51% | 1 | 1 | 0% | 6,237 | 5,943 | -5% | 0 | 0 | — |
case-03 | fail→pass | 16,691 | 10,791 | -35% | 1 | 1 | 0% | 4,054 | 5,730 | +41% | 0 | 0 | — |
case-04 | pass→pass | 9,333 | 8,878 | -5% | 1 | 1 | 0% | 2,383 | 5,174 | +117% | 0 | 0 | — |
case-05 | pass→pass | 5,450 | 6,641 | +22% | 1 | 1 | 0% | 1,259 | 4,462 | +254% | 0 | 0 | — |
case-06 | pass→pass | 5,619 | 5,421 | -4% | 1 | 1 | 0% | 1,150 | 4,209 | +266% | 0 | 0 | — |
case-12 | fail→pass | 8,062 | 5,339 | -34% | 1 | 1 | 0% | 1,521 | 4,206 | +177% | 0 | 0 | — |
case-07 | fail→pass | 8,191 | 5,789 | -29% | 1 | 1 | 0% | 1,783 | 4,118 | +131% | 0 | 0 | — |
case-08 | fail→pass | 9,299 | 3,747 | -60% | 1 | 1 | 0% | 1,887 | 3,729 | +98% | 0 | 0 | — |
case-09 | fail→pass | 8,021 | 6,617 | -18% | 1 | 1 | 0% | 1,571 | 4,254 | +171% | 0 | 0 | — |
case-10 | fail→pass | 8,047 | 3,687 | -54% | 1 | 1 | 0% | 1,552 | 3,748 | +141% | 0 | 0 | — |
case-11 | fail→pass | 6,737 | 3,016 | -55% | 1 | 1 | 0% | 1,302 | 3,581 | +175% | 0 | 0 | — |
case-13 | pass→pass | 10,004 | 7,304 | -27% | 1 | 1 | 0% | 1,908 | 4,365 | +129% | 0 | 0 | — |
case-14 | fail→pass | 7,248 | 1,632 | -77% | 1 | 1 | 0% | 1,302 | 3,323 | +155% | 0 | 0 | — |
case-15 | pass→pass | 8,334 | 7,607 | -9% | 1 | 1 | 0% | 1,633 | 4,631 | +184% | 0 | 0 | — |
case-16 | pass→pass | 17,907 | 3,980 | -78% | 1 | 1 | 0% | 1,851 | 3,878 | +110% | 0 | 0 | — |
case-17 | fail→pass | 9,073 | 1,940 | -79% | 1 | 1 | 0% | 1,710 | 3,382 | +98% | 0 | 0 | — |
case-18 | fail→pass | 16,746 | 3,177 | -81% | 1 | 1 | 0% | 1,229 | 3,639 | +196% | 0 | 0 | — |
case-19 | fail→pass | 7,469 | 2,061 | -72% | 1 | 1 | 0% | 1,509 | 3,197 | +112% | 0 | 0 | — |
case-20 | pass→pass | 18,696 | 11,153 | -40% | 1 | 1 | 0% | 3,329 | 5,003 | +50% | 0 | 0 | — |
case-21 | pass→pass | 8,107 | 11,350 | +40% | 1 | 1 | 0% | 1,381 | 4,908 | +255% | 0 | 0 | — |
case-22 | pass→pass | 14,840 | 13,713 | -8% | 1 | 1 | 0% | 3,047 | 5,911 | +94% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +59 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.