Skip to content

Title the 19 registry entries that carried only their identifier, from the published standards - #115

Merged
emmanuelgjr merged 3 commits into
mainfrom
fix/published-control-titles
Sep 18, 2026
Merged

emmanuelgjr merged 3 commits into
mainfrom
fix/published-control-titles

Conversation

@emmanuelgjr

Copy link
Copy Markdown
Contributor

Item 3 of the three follow-ups. Stacked on #114 (fix/registry-encoding).

Why

After #110 and #111, 35 mapping rows still named themselves after their id — Req 11.3 | Req 11.3 — because neither the mapping table nor the registry held a title for those 19 ids.

Where the text comes from

Transcribed from the standards, not written.

  • PCI DSS, 17 requirements. The requirement headings as printed in PCI SSC's own PCI DSS v4.0 SAQ D for Merchants (listings.pcisecuritystandards.org), extracted from the published PDF with pdftotext rather than retyped, so the wording is the document's:
    • Req 11.3 — "External and internal vulnerabilities are regularly identified, prioritized, and addressed."
    • Req 10.2 — "Audit logs are implemented to support the detection of anomalies and suspicious activity, and the forensic analysis of events."
    • Req 12.6 — "Security awareness education is an ongoing activity."
  • SOC 2, PI1.3 and P7.1. TSP section 100, 2017 Trust Services Criteria (with Revised Points of Focus — 2022). The AICPA download needs a session, so I took the wording from two independent copies of that document and compared them — they agree character for character. Both read, for P7.1: "The entity collects and maintains accurate, up-to-date, complete, and relevant personal information to meet the entity's objectives related to privacy."

I did not fetch the AICPA PDF from AICPA itself; if you would rather those two waited for a first-party copy, say so and I will drop them from this PR and keep the 17 PCI ones.

Safety of the edit

Only entries whose title was empty or identical to their own id are filled, so no curated title is overwritten. The mapping rows pick the text up through the registry, as they already do for every other framework.

Rows whose control_name is merely their control_id: 35 → 0.

Verification

  • node scripts/validate.js: 0 errors, 327 passed.
  • npm run test:scripts: 85 passed, 0 failed.
  • npm run stats:check current; generator reruns clean.

🤖 Generated with Claude Code

emmanuelgjr and others added 2 commits September 18, 2026 09:54
…uard data files

Fourteen registry files carried 328 U+FFFD replacement characters, mostly
where an em dash belongs. They ship: the registries go out in the npm
package, in docs/frameworks-registry.js and in the OSCAL/STIX exports.

Every character is recovered from the source text rather than assumed. The
registries were extracted from the mapping rows, so for each corrupted string
the text either side of the character is looked up in the Markdown and the
entry JSON, and the character that sits between them is read off. A character
is taken only when every match agrees; the window narrows from 24 to 8
characters when a description concatenates several rows, and keeps the raw
slice when only one word follows, since trimming to a word boundary could
otherwise empty it.

All 328 resolved, every one to U+2014. None was guessed, and no other
character was found.

The guard from T-ACC06 only ever read Markdown, which is why this sat
unnoticed. It now also reads data/frameworks/*.json, data/entries/*.json and
data/*.json, checking for U+FFFD alone — the arrow heuristic is tuned for
prose and diagrams, not JSON. Negative-tested: a replacement character
injected into soc2.json fails validation, naming the file and line.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…m the

published standards

After #110 and #111, 35 mapping rows still named themselves after their id —
"Req 11.3 | Req 11.3" — because neither the mapping table nor the registry
held a title for those 19 ids. The text now comes from the standards
themselves, transcribed rather than written.

PCI DSS, 17 requirements: the headings as printed in PCI SSC's own "PCI DSS
v4.0 SAQ D for Merchants", extracted with pdftotext from the published PDF so
the wording is the document's, not a paraphrase. Req 11.3 reads "External and
internal vulnerabilities are regularly identified, prioritized, and
addressed."

SOC 2, PI1.3 and P7.1: TSP section 100, 2017 Trust Services Criteria (with
Revised Points of Focus — 2022). The AICPA download needs a session, so the
wording was taken from two independent copies of that document and compared;
both agree character for character.

Only entries whose title was empty or equal to their own id were filled, so
no curated title is overwritten. Rows with no published title available were
left alone — there are none left.

Mapping rows whose control_name is merely their control_id: 35 -> 0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Base automatically changed from fix/registry-encoding to main September 18, 2026 15:26
@emmanuelgjr
emmanuelgjr merged commit cc576d6 into main Sep 18, 2026
6 checks passed
@emmanuelgjr
emmanuelgjr deleted the fix/published-control-titles branch September 18, 2026 15:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant