Assess

Assess an AI security whitepaper

A copy-ready prompt that checks a paper against 87 classic security engineering principles, 121 AI and agentic security principles, and the SRF accountability and regulatory data, then reviews a working draft for the mechanical defects that survive ordinary review. Paste the prompt, add the paper, and your assistant fetches the catalogs itself. No file uploads.

How to run it

  1. Copy the prompt below into a new conversation with an AI assistant that can fetch URLs.
  2. Paste the text, attach a file, or share a URL, for example a PDF or webpage link, the assistant can fetch.
  3. The assistant reports what it managed to read before it assesses anything, then fetches both principle catalogs and, when the paper makes threat-specific or regulatory claims, the SRF data behind those claims.
  4. Beyond catalog matching, the prompt runs an integrity screen on the submission itself, grounds any regulatory or accountability claims in live data, and checks draft mechanics and machine readability when you're reviewing a working draft rather than a finished paper.
  5. Output arrives as a ranked findings table plus prose blocks for the checks that are not principle matching.

What it checks against

These three sources back the principle-matching steps below. The intake check, submission screen, regulatory grounding, and draft-mechanics checks described after the cards run independently of them, not against a catalog.

87

Classic security principles

Saltzer and Schroeder, NIST SP 800-27, ISO 27001, CIS Controls v8/v8.1, Microsoft's two law sets, and cloud architecture corollaries. Settled engineering axioms, most of them decades old.

/data/security-principles.json
121

AI and agentic security principles

Normalized from the 41-source synthesis across 22 topic sections, with a gap index tying each section's blind spot back to the classic principle it misses. These entries record current industry positions and have not settled into axioms.

/data/ai-agentic-principles.json
16

Threat-to-accountability crosswalk

Each OWASP AI Exchange threat mapped to the SRF layer that owns the control point. Catches a paper that assigns a fix to the wrong layer, which is a category error rather than a difference of opinion.

/data/threats.json

Four checks that are not principle matching

Step 0 confirms the paper was read. A truncated PDF, a two-column extraction that interleaved its columns, or a JavaScript-rendered page that returned a shell all produce the same failure: a confident list of topics the paper "does not address" when the reviewer never saw those sections. The step asks for the extraction method, the section and page count, and a plain list of what could not be read. A broken heading tree stops the review rather than degrading it silently.

Step 1 screens the submission itself: citation integrity resolved against registries, unpinned dependency recommendations that can be poisoned after publication, text written to manipulate the AI performing the review, and whether the paper's own claims can be checked at all. A paper can align perfectly with both catalogs and still fail that screen. The claim support, currency, and production artifact checks count unsourced figures, recommendations naming no version or setting a reader could act on, experience claims with no named environment, the age of the newest dated reference, and what was left in the delivered file. Each of those is a defect an author can fix, and each is reported as itself rather than as evidence about who or what wrote the text.

Disclosure findings stay observations, meaning which conclusions favor a named vendor and whether a funding statement appears, because asserting an undisclosed relationship means asserting something that by construction is not in evidence. Prose rhythm, vocabulary, and punctuation habits carry no integrity verdict at any volume, since house style guides, standards-body templates, single authors, and non-native English writers produce the same patterns.

Step 7 grounds accountability and regulatory claims in live data rather than the reviewing model's recollection, and reports the last_verified date behind every regulatory finding.

Step 8 runs on working drafts and covers what review usually misses: typos and inconsistent defined terms, topics scattered across non-adjacent sections, near-duplicate statements, and links that resolve but point at the wrong document. It also checks whether the draft is machine readable, meaning stable heading anchors, a heading tree a parser can walk, and sections that still make sense once a retrieval system has chunked them.

How findings are ranked

One scale covers every step, so a reader can see at a glance which findings are integrity-shaped and which are housekeeping. Mixing them in a single list invites an author to dismiss the whole report as pedantry.

TierWhat it meansWhy it ranks here
P1 Following the paper's guidance would leave a system less secure Contradiction with a classic axiom, or a threat assigned to a layer that does not own the control point. The advice itself is the defect.
P2 Integrity An identifier naming no document, a citation saying something other than what the paper claims, instructions aimed at the reviewer, or an unpinned dependency the paper tells readers to install.
P3 Substantive gaps and softer conflicts Coverage holes in scope for the paper, contradiction with a still-forming industry position, a regulatory mapping past its staleness threshold.
P4 Mechanics Typos, link rot, heading structure, machine readability. Batch-fixable, and changes nothing about whether the paper's argument holds.

A second rule caps each finding by how it was reached, and the cap is structural rather than a request for a softer tone. A finding checked against a fetched catalog entry, a resolved URL, or a registry record can sit at any tier. A finding inferred from the paper's own unambiguous text stops at P3. A stylometric, statistical, or intent-based finding stops at P4 and is phrased as an observation. Uniform sentence rhythm is produced by house style guides, standards-body templates, single authors, and non-native English writers at least as often as by a model, so it cannot carry an integrity verdict.

Severity escalates on recurrence rather than on any single instance. One unpinned dependency is a P2 line item. The same shape appearing three or more times is a process defect, reported once at the tier above.

Step 1 asks for resolved identifiers rather than a judgment by eye, which means a lookup against Crossref, arXiv, DataCite, and Semantic Scholar. A reference audit tool such as bib-audit does this and reports a dead DOI separately from a DOI that resolves to a different paper, which are different findings. Pin it to a release or commit before wiring it into anything automated, on the same reasoning the prompt applies to every other dependency a paper recommends.

The prompt

What changed in 2.1

Step 1 grew three checks. All of them replace judging prose by eye with counting something a reader can re-count. An assessment produced under 2.0 stays valid; it simply screened less of the submission.

ChangeReason
Claim support check added to step 1 Counts unsourced statistics, recommendations naming no version or setting a reader could act on, and experience claims with no environment or timeframe. A claim nobody can check is unusable whoever wrote it.
Currency check added to step 1 Names the newest dated item in the paper next to its publication date. A gap over a year is a fact about the paper rather than an inference about its author.
Production artifact check added to step 1 Markup surviving into a PDF, placeholder text, scaffolding addressed to a requester, and a figure carrying two values in two sections are all defects with a location and a fix.
Citation check now reads the shape of the bibliography A list where every entry is canonical and heavily cited, with nothing recent or specific to the subject, is worth reporting next to the resolver output.
Disclosure bullet narrowed further 2.0 barred inferring generation from prose rhythm. 2.1 extends that to vocabulary, punctuation habits, and sentence uniformity, and says plainly that no volume of stylistic signal reaches an integrity verdict.
Two false positives added to step 9 A standards document written at principle level on purpose reads as unactionable. A survey cites old work because that is its subject.

What changed in 2.0

The eight steps of v1.0 became eleven. Three are new. The rest are edits in place, and most of them are demotions. An assessment produced under v1.0 stays valid on its principle mapping; its step 0 findings are the ones to re-read, since v1.0 permitted intent-based conclusions that v2.0 caps at an observation.

ChangeReason
Governing rule added above step 0 Every severity ceiling below follows from it, so it has to be stated before the steps rather than implied by them.
New step 0, intake A partial read produces a confident and wrong coverage-gap list. Bad extraction manufactures findings rather than hiding them.
Disclosure bullet rewritten to observable facts v1.0 asked the reviewer to identify undisclosed sponsorship and undisclosed bot generation. Both require asserting something that by construction is not in evidence.
Prose-rhythm signal demoted to P4 House style guides, standards templates, single authors, and non-native English writers all produce uniform rhythm.
Citation check now resolves identifiers against registries Crossref, arXiv, DataCite, and Semantic Scholar answer the question that reading a reference list cannot.
Extraction chunked at roughly 20 statements per section A single pass over a long paper drops material without saying so.
Unverified status added A failed catalog fetch previously turned unchecked statements into Novel findings.
New step 9, one priority scale plus evidence ceilings v1.0 separated blocking from advisory inside draft mechanics only, so an integrity finding and a typo shared a report with no severity spine.
Recurrence escalation added One occurrence is a slip. A repeated defect is a process problem and reads differently.
Known false positive list added Without one, the same misclassifications recur on every run with nothing to catch them.
Tier column added to the findings table Lets a reader sort by severity instead of reading every row.
Candidate queue check removed from the report step The queue has not moved since it was created: four entries from one review date, none incorporated into a catalog, every source unverified. Sending a reviewer there as a deduplication check does nothing until it moves again. Novel candidates are still reported, now carrying the near-matches that were rejected and why.

What happens to a Novel finding

A Novel finding is a proposal, and a proposal is provisional until it survives a check against the live OpenCRE catalog, because the category tags in both files are a first-pass filter rather than final mappings. Report it with the closest entries you rejected and the reason each one failed to match, so the comparison can be re-run by someone else instead of repeated from scratch.

Adding one to a catalog means editing a source, never a generated file. Classic axioms come from the OSCAL catalog. An AI or agentic principle comes from the synthesis document, and cannot be added without adding its source paper to the source table, because that catalog records what specific published papers assert. A preprint on its own does not carry enough weight to justify addition; it justifies watching for corroboration.

Notes on the catalogs

Both catalogs are generated, not hand-maintained. The classic catalog is normalized from a 93-control OSCAL source; five sets of entries that different frameworks state as literal restatements of one principle were merged into a single entry citing every source, and every original control id stays traceable through src. The AI-agentic catalog is parsed from the synthesis document; bullets the synthesis itself calls restatements were merged, and three sentences describing an absence of coverage rather than a claim any source makes were moved into gap_index so a statement about what nobody said is not represented as if somebody said it. Regenerate both with python3 build/generate_principle_catalogs.py after editing either source.