← No-Go Dates
API
Tokens

Run No-Go Dates from your own code

Both metered lanes are available over HTTP and each returns one JSON object. The division of labour: the page maps every row to the taxonomy, scores and bands it with the amplifiers, lays out the coverage ladder and places a go/no-go date before every fee step-up - all free, in riskkit.js. The run writes the register or the emergency plan; the page then holds the reply to its own scores (riskreply.js). Not legal or insurance advice.

Base URL and the response shape

Every endpoint lives under https://api.skillsafe.ai/v1/app-api, and every response has one shape:

{ "ok": true,  "data":  { ... } }
{ "ok": false, "error": { "code": "...", "message": "..." } }

The token is minted for this app (the guest call takes {"slug":"no-go-dates"}), so no slug header is needed afterwards. Send it as Authorization: Bearer …. The run body is the input object, sent bare.

StatusCodeMeaning
400validation_errorThe body is not a JSON object, or a required key (task, event, register, facts) is missing.
401unauthorizedNo token, or a stale one. Mint a guest token or sign in again.
402insufficient_creditsThe balance is under min_credits. Price with /estimate first.
403forbiddenA guest token tried to run: both lanes are metered and need a personal sign-in.
404not_foundUnknown job id.
429rate_limitedBack off and retry.
5xxserver_errorTransient. Retry with the same Idempotency-Key so a retry never double-bills.

The task field comes first

Two lanes - register (the register for the decision dates) and emergency (the printable plan for the people on site). A missing or unknown task is answered as register. Both lanes send the same four fields.

The input

FieldRequiredWhat
taskyesregister or emergency. If it is missing or neither, do register and set "task": "register".
eventyesthe event, its format, size, date and pole, the money committed and absorbable, the amplifiers, insurance today, who decides, and the emergency-plan status and named contacts.
registeryesevery risk row as the page scored it, and the cancellation-fee schedule with its dates and costs.
factsyesthe page's depth, taxonomy coverage, bands, coverage ladder, go/no-go mechanic, decision dates, re-score dates, emergency scenarios, readiness, the signals to record and every finding tagged [fix], [check] or [info].
retry_notenooptional; if present, your previous reply was unusable - follow it.

The rules the model applies

House rules

The replies

register

  1. summary - one sentence, at most 35 words: the highest band, the next decision date, and the first thing to settle.
  2. disclaimer - one sentence: not legal or insurance advice; clauses to counsel, policies to a broker.
  3. depth - pick (list, scored, contingency or memo, the page's pick), note (one sentence; name the memo risk when the page promotes one).
  4. rows - one object per row in the page's order: risk (the row's name exactly as the page lists it, before the first "|" - not its category), score (the page's score as a number, or null when unscored or deleted), band (the page's band, or "deleted"), owner (the page's owner, or "none"), next (one short sentence: for yellow the trigger, for orange or red the contingency, for green monitoring by the owner until the review date, for deleted the reason - the page's words where it has them; a missing trigger or contingency is named as missing).
  5. missing - the page's missing taxonomy rows, as short names; [] when none.
  6. coverage - one object per rung in the page's order: rung (the page's name), status (the page's status exactly), reason (one short sentence).
  7. buyback - one sentence: the buy-back decision as recorded, or the question to put to the broker.
  8. calendar - one object per decision date in order: date (the page's decision date), before (short: the fee step it precedes, as the page states it), cost (the page's cost of cancelling after that step, or null). [] when there is no fee schedule.
  9. signals - 2 or 3 short strings, the page's signals, each with what it would change next edition (your design).
  10. caveats - at most 4 short strings: every [fix] finding first, then the most important [check] findings. [] when there are none of either.
{
  "task": "register",
  "summary": "one sentence",
  "disclaimer": "one sentence",
  "depth": { "pick": "scored", "note": "one sentence" },
  "rows": [ { "risk": "a risk", "score": 6, "band": "yellow", "owner": "a role", "next": "one sentence" } ],
  "missing": [ "Organizer discretion" ],
  "coverage": [ { "rung": "Venue-required liability", "status": "existing", "reason": "one sentence" } ],
  "buyback": "one sentence",
  "calendar": [ { "date": "YYYY-MM-DD", "before": "the 50% step on YYYY-MM-DD", "cost": 12000 } ],
  "signals": [ "what to record and what it changes" ],
  "caveats": [ "a caveat" ]
}

The page holds it to its own scores: every row in order with its score, band and owner, the missing taxonomy rows, every coverage status, the decision dates and their costs, a disclaimer, and never a statement that a policy covers a loss; no number may appear that the input does not hold.

emergency

  1. title - a short title naming the event.
  2. scenarios - one object per scenario, in the page's order: scenario (the page's wording), steps (2 to 4 short imperative steps; anything beyond the rules is your design and is generic, never venue-specific facts you were not given), lead (who acts first: a named contact from the input, or a role).
  3. contacts - one object per contact the page lists, plus the non-emergency police line: role, name (from the input, or "to be named"), note (short: when they are on site, or what to fill in). No phone numbers.
  4. distribution - one or two sentences: printed, a copy on site, every volunteer has access.
  5. advance - one sentence: telling local emergency services about the event in advance.
  6. rota - one sentence on the overnight rota when the page names one, otherwise "".
  7. note - one sentence, at most 30 words, for the organizers: what to fill in before printing.
{
  "task": "emergency",
  "title": "Emergency plan - an event",
  "scenarios": [ { "scenario": "the page's scenario", "steps": [ "a step" ], "lead": "a name or a role" } ],
  "contacts": [ { "role": "venue security", "name": "a name or to be named", "note": "short" } ],
  "distribution": "one or two sentences",
  "advance": "one sentence",
  "rota": "",
  "note": "one sentence"
}

The page requires every scenario in its order with steps, the named contacts plus the non-emergency police line, no invented phone number, a printed copy on site, local emergency services told in advance, and the overnight rota when the page names one.

Worked examples - every lane, every sample

These are the page's three free samples (fictional events, venues and people). Each input is exactly what the page sends; each reply is the saved reply the sample replays, shipped as the validating model wrote it; the last line is the page's own check. Every sample has both lanes.

Lakeshore Infra Days (300, deposit paid) - register

Scored register plus per-risk contingency; 9 live rows, 6 taxonomy rows missing; first go/no-go 2026-11-14; 1 of 5 ready.

Input:

{
 "task": "register",
 "event": "Event: Lakeshore Infra Days; a single-day conference; headcount 300; date 2027-05-20; community-run; an annual event\nMoney: budget $60,000; non-recoverable committed spend $18,000; venue contract value $24,000; what the team could absorb $8,000\nAmplifiers present: alcohol service, a single-source dependency\nInsurance today: liability yes (venue requires it: yes); cancellation no; disease buy-back unknown; parent blanket policy no; in-house lawyer no; self-hosted registration no; marquee speaker no\nDecision: held by the conference chair; people who must agree 2; sponsor or parent veto no\nEmergency plan: a draft; venue security the venue's duty manager; first aid not named; on-duty organizer the operations lead",
 "register": "Risk rows (impact shown as entered -> after amplifiers):\nTicket sales below break-even | 1 Demand shortfall | L3 x I4 = 12 orange | owner ticketing lead | prevention | review 2027-02-01 | trigger: sales under 40% of break-even at T-90 | contingency: cut to one track and release the second room\nLead sponsor pulls out | 2 Sponsor withdrawal | L2 x I4->5 = 10 orange | owner sponsorship lead | prevention | review 2027-02-01\nVenue closes or changes terms | 3 Venue loss or forced change | L1 x I5 = 5 yellow | owner logistics lead | transfer | review 2027-02-01\nSpeaker dropouts | 4 Marquee speaker loss | L3 x I2->3 = 9 yellow | owner program lead | contingency | review 2027-04-01 | contingency: two standby talks\nDisease restriction | 7 Communicable disease or public-health restriction | L2 x I5 = 10 orange | owner none | transfer | review none\nHarassment or speaker backlash | 10 Code-of-conduct or PR incident | L2 x I3 = 6 yellow | owner CoC response owner | prevention | review 2027-04-15\nStream or AV fails | 11 Technical or production failure | L3 x I2 = 6 yellow | owner production lead | contingency | review 2027-05-01\nEvening social incident | 9 Safety, security, or medical incident | L2 x I2->3 = 6 yellow | owner operations lead | prevention | review 2027-05-01\nPayment provider not set up | 8 Organizer financial capability | L2 x I3 = 6 yellow | owner treasurer | prevention | review 2026-12-15\nCancellation-fee schedule: 180 days out (2026-11-21): 25% = $6,000; 90 days out (2027-02-19): 50% = $12,000; 30 days out (2027-04-20): 90% = $21,600",
 "facts": "Register depth: contingency - Scored register plus per-risk contingency; a per-risk memo for Lead sponsor pulls out; owner and review-date coverage 89%\nTaxonomy: 9 of 15 rows covered; missing 5, 6, 12, 13, 14, 15\nBands: red 0, orange 3, yellow 6, green 0\nCoverage ladder (categories to ask a broker about; never a policy or a quote): Venue-required liability - existing (the venue conditions doors opening on it, usually naming the venue as an additional insured); Event cancellation with the communicable-disease buy-back - buy (non-recoverable committed spend is 30% of the budget (the trigger is about a quarter, self-set)); Cyber for the registration platform - delete (registration runs on a platform that holds the data); Participant accident - delete (no hands-on hardware or multi-day activity); Non-appearance (key speaker) - delete (no single named person carries the event's value); Parametric weather - delete (nothing outdoors or weather-exposed); disease buy-back unknown\nGo/no-go: A date before every fee step-up; thresholds fixed in advance; decision holder the conference chair\nDecision dates (7 days before each step, self-set): 2026-11-14 - before the 25% step on 2026-11-21 ($6,000 if cancelled after it); 2027-02-12 - before the 50% step on 2027-02-19 ($12,000 if cancelled after it); 2027-04-13 - before the 90% step on 2027-04-20 ($21,600 if cancelled after it)\nRe-score the register at each decision date: 2026-11-14, 2027-02-12, 2027-04-13\nEmergency scenarios (unranked - the venue, the format and local protocol set their order): Fire, with the evacuation route and assembly point; Electrical or power failure; A medical emergency involving an attendee; Theft of equipment; Evacuation for any other reason, and who confirms the building is clear; An intoxicated attendee\nReadiness (1 of 5): Every taxonomy row covered or deleted with a reason MISSING; Every row owned and dated MISSING; Every yellow row has a trigger, every orange-or-red row a contingency MISSING; A coverage decision recorded against each rung, the buy-back included MISSING; A go/no-go date before every fee step-up done\nSignals to record: Surprise rate: risks that fired with no register row (self-set); Owner and review-date coverage, now 89% (self-set target: every row); Decision-date discipline: each go/no-go held before its step-up (self-set)\nFindings (22):\n[check] taxonomy (register): Taxonomy rows with no register row: 5 Adverse weather, pre-event; 6 Adverse weather, in-progress; 12 Registration-platform breach or data loss; 13 Key-organizer loss; 14 Structural or commercial defection; 15 Organizer discretion. Add each, or delete it with a stated reason. Rows 8, 14 and 15 are the ones organizers reliably forget.\n[check] unowned (register): 1 row lacks an owner or a review date (Disease restriction) - a row with neither is a note, not a managed risk.\n[fix] no_contingency (register): Lead sponsor pulls out is orange (10) with no written contingency - if this fires, here is what we do.\n[info] amplified (register): Lead sponsor pulls out: impact raised from 4 to 5 by a single-source dependency.\n[check] no_trigger (register): Venue closes or changes terms is yellow (5) with no pre-defined trigger to move it up a band.\n[check] no_trigger (register): Speaker dropouts is yellow (9) with no pre-defined trigger to move it up a band.\n[info] amplified (register): Speaker dropouts: impact raised from 2 to 3 by a single-source dependency.\n[fix] no_contingency (register): Disease restriction is orange (10) with no written contingency - if this fires, here is what we do.\n[check] no_trigger (register): Harassment or speaker backlash is yellow (6) with no pre-defined trigger to move it up a band.\n[check] no_trigger (register): Stream or AV fails is yellow (6) with no pre-defined trigger to move it up a band.\n[check] no_trigger (register): Evening social incident is yellow (6) with no pre-defined trigger to move it up a band.\n[info] amplified (register): Evening social incident: impact raised from 2 to 3 by alcohol service.\n[check] no_trigger (register): Payment provider not set up is yellow (6) with no pre-defined trigger to move it up a band.\n[info] memo (register): Promote a per-risk assessment memo for Lead sponsor pulls out - its materialization ends the organizing entity, not just the edition.\n[check] transfer (register): Lead sponsor pulls out could end the entity (impact 5, committed spend above what the team can absorb) - promote transfer: insurance or a contract clause that moves the loss.\n[check] buyback (coverage): Record the communicable-disease buy-back decision either way - insurers excluded that peril market-wide from late January 2020, and it decided every documented COVID-era cancellation. Ask the broker explicitly.\n[info] broker (coverage): Every rung here is a category to ask a licensed broker about - not a policy, a limit or a quote. Clause wording goes to counsel.\n[info] lead (go/no-go): Each go/no-go date sits 7 days before its fee step-up (self-set) - never at the event date, never at a round interval that lands after a step.\n[info] thresholds (go/no-go): Committed spend ($18,000) exceeds what the team could absorb ($8,000): fix the thresholds for each polled area before the first date arrives.\n[check] contacts (emergency): Name first-aid provider for the emergency plan - with the hours each is reachable on site.\n[check] not_printed (emergency): The emergency plan is a draft - print it: a plan that lives only in a shared drive fails exactly when power, connectivity or phones fail.\n[check] gate (readiness): Register readiness: 1 of 5 - missing: Every taxonomy row covered or deleted with a reason; Every row owned and dated; Every yellow row has a trigger, every orange-or-red row a contingency; A coverage decision recorded against each rung, the buy-back included (thresholds self-set, not an industry benchmark)."
}

Reply:

{
 "task": "register",
 "summary": "The highest band is orange (3 rows), the next decision date is 2026-11-14 before the 25% cancellation step, and writing the 2 missing contingencies is the first thing to settle.",
 "disclaimer": "This is not legal or insurance advice; clause wording goes to counsel and policy wording, limits, exclusions and coverage questions go to a licensed broker.",
 "depth": {
  "pick": "contingency",
  "note": "The register is scored with per-risk contingency entries, and a full memo is promoted for Lead sponsor pulls out because its materialization would end the organizing entity, not just the edition."
 },
 "rows": [
  {
   "risk": "Ticket sales below break-even",
   "score": 12,
   "band": "orange",
   "owner": "ticketing lead",
   "next": "Cut to one track and release the second room."
  },
  {
   "risk": "Lead sponsor pulls out",
   "score": 10,
   "band": "orange",
   "owner": "sponsorship lead",
   "next": "No contingency is written for this risk; it is missing."
  },
  {
   "risk": "Venue closes or changes terms",
   "score": 5,
   "band": "yellow",
   "owner": "logistics lead",
   "next": "No trigger is defined for this risk; it is missing."
  },
  {
   "risk": "Speaker dropouts",
   "score": 9,
   "band": "yellow",
   "owner": "program lead",
   "next": "No trigger is defined for this risk; it is missing."
  },
  {
   "risk": "Disease restriction",
   "score": 10,
   "band": "orange",
   "owner": "none",
   "next": "No contingency is written for this risk; it is missing."
  },
  {
   "risk": "Harassment or speaker backlash",
   "score": 6,
   "band": "yellow",
   "owner": "CoC response owner",
   "next": "No trigger is defined for this risk; it is missing."
  },
  {
   "risk": "Stream or AV fails",
   "score": 6,
   "band": "yellow",
   "owner": "production lead",
   "next": "No trigger is defined for this risk; it is missing."
  },
  {
   "risk": "Evening social incident",
   "score": 6,
   "band": "yellow",
   "owner": "operations lead",
   "next": "No trigger is defined for this risk; it is missing."
  },
  {
   "risk": "Payment provider not set up",
   "score": 6,
   "band": "yellow",
   "owner": "treasurer",
   "next": "No trigger is defined for this risk; it is missing."
  }
 ],
 "missing": [
  "Adverse weather, pre-event",
  "Adverse weather, in-progress",
  "Registration-platform breach or data loss",
  "Key-organizer loss",
  "Structural or commercial defection",
  "Organizer discretion"
 ],
 "coverage": [
  {
   "rung": "Venue-required liability",
   "status": "existing",
   "reason": "The venue conditions doors opening on it, usually naming the venue as an additional insured."
  },
  {
   "rung": "Event cancellation with the communicable-disease buy-back",
   "status": "buy",
   "reason": "Non-recoverable committed spend is 30% of the budget, above the self-set trigger of about a quarter."
  },
  {
   "rung": "Cyber for the registration platform",
   "status": "delete",
   "reason": "Registration runs on a platform that holds the data."
  },
  {
   "rung": "Participant accident",
   "status": "delete",
   "reason": "There is no hands-on hardware or multi-day activity."
  },
  {
   "rung": "Non-appearance (key speaker)",
   "status": "delete",
   "reason": "No single named person carries the event's value."
  },
  {
   "rung": "Parametric weather",
   "status": "delete",
   "reason": "Nothing is outdoors or weather-exposed."
  }
 ],
 "buyback": "The event-cancellation rung is recorded as buy with the communicable-disease buy-back bundled in, but today's coverage still lists the buy-back as unknown, so put the buy-back question to the broker explicitly.",
 "calendar": [
  {
   "date": "2026-11-14",
   "before": "the 25% step on 2026-11-21",
   "cost": 6000
  },
  {
   "date": "2027-02-12",
   "before": "the 50% step on 2027-02-19",
   "cost": 12000
  },
  {
   "date": "2027-04-13",
   "before": "the 90% step on 2027-04-20",
   "cost": 21600
  }
 ],
 "signals": [
  "Surprise rate - risks that fired with no register row; any that show up next edition should be added to the taxonomy before scoring starts.",
  "Owner and review-date coverage, currently 89%; falling short of every row next edition should trigger assigning an owner and date before the register is circulated.",
  "Decision-date discipline - whether each go/no-go was held before its step-up; a miss next edition should move the decision date further ahead of the fee step."
 ],
 "caveats": [
  "Lead sponsor pulls out is orange (10) with no contingency written for if it fires.",
  "Disease restriction is orange (10) with no contingency written for if it fires.",
  "6 taxonomy rows are missing from the register, including 2 of the rows organizers most often forget (structural or commercial defection and organizer discretion).",
  "Lead sponsor pulls out could end the organizing entity, since committed spend of $18,000 exceeds the $8,000 the team can absorb, and should be promoted to a transfer treatment."
 ]
}

The page's check: kept - nothing to flag

Lakeshore Infra Days (300, deposit paid) - emergency

Scored register plus per-risk contingency; 9 live rows, 6 taxonomy rows missing; first go/no-go 2026-11-14; 1 of 5 ready.

Input:

{
 "task": "emergency",
 "event": "Event: Lakeshore Infra Days; a single-day conference; headcount 300; date 2027-05-20; community-run; an annual event\nMoney: budget $60,000; non-recoverable committed spend $18,000; venue contract value $24,000; what the team could absorb $8,000\nAmplifiers present: alcohol service, a single-source dependency\nInsurance today: liability yes (venue requires it: yes); cancellation no; disease buy-back unknown; parent blanket policy no; in-house lawyer no; self-hosted registration no; marquee speaker no\nDecision: held by the conference chair; people who must agree 2; sponsor or parent veto no\nEmergency plan: a draft; venue security the venue's duty manager; first aid not named; on-duty organizer the operations lead",
 "register": "Risk rows (impact shown as entered -> after amplifiers):\nTicket sales below break-even | 1 Demand shortfall | L3 x I4 = 12 orange | owner ticketing lead | prevention | review 2027-02-01 | trigger: sales under 40% of break-even at T-90 | contingency: cut to one track and release the second room\nLead sponsor pulls out | 2 Sponsor withdrawal | L2 x I4->5 = 10 orange | owner sponsorship lead | prevention | review 2027-02-01\nVenue closes or changes terms | 3 Venue loss or forced change | L1 x I5 = 5 yellow | owner logistics lead | transfer | review 2027-02-01\nSpeaker dropouts | 4 Marquee speaker loss | L3 x I2->3 = 9 yellow | owner program lead | contingency | review 2027-04-01 | contingency: two standby talks\nDisease restriction | 7 Communicable disease or public-health restriction | L2 x I5 = 10 orange | owner none | transfer | review none\nHarassment or speaker backlash | 10 Code-of-conduct or PR incident | L2 x I3 = 6 yellow | owner CoC response owner | prevention | review 2027-04-15\nStream or AV fails | 11 Technical or production failure | L3 x I2 = 6 yellow | owner production lead | contingency | review 2027-05-01\nEvening social incident | 9 Safety, security, or medical incident | L2 x I2->3 = 6 yellow | owner operations lead | prevention | review 2027-05-01\nPayment provider not set up | 8 Organizer financial capability | L2 x I3 = 6 yellow | owner treasurer | prevention | review 2026-12-15\nCancellation-fee schedule: 180 days out (2026-11-21): 25% = $6,000; 90 days out (2027-02-19): 50% = $12,000; 30 days out (2027-04-20): 90% = $21,600",
 "facts": "Register depth: contingency - Scored register plus per-risk contingency; a per-risk memo for Lead sponsor pulls out; owner and review-date coverage 89%\nTaxonomy: 9 of 15 rows covered; missing 5, 6, 12, 13, 14, 15\nBands: red 0, orange 3, yellow 6, green 0\nCoverage ladder (categories to ask a broker about; never a policy or a quote): Venue-required liability - existing (the venue conditions doors opening on it, usually naming the venue as an additional insured); Event cancellation with the communicable-disease buy-back - buy (non-recoverable committed spend is 30% of the budget (the trigger is about a quarter, self-set)); Cyber for the registration platform - delete (registration runs on a platform that holds the data); Participant accident - delete (no hands-on hardware or multi-day activity); Non-appearance (key speaker) - delete (no single named person carries the event's value); Parametric weather - delete (nothing outdoors or weather-exposed); disease buy-back unknown\nGo/no-go: A date before every fee step-up; thresholds fixed in advance; decision holder the conference chair\nDecision dates (7 days before each step, self-set): 2026-11-14 - before the 25% step on 2026-11-21 ($6,000 if cancelled after it); 2027-02-12 - before the 50% step on 2027-02-19 ($12,000 if cancelled after it); 2027-04-13 - before the 90% step on 2027-04-20 ($21,600 if cancelled after it)\nRe-score the register at each decision date: 2026-11-14, 2027-02-12, 2027-04-13\nEmergency scenarios (unranked - the venue, the format and local protocol set their order): Fire, with the evacuation route and assembly point; Electrical or power failure; A medical emergency involving an attendee; Theft of equipment; Evacuation for any other reason, and who confirms the building is clear; An intoxicated attendee\nReadiness (1 of 5): Every taxonomy row covered or deleted with a reason MISSING; Every row owned and dated MISSING; Every yellow row has a trigger, every orange-or-red row a contingency MISSING; A coverage decision recorded against each rung, the buy-back included MISSING; A go/no-go date before every fee step-up done\nSignals to record: Surprise rate: risks that fired with no register row (self-set); Owner and review-date coverage, now 89% (self-set target: every row); Decision-date discipline: each go/no-go held before its step-up (self-set)\nFindings (22):\n[check] taxonomy (register): Taxonomy rows with no register row: 5 Adverse weather, pre-event; 6 Adverse weather, in-progress; 12 Registration-platform breach or data loss; 13 Key-organizer loss; 14 Structural or commercial defection; 15 Organizer discretion. Add each, or delete it with a stated reason. Rows 8, 14 and 15 are the ones organizers reliably forget.\n[check] unowned (register): 1 row lacks an owner or a review date (Disease restriction) - a row with neither is a note, not a managed risk.\n[fix] no_contingency (register): Lead sponsor pulls out is orange (10) with no written contingency - if this fires, here is what we do.\n[info] amplified (register): Lead sponsor pulls out: impact raised from 4 to 5 by a single-source dependency.\n[check] no_trigger (register): Venue closes or changes terms is yellow (5) with no pre-defined trigger to move it up a band.\n[check] no_trigger (register): Speaker dropouts is yellow (9) with no pre-defined trigger to move it up a band.\n[info] amplified (register): Speaker dropouts: impact raised from 2 to 3 by a single-source dependency.\n[fix] no_contingency (register): Disease restriction is orange (10) with no written contingency - if this fires, here is what we do.\n[check] no_trigger (register): Harassment or speaker backlash is yellow (6) with no pre-defined trigger to move it up a band.\n[check] no_trigger (register): Stream or AV fails is yellow (6) with no pre-defined trigger to move it up a band.\n[check] no_trigger (register): Evening social incident is yellow (6) with no pre-defined trigger to move it up a band.\n[info] amplified (register): Evening social incident: impact raised from 2 to 3 by alcohol service.\n[check] no_trigger (register): Payment provider not set up is yellow (6) with no pre-defined trigger to move it up a band.\n[info] memo (register): Promote a per-risk assessment memo for Lead sponsor pulls out - its materialization ends the organizing entity, not just the edition.\n[check] transfer (register): Lead sponsor pulls out could end the entity (impact 5, committed spend above what the team can absorb) - promote transfer: insurance or a contract clause that moves the loss.\n[check] buyback (coverage): Record the communicable-disease buy-back decision either way - insurers excluded that peril market-wide from late January 2020, and it decided every documented COVID-era cancellation. Ask the broker explicitly.\n[info] broker (coverage): Every rung here is a category to ask a licensed broker about - not a policy, a limit or a quote. Clause wording goes to counsel.\n[info] lead (go/no-go): Each go/no-go date sits 7 days before its fee step-up (self-set) - never at the event date, never at a round interval that lands after a step.\n[info] thresholds (go/no-go): Committed spend ($18,000) exceeds what the team could absorb ($8,000): fix the thresholds for each polled area before the first date arrives.\n[check] contacts (emergency): Name first-aid provider for the emergency plan - with the hours each is reachable on site.\n[check] not_printed (emergency): The emergency plan is a draft - print it: a plan that lives only in a shared drive fails exactly when power, connectivity or phones fail.\n[check] gate (readiness): Register readiness: 1 of 5 - missing: Every taxonomy row covered or deleted with a reason; Every row owned and dated; Every yellow row has a trigger, every orange-or-red row a contingency; A coverage decision recorded against each rung, the buy-back included (thresholds self-set, not an industry benchmark)."
}

Reply:

{
 "task": "emergency",
 "title": "Emergency plan - Lakeshore Infra Days",
 "scenarios": [
  {
   "scenario": "Fire, with the evacuation route and assembly point",
   "steps": [
    "Pull the nearest fire alarm and call emergency services.",
    "Direct attendees to the nearest marked exit along the evacuation route.",
    "Lead everyone to the assembly point and take a headcount.",
    "Do not re-enter the building until it is confirmed clear."
   ],
   "lead": "the venue's duty manager"
  },
  {
   "scenario": "Electrical or power failure",
   "steps": [
    "Check whether the outage affects the whole venue or one area.",
    "Switch to battery-powered or mobile lighting where available.",
    "Notify attendees calmly and pause any affected session.",
    "Contact the venue's duty manager for a timeline before resuming."
   ],
   "lead": "the venue's duty manager"
  },
  {
   "scenario": "A medical emergency involving an attendee",
   "steps": [
    "Call emergency services if the situation looks serious.",
    "Send someone to meet responders at the entrance and guide them in.",
    "Keep the area clear and keep the attendee comfortable until help arrives.",
    "Tell the on-duty organizer once the attendee is in care."
   ],
   "lead": "the first aid provider"
  },
  {
   "scenario": "Theft of equipment",
   "steps": [
    "Do not confront anyone directly.",
    "Note what was taken and when it was last seen.",
    "Report it to venue security and the on-duty organizer.",
    "Decide together whether to call the non-emergency police line."
   ],
   "lead": "the operations lead"
  },
  {
   "scenario": "Evacuation for any other reason, and who confirms the building is clear",
   "steps": [
    "Direct attendees to the nearest exit and the assembly point.",
    "Account for all attendees and staff at the assembly point.",
    "Have the venue's duty manager confirm the building is clear before anyone re-enters."
   ],
   "lead": "the venue's duty manager"
  },
  {
   "scenario": "An intoxicated attendee",
   "steps": [
    "Move the attendee to a quiet area away from other guests.",
    "Assess whether medical attention is needed and call for help if so.",
    "Arrange safe transport home rather than letting them drive.",
    "Tell the on-duty organizer so the incident is logged."
   ],
   "lead": "the operations lead"
  }
 ],
 "contacts": [
  {
   "role": "Venue security",
   "name": "the venue's duty manager",
   "note": "On-site hours to be filled in."
  },
  {
   "role": "First aid",
   "name": "to be named",
   "note": "Provider and on-site hours to be filled in before printing."
  },
  {
   "role": "On-duty organizer",
   "name": "the operations lead",
   "note": "On-site hours to be filled in."
  },
  {
   "role": "Non-emergency police line",
   "name": "to be named",
   "note": "Kept distinct from the emergency number; number to be filled in."
  }
 ],
 "distribution": "The plan is printed, with a copy kept on site, and every volunteer has access to it.",
 "advance": "Tell local emergency services about the event in advance of the date.",
 "rota": "",
 "note": "The plan is still a draft; name the first-aid provider and their on-site hours, then print and distribute it before the event."
}

The page's check: kept - nothing to flag

Riverside Python Evenings (a free meetup) - register

Scored register plus per-risk contingency; 4 live rows, 10 taxonomy rows missing; first go/no-go no fee schedule; 2 of 5 ready.

Input:

{
 "task": "register",
 "event": "Event: Riverside Python Evenings; a meetup; headcount 60; date 2027-01-20; community-run; an annual event\nMoney: budget $800; non-recoverable committed spend $0; venue contract value -; what the team could absorb $500\nAmplifiers present: alcohol service, a single-source dependency\nInsurance today: liability no (venue requires it: no); cancellation no; disease buy-back unknown; parent blanket policy no; in-house lawyer no; self-hosted registration no; marquee speaker no\nDecision: held by the organizer on duty; people who must agree 1; sponsor or parent veto no\nEmergency plan: none; venue security the host office's reception; first aid the host office's first-aider; on-duty organizer not named",
 "register": "Risk rows (impact shown as entered -> after amplifiers):\nHost office withdraws the room | 3 Venue loss or forced change | L2 x I4->5 = 10 orange | owner organizer | contingency | review 2027-01-06 | trigger: host stops replying a week out | contingency: move to the library's free room\nOnly one organizer knows the setup | 13 Key-organizer loss | L3 x I4->5 = 15 orange | owner organizer | prevention | review 2026-12-15\nLow turnout | 1 Demand shortfall | L3 x I1 = 3 green | owner organizer | acceptance | review 2027-01-13\nSponsor withdrawal | 2 Sponsor withdrawal | DELETED - no sponsor money in this budget - the host gives the room\nOrganizers decide to pause the series | 15 Organizer discretion | L2 x I3 = 6 yellow | owner organizer | prevention | review 2027-01-06\nCancellation-fee schedule: not entered",
 "facts": "Register depth: contingency - Scored register plus per-risk contingency; owner and review-date coverage 100%\nTaxonomy: 5 of 15 rows covered; missing 4, 5, 6, 7, 8, 9, 10, 11, 12, 14\nBands: red 0, orange 2, yellow 1, green 1\nCoverage ladder (categories to ask a broker about; never a policy or a quote): Venue-required liability - buy (the baseline third-party cover - it covers none of the organizer's own losses); Event cancellation with the communicable-disease buy-back - delete (no non-recoverable committed spend to protect); Cyber for the registration platform - delete (registration runs on a platform that holds the data); Participant accident - delete (no hands-on hardware or multi-day activity); Non-appearance (key speaker) - delete (no single named person carries the event's value); Parametric weather - delete (nothing outdoors or weather-exposed); disease buy-back not live\nGo/no-go: No fee schedule yet - no decision dates; decision holder the organizer on duty\nDecision dates (7 days before each step, self-set): none - no fee schedule\nRe-score the register at each decision date: no dates yet\nEmergency scenarios (unranked - the venue, the format and local protocol set their order): Fire, with the evacuation route and assembly point; Electrical or power failure; A medical emergency involving an attendee; Theft of equipment; Evacuation for any other reason, and who confirms the building is clear; An intoxicated attendee\nReadiness (2 of 5): Every taxonomy row covered or deleted with a reason MISSING; Every row owned and dated done; Every yellow row has a trigger, every orange-or-red row a contingency MISSING; A coverage decision recorded against each rung, the buy-back included done; A go/no-go date before every fee step-up MISSING\nSignals to record: Surprise rate: risks that fired with no register row (self-set); Owner and review-date coverage, now 100% (self-set target: every row); Coverage-decision traceability, the buy-back included (self-set)\nFindings (11):\n[check] taxonomy (register): Taxonomy rows with no register row: 4 Marquee speaker loss; 5 Adverse weather, pre-event; 6 Adverse weather, in-progress; 7 Communicable disease or public-health restriction; 8 Organizer financial capability; 9 Safety, security, or medical incident; 10 Code-of-conduct or PR incident; 11 Technical or production failure; 12 Registration-platform breach or data loss; 14 Structural or commercial defection. Add each, or delete it with a stated reason. Rows 8, 14 and 15 are the ones organizers reliably forget.\n[info] amplified (register): Host office withdraws the room: impact raised from 4 to 5 by a single-source dependency.\n[fix] no_contingency (register): Only one organizer knows the setup is orange (15) with no written contingency - if this fires, here is what we do.\n[info] amplified (register): Only one organizer knows the setup: impact raised from 4 to 5 by a single-source dependency.\n[check] no_trigger (register): Organizers decide to pause the series is yellow (6) with no pre-defined trigger to move it up a band.\n[info] community (coverage): Community pole with no non-recoverable spend: venue-required liability is the ceiling - the other rungs are deleted, not parked. The risk that bites here is organizational: rows 8 and 13.\n[info] broker (coverage): Every rung here is a category to ask a licensed broker about - not a policy, a limit or a quote. Clause wording goes to counsel.\n[check] no_fees (go/no-go): Enter the venue's cancellation-fee schedule - the days-out step-ups and their percentages, verbatim from the contract. If you do not have them, getting them is the first task.\n[check] contacts (emergency): Name the on-duty organizer for the emergency plan - with the hours each is reachable on site.\n[check] no_plan (emergency): No emergency plan yet - a separate printed document, every named scenario written one by one, a copy on site.\n[check] gate (readiness): Register readiness: 2 of 5 - missing: Every taxonomy row covered or deleted with a reason; Every yellow row has a trigger, every orange-or-red row a contingency; A go/no-go date before every fee step-up (thresholds self-set, not an industry benchmark)."
}

Reply:

{
 "task": "register",
 "summary": "The highest band is orange, no decision date exists yet because no cancellation-fee schedule has been entered, and entering that schedule is the first thing to settle.",
 "disclaimer": "This is not legal or insurance advice; clause wording goes to counsel and policy questions go to a licensed broker.",
 "depth": {
  "pick": "contingency",
  "note": "The register holds scored rows plus per-risk contingency entries, with owner and review-date coverage at 100%."
 },
 "rows": [
  {
   "risk": "Host office withdraws the room",
   "score": 10,
   "band": "orange",
   "owner": "organizer",
   "next": "If the host stops replying a week out, move to the library's free room."
  },
  {
   "risk": "Only one organizer knows the setup",
   "score": 15,
   "band": "orange",
   "owner": "organizer",
   "next": "No contingency has been written for this risk; it is missing."
  },
  {
   "risk": "Low turnout",
   "score": 3,
   "band": "green",
   "owner": "organizer",
   "next": "Accepted and monitored, with review on 2027-01-13."
  },
  {
   "risk": "Sponsor withdrawal",
   "score": null,
   "band": "deleted",
   "owner": "none",
   "next": "Deleted because there is no sponsor money in this budget and the host gives the room."
  },
  {
   "risk": "Organizers decide to pause the series",
   "score": 6,
   "band": "yellow",
   "owner": "organizer",
   "next": "No pre-defined trigger has been set to move this risk up a band; it is missing."
  }
 ],
 "missing": [
  "Marquee speaker loss",
  "Adverse weather, pre-event",
  "Adverse weather, in-progress",
  "Communicable disease or public-health restriction",
  "Organizer financial capability",
  "Safety, security, or medical incident",
  "Code-of-conduct or PR incident",
  "Technical or production failure",
  "Registration-platform breach or data loss",
  "Structural or commercial defection"
 ],
 "coverage": [
  {
   "rung": "Venue-required liability",
   "status": "buy",
   "reason": "It is the baseline third-party cover and covers none of the organizer's own losses."
  },
  {
   "rung": "Event cancellation with the communicable-disease buy-back",
   "status": "delete",
   "reason": "There is no non-recoverable committed spend to protect."
  },
  {
   "rung": "Cyber for the registration platform",
   "status": "delete",
   "reason": "Registration runs on a platform that holds the data."
  },
  {
   "rung": "Participant accident",
   "status": "delete",
   "reason": "There is no hands-on hardware or multi-day activity."
  },
  {
   "rung": "Non-appearance (key speaker)",
   "status": "delete",
   "reason": "No single named person carries the event's value."
  },
  {
   "rung": "Parametric weather",
   "status": "delete",
   "reason": "Nothing outdoors or weather-exposed."
  }
 ],
 "buyback": "The disease buy-back is not live, in line with the cancellation rung itself being deleted since there is no non-recoverable committed spend to protect.",
 "calendar": [],
 "signals": [
  "Surprise rate - risks that fired with no register row; a rise here next edition would mean widening taxonomy coverage before the event is scheduled.",
  "Owner and review-date coverage, now 100% - falling below that next edition would mean assigning owners and dates earlier in planning.",
  "Coverage-decision traceability, the buy-back included - a gap here next edition would mean writing down the broker conversation before registration opens."
 ],
 "caveats": [
  "No written contingency exists for Only one organizer knows the setup (orange, 15).",
  "10 taxonomy rows are not yet covered, including organizer financial capability and structural or commercial defection.",
  "The cancellation-fee schedule has not been entered, so no go/no-go dates exist yet.",
  "Register readiness is 2 of 5, missing taxonomy coverage, triggers or contingencies, and go/no-go dates."
 ]
}

The page's check: kept - nothing to flag

Riverside Python Evenings (a free meetup) - emergency

Scored register plus per-risk contingency; 4 live rows, 10 taxonomy rows missing; first go/no-go no fee schedule; 2 of 5 ready.

Input:

{
 "task": "emergency",
 "event": "Event: Riverside Python Evenings; a meetup; headcount 60; date 2027-01-20; community-run; an annual event\nMoney: budget $800; non-recoverable committed spend $0; venue contract value -; what the team could absorb $500\nAmplifiers present: alcohol service, a single-source dependency\nInsurance today: liability no (venue requires it: no); cancellation no; disease buy-back unknown; parent blanket policy no; in-house lawyer no; self-hosted registration no; marquee speaker no\nDecision: held by the organizer on duty; people who must agree 1; sponsor or parent veto no\nEmergency plan: none; venue security the host office's reception; first aid the host office's first-aider; on-duty organizer not named",
 "register": "Risk rows (impact shown as entered -> after amplifiers):\nHost office withdraws the room | 3 Venue loss or forced change | L2 x I4->5 = 10 orange | owner organizer | contingency | review 2027-01-06 | trigger: host stops replying a week out | contingency: move to the library's free room\nOnly one organizer knows the setup | 13 Key-organizer loss | L3 x I4->5 = 15 orange | owner organizer | prevention | review 2026-12-15\nLow turnout | 1 Demand shortfall | L3 x I1 = 3 green | owner organizer | acceptance | review 2027-01-13\nSponsor withdrawal | 2 Sponsor withdrawal | DELETED - no sponsor money in this budget - the host gives the room\nOrganizers decide to pause the series | 15 Organizer discretion | L2 x I3 = 6 yellow | owner organizer | prevention | review 2027-01-06\nCancellation-fee schedule: not entered",
 "facts": "Register depth: contingency - Scored register plus per-risk contingency; owner and review-date coverage 100%\nTaxonomy: 5 of 15 rows covered; missing 4, 5, 6, 7, 8, 9, 10, 11, 12, 14\nBands: red 0, orange 2, yellow 1, green 1\nCoverage ladder (categories to ask a broker about; never a policy or a quote): Venue-required liability - buy (the baseline third-party cover - it covers none of the organizer's own losses); Event cancellation with the communicable-disease buy-back - delete (no non-recoverable committed spend to protect); Cyber for the registration platform - delete (registration runs on a platform that holds the data); Participant accident - delete (no hands-on hardware or multi-day activity); Non-appearance (key speaker) - delete (no single named person carries the event's value); Parametric weather - delete (nothing outdoors or weather-exposed); disease buy-back not live\nGo/no-go: No fee schedule yet - no decision dates; decision holder the organizer on duty\nDecision dates (7 days before each step, self-set): none - no fee schedule\nRe-score the register at each decision date: no dates yet\nEmergency scenarios (unranked - the venue, the format and local protocol set their order): Fire, with the evacuation route and assembly point; Electrical or power failure; A medical emergency involving an attendee; Theft of equipment; Evacuation for any other reason, and who confirms the building is clear; An intoxicated attendee\nReadiness (2 of 5): Every taxonomy row covered or deleted with a reason MISSING; Every row owned and dated done; Every yellow row has a trigger, every orange-or-red row a contingency MISSING; A coverage decision recorded against each rung, the buy-back included done; A go/no-go date before every fee step-up MISSING\nSignals to record: Surprise rate: risks that fired with no register row (self-set); Owner and review-date coverage, now 100% (self-set target: every row); Coverage-decision traceability, the buy-back included (self-set)\nFindings (11):\n[check] taxonomy (register): Taxonomy rows with no register row: 4 Marquee speaker loss; 5 Adverse weather, pre-event; 6 Adverse weather, in-progress; 7 Communicable disease or public-health restriction; 8 Organizer financial capability; 9 Safety, security, or medical incident; 10 Code-of-conduct or PR incident; 11 Technical or production failure; 12 Registration-platform breach or data loss; 14 Structural or commercial defection. Add each, or delete it with a stated reason. Rows 8, 14 and 15 are the ones organizers reliably forget.\n[info] amplified (register): Host office withdraws the room: impact raised from 4 to 5 by a single-source dependency.\n[fix] no_contingency (register): Only one organizer knows the setup is orange (15) with no written contingency - if this fires, here is what we do.\n[info] amplified (register): Only one organizer knows the setup: impact raised from 4 to 5 by a single-source dependency.\n[check] no_trigger (register): Organizers decide to pause the series is yellow (6) with no pre-defined trigger to move it up a band.\n[info] community (coverage): Community pole with no non-recoverable spend: venue-required liability is the ceiling - the other rungs are deleted, not parked. The risk that bites here is organizational: rows 8 and 13.\n[info] broker (coverage): Every rung here is a category to ask a licensed broker about - not a policy, a limit or a quote. Clause wording goes to counsel.\n[check] no_fees (go/no-go): Enter the venue's cancellation-fee schedule - the days-out step-ups and their percentages, verbatim from the contract. If you do not have them, getting them is the first task.\n[check] contacts (emergency): Name the on-duty organizer for the emergency plan - with the hours each is reachable on site.\n[check] no_plan (emergency): No emergency plan yet - a separate printed document, every named scenario written one by one, a copy on site.\n[check] gate (readiness): Register readiness: 2 of 5 - missing: Every taxonomy row covered or deleted with a reason; Every yellow row has a trigger, every orange-or-red row a contingency; A go/no-go date before every fee step-up (thresholds self-set, not an industry benchmark)."
}

Reply:

{
 "task": "emergency",
 "title": "Emergency plan - Riverside Python Evenings",
 "scenarios": [
  {
   "scenario": "Fire, with the evacuation route and assembly point",
   "steps": [
    "Call out that there is a fire and begin evacuating the room.",
    "Use the nearest marked exit to reach the assembly point.",
    "Call emergency services once everyone is outside.",
    "Confirm with the on-duty organizer that the building is clear."
   ],
   "lead": "the on-duty organizer"
  },
  {
   "scenario": "Electrical or power failure",
   "steps": [
    "Stay in place if it is safe to do so.",
    "Check for emergency lighting and guide attendees toward exits if needed.",
    "Report the failure to venue security."
   ],
   "lead": "the host office's reception"
  },
  {
   "scenario": "A medical emergency involving an attendee",
   "steps": [
    "Stay with the attendee and keep others back.",
    "Call the on-site first aider.",
    "Call emergency services if the first aider advises it."
   ],
   "lead": "the host office's first-aider"
  },
  {
   "scenario": "Theft of equipment",
   "steps": [
    "Do not confront anyone directly.",
    "Note what is missing and when it was last seen.",
    "Report it to venue security.",
    "Call the non-emergency police line to file a report."
   ],
   "lead": "the host office's reception"
  },
  {
   "scenario": "Evacuation for any other reason, and who confirms the building is clear",
   "steps": [
    "Direct attendees to the nearest exit and the assembly point.",
    "Sweep the room for anyone remaining.",
    "Confirm with the on-duty organizer that the building is clear."
   ],
   "lead": "the on-duty organizer"
  },
  {
   "scenario": "An intoxicated attendee",
   "steps": [
    "Move the attendee to a quiet area away from alcohol service.",
    "Stay with them and monitor their condition.",
    "Call the first aider if their condition worsens.",
    "Arrange safe transport home rather than letting them drive."
   ],
   "lead": "the on-duty organizer"
  }
 ],
 "contacts": [
  {
   "role": "Venue security",
   "name": "the host office's reception",
   "note": "Hours on site to be filled in."
  },
  {
   "role": "First aid",
   "name": "the host office's first-aider",
   "note": "Hours on site to be filled in."
  },
  {
   "role": "On-duty organizer",
   "name": "to be named",
   "note": "Name and hours on site to be filled in."
  },
  {
   "role": "Non-emergency police line",
   "name": "to be named",
   "note": "To be filled in before printing, kept distinct from the emergency number."
  }
 ],
 "distribution": "This plan must be printed, with a copy kept on site, and every volunteer given access to it.",
 "advance": "Local emergency services have not yet been told about this event and should be notified in advance of 2027-01-20.",
 "rota": "",
 "note": "Before printing, name the on-duty organizer, add on-site hours for each contact, and fill in the non-emergency police line and the evacuation route and assembly point."
}

The page's check: kept - nothing to flag

Northgate Hardware Hack (company-run, overnight, minors) - register

Scored register plus per-risk contingency; 14 live rows, 0 taxonomy rows missing; first go/no-go 2026-10-30; 3 of 5 ready.

Input:

{
 "task": "register",
 "event": "Event: Northgate Hardware Hack; a hackathon; headcount 250; date 2027-03-06; company-run; an annual event\nMoney: budget $120,000; non-recoverable committed spend $70,000; venue contract value $50,000; what the team could absorb $20,000\nAmplifiers present: outdoor elements, minors present, hands-on hardware, overnight or multi-day duration\nInsurance today: liability yes (venue requires it: yes); cancellation considering; disease buy-back unknown; parent blanket policy no; in-house lawyer yes; self-hosted registration yes; marquee speaker no\nDecision: held by the head of developer relations; people who must agree 4; sponsor or parent veto yes\nEmergency plan: printed; venue security campus security; first aid the contracted first-aid team; on-duty organizer the overnight lead (rota)",
 "register": "Risk rows (impact shown as entered -> after amplifiers):\nRegistrations below plan | 1 Demand shortfall | L2 x I3 = 6 yellow | owner events manager | prevention | review 2026-12-01 | trigger: registrations under 60% of plan at T-60\nTitle sponsor withdraws | 2 Sponsor withdrawal | L2 x I4 = 8 yellow | owner partnerships lead | transfer | review 2026-12-01 | trigger: invoice unpaid 30 days after due\nCampus hall unavailable | 3 Venue loss or forced change | L1 x I5 = 5 yellow | owner events manager | transfer | review 2026-11-15 | trigger: campus facilities notice of works | contingency: move to the engineering atrium\nKeynote loss | 4 Marquee speaker loss | DELETED - no keynote - the program is a balanced set of workshops\nStorm before the event | 5 Adverse weather, pre-event | L2 x I3->4 = 8 yellow | owner events manager | contingency | review 2027-02-20 | trigger: severe-weather warning 72h out | contingency: shift the outdoor demo inside\nStorm during the outdoor demo | 6 Adverse weather, in-progress | L2 x I3->4 = 8 yellow | owner day lead | contingency | review 2027-03-06 | trigger: lightning within 10 km | contingency: stop the demo and move indoors\nDisease restriction | 7 Communicable disease or public-health restriction | L1 x I5 = 5 yellow | owner head of developer relations | transfer | review 2026-12-01 | trigger: a public-health order for the region | contingency: go virtual on the same dates\nPayment and refunds | 8 Organizer financial capability | L1 x I2 = 2 green | owner finance partner | prevention | review 2026-11-15\nSoldering-station injury | 9 Safety, security, or medical incident | L3 x I4->5 = 15 orange | owner safety lead | prevention | review 2027-02-20 | contingency: first-aid team on the floor; station closed\nConduct incident with minors present | 10 Code-of-conduct or PR incident | L2 x I4 = 8 yellow | owner CoC response owner | prevention | review 2027-02-20 | trigger: any report involving a minor\nVenue network blocks a third-party API | 11 Technical or production failure | L3 x I3 = 9 yellow | owner network lead | contingency | review 2027-02-27 | trigger: two teams report rate limits | contingency: backup uplink and per-team keys\nRegistration database breach | 12 Registration-platform breach or data loss | L2 x I4 = 8 yellow | owner platform owner | transfer | review 2027-01-15\nOne person holds the vendor accounts | 13 Key-organizer loss | L3 x I3 = 9 yellow | owner events manager | prevention | review 2026-12-15 | trigger: accounts not shared by T-30 | contingency: shared vault before T-30\nExhibitors move to their own events | 14 Structural or commercial defection | L1 x I2 = 2 green | owner head of developer relations | acceptance | review 2027-01-15\nTeam decides not to run | 15 Organizer discretion | L1 x I4 = 4 green | owner head of developer relations | prevention | review 2026-12-01\nCancellation-fee schedule: 120 days out (2026-11-06): 30% = $15,000; 60 days out (2027-01-05): 60% = $30,000; 14 days out (2027-02-20): 100% = $50,000",
 "facts": "Register depth: contingency - Scored register plus per-risk contingency; a per-risk memo for Campus hall unavailable; owner and review-date coverage 100%\nTaxonomy: 15 of 15 rows covered\nBands: red 0, orange 1, yellow 10, green 3\nCoverage ladder (categories to ask a broker about; never a policy or a quote): Venue-required liability - existing (the venue conditions doors opening on it, usually naming the venue as an additional insured); Event cancellation with the communicable-disease buy-back - buy (non-recoverable committed spend is 58% of the budget (the trigger is about a quarter, self-set)); Cyber for the registration platform - buy (self-hosted registration holds attendee data); Participant accident - buy (hands-on hardware or multi-day physical activity); Non-appearance (key speaker) - delete (no single named person carries the event's value); Parametric weather - buy (outdoor or weather-exposed elements - promoted); disease buy-back unknown\nGo/no-go: A date before every fee step-up; thresholds fixed in advance; a formally polled call; decision holder the head of developer relations\nDecision dates (7 days before each step, self-set): 2026-10-30 - before the 30% step on 2026-11-06 ($15,000 if cancelled after it); 2026-12-29 - before the 60% step on 2027-01-05 ($30,000 if cancelled after it); 2027-02-13 - before the 100% step on 2027-02-20 ($50,000 if cancelled after it)\nRe-score the register at each decision date: 2026-10-30, 2026-12-29, 2027-02-13\nEmergency scenarios (unranked - the venue, the format and local protocol set their order): Fire, with the evacuation route and assembly point; Electrical or power failure; A medical emergency involving an attendee; Theft of equipment; Evacuation for any other reason, and who confirms the building is clear; Severe weather during the event - shelter or stop; A lost or unaccompanied minor; An injury at a hands-on hardware station; overnight rota: one organizer awake on site at all times\nReadiness (3 of 5): Every taxonomy row covered or deleted with a reason done; Every row owned and dated done; Every yellow row has a trigger, every orange-or-red row a contingency MISSING; A coverage decision recorded against each rung, the buy-back included MISSING; A go/no-go date before every fee step-up done\nSignals to record: Surprise rate: risks that fired with no register row (self-set); Owner and review-date coverage, now 100% (self-set target: every row); Decision-date discipline: each go/no-go held before its step-up (self-set)\nFindings (13):\n[info] amplified (register): Storm before the event: impact raised from 3 to 4 by outdoor elements.\n[info] amplified (register): Storm during the outdoor demo: impact raised from 3 to 4 by outdoor elements.\n[info] amplified (register): Soldering-station injury: impact raised from 4 to 5 by outdoor elements, minors present, hands-on hardware, overnight or multi-day duration.\n[check] no_trigger (register): Registration database breach is yellow (8) with no pre-defined trigger to move it up a band.\n[info] memo (register): Promote a per-risk assessment memo for Campus hall unavailable - its materialization ends the organizing entity, not just the edition.\n[check] transfer (register): Soldering-station injury could end the entity (impact 5, committed spend above what the team can absorb) - promote transfer: insurance or a contract clause that moves the loss.\n[check] buyback (coverage): Record the communicable-disease buy-back decision either way - insurers excluded that peril market-wide from late January 2020, and it decided every documented COVID-era cancellation. Ask the broker explicitly.\n[info] broker (coverage): Every rung here is a category to ask a licensed broker about - not a policy, a limit or a quote. Clause wording goes to the in-house lawyer.\n[info] lead (go/no-go): Each go/no-go date sits 7 days before its fee step-up (self-set) - never at the event date, never at a round interval that lands after a step.\n[info] thresholds (go/no-go): Committed spend ($70,000) exceeds what the team could absorb ($20,000): fix the thresholds for each polled area before the first date arrives.\n[info] polled (go/no-go): More than two people must agree, or a sponsor or parent holds a veto: run a formally polled call - each area owner votes, a single no-go halts.\n[info] rota (emergency): Overnight: at least one organizer awake and alert on site at all times - write the rota before the event.\n[check] gate (readiness): Register readiness: 3 of 5 - missing: Every yellow row has a trigger, every orange-or-red row a contingency; A coverage decision recorded against each rung, the buy-back included (thresholds self-set, not an industry benchmark)."
}

Reply:

{
 "task": "register",
 "summary": "Highest band is orange (Soldering-station injury, score 15); next decision date is 2026-10-30, before the 30% cancellation-fee step; settle the communicable-disease buy-back first, since it is still unknown.",
 "disclaimer": "This is not legal or insurance advice; clause wording goes to counsel, and policy wording, coverage and limits go to a licensed broker.",
 "depth": {
  "pick": "contingency",
  "note": "The register also carries a dedicated risk-assessment memo for Campus hall unavailable, since its materialization would end the organizing entity rather than just the edition."
 },
 "rows": [
  {
   "risk": "Registrations below plan",
   "score": 6,
   "band": "yellow",
   "owner": "events manager",
   "next": "Trigger: registrations fall under 60% of plan at T-60."
  },
  {
   "risk": "Title sponsor withdraws",
   "score": 8,
   "band": "yellow",
   "owner": "partnerships lead",
   "next": "Trigger: the sponsor invoice remains unpaid 30 days after due."
  },
  {
   "risk": "Campus hall unavailable",
   "score": 5,
   "band": "yellow",
   "owner": "events manager",
   "next": "Trigger: a campus facilities notice of works."
  },
  {
   "risk": "Keynote loss",
   "score": null,
   "band": "deleted",
   "owner": "none",
   "next": "Deleted: there is no keynote - the program is a balanced set of workshops."
  },
  {
   "risk": "Storm before the event",
   "score": 8,
   "band": "yellow",
   "owner": "events manager",
   "next": "Trigger: a severe-weather warning 72 hours out."
  },
  {
   "risk": "Storm during the outdoor demo",
   "score": 8,
   "band": "yellow",
   "owner": "day lead",
   "next": "Trigger: lightning within 10 km."
  },
  {
   "risk": "Disease restriction",
   "score": 5,
   "band": "yellow",
   "owner": "head of developer relations",
   "next": "Trigger: a public-health order for the region."
  },
  {
   "risk": "Payment and refunds",
   "score": 2,
   "band": "green",
   "owner": "finance partner",
   "next": "Green: the finance partner monitors until the 2026-11-15 review date."
  },
  {
   "risk": "Soldering-station injury",
   "score": 15,
   "band": "orange",
   "owner": "safety lead",
   "next": "Contingency: the first-aid team takes the floor and the station is closed."
  },
  {
   "risk": "Conduct incident with minors present",
   "score": 8,
   "band": "yellow",
   "owner": "CoC response owner",
   "next": "Trigger: any report involving a minor."
  },
  {
   "risk": "Venue network blocks a third-party API",
   "score": 9,
   "band": "yellow",
   "owner": "network lead",
   "next": "Trigger: two teams report rate limits."
  },
  {
   "risk": "Registration database breach",
   "score": 8,
   "band": "yellow",
   "owner": "platform owner",
   "next": "No trigger is recorded for this row; one is missing."
  },
  {
   "risk": "One person holds the vendor accounts",
   "score": 9,
   "band": "yellow",
   "owner": "events manager",
   "next": "Trigger: the vendor accounts are not shared by T-30."
  },
  {
   "risk": "Exhibitors move to their own events",
   "score": 2,
   "band": "green",
   "owner": "head of developer relations",
   "next": "Green: the head of developer relations monitors until the 2027-01-15 review date."
  },
  {
   "risk": "Team decides not to run",
   "score": 4,
   "band": "green",
   "owner": "head of developer relations",
   "next": "Green: the head of developer relations monitors until the 2026-12-01 review date."
  }
 ],
 "missing": [],
 "coverage": [
  {
   "rung": "Venue-required liability",
   "status": "existing",
   "reason": "The venue conditions doors opening on it, usually naming the venue as an additional insured."
  },
  {
   "rung": "Event cancellation with the communicable-disease buy-back",
   "status": "buy",
   "reason": "Non-recoverable committed spend is 58% of the budget, above the self-set quarter trigger for promoting cancellation cover."
  },
  {
   "rung": "Cyber for the registration platform",
   "status": "buy",
   "reason": "Self-hosted registration holds attendee data."
  },
  {
   "rung": "Participant accident",
   "status": "buy",
   "reason": "Hands-on hardware and multi-day physical activity are both present."
  },
  {
   "rung": "Non-appearance (key speaker)",
   "status": "delete",
   "reason": "No single named person carries the event's value."
  },
  {
   "rung": "Parametric weather",
   "status": "buy",
   "reason": "Outdoor or weather-exposed elements promote this rung."
  }
 ],
 "buyback": "The communicable-disease buy-back is still unrecorded; ask the broker directly whether the cancellation cover includes or excludes it, since insurers excluded that peril market-wide from late January 2020 and it decided every documented COVID-era cancellation.",
 "calendar": [
  {
   "date": "2026-10-30",
   "before": "the 30% step on 2026-11-06",
   "cost": 15000
  },
  {
   "date": "2026-12-29",
   "before": "the 60% step on 2027-01-05",
   "cost": 30000
  },
  {
   "date": "2027-02-13",
   "before": "the 100% step on 2027-02-20",
   "cost": 50000
  }
 ],
 "signals": [
  "Surprise rate - any risk that fires with no matching register row; a nonzero rate next edition would add a new taxonomy entry before the kickoff review.",
  "Owner and review-date coverage, currently 100% of rows; a drop next edition would pause planning until every row has both back.",
  "Decision-date discipline - whether each go/no-go was actually held before its step-up; a miss would move next edition's dates further ahead of each fee step."
 ],
 "caveats": [
  "Registration database breach is yellow (score 8) with no pre-defined trigger to move it up a band.",
  "Soldering-station injury (score 15, orange) could end the entity, since committed spend exceeds what the team can absorb; promote transfer by insurance or a contract clause.",
  "The communicable-disease buy-back decision is still unrecorded; ask the broker explicitly, since insurers excluded that peril market-wide from late January 2020.",
  "Register readiness is 3 of 5: missing a trigger or contingency on every yellow or orange-or-red row, and a coverage decision recorded against each rung including the buy-back."
 ]
}

The page's check: kept - nothing to flag

Northgate Hardware Hack (company-run, overnight, minors) - emergency

Scored register plus per-risk contingency; 14 live rows, 0 taxonomy rows missing; first go/no-go 2026-10-30; 3 of 5 ready.

Input:

{
 "task": "emergency",
 "event": "Event: Northgate Hardware Hack; a hackathon; headcount 250; date 2027-03-06; company-run; an annual event\nMoney: budget $120,000; non-recoverable committed spend $70,000; venue contract value $50,000; what the team could absorb $20,000\nAmplifiers present: outdoor elements, minors present, hands-on hardware, overnight or multi-day duration\nInsurance today: liability yes (venue requires it: yes); cancellation considering; disease buy-back unknown; parent blanket policy no; in-house lawyer yes; self-hosted registration yes; marquee speaker no\nDecision: held by the head of developer relations; people who must agree 4; sponsor or parent veto yes\nEmergency plan: printed; venue security campus security; first aid the contracted first-aid team; on-duty organizer the overnight lead (rota)",
 "register": "Risk rows (impact shown as entered -> after amplifiers):\nRegistrations below plan | 1 Demand shortfall | L2 x I3 = 6 yellow | owner events manager | prevention | review 2026-12-01 | trigger: registrations under 60% of plan at T-60\nTitle sponsor withdraws | 2 Sponsor withdrawal | L2 x I4 = 8 yellow | owner partnerships lead | transfer | review 2026-12-01 | trigger: invoice unpaid 30 days after due\nCampus hall unavailable | 3 Venue loss or forced change | L1 x I5 = 5 yellow | owner events manager | transfer | review 2026-11-15 | trigger: campus facilities notice of works | contingency: move to the engineering atrium\nKeynote loss | 4 Marquee speaker loss | DELETED - no keynote - the program is a balanced set of workshops\nStorm before the event | 5 Adverse weather, pre-event | L2 x I3->4 = 8 yellow | owner events manager | contingency | review 2027-02-20 | trigger: severe-weather warning 72h out | contingency: shift the outdoor demo inside\nStorm during the outdoor demo | 6 Adverse weather, in-progress | L2 x I3->4 = 8 yellow | owner day lead | contingency | review 2027-03-06 | trigger: lightning within 10 km | contingency: stop the demo and move indoors\nDisease restriction | 7 Communicable disease or public-health restriction | L1 x I5 = 5 yellow | owner head of developer relations | transfer | review 2026-12-01 | trigger: a public-health order for the region | contingency: go virtual on the same dates\nPayment and refunds | 8 Organizer financial capability | L1 x I2 = 2 green | owner finance partner | prevention | review 2026-11-15\nSoldering-station injury | 9 Safety, security, or medical incident | L3 x I4->5 = 15 orange | owner safety lead | prevention | review 2027-02-20 | contingency: first-aid team on the floor; station closed\nConduct incident with minors present | 10 Code-of-conduct or PR incident | L2 x I4 = 8 yellow | owner CoC response owner | prevention | review 2027-02-20 | trigger: any report involving a minor\nVenue network blocks a third-party API | 11 Technical or production failure | L3 x I3 = 9 yellow | owner network lead | contingency | review 2027-02-27 | trigger: two teams report rate limits | contingency: backup uplink and per-team keys\nRegistration database breach | 12 Registration-platform breach or data loss | L2 x I4 = 8 yellow | owner platform owner | transfer | review 2027-01-15\nOne person holds the vendor accounts | 13 Key-organizer loss | L3 x I3 = 9 yellow | owner events manager | prevention | review 2026-12-15 | trigger: accounts not shared by T-30 | contingency: shared vault before T-30\nExhibitors move to their own events | 14 Structural or commercial defection | L1 x I2 = 2 green | owner head of developer relations | acceptance | review 2027-01-15\nTeam decides not to run | 15 Organizer discretion | L1 x I4 = 4 green | owner head of developer relations | prevention | review 2026-12-01\nCancellation-fee schedule: 120 days out (2026-11-06): 30% = $15,000; 60 days out (2027-01-05): 60% = $30,000; 14 days out (2027-02-20): 100% = $50,000",
 "facts": "Register depth: contingency - Scored register plus per-risk contingency; a per-risk memo for Campus hall unavailable; owner and review-date coverage 100%\nTaxonomy: 15 of 15 rows covered\nBands: red 0, orange 1, yellow 10, green 3\nCoverage ladder (categories to ask a broker about; never a policy or a quote): Venue-required liability - existing (the venue conditions doors opening on it, usually naming the venue as an additional insured); Event cancellation with the communicable-disease buy-back - buy (non-recoverable committed spend is 58% of the budget (the trigger is about a quarter, self-set)); Cyber for the registration platform - buy (self-hosted registration holds attendee data); Participant accident - buy (hands-on hardware or multi-day physical activity); Non-appearance (key speaker) - delete (no single named person carries the event's value); Parametric weather - buy (outdoor or weather-exposed elements - promoted); disease buy-back unknown\nGo/no-go: A date before every fee step-up; thresholds fixed in advance; a formally polled call; decision holder the head of developer relations\nDecision dates (7 days before each step, self-set): 2026-10-30 - before the 30% step on 2026-11-06 ($15,000 if cancelled after it); 2026-12-29 - before the 60% step on 2027-01-05 ($30,000 if cancelled after it); 2027-02-13 - before the 100% step on 2027-02-20 ($50,000 if cancelled after it)\nRe-score the register at each decision date: 2026-10-30, 2026-12-29, 2027-02-13\nEmergency scenarios (unranked - the venue, the format and local protocol set their order): Fire, with the evacuation route and assembly point; Electrical or power failure; A medical emergency involving an attendee; Theft of equipment; Evacuation for any other reason, and who confirms the building is clear; Severe weather during the event - shelter or stop; A lost or unaccompanied minor; An injury at a hands-on hardware station; overnight rota: one organizer awake on site at all times\nReadiness (3 of 5): Every taxonomy row covered or deleted with a reason done; Every row owned and dated done; Every yellow row has a trigger, every orange-or-red row a contingency MISSING; A coverage decision recorded against each rung, the buy-back included MISSING; A go/no-go date before every fee step-up done\nSignals to record: Surprise rate: risks that fired with no register row (self-set); Owner and review-date coverage, now 100% (self-set target: every row); Decision-date discipline: each go/no-go held before its step-up (self-set)\nFindings (13):\n[info] amplified (register): Storm before the event: impact raised from 3 to 4 by outdoor elements.\n[info] amplified (register): Storm during the outdoor demo: impact raised from 3 to 4 by outdoor elements.\n[info] amplified (register): Soldering-station injury: impact raised from 4 to 5 by outdoor elements, minors present, hands-on hardware, overnight or multi-day duration.\n[check] no_trigger (register): Registration database breach is yellow (8) with no pre-defined trigger to move it up a band.\n[info] memo (register): Promote a per-risk assessment memo for Campus hall unavailable - its materialization ends the organizing entity, not just the edition.\n[check] transfer (register): Soldering-station injury could end the entity (impact 5, committed spend above what the team can absorb) - promote transfer: insurance or a contract clause that moves the loss.\n[check] buyback (coverage): Record the communicable-disease buy-back decision either way - insurers excluded that peril market-wide from late January 2020, and it decided every documented COVID-era cancellation. Ask the broker explicitly.\n[info] broker (coverage): Every rung here is a category to ask a licensed broker about - not a policy, a limit or a quote. Clause wording goes to the in-house lawyer.\n[info] lead (go/no-go): Each go/no-go date sits 7 days before its fee step-up (self-set) - never at the event date, never at a round interval that lands after a step.\n[info] thresholds (go/no-go): Committed spend ($70,000) exceeds what the team could absorb ($20,000): fix the thresholds for each polled area before the first date arrives.\n[info] polled (go/no-go): More than two people must agree, or a sponsor or parent holds a veto: run a formally polled call - each area owner votes, a single no-go halts.\n[info] rota (emergency): Overnight: at least one organizer awake and alert on site at all times - write the rota before the event.\n[check] gate (readiness): Register readiness: 3 of 5 - missing: Every yellow row has a trigger, every orange-or-red row a contingency; A coverage decision recorded against each rung, the buy-back included (thresholds self-set, not an industry benchmark)."
}

Reply:

{
 "task": "emergency",
 "title": "Emergency plan - Northgate Hardware Hack",
 "scenarios": [
  {
   "scenario": "Fire, with the evacuation route and assembly point",
   "steps": [
    "Trigger the nearest fire alarm if it has not already sounded.",
    "Evacuate using the posted route to the assembly point.",
    "Keep fire lanes clear and do not use elevators.",
    "Wait for campus security to confirm the building is clear before re-entry."
   ],
   "lead": "campus security"
  },
  {
   "scenario": "Electrical or power failure",
   "steps": [
    "Stop any hands-on hardware or soldering work immediately.",
    "Switch off affected equipment at the source where it is safe to do so.",
    "Keep attendees clear of exposed wiring or affected areas.",
    "Call campus security to assess and restore power."
   ],
   "lead": "campus security"
  },
  {
   "scenario": "A medical emergency involving an attendee",
   "steps": [
    "Call the contracted first-aid team to the scene.",
    "Keep the area clear and do not move the attendee unless there is further danger.",
    "Send someone to guide the first-aid team to the location.",
    "Escalate to emergency services if the first-aid team advises it."
   ],
   "lead": "the contracted first-aid team"
  },
  {
   "scenario": "Theft of equipment",
   "steps": [
    "Do not confront anyone suspected of the theft.",
    "Report the theft to campus security immediately.",
    "Note what was taken and when it was last seen.",
    "Preserve the area until security has assessed it."
   ],
   "lead": "campus security"
  },
  {
   "scenario": "Evacuation for any other reason, and who confirms the building is clear",
   "steps": [
    "Direct attendees to the nearest exit and the assembly point.",
    "Assist anyone who needs help evacuating.",
    "Account for attendees at the assembly point.",
    "Wait for campus security to confirm the building is clear."
   ],
   "lead": "campus security"
  },
  {
   "scenario": "Severe weather during the event - shelter or stop",
   "steps": [
    "Stop any outdoor activity immediately.",
    "Move attendees to the designated indoor shelter area.",
    "Monitor the weather situation before resuming.",
    "Wait for the day lead to confirm it is safe to resume or end the activity."
   ],
   "lead": "the day lead"
  },
  {
   "scenario": "A lost or unaccompanied minor",
   "steps": [
    "Alert campus security immediately with a description of the minor.",
    "Secure the exits where possible without blocking emergency routes.",
    "Search the immediate area in pairs, never alone.",
    "Notify the family or guardian once the minor is found."
   ],
   "lead": "campus security"
  },
  {
   "scenario": "An injury at a hands-on hardware station",
   "steps": [
    "Stop work at the station immediately.",
    "Call the contracted first-aid team to treat the injury.",
    "Have the safety lead close the station until it is reviewed.",
    "Do not resume use of the station until it is cleared."
   ],
   "lead": "the contracted first-aid team"
  }
 ],
 "contacts": [
  {
   "role": "venue security",
   "name": "campus security",
   "note": "On-site hours are not given; fill in before printing."
  },
  {
   "role": "first aid",
   "name": "the contracted first-aid team",
   "note": "On-site hours are not given; fill in before printing."
  },
  {
   "role": "on-duty organizer",
   "name": "the overnight lead",
   "note": "On site overnight, per the rota."
  },
  {
   "role": "non-emergency police line",
   "name": "to be named",
   "note": "Kept distinct from the emergency number; fill in before printing."
  }
 ],
 "distribution": "This plan is printed, with a copy kept on site, and every volunteer has access to it.",
 "advance": "Local emergency services should be told about the event in advance, including its date and location.",
 "rota": "One organizer, the overnight lead, must be awake and alert on site at all times overnight, with the full rota written before the event.",
 "note": "Before printing, add phone numbers, on-site hours for venue security and first aid, and a name for the non-emergency police line."
}

The page's check: kept - nothing to flag

The register CSV for the first sample

risk,category,likelihood,impact,impact_after_amplifiers,score,band,owner,treatment,review,trigger,contingency,status
Ticket sales below break-even,Demand shortfall,3,4,4,12,orange,ticketing lead,prevention,2027-02-01,sales under 40% of break-even at T-90,cut to one track and release the second room,open
Lead sponsor pulls out,Sponsor withdrawal,2,4,5,10,orange,sponsorship lead,prevention,2027-02-01,,,open
Venue closes or changes terms,Venue loss or forced change,1,5,5,5,yellow,logistics lead,transfer,2027-02-01,,,open
Speaker dropouts,Marquee speaker loss,3,2,3,9,yellow,program lead,contingency,2027-04-01,,two standby talks,open
Disease restriction,Communicable disease or public-health restriction,2,5,5,10,orange,,transfer,,,,open
Harassment or speaker backlash,Code-of-conduct or PR incident,2,3,3,6,yellow,CoC response owner,prevention,2027-04-15,,,open
Stream or AV fails,Technical or production failure,3,2,2,6,yellow,production lead,contingency,2027-05-01,,,open
Evening social incident,"Safety, security, or medical incident",2,2,3,6,yellow,operations lead,prevention,2027-05-01,,,open
Payment provider not set up,Organizer financial capability,2,3,3,6,yellow,treasurer,prevention,2026-12-15,,,open

Build the input yourself

Load the engine in node (global.window = global; require("./riskkit.js"); require("./riskreply.js")), then:

const K = RiskKit, R = RiskReply;
const f = K.form({ name: "My Conf", eventDate: "2027-05-20", budget: "60000", committed: "18000", contract: "24000", absorbable: "8000",
  fees: "days,fee\n180,25\n90,50\n30,90", risks: fs.readFileSync("risks.csv", "utf8") });
// f.rows (cat, L, I, adjI, score, band, owner, trigger, contingency), f.missingCats, f.depth, f.cover (key, status, why)
// f.steps (days, fee, date, decide, cost), f.goMech, f.scenarios, f.gate, f.findings
K.registerCSV(f)                               // risk, category, likelihood, impact, ..., status
const b = K.buildInput(f, "register");         // or "emergency"
const wire = K.toWire(b.input);                // POST this to /estimate and /run
// then: const reply = R.normalize(R.parseReply(job.output.output), "register");
// R.check(reply, b)                           // {status: kept or flagged, notes}

Get a token for the steps below from /tokens.html.

Step 1 — a tiny client helper

One function that sends JSON and unwraps the response. Paste a personal token from /tokens.html, or leave it empty and mint a guest token in step 2.

BASE="https://api.skillsafe.ai/v1/app-api"
TOKEN="paste-your-token-here"   # from https://no-go-dates.skillsafe.ai/tokens.html
api() { # api METHOD PATH [JSON-BODY]
  curl -s -X "$1" "$BASE$2" -H "Content-Type: application/json" \
    ${TOKEN:+-H "Authorization: Bearer $TOKEN"} ${3:+--data "$3"}
}

Step 2 — a token

A guest token is enough for /me and /estimate. A run is metered, so it needs a personal token: sign in on /tokens.html and copy it from there.

# a guest token (enough for /me and /estimate); a run needs your personal token from /tokens.html
TOKEN=$(curl -s -X POST "$BASE/guest" -H "Content-Type: application/json" -d '{"slug":"no-go-dates"}' | jq -r '.data.token')

Step 3 — GET /me

Who the token is (subject_type: user or guest) and the credit balance.

api GET /me | jq '.data | {subject_type, credits}' 

Step 4 — POST /estimate

Free. The body is the run input itself, the bare object (never wrapped in {"input": ...}). hold_credits is a reservation, not the price; min_credits is what the balance must cover; model_alias reads gpt-terra.

# input.json: the run input object - {"task": "register", "event": "Event: ...; a single-day conference ...", "register": "Risk rows (impact shown as entered ...): ...", "facts": "Register depth: ..."}
# - see the input table
api POST /estimate "$(cat input.json)" | jq '.data | {hold_credits, min_credits, model, model_alias, markup_bps, warnings}' 

Step 5 — POST /run, then poll the job

Send an Idempotency-Key built from the lane and the input: a retry with the same key never bills twice. The page uses no-go-dates:<task>:<inputHash>:a<attempt> - the lane is part of the key - and its one automatic reformat retry is a new attempt number, named in the page as one extra run. A register carries summary, disclaimer, depth, rows, missing, coverage, buyback, calendar, signals and caveats; an emergency plan carries title, scenarios, contacts, distribution, advance, rota and note. The code below prints the headline parts of either (list items are plain strings).

KEY="no-go-dates:register:$(shasum -a 256 input.json | cut -c1-16):a1"
JOB=$(curl -s -X POST "$BASE/run" -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: $KEY" --data @input.json | jq -r '.data.job_id')
while :; do
  J=$(api GET "/jobs/$JOB"); S=$(echo "$J" | jq -r '.data.status')
  case "$S" in succeeded|failed|cancelled) break;; esac; sleep 2
done
echo "$J" | jq -r '.data.output.output' > reply.json   # one JSON object, the reply contract
echo "$J" | jq '.data | {charged_credits, truncated}'
jq -r '.summary // .format, .note // .buyback, ((.signals // .caveats)[] | "\(.signal // .caveat): \(.text // .text)")' reply.json
jq -r '.distribution // .note // empty' reply.json   # how the plan is distributed (emergency)

Step 6 — POST /run-stream

The same run as Server-Sent Events, with the same input.json. Browsers receive progress ticks rather than text deltas; the final done event carries the reply.

# Server-Sent Events: tick/delta events while the job runs, then a final event with the job
curl -N -s -X POST "$BASE/run-stream" -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: no-go-dates:register:$(shasum -a 256 input.json | cut -c1-16):a1" --data @input.json