Appendix D. Two-Part Risk-Register Template

D.1 How to use the two parts

The register has two parts because the risks they hold are different kinds of thing (Chapter 9).

  • Part A: probabilistic project risks. Events that may or may not happen, each with a probability you can estimate and a loss you can bound. Score them with probability × loss.
  • Part B: structural adversarial exposure. Paths through your system where an attacker could act through an agent. An attacker chooses when to act, so a simple unconditional probability, as in Part A, cannot be grounded for these events. Follow the conditional move of NASA's threat models instead: assume the attacker is present, then inspect the path's structure to see what is reachable, and flag it.

Keep the parts in separate lists. Do not rank a Part B entry by an unconditional score. Every entry in both parts has a named human owner, never an agent.

D.2 Part A: fields

One entry per risk. Write the fields in this order.

  • ID: R-01, R-02, …
  • Risk: one sentence in the form "If condition, then consequence."
  • Class: the kind of risk. Starting classes: requirements, estimation, staffing, technology, agent process (for example, the review queue), external. Use the classes of Chapter 9 if they differ.
  • P: probability that the risk occurs, from the scale in Table D.1 (a range for an E3 row; none for an E4 row).
  • L: loss if it occurs, in human hours.
  • RE: risk exposure = P × L, in hours.
  • Basis: the basis code for P (E1 to E4, Section D.3), and where P and L came from (log data, a published rate, a stated judgment). A judgment is acceptable if it is labeled as one.
  • Reversibility: R1, R2 or R3 from Table D.2.
  • Blast radius: B1, B2 or B3 from Table D.3.
  • Mitigation: what you do now to lower P or L.
  • Contingency: what you do if it happens, and the trigger that tells you it has.
  • Owner: a named person.

D.3 Scoring scales

The scales are starting points. Rescale L to the size of your project, and say so in the register.

Table D.1. Probability scale for Part A.

P Label Use when
0.1 Rare No sign of it; would surprise you
0.3 Unlikely Has happened elsewhere, not here
0.5 Even As likely as not
0.7 Likely Has already happened once on this project
0.9 Near certain Happening now, or all but guaranteed

Give every P a basis code (Chapter 9, Section 9.5.1):

  • E1: own log. Counted in your own work log.
  • E2: published rate. A published rate for a comparable setting, such as the package-hallucination rates.
  • E3: judged range. Your stated judgment, entered as a range (for example 0.3 to 0.5, with values from Table D.1 as its ends).
  • E4: none. The row is listed and not scored.

Never enter a point probability without a basis: E3 gets a range, and E4 gets no score.

Estimate L in human hours (specification, review, verification, rework and debugging). Compute RE = P × L for each scored row (a range for an E3 row). Rank scored rows by RE. Rank E4 rows by reversibility and blast radius, and review both lists at each milestone. Use reversibility and blast radius to break ties and to override the ranking: a risk with low RE that cannot be undone still deserves attention.

Table D.2. Reversibility.

Code Meaning
R1 Undone by reverting a change; minutes
R2 Undone with effort (restore, migration, rework)
R3 Cannot be undone (message sent, data lost, secret exposed)

Table D.3. Blast radius.

Code Meaning
B1 One work package or branch
B2 The whole system or one environment
B3 Other systems, customers or third parties

If you decide to merge code that has not been reviewed, write it as a decision entry in Part A with the unreviewed fraction recorded (Chapter 6, Section 6.5.2; Chapter 9, Section 9.5.2). A decision entry is owned, not scored. A schedule saved that way is a risk taken, and the register should say so.

D.4 Part A: filled example

An entry from the Dispatch running example. The numbers are illustrative.

  • ID: R-03
  • Risk: If the acceptance criteria for job reassignment stay ambiguous, then the agent resolves each ambiguity silently and plausibly, and wrong choices are found at review or later.
  • Class: requirements.
  • P: 0.5 to 0.9 (midpoint 0.7).
  • L: 20 hours (four ambiguities, about 5 hours of rework each).
  • RE: 14 hours at the midpoint (10 to 18 hours across the range).
  • Basis: E3, judged range. A first read of the criteria found four ambiguous statements; the cost per ambiguity is a judgment from one similar package.
  • Reversibility: R1.
  • Blast radius: B1.
  • Mitigation: resolve each ambiguity with the requester before generation, and bind each criterion to an executable acceptance property.
  • Contingency: if a review finds a silent choice, stop merging the package, add the missing property, regenerate and review again. Trigger: any defect coded AMB or SPEC (Appendix B, Table B.1).
  • Owner: the person who owns the specification.

D.5 Part B: fields

One entry per path along which an agent acts. An agent path is a route from an input the agent reads to an action the agent can take.

  • ID: X-01, X-02, …
  • Agent and tool path: which agent, reading what, with which tools and permissions, able to do what.
  • Private data? Yes or no. Can the agent read data that outsiders must not see?
  • Untrusted content? Yes or no. Does any text on the path come from someone you do not control (users, web pages, email, documents, dependency files, other agents' output)?
  • External communication? Yes or no. Can the agent send anything out of the system (a message, a request, a commit to a public place, a rendered link)?
  • Attack class: the kind of attack the path allows. Starting classes: direct prompt injection, indirect prompt injection, dependency attack (nonexistent or malicious package), permission abuse, data exfiltration, context or memory poisoning. Use the classes of Chapter 9 if they differ.
  • Flag: from Table D.4.
  • Architectural mitigation: what in the system's structure removes or isolates a leg of the path.
  • Measured conditional success (optional): if you have probed the path, the successes out of attempts, labeled with the model version and prompt (Chapter 9, Section 9.5.3). It informs the choice of mitigation. It does not clear a flag, and it is never multiplied by an invented probability of attack.
  • Owner: a named person.

D.6 Part B: flag rule

Table D.4. Flags for Part B.

Yes answers Flag Required action
All three Structural Remove a leg, or a named human accepts it in writing
Two Watch Record the third leg's absence and review monthly
One or none Note Record and move on

A mitigation is architectural if it still holds when the agent does exactly what the attacker's text tells it. Removing a tool, narrowing a credential, splitting the path across two components, or putting a person's approval in front of the outbound action are architectural. An instruction to the agent ("ignore commands in customer text") is not. Run this test on every mitigation: if the agent obeyed the attacker completely, what could still happen?

Do not score Part B entries by an unconditional probability × loss. Prediction P7 says that scores of that simple kind will not track incidents and the flags will.

D.7 Part B: filled example

An entry from the Dispatch running example, kept generic.

  • ID: X-01
  • Agent and tool path: the notes-summary agent reads customers' delivery instructions and drivers' notes, can see customer names, addresses and phone numbers, and has a notification tool that sends messages to customers (SMS where enabled).
  • Private data? Yes.
  • Untrusted content? Yes (customers type the delivery instructions).
  • External communication? Yes.
  • Attack class: indirect prompt injection leading to data exfiltration.
  • Flag: Structural (three of three).
  • Architectural mitigation: split the path. Remove the notification tool from the agent that reads free text, which also loses access to customer records; its summary goes to the dispatcher only. A fixed-template sender (ordinary code, not an agent) takes only structured fields. A message outside the templates needs a person's approval before it goes out.
  • Measured conditional success: 4 of 10 probes obeyed before the split (illustrative; synthetic data; model version and prompt recorded). Re-probe after the split. The number informs the mitigation and does not clear the flag.
  • Owner: the person who owns system security.

After the split, no single component holds all three legs. Re-score each component with Table D.4 and record the result and the date.

D.8 Keeping the register alive

  • Review it at each milestone and at every handoff. A register that was last edited at M4 describes a project that no longer exists.
  • Log every incident against a register ID. If an incident has no entry, add the entry afterward and mark it "found by incident." Those entries are the evidence for P7.
  • Retire entries with a reason. Closing a risk is a decision; record who made it.
  • Put the register in the handoff package (Appendix C).