nsauditor-ai-agent-skill 0.2.47 → 0.2.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,51 @@ Release notes for **`nsauditor-ai-agent-skill`** — installable knowledge packa
4
4
 
5
5
  ---
6
6
 
7
+ ## 0.2.49 (2026-09-04) — the client-report release
8
+
9
+ Paired with **Enterprise 0.44.0 / Community 0.2.51**. **NOT a floor bump: Community stays `>= 0.2.49`.**
10
+
11
+ - **New teaching: the Pro `report` subcommand.** `nsauditor-ai report --from <dir> --format
12
+ executive|jira` turns a completed run into a client-facing HTML report or a Jira-importer CSV, with
13
+ `--run`, `--brand`, `--out` and `--allow-partial`. Two limits an agent must state rather than
14
+ discover: the Jira import mapping has not been verified against a live Jira instance, and a
15
+ value-less flag is a fatal error rather than a silent default.
16
+ - **New teaching: an S3 audit-trail gap now means BOTH streams are missing.** Plugin 1020
17
+ cross-checks CloudTrail data-event coverage before reporting a missing server access log, and emits
18
+ positive substrate naming the covering trail instead. A gap disappearing after upgrade on a covered
19
+ bucket is the fix working. Every uncertain answer — denied read, absent optional SDK, stopped trail,
20
+ delivery error, prefix-scoped or one-sided selector — keeps the finding unchanged.
21
+ - Plugin catalog unchanged at 29 EE; all eight coverage matrices unchanged.
22
+
23
+ ---
24
+
25
+ ## 0.2.48 (2026-09-02) — paired with EE 0.43.0: teach what a provider badge means, and what an evidence gap must not say
26
+
27
+ **Two teaching changes, both about how to READ a scan rather than how to run one.**
28
+
29
+ **A provider badge is now trustworthy, and the assistant should say why it was not.** Until
30
+ EE 0.43.0, an Enterprise scan whose cloud SDK failed to load reported that provider as
31
+ **audited** — eighteen refusals across seventeen AWS and GCP plugins returned `up: false` with
32
+ the cause written only into `warnings`, and the Community plugin manager derives
33
+ `auditedProviders` from plugins that *ran*. Teach: **`auditedProviders` and `providerStatus`
34
+ are now answerable questions** — `{ran, skipped, errored}` per provider — and a cloud whose SDK
35
+ is missing appears as `errored`, not as audited. If a user reports a provider missing from
36
+ `auditedProviders` after upgrading, that is the fix working, not a regression.
37
+
38
+ **An evidence gap states a CAUSE, never an instruction.** The engine quotes a plugin's reason
39
+ into the *"could not run"* sentence of every control that plugin evidences. It used to quote the
40
+ whole thrown message, and the SDK loaders throw remediation inside it, so `Install: npm install
41
+ <pkg>@latest` reached the gap text of 7 SOC 2, 2 GDPR and 12 NIST SP 800-171 controls. Teach the
42
+ split: **the report says what was not evidenced; the operator channel says how to change it** —
43
+ and never quote an evidence-gap line to a user as a remediation step. ⚠️ Especially for
44
+ **air-gapped** deployments, where an `npm install` instruction cannot be followed at all.
45
+
46
+ **Also taught:** the two causes are now distinct in the gap text — `plugin skipped: <reason>`
47
+ (fix with `--host` / `CLOUD_PROVIDER`) versus `scanner error: <cause>` (fix a dependency or a
48
+ credential); and a GDPR Art. 32 report now fails closed when an Azure scan refuses, where it
49
+ previously failed nothing. Plugin catalog UNCHANGED at 29 EE; all eight coverage matrices
50
+ UNCHANGED; **peer floor UNCHANGED at CE >= 0.2.49** — not a bump.
51
+
7
52
  ## 0.2.47 (2026-08-27) — paired with EE 0.42.0: the sovereign-cloud release
8
53
 
9
54
  Requires **CE >= 0.2.49** (raised from 0.2.45 — Enterprise 0.42.0 needs the new partition detection).
package/README.md CHANGED
@@ -11,7 +11,11 @@ Works with **Claude Code**, **Claude Desktop**, **Cursor**, **Windsurf**, **VS C
11
11
 
12
12
  ## Current release
13
13
 
14
- **0.2.47** — paired with **Enterprise 0.42.0 / Community 0.2.49**. ⚠️ **A real floor bump: Community >= 0.2.49.**
14
+ **0.2.49** — paired with **Enterprise 0.44.0 / Community 0.2.51**. ⚠️ **NOT a floor bump: Community stays >= 0.2.49.** New in this release's teaching: **there is a Pro `report` subcommand** (`nsauditor-ai report --from <dir> --format executive|jira`) that turns a completed run into a client-facing HTML report or a Jira-importer CSV — with two limits an agent should state rather than let a user discover: the Jira import mapping has not been verified against a live Jira instance, and a value-less flag is a fatal error rather than a silent default; and **an S3 audit-trail gap now means BOTH streams are missing** (plugin 1020 cross-checks CloudTrail data-event coverage before reporting a missing server access log, so a gap disappearing after upgrade on a covered bucket is the fix working, while every uncertain answer — denied read, absent optional SDK, stopped trail, delivery error, prefix-scoped or one-sided selector — keeps the finding unchanged).
15
+
16
+ **Prior: 0.2.48** — paired with **Enterprise 0.43.0 / Community 0.2.50**. ⚠️ **NOT a floor bump: Community stays >= 0.2.49**, derived rather than reflexive — the one Community behaviour the Enterprise fix depends on already shipped there. New in this release's teaching: **a provider badge is now trustworthy** (an Enterprise scan whose cloud SDK failed to load used to report that provider as *audited*, because a plugin result carrying neither an error nor a skip flag falls through to `ran` and `auditedProviders` derives from `ran`; eighteen refusals across seventeen AWS and GCP plugins now carry their cause, so such a provider reads `errored` and drops out — a provider disappearing after upgrade is the fix, not a regression), and **an evidence gap states a cause, never an instruction** (the engine quoted whole thrown messages, so the loaders' `Install: npm install <pkg>@latest` reached the gap text of 7 SOC 2 / 2 GDPR / 12 NIST SP 800-171 controls — never quote a gap line to a user as remediation, and note that under air-gapped operation it cannot be followed at all). The two causes are now distinct — `plugin skipped:` vs `scanner error:` — because the remedies differ; and a GDPR Art. 32 report now fails closed on an Azure refusal where it previously failed nothing.
17
+
18
+ **Prior: 0.2.47** — paired with **Enterprise 0.42.0 / Community 0.2.49**. ⚠️ **A real floor bump: Community >= 0.2.49.**
15
19
  New in this release's teaching: non-commercial AWS partitions (GovCloud, China, the ISO partitions and
16
20
  the European Sovereign Cloud) and Azure sovereign clouds are first-class, and both **refuse rather than
17
21
  silently reporting on the wrong estate**. An agent driving a sovereign scan should expect findings that
@@ -92,7 +96,7 @@ nsauditor-ai-agent-skill/
92
96
  ├── references/
93
97
  │ ├── workflows.md # Multi-step workflow recipes (full audit, CI/CD, CTEM)
94
98
  │ ├── schemas.md # Complete data structures (scan results, CVEs, findings)
95
- │ └── plugins.md # Full plugin catalog (55 scanners with ports & protocols — 27 Community + 28 Enterprise)
99
+ │ └── plugins.md # Full plugin catalog (56 scanners with ports & protocols — 27 Community + 29 Enterprise)
96
100
  ├── examples/
97
101
  │ └── agent-interactions.md # Example agent reasoning chains (9 scenarios)
98
102
  ├── package.json
@@ -149,7 +153,7 @@ When an AI agent loads this skill, it gains:
149
153
  | **Workflow patterns** | Multi-step chains: scan → CVE lookup → remediation report |
150
154
  | **Schema knowledge** | Complete data structures for parsing and presenting results |
151
155
  | **CPE construction** | How to map detected services to NVD vulnerability lookups |
152
- | **Plugin awareness** | 55 scanner plugins (27 Community + 28 Enterprise) with protocols, ports, capabilities, and multi-framework (SOC 2 · HIPAA §164.312 · NIST CSF 2.0 · PCI DSS v4.0.1 · ISO/IEC 27001:2022 · CIS Controls v8 · GDPR Art. 32 · NIST SP 800-171 Rev 2) substrate-evidence dimensions |
156
+ | **Plugin awareness** | 56 scanner plugins (27 Community + 29 Enterprise) with protocols, ports, capabilities, and multi-framework (SOC 2 · HIPAA §164.312 · NIST CSF 2.0 · PCI DSS v4.0.1 · ISO/IEC 27001:2022 · CIS Controls v8 · GDPR Art. 32 · NIST SP 800-171 Rev 2) substrate-evidence dimensions |
153
157
  | **Compliance frameworks** | **Eight frameworks, one scan** — SOC 2 (AICPA TSC 2017) · HIPAA Security Rule §164.312 Technical Safeguards (HHS Required/Addressable discipline per control) · NIST CSF 2.0 (Subcategory-level) · PCI DSS v4.0.1 (QSA RoC sub-requirement-level) · ISO/IEC 27001:2022 (per-Annex-A-code, SoA discipline) · CIS Controls v8 (per-Safeguard; Implementation Group IG1/IG2/IG3 cumulative discipline) · GDPR Article 32 (sub-measure-level; **Art. 32 infrastructure substrate only, NOT GDPR compliance**) · NIST SP 800-171 Rev 2 (requirement-level for the matrix, SP 800-171A determination-statement level for evidence; **examine-method evidence substrate for CMMC Level 2 preparation — never a CMMC certification and never a MET/NOT MET verdict**). All via `--compliance all`, or any CSV subset via `--compliance soc2,hipaa,nist-csf,pci-dss,iso-27001,cis-v8,gdpr,nist-800-171`. Zero BAA required for HIPAA — ePHI never leaves customer infrastructure. |
154
158
  | **Security rules** | ZDE, SSRF protection, redaction, scan authorization requirements |
155
159
  | **Error handling** | License gates, SSRF blocks, timeout resolution, CPE format errors |
@@ -190,7 +194,7 @@ This package provides **knowledge about** NSAuditor AI. To actually **run** scan
190
194
  |---------|-------|-----------|
191
195
  | **Community** | Free / MIT | 27 plugins (service probes + host/network discovery + intelligence/meta), basic AI, SARIF, CTEM, scan history |
192
196
  | **Pro** | $49/mo | + CVE matching, risk scoring, and intelligence-enriched AI prompts (CVE + MITRE ATT&CK context injected) |
193
- | **Enterprise** | $2k+/yr | + 28 enterprise plugins (1020-1222 range) — 27 cloud-substrate auditors across AWS / Azure / GCP plus `1023 Zero Trust Assessment`, which scores zero-trust posture from a NETWORK-host scan and does not run on a cloud pass, multi-framework evidence-pack (SOC 2 / HIPAA / NIST CSF 2.0 / PCI DSS v4.0.1 / ISO 27001:2022 / CIS Controls v8 / GDPR Art. 32 / NIST SP 800-171 Rev 2), SHA-256 chain-of-custody attestations, the suppression-approval CLI with opt-in Ed25519 signing (reachable from EE 0.35.0, proven 0.36.0, verified per approver holding key material), air-gapped operation (offline licensing + offline CVE matching) |
197
+ | **Enterprise** | $2k+/yr | + 29 enterprise plugins (1020-1230 range) — 28 cloud-substrate auditors across AWS / Azure / GCP plus `1023 Zero Trust Assessment`, which scores zero-trust posture from a NETWORK-host scan and does not run on a cloud pass, multi-framework evidence-pack (SOC 2 / HIPAA / NIST CSF 2.0 / PCI DSS v4.0.1 / ISO 27001:2022 / CIS Controls v8 / GDPR Art. 32 / NIST SP 800-171 Rev 2), SHA-256 chain-of-custody attestations, the suppression-approval CLI with opt-in Ed25519 signing (reachable from EE 0.35.0, proven 0.36.0, verified per approver holding key material), air-gapped operation (offline licensing + offline CVE matching) |
194
198
 
195
199
  → [Pricing](https://www.nsauditor.com/ai/pricing/)
196
200
 
package/SKILL.md CHANGED
@@ -16,10 +16,63 @@ description: >
16
16
 
17
17
  # NSAuditor AI — Agent Skill
18
18
 
19
- > **Version:** 0.2.47 (knowledge current as of **EE 0.42.0** · **requires CE ≥ 0.2.49**) — the sovereign-cloud release.
19
+ > **Version:** 0.2.49 (knowledge current as of **EE 0.44.0** · **requires CE ≥ 0.2.49**) — the client-report release.
20
20
  >
21
- > **What this release (EE 0.42.0) teaches:** **Non-commercial AWS partitions and Azure sovereign clouds are now first-class, and both REFUSE rather than silently reporting on the wrong estate.** When you drive a scan against GovCloud, China, an ISO partition or the European Sovereign Cloud, findings that previously read CLEAN now fire: a public S3 access point riding a bucket delegation, IAM privilege-escalation at CRITICAL (it demoted to HIGH before), shadow-admin graph edges that were missing entirely, and the full effective-decrypt severity ladder (it collapsed to `info`). **THE ID→DEFECT MAPPING, HERE ON THE ALWAYS-LOADED SURFACE because a reader asked for it BY ID got "no source confirming there was a partition-side fix" while it sat in an on-demand reference (measured 2026-08-28):** `1020` S3 access point riding a bucket delegation · `1030` IAM privesc severity + shadow-admin edges · `1110` KMS effective-decrypt ladder · `1050` API Gateway policy classification + SSRF parsers · `1200` alerting-destination liveness · `1040` region denominator. ⚠️ Do NOT attribute the S3 case to `1110` or the decrypt ladder to `1050` — those are the pre-fix misattributions. Pre-0.42.0 non-commercial reports are unproven on THOSE FAMILIES; findings outside them stand. For Azure, `AZURE_ENVIRONMENT` / `ARM_ENVIRONMENT` / `AZURE_ARM_ENDPOINT` / `AZURE_AUTHORITY_HOST` now select the cloud — and an unrecognised or self-contradicting selection **refuses the scan and emits an evidence gap naming the variable that fixes it**, because falling back to commercial is how an operator holding both commercial and sovereign credentials gets a real, clean-looking report about an estate they did not mean. **Every Azure scan stamps the estate it addressed — but WHERE it lands is channel-specific and the Desktop channel does NOT carry it.** On the CLI/report path the stamp rides the evidence stream and the concluder summary. Through MCP it does NOT: `get_findings` iterates `result.findings` with no `result.data` fallback, and the cloud summariser short-circuits on a non-nullish `findings[]` (an EMPTY array is non-nullish, so a genuinely clean Azure scan — the exact case you would want it for — still never reaches `data[]`). **So on Desktop you CANNOT name the estate on a clean Azure result: say that you cannot confirm which estate was addressed and that the operator must check the CLI or the selector variables — never guess one.** On the REFUSAL path the estate IS visible, because it is written into the gap finding's own text. Also new: the SBOM gate (`npm run gate:sbom`) emits CycloneDX/SPDX over *the installed package* rather than the source tree — ⚠️ **but it is a MAINTAINER-side repository script: `scripts/` ships ZERO files in the customer tarball, so an installed package CANNOT run that command** (the npm script entry ships; the script it points at does not). **Never hand `npm run gate:sbom` to an end user as something to run against their install** — that is a published instruction that cannot succeed; the SBOM is generated from a repository checkout and provided on request. And `docs/fips-posture.md` states approved *algorithms*, explicitly not a validated *module* — do not let a user infer FIPS 140 validation from it; whether the RUNTIME beneath the product is a validated module is a property of the operator's platform, not of this product. **Plugin count UNCHANGED at 29; all eight coverage matrices UNCHANGED.**
21
+ > **What EE 0.44.0 / CE 0.2.51 teaches, and both items are about what a REPORT may claim.**
22
+ > **(1) There is a `report` subcommand now, and it is Pro-gated.**
23
+ > `nsauditor-ai report --from <dir> --format executive|jira` turns a completed scan run under
24
+ > `--from` into a client-facing deliverable — an HTML report a consultant sends to their
25
+ > customer, or a Jira-importer CSV. `--run <id>` reports a specific run instead of the newest,
26
+ > `--brand <brand.json>` adds cover-page branding to the executive format, `--out <path>`
27
+ > overrides the destination, `--allow-partial` renders an incomplete run with the caveat stated
28
+ > on the cover. Exit **0** rendered · **1** fix the RUN · **2** fix the REQUEST. ⚠️ Two things to
29
+ > teach a user rather than discover for them: **the Jira import mapping is done in Jira and has
30
+ > not been verified against a live Jira instance** (say so when you hand over the CSV), and a
31
+ > value-less `--from`/`--brand`/`--run`/`--out` is a **fatal error, not a silent default**.
32
+ > **(2) An S3 audit-trail gap now means BOTH streams are missing.** Plugin 1020 used to report
33
+ > *"Access logging not enabled – audit trail gap"* from the bucket's own server access log alone,
34
+ > so a bucket whose object reads and writes a CloudTrail data-event trail already recorded was
35
+ > reported as a gap. It now cross-checks CloudTrail and, where a trail positively covers the
36
+ > bucket, emits positive substrate naming that trail instead. ⚠️ **A gap that DISAPPEARS after
37
+ > upgrade on a bucket covered by a trail is the fix working, not a regression** — the same shape
38
+ > as the provider badge below. Every uncertain answer keeps the finding unchanged: a denied
39
+ > CloudTrail read, an absent optional SDK, a stopped trail, a trail with a delivery error, a
40
+ > prefix-scoped or one-sided selector, a region not reached. The cross-check's own status is
41
+ > reported once in the scan summary with its declared limits, so *"the gap persisted"* and *"the
42
+ > cross-check could not run"* are distinguishable. SOC 2 CC7.1, HIPAA §164.312(b) and NIST SP
43
+ > 800-171 3.12.3 rationales were reworded accordingly — they no longer call server access logs
44
+ > the sole record of object-level access.
45
+ > Plugin catalog UNCHANGED at 29 EE; all eight coverage matrices UNCHANGED; **peer floor
46
+ > UNCHANGED at CE ≥ 0.2.49** — derived, not a bump.
47
+ >
48
+ > **Prior: 0.2.48** — what EE 0.43.0 taught, and both items are about READING a scan rather than running one.
49
+ > **(1) A provider badge is now trustworthy, and it was not before.** An Enterprise scan whose
50
+ > cloud SDK failed to load reported that provider as **audited**: eighteen refusals across
51
+ > seventeen AWS and GCP plugins returned `up: false` with the cause written only into
52
+ > `warnings`, and the Community plugin manager derives `auditedProviders` from plugins that
53
+ > *ran* — an envelope carrying neither an error nor a skip flag falls through to *ran*. Teach
54
+ > that `providerStatus` is now answerable per provider (`{ran, skipped, errored}`) and that a
55
+ > provider DISAPPEARING from `auditedProviders` after upgrade is the fix working, not a
56
+ > regression. ⚠️ Compliance verdicts always failed closed, so **never tell a user their controls
57
+ > were passing over an unscanned estate** — they were not; the badge and the reason were wrong,
58
+ > not the verdicts.
59
+ > **(2) An evidence gap states a CAUSE, never an instruction.** The engine quotes a plugin's
60
+ > reason into the *"could not run"* sentence of every control that plugin evidences, and it used
61
+ > to quote the whole thrown message — so the loaders' own `Install: npm install <pkg>@latest`
62
+ > reached the gap text of 7 SOC 2, 2 GDPR and 12 NIST SP 800-171 controls. ⚠️ **NEVER quote an
63
+ > evidence-gap line to a user as a remediation step**, and be aware the old wording is still in
64
+ > packs produced before 0.43.0. Under **air-gapped operation** an `npm install` instruction
65
+ > cannot be followed at all, which is why it was the wrong channel. The two causes are now
66
+ > distinct: `plugin skipped: <reason>` (fix with `--host` / `CLOUD_PROVIDER`) versus
67
+ > `scanner error: <cause>` (fix a dependency or a credential).
68
+ > Also: a GDPR Art. 32 report now fails closed when an Azure scan refuses, where it previously
69
+ > failed nothing. Plugin catalog UNCHANGED at 29 EE; all eight coverage matrices UNCHANGED;
70
+ > **peer floor UNCHANGED at CE ≥ 0.2.49** — derived, not a bump.
71
+ >
72
+ > **What EE 0.42.0 taught:** **Non-commercial AWS partitions and Azure sovereign clouds are now first-class, and both REFUSE rather than silently reporting on the wrong estate.** When you drive a scan against GovCloud, China, an ISO partition or the European Sovereign Cloud, findings that previously read CLEAN now fire: a public S3 access point riding a bucket delegation, IAM privilege-escalation at CRITICAL (it demoted to HIGH before), shadow-admin graph edges that were missing entirely, and the full effective-decrypt severity ladder (it collapsed to `info`). **THE ID→DEFECT MAPPING, HERE ON THE ALWAYS-LOADED SURFACE because a reader asked for it BY ID got "no source confirming there was a partition-side fix" while it sat in an on-demand reference (measured 2026-08-28):** `1020` S3 access point riding a bucket delegation · `1030` IAM privesc severity + shadow-admin edges · `1110` KMS effective-decrypt ladder · `1050` API Gateway policy classification + SSRF parsers · `1200` alerting-destination liveness · `1040` region denominator. ⚠️ Do NOT attribute the S3 case to `1110` or the decrypt ladder to `1050` — those are the pre-fix misattributions. Pre-0.42.0 non-commercial reports are unproven on THOSE FAMILIES; findings outside them stand. For Azure, `AZURE_ENVIRONMENT` / `ARM_ENVIRONMENT` / `AZURE_ARM_ENDPOINT` / `AZURE_AUTHORITY_HOST` now select the cloud — and an unrecognised or self-contradicting selection **refuses the scan and emits an evidence gap naming the variable that fixes it**, because falling back to commercial is how an operator holding both commercial and sovereign credentials gets a real, clean-looking report about an estate they did not mean. **Every Azure scan stamps the estate it addressed — but WHERE it lands is channel-specific and the Desktop channel does NOT carry it.** On the CLI/report path the stamp rides the evidence stream and the concluder summary. Through MCP it does NOT: `get_findings` iterates `result.findings` with no `result.data` fallback, and the cloud summariser short-circuits on a non-nullish `findings[]` (an EMPTY array is non-nullish, so a genuinely clean Azure scan — the exact case you would want it for — still never reaches `data[]`). **So on Desktop you CANNOT name the estate on a clean Azure result: say that you cannot confirm which estate was addressed and that the operator must check the CLI or the selector variables — never guess one.** On the REFUSAL path the estate IS visible, because it is written into the gap finding's own text. Also new: the SBOM gate (`npm run gate:sbom`) emits CycloneDX/SPDX over *the installed package* rather than the source tree — ⚠️ **but it is a MAINTAINER-side repository script: `scripts/` ships ZERO files in the customer tarball, so an installed package CANNOT run that command** (the npm script entry ships; the script it points at does not). **Never hand `npm run gate:sbom` to an end user as something to run against their install** — that is a published instruction that cannot succeed; the SBOM is generated from a repository checkout and provided on request. And `docs/fips-posture.md` states approved *algorithms*, explicitly not a validated *module* — do not let a user infer FIPS 140 validation from it; whether the RUNTIME beneath the product is a validated module is a property of the operator's platform, not of this product. **Plugin count UNCHANGED at 29; all eight coverage matrices UNCHANGED.**
22
73
 
74
+ > **Prior:** 0.2.47 (post-EE-0.42.0 · **requires CE ≥ 0.2.49**) — the sovereign-cloud release.
75
+ >
23
76
  > **Prior:** 0.2.46 (post-EE-0.41.0 · **requires CE ≥ 0.2.45**) — the DocumentDB release.
24
77
  >
25
78
  > ⛔ **If tool output reports an EE version NEWER than the knowledge bound above, say this skill's knowledge does not yet cover that version — never guess at capabilities it might add.**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nsauditor-ai-agent-skill",
3
- "version": "0.2.47",
3
+ "version": "0.2.49",
4
4
  "description": "AI Agent Skill for NSAuditor AI \u2014 gives any AI coding agent built-in knowledge of NSAuditor's MCP tools, schemas, plugins, and security audit workflows.",
5
5
  "keywords": [
6
6
  "nsauditor",
@@ -215,7 +215,7 @@ listings, and default pages.
215
215
 
216
216
  | ID | Name | Tier | Purpose | SOC 2 Controls |
217
217
  |----|------|------|---------|----------------|
218
- | 1020 | AWS Cloud Scanner | Enterprise | S3 bucket hardening (PAB, encryption, versioning, Object Lock, MFA Delete, logging) | C1.1 / C1.2 / CC7.1 |
218
+ | 1020 | AWS Cloud Scanner | Enterprise | S3 bucket hardening (PAB, encryption, versioning, Object Lock, MFA Delete) + object-access audit trail as a JOIN of server access logging AND CloudTrail S3 data-event coverage — a bucket a trail records is not a gap; any uncertain answer keeps the finding | C1.1 / C1.2 / CC7.1 |
219
219
  | 1021 | GCP Cloud Scanner | Enterprise | Firewall rule audit + IAM bindings + Storage bucket public-access | CC6.1 / CC6.6 / C1.1 |
220
220
  | 1022 | Azure Cloud Scanner | Enterprise | NSG rule analysis + RBAC role assignments + Storage account hardening | CC6.1 / CC6.6 / C1.1 |
221
221
  | 1023 | Zero Trust Checker | Enterprise | Segmentation + encryption + identity + lateral movement scoring (reads OBSERVED open ports) | CC6.6 |
@@ -219,6 +219,7 @@ AI_ENABLED=true AI_PROVIDER=openai OPENAI_API_KEY=sk-... OPENAI_REDACT=true \
219
219
  | `scan_response_ai_payload.json` | Redacted payload sent to AI |
220
220
  | `scan_response_ai.html` | Styled HTML report with CVE links, severity badges |
221
221
  | `scan_response_ai.txt` | AI vulnerability assessment in markdown |
222
+ | `scan_run_<runId>.json` | **Per-run scan record** — written at the ROOT of `--out` (one level above the per-host folders) at run start, appended per host, finalized at the end. It is what `report` is built from, and what lets a report cover STATE its coverage (hosts requested / written / reachable) instead of implying it. On the free tier these are pruned after a retention window. |
222
223
 
223
224
  ### AI Prompt Modes
224
225
 
@@ -273,7 +274,18 @@ User wants to...
273
274
  ├── Compare two scans → CLI: diff the per-run out-dirs (no compare tool)
274
275
  ├── State framework COVERAGE → compliance_matrix (any tier)
275
276
  ├── Produce a compliance EVIDENCE PACK → CLI: --compliance <fw> --out <dir> (not MCP)
276
- └── Generate a formatted report → CLI: --output-format sarif|csv|md (not MCP)
277
+ ├── Generate a formatted report → CLI: --output-format sarif|csv|md (not MCP)
278
+ └── Produce a CLIENT-FACING report → CLI (Pro): nsauditor-ai report --from <dir>
279
+ --format executive → self-contained print-ready HTML
280
+ (+ --brand <brand.json> for a branded cover)
281
+ --format jira → Jira-importer CSV
282
+ --run <id> | --out <path> | --allow-partial
283
+ exit 0 rendered · 1 fix the RUN · 2 fix the REQUEST
284
+ ⚠️ TELL THE USER: the Jira import mapping is done in
285
+ Jira and has NOT been verified against a live Jira
286
+ instance, and the emitted CSV does not carry that
287
+ caveat — you must hand it over with the file.
288
+ ⚠️ --brand with --format jira is REFUSED, not ignored.
277
289
  ```
278
290
 
279
291
  ---