strm-mapping-308058 — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited strm-mapping-308058 (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Activate this skill whenever the user asks to:
All work must be performed inside the working-directory/ folder at the repository root. Open Qoder from the repository root so relative paths resolve correctly.
working-directory/, knowledge/, or examples/working-directory/When a mapping is fully complete, create a dated artifact folder:
working-directory/mapping-artifacts/YYYY-MM-DD_<FocalFramework>-to-<TargetFramework>/Place the completed CSV inside the dated folder.
Before beginning any work, confirm both parameters with the user:
| Parameter | Description | Example |
|---|---|---|
| Source (Focal) Document | The framework being mapped FROM | FFIEC CAT, ISO/IEC 27001:2022 |
| Target (Reference) Document | The framework being mapped TO | CIS Controls v8, NIST CSF 2.0 |
| Step | Script to call |
|---|---|
| Step 1 (Gather) | node scripts/bin/strm-check-existing-mapping.mjs --focal "<Focal>" --target "<Target>" --working-dir working-directory |
| Step 1 (JSON input) | node scripts/bin/strm-extract-json.mjs <file.json> |
| Step 4 (Write CSV) | node scripts/bin/strm-init-mapping.mjs --focal "<Focal>" --target "<Target>" --working-dir working-directory, then node scripts/bin/strm-generate-filename.mjs --focal "<Focal>" --target "<Target>" [--bridge "<Bridge>"] |
| Post-completion (required) | node scripts/bin/strm-validate-csv.mjs --file "<output.csv>" |
| Post-completion | node scripts/bin/strm-gap-report.mjs --file "<output.csv>" --focal "<Focal>" --target "<Target>" --working-dir working-directory |
Read before generating output:
knowledge/ir8477-strm-reference.md ← STRM methodology rules
working-directory/<source-document>.csv/.pdf/.md/.json/.yml/.toml ← Focal document
working-directory/<target-document>.csv/.pdf/.md/.json/.yml/.toml ← Reference documentSearch order: working-directory/ → repo root → knowledge/
When an input is JSON and uses HTML-tagged descriptions, run:
node scripts/bin/strm-extract-json.mjs <input.json> [output.csv]Default output is working-directory/<framework>-extracted.csv with columns: controlId,title,family,description.
Write all intermediate files (extracted control lists, partial drafts) to working-directory/scratch/. Do not use system temp directories.
Check for an existing STRM file for this source→target pair before starting.
For each document: record full name, URL/citation, control ID format.
| Attribute | Allowed Values | Scoring Rule |
|---|---|---|
Confidence Levels | high, medium, low | high=+0, medium=−1, low=−2 |
NIST IR-8477 Rational | semantic, functional, syntactic | syntactic=−1, others=+0 |
STRM Relationship | equal, subset_of, superset_of, intersects_with, not_related | equal=10, subset/superset=7, intersects=4, not_related=0 |
Strength of Relationship | Integer 1–10 | base + confidence adj + rationale adj, clamped to [1,10] |
STRM Rationale | Free text | Explain both FDE and RDE, then why the relationship holds |
Notes | Free text | Flag scope differences, partial overlaps, or gaps |
#### Strength Score Formula
strength = base_score + confidence_adj + rationale_adj
base_score : equal=10 subset_of=7 superset_of=7 intersects_with=4 not_related=0
confidence : high=0 medium=-1 low=-2
rationale : syntactic=-1 semantic=0 functional=0
result : clamp(strength, 1, 10)#### Calibration Defaults
| Attribute | Default | Override Condition |
|---|---|---|
Confidence Levels | high | medium for ambiguity; low for significant inference |
NIST IR-8477 Rational | semantic | functional for same outcome via different mechanisms. When mapping across different regulatory domains (for example healthcare → law enforcement, financial → defense), default to functional unless control wording and scope are substantially identical. Use syntactic only for word-for-word similarity (<1%). |
#### File Naming Convention
Set Theory Relationship Mapping (STRM)_ [(<Focal>-to-<Bridge>)-to-<Target>] - <Focal> to <Target>.csvFor direct mappings, repeat the focal name as bridge.
#### CSV Structure
Copy TEMPLATE_Set Theory Relationship Mapping (STRM).csv and add data from Row 2:
Row 1: FDE#,FDE Name,Focal Document Element (FDE),Confidence Levels,NIST IR-8477 Rational,STRM Rationale,STRM Relationship,Strength of Relationship,<Target> Requirement Title,Target ID #,<Target> Requirement Description,Notes
Row 2+: <data rows>Column definitions:
| Col | Header | Content |
|---|---|---|
| A | FDE# | Source control ID |
| B | FDE Name | Short label for the source control |
| C | Focal Document Element (FDE) | Full source control text |
| D | Confidence Levels | high / medium / low |
| E | NIST IR-8477 Rational | semantic / functional / syntactic |
| F | STRM Rationale | Narrative explaining both controls and the relationship |
| G | STRM Relationship | equal / subset_of / superset_of / intersects_with / not_related |
| H | Strength of Relationship | Integer 1–10 (computed) |
| I | <Target> Requirement Title | Target document short title (replace <Target> with actual target name) |
| J | Target ID # | Target control ID |
| K | <Target> Requirement Description | First sentence of target control text (replace <Target> with actual target name) |
| L | Notes | Scope differences, gaps, or caveats |
<Source> <FDE#> requires <what FDE requires>. <Target> <Target ID#> requires <what RDE requires>. Both <shared objective>.For intersects_with: append "Both address <overlap>. <Source> additionally covers <A>; <Target> additionally covers <B>."
| A→B | B→C | Derived A→C |
|---|---|---|
| equal | equal | equal |
| equal | X | X |
| X | equal | X |
| subset_of | subset_of | subset_of |
| superset_of | superset_of | superset_of |
| not_related | anything | not_related |
| intersects_with | anything | indeterminate — flag for manual review |
| Forward | Inverse |
|---|---|
| equal | equal |
| subset_of | superset_of |
| superset_of | subset_of |
| intersects_with | intersects_with |
| not_related | not_related |
<Target> in columns I and K with the actual target document name (e.g., ISO 27001 Requirement Title, ISO 27001 Requirement Description).subset_of + superset_of = 0%, review equal rows; many may actually be subset_of.equal > 50%, review each equal row and confirm neither control explicitly requires more than the other.subset_of, not equal.Load these files only when explicitly requested by the user:
| File | Contents |
|---|---|
knowledge/library/risks.json | SCF 2025.4 risk catalog |
knowledge/library/threats.json | Threat catalog |
Trigger phrases: "include risk data", "add threat context", "risk-to-control mapping", "threat-to-control", "use the risk library".
Chain: Threat → Risk → Control — apply transitivity rules when traversing.
| Resource | Purpose |
|---|---|
TEMPLATE_Set Theory Relationship Mapping (STRM).csv | Blank template — copy, never modify |
knowledge/ir8477-strm-reference.md | Full NIST IR 8477 methodology |
examples/ | Worked examples for each mapping type |
knowledge/library/risks.json | Risk catalog (opt-in only) |
knowledge/library/threats.json | Threat catalog (opt-in only) |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.