← Access Pledge
API
Tokens

Run Access Pledge from your own code

Both metered lanes are available over HTTP and each returns one JSON object. The division of labour: the page reads the funding pole and the venue, re-ranks the four menus, sizes, owns and funds every provision with known needs first, writes the criteria sheet, the request channel and its data posture, the digital checklist, the hand-offs and the gaps, and classifies each pasted request - all free, in accesskit.js. The run writes the plan, or the public page, the request form and an answer to each request; the page then holds the reply to its own board (accessreply.js). It decides the bar, not delivery; it is not the code-of-conduct response team; it is not legal advice - what a jurisdiction requires is a question for counsel - and it never asks for or repeats a diagnosis.

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":"access-pledge"}), so no slug header is needed afterwards. Send it as Authorization: Bearer YOUR_TOKEN. The run body is the input object, sent bare.

StatusCodeMeaning
400validation_errorThe body is not a JSON object, or a required key (task, event, needs, facts) is missing. requests may be an empty string.
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, chosen by task:

A missing or unknown task is answered as plan. Both lanes send the same five fields; for the page, the facts also carry the plan's summary, picks and statuses (the page fills these from the plan). The requests field may be an empty string.

The input

FieldRequiredWhat
taskyesplan or page. If it is missing or neither, do plan and set "task": "plan".
eventyesthe event basics and the interview, Q1 to Q11: dates, city, attendance, format, rooms, programme hours, recording, catering, the as-of date, who funds the provision line, whether the venue is signed and the building's access facts, the count of known needs, the legal entity, the owner, the jurisdiction and whether it was checked, the publish-by date, one-off or recurring, the effort ceiling, the time slot, the size, and the request flow: lead time, requests-by date, turnaround and delete-by date.
needsyesthe known needs, one per line, each with the provision it asks for and its status on the page.
requestsnothe pasted accommodation requests, one per block; may be empty.
factsyesthe page's verdict and whether the page is ready to publish, the self-set lines, the pole, the venue, the four menus with their picks, moves and deletions, the slot, the people pick, the provision set row by row, the page sections with what each covers and does not, the request channel and the form fields, the data posture, the digital checklist, the hand-offs, the stated gaps that apply, each request with its label and decision, the day-of contact and the last-updated date, for the page task anything carried from the plan, 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

plan

  1. summary - one sentence, at most 40 words: the verdict, the most important open item, and the next step.
  2. verdict - the page's verdict, exactly: answer the requests, fix first, decide before the venue is signed or ready to publish.
  3. menus - four objects, depth, captioning, requests and economic, each with pick (the page's pick for menu 1, 2, 3 and 4, exactly - when menu 3 has no rung left, the pick is "No request channel - walk-up only") and reason (one sentence naming the interview answer behind it).
  4. slot_note - one or two sentences on the slot. When the page says the slot excludes caregivers, use the words "evening" and "caregivers"; when it says hand to event-date-selection, name "event-date-selection".
  5. provisions - one object per provision in the page's provision set, in its order: area, provision, status, owner and funded_from, each exactly as the page writes it, and depth - the page's depth, keeping every number it carries.
  6. people - pick: the page's people pick, exactly; reason: one or two sentences that also say it is not the code-of-conduct response team's intake (use the words "code of conduct").
  7. digital - one object per item in the page's digital checklist, in its order: item and status (to check or not applicable), exactly as the page writes them.
  8. handoffs - one object per page hand-off, in its order: to (the sibling's name exactly) and what (one short phrase).
  9. data - retention (state the page's delete-by date), access (name the owner as the page writes it, and who else may read the requests), deletion (say the requests are deleted at the debrief - use the words "delete" and "debrief").
  10. gaps - the page's stated gaps that apply, as strings, exactly and in its order.
  11. caveats - at most 5 short strings: the [fix] findings first in the page's order, then the most important [check] findings. Never empty when the page has a [fix] finding; [] otherwise when there is nothing to say.
{
  "task": "plan",
  "summary": "one sentence",
  "verdict": "decide before the venue is signed",
  "menus": { "depth": { "pick": "the page's pick", "reason": "one sentence" }, "captioning": { "pick": "the page's pick", "reason": "one sentence" }, "requests": { "pick": "the page's pick", "reason": "one sentence" }, "economic": { "pick": "the page's pick", "reason": "one sentence" } },
  "slot_note": "one or two sentences",
  "provisions": [ { "area": "physical", "provision": "the page's provision", "depth": "the page's depth", "owner": "the page's owner", "funded_from": "the page's funded from", "status": "the page's status" } ],
  "people": { "pick": "the page's pick", "reason": "one or two sentences" },
  "digital": [ { "item": "the page's item", "status": "to check" } ],
  "handoffs": [ { "to": "the page's sibling", "what": "a short phrase" } ],
  "data": { "retention": "one sentence", "access": "one sentence", "deletion": "one sentence" },
  "gaps": [ "the page's gap" ],
  "caveats": [ "a caveat" ]
}

The page holds it to its own board: the verdict and the four picks exactly (never a deleted rung); a slot note naming the evening and the caregivers when the slot excludes them, and event-date-selection when it is movable; every provision row with the page's area, status, owner and funded-from, its depth keeping every number; the people pick with a reason naming the code of conduct; the checklist items and statuses; the hand-offs in order; a retention that states the delete-by date, an access line naming the owner, a deletion at the debrief; the gaps exactly; caveats when the page has a fix; and no number, law, diagnosis or gender the input does not hold.

page

  1. title - the page title; it must contain the event's name exactly as the page writes it.
  2. intro - one paragraph: who the page is for, naming the groups the event intends to welcome, and that it links the code of conduct (use the words "code of conduct").
  3. sections - one object per area in the page's order (physical, sensory, dietary, economic, digital): area - the page's area, exactly. covered and not_covered - the page's two lists for that area, provision names exactly; [] when the page's list is "none". text - the honest wording: the scope inside each sentence ("Live captioning is provided in the main room on both days; other rooms are not captioned"), never "accommodations available on request". When not_covered is not empty, say so plainly with "not", "no" or "cannot", and name the nearest alternative if the input gives one; a venue criterion or a provision to confirm is not yet secured, never a promise. When the area has a provision on request, state the page's requests-by date. When the page's captioning depth is the main room, use the word "main".
  4. request_channel - channel (the page's request channel, exactly), owner (the page's owner, exactly), lead_time (state the page's requests-by date), turnaround (state the page's number of days), retention (state the page's delete-by date). When the channel is "No request channel - walk-up only", set lead_time, turnaround and retention to "not applicable".
  5. day_of_contact - who to find on the day: for a large event the inclusion team (use the words "inclusion team"); for a small one the owner by name, or "the organizers" when the page's owner is "not named".
  6. last_updated - the page's last-updated date, exactly (YYYY-MM-DD).
  7. form - fields: the page's form fields, exactly and in order ([] when there is no channel); statement: what happens to what people tell you - state the page's delete-by date, name the owner, and say it is shared only with the organizers who arrange what was asked for (use the word "shared"). With no channel, one sentence saying no request form is open and every provision works walk-up. Never a field that asks for a diagnosis or a medical condition.
  8. answers - one object per request the page lists, in its order; [] when the page says "Requests: none pasted": request - the page's label, exactly; decision - the page's decision, exactly (covered, covered with lead time, not covered - decline with reason or needs owner decision). reply - the message to send, at most 150 words, never repeating any diagnosis the request mentions. For not covered - decline with reason: say plainly what cannot be done and why, and offer what exists instead (use "instead" or "we can"). For covered with lead time: say when it will be confirmed (use the word "confirm"). For needs owner decision: name the owner (or "the organizers" when the owner is "not named") and say they will answer within the page's turnaround, the number of days in digits.
  9. disclaimer - one sentence saying the page is not legal advice (use the words "legal advice") and that access duties vary by jurisdiction.
  10. note - one sentence: when the page says "page ready to publish: no", begin with "Not ready to publish:" and say what to fix first; otherwise say what happens next.
{
  "task": "page",
  "title": "Accessibility at the event",
  "intro": "one paragraph",
  "sections": [ { "area": "physical", "covered": [ "the page's provision" ], "not_covered": [ "the page's provision" ], "text": "the honest wording" } ],
  "request_channel": { "channel": "the page's channel", "owner": "the page's owner", "lead_time": "by the requests-by date", "turnaround": "within N days", "retention": "deleted by the delete-by date" },
  "day_of_contact": "who to find on the day",
  "last_updated": "YYYY-MM-DD",
  "form": { "fields": [ "the page's field" ], "statement": "what happens to what you tell us" },
  "answers": [ { "request": "the page's label", "decision": "covered", "reply": "the message to send" } ],
  "disclaimer": "one sentence",
  "note": "one sentence"
}

The page requires the event's name in the title, the code of conduct in the intro, one section per area whose covered and not-covered lists are exactly the page's (a "not" wherever something is not covered, the requests-by date wherever something is on request, "main" when captioning is scoped to the main room), the channel and owner exactly with the requests-by date, the turnaround and the delete-by date (or "not applicable" with no channel), the inclusion team or the owner as the day-of contact, the last-updated date, the page's form fields with a statement giving the delete-by date, the owner and who it is shared with, one answer per request with its label and decision (a decline that offers what exists, a lead-time answer that confirms, an owner decision naming the owner and the turnaround) never repeating a diagnosis, a not-legal-advice disclaimer, and a note beginning "Not ready to publish:" when the page is not ready.

Worked examples - every lane, every sample

These are the page's five free samples (fictional events, organizations, people and places). Each input is exactly what the page sends; each reply is the saved reply the sample replays, shipped unedited; the last line is the page's own check. Two samples carry pasted requests, so their page replies carry answers; the other three show the empty list.

A 400-person conference, venue not signed - plan

Verdict: decide before the venue is signed; page ready to publish: no; depth: Published page and request channel; request channel: Named inbox with named people; 8 of 21 provisions covered; 0 requests; 0 fix-level findings.

Input:

{
 "task": "plan",
 "event": "Event: \"Brightwater DevConf 2027\" | dates: 2027-03-04 to 2027-03-05 (2 days) | city: \"Brightwater\" | attendance: 400 | format: multi-track conference | session rooms: 3 | programme hours a day: 7 | recording: recorded and published | catering: catered meals | as of: 2026-11-02\nQ1 who funds the provision line: a community budget where every provision competes with catering\nQ2 venue signed: no | the building's access facts: [step-free route to every room the event uses, with lifts - a criterion, not yet a fact; wheelchair-accessible bathrooms - a criterion, not yet a fact; a restroom that can be designated all-gender - a criterion, not yet a fact; spare rooms for a quiet space and a separate nursing room - a criterion, not yet a fact; a hearing loop in the session rooms - a criterion, not yet a fact]\nQ3 known needs: 6 (one per line in the needs field)\nQ4 a legal entity able to sign a vendor contract, carry insurance and disburse money: no\nQ5 owner from now until the debrief: \"Tamsin Quillfeather\" | kind: a named person\nQ6 jurisdiction: \"Brightwater, Eastland\" | checked: not checked - a question for counsel | an institutional partner requires a structured form: no\nQ7 publish by: 2026-12-15 | days from the as-of date: 43\nQ8 edition: one year of a recurring event | a volunteer subtitling community exists: no | an in-house signing volunteer: no\nQ9 effort ceiling: organizer hours: 60 | someone to staff a request channel through to the event: yes | budget committable before tickets sell: no\nQ10 time slot: daytime programme with an evening social | still movable: yes\nQ11 size: a multi-day or high-attendance conference - attendees cannot see the organizers\nRequest flow: lead time for booked provisions: 8 weeks | requests-by date: 2027-01-07 | reply within: 5 days | requests deleted: 14 days after the event | delete-by date: 2027-03-19",
 "needs": "Known needs (Q3), provisioned against evidence first - 6:\n- need 1 | provision: \"Step-free route\" | status: \"venue criterion\" | need: \"Step-free access to the stage and the speaker room\" | evidence: \"a speaker who uses a wheelchair, declared for this edition\" | asked: \"a ramp to the main stage\" | a speaker's need: yes\n- need 2 | provision: \"Live captioning\" | status: \"committed\" | need: \"Live captions in the main talks\" | evidence: \"asked at last edition's registration desk\" | asked: \"live captioning\" | a speaker's need: no\n- need 3 | provision: \"Live captioning\" | status: \"committed\" | need: \"Live captions\" | evidence: \"written request after last edition\" | asked: \"captioning in the main room\" | a speaker's need: no\n- need 4 | provision: \"Dietary categories\" | status: \"committed\" | need: \"Vegan meals\" | evidence: \"last edition's registration form\" | asked: \"a vegan lunch both days\" | a speaker's need: no\n- need 5 | provision: \"Dietary categories\" | status: \"committed\" | need: \"Gluten-free meals\" | evidence: \"last edition's registration form\" | asked: \"a gluten-free lunch\" | a speaker's need: no\n- need 6 | provision: \"Dietary categories\" | status: \"committed\" | need: \"Nut-free meals\" | evidence: \"last edition's registration form\" | asked: \"no tree nuts or peanuts\" | a speaker's need: no",
 "requests": "",
 "facts": "Verdict: \"decide before the venue is signed\" | page ready to publish: no | fix-level findings: 0\nSelf-set lines: a hard publish-by date at 56 days or fewer | requests in volume at 10 known needs or more | a large event at 150 attendees or more | a low effort ceiling under 10 organizer hours | reserved seats at known needs plus 2 per room | the lead time, turnaround and retention entered on the form | a reply cap of 150 words. The references' own: the quiet room observation of about 5% of attendees at once (AdaCamp, an observation, not a standard) | contrast 4.5:1 for normal text and 3:1 for large text (WCAG 2.2 AA) | the subsidized fee about 4 times below real cost (PyCon US 2019, historical).\nWho funds it (Q1): \"a community budget where every provision competes with catering\" | notes: An attendee's access need is identical whether an employer or the attendee bought the ticket; no provision changes shape because of who paid - the axis that discriminates is who funds the provision line. Every provision competes with the money that would otherwise buy lunch: this moves menu 1 (depth), menu 2 (captioning) and menu 4 (economic access). Live captioning is also a sponsorable line ('captioning presented by ...'): budget the provision first, so it exists whether or not the line sells - a sale offsets the cost, it does not create the provision. It does not move menu 3: a two-person volunteer team and a foundation face the identical problem once an attendee discloses - the same duty of care, the same retention question, the same person who now has to answer.\nVenue (Q2): signed: no | notes: Q2: the venue is not signed. Write the accessibility criteria first and hand the sheet to event-venue-sourcing as a sourcing input - a signed venue deletes half of menu 1 permanently.\nMenu 1 - provision depth - pick: \"Published page and request channel\"\n- rung 1: \"Published page and request channel\" | moved: promoted by Q7: a hard publish-by date (43 days away, hard at 56 or fewer - self-set) promotes the fast-acting rungs; promoted by Q8: a recurring event - the page is a reusable organizational asset, built once and edited each year\n- rung 2: \"Venue-floor facts\" | moved: promoted by Q7: a hard publish-by date\n- rung 3: \"On-site provision set\"\n- deleted, not demoted: \"An accessibility page describing provisions not yet secured\" | reason: the skill: it would win the efficiency line outright - and converts into a broken promise for whoever travelled on it\n- deleted, not demoted: \"Funded-access set\" | reason: Q4: no legal entity to sign a contract, carry insurance or disburse money - deleted outright, not ranked\n- notes: Value and effort share one order on this menu, so no rung dominates another and the compliance axis rescues nothing.\nMenu 2 - captioning and interpretation - pick: \"Live captioning, main days/room only\"\n- rung 1: \"Live captioning, main days/room only\" | moved: demoted by Q1: a community budget; promoted by Q3: a captioning need is already known (2 requests); made the pick by Q3 and Q8: the need is real and recurring - state which parts are covered\n- rung 2: \"On-request live provision\" | moved: promoted by Q7: a hard publish-by date promotes the fast-acting rung\n- rung 3: \"Post-event corrected captions\"\n- rung 4: \"Live captioning in every room\" | moved: demoted by Q1: a community budget; promoted by Q3: on-request has fired more than once (2 captioning requests)\n- rung 5: \"Standing subtitle pipeline\"\n- deleted, not demoted: \"Treating production capability as a captioning provision\" | reason: the skill: a capable broadcast operation is not a captioning provision until someone states, budgets and publishes what it covers\n- deleted, not demoted: \"Announcing an unvetted automatic feed as captioning coverage\" | reason: the skill: it would win efficiency on every live rung, and the attendee who relied on it discovers the gap mid-talk\n- notes: Every live rung assumes a human captioner (real-time stenotype captioning, also called CART). An automatic feed is a fallback inside a rung, never a rung: label it automatic on screen and on the page, and say which rooms have a human. Brief the captioner on the jargon before the event: the accessibility owner sends the programme, speaker names, slide decks when available and a glossary of product names, acronyms, library and tool names. Interpretation is not bundled with captioning at the same trigger: its trigger threshold is self-set - state the level chosen and why.\nMenu 3 - the request channel - pick: \"Named inbox with named people\"\n- rung 1: \"Named inbox with named people\" | moved: promoted by Q7: a hard publish-by date; made the pick by Q6: the jurisdiction's data rules are unanswered - the inbox is promoted over the field\n- rung 2: \"Registration-flow field\" | moved: promoted by Q7: a hard publish-by date - ten minutes to add\n- rung 3: \"Structured form with a stated posture\" | moved: demoted by Q7: a hard publish-by date - the heaviest upfront review\n- deleted, not demoted: \"Routing requests to the general registration desk with no accessibility owner\" | reason: the skill, at any staffing level: not the cheap rung but the unowned one - the request is received, nobody is accountable, and the attendee learns this on the day\n- notes: First shrink what needs a request at all: a quiet space, all-gender restrooms, reserved seating and consent stickers work walk-up, and the people who most need them are the least likely to disclose. Only booked provisions need a channel - interpretation, childcare, a nursing room, an equipment rental, a grant. The funding pole does not move this menu: once an attendee discloses, a volunteer team and a foundation hold the same duty of care.\nBefore menu 4 - the slot (Q10): \"daytime programme with an evening social\" | movable: yes | excludes caregivers: yes | hand to event-date-selection: yes | note: The daytime programme reaches caregivers, but the evening social excludes them - while it is movable, a lunch or daytime social is cheaper than any rung: hand it to event-date-selection.\nMenu 4 - economic access - pick: \"Ticket-side need-gated rung\"\n- rung 1: \"Ticket-side need-gated rung\" | moved: promoted by Q7: a hard publish-by date - the fast-acting rung\n- deleted, not demoted: \"An unpublished hardship promise with no budget\" | reason: the skill: an unpublished 'email us and we'll see' hardship promise with no budget behind it\n- deleted, not demoted: \"Travel and registration grant\" | reason: Q4: no entity able to disburse money - deleted outright, not ranked\n- deleted, not demoted: \"Complimentary childcare\" | reason: Q4: no legal entity to hold the vendor contract and the insurance - childcare cannot run at all\n- deleted, not demoted: \"Subsidized childcare\" | reason: Q4: no legal entity to hold the vendor contract and the insurance - childcare cannot run at all\n- notes: Ticket price itself is not this skill's: the need-gated scholarship rung belongs to event-ticket-pricing - never a second application process for a route that already exists there. A subsidized fee looks cheaper and is not: the published fee sits against a real per-child-day cost roughly 4 times higher (PyCon US 2019, historical) - small budget relief, real administrative load.\nPeople attendees turn to (Q11) - pick: \"Dedicated inclusion team\" | reason: Q11: a multi-day or high-attendance conference - attendees cannot see the organizers - staff a team trained in handling inequality, physically identifiable (a distinct t-shirt is the usual mark) on every day and floor the event uses. | conditions: Announce it before the event or at the start: the event page, the accessibility page, the pre-event attendee email and the opening remarks. Brief before identifying: every provision and where it is, listening without demanding justification, what a member may resolve alone, and the handoff path - provision owner, organizer on duty, code-of-conduct response team (recruit and brief through event-volunteers). Give it a handoff, not a desk of its own: the team routes; it does not hold requests nobody else sees. | Not the code-of-conduct response team: a member who hears a code-of-conduct violation hands it to that team under event-code-of-conduct's runbook - never investigates, decides or records it. A shared shirt requires every wearer to have that skill's staff briefing.\nProvision set - 21 provisions, known needs first, in this order:\n- provision: \"Step-free route\" | area: physical | status: \"venue criterion\" | depth: \"a criterion for the venue\" | owner: \"Tamsin Quillfeather\" | funded from: \"venue contract\" | known needs: 1 | basis: a property of the building - venue-floor facts, every rung\n- provision: \"Live captioning\" | area: sensory | status: \"committed\" | depth: \"main room, 2 days, 14 hours\" | owner: \"Tamsin Quillfeather\" | funded from: \"community budget\" | known needs: 2 | basis: menu 2: Live captioning, main days/room only - a human captioner; an automatic feed is labelled automatic and never counted as coverage\n- provision: \"Dietary categories\" | area: dietary | status: \"committed\" | depth: \"3 known needs + a registration question\" | owner: \"Tamsin Quillfeather\" | funded from: \"catering budget\" | known needs: 3 | basis: ask everyone who will be fed; vegetarian, vegan, celiac and gluten-free, common allergies, kosher, halal (hackathon guide); the eight common allergens plus sesame (IACC); fallbacks: a one-off supplier request, or a delivery credit with advance notice\n- provision: \"Accessible bathrooms\" | area: physical | status: \"venue criterion\" | depth: \"a criterion for the venue\" | owner: \"Tamsin Quillfeather\" | funded from: \"venue contract\" | known needs: 0 | basis: a property of the building - a specific checkable claim, never a general one\n- provision: \"Floor map\" | area: physical | status: \"venue criterion\" | depth: \"drawn once the venue is signed\" | owner: \"Tamsin Quillfeather\" | funded from: \"organizer hours\" | known needs: 0 | basis: published maps marking event areas, lifts, stairs, bathrooms and nursing stations (PyCon 2019, historical)\n- provision: \"Reserved seating\" | area: physical | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: available in each session for attendees with access needs (LF template), walk-up\n- provision: \"Companion ticket\" | area: physical | status: \"on request\" | depth: \"free, by writing to the owner\" | owner: \"Tamsin Quillfeather\" | funded from: \"organizer hours\" | known needs: 0 | basis: registers separately and free, same badge and catering (PyCon 2019, historical)\n- provision: \"Mobility-equipment rental\" | area: physical | status: \"not offered\" | depth: \"attendees source their own\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: a named third-party vendor for wheelchairs and scooters (LF template) - the pattern is naming a vendor at all\n- provision: \"Quiet space\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: rationale: sensory input - noise and light; away from the hub, dim, wheelchair-accessible, separate from any nursing room (AdaCamp)\n- provision: \"Nursing room\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: stated to exist unconditionally, only its location withheld until check-in (LF template) - reaches people who would never ask\n- provision: \"All-gender restrooms\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: designated specifically and named as such (LF template)\n- provision: \"Consent stickers\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: green open to talk, yellow only if you know me, red not interested in talking or being photographed - an access provision and a photo opt-out; enforcement lives with event-code-of-conduct\n- provision: \"Pronoun stickers\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: opt-in stickers at registration (LF template); what the choice says belongs to event-cultural-identity\n- provision: \"Sign-language interpretation\" | area: sensory | status: \"on request\" | depth: \"on request, 8 weeks' notice\" | owner: \"Tamsin Quillfeather\" | funded from: \"community budget\" | known needs: 0 | basis: interpreters only when notified by signing attendees (PyCon 2019, historical) - not bundled with captioning at the same trigger\n- provision: \"Hearing loop\" | area: sensory | status: \"venue criterion\" | depth: \"a criterion for the venue\" | owner: \"Tamsin Quillfeather\" | funded from: \"venue contract\" | known needs: 0 | basis: delivered technically by event-production\n- provision: \"Restricted-meal table\" | area: dietary | status: \"committed\" | depth: \"separate table, printed name list\" | owner: \"Tamsin Quillfeather\" | funded from: \"catering budget\" | known needs: 0 | basis: restricted meals held at a separate table and checked off a printed list (hackathon guide, standing practice)\n- provision: \"Need-gated ticket route\" | area: economic | status: \"committed\" | depth: \"owned by the ticket sibling\" | owner: \"event-ticket-pricing\" | funded from: \"ticket pricing\" | known needs: 0 | basis: point at event-ticket-pricing - never a second application process\n- provision: \"Childcare\" | area: economic | status: \"not offered\" | depth: \"Q4: no legal entity to hold the vendor contract and the insurance\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: vendor due diligence: certified, background-checked, insured carers; ratios by age band; check-in and check-out logs (PyCon 2019, AdaCamp)\n- provision: \"Travel grant\" | area: economic | status: \"not offered\" | depth: \"Q4: no entity able to disburse money\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: travel, hotel, registration and childcare in one application; onsite disbursement against receipts excludes anyone who cannot front the cost - publish that limit\n- provision: \"WCAG 2.2 AA web surfaces\" | area: digital | status: \"committed\" | depth: \"target AA, keyboard-checked\" | owner: \"site maintainer\" | funded from: \"organizer hours\" | known needs: 0 | basis: the event's own website, forms, schedule and stream only - never coverage of anything on site\n- provision: \"Captions on recordings\" | area: digital | status: \"committed\" | depth: \"captions on every published recording\" | owner: \"Tamsin Quillfeather\" | funded from: \"organizer hours\" | known needs: 0 | basis: required on published media independently of live captioning\nPage sections - one per area, in this order: [physical; sensory; dietary; economic; digital]\n- area: physical | covered: [\"Companion ticket\"] | not covered: [\"Step-free route\"; \"Accessible bathrooms\"; \"Floor map\"; \"Reserved seating\"; \"Mobility-equipment rental\"]\n- area: sensory | covered: [\"Live captioning\"; \"Sign-language interpretation\"] | not covered: [\"Quiet space\"; \"Nursing room\"; \"All-gender restrooms\"; \"Consent stickers\"; \"Pronoun stickers\"; \"Hearing loop\"]\n- area: dietary | covered: [\"Dietary categories\"; \"Restricted-meal table\"] | not covered: [none]\n- area: economic | covered: [\"Need-gated ticket route\"] | not covered: [\"Childcare\"; \"Travel grant\"]\n- area: digital | covered: [\"WCAG 2.2 AA web surfaces\"; \"Captions on recordings\"] | not covered: [none]\nRequest channel: \"Named inbox with named people\" | owner: \"Tamsin Quillfeather\" | lead time: 8 weeks | requests-by date: 2027-01-07 | reply within: 5 days | delete-by date: 2027-03-19 | form fields: [\"Your name\"; \"How to reach you\"; \"What you need from us\"; \"By when you need it\"; \"Anything that would help us arrange it\"]\nData-handling posture (all five decided before the channel opens; the first three published): retention: \"every request deleted by 2027-03-19 (14 days after the event - self-set)\" | access: \"Tamsin Quillfeather and only the organizers who arrange what was asked for\" | turnaround: \"a reply within 5 days, a decline included\" | where it lives: an inbox the organizers control, emptied at the debrief | who decides a decline: Tamsin Quillfeather, with the reason written down\nDigital layer checklist - the event's own website, forms, schedule and stream only, never anything on site, target WCAG 2.2 AA:\n- item: \"Registration and ticket flow\" | status: \"to check\" | POUR: operable | check: exercise it end to end with the keyboard only, including any date picker, dropdown and the payment step\n- item: \"Accommodation-request field\" | status: \"to check\" | POUR: understandable | check: labelled in text, its help text programmatically associated, its errors described in words - never a placeholder-only label\n- item: \"CFP form\" | status: \"to check\" | POUR: understandable | check: the same rules: a speaker who cannot submit is a speaker you never hear from\n- item: \"Schedule\" | status: \"to check\" | POUR: perceivable | check: contrast 4.5:1 for normal text and 3:1 for large text and interface components, track and status never by colour alone, usable at 200% zoom and on a narrow viewport\n- item: \"Accessibility page\" | status: \"to check\" | POUR: robust | check: it fails more often than expected, and failing there undercuts the claim it makes\n- item: \"Livestream player\" | status: \"not applicable\" | POUR: operable | check: keyboard-operable controls and a caption track that can be turned on\n- item: \"Captions on published recordings\" | status: \"to check\" | POUR: perceivable | check: required independently of live captioning; if the programme was captioned live, publish the transcript\n- item: \"Published program documents\" | status: \"to check\" | POUR: robust | check: tagged structure, reading order and real text - if the PDF cannot work, publish the same content as a web page\nHand-offs, in this order:\n- to: \"event-venue-sourcing\" | what: the accessibility criteria sheet - candidate venues are checked against it\n- to: \"event-production\" | what: captioning delivery and the signal path, with the owner's jargon brief sent ahead, and the hearing loop\n- to: \"event-vendor-sourcing\" | what: the dietary commitment, into the catering brief\n- to: \"event-speaker-experience\" | what: a speaker's declared need\n- to: \"event-attendee-experience\" | what: placement and wayfinding of what was sized\n- to: \"event-date-selection\" | what: the time-of-day question, while the slot is movable\n- to: \"event-ticket-pricing\" | what: the need-gated ticket rung and its application mechanic\n- to: \"event-code-of-conduct\" | what: incident intake and the consequence for recording someone wearing red\n- to: \"event-volunteers\" | what: recruiting and briefing the inclusion team\nStated gaps that apply, in this order: [\"dietary and childcare practice\"; \"interpretation trigger threshold\"; \"jurisdictional duties\"]\n- \"dietary and childcare practice\" | two independent organizations each, and the catalog states the range where they diverge\n- \"interpretation trigger threshold\" | self-set: nothing fixes the attendance or evidence level at which on-request stops being enough\n- \"jurisdictional duties\" | out of scope by construction - Q6 goes to counsel\nRequests: none pasted\nDay-of contact: \"the inclusion team, identifiable by its shirt on every day and floor\" | last-updated date: 2026-11-02\nFindings (11):\n[check] jurisdiction (requests): Q6: nobody has checked what Brightwater, Eastland requires of a public event and its disability data - a question for counsel, never answered here.\n[check] slot_social (slot): Q10: The daytime programme reaches caregivers, but the evening social excludes them - while it is movable, a lunch or daytime social is cheaper than any rung: hand it to event-date-selection.\n[info] pole_community (pole): Q1: a community budget where every provision competes with catering - it moves menus 1, 2 and 4, never menu 3: the funding pole is not an excuse that reaches the request channel.\n[info] venue_criteria (venue): The venue is not signed: the criteria sheet below goes to event-venue-sourcing, and every building provision stays a criterion - never a promise on the page - until a venue is signed against it.\n[info] no_entity (economic): Q4: no legal entity - childcare and the travel grant are deleted outright, not ranked. If the entity, the insurance or the vetting is not in place, the provision is not available: say so rather than running a reduced version.\n[info] captioner_brief (captioning): Brief the captioner before the event: Tamsin Quillfeather sends the programme, speaker names, slide decks when available and a glossary of product names, acronyms, library and tool names, at a lead time agreed with the captioner (self-set).\n[info] caption_scope (captioning): Captioning covers the main room only - state which parts are covered and which are not; an unstated scope is what a deaf attendee discovers in the room.\n[info] need_criterion_1 (needs): Known need 1 (Step-free route) is a must on the venue criteria sheet - a known need, not a template line.\n[info] known_first (needs): Known needs are provisioned first, against the evidence held, before a template - 6 known needs listed first in the set.\n[info] hard_date (dates): Q7: the publish-by date is 43 days away (hard at 56 or fewer - self-set) - the fast-acting rungs are promoted on every menu.\n[info] not_legal_advice (scope): Not legal advice: access duties vary by jurisdiction - the page names the questions that need counsel and answers none of them."
}

Reply:

{
 "task": "plan",
 "summary": "Decide before the venue is signed: hand the criteria sheet to venue sourcing, question the evening social, and keep every building provision a criterion until a venue is signed.",
 "verdict": "decide before the venue is signed",
 "menus": {
  "depth": {
   "pick": "Published page and request channel",
   "reason": "Promoted by Q7: a hard publish-by date (43 days away, hard at 56 or fewer - self-set) promotes the fast-acting rungs."
  },
  "captioning": {
   "pick": "Live captioning, main days/room only",
   "reason": "Made the pick by Q3 and Q8: the need is real and recurring - state which parts are covered."
  },
  "requests": {
   "pick": "Named inbox with named people",
   "reason": "Made the pick by Q6: the jurisdiction's data rules are unanswered - the inbox is promoted over the field."
  },
  "economic": {
   "pick": "Ticket-side need-gated rung",
   "reason": "Promoted by Q7: a hard publish-by date - the fast-acting rung."
  }
 },
 "slot_note": "The daytime programme reaches caregivers, but the evening social excludes them - while it is movable, a lunch or daytime social is cheaper than any rung: hand it to event-date-selection.",
 "provisions": [
  {
   "area": "physical",
   "provision": "Step-free route",
   "depth": "a criterion for the venue",
   "owner": "Tamsin Quillfeather",
   "funded_from": "venue contract",
   "status": "venue criterion"
  },
  {
   "area": "sensory",
   "provision": "Live captioning",
   "depth": "main room, 2 days, 14 hours",
   "owner": "Tamsin Quillfeather",
   "funded_from": "community budget",
   "status": "committed"
  },
  {
   "area": "dietary",
   "provision": "Dietary categories",
   "depth": "3 known needs + a registration question",
   "owner": "Tamsin Quillfeather",
   "funded_from": "catering budget",
   "status": "committed"
  },
  {
   "area": "physical",
   "provision": "Accessible bathrooms",
   "depth": "a criterion for the venue",
   "owner": "Tamsin Quillfeather",
   "funded_from": "venue contract",
   "status": "venue criterion"
  },
  {
   "area": "physical",
   "provision": "Floor map",
   "depth": "drawn once the venue is signed",
   "owner": "Tamsin Quillfeather",
   "funded_from": "organizer hours",
   "status": "venue criterion"
  },
  {
   "area": "physical",
   "provision": "Reserved seating",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "physical",
   "provision": "Companion ticket",
   "depth": "free, by writing to the owner",
   "owner": "Tamsin Quillfeather",
   "funded_from": "organizer hours",
   "status": "on request"
  },
  {
   "area": "physical",
   "provision": "Mobility-equipment rental",
   "depth": "attendees source their own",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "sensory",
   "provision": "Quiet space",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "sensory",
   "provision": "Nursing room",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "sensory",
   "provision": "All-gender restrooms",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "sensory",
   "provision": "Consent stickers",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "sensory",
   "provision": "Pronoun stickers",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "sensory",
   "provision": "Sign-language interpretation",
   "depth": "on request, 8 weeks' notice",
   "owner": "Tamsin Quillfeather",
   "funded_from": "community budget",
   "status": "on request"
  },
  {
   "area": "sensory",
   "provision": "Hearing loop",
   "depth": "a criterion for the venue",
   "owner": "Tamsin Quillfeather",
   "funded_from": "venue contract",
   "status": "venue criterion"
  },
  {
   "area": "dietary",
   "provision": "Restricted-meal table",
   "depth": "separate table, printed name list",
   "owner": "Tamsin Quillfeather",
   "funded_from": "catering budget",
   "status": "committed"
  },
  {
   "area": "economic",
   "provision": "Need-gated ticket route",
   "depth": "owned by the ticket sibling",
   "owner": "event-ticket-pricing",
   "funded_from": "ticket pricing",
   "status": "committed"
  },
  {
   "area": "economic",
   "provision": "Childcare",
   "depth": "Q4: no legal entity to hold the vendor contract and the insurance",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "economic",
   "provision": "Travel grant",
   "depth": "Q4: no entity able to disburse money",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "digital",
   "provision": "WCAG 2.2 AA web surfaces",
   "depth": "target AA, keyboard-checked",
   "owner": "site maintainer",
   "funded_from": "organizer hours",
   "status": "committed"
  },
  {
   "area": "digital",
   "provision": "Captions on recordings",
   "depth": "captions on every published recording",
   "owner": "Tamsin Quillfeather",
   "funded_from": "organizer hours",
   "status": "committed"
  }
 ],
 "people": {
  "pick": "Dedicated inclusion team",
  "reason": "A multi-day or high-attendance conference - attendees cannot see the organizers - staff a team trained in handling inequality, physically identifiable (a distinct t-shirt is the usual mark) on every day and floor the event uses. Neither is the code of conduct response team's intake: a report goes to that team."
 },
 "digital": [
  {
   "item": "Registration and ticket flow",
   "status": "to check"
  },
  {
   "item": "Accommodation-request field",
   "status": "to check"
  },
  {
   "item": "CFP form",
   "status": "to check"
  },
  {
   "item": "Schedule",
   "status": "to check"
  },
  {
   "item": "Accessibility page",
   "status": "to check"
  },
  {
   "item": "Livestream player",
   "status": "not applicable"
  },
  {
   "item": "Captions on published recordings",
   "status": "to check"
  },
  {
   "item": "Published program documents",
   "status": "to check"
  }
 ],
 "handoffs": [
  {
   "to": "event-venue-sourcing",
   "what": "the accessibility criteria sheet - candidate venues are checked against it"
  },
  {
   "to": "event-production",
   "what": "captioning delivery and the signal path, with the owner's jargon brief sent ahead, and the hearing loop"
  },
  {
   "to": "event-vendor-sourcing",
   "what": "the dietary commitment, into the catering brief"
  },
  {
   "to": "event-speaker-experience",
   "what": "a speaker's declared need"
  },
  {
   "to": "event-attendee-experience",
   "what": "placement and wayfinding of what was sized"
  },
  {
   "to": "event-date-selection",
   "what": "the time-of-day question, while the slot is movable"
  },
  {
   "to": "event-ticket-pricing",
   "what": "the need-gated ticket rung and its application mechanic"
  },
  {
   "to": "event-code-of-conduct",
   "what": "incident intake and the consequence for recording someone wearing red"
  },
  {
   "to": "event-volunteers",
   "what": "recruiting and briefing the inclusion team"
  }
 ],
 "data": {
  "retention": "Every request is deleted by 2027-03-19, 14 days after the event (self-set).",
  "access": "Tamsin Quillfeather and only the organizers who arrange what was asked for, shared only to arrange it.",
  "deletion": "Delete every request at the debrief, on the date the form states."
 },
 "gaps": [
  "dietary and childcare practice",
  "interpretation trigger threshold",
  "jurisdictional duties"
 ],
 "caveats": [
  "nobody has checked what Brightwater, Eastland requires of a public event and its disability data - a question for counsel, never answered here.",
  "The daytime programme reaches caregivers, but the evening social excludes them - while it is movable, a lunch or daytime social is cheaper than any rung: hand it to event-date-selection."
 ]
}

The page's check: kept - nothing to flag

A 400-person conference, venue not signed - page

Verdict: decide before the venue is signed; page ready to publish: no; depth: Published page and request channel; request channel: Named inbox with named people; 8 of 21 provisions covered; 0 requests; 0 fix-level findings.

Input:

{
 "task": "page",
 "event": "Event: \"Brightwater DevConf 2027\" | dates: 2027-03-04 to 2027-03-05 (2 days) | city: \"Brightwater\" | attendance: 400 | format: multi-track conference | session rooms: 3 | programme hours a day: 7 | recording: recorded and published | catering: catered meals | as of: 2026-11-02\nQ1 who funds the provision line: a community budget where every provision competes with catering\nQ2 venue signed: no | the building's access facts: [step-free route to every room the event uses, with lifts - a criterion, not yet a fact; wheelchair-accessible bathrooms - a criterion, not yet a fact; a restroom that can be designated all-gender - a criterion, not yet a fact; spare rooms for a quiet space and a separate nursing room - a criterion, not yet a fact; a hearing loop in the session rooms - a criterion, not yet a fact]\nQ3 known needs: 6 (one per line in the needs field)\nQ4 a legal entity able to sign a vendor contract, carry insurance and disburse money: no\nQ5 owner from now until the debrief: \"Tamsin Quillfeather\" | kind: a named person\nQ6 jurisdiction: \"Brightwater, Eastland\" | checked: not checked - a question for counsel | an institutional partner requires a structured form: no\nQ7 publish by: 2026-12-15 | days from the as-of date: 43\nQ8 edition: one year of a recurring event | a volunteer subtitling community exists: no | an in-house signing volunteer: no\nQ9 effort ceiling: organizer hours: 60 | someone to staff a request channel through to the event: yes | budget committable before tickets sell: no\nQ10 time slot: daytime programme with an evening social | still movable: yes\nQ11 size: a multi-day or high-attendance conference - attendees cannot see the organizers\nRequest flow: lead time for booked provisions: 8 weeks | requests-by date: 2027-01-07 | reply within: 5 days | requests deleted: 14 days after the event | delete-by date: 2027-03-19",
 "needs": "Known needs (Q3), provisioned against evidence first - 6:\n- need 1 | provision: \"Step-free route\" | status: \"venue criterion\" | need: \"Step-free access to the stage and the speaker room\" | evidence: \"a speaker who uses a wheelchair, declared for this edition\" | asked: \"a ramp to the main stage\" | a speaker's need: yes\n- need 2 | provision: \"Live captioning\" | status: \"committed\" | need: \"Live captions in the main talks\" | evidence: \"asked at last edition's registration desk\" | asked: \"live captioning\" | a speaker's need: no\n- need 3 | provision: \"Live captioning\" | status: \"committed\" | need: \"Live captions\" | evidence: \"written request after last edition\" | asked: \"captioning in the main room\" | a speaker's need: no\n- need 4 | provision: \"Dietary categories\" | status: \"committed\" | need: \"Vegan meals\" | evidence: \"last edition's registration form\" | asked: \"a vegan lunch both days\" | a speaker's need: no\n- need 5 | provision: \"Dietary categories\" | status: \"committed\" | need: \"Gluten-free meals\" | evidence: \"last edition's registration form\" | asked: \"a gluten-free lunch\" | a speaker's need: no\n- need 6 | provision: \"Dietary categories\" | status: \"committed\" | need: \"Nut-free meals\" | evidence: \"last edition's registration form\" | asked: \"no tree nuts or peanuts\" | a speaker's need: no",
 "requests": "",
 "facts": "Verdict: \"decide before the venue is signed\" | page ready to publish: no | fix-level findings: 0\nSelf-set lines: a hard publish-by date at 56 days or fewer | requests in volume at 10 known needs or more | a large event at 150 attendees or more | a low effort ceiling under 10 organizer hours | reserved seats at known needs plus 2 per room | the lead time, turnaround and retention entered on the form | a reply cap of 150 words. The references' own: the quiet room observation of about 5% of attendees at once (AdaCamp, an observation, not a standard) | contrast 4.5:1 for normal text and 3:1 for large text (WCAG 2.2 AA) | the subsidized fee about 4 times below real cost (PyCon US 2019, historical).\nWho funds it (Q1): \"a community budget where every provision competes with catering\" | notes: An attendee's access need is identical whether an employer or the attendee bought the ticket; no provision changes shape because of who paid - the axis that discriminates is who funds the provision line. Every provision competes with the money that would otherwise buy lunch: this moves menu 1 (depth), menu 2 (captioning) and menu 4 (economic access). Live captioning is also a sponsorable line ('captioning presented by ...'): budget the provision first, so it exists whether or not the line sells - a sale offsets the cost, it does not create the provision. It does not move menu 3: a two-person volunteer team and a foundation face the identical problem once an attendee discloses - the same duty of care, the same retention question, the same person who now has to answer.\nVenue (Q2): signed: no | notes: Q2: the venue is not signed. Write the accessibility criteria first and hand the sheet to event-venue-sourcing as a sourcing input - a signed venue deletes half of menu 1 permanently.\nMenu 1 - provision depth - pick: \"Published page and request channel\"\n- rung 1: \"Published page and request channel\" | moved: promoted by Q7: a hard publish-by date (43 days away, hard at 56 or fewer - self-set) promotes the fast-acting rungs; promoted by Q8: a recurring event - the page is a reusable organizational asset, built once and edited each year\n- rung 2: \"Venue-floor facts\" | moved: promoted by Q7: a hard publish-by date\n- rung 3: \"On-site provision set\"\n- deleted, not demoted: \"An accessibility page describing provisions not yet secured\" | reason: the skill: it would win the efficiency line outright - and converts into a broken promise for whoever travelled on it\n- deleted, not demoted: \"Funded-access set\" | reason: Q4: no legal entity to sign a contract, carry insurance or disburse money - deleted outright, not ranked\n- notes: Value and effort share one order on this menu, so no rung dominates another and the compliance axis rescues nothing.\nMenu 2 - captioning and interpretation - pick: \"Live captioning, main days/room only\"\n- rung 1: \"Live captioning, main days/room only\" | moved: demoted by Q1: a community budget; promoted by Q3: a captioning need is already known (2 requests); made the pick by Q3 and Q8: the need is real and recurring - state which parts are covered\n- rung 2: \"On-request live provision\" | moved: promoted by Q7: a hard publish-by date promotes the fast-acting rung\n- rung 3: \"Post-event corrected captions\"\n- rung 4: \"Live captioning in every room\" | moved: demoted by Q1: a community budget; promoted by Q3: on-request has fired more than once (2 captioning requests)\n- rung 5: \"Standing subtitle pipeline\"\n- deleted, not demoted: \"Treating production capability as a captioning provision\" | reason: the skill: a capable broadcast operation is not a captioning provision until someone states, budgets and publishes what it covers\n- deleted, not demoted: \"Announcing an unvetted automatic feed as captioning coverage\" | reason: the skill: it would win efficiency on every live rung, and the attendee who relied on it discovers the gap mid-talk\n- notes: Every live rung assumes a human captioner (real-time stenotype captioning, also called CART). An automatic feed is a fallback inside a rung, never a rung: label it automatic on screen and on the page, and say which rooms have a human. Brief the captioner on the jargon before the event: the accessibility owner sends the programme, speaker names, slide decks when available and a glossary of product names, acronyms, library and tool names. Interpretation is not bundled with captioning at the same trigger: its trigger threshold is self-set - state the level chosen and why.\nMenu 3 - the request channel - pick: \"Named inbox with named people\"\n- rung 1: \"Named inbox with named people\" | moved: promoted by Q7: a hard publish-by date; made the pick by Q6: the jurisdiction's data rules are unanswered - the inbox is promoted over the field\n- rung 2: \"Registration-flow field\" | moved: promoted by Q7: a hard publish-by date - ten minutes to add\n- rung 3: \"Structured form with a stated posture\" | moved: demoted by Q7: a hard publish-by date - the heaviest upfront review\n- deleted, not demoted: \"Routing requests to the general registration desk with no accessibility owner\" | reason: the skill, at any staffing level: not the cheap rung but the unowned one - the request is received, nobody is accountable, and the attendee learns this on the day\n- notes: First shrink what needs a request at all: a quiet space, all-gender restrooms, reserved seating and consent stickers work walk-up, and the people who most need them are the least likely to disclose. Only booked provisions need a channel - interpretation, childcare, a nursing room, an equipment rental, a grant. The funding pole does not move this menu: once an attendee discloses, a volunteer team and a foundation hold the same duty of care.\nBefore menu 4 - the slot (Q10): \"daytime programme with an evening social\" | movable: yes | excludes caregivers: yes | hand to event-date-selection: yes | note: The daytime programme reaches caregivers, but the evening social excludes them - while it is movable, a lunch or daytime social is cheaper than any rung: hand it to event-date-selection.\nMenu 4 - economic access - pick: \"Ticket-side need-gated rung\"\n- rung 1: \"Ticket-side need-gated rung\" | moved: promoted by Q7: a hard publish-by date - the fast-acting rung\n- deleted, not demoted: \"An unpublished hardship promise with no budget\" | reason: the skill: an unpublished 'email us and we'll see' hardship promise with no budget behind it\n- deleted, not demoted: \"Travel and registration grant\" | reason: Q4: no entity able to disburse money - deleted outright, not ranked\n- deleted, not demoted: \"Complimentary childcare\" | reason: Q4: no legal entity to hold the vendor contract and the insurance - childcare cannot run at all\n- deleted, not demoted: \"Subsidized childcare\" | reason: Q4: no legal entity to hold the vendor contract and the insurance - childcare cannot run at all\n- notes: Ticket price itself is not this skill's: the need-gated scholarship rung belongs to event-ticket-pricing - never a second application process for a route that already exists there. A subsidized fee looks cheaper and is not: the published fee sits against a real per-child-day cost roughly 4 times higher (PyCon US 2019, historical) - small budget relief, real administrative load.\nPeople attendees turn to (Q11) - pick: \"Dedicated inclusion team\" | reason: Q11: a multi-day or high-attendance conference - attendees cannot see the organizers - staff a team trained in handling inequality, physically identifiable (a distinct t-shirt is the usual mark) on every day and floor the event uses. | conditions: Announce it before the event or at the start: the event page, the accessibility page, the pre-event attendee email and the opening remarks. Brief before identifying: every provision and where it is, listening without demanding justification, what a member may resolve alone, and the handoff path - provision owner, organizer on duty, code-of-conduct response team (recruit and brief through event-volunteers). Give it a handoff, not a desk of its own: the team routes; it does not hold requests nobody else sees. | Not the code-of-conduct response team: a member who hears a code-of-conduct violation hands it to that team under event-code-of-conduct's runbook - never investigates, decides or records it. A shared shirt requires every wearer to have that skill's staff briefing.\nProvision set - 21 provisions, known needs first, in this order:\n- provision: \"Step-free route\" | area: physical | status: \"venue criterion\" | depth: \"a criterion for the venue\" | owner: \"Tamsin Quillfeather\" | funded from: \"venue contract\" | known needs: 1 | basis: a property of the building - venue-floor facts, every rung\n- provision: \"Live captioning\" | area: sensory | status: \"committed\" | depth: \"main room, 2 days, 14 hours\" | owner: \"Tamsin Quillfeather\" | funded from: \"community budget\" | known needs: 2 | basis: menu 2: Live captioning, main days/room only - a human captioner; an automatic feed is labelled automatic and never counted as coverage\n- provision: \"Dietary categories\" | area: dietary | status: \"committed\" | depth: \"3 known needs + a registration question\" | owner: \"Tamsin Quillfeather\" | funded from: \"catering budget\" | known needs: 3 | basis: ask everyone who will be fed; vegetarian, vegan, celiac and gluten-free, common allergies, kosher, halal (hackathon guide); the eight common allergens plus sesame (IACC); fallbacks: a one-off supplier request, or a delivery credit with advance notice\n- provision: \"Accessible bathrooms\" | area: physical | status: \"venue criterion\" | depth: \"a criterion for the venue\" | owner: \"Tamsin Quillfeather\" | funded from: \"venue contract\" | known needs: 0 | basis: a property of the building - a specific checkable claim, never a general one\n- provision: \"Floor map\" | area: physical | status: \"venue criterion\" | depth: \"drawn once the venue is signed\" | owner: \"Tamsin Quillfeather\" | funded from: \"organizer hours\" | known needs: 0 | basis: published maps marking event areas, lifts, stairs, bathrooms and nursing stations (PyCon 2019, historical)\n- provision: \"Reserved seating\" | area: physical | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: available in each session for attendees with access needs (LF template), walk-up\n- provision: \"Companion ticket\" | area: physical | status: \"on request\" | depth: \"free, by writing to the owner\" | owner: \"Tamsin Quillfeather\" | funded from: \"organizer hours\" | known needs: 0 | basis: registers separately and free, same badge and catering (PyCon 2019, historical)\n- provision: \"Mobility-equipment rental\" | area: physical | status: \"not offered\" | depth: \"attendees source their own\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: a named third-party vendor for wheelchairs and scooters (LF template) - the pattern is naming a vendor at all\n- provision: \"Quiet space\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: rationale: sensory input - noise and light; away from the hub, dim, wheelchair-accessible, separate from any nursing room (AdaCamp)\n- provision: \"Nursing room\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: stated to exist unconditionally, only its location withheld until check-in (LF template) - reaches people who would never ask\n- provision: \"All-gender restrooms\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: designated specifically and named as such (LF template)\n- provision: \"Consent stickers\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: green open to talk, yellow only if you know me, red not interested in talking or being photographed - an access provision and a photo opt-out; enforcement lives with event-code-of-conduct\n- provision: \"Pronoun stickers\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: opt-in stickers at registration (LF template); what the choice says belongs to event-cultural-identity\n- provision: \"Sign-language interpretation\" | area: sensory | status: \"on request\" | depth: \"on request, 8 weeks' notice\" | owner: \"Tamsin Quillfeather\" | funded from: \"community budget\" | known needs: 0 | basis: interpreters only when notified by signing attendees (PyCon 2019, historical) - not bundled with captioning at the same trigger\n- provision: \"Hearing loop\" | area: sensory | status: \"venue criterion\" | depth: \"a criterion for the venue\" | owner: \"Tamsin Quillfeather\" | funded from: \"venue contract\" | known needs: 0 | basis: delivered technically by event-production\n- provision: \"Restricted-meal table\" | area: dietary | status: \"committed\" | depth: \"separate table, printed name list\" | owner: \"Tamsin Quillfeather\" | funded from: \"catering budget\" | known needs: 0 | basis: restricted meals held at a separate table and checked off a printed list (hackathon guide, standing practice)\n- provision: \"Need-gated ticket route\" | area: economic | status: \"committed\" | depth: \"owned by the ticket sibling\" | owner: \"event-ticket-pricing\" | funded from: \"ticket pricing\" | known needs: 0 | basis: point at event-ticket-pricing - never a second application process\n- provision: \"Childcare\" | area: economic | status: \"not offered\" | depth: \"Q4: no legal entity to hold the vendor contract and the insurance\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: vendor due diligence: certified, background-checked, insured carers; ratios by age band; check-in and check-out logs (PyCon 2019, AdaCamp)\n- provision: \"Travel grant\" | area: economic | status: \"not offered\" | depth: \"Q4: no entity able to disburse money\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: travel, hotel, registration and childcare in one application; onsite disbursement against receipts excludes anyone who cannot front the cost - publish that limit\n- provision: \"WCAG 2.2 AA web surfaces\" | area: digital | status: \"committed\" | depth: \"target AA, keyboard-checked\" | owner: \"site maintainer\" | funded from: \"organizer hours\" | known needs: 0 | basis: the event's own website, forms, schedule and stream only - never coverage of anything on site\n- provision: \"Captions on recordings\" | area: digital | status: \"committed\" | depth: \"captions on every published recording\" | owner: \"Tamsin Quillfeather\" | funded from: \"organizer hours\" | known needs: 0 | basis: required on published media independently of live captioning\nPage sections - one per area, in this order: [physical; sensory; dietary; economic; digital]\n- area: physical | covered: [\"Companion ticket\"] | not covered: [\"Step-free route\"; \"Accessible bathrooms\"; \"Floor map\"; \"Reserved seating\"; \"Mobility-equipment rental\"]\n- area: sensory | covered: [\"Live captioning\"; \"Sign-language interpretation\"] | not covered: [\"Quiet space\"; \"Nursing room\"; \"All-gender restrooms\"; \"Consent stickers\"; \"Pronoun stickers\"; \"Hearing loop\"]\n- area: dietary | covered: [\"Dietary categories\"; \"Restricted-meal table\"] | not covered: [none]\n- area: economic | covered: [\"Need-gated ticket route\"] | not covered: [\"Childcare\"; \"Travel grant\"]\n- area: digital | covered: [\"WCAG 2.2 AA web surfaces\"; \"Captions on recordings\"] | not covered: [none]\nRequest channel: \"Named inbox with named people\" | owner: \"Tamsin Quillfeather\" | lead time: 8 weeks | requests-by date: 2027-01-07 | reply within: 5 days | delete-by date: 2027-03-19 | form fields: [\"Your name\"; \"How to reach you\"; \"What you need from us\"; \"By when you need it\"; \"Anything that would help us arrange it\"]\nData-handling posture (all five decided before the channel opens; the first three published): retention: \"every request deleted by 2027-03-19 (14 days after the event - self-set)\" | access: \"Tamsin Quillfeather and only the organizers who arrange what was asked for\" | turnaround: \"a reply within 5 days, a decline included\" | where it lives: an inbox the organizers control, emptied at the debrief | who decides a decline: Tamsin Quillfeather, with the reason written down\nDigital layer checklist - the event's own website, forms, schedule and stream only, never anything on site, target WCAG 2.2 AA:\n- item: \"Registration and ticket flow\" | status: \"to check\" | POUR: operable | check: exercise it end to end with the keyboard only, including any date picker, dropdown and the payment step\n- item: \"Accommodation-request field\" | status: \"to check\" | POUR: understandable | check: labelled in text, its help text programmatically associated, its errors described in words - never a placeholder-only label\n- item: \"CFP form\" | status: \"to check\" | POUR: understandable | check: the same rules: a speaker who cannot submit is a speaker you never hear from\n- item: \"Schedule\" | status: \"to check\" | POUR: perceivable | check: contrast 4.5:1 for normal text and 3:1 for large text and interface components, track and status never by colour alone, usable at 200% zoom and on a narrow viewport\n- item: \"Accessibility page\" | status: \"to check\" | POUR: robust | check: it fails more often than expected, and failing there undercuts the claim it makes\n- item: \"Livestream player\" | status: \"not applicable\" | POUR: operable | check: keyboard-operable controls and a caption track that can be turned on\n- item: \"Captions on published recordings\" | status: \"to check\" | POUR: perceivable | check: required independently of live captioning; if the programme was captioned live, publish the transcript\n- item: \"Published program documents\" | status: \"to check\" | POUR: robust | check: tagged structure, reading order and real text - if the PDF cannot work, publish the same content as a web page\nHand-offs, in this order:\n- to: \"event-venue-sourcing\" | what: the accessibility criteria sheet - candidate venues are checked against it\n- to: \"event-production\" | what: captioning delivery and the signal path, with the owner's jargon brief sent ahead, and the hearing loop\n- to: \"event-vendor-sourcing\" | what: the dietary commitment, into the catering brief\n- to: \"event-speaker-experience\" | what: a speaker's declared need\n- to: \"event-attendee-experience\" | what: placement and wayfinding of what was sized\n- to: \"event-date-selection\" | what: the time-of-day question, while the slot is movable\n- to: \"event-ticket-pricing\" | what: the need-gated ticket rung and its application mechanic\n- to: \"event-code-of-conduct\" | what: incident intake and the consequence for recording someone wearing red\n- to: \"event-volunteers\" | what: recruiting and briefing the inclusion team\nStated gaps that apply, in this order: [\"dietary and childcare practice\"; \"interpretation trigger threshold\"; \"jurisdictional duties\"]\n- \"dietary and childcare practice\" | two independent organizations each, and the catalog states the range where they diverge\n- \"interpretation trigger threshold\" | self-set: nothing fixes the attendance or evidence level at which on-request stops being enough\n- \"jurisdictional duties\" | out of scope by construction - Q6 goes to counsel\nRequests: none pasted\nDay-of contact: \"the inclusion team, identifiable by its shirt on every day and floor\" | last-updated date: 2026-11-02\nCarried from the plan: summary: \"Decide before the venue is signed: hand the criteria sheet to venue sourcing, question the evening social, and keep every building provision a criterion until a venue is signed.\" | picks: [depth \"Published page and request channel\"; captioning \"Live captioning, main days/room only\"; requests \"Named inbox with named people\"; economic \"Ticket-side need-gated rung\"] | picks match the page: yes | statuses matching the page: 21 of 21\nFindings (11):\n[check] jurisdiction (requests): Q6: nobody has checked what Brightwater, Eastland requires of a public event and its disability data - a question for counsel, never answered here.\n[check] slot_social (slot): Q10: The daytime programme reaches caregivers, but the evening social excludes them - while it is movable, a lunch or daytime social is cheaper than any rung: hand it to event-date-selection.\n[info] pole_community (pole): Q1: a community budget where every provision competes with catering - it moves menus 1, 2 and 4, never menu 3: the funding pole is not an excuse that reaches the request channel.\n[info] venue_criteria (venue): The venue is not signed: the criteria sheet below goes to event-venue-sourcing, and every building provision stays a criterion - never a promise on the page - until a venue is signed against it.\n[info] no_entity (economic): Q4: no legal entity - childcare and the travel grant are deleted outright, not ranked. If the entity, the insurance or the vetting is not in place, the provision is not available: say so rather than running a reduced version.\n[info] captioner_brief (captioning): Brief the captioner before the event: Tamsin Quillfeather sends the programme, speaker names, slide decks when available and a glossary of product names, acronyms, library and tool names, at a lead time agreed with the captioner (self-set).\n[info] caption_scope (captioning): Captioning covers the main room only - state which parts are covered and which are not; an unstated scope is what a deaf attendee discovers in the room.\n[info] need_criterion_1 (needs): Known need 1 (Step-free route) is a must on the venue criteria sheet - a known need, not a template line.\n[info] known_first (needs): Known needs are provisioned first, against the evidence held, before a template - 6 known needs listed first in the set.\n[info] hard_date (dates): Q7: the publish-by date is 43 days away (hard at 56 or fewer - self-set) - the fast-acting rungs are promoted on every menu.\n[info] not_legal_advice (scope): Not legal advice: access duties vary by jurisdiction - the page names the questions that need counsel and answers none of them."
}

Reply:

{
 "task": "page",
 "title": "Accessibility at Brightwater DevConf 2027",
 "intro": "This page is for everyone coming to Brightwater DevConf 2027 - disabled attendees, speakers and volunteers, caregivers, and anyone who needs something from us to take part. It says what we provide, what we do not, and how to ask, and it sits alongside our code of conduct.",
 "sections": [
  {
   "area": "physical",
   "covered": [
    "Companion ticket"
   ],
   "not_covered": [
    "Step-free route",
    "Accessible bathrooms",
    "Floor map",
    "Reserved seating",
    "Mobility-equipment rental"
   ],
   "text": "Step-free route: not yet secured - it is on our criteria sheet for a venue that is not signed yet. Accessible bathrooms: not yet secured - it is on our criteria sheet for a venue that is not signed yet. Floor map: not yet secured - it is on our criteria sheet for a venue that is not signed yet. Reserved seating: not provided at this edition. Companion ticket is available on request (free, by writing to the owner) - ask by 2027-01-07. Mobility-equipment rental: not provided at this edition."
  },
  {
   "area": "sensory",
   "covered": [
    "Live captioning",
    "Sign-language interpretation"
   ],
   "not_covered": [
    "Quiet space",
    "Nursing room",
    "All-gender restrooms",
    "Consent stickers",
    "Pronoun stickers",
    "Hearing loop"
   ],
   "text": "Live captioning by a human captioner is provided in the main room only (main room, 2 days, 14 hours); other rooms are not captioned live. Quiet space: not provided at this edition. Nursing room: not provided at this edition. All-gender restrooms: not provided at this edition. Consent stickers: not provided at this edition. Pronoun stickers: not provided at this edition. Sign-language interpretation is available on request (8 weeks' notice) - ask by 2027-01-07. Hearing loop: not yet secured - it is on our criteria sheet for a venue that is not signed yet."
  },
  {
   "area": "dietary",
   "covered": [
    "Dietary categories",
    "Restricted-meal table"
   ],
   "not_covered": [],
   "text": "Dietary categories: provided (3 known needs + a registration question). Restricted-meal table: provided (separate table, printed name list)."
  },
  {
   "area": "economic",
   "covered": [
    "Need-gated ticket route"
   ],
   "not_covered": [
    "Childcare",
    "Travel grant"
   ],
   "text": "A need-gated ticket route is open through our ticket team. Childcare is not offered at this edition. Travel grant: not provided at this edition."
  },
  {
   "area": "digital",
   "covered": [
    "WCAG 2.2 AA web surfaces",
    "Captions on recordings"
   ],
   "not_covered": [],
   "text": "WCAG 2.2 AA web surfaces: provided (target AA, keyboard-checked). Captions on recordings: provided (captions on every published recording)."
  }
 ],
 "request_channel": {
  "channel": "Named inbox with named people",
  "owner": "Tamsin Quillfeather",
  "lead_time": "Ask by 2027-01-07 for anything that must be booked (8 weeks' notice).",
  "turnaround": "A reply within 5 days, a decline included.",
  "retention": "Deleted by 2027-03-19."
 },
 "day_of_contact": "The inclusion team, identifiable by its shirt on both days and on every floor.",
 "last_updated": "2026-11-02",
 "form": {
  "fields": [
   "Your name",
   "How to reach you",
   "What you need from us",
   "By when you need it",
   "Anything that would help us arrange it"
  ],
  "statement": "Tamsin Quillfeather reads these and replies within 5 days. What you tell us is shared only with the organizers who arrange what you asked for, and deleted by 2027-03-19."
 },
 "answers": [],
 "disclaimer": "This page is not legal advice; access duties vary by jurisdiction.",
 "note": "Not ready to publish: sign a venue against the criteria sheet first - every building provision on this page is still a criterion, not a promise."
}

The page's check: kept - nothing to flag

The same conference, three requests in - plan

Verdict: answer the requests; page ready to publish: no; depth: Published page and request channel; request channel: Named inbox with named people; 8 of 21 provisions covered; 3 requests; 0 fix-level findings.

Input:

{
 "task": "plan",
 "event": "Event: \"Brightwater DevConf 2027\" | dates: 2027-03-04 to 2027-03-05 (2 days) | city: \"Brightwater\" | attendance: 400 | format: multi-track conference | session rooms: 3 | programme hours a day: 7 | recording: recorded and published | catering: catered meals | as of: 2027-01-15\nQ1 who funds the provision line: a community budget where every provision competes with catering\nQ2 venue signed: no | the building's access facts: [step-free route to every room the event uses, with lifts - a criterion, not yet a fact; wheelchair-accessible bathrooms - a criterion, not yet a fact; a restroom that can be designated all-gender - a criterion, not yet a fact; spare rooms for a quiet space and a separate nursing room - a criterion, not yet a fact; a hearing loop in the session rooms - a criterion, not yet a fact]\nQ3 known needs: 6 (one per line in the needs field)\nQ4 a legal entity able to sign a vendor contract, carry insurance and disburse money: no\nQ5 owner from now until the debrief: \"Tamsin Quillfeather\" | kind: a named person\nQ6 jurisdiction: \"Brightwater, Eastland\" | checked: not checked - a question for counsel | an institutional partner requires a structured form: no\nQ7 publish by: 2026-12-15 | days from the as-of date: -31\nQ8 edition: one year of a recurring event | a volunteer subtitling community exists: no | an in-house signing volunteer: no\nQ9 effort ceiling: organizer hours: 60 | someone to staff a request channel through to the event: yes | budget committable before tickets sell: no\nQ10 time slot: daytime programme with an evening social | still movable: yes\nQ11 size: a multi-day or high-attendance conference - attendees cannot see the organizers\nRequest flow: lead time for booked provisions: 8 weeks | requests-by date: 2027-01-07 | reply within: 5 days | requests deleted: 14 days after the event | delete-by date: 2027-03-19",
 "needs": "Known needs (Q3), provisioned against evidence first - 6:\n- need 1 | provision: \"Step-free route\" | status: \"venue criterion\" | need: \"Step-free access to the stage and the speaker room\" | evidence: \"a speaker who uses a wheelchair, declared for this edition\" | asked: \"a ramp to the main stage\" | a speaker's need: yes\n- need 2 | provision: \"Live captioning\" | status: \"committed\" | need: \"Live captions in the main talks\" | evidence: \"asked at last edition's registration desk\" | asked: \"live captioning\" | a speaker's need: no\n- need 3 | provision: \"Live captioning\" | status: \"committed\" | need: \"Live captions\" | evidence: \"written request after last edition\" | asked: \"captioning in the main room\" | a speaker's need: no\n- need 4 | provision: \"Dietary categories\" | status: \"committed\" | need: \"Vegan meals\" | evidence: \"last edition's registration form\" | asked: \"a vegan lunch both days\" | a speaker's need: no\n- need 5 | provision: \"Dietary categories\" | status: \"committed\" | need: \"Gluten-free meals\" | evidence: \"last edition's registration form\" | asked: \"a gluten-free lunch\" | a speaker's need: no\n- need 6 | provision: \"Dietary categories\" | status: \"committed\" | need: \"Nut-free meals\" | evidence: \"last edition's registration form\" | asked: \"no tree nuts or peanuts\" | a speaker's need: no",
 "requests": "received: 2027-01-05\nCould you hold a vegan, nut-free lunch for me on both days? Thanks - Sam\n\nreceived: 2027-01-14\nI'm Deaf and sign BSL. Could you book a BSL interpreter for the two keynotes? I only just got my ticket.\n\nreceived: 2026-12-20\nI'm a single parent and my son is autistic, so I can't leave him with a stranger for long. Is there childcare during the talks?",
 "facts": "Verdict: \"answer the requests\" | page ready to publish: no | fix-level findings: 0\nSelf-set lines: a hard publish-by date at 56 days or fewer | requests in volume at 10 known needs or more | a large event at 150 attendees or more | a low effort ceiling under 10 organizer hours | reserved seats at known needs plus 2 per room | the lead time, turnaround and retention entered on the form | a reply cap of 150 words. The references' own: the quiet room observation of about 5% of attendees at once (AdaCamp, an observation, not a standard) | contrast 4.5:1 for normal text and 3:1 for large text (WCAG 2.2 AA) | the subsidized fee about 4 times below real cost (PyCon US 2019, historical).\nWho funds it (Q1): \"a community budget where every provision competes with catering\" | notes: An attendee's access need is identical whether an employer or the attendee bought the ticket; no provision changes shape because of who paid - the axis that discriminates is who funds the provision line. Every provision competes with the money that would otherwise buy lunch: this moves menu 1 (depth), menu 2 (captioning) and menu 4 (economic access). Live captioning is also a sponsorable line ('captioning presented by ...'): budget the provision first, so it exists whether or not the line sells - a sale offsets the cost, it does not create the provision. It does not move menu 3: a two-person volunteer team and a foundation face the identical problem once an attendee discloses - the same duty of care, the same retention question, the same person who now has to answer.\nVenue (Q2): signed: no | notes: Q2: the venue is not signed. Write the accessibility criteria first and hand the sheet to event-venue-sourcing as a sourcing input - a signed venue deletes half of menu 1 permanently.\nMenu 1 - provision depth - pick: \"Published page and request channel\"\n- rung 1: \"Published page and request channel\" | moved: promoted by Q7: a hard publish-by date (-31 days away, hard at 56 or fewer - self-set) promotes the fast-acting rungs; promoted by Q8: a recurring event - the page is a reusable organizational asset, built once and edited each year\n- rung 2: \"Venue-floor facts\" | moved: promoted by Q7: a hard publish-by date\n- rung 3: \"On-site provision set\"\n- deleted, not demoted: \"An accessibility page describing provisions not yet secured\" | reason: the skill: it would win the efficiency line outright - and converts into a broken promise for whoever travelled on it\n- deleted, not demoted: \"Funded-access set\" | reason: Q4: no legal entity to sign a contract, carry insurance or disburse money - deleted outright, not ranked\n- notes: Value and effort share one order on this menu, so no rung dominates another and the compliance axis rescues nothing.\nMenu 2 - captioning and interpretation - pick: \"Live captioning, main days/room only\"\n- rung 1: \"Live captioning, main days/room only\" | moved: demoted by Q1: a community budget; promoted by Q3: a captioning need is already known (2 requests); made the pick by Q3 and Q8: the need is real and recurring - state which parts are covered\n- rung 2: \"On-request live provision\" | moved: promoted by Q7: a hard publish-by date promotes the fast-acting rung\n- rung 3: \"Post-event corrected captions\"\n- rung 4: \"Live captioning in every room\" | moved: demoted by Q1: a community budget; promoted by Q3: on-request has fired more than once (2 captioning requests)\n- rung 5: \"Standing subtitle pipeline\"\n- deleted, not demoted: \"Treating production capability as a captioning provision\" | reason: the skill: a capable broadcast operation is not a captioning provision until someone states, budgets and publishes what it covers\n- deleted, not demoted: \"Announcing an unvetted automatic feed as captioning coverage\" | reason: the skill: it would win efficiency on every live rung, and the attendee who relied on it discovers the gap mid-talk\n- notes: Every live rung assumes a human captioner (real-time stenotype captioning, also called CART). An automatic feed is a fallback inside a rung, never a rung: label it automatic on screen and on the page, and say which rooms have a human. Brief the captioner on the jargon before the event: the accessibility owner sends the programme, speaker names, slide decks when available and a glossary of product names, acronyms, library and tool names. Interpretation is not bundled with captioning at the same trigger: its trigger threshold is self-set - state the level chosen and why.\nMenu 3 - the request channel - pick: \"Named inbox with named people\"\n- rung 1: \"Named inbox with named people\" | moved: promoted by Q7: a hard publish-by date; made the pick by Q6: the jurisdiction's data rules are unanswered - the inbox is promoted over the field\n- rung 2: \"Registration-flow field\" | moved: promoted by Q7: a hard publish-by date - ten minutes to add\n- rung 3: \"Structured form with a stated posture\" | moved: demoted by Q7: a hard publish-by date - the heaviest upfront review\n- deleted, not demoted: \"Routing requests to the general registration desk with no accessibility owner\" | reason: the skill, at any staffing level: not the cheap rung but the unowned one - the request is received, nobody is accountable, and the attendee learns this on the day\n- notes: First shrink what needs a request at all: a quiet space, all-gender restrooms, reserved seating and consent stickers work walk-up, and the people who most need them are the least likely to disclose. Only booked provisions need a channel - interpretation, childcare, a nursing room, an equipment rental, a grant. The funding pole does not move this menu: once an attendee discloses, a volunteer team and a foundation hold the same duty of care.\nBefore menu 4 - the slot (Q10): \"daytime programme with an evening social\" | movable: yes | excludes caregivers: yes | hand to event-date-selection: yes | note: The daytime programme reaches caregivers, but the evening social excludes them - while it is movable, a lunch or daytime social is cheaper than any rung: hand it to event-date-selection.\nMenu 4 - economic access - pick: \"Ticket-side need-gated rung\"\n- rung 1: \"Ticket-side need-gated rung\" | moved: promoted by Q7: a hard publish-by date - the fast-acting rung\n- deleted, not demoted: \"An unpublished hardship promise with no budget\" | reason: the skill: an unpublished 'email us and we'll see' hardship promise with no budget behind it\n- deleted, not demoted: \"Travel and registration grant\" | reason: Q4: no entity able to disburse money - deleted outright, not ranked\n- deleted, not demoted: \"Complimentary childcare\" | reason: Q4: no legal entity to hold the vendor contract and the insurance - childcare cannot run at all\n- deleted, not demoted: \"Subsidized childcare\" | reason: Q4: no legal entity to hold the vendor contract and the insurance - childcare cannot run at all\n- notes: Ticket price itself is not this skill's: the need-gated scholarship rung belongs to event-ticket-pricing - never a second application process for a route that already exists there. A subsidized fee looks cheaper and is not: the published fee sits against a real per-child-day cost roughly 4 times higher (PyCon US 2019, historical) - small budget relief, real administrative load.\nPeople attendees turn to (Q11) - pick: \"Dedicated inclusion team\" | reason: Q11: a multi-day or high-attendance conference - attendees cannot see the organizers - staff a team trained in handling inequality, physically identifiable (a distinct t-shirt is the usual mark) on every day and floor the event uses. | conditions: Announce it before the event or at the start: the event page, the accessibility page, the pre-event attendee email and the opening remarks. Brief before identifying: every provision and where it is, listening without demanding justification, what a member may resolve alone, and the handoff path - provision owner, organizer on duty, code-of-conduct response team (recruit and brief through event-volunteers). Give it a handoff, not a desk of its own: the team routes; it does not hold requests nobody else sees. | Not the code-of-conduct response team: a member who hears a code-of-conduct violation hands it to that team under event-code-of-conduct's runbook - never investigates, decides or records it. A shared shirt requires every wearer to have that skill's staff briefing.\nProvision set - 21 provisions, known needs first, in this order:\n- provision: \"Step-free route\" | area: physical | status: \"venue criterion\" | depth: \"a criterion for the venue\" | owner: \"Tamsin Quillfeather\" | funded from: \"venue contract\" | known needs: 1 | basis: a property of the building - venue-floor facts, every rung\n- provision: \"Live captioning\" | area: sensory | status: \"committed\" | depth: \"main room, 2 days, 14 hours\" | owner: \"Tamsin Quillfeather\" | funded from: \"community budget\" | known needs: 2 | basis: menu 2: Live captioning, main days/room only - a human captioner; an automatic feed is labelled automatic and never counted as coverage\n- provision: \"Dietary categories\" | area: dietary | status: \"committed\" | depth: \"3 known needs + a registration question\" | owner: \"Tamsin Quillfeather\" | funded from: \"catering budget\" | known needs: 3 | basis: ask everyone who will be fed; vegetarian, vegan, celiac and gluten-free, common allergies, kosher, halal (hackathon guide); the eight common allergens plus sesame (IACC); fallbacks: a one-off supplier request, or a delivery credit with advance notice\n- provision: \"Accessible bathrooms\" | area: physical | status: \"venue criterion\" | depth: \"a criterion for the venue\" | owner: \"Tamsin Quillfeather\" | funded from: \"venue contract\" | known needs: 0 | basis: a property of the building - a specific checkable claim, never a general one\n- provision: \"Floor map\" | area: physical | status: \"venue criterion\" | depth: \"drawn once the venue is signed\" | owner: \"Tamsin Quillfeather\" | funded from: \"organizer hours\" | known needs: 0 | basis: published maps marking event areas, lifts, stairs, bathrooms and nursing stations (PyCon 2019, historical)\n- provision: \"Reserved seating\" | area: physical | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: available in each session for attendees with access needs (LF template), walk-up\n- provision: \"Companion ticket\" | area: physical | status: \"on request\" | depth: \"free, by writing to the owner\" | owner: \"Tamsin Quillfeather\" | funded from: \"organizer hours\" | known needs: 0 | basis: registers separately and free, same badge and catering (PyCon 2019, historical)\n- provision: \"Mobility-equipment rental\" | area: physical | status: \"not offered\" | depth: \"attendees source their own\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: a named third-party vendor for wheelchairs and scooters (LF template) - the pattern is naming a vendor at all\n- provision: \"Quiet space\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: rationale: sensory input - noise and light; away from the hub, dim, wheelchair-accessible, separate from any nursing room (AdaCamp)\n- provision: \"Nursing room\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: stated to exist unconditionally, only its location withheld until check-in (LF template) - reaches people who would never ask\n- provision: \"All-gender restrooms\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: designated specifically and named as such (LF template)\n- provision: \"Consent stickers\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: green open to talk, yellow only if you know me, red not interested in talking or being photographed - an access provision and a photo opt-out; enforcement lives with event-code-of-conduct\n- provision: \"Pronoun stickers\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: opt-in stickers at registration (LF template); what the choice says belongs to event-cultural-identity\n- provision: \"Sign-language interpretation\" | area: sensory | status: \"on request\" | depth: \"on request, 8 weeks' notice\" | owner: \"Tamsin Quillfeather\" | funded from: \"community budget\" | known needs: 0 | basis: interpreters only when notified by signing attendees (PyCon 2019, historical) - not bundled with captioning at the same trigger\n- provision: \"Hearing loop\" | area: sensory | status: \"venue criterion\" | depth: \"a criterion for the venue\" | owner: \"Tamsin Quillfeather\" | funded from: \"venue contract\" | known needs: 0 | basis: delivered technically by event-production\n- provision: \"Restricted-meal table\" | area: dietary | status: \"committed\" | depth: \"separate table, printed name list\" | owner: \"Tamsin Quillfeather\" | funded from: \"catering budget\" | known needs: 0 | basis: restricted meals held at a separate table and checked off a printed list (hackathon guide, standing practice)\n- provision: \"Need-gated ticket route\" | area: economic | status: \"committed\" | depth: \"owned by the ticket sibling\" | owner: \"event-ticket-pricing\" | funded from: \"ticket pricing\" | known needs: 0 | basis: point at event-ticket-pricing - never a second application process\n- provision: \"Childcare\" | area: economic | status: \"not offered\" | depth: \"Q4: no legal entity to hold the vendor contract and the insurance\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: vendor due diligence: certified, background-checked, insured carers; ratios by age band; check-in and check-out logs (PyCon 2019, AdaCamp)\n- provision: \"Travel grant\" | area: economic | status: \"not offered\" | depth: \"Q4: no entity able to disburse money\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: travel, hotel, registration and childcare in one application; onsite disbursement against receipts excludes anyone who cannot front the cost - publish that limit\n- provision: \"WCAG 2.2 AA web surfaces\" | area: digital | status: \"committed\" | depth: \"target AA, keyboard-checked\" | owner: \"site maintainer\" | funded from: \"organizer hours\" | known needs: 0 | basis: the event's own website, forms, schedule and stream only - never coverage of anything on site\n- provision: \"Captions on recordings\" | area: digital | status: \"committed\" | depth: \"captions on every published recording\" | owner: \"Tamsin Quillfeather\" | funded from: \"organizer hours\" | known needs: 0 | basis: required on published media independently of live captioning\nPage sections - one per area, in this order: [physical; sensory; dietary; economic; digital]\n- area: physical | covered: [\"Companion ticket\"] | not covered: [\"Step-free route\"; \"Accessible bathrooms\"; \"Floor map\"; \"Reserved seating\"; \"Mobility-equipment rental\"]\n- area: sensory | covered: [\"Live captioning\"; \"Sign-language interpretation\"] | not covered: [\"Quiet space\"; \"Nursing room\"; \"All-gender restrooms\"; \"Consent stickers\"; \"Pronoun stickers\"; \"Hearing loop\"]\n- area: dietary | covered: [\"Dietary categories\"; \"Restricted-meal table\"] | not covered: [none]\n- area: economic | covered: [\"Need-gated ticket route\"] | not covered: [\"Childcare\"; \"Travel grant\"]\n- area: digital | covered: [\"WCAG 2.2 AA web surfaces\"; \"Captions on recordings\"] | not covered: [none]\nRequest channel: \"Named inbox with named people\" | owner: \"Tamsin Quillfeather\" | lead time: 8 weeks | requests-by date: 2027-01-07 | reply within: 5 days | delete-by date: 2027-03-19 | form fields: [\"Your name\"; \"How to reach you\"; \"What you need from us\"; \"By when you need it\"; \"Anything that would help us arrange it\"]\nData-handling posture (all five decided before the channel opens; the first three published): retention: \"every request deleted by 2027-03-19 (14 days after the event - self-set)\" | access: \"Tamsin Quillfeather and only the organizers who arrange what was asked for\" | turnaround: \"a reply within 5 days, a decline included\" | where it lives: an inbox the organizers control, emptied at the debrief | who decides a decline: Tamsin Quillfeather, with the reason written down\nDigital layer checklist - the event's own website, forms, schedule and stream only, never anything on site, target WCAG 2.2 AA:\n- item: \"Registration and ticket flow\" | status: \"to check\" | POUR: operable | check: exercise it end to end with the keyboard only, including any date picker, dropdown and the payment step\n- item: \"Accommodation-request field\" | status: \"to check\" | POUR: understandable | check: labelled in text, its help text programmatically associated, its errors described in words - never a placeholder-only label\n- item: \"CFP form\" | status: \"to check\" | POUR: understandable | check: the same rules: a speaker who cannot submit is a speaker you never hear from\n- item: \"Schedule\" | status: \"to check\" | POUR: perceivable | check: contrast 4.5:1 for normal text and 3:1 for large text and interface components, track and status never by colour alone, usable at 200% zoom and on a narrow viewport\n- item: \"Accessibility page\" | status: \"to check\" | POUR: robust | check: it fails more often than expected, and failing there undercuts the claim it makes\n- item: \"Livestream player\" | status: \"not applicable\" | POUR: operable | check: keyboard-operable controls and a caption track that can be turned on\n- item: \"Captions on published recordings\" | status: \"to check\" | POUR: perceivable | check: required independently of live captioning; if the programme was captioned live, publish the transcript\n- item: \"Published program documents\" | status: \"to check\" | POUR: robust | check: tagged structure, reading order and real text - if the PDF cannot work, publish the same content as a web page\nHand-offs, in this order:\n- to: \"event-venue-sourcing\" | what: the accessibility criteria sheet - candidate venues are checked against it\n- to: \"event-production\" | what: captioning delivery and the signal path, with the owner's jargon brief sent ahead, and the hearing loop\n- to: \"event-vendor-sourcing\" | what: the dietary commitment, into the catering brief\n- to: \"event-speaker-experience\" | what: a speaker's declared need\n- to: \"event-attendee-experience\" | what: placement and wayfinding of what was sized\n- to: \"event-date-selection\" | what: the time-of-day question, while the slot is movable\n- to: \"event-ticket-pricing\" | what: the need-gated ticket rung and its application mechanic\n- to: \"event-code-of-conduct\" | what: incident intake and the consequence for recording someone wearing red\n- to: \"event-volunteers\" | what: recruiting and briefing the inclusion team\nStated gaps that apply, in this order: [\"dietary and childcare practice\"; \"interpretation trigger threshold\"; \"jurisdictional duties\"]\n- \"dietary and childcare practice\" | two independent organizations each, and the catalog states the range where they diverge\n- \"interpretation trigger threshold\" | self-set: nothing fixes the attendance or evidence level at which on-request stops being enough\n- \"jurisdictional duties\" | out of scope by construction - Q6 goes to counsel\nRequests (3), in this order:\n- request 1 | label: \"Request 1 - Dietary categories\" | decision: \"covered\" | provision: \"Dietary categories\" | received: 2027-01-05 | days before the event: 58 | requests-by date: 2027-01-07 | names a diagnosis: no | reason: Dietary categories is committed (3 known needs + a registration question) - it works without booking\n- request 2 | label: \"Request 2 - Sign-language interpretation\" | decision: \"needs owner decision\" | provision: \"Sign-language interpretation\" | received: 2027-01-14 | days before the event: 49 | requests-by date: 2027-01-07 | names a diagnosis: no | reason: it needs 8 weeks' lead time and arrived after the requests-by date 2027-01-07 - the owner decides now whether it can still be booked, and declines early and in specifics if not\n- request 3 | label: \"Request 3 - Childcare\" | decision: \"not covered - decline with reason\" | provision: \"Childcare\" | received: 2026-12-20 | days before the event: 74 | requests-by date: 2027-01-07 | names a diagnosis: yes - never repeat it | reason: Childcare is not in this edition's set (Q4: no legal entity to hold the vendor contract and the insurance)\nDay-of contact: \"the inclusion team, identifiable by its shirt on every day and floor\" | last-updated date: 2027-01-15\nFindings (16):\n[check] jurisdiction (requests): Q6: nobody has checked what Brightwater, Eastland requires of a public event and its disability data - a question for counsel, never answered here.\n[check] slot_social (slot): Q10: The daytime programme reaches caregivers, but the evening social excludes them - while it is movable, a lunch or daytime social is cheaper than any rung: hand it to event-date-selection.\n[check] request_late_2 (requests): Request 2 - Sign-language interpretation arrived 49 days before the event, after the requests-by date - decide today; a late decline is worse than an early one.\n[check] publish_passed (dates): Q7: the publish-by date 2026-12-15 has passed - if the page is not out yet, publish it now.\n[check] requests_by_past (dates): The requests-by date 2027-01-07 (8 weeks before the event) has passed - a booked provision asked for now needs the owner's decision.\n[info] pole_community (pole): Q1: a community budget where every provision competes with catering - it moves menus 1, 2 and 4, never menu 3: the funding pole is not an excuse that reaches the request channel.\n[info] venue_criteria (venue): The venue is not signed: the criteria sheet below goes to event-venue-sourcing, and every building provision stays a criterion - never a promise on the page - until a venue is signed against it.\n[info] no_entity (economic): Q4: no legal entity - childcare and the travel grant are deleted outright, not ranked. If the entity, the insurance or the vetting is not in place, the provision is not available: say so rather than running a reduced version.\n[info] captioner_brief (captioning): Brief the captioner before the event: Tamsin Quillfeather sends the programme, speaker names, slide decks when available and a glossary of product names, acronyms, library and tool names, at a lead time agreed with the captioner (self-set).\n[info] caption_scope (captioning): Captioning covers the main room only - state which parts are covered and which are not; an unstated scope is what a deaf attendee discovers in the room.\n[info] need_criterion_1 (needs): Known need 1 (Step-free route) is a must on the venue criteria sheet - a known need, not a template line.\n[info] known_first (needs): Known needs are provisioned first, against the evidence held, before a template - 6 known needs listed first in the set.\n[info] request_dx_3 (requests): Request 3 - Childcare names a diagnosis - the answer describes the provision, never repeats it.\n[info] requests_open (requests): 3 requests to answer - every one, declines included, early and in specifics: what cannot be done, why, what can be done instead, and whether it changes next edition.\n[info] hard_date (dates): Q7: the publish-by date is -31 days away (hard at 56 or fewer - self-set) - the fast-acting rungs are promoted on every menu.\n[info] not_legal_advice (scope): Not legal advice: access duties vary by jurisdiction - the page names the questions that need counsel and answers none of them."
}

Reply:

{
 "task": "plan",
 "summary": "Answer the three requests now - the late interpreter request needs the owner's decision today - then sign a venue against the criteria sheet before the page is published.",
 "verdict": "answer the requests",
 "menus": {
  "depth": {
   "pick": "Published page and request channel",
   "reason": "Promoted by Q7: a hard publish-by date (-31 days away, hard at 56 or fewer - self-set) promotes the fast-acting rungs."
  },
  "captioning": {
   "pick": "Live captioning, main days/room only",
   "reason": "Made the pick by Q3 and Q8: the need is real and recurring - state which parts are covered."
  },
  "requests": {
   "pick": "Named inbox with named people",
   "reason": "Made the pick by Q6: the jurisdiction's data rules are unanswered - the inbox is promoted over the field."
  },
  "economic": {
   "pick": "Ticket-side need-gated rung",
   "reason": "Promoted by Q7: a hard publish-by date - the fast-acting rung."
  }
 },
 "slot_note": "The daytime programme reaches caregivers, but the evening social excludes them - while it is movable, a lunch or daytime social is cheaper than any rung: hand it to event-date-selection.",
 "provisions": [
  {
   "area": "physical",
   "provision": "Step-free route",
   "depth": "a criterion for the venue",
   "owner": "Tamsin Quillfeather",
   "funded_from": "venue contract",
   "status": "venue criterion"
  },
  {
   "area": "sensory",
   "provision": "Live captioning",
   "depth": "main room, 2 days, 14 hours",
   "owner": "Tamsin Quillfeather",
   "funded_from": "community budget",
   "status": "committed"
  },
  {
   "area": "dietary",
   "provision": "Dietary categories",
   "depth": "3 known needs + a registration question",
   "owner": "Tamsin Quillfeather",
   "funded_from": "catering budget",
   "status": "committed"
  },
  {
   "area": "physical",
   "provision": "Accessible bathrooms",
   "depth": "a criterion for the venue",
   "owner": "Tamsin Quillfeather",
   "funded_from": "venue contract",
   "status": "venue criterion"
  },
  {
   "area": "physical",
   "provision": "Floor map",
   "depth": "drawn once the venue is signed",
   "owner": "Tamsin Quillfeather",
   "funded_from": "organizer hours",
   "status": "venue criterion"
  },
  {
   "area": "physical",
   "provision": "Reserved seating",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "physical",
   "provision": "Companion ticket",
   "depth": "free, by writing to the owner",
   "owner": "Tamsin Quillfeather",
   "funded_from": "organizer hours",
   "status": "on request"
  },
  {
   "area": "physical",
   "provision": "Mobility-equipment rental",
   "depth": "attendees source their own",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "sensory",
   "provision": "Quiet space",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "sensory",
   "provision": "Nursing room",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "sensory",
   "provision": "All-gender restrooms",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "sensory",
   "provision": "Consent stickers",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "sensory",
   "provision": "Pronoun stickers",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "sensory",
   "provision": "Sign-language interpretation",
   "depth": "on request, 8 weeks' notice",
   "owner": "Tamsin Quillfeather",
   "funded_from": "community budget",
   "status": "on request"
  },
  {
   "area": "sensory",
   "provision": "Hearing loop",
   "depth": "a criterion for the venue",
   "owner": "Tamsin Quillfeather",
   "funded_from": "venue contract",
   "status": "venue criterion"
  },
  {
   "area": "dietary",
   "provision": "Restricted-meal table",
   "depth": "separate table, printed name list",
   "owner": "Tamsin Quillfeather",
   "funded_from": "catering budget",
   "status": "committed"
  },
  {
   "area": "economic",
   "provision": "Need-gated ticket route",
   "depth": "owned by the ticket sibling",
   "owner": "event-ticket-pricing",
   "funded_from": "ticket pricing",
   "status": "committed"
  },
  {
   "area": "economic",
   "provision": "Childcare",
   "depth": "Q4: no legal entity to hold the vendor contract and the insurance",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "economic",
   "provision": "Travel grant",
   "depth": "Q4: no entity able to disburse money",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "digital",
   "provision": "WCAG 2.2 AA web surfaces",
   "depth": "target AA, keyboard-checked",
   "owner": "site maintainer",
   "funded_from": "organizer hours",
   "status": "committed"
  },
  {
   "area": "digital",
   "provision": "Captions on recordings",
   "depth": "captions on every published recording",
   "owner": "Tamsin Quillfeather",
   "funded_from": "organizer hours",
   "status": "committed"
  }
 ],
 "people": {
  "pick": "Dedicated inclusion team",
  "reason": "A multi-day or high-attendance conference - attendees cannot see the organizers - staff a team trained in handling inequality, physically identifiable (a distinct t-shirt is the usual mark) on every day and floor the event uses. Neither is the code of conduct response team's intake: a report goes to that team."
 },
 "digital": [
  {
   "item": "Registration and ticket flow",
   "status": "to check"
  },
  {
   "item": "Accommodation-request field",
   "status": "to check"
  },
  {
   "item": "CFP form",
   "status": "to check"
  },
  {
   "item": "Schedule",
   "status": "to check"
  },
  {
   "item": "Accessibility page",
   "status": "to check"
  },
  {
   "item": "Livestream player",
   "status": "not applicable"
  },
  {
   "item": "Captions on published recordings",
   "status": "to check"
  },
  {
   "item": "Published program documents",
   "status": "to check"
  }
 ],
 "handoffs": [
  {
   "to": "event-venue-sourcing",
   "what": "the accessibility criteria sheet - candidate venues are checked against it"
  },
  {
   "to": "event-production",
   "what": "captioning delivery and the signal path, with the owner's jargon brief sent ahead, and the hearing loop"
  },
  {
   "to": "event-vendor-sourcing",
   "what": "the dietary commitment, into the catering brief"
  },
  {
   "to": "event-speaker-experience",
   "what": "a speaker's declared need"
  },
  {
   "to": "event-attendee-experience",
   "what": "placement and wayfinding of what was sized"
  },
  {
   "to": "event-date-selection",
   "what": "the time-of-day question, while the slot is movable"
  },
  {
   "to": "event-ticket-pricing",
   "what": "the need-gated ticket rung and its application mechanic"
  },
  {
   "to": "event-code-of-conduct",
   "what": "incident intake and the consequence for recording someone wearing red"
  },
  {
   "to": "event-volunteers",
   "what": "recruiting and briefing the inclusion team"
  }
 ],
 "data": {
  "retention": "Every request is deleted by 2027-03-19, 14 days after the event (self-set).",
  "access": "Tamsin Quillfeather and only the organizers who arrange what was asked for, shared only to arrange it.",
  "deletion": "Delete every request at the debrief, on the date the form states."
 },
 "gaps": [
  "dietary and childcare practice",
  "interpretation trigger threshold",
  "jurisdictional duties"
 ],
 "caveats": [
  "nobody has checked what Brightwater, Eastland requires of a public event and its disability data - a question for counsel, never answered here.",
  "The daytime programme reaches caregivers, but the evening social excludes them - while it is movable, a lunch or daytime social is cheaper than any rung: hand it to event-date-selection.",
  "Request 2 - Sign-language interpretation arrived 49 days before the event, after the requests-by date - decide today; a late decline is worse than an early one.",
  "the publish-by date 2026-12-15 has passed - if the page is not out yet, publish it now.",
  "The requests-by date 2027-01-07 (8 weeks before the event) has passed - a booked provision asked for now needs the owner's decision."
 ]
}

The page's check: kept - nothing to flag

The same conference, three requests in - page

Verdict: answer the requests; page ready to publish: no; depth: Published page and request channel; request channel: Named inbox with named people; 8 of 21 provisions covered; 3 requests; 0 fix-level findings.

Input:

{
 "task": "page",
 "event": "Event: \"Brightwater DevConf 2027\" | dates: 2027-03-04 to 2027-03-05 (2 days) | city: \"Brightwater\" | attendance: 400 | format: multi-track conference | session rooms: 3 | programme hours a day: 7 | recording: recorded and published | catering: catered meals | as of: 2027-01-15\nQ1 who funds the provision line: a community budget where every provision competes with catering\nQ2 venue signed: no | the building's access facts: [step-free route to every room the event uses, with lifts - a criterion, not yet a fact; wheelchair-accessible bathrooms - a criterion, not yet a fact; a restroom that can be designated all-gender - a criterion, not yet a fact; spare rooms for a quiet space and a separate nursing room - a criterion, not yet a fact; a hearing loop in the session rooms - a criterion, not yet a fact]\nQ3 known needs: 6 (one per line in the needs field)\nQ4 a legal entity able to sign a vendor contract, carry insurance and disburse money: no\nQ5 owner from now until the debrief: \"Tamsin Quillfeather\" | kind: a named person\nQ6 jurisdiction: \"Brightwater, Eastland\" | checked: not checked - a question for counsel | an institutional partner requires a structured form: no\nQ7 publish by: 2026-12-15 | days from the as-of date: -31\nQ8 edition: one year of a recurring event | a volunteer subtitling community exists: no | an in-house signing volunteer: no\nQ9 effort ceiling: organizer hours: 60 | someone to staff a request channel through to the event: yes | budget committable before tickets sell: no\nQ10 time slot: daytime programme with an evening social | still movable: yes\nQ11 size: a multi-day or high-attendance conference - attendees cannot see the organizers\nRequest flow: lead time for booked provisions: 8 weeks | requests-by date: 2027-01-07 | reply within: 5 days | requests deleted: 14 days after the event | delete-by date: 2027-03-19",
 "needs": "Known needs (Q3), provisioned against evidence first - 6:\n- need 1 | provision: \"Step-free route\" | status: \"venue criterion\" | need: \"Step-free access to the stage and the speaker room\" | evidence: \"a speaker who uses a wheelchair, declared for this edition\" | asked: \"a ramp to the main stage\" | a speaker's need: yes\n- need 2 | provision: \"Live captioning\" | status: \"committed\" | need: \"Live captions in the main talks\" | evidence: \"asked at last edition's registration desk\" | asked: \"live captioning\" | a speaker's need: no\n- need 3 | provision: \"Live captioning\" | status: \"committed\" | need: \"Live captions\" | evidence: \"written request after last edition\" | asked: \"captioning in the main room\" | a speaker's need: no\n- need 4 | provision: \"Dietary categories\" | status: \"committed\" | need: \"Vegan meals\" | evidence: \"last edition's registration form\" | asked: \"a vegan lunch both days\" | a speaker's need: no\n- need 5 | provision: \"Dietary categories\" | status: \"committed\" | need: \"Gluten-free meals\" | evidence: \"last edition's registration form\" | asked: \"a gluten-free lunch\" | a speaker's need: no\n- need 6 | provision: \"Dietary categories\" | status: \"committed\" | need: \"Nut-free meals\" | evidence: \"last edition's registration form\" | asked: \"no tree nuts or peanuts\" | a speaker's need: no",
 "requests": "received: 2027-01-05\nCould you hold a vegan, nut-free lunch for me on both days? Thanks - Sam\n\nreceived: 2027-01-14\nI'm Deaf and sign BSL. Could you book a BSL interpreter for the two keynotes? I only just got my ticket.\n\nreceived: 2026-12-20\nI'm a single parent and my son is autistic, so I can't leave him with a stranger for long. Is there childcare during the talks?",
 "facts": "Verdict: \"answer the requests\" | page ready to publish: no | fix-level findings: 0\nSelf-set lines: a hard publish-by date at 56 days or fewer | requests in volume at 10 known needs or more | a large event at 150 attendees or more | a low effort ceiling under 10 organizer hours | reserved seats at known needs plus 2 per room | the lead time, turnaround and retention entered on the form | a reply cap of 150 words. The references' own: the quiet room observation of about 5% of attendees at once (AdaCamp, an observation, not a standard) | contrast 4.5:1 for normal text and 3:1 for large text (WCAG 2.2 AA) | the subsidized fee about 4 times below real cost (PyCon US 2019, historical).\nWho funds it (Q1): \"a community budget where every provision competes with catering\" | notes: An attendee's access need is identical whether an employer or the attendee bought the ticket; no provision changes shape because of who paid - the axis that discriminates is who funds the provision line. Every provision competes with the money that would otherwise buy lunch: this moves menu 1 (depth), menu 2 (captioning) and menu 4 (economic access). Live captioning is also a sponsorable line ('captioning presented by ...'): budget the provision first, so it exists whether or not the line sells - a sale offsets the cost, it does not create the provision. It does not move menu 3: a two-person volunteer team and a foundation face the identical problem once an attendee discloses - the same duty of care, the same retention question, the same person who now has to answer.\nVenue (Q2): signed: no | notes: Q2: the venue is not signed. Write the accessibility criteria first and hand the sheet to event-venue-sourcing as a sourcing input - a signed venue deletes half of menu 1 permanently.\nMenu 1 - provision depth - pick: \"Published page and request channel\"\n- rung 1: \"Published page and request channel\" | moved: promoted by Q7: a hard publish-by date (-31 days away, hard at 56 or fewer - self-set) promotes the fast-acting rungs; promoted by Q8: a recurring event - the page is a reusable organizational asset, built once and edited each year\n- rung 2: \"Venue-floor facts\" | moved: promoted by Q7: a hard publish-by date\n- rung 3: \"On-site provision set\"\n- deleted, not demoted: \"An accessibility page describing provisions not yet secured\" | reason: the skill: it would win the efficiency line outright - and converts into a broken promise for whoever travelled on it\n- deleted, not demoted: \"Funded-access set\" | reason: Q4: no legal entity to sign a contract, carry insurance or disburse money - deleted outright, not ranked\n- notes: Value and effort share one order on this menu, so no rung dominates another and the compliance axis rescues nothing.\nMenu 2 - captioning and interpretation - pick: \"Live captioning, main days/room only\"\n- rung 1: \"Live captioning, main days/room only\" | moved: demoted by Q1: a community budget; promoted by Q3: a captioning need is already known (2 requests); made the pick by Q3 and Q8: the need is real and recurring - state which parts are covered\n- rung 2: \"On-request live provision\" | moved: promoted by Q7: a hard publish-by date promotes the fast-acting rung\n- rung 3: \"Post-event corrected captions\"\n- rung 4: \"Live captioning in every room\" | moved: demoted by Q1: a community budget; promoted by Q3: on-request has fired more than once (2 captioning requests)\n- rung 5: \"Standing subtitle pipeline\"\n- deleted, not demoted: \"Treating production capability as a captioning provision\" | reason: the skill: a capable broadcast operation is not a captioning provision until someone states, budgets and publishes what it covers\n- deleted, not demoted: \"Announcing an unvetted automatic feed as captioning coverage\" | reason: the skill: it would win efficiency on every live rung, and the attendee who relied on it discovers the gap mid-talk\n- notes: Every live rung assumes a human captioner (real-time stenotype captioning, also called CART). An automatic feed is a fallback inside a rung, never a rung: label it automatic on screen and on the page, and say which rooms have a human. Brief the captioner on the jargon before the event: the accessibility owner sends the programme, speaker names, slide decks when available and a glossary of product names, acronyms, library and tool names. Interpretation is not bundled with captioning at the same trigger: its trigger threshold is self-set - state the level chosen and why.\nMenu 3 - the request channel - pick: \"Named inbox with named people\"\n- rung 1: \"Named inbox with named people\" | moved: promoted by Q7: a hard publish-by date; made the pick by Q6: the jurisdiction's data rules are unanswered - the inbox is promoted over the field\n- rung 2: \"Registration-flow field\" | moved: promoted by Q7: a hard publish-by date - ten minutes to add\n- rung 3: \"Structured form with a stated posture\" | moved: demoted by Q7: a hard publish-by date - the heaviest upfront review\n- deleted, not demoted: \"Routing requests to the general registration desk with no accessibility owner\" | reason: the skill, at any staffing level: not the cheap rung but the unowned one - the request is received, nobody is accountable, and the attendee learns this on the day\n- notes: First shrink what needs a request at all: a quiet space, all-gender restrooms, reserved seating and consent stickers work walk-up, and the people who most need them are the least likely to disclose. Only booked provisions need a channel - interpretation, childcare, a nursing room, an equipment rental, a grant. The funding pole does not move this menu: once an attendee discloses, a volunteer team and a foundation hold the same duty of care.\nBefore menu 4 - the slot (Q10): \"daytime programme with an evening social\" | movable: yes | excludes caregivers: yes | hand to event-date-selection: yes | note: The daytime programme reaches caregivers, but the evening social excludes them - while it is movable, a lunch or daytime social is cheaper than any rung: hand it to event-date-selection.\nMenu 4 - economic access - pick: \"Ticket-side need-gated rung\"\n- rung 1: \"Ticket-side need-gated rung\" | moved: promoted by Q7: a hard publish-by date - the fast-acting rung\n- deleted, not demoted: \"An unpublished hardship promise with no budget\" | reason: the skill: an unpublished 'email us and we'll see' hardship promise with no budget behind it\n- deleted, not demoted: \"Travel and registration grant\" | reason: Q4: no entity able to disburse money - deleted outright, not ranked\n- deleted, not demoted: \"Complimentary childcare\" | reason: Q4: no legal entity to hold the vendor contract and the insurance - childcare cannot run at all\n- deleted, not demoted: \"Subsidized childcare\" | reason: Q4: no legal entity to hold the vendor contract and the insurance - childcare cannot run at all\n- notes: Ticket price itself is not this skill's: the need-gated scholarship rung belongs to event-ticket-pricing - never a second application process for a route that already exists there. A subsidized fee looks cheaper and is not: the published fee sits against a real per-child-day cost roughly 4 times higher (PyCon US 2019, historical) - small budget relief, real administrative load.\nPeople attendees turn to (Q11) - pick: \"Dedicated inclusion team\" | reason: Q11: a multi-day or high-attendance conference - attendees cannot see the organizers - staff a team trained in handling inequality, physically identifiable (a distinct t-shirt is the usual mark) on every day and floor the event uses. | conditions: Announce it before the event or at the start: the event page, the accessibility page, the pre-event attendee email and the opening remarks. Brief before identifying: every provision and where it is, listening without demanding justification, what a member may resolve alone, and the handoff path - provision owner, organizer on duty, code-of-conduct response team (recruit and brief through event-volunteers). Give it a handoff, not a desk of its own: the team routes; it does not hold requests nobody else sees. | Not the code-of-conduct response team: a member who hears a code-of-conduct violation hands it to that team under event-code-of-conduct's runbook - never investigates, decides or records it. A shared shirt requires every wearer to have that skill's staff briefing.\nProvision set - 21 provisions, known needs first, in this order:\n- provision: \"Step-free route\" | area: physical | status: \"venue criterion\" | depth: \"a criterion for the venue\" | owner: \"Tamsin Quillfeather\" | funded from: \"venue contract\" | known needs: 1 | basis: a property of the building - venue-floor facts, every rung\n- provision: \"Live captioning\" | area: sensory | status: \"committed\" | depth: \"main room, 2 days, 14 hours\" | owner: \"Tamsin Quillfeather\" | funded from: \"community budget\" | known needs: 2 | basis: menu 2: Live captioning, main days/room only - a human captioner; an automatic feed is labelled automatic and never counted as coverage\n- provision: \"Dietary categories\" | area: dietary | status: \"committed\" | depth: \"3 known needs + a registration question\" | owner: \"Tamsin Quillfeather\" | funded from: \"catering budget\" | known needs: 3 | basis: ask everyone who will be fed; vegetarian, vegan, celiac and gluten-free, common allergies, kosher, halal (hackathon guide); the eight common allergens plus sesame (IACC); fallbacks: a one-off supplier request, or a delivery credit with advance notice\n- provision: \"Accessible bathrooms\" | area: physical | status: \"venue criterion\" | depth: \"a criterion for the venue\" | owner: \"Tamsin Quillfeather\" | funded from: \"venue contract\" | known needs: 0 | basis: a property of the building - a specific checkable claim, never a general one\n- provision: \"Floor map\" | area: physical | status: \"venue criterion\" | depth: \"drawn once the venue is signed\" | owner: \"Tamsin Quillfeather\" | funded from: \"organizer hours\" | known needs: 0 | basis: published maps marking event areas, lifts, stairs, bathrooms and nursing stations (PyCon 2019, historical)\n- provision: \"Reserved seating\" | area: physical | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: available in each session for attendees with access needs (LF template), walk-up\n- provision: \"Companion ticket\" | area: physical | status: \"on request\" | depth: \"free, by writing to the owner\" | owner: \"Tamsin Quillfeather\" | funded from: \"organizer hours\" | known needs: 0 | basis: registers separately and free, same badge and catering (PyCon 2019, historical)\n- provision: \"Mobility-equipment rental\" | area: physical | status: \"not offered\" | depth: \"attendees source their own\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: a named third-party vendor for wheelchairs and scooters (LF template) - the pattern is naming a vendor at all\n- provision: \"Quiet space\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: rationale: sensory input - noise and light; away from the hub, dim, wheelchair-accessible, separate from any nursing room (AdaCamp)\n- provision: \"Nursing room\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: stated to exist unconditionally, only its location withheld until check-in (LF template) - reaches people who would never ask\n- provision: \"All-gender restrooms\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: designated specifically and named as such (LF template)\n- provision: \"Consent stickers\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: green open to talk, yellow only if you know me, red not interested in talking or being photographed - an access provision and a photo opt-out; enforcement lives with event-code-of-conduct\n- provision: \"Pronoun stickers\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: opt-in stickers at registration (LF template); what the choice says belongs to event-cultural-identity\n- provision: \"Sign-language interpretation\" | area: sensory | status: \"on request\" | depth: \"on request, 8 weeks' notice\" | owner: \"Tamsin Quillfeather\" | funded from: \"community budget\" | known needs: 0 | basis: interpreters only when notified by signing attendees (PyCon 2019, historical) - not bundled with captioning at the same trigger\n- provision: \"Hearing loop\" | area: sensory | status: \"venue criterion\" | depth: \"a criterion for the venue\" | owner: \"Tamsin Quillfeather\" | funded from: \"venue contract\" | known needs: 0 | basis: delivered technically by event-production\n- provision: \"Restricted-meal table\" | area: dietary | status: \"committed\" | depth: \"separate table, printed name list\" | owner: \"Tamsin Quillfeather\" | funded from: \"catering budget\" | known needs: 0 | basis: restricted meals held at a separate table and checked off a printed list (hackathon guide, standing practice)\n- provision: \"Need-gated ticket route\" | area: economic | status: \"committed\" | depth: \"owned by the ticket sibling\" | owner: \"event-ticket-pricing\" | funded from: \"ticket pricing\" | known needs: 0 | basis: point at event-ticket-pricing - never a second application process\n- provision: \"Childcare\" | area: economic | status: \"not offered\" | depth: \"Q4: no legal entity to hold the vendor contract and the insurance\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: vendor due diligence: certified, background-checked, insured carers; ratios by age band; check-in and check-out logs (PyCon 2019, AdaCamp)\n- provision: \"Travel grant\" | area: economic | status: \"not offered\" | depth: \"Q4: no entity able to disburse money\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: travel, hotel, registration and childcare in one application; onsite disbursement against receipts excludes anyone who cannot front the cost - publish that limit\n- provision: \"WCAG 2.2 AA web surfaces\" | area: digital | status: \"committed\" | depth: \"target AA, keyboard-checked\" | owner: \"site maintainer\" | funded from: \"organizer hours\" | known needs: 0 | basis: the event's own website, forms, schedule and stream only - never coverage of anything on site\n- provision: \"Captions on recordings\" | area: digital | status: \"committed\" | depth: \"captions on every published recording\" | owner: \"Tamsin Quillfeather\" | funded from: \"organizer hours\" | known needs: 0 | basis: required on published media independently of live captioning\nPage sections - one per area, in this order: [physical; sensory; dietary; economic; digital]\n- area: physical | covered: [\"Companion ticket\"] | not covered: [\"Step-free route\"; \"Accessible bathrooms\"; \"Floor map\"; \"Reserved seating\"; \"Mobility-equipment rental\"]\n- area: sensory | covered: [\"Live captioning\"; \"Sign-language interpretation\"] | not covered: [\"Quiet space\"; \"Nursing room\"; \"All-gender restrooms\"; \"Consent stickers\"; \"Pronoun stickers\"; \"Hearing loop\"]\n- area: dietary | covered: [\"Dietary categories\"; \"Restricted-meal table\"] | not covered: [none]\n- area: economic | covered: [\"Need-gated ticket route\"] | not covered: [\"Childcare\"; \"Travel grant\"]\n- area: digital | covered: [\"WCAG 2.2 AA web surfaces\"; \"Captions on recordings\"] | not covered: [none]\nRequest channel: \"Named inbox with named people\" | owner: \"Tamsin Quillfeather\" | lead time: 8 weeks | requests-by date: 2027-01-07 | reply within: 5 days | delete-by date: 2027-03-19 | form fields: [\"Your name\"; \"How to reach you\"; \"What you need from us\"; \"By when you need it\"; \"Anything that would help us arrange it\"]\nData-handling posture (all five decided before the channel opens; the first three published): retention: \"every request deleted by 2027-03-19 (14 days after the event - self-set)\" | access: \"Tamsin Quillfeather and only the organizers who arrange what was asked for\" | turnaround: \"a reply within 5 days, a decline included\" | where it lives: an inbox the organizers control, emptied at the debrief | who decides a decline: Tamsin Quillfeather, with the reason written down\nDigital layer checklist - the event's own website, forms, schedule and stream only, never anything on site, target WCAG 2.2 AA:\n- item: \"Registration and ticket flow\" | status: \"to check\" | POUR: operable | check: exercise it end to end with the keyboard only, including any date picker, dropdown and the payment step\n- item: \"Accommodation-request field\" | status: \"to check\" | POUR: understandable | check: labelled in text, its help text programmatically associated, its errors described in words - never a placeholder-only label\n- item: \"CFP form\" | status: \"to check\" | POUR: understandable | check: the same rules: a speaker who cannot submit is a speaker you never hear from\n- item: \"Schedule\" | status: \"to check\" | POUR: perceivable | check: contrast 4.5:1 for normal text and 3:1 for large text and interface components, track and status never by colour alone, usable at 200% zoom and on a narrow viewport\n- item: \"Accessibility page\" | status: \"to check\" | POUR: robust | check: it fails more often than expected, and failing there undercuts the claim it makes\n- item: \"Livestream player\" | status: \"not applicable\" | POUR: operable | check: keyboard-operable controls and a caption track that can be turned on\n- item: \"Captions on published recordings\" | status: \"to check\" | POUR: perceivable | check: required independently of live captioning; if the programme was captioned live, publish the transcript\n- item: \"Published program documents\" | status: \"to check\" | POUR: robust | check: tagged structure, reading order and real text - if the PDF cannot work, publish the same content as a web page\nHand-offs, in this order:\n- to: \"event-venue-sourcing\" | what: the accessibility criteria sheet - candidate venues are checked against it\n- to: \"event-production\" | what: captioning delivery and the signal path, with the owner's jargon brief sent ahead, and the hearing loop\n- to: \"event-vendor-sourcing\" | what: the dietary commitment, into the catering brief\n- to: \"event-speaker-experience\" | what: a speaker's declared need\n- to: \"event-attendee-experience\" | what: placement and wayfinding of what was sized\n- to: \"event-date-selection\" | what: the time-of-day question, while the slot is movable\n- to: \"event-ticket-pricing\" | what: the need-gated ticket rung and its application mechanic\n- to: \"event-code-of-conduct\" | what: incident intake and the consequence for recording someone wearing red\n- to: \"event-volunteers\" | what: recruiting and briefing the inclusion team\nStated gaps that apply, in this order: [\"dietary and childcare practice\"; \"interpretation trigger threshold\"; \"jurisdictional duties\"]\n- \"dietary and childcare practice\" | two independent organizations each, and the catalog states the range where they diverge\n- \"interpretation trigger threshold\" | self-set: nothing fixes the attendance or evidence level at which on-request stops being enough\n- \"jurisdictional duties\" | out of scope by construction - Q6 goes to counsel\nRequests (3), in this order:\n- request 1 | label: \"Request 1 - Dietary categories\" | decision: \"covered\" | provision: \"Dietary categories\" | received: 2027-01-05 | days before the event: 58 | requests-by date: 2027-01-07 | names a diagnosis: no | reason: Dietary categories is committed (3 known needs + a registration question) - it works without booking\n- request 2 | label: \"Request 2 - Sign-language interpretation\" | decision: \"needs owner decision\" | provision: \"Sign-language interpretation\" | received: 2027-01-14 | days before the event: 49 | requests-by date: 2027-01-07 | names a diagnosis: no | reason: it needs 8 weeks' lead time and arrived after the requests-by date 2027-01-07 - the owner decides now whether it can still be booked, and declines early and in specifics if not\n- request 3 | label: \"Request 3 - Childcare\" | decision: \"not covered - decline with reason\" | provision: \"Childcare\" | received: 2026-12-20 | days before the event: 74 | requests-by date: 2027-01-07 | names a diagnosis: yes - never repeat it | reason: Childcare is not in this edition's set (Q4: no legal entity to hold the vendor contract and the insurance)\nDay-of contact: \"the inclusion team, identifiable by its shirt on every day and floor\" | last-updated date: 2027-01-15\nCarried from the plan: summary: \"Answer the three requests now - the late interpreter request needs the owner's decision today - then sign a venue against the criteria sheet before the page is published.\" | picks: [depth \"Published page and request channel\"; captioning \"Live captioning, main days/room only\"; requests \"Named inbox with named people\"; economic \"Ticket-side need-gated rung\"] | picks match the page: yes | statuses matching the page: 21 of 21\nFindings (16):\n[check] jurisdiction (requests): Q6: nobody has checked what Brightwater, Eastland requires of a public event and its disability data - a question for counsel, never answered here.\n[check] slot_social (slot): Q10: The daytime programme reaches caregivers, but the evening social excludes them - while it is movable, a lunch or daytime social is cheaper than any rung: hand it to event-date-selection.\n[check] request_late_2 (requests): Request 2 - Sign-language interpretation arrived 49 days before the event, after the requests-by date - decide today; a late decline is worse than an early one.\n[check] publish_passed (dates): Q7: the publish-by date 2026-12-15 has passed - if the page is not out yet, publish it now.\n[check] requests_by_past (dates): The requests-by date 2027-01-07 (8 weeks before the event) has passed - a booked provision asked for now needs the owner's decision.\n[info] pole_community (pole): Q1: a community budget where every provision competes with catering - it moves menus 1, 2 and 4, never menu 3: the funding pole is not an excuse that reaches the request channel.\n[info] venue_criteria (venue): The venue is not signed: the criteria sheet below goes to event-venue-sourcing, and every building provision stays a criterion - never a promise on the page - until a venue is signed against it.\n[info] no_entity (economic): Q4: no legal entity - childcare and the travel grant are deleted outright, not ranked. If the entity, the insurance or the vetting is not in place, the provision is not available: say so rather than running a reduced version.\n[info] captioner_brief (captioning): Brief the captioner before the event: Tamsin Quillfeather sends the programme, speaker names, slide decks when available and a glossary of product names, acronyms, library and tool names, at a lead time agreed with the captioner (self-set).\n[info] caption_scope (captioning): Captioning covers the main room only - state which parts are covered and which are not; an unstated scope is what a deaf attendee discovers in the room.\n[info] need_criterion_1 (needs): Known need 1 (Step-free route) is a must on the venue criteria sheet - a known need, not a template line.\n[info] known_first (needs): Known needs are provisioned first, against the evidence held, before a template - 6 known needs listed first in the set.\n[info] request_dx_3 (requests): Request 3 - Childcare names a diagnosis - the answer describes the provision, never repeats it.\n[info] requests_open (requests): 3 requests to answer - every one, declines included, early and in specifics: what cannot be done, why, what can be done instead, and whether it changes next edition.\n[info] hard_date (dates): Q7: the publish-by date is -31 days away (hard at 56 or fewer - self-set) - the fast-acting rungs are promoted on every menu.\n[info] not_legal_advice (scope): Not legal advice: access duties vary by jurisdiction - the page names the questions that need counsel and answers none of them."
}

Reply:

{
 "task": "page",
 "title": "Accessibility at Brightwater DevConf 2027",
 "intro": "This page is for everyone coming to Brightwater DevConf 2027 - disabled attendees, speakers and volunteers, caregivers, and anyone who needs something from us to take part. It says what we provide, what we do not, and how to ask, and it sits alongside our code of conduct.",
 "sections": [
  {
   "area": "physical",
   "covered": [
    "Companion ticket"
   ],
   "not_covered": [
    "Step-free route",
    "Accessible bathrooms",
    "Floor map",
    "Reserved seating",
    "Mobility-equipment rental"
   ],
   "text": "Step-free route: not yet secured - it is on our criteria sheet for a venue that is not signed yet. Accessible bathrooms: not yet secured - it is on our criteria sheet for a venue that is not signed yet. Floor map: not yet secured - it is on our criteria sheet for a venue that is not signed yet. Reserved seating: not provided at this edition. Companion ticket is available on request (free, by writing to the owner) - ask by 2027-01-07. Mobility-equipment rental: not provided at this edition."
  },
  {
   "area": "sensory",
   "covered": [
    "Live captioning",
    "Sign-language interpretation"
   ],
   "not_covered": [
    "Quiet space",
    "Nursing room",
    "All-gender restrooms",
    "Consent stickers",
    "Pronoun stickers",
    "Hearing loop"
   ],
   "text": "Live captioning by a human captioner is provided in the main room only (main room, 2 days, 14 hours); other rooms are not captioned live. Quiet space: not provided at this edition. Nursing room: not provided at this edition. All-gender restrooms: not provided at this edition. Consent stickers: not provided at this edition. Pronoun stickers: not provided at this edition. Sign-language interpretation is available on request (8 weeks' notice) - ask by 2027-01-07. Hearing loop: not yet secured - it is on our criteria sheet for a venue that is not signed yet."
  },
  {
   "area": "dietary",
   "covered": [
    "Dietary categories",
    "Restricted-meal table"
   ],
   "not_covered": [],
   "text": "Dietary categories: provided (3 known needs + a registration question). Restricted-meal table: provided (separate table, printed name list)."
  },
  {
   "area": "economic",
   "covered": [
    "Need-gated ticket route"
   ],
   "not_covered": [
    "Childcare",
    "Travel grant"
   ],
   "text": "A need-gated ticket route is open through our ticket team. Childcare is not offered at this edition. Travel grant: not provided at this edition."
  },
  {
   "area": "digital",
   "covered": [
    "WCAG 2.2 AA web surfaces",
    "Captions on recordings"
   ],
   "not_covered": [],
   "text": "WCAG 2.2 AA web surfaces: provided (target AA, keyboard-checked). Captions on recordings: provided (captions on every published recording)."
  }
 ],
 "request_channel": {
  "channel": "Named inbox with named people",
  "owner": "Tamsin Quillfeather",
  "lead_time": "Ask by 2027-01-07 for anything that must be booked (8 weeks' notice).",
  "turnaround": "A reply within 5 days, a decline included.",
  "retention": "Deleted by 2027-03-19."
 },
 "day_of_contact": "The inclusion team, identifiable by its shirt on both days and on every floor.",
 "last_updated": "2027-01-15",
 "form": {
  "fields": [
   "Your name",
   "How to reach you",
   "What you need from us",
   "By when you need it",
   "Anything that would help us arrange it"
  ],
  "statement": "Tamsin Quillfeather reads these and replies within 5 days. What you tell us is shared only with the organizers who arrange what you asked for, and deleted by 2027-03-19."
 },
 "answers": [
  {
   "request": "Request 1 - Dietary categories",
   "decision": "covered",
   "reply": "Hi Sam, yes - a vegan, nut-free lunch will be held for you on both days at the separate table for restricted meals. Give your name there and it is checked off a printed list; there is nothing else to do.\n\nTamsin Quillfeather"
  },
  {
   "request": "Request 2 - Sign-language interpretation",
   "decision": "needs owner decision",
   "reply": "Thank you for telling us. Booking a BSL interpreter needs 8 weeks' notice, and the keynotes are now closer than that, so Tamsin Quillfeather is checking today whether one can still be booked and will answer within 5 days either way. If it cannot be done, we will say so plainly and what we can do instead: live captioning by a human captioner runs in the main room on both days."
  },
  {
   "request": "Request 3 - Childcare",
   "decision": "not covered - decline with reason",
   "reply": "Thank you for asking, and for asking early. We cannot offer childcare at this edition: we have no legal entity to hold a childcare contract and its insurance, and without them it is not available. What we can do instead is point you to the need-gated ticket route, and record the request so the next edition can plan for it. If anything else would help you attend, reply and Tamsin Quillfeather will answer within 5 days."
  }
 ],
 "disclaimer": "This page is not legal advice; access duties vary by jurisdiction.",
 "note": "Not ready to publish: answer the three requests today, then sign a venue against the criteria sheet before the page goes out."
}

The page's check: kept - nothing to flag

A 40-person meetup, ready to publish - plan

Verdict: ready to publish; page ready to publish: yes; depth: Funded-access set; request channel: Registration-flow field; 18 of 21 provisions covered; 0 requests; 0 fix-level findings.

Input:

{
 "task": "plan",
 "event": "Event: \"Harbourside Rust Meetup - May 2027\" | dates: 2027-05-15 (1 day) | city: \"Harbourside\" | attendance: 40 | format: talks | session rooms: 1 | programme hours a day: 3 | recording: not recorded | catering: light refreshments | as of: 2027-02-01\nQ1 who funds the provision line: a standing accessibility budget\nQ2 venue signed: yes | the building's access facts: [step-free route to every room the event uses, with lifts - yes; wheelchair-accessible bathrooms - yes; a restroom that can be designated all-gender - yes; spare rooms for a quiet space and a separate nursing room - two or more; a hearing loop in the session rooms - yes]\nQ3 known needs: 1 (one per line in the needs field)\nQ4 a legal entity able to sign a vendor contract, carry insurance and disburse money: yes\nQ5 owner from now until the debrief: \"Ines Brackwater\" | kind: a named person\nQ6 jurisdiction: \"Harbourside, Westmark\" | checked: checked with counsel - no statutory duty found | an institutional partner requires a structured form: no\nQ7 publish by: 2027-03-10 | days from the as-of date: 37\nQ8 edition: one year of a recurring event | a volunteer subtitling community exists: no | an in-house signing volunteer: no\nQ9 effort ceiling: organizer hours: 20 | someone to staff a request channel through to the event: yes | budget committable before tickets sell: yes\nQ10 time slot: daytime | still movable: no\nQ11 size: a meetup or single-room day - attendees can see the organizers\nRequest flow: lead time for booked provisions: 4 weeks | requests-by date: 2027-04-17 | reply within: 3 days | requests deleted: 14 days after the event | delete-by date: 2027-05-29",
 "needs": "Known needs (Q3), provisioned against evidence first - 1:\n- need 1 | provision: \"Quiet space\" | status: \"committed\" | need: \"A quiet room during the break\" | evidence: \"asked at the March meetup\" | asked: \"somewhere quiet to step away to\" | a speaker's need: no",
 "requests": "",
 "facts": "Verdict: \"ready to publish\" | page ready to publish: yes | fix-level findings: 0\nSelf-set lines: a hard publish-by date at 56 days or fewer | requests in volume at 10 known needs or more | a large event at 150 attendees or more | a low effort ceiling under 10 organizer hours | reserved seats at known needs plus 2 per room | the lead time, turnaround and retention entered on the form | a reply cap of 150 words. The references' own: the quiet room observation of about 5% of attendees at once (AdaCamp, an observation, not a standard) | contrast 4.5:1 for normal text and 3:1 for large text (WCAG 2.2 AA) | the subsidized fee about 4 times below real cost (PyCon US 2019, historical).\nWho funds it (Q1): \"a standing accessibility budget\" | notes: An attendee's access need is identical whether an employer or the attendee bought the ticket; no provision changes shape because of who paid - the axis that discriminates is who funds the provision line. A standing accessibility budget provisions per-room live captioning, complimentary childcare and equipment rental as normal practice - a promotable target, never a bar every organizer already clears. It does not move menu 3: a two-person volunteer team and a foundation face the identical problem once an attendee discloses - the same duty of care, the same retention question, the same person who now has to answer.\nVenue (Q2): signed: yes | notes: Q2: the venue is signed. Almost every physical provision is a property of the building, so the building half of menu 1 is already chosen - what the building lacks is deleted for this edition, and the page states it rather than promising around it.\nMenu 1 - provision depth - pick: \"Funded-access set\"\n- rung 1: \"Funded-access set\" | moved: demoted by Q7: a hard publish-by date - the slowest rung; made the pick by Q1: a foundation, employer or sponsor already funds an accessibility line\n- rung 2: \"Published page and request channel\" | moved: promoted by Q7: a hard publish-by date (37 days away, hard at 56 or fewer - self-set) promotes the fast-acting rungs; promoted by Q8: a recurring event - the page is a reusable organizational asset, built once and edited each year\n- rung 3: \"Venue-floor facts\" | moved: promoted by Q7: a hard publish-by date\n- rung 4: \"On-site provision set\" | moved: promoted by Q1: a standing accessibility budget; made the pick by Q3: a known need this set answers (Quiet space)\n- deleted, not demoted: \"An accessibility page describing provisions not yet secured\" | reason: the skill: it would win the efficiency line outright - and converts into a broken promise for whoever travelled on it\n- notes: Value and effort share one order on this menu, so no rung dominates another and the compliance axis rescues nothing.\nMenu 2 - captioning and interpretation - pick: \"Live captioning in every room\"\n- rung 1: \"Live captioning in every room\" | moved: made the pick by Q1: an existing budget line\n- rung 2: \"On-request live provision\" | moved: promoted by Q7: a hard publish-by date promotes the fast-acting rung; made the pick by Q11: a meetup or small event usually stays on the on-request rung\n- rung 3: \"Live captioning, main days/room only\"\n- deleted, not demoted: \"Treating production capability as a captioning provision\" | reason: the skill: a capable broadcast operation is not a captioning provision until someone states, budgets and publishes what it covers\n- deleted, not demoted: \"Announcing an unvetted automatic feed as captioning coverage\" | reason: the skill: it would win efficiency on every live rung, and the attendee who relied on it discovers the gap mid-talk\n- deleted, not demoted: \"Post-event corrected captions\" | reason: not available: nothing is recorded or published\n- deleted, not demoted: \"Standing subtitle pipeline\" | reason: not available: nothing is recorded or published\n- notes: Every live rung assumes a human captioner (real-time stenotype captioning, also called CART). An automatic feed is a fallback inside a rung, never a rung: label it automatic on screen and on the page, and say which rooms have a human. Brief the captioner on the jargon before the event: the accessibility owner sends the programme, speaker names, slide decks when available and a glossary of product names, acronyms, library and tool names. Interpretation is not bundled with captioning at the same trigger: its trigger threshold is self-set - state the level chosen and why.\nMenu 3 - the request channel - pick: \"Registration-flow field\"\n- rung 1: \"Registration-flow field\" | moved: promoted by Q7: a hard publish-by date - ten minutes to add\n- rung 2: \"Named inbox with named people\" | moved: promoted by Q7: a hard publish-by date\n- rung 3: \"Structured form with a stated posture\" | moved: demoted by Q7: a hard publish-by date - the heaviest upfront review\n- deleted, not demoted: \"Routing requests to the general registration desk with no accessibility owner\" | reason: the skill, at any staffing level: not the cheap rung but the unowned one - the request is received, nobody is accountable, and the attendee learns this on the day\n- notes: First shrink what needs a request at all: a quiet space, all-gender restrooms, reserved seating and consent stickers work walk-up, and the people who most need them are the least likely to disclose. Only booked provisions need a channel - interpretation, childcare, a nursing room, an equipment rental, a grant. The funding pole does not move this menu: once an attendee discloses, a volunteer team and a foundation hold the same duty of care.\nBefore menu 4 - the slot (Q10): \"daytime\" | movable: no | excludes caregivers: no | hand to event-date-selection: no | note: A daytime slot - the slot does not exclude caregivers by itself; a full-day event still needs childcare to reach them.\nMenu 4 - economic access - pick: \"Ticket-side need-gated rung\"\n- rung 1: \"Ticket-side need-gated rung\" | moved: promoted by Q7: a hard publish-by date - the fast-acting rung\n- rung 2: \"Complimentary childcare\" | moved: promoted by Q1: a standing accessibility budget\n- rung 3: \"Subsidized childcare\"\n- rung 4: \"Travel and registration grant\" | moved: promoted by Q1: a standing accessibility budget; demoted by Q7: a hard publish-by date - an application cycle of about two months\n- deleted, not demoted: \"An unpublished hardship promise with no budget\" | reason: the skill: an unpublished 'email us and we'll see' hardship promise with no budget behind it\n- notes: Ticket price itself is not this skill's: the need-gated scholarship rung belongs to event-ticket-pricing - never a second application process for a route that already exists there. A subsidized fee looks cheaper and is not: the published fee sits against a real per-child-day cost roughly 4 times higher (PyCon US 2019, historical) - small budget relief, real administrative load.\nPeople attendees turn to (Q11) - pick: \"Organizers as the named contact\" | reason: Q11: a meetup or single-room day - attendees can see the organizers - skip the dedicated team; the organizers are the contact, named in the opening and on the event page. | conditions: Name the organizers in the opening and point at them; say the same on the event page. Matching shirts at a single-room event add a uniform, not reach. | Not the code-of-conduct response team: a member who hears a code-of-conduct violation hands it to that team under event-code-of-conduct's runbook - never investigates, decides or records it. A shared shirt requires every wearer to have that skill's staff briefing.\nProvision set - 21 provisions, known needs first, in this order:\n- provision: \"Quiet space\" | area: sensory | status: \"committed\" | depth: \"about 2 people at once (5% observed - self-set)\" | owner: \"Ines Brackwater\" | funded from: \"venue contract\" | known needs: 1 | basis: rationale: interaction load - conversation and interaction not allowed; away from the hub, dim, wheelchair-accessible, separate from any nursing room (AdaCamp)\n- provision: \"Step-free route\" | area: physical | status: \"committed\" | depth: \"every room the event uses\" | owner: \"Ines Brackwater\" | funded from: \"venue contract\" | known needs: 0 | basis: a property of the building - venue-floor facts, every rung\n- provision: \"Accessible bathrooms\" | area: physical | status: \"committed\" | depth: \"a checkable claim, by location\" | owner: \"Ines Brackwater\" | funded from: \"venue contract\" | known needs: 0 | basis: a property of the building - a specific checkable claim, never a general one\n- provision: \"Floor map\" | area: physical | status: \"committed\" | depth: \"areas, lifts, stairs, bathrooms, nursing\" | owner: \"Ines Brackwater\" | funded from: \"organizer hours\" | known needs: 0 | basis: published maps marking event areas, lifts, stairs, bathrooms and nursing stations (PyCon 2019, historical)\n- provision: \"Reserved seating\" | area: physical | status: \"committed\" | depth: \"2 seats per session room (self-set)\" | owner: \"Ines Brackwater\" | funded from: \"organizer hours\" | known needs: 0 | basis: available in each session for attendees with access needs (LF template), walk-up\n- provision: \"Companion ticket\" | area: physical | status: \"on request\" | depth: \"free, by writing to the owner\" | owner: \"Ines Brackwater\" | funded from: \"organizer hours\" | known needs: 0 | basis: registers separately and free, same badge and catering (PyCon 2019, historical)\n- provision: \"Mobility-equipment rental\" | area: physical | status: \"committed\" | depth: \"a named rental vendor, booked direct\" | owner: \"Ines Brackwater\" | funded from: \"accessibility budget\" | known needs: 0 | basis: a named third-party vendor for wheelchairs and scooters (LF template) - the pattern is naming a vendor at all\n- provision: \"Nursing room\" | area: sensory | status: \"committed\" | depth: \"exists unconditionally, location at check-in\" | owner: \"Ines Brackwater\" | funded from: \"venue contract\" | known needs: 0 | basis: stated to exist unconditionally, only its location withheld until check-in (LF template) - reaches people who would never ask\n- provision: \"All-gender restrooms\" | area: sensory | status: \"committed\" | depth: \"designated and named as such\" | owner: \"Ines Brackwater\" | funded from: \"venue contract\" | known needs: 0 | basis: designated specifically and named as such (LF template)\n- provision: \"Consent stickers\" | area: sensory | status: \"committed\" | depth: \"40 sets, one per attendee\" | owner: \"Ines Brackwater\" | funded from: \"organizer hours\" | known needs: 0 | basis: green open to talk, yellow only if you know me, red not interested in talking or being photographed - an access provision and a photo opt-out; enforcement lives with event-code-of-conduct\n- provision: \"Pronoun stickers\" | area: sensory | status: \"committed\" | depth: \"opt-in, at registration\" | owner: \"Ines Brackwater\" | funded from: \"organizer hours\" | known needs: 0 | basis: opt-in stickers at registration (LF template); what the choice says belongs to event-cultural-identity\n- provision: \"Live captioning\" | area: sensory | status: \"committed\" | depth: \"1 room x 1 day, 3 hours\" | owner: \"Ines Brackwater\" | funded from: \"accessibility budget\" | known needs: 0 | basis: menu 2: Live captioning in every room - a human captioner; an automatic feed is labelled automatic and never counted as coverage\n- provision: \"Sign-language interpretation\" | area: sensory | status: \"on request\" | depth: \"on request, 4 weeks' notice\" | owner: \"Ines Brackwater\" | funded from: \"accessibility budget\" | known needs: 0 | basis: interpreters only when notified by signing attendees (PyCon 2019, historical) - not bundled with captioning at the same trigger\n- provision: \"Hearing loop\" | area: sensory | status: \"committed\" | depth: \"every session room\" | owner: \"Ines Brackwater\" | funded from: \"venue contract\" | known needs: 0 | basis: delivered technically by event-production\n- provision: \"Dietary categories\" | area: dietary | status: \"committed\" | depth: \"a registration question\" | owner: \"Ines Brackwater\" | funded from: \"catering budget\" | known needs: 0 | basis: ask everyone who will be fed; vegetarian, vegan, celiac and gluten-free, common allergies, kosher, halal (hackathon guide); the eight common allergens plus sesame (IACC); fallbacks: a one-off supplier request, or a delivery credit with advance notice\n- provision: \"Restricted-meal table\" | area: dietary | status: \"committed\" | depth: \"separate table, printed name list\" | owner: \"Ines Brackwater\" | funded from: \"catering budget\" | known needs: 0 | basis: restricted meals held at a separate table and checked off a printed list (hackathon guide, standing practice)\n- provision: \"Need-gated ticket route\" | area: economic | status: \"committed\" | depth: \"owned by the ticket sibling\" | owner: \"event-ticket-pricing\" | funded from: \"ticket pricing\" | known needs: 0 | basis: point at event-ticket-pricing - never a second application process\n- provision: \"Childcare\" | area: economic | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: vendor due diligence: certified, background-checked, insured carers; ratios by age band; check-in and check-out logs (PyCon 2019, AdaCamp)\n- provision: \"Travel grant\" | area: economic | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: travel, hotel, registration and childcare in one application; onsite disbursement against receipts excludes anyone who cannot front the cost - publish that limit\n- provision: \"WCAG 2.2 AA web surfaces\" | area: digital | status: \"committed\" | depth: \"target AA, keyboard-checked\" | owner: \"site maintainer\" | funded from: \"organizer hours\" | known needs: 0 | basis: the event's own website, forms, schedule and stream only - never coverage of anything on site\n- provision: \"Captions on recordings\" | area: digital | status: \"not offered\" | depth: \"nothing is recorded\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: required on published media independently of live captioning\nPage sections - one per area, in this order: [physical; sensory; dietary; economic; digital]\n- area: physical | covered: [\"Step-free route\"; \"Accessible bathrooms\"; \"Floor map\"; \"Reserved seating\"; \"Companion ticket\"; \"Mobility-equipment rental\"] | not covered: [none]\n- area: sensory | covered: [\"Quiet space\"; \"Nursing room\"; \"All-gender restrooms\"; \"Consent stickers\"; \"Pronoun stickers\"; \"Live captioning\"; \"Sign-language interpretation\"; \"Hearing loop\"] | not covered: [none]\n- area: dietary | covered: [\"Dietary categories\"; \"Restricted-meal table\"] | not covered: [none]\n- area: economic | covered: [\"Need-gated ticket route\"] | not covered: [\"Childcare\"; \"Travel grant\"]\n- area: digital | covered: [\"WCAG 2.2 AA web surfaces\"] | not covered: [\"Captions on recordings\"]\nRequest channel: \"Registration-flow field\" | owner: \"Ines Brackwater\" | lead time: 4 weeks | requests-by date: 2027-04-17 | reply within: 3 days | delete-by date: 2027-05-29 | form fields: [\"Your name\"; \"How to reach you\"; \"What you need from us\"; \"By when you need it\"; \"Anything that would help us arrange it\"]\nData-handling posture (all five decided before the channel opens; the first three published): retention: \"every request deleted by 2027-05-29 (14 days after the event - self-set)\" | access: \"Ines Brackwater and only the organizers who arrange what was asked for\" | turnaround: \"a reply within 3 days, a decline included\" | where it lives: inside the ticketing platform's registration records, where retention is the platform's choice - the trade made for surfacing more needs | who decides a decline: Ines Brackwater, with the reason written down\nDigital layer checklist - the event's own website, forms, schedule and stream only, never anything on site, target WCAG 2.2 AA:\n- item: \"Registration and ticket flow\" | status: \"to check\" | POUR: operable | check: exercise it end to end with the keyboard only, including any date picker, dropdown and the payment step\n- item: \"Accommodation-request field\" | status: \"to check\" | POUR: understandable | check: labelled in text, its help text programmatically associated, its errors described in words - never a placeholder-only label\n- item: \"CFP form\" | status: \"to check\" | POUR: understandable | check: the same rules: a speaker who cannot submit is a speaker you never hear from\n- item: \"Schedule\" | status: \"to check\" | POUR: perceivable | check: contrast 4.5:1 for normal text and 3:1 for large text and interface components, track and status never by colour alone, usable at 200% zoom and on a narrow viewport\n- item: \"Accessibility page\" | status: \"to check\" | POUR: robust | check: it fails more often than expected, and failing there undercuts the claim it makes\n- item: \"Livestream player\" | status: \"not applicable\" | POUR: operable | check: keyboard-operable controls and a caption track that can be turned on\n- item: \"Captions on published recordings\" | status: \"not applicable\" | POUR: perceivable | check: required independently of live captioning; if the programme was captioned live, publish the transcript\n- item: \"Published program documents\" | status: \"to check\" | POUR: robust | check: tagged structure, reading order and real text - if the PDF cannot work, publish the same content as a web page\nHand-offs, in this order:\n- to: \"event-production\" | what: captioning delivery and the signal path, with the owner's jargon brief sent ahead, and the hearing loop\n- to: \"event-vendor-sourcing\" | what: the dietary commitment, into the catering brief\n- to: \"event-attendee-experience\" | what: placement and wayfinding of what was sized\n- to: \"event-ticket-pricing\" | what: the need-gated ticket rung and its application mechanic\n- to: \"event-code-of-conduct\" | what: incident intake and the consequence for recording someone wearing red\n- to: \"event-cultural-identity\" | what: what the pronoun option says\nStated gaps that apply, in this order: [\"dietary and childcare practice\"; \"quiet-space sizing\"; \"interpretation trigger threshold\"; \"jurisdictional duties\"]\n- \"dietary and childcare practice\" | two independent organizations each, and the catalog states the range where they diverge\n- \"quiet-space sizing\" | no established seat-to-attendee ratio anywhere sourced - AdaCamp's 5% is an observation; the figure is self-set\n- \"interpretation trigger threshold\" | self-set: nothing fixes the attendance or evidence level at which on-request stops being enough\n- \"jurisdictional duties\" | out of scope by construction - Q6 goes to counsel\nRequests: none pasted\nDay-of contact: \"Ines Brackwater and the organizers, named in the opening\" | last-updated date: 2027-02-01\nFindings (7):\n[info] pole_standing (pole): Q1: a standing accessibility budget - it promotes the funded rungs; it never changes menu 3.\n[info] field_retention (requests): The registration-flow field puts health and disability data in the ticketing platform's records by default - state the retention rule on the form and delete at the debrief.\n[info] captioner_brief (captioning): Brief the captioner before the event: Ines Brackwater sends the programme, speaker names, slide decks when available and a glossary of product names, acronyms, library and tool names, at a lead time agreed with the captioner (self-set).\n[info] quiet_sizing (sensory): Quiet-space sizing has no established ratio anywhere sourced; the page's figure is AdaCamp's observation (about 5% of attendees at once), labelled self-set - decide it against the room you have.\n[info] known_first (needs): Known needs are provisioned first, against the evidence held, before a template - 1 known need listed first in the set.\n[info] hard_date (dates): Q7: the publish-by date is 37 days away (hard at 56 or fewer - self-set) - the fast-acting rungs are promoted on every menu.\n[info] not_legal_advice (scope): Not legal advice: access duties vary by jurisdiction - the page names the questions that need counsel and answers none of them."
}

Reply:

{
 "task": "plan",
 "summary": "Ready to publish: a signed accessible venue, a standing budget and a named owner carry the funded-access set; publish by 2027-03-10 with the registration field's retention rule stated.",
 "verdict": "ready to publish",
 "menus": {
  "depth": {
   "pick": "Funded-access set",
   "reason": "Made the pick by Q1: a foundation, employer or sponsor already funds an accessibility line."
  },
  "captioning": {
   "pick": "Live captioning in every room",
   "reason": "Made the pick by Q1: an existing budget line."
  },
  "requests": {
   "pick": "Registration-flow field",
   "reason": "Promoted by Q7: a hard publish-by date - ten minutes to add."
  },
  "economic": {
   "pick": "Ticket-side need-gated rung",
   "reason": "Promoted by Q7: a hard publish-by date - the fast-acting rung."
  }
 },
 "slot_note": "A daytime slot - the slot does not exclude caregivers by itself; a full-day event still needs childcare to reach them.",
 "provisions": [
  {
   "area": "sensory",
   "provision": "Quiet space",
   "depth": "about 2 people at once (5% observed - self-set)",
   "owner": "Ines Brackwater",
   "funded_from": "venue contract",
   "status": "committed"
  },
  {
   "area": "physical",
   "provision": "Step-free route",
   "depth": "every room the event uses",
   "owner": "Ines Brackwater",
   "funded_from": "venue contract",
   "status": "committed"
  },
  {
   "area": "physical",
   "provision": "Accessible bathrooms",
   "depth": "a checkable claim, by location",
   "owner": "Ines Brackwater",
   "funded_from": "venue contract",
   "status": "committed"
  },
  {
   "area": "physical",
   "provision": "Floor map",
   "depth": "areas, lifts, stairs, bathrooms, nursing",
   "owner": "Ines Brackwater",
   "funded_from": "organizer hours",
   "status": "committed"
  },
  {
   "area": "physical",
   "provision": "Reserved seating",
   "depth": "2 seats per session room (self-set)",
   "owner": "Ines Brackwater",
   "funded_from": "organizer hours",
   "status": "committed"
  },
  {
   "area": "physical",
   "provision": "Companion ticket",
   "depth": "free, by writing to the owner",
   "owner": "Ines Brackwater",
   "funded_from": "organizer hours",
   "status": "on request"
  },
  {
   "area": "physical",
   "provision": "Mobility-equipment rental",
   "depth": "a named rental vendor, booked direct",
   "owner": "Ines Brackwater",
   "funded_from": "accessibility budget",
   "status": "committed"
  },
  {
   "area": "sensory",
   "provision": "Nursing room",
   "depth": "exists unconditionally, location at check-in",
   "owner": "Ines Brackwater",
   "funded_from": "venue contract",
   "status": "committed"
  },
  {
   "area": "sensory",
   "provision": "All-gender restrooms",
   "depth": "designated and named as such",
   "owner": "Ines Brackwater",
   "funded_from": "venue contract",
   "status": "committed"
  },
  {
   "area": "sensory",
   "provision": "Consent stickers",
   "depth": "40 sets, one per attendee",
   "owner": "Ines Brackwater",
   "funded_from": "organizer hours",
   "status": "committed"
  },
  {
   "area": "sensory",
   "provision": "Pronoun stickers",
   "depth": "opt-in, at registration",
   "owner": "Ines Brackwater",
   "funded_from": "organizer hours",
   "status": "committed"
  },
  {
   "area": "sensory",
   "provision": "Live captioning",
   "depth": "1 room x 1 day, 3 hours",
   "owner": "Ines Brackwater",
   "funded_from": "accessibility budget",
   "status": "committed"
  },
  {
   "area": "sensory",
   "provision": "Sign-language interpretation",
   "depth": "on request, 4 weeks' notice",
   "owner": "Ines Brackwater",
   "funded_from": "accessibility budget",
   "status": "on request"
  },
  {
   "area": "sensory",
   "provision": "Hearing loop",
   "depth": "every session room",
   "owner": "Ines Brackwater",
   "funded_from": "venue contract",
   "status": "committed"
  },
  {
   "area": "dietary",
   "provision": "Dietary categories",
   "depth": "a registration question",
   "owner": "Ines Brackwater",
   "funded_from": "catering budget",
   "status": "committed"
  },
  {
   "area": "dietary",
   "provision": "Restricted-meal table",
   "depth": "separate table, printed name list",
   "owner": "Ines Brackwater",
   "funded_from": "catering budget",
   "status": "committed"
  },
  {
   "area": "economic",
   "provision": "Need-gated ticket route",
   "depth": "owned by the ticket sibling",
   "owner": "event-ticket-pricing",
   "funded_from": "ticket pricing",
   "status": "committed"
  },
  {
   "area": "economic",
   "provision": "Childcare",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "economic",
   "provision": "Travel grant",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "digital",
   "provision": "WCAG 2.2 AA web surfaces",
   "depth": "target AA, keyboard-checked",
   "owner": "site maintainer",
   "funded_from": "organizer hours",
   "status": "committed"
  },
  {
   "area": "digital",
   "provision": "Captions on recordings",
   "depth": "nothing is recorded",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  }
 ],
 "people": {
  "pick": "Organizers as the named contact",
  "reason": "A meetup or single-room day - attendees can see the organizers - skip the dedicated team; the organizers are the contact, named in the opening and on the event page. Neither is the code of conduct response team's intake: a report goes to that team."
 },
 "digital": [
  {
   "item": "Registration and ticket flow",
   "status": "to check"
  },
  {
   "item": "Accommodation-request field",
   "status": "to check"
  },
  {
   "item": "CFP form",
   "status": "to check"
  },
  {
   "item": "Schedule",
   "status": "to check"
  },
  {
   "item": "Accessibility page",
   "status": "to check"
  },
  {
   "item": "Livestream player",
   "status": "not applicable"
  },
  {
   "item": "Captions on published recordings",
   "status": "not applicable"
  },
  {
   "item": "Published program documents",
   "status": "to check"
  }
 ],
 "handoffs": [
  {
   "to": "event-production",
   "what": "captioning delivery and the signal path, with the owner's jargon brief sent ahead, and the hearing loop"
  },
  {
   "to": "event-vendor-sourcing",
   "what": "the dietary commitment, into the catering brief"
  },
  {
   "to": "event-attendee-experience",
   "what": "placement and wayfinding of what was sized"
  },
  {
   "to": "event-ticket-pricing",
   "what": "the need-gated ticket rung and its application mechanic"
  },
  {
   "to": "event-code-of-conduct",
   "what": "incident intake and the consequence for recording someone wearing red"
  },
  {
   "to": "event-cultural-identity",
   "what": "what the pronoun option says"
  }
 ],
 "data": {
  "retention": "Every request is deleted by 2027-05-29, 14 days after the event (self-set).",
  "access": "Ines Brackwater and only the organizers who arrange what was asked for, shared only to arrange it.",
  "deletion": "Delete every request at the debrief, on the date the form states."
 },
 "gaps": [
  "dietary and childcare practice",
  "quiet-space sizing",
  "interpretation trigger threshold",
  "jurisdictional duties"
 ],
 "caveats": []
}

The page's check: kept - nothing to flag

A 40-person meetup, ready to publish - page

Verdict: ready to publish; page ready to publish: yes; depth: Funded-access set; request channel: Registration-flow field; 18 of 21 provisions covered; 0 requests; 0 fix-level findings.

Input:

{
 "task": "page",
 "event": "Event: \"Harbourside Rust Meetup - May 2027\" | dates: 2027-05-15 (1 day) | city: \"Harbourside\" | attendance: 40 | format: talks | session rooms: 1 | programme hours a day: 3 | recording: not recorded | catering: light refreshments | as of: 2027-02-01\nQ1 who funds the provision line: a standing accessibility budget\nQ2 venue signed: yes | the building's access facts: [step-free route to every room the event uses, with lifts - yes; wheelchair-accessible bathrooms - yes; a restroom that can be designated all-gender - yes; spare rooms for a quiet space and a separate nursing room - two or more; a hearing loop in the session rooms - yes]\nQ3 known needs: 1 (one per line in the needs field)\nQ4 a legal entity able to sign a vendor contract, carry insurance and disburse money: yes\nQ5 owner from now until the debrief: \"Ines Brackwater\" | kind: a named person\nQ6 jurisdiction: \"Harbourside, Westmark\" | checked: checked with counsel - no statutory duty found | an institutional partner requires a structured form: no\nQ7 publish by: 2027-03-10 | days from the as-of date: 37\nQ8 edition: one year of a recurring event | a volunteer subtitling community exists: no | an in-house signing volunteer: no\nQ9 effort ceiling: organizer hours: 20 | someone to staff a request channel through to the event: yes | budget committable before tickets sell: yes\nQ10 time slot: daytime | still movable: no\nQ11 size: a meetup or single-room day - attendees can see the organizers\nRequest flow: lead time for booked provisions: 4 weeks | requests-by date: 2027-04-17 | reply within: 3 days | requests deleted: 14 days after the event | delete-by date: 2027-05-29",
 "needs": "Known needs (Q3), provisioned against evidence first - 1:\n- need 1 | provision: \"Quiet space\" | status: \"committed\" | need: \"A quiet room during the break\" | evidence: \"asked at the March meetup\" | asked: \"somewhere quiet to step away to\" | a speaker's need: no",
 "requests": "",
 "facts": "Verdict: \"ready to publish\" | page ready to publish: yes | fix-level findings: 0\nSelf-set lines: a hard publish-by date at 56 days or fewer | requests in volume at 10 known needs or more | a large event at 150 attendees or more | a low effort ceiling under 10 organizer hours | reserved seats at known needs plus 2 per room | the lead time, turnaround and retention entered on the form | a reply cap of 150 words. The references' own: the quiet room observation of about 5% of attendees at once (AdaCamp, an observation, not a standard) | contrast 4.5:1 for normal text and 3:1 for large text (WCAG 2.2 AA) | the subsidized fee about 4 times below real cost (PyCon US 2019, historical).\nWho funds it (Q1): \"a standing accessibility budget\" | notes: An attendee's access need is identical whether an employer or the attendee bought the ticket; no provision changes shape because of who paid - the axis that discriminates is who funds the provision line. A standing accessibility budget provisions per-room live captioning, complimentary childcare and equipment rental as normal practice - a promotable target, never a bar every organizer already clears. It does not move menu 3: a two-person volunteer team and a foundation face the identical problem once an attendee discloses - the same duty of care, the same retention question, the same person who now has to answer.\nVenue (Q2): signed: yes | notes: Q2: the venue is signed. Almost every physical provision is a property of the building, so the building half of menu 1 is already chosen - what the building lacks is deleted for this edition, and the page states it rather than promising around it.\nMenu 1 - provision depth - pick: \"Funded-access set\"\n- rung 1: \"Funded-access set\" | moved: demoted by Q7: a hard publish-by date - the slowest rung; made the pick by Q1: a foundation, employer or sponsor already funds an accessibility line\n- rung 2: \"Published page and request channel\" | moved: promoted by Q7: a hard publish-by date (37 days away, hard at 56 or fewer - self-set) promotes the fast-acting rungs; promoted by Q8: a recurring event - the page is a reusable organizational asset, built once and edited each year\n- rung 3: \"Venue-floor facts\" | moved: promoted by Q7: a hard publish-by date\n- rung 4: \"On-site provision set\" | moved: promoted by Q1: a standing accessibility budget; made the pick by Q3: a known need this set answers (Quiet space)\n- deleted, not demoted: \"An accessibility page describing provisions not yet secured\" | reason: the skill: it would win the efficiency line outright - and converts into a broken promise for whoever travelled on it\n- notes: Value and effort share one order on this menu, so no rung dominates another and the compliance axis rescues nothing.\nMenu 2 - captioning and interpretation - pick: \"Live captioning in every room\"\n- rung 1: \"Live captioning in every room\" | moved: made the pick by Q1: an existing budget line\n- rung 2: \"On-request live provision\" | moved: promoted by Q7: a hard publish-by date promotes the fast-acting rung; made the pick by Q11: a meetup or small event usually stays on the on-request rung\n- rung 3: \"Live captioning, main days/room only\"\n- deleted, not demoted: \"Treating production capability as a captioning provision\" | reason: the skill: a capable broadcast operation is not a captioning provision until someone states, budgets and publishes what it covers\n- deleted, not demoted: \"Announcing an unvetted automatic feed as captioning coverage\" | reason: the skill: it would win efficiency on every live rung, and the attendee who relied on it discovers the gap mid-talk\n- deleted, not demoted: \"Post-event corrected captions\" | reason: not available: nothing is recorded or published\n- deleted, not demoted: \"Standing subtitle pipeline\" | reason: not available: nothing is recorded or published\n- notes: Every live rung assumes a human captioner (real-time stenotype captioning, also called CART). An automatic feed is a fallback inside a rung, never a rung: label it automatic on screen and on the page, and say which rooms have a human. Brief the captioner on the jargon before the event: the accessibility owner sends the programme, speaker names, slide decks when available and a glossary of product names, acronyms, library and tool names. Interpretation is not bundled with captioning at the same trigger: its trigger threshold is self-set - state the level chosen and why.\nMenu 3 - the request channel - pick: \"Registration-flow field\"\n- rung 1: \"Registration-flow field\" | moved: promoted by Q7: a hard publish-by date - ten minutes to add\n- rung 2: \"Named inbox with named people\" | moved: promoted by Q7: a hard publish-by date\n- rung 3: \"Structured form with a stated posture\" | moved: demoted by Q7: a hard publish-by date - the heaviest upfront review\n- deleted, not demoted: \"Routing requests to the general registration desk with no accessibility owner\" | reason: the skill, at any staffing level: not the cheap rung but the unowned one - the request is received, nobody is accountable, and the attendee learns this on the day\n- notes: First shrink what needs a request at all: a quiet space, all-gender restrooms, reserved seating and consent stickers work walk-up, and the people who most need them are the least likely to disclose. Only booked provisions need a channel - interpretation, childcare, a nursing room, an equipment rental, a grant. The funding pole does not move this menu: once an attendee discloses, a volunteer team and a foundation hold the same duty of care.\nBefore menu 4 - the slot (Q10): \"daytime\" | movable: no | excludes caregivers: no | hand to event-date-selection: no | note: A daytime slot - the slot does not exclude caregivers by itself; a full-day event still needs childcare to reach them.\nMenu 4 - economic access - pick: \"Ticket-side need-gated rung\"\n- rung 1: \"Ticket-side need-gated rung\" | moved: promoted by Q7: a hard publish-by date - the fast-acting rung\n- rung 2: \"Complimentary childcare\" | moved: promoted by Q1: a standing accessibility budget\n- rung 3: \"Subsidized childcare\"\n- rung 4: \"Travel and registration grant\" | moved: promoted by Q1: a standing accessibility budget; demoted by Q7: a hard publish-by date - an application cycle of about two months\n- deleted, not demoted: \"An unpublished hardship promise with no budget\" | reason: the skill: an unpublished 'email us and we'll see' hardship promise with no budget behind it\n- notes: Ticket price itself is not this skill's: the need-gated scholarship rung belongs to event-ticket-pricing - never a second application process for a route that already exists there. A subsidized fee looks cheaper and is not: the published fee sits against a real per-child-day cost roughly 4 times higher (PyCon US 2019, historical) - small budget relief, real administrative load.\nPeople attendees turn to (Q11) - pick: \"Organizers as the named contact\" | reason: Q11: a meetup or single-room day - attendees can see the organizers - skip the dedicated team; the organizers are the contact, named in the opening and on the event page. | conditions: Name the organizers in the opening and point at them; say the same on the event page. Matching shirts at a single-room event add a uniform, not reach. | Not the code-of-conduct response team: a member who hears a code-of-conduct violation hands it to that team under event-code-of-conduct's runbook - never investigates, decides or records it. A shared shirt requires every wearer to have that skill's staff briefing.\nProvision set - 21 provisions, known needs first, in this order:\n- provision: \"Quiet space\" | area: sensory | status: \"committed\" | depth: \"about 2 people at once (5% observed - self-set)\" | owner: \"Ines Brackwater\" | funded from: \"venue contract\" | known needs: 1 | basis: rationale: interaction load - conversation and interaction not allowed; away from the hub, dim, wheelchair-accessible, separate from any nursing room (AdaCamp)\n- provision: \"Step-free route\" | area: physical | status: \"committed\" | depth: \"every room the event uses\" | owner: \"Ines Brackwater\" | funded from: \"venue contract\" | known needs: 0 | basis: a property of the building - venue-floor facts, every rung\n- provision: \"Accessible bathrooms\" | area: physical | status: \"committed\" | depth: \"a checkable claim, by location\" | owner: \"Ines Brackwater\" | funded from: \"venue contract\" | known needs: 0 | basis: a property of the building - a specific checkable claim, never a general one\n- provision: \"Floor map\" | area: physical | status: \"committed\" | depth: \"areas, lifts, stairs, bathrooms, nursing\" | owner: \"Ines Brackwater\" | funded from: \"organizer hours\" | known needs: 0 | basis: published maps marking event areas, lifts, stairs, bathrooms and nursing stations (PyCon 2019, historical)\n- provision: \"Reserved seating\" | area: physical | status: \"committed\" | depth: \"2 seats per session room (self-set)\" | owner: \"Ines Brackwater\" | funded from: \"organizer hours\" | known needs: 0 | basis: available in each session for attendees with access needs (LF template), walk-up\n- provision: \"Companion ticket\" | area: physical | status: \"on request\" | depth: \"free, by writing to the owner\" | owner: \"Ines Brackwater\" | funded from: \"organizer hours\" | known needs: 0 | basis: registers separately and free, same badge and catering (PyCon 2019, historical)\n- provision: \"Mobility-equipment rental\" | area: physical | status: \"committed\" | depth: \"a named rental vendor, booked direct\" | owner: \"Ines Brackwater\" | funded from: \"accessibility budget\" | known needs: 0 | basis: a named third-party vendor for wheelchairs and scooters (LF template) - the pattern is naming a vendor at all\n- provision: \"Nursing room\" | area: sensory | status: \"committed\" | depth: \"exists unconditionally, location at check-in\" | owner: \"Ines Brackwater\" | funded from: \"venue contract\" | known needs: 0 | basis: stated to exist unconditionally, only its location withheld until check-in (LF template) - reaches people who would never ask\n- provision: \"All-gender restrooms\" | area: sensory | status: \"committed\" | depth: \"designated and named as such\" | owner: \"Ines Brackwater\" | funded from: \"venue contract\" | known needs: 0 | basis: designated specifically and named as such (LF template)\n- provision: \"Consent stickers\" | area: sensory | status: \"committed\" | depth: \"40 sets, one per attendee\" | owner: \"Ines Brackwater\" | funded from: \"organizer hours\" | known needs: 0 | basis: green open to talk, yellow only if you know me, red not interested in talking or being photographed - an access provision and a photo opt-out; enforcement lives with event-code-of-conduct\n- provision: \"Pronoun stickers\" | area: sensory | status: \"committed\" | depth: \"opt-in, at registration\" | owner: \"Ines Brackwater\" | funded from: \"organizer hours\" | known needs: 0 | basis: opt-in stickers at registration (LF template); what the choice says belongs to event-cultural-identity\n- provision: \"Live captioning\" | area: sensory | status: \"committed\" | depth: \"1 room x 1 day, 3 hours\" | owner: \"Ines Brackwater\" | funded from: \"accessibility budget\" | known needs: 0 | basis: menu 2: Live captioning in every room - a human captioner; an automatic feed is labelled automatic and never counted as coverage\n- provision: \"Sign-language interpretation\" | area: sensory | status: \"on request\" | depth: \"on request, 4 weeks' notice\" | owner: \"Ines Brackwater\" | funded from: \"accessibility budget\" | known needs: 0 | basis: interpreters only when notified by signing attendees (PyCon 2019, historical) - not bundled with captioning at the same trigger\n- provision: \"Hearing loop\" | area: sensory | status: \"committed\" | depth: \"every session room\" | owner: \"Ines Brackwater\" | funded from: \"venue contract\" | known needs: 0 | basis: delivered technically by event-production\n- provision: \"Dietary categories\" | area: dietary | status: \"committed\" | depth: \"a registration question\" | owner: \"Ines Brackwater\" | funded from: \"catering budget\" | known needs: 0 | basis: ask everyone who will be fed; vegetarian, vegan, celiac and gluten-free, common allergies, kosher, halal (hackathon guide); the eight common allergens plus sesame (IACC); fallbacks: a one-off supplier request, or a delivery credit with advance notice\n- provision: \"Restricted-meal table\" | area: dietary | status: \"committed\" | depth: \"separate table, printed name list\" | owner: \"Ines Brackwater\" | funded from: \"catering budget\" | known needs: 0 | basis: restricted meals held at a separate table and checked off a printed list (hackathon guide, standing practice)\n- provision: \"Need-gated ticket route\" | area: economic | status: \"committed\" | depth: \"owned by the ticket sibling\" | owner: \"event-ticket-pricing\" | funded from: \"ticket pricing\" | known needs: 0 | basis: point at event-ticket-pricing - never a second application process\n- provision: \"Childcare\" | area: economic | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: vendor due diligence: certified, background-checked, insured carers; ratios by age band; check-in and check-out logs (PyCon 2019, AdaCamp)\n- provision: \"Travel grant\" | area: economic | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: travel, hotel, registration and childcare in one application; onsite disbursement against receipts excludes anyone who cannot front the cost - publish that limit\n- provision: \"WCAG 2.2 AA web surfaces\" | area: digital | status: \"committed\" | depth: \"target AA, keyboard-checked\" | owner: \"site maintainer\" | funded from: \"organizer hours\" | known needs: 0 | basis: the event's own website, forms, schedule and stream only - never coverage of anything on site\n- provision: \"Captions on recordings\" | area: digital | status: \"not offered\" | depth: \"nothing is recorded\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: required on published media independently of live captioning\nPage sections - one per area, in this order: [physical; sensory; dietary; economic; digital]\n- area: physical | covered: [\"Step-free route\"; \"Accessible bathrooms\"; \"Floor map\"; \"Reserved seating\"; \"Companion ticket\"; \"Mobility-equipment rental\"] | not covered: [none]\n- area: sensory | covered: [\"Quiet space\"; \"Nursing room\"; \"All-gender restrooms\"; \"Consent stickers\"; \"Pronoun stickers\"; \"Live captioning\"; \"Sign-language interpretation\"; \"Hearing loop\"] | not covered: [none]\n- area: dietary | covered: [\"Dietary categories\"; \"Restricted-meal table\"] | not covered: [none]\n- area: economic | covered: [\"Need-gated ticket route\"] | not covered: [\"Childcare\"; \"Travel grant\"]\n- area: digital | covered: [\"WCAG 2.2 AA web surfaces\"] | not covered: [\"Captions on recordings\"]\nRequest channel: \"Registration-flow field\" | owner: \"Ines Brackwater\" | lead time: 4 weeks | requests-by date: 2027-04-17 | reply within: 3 days | delete-by date: 2027-05-29 | form fields: [\"Your name\"; \"How to reach you\"; \"What you need from us\"; \"By when you need it\"; \"Anything that would help us arrange it\"]\nData-handling posture (all five decided before the channel opens; the first three published): retention: \"every request deleted by 2027-05-29 (14 days after the event - self-set)\" | access: \"Ines Brackwater and only the organizers who arrange what was asked for\" | turnaround: \"a reply within 3 days, a decline included\" | where it lives: inside the ticketing platform's registration records, where retention is the platform's choice - the trade made for surfacing more needs | who decides a decline: Ines Brackwater, with the reason written down\nDigital layer checklist - the event's own website, forms, schedule and stream only, never anything on site, target WCAG 2.2 AA:\n- item: \"Registration and ticket flow\" | status: \"to check\" | POUR: operable | check: exercise it end to end with the keyboard only, including any date picker, dropdown and the payment step\n- item: \"Accommodation-request field\" | status: \"to check\" | POUR: understandable | check: labelled in text, its help text programmatically associated, its errors described in words - never a placeholder-only label\n- item: \"CFP form\" | status: \"to check\" | POUR: understandable | check: the same rules: a speaker who cannot submit is a speaker you never hear from\n- item: \"Schedule\" | status: \"to check\" | POUR: perceivable | check: contrast 4.5:1 for normal text and 3:1 for large text and interface components, track and status never by colour alone, usable at 200% zoom and on a narrow viewport\n- item: \"Accessibility page\" | status: \"to check\" | POUR: robust | check: it fails more often than expected, and failing there undercuts the claim it makes\n- item: \"Livestream player\" | status: \"not applicable\" | POUR: operable | check: keyboard-operable controls and a caption track that can be turned on\n- item: \"Captions on published recordings\" | status: \"not applicable\" | POUR: perceivable | check: required independently of live captioning; if the programme was captioned live, publish the transcript\n- item: \"Published program documents\" | status: \"to check\" | POUR: robust | check: tagged structure, reading order and real text - if the PDF cannot work, publish the same content as a web page\nHand-offs, in this order:\n- to: \"event-production\" | what: captioning delivery and the signal path, with the owner's jargon brief sent ahead, and the hearing loop\n- to: \"event-vendor-sourcing\" | what: the dietary commitment, into the catering brief\n- to: \"event-attendee-experience\" | what: placement and wayfinding of what was sized\n- to: \"event-ticket-pricing\" | what: the need-gated ticket rung and its application mechanic\n- to: \"event-code-of-conduct\" | what: incident intake and the consequence for recording someone wearing red\n- to: \"event-cultural-identity\" | what: what the pronoun option says\nStated gaps that apply, in this order: [\"dietary and childcare practice\"; \"quiet-space sizing\"; \"interpretation trigger threshold\"; \"jurisdictional duties\"]\n- \"dietary and childcare practice\" | two independent organizations each, and the catalog states the range where they diverge\n- \"quiet-space sizing\" | no established seat-to-attendee ratio anywhere sourced - AdaCamp's 5% is an observation; the figure is self-set\n- \"interpretation trigger threshold\" | self-set: nothing fixes the attendance or evidence level at which on-request stops being enough\n- \"jurisdictional duties\" | out of scope by construction - Q6 goes to counsel\nRequests: none pasted\nDay-of contact: \"Ines Brackwater and the organizers, named in the opening\" | last-updated date: 2027-02-01\nCarried from the plan: summary: \"Ready to publish: a signed accessible venue, a standing budget and a named owner carry the funded-access set; publish by 2027-03-10 with the registration field's retention rule stated.\" | picks: [depth \"Funded-access set\"; captioning \"Live captioning in every room\"; requests \"Registration-flow field\"; economic \"Ticket-side need-gated rung\"] | picks match the page: yes | statuses matching the page: 21 of 21\nFindings (7):\n[info] pole_standing (pole): Q1: a standing accessibility budget - it promotes the funded rungs; it never changes menu 3.\n[info] field_retention (requests): The registration-flow field puts health and disability data in the ticketing platform's records by default - state the retention rule on the form and delete at the debrief.\n[info] captioner_brief (captioning): Brief the captioner before the event: Ines Brackwater sends the programme, speaker names, slide decks when available and a glossary of product names, acronyms, library and tool names, at a lead time agreed with the captioner (self-set).\n[info] quiet_sizing (sensory): Quiet-space sizing has no established ratio anywhere sourced; the page's figure is AdaCamp's observation (about 5% of attendees at once), labelled self-set - decide it against the room you have.\n[info] known_first (needs): Known needs are provisioned first, against the evidence held, before a template - 1 known need listed first in the set.\n[info] hard_date (dates): Q7: the publish-by date is 37 days away (hard at 56 or fewer - self-set) - the fast-acting rungs are promoted on every menu.\n[info] not_legal_advice (scope): Not legal advice: access duties vary by jurisdiction - the page names the questions that need counsel and answers none of them."
}

Reply:

{
 "task": "page",
 "title": "Accessibility at Harbourside Rust Meetup - May 2027",
 "intro": "This page is for everyone coming to Harbourside Rust Meetup - May 2027 - disabled attendees, speakers and volunteers, caregivers, and anyone who needs something from us to take part. It says what we provide, what we do not, and how to ask, and it sits alongside our code of conduct.",
 "sections": [
  {
   "area": "physical",
   "covered": [
    "Step-free route",
    "Accessible bathrooms",
    "Floor map",
    "Reserved seating",
    "Companion ticket",
    "Mobility-equipment rental"
   ],
   "not_covered": [],
   "text": "Step-free route: provided (every room the event uses). Accessible bathrooms: provided (a checkable claim, by location). Floor map: provided (areas, lifts, stairs, bathrooms, nursing). Reserved seating: provided (2 seats per session room (self-set)). Companion ticket is available on request (free, by writing to the owner) - ask by 2027-04-17. Mobility-equipment rental: provided (a named rental vendor, booked direct)."
  },
  {
   "area": "sensory",
   "covered": [
    "Quiet space",
    "Nursing room",
    "All-gender restrooms",
    "Consent stickers",
    "Pronoun stickers",
    "Live captioning",
    "Sign-language interpretation",
    "Hearing loop"
   ],
   "not_covered": [],
   "text": "Quiet space: provided (about 2 people at once (5% observed - self-set)). Nursing room: provided (exists unconditionally, location at check-in). All-gender restrooms: provided (designated and named as such). Consent stickers: provided (40 sets, one per attendee). Pronoun stickers: provided (opt-in, at registration). Live captioning by a human captioner is provided in every room (1 room x 1 day, 3 hours). Sign-language interpretation is available on request (4 weeks' notice) - ask by 2027-04-17. Hearing loop: provided (every session room)."
  },
  {
   "area": "dietary",
   "covered": [
    "Dietary categories",
    "Restricted-meal table"
   ],
   "not_covered": [],
   "text": "Dietary categories: provided (a registration question). Restricted-meal table: provided (separate table, printed name list)."
  },
  {
   "area": "economic",
   "covered": [
    "Need-gated ticket route"
   ],
   "not_covered": [
    "Childcare",
    "Travel grant"
   ],
   "text": "A need-gated ticket route is open through our ticket team. Childcare is not offered at this edition. Travel grant: not provided at this edition."
  },
  {
   "area": "digital",
   "covered": [
    "WCAG 2.2 AA web surfaces"
   ],
   "not_covered": [
    "Captions on recordings"
   ],
   "text": "WCAG 2.2 AA web surfaces: provided (target AA, keyboard-checked). Captions on recordings: not provided at this edition."
  }
 ],
 "request_channel": {
  "channel": "Registration-flow field",
  "owner": "Ines Brackwater",
  "lead_time": "Ask by 2027-04-17 for anything that must be booked (4 weeks' notice).",
  "turnaround": "A reply within 3 days, a decline included.",
  "retention": "Deleted by 2027-05-29."
 },
 "day_of_contact": "Ines Brackwater and the organizers, named in the opening.",
 "last_updated": "2027-02-01",
 "form": {
  "fields": [
   "Your name",
   "How to reach you",
   "What you need from us",
   "By when you need it",
   "Anything that would help us arrange it"
  ],
  "statement": "Ines Brackwater reads these and replies within 3 days. What you tell us is shared only with the organizers who arrange what you asked for, and deleted by 2027-05-29."
 },
 "answers": [],
 "disclaimer": "This page is not legal advice; access duties vary by jurisdiction.",
 "note": "Publish the page by 2027-03-10 and open the registration-flow field with its retention rule stated on the form."
}

The page's check: kept - nothing to flag

A signed venue with a step-free gap - plan

Verdict: fix first; page ready to publish: no; depth: Venue-floor facts; request channel: No request channel - walk-up only; 7 of 21 provisions covered; 0 requests; 2 fix-level findings.

Input:

{
 "task": "plan",
 "event": "Event: \"Northgate Python Day 2027\" | dates: 2027-04-10 (1 day) | city: \"Northgate\" | attendance: 120 | format: workshops | session rooms: 2 | programme hours a day: 6 | recording: recorded and published | catering: catered meals | as of: 2026-12-01\nQ1 who funds the provision line: a community budget where every provision competes with catering\nQ2 venue signed: yes | the building's access facts: [step-free route to every room the event uses, with lifts - partly - not every room; wheelchair-accessible bathrooms - yes; a restroom that can be designated all-gender - no; spare rooms for a quiet space and a separate nursing room - one; a hearing loop in the session rooms - no]\nQ3 known needs: 1 (one per line in the needs field)\nQ4 a legal entity able to sign a vendor contract, carry insurance and disburse money: yes\nQ5 owner from now until the debrief: \"not named\" | kind: a role inbox, not a person\nQ6 jurisdiction: \"Northgate, Eastland\" | checked: not checked - a question for counsel | an institutional partner requires a structured form: no\nQ7 publish by: 2027-02-01 | days from the as-of date: 62\nQ8 edition: a one-off edition | a volunteer subtitling community exists: no | an in-house signing volunteer: no\nQ9 effort ceiling: organizer hours: 8 | someone to staff a request channel through to the event: no | budget committable before tickets sell: no\nQ10 time slot: daytime | still movable: no\nQ11 size: a meetup or single-room day - attendees can see the organizers\nRequest flow: lead time for booked provisions: 4 weeks | requests-by date: 2027-03-13 | reply within: 5 days | requests deleted: 14 days after the event | delete-by date: 2027-04-24",
 "needs": "Known needs (Q3), provisioned against evidence first - 1:\n- need 1 | provision: \"Step-free route\" | status: \"venue gap\" | need: \"Step-free access to the workshop room\" | evidence: \"a workshop leader who uses a wheelchair, declared in their proposal\" | asked: \"the upstairs workshop on a step-free floor\" | a speaker's need: yes",
 "requests": "",
 "facts": "Verdict: \"fix first\" | page ready to publish: no | fix-level findings: 2\nSelf-set lines: a hard publish-by date at 56 days or fewer | requests in volume at 10 known needs or more | a large event at 150 attendees or more | a low effort ceiling under 10 organizer hours | reserved seats at known needs plus 2 per room | the lead time, turnaround and retention entered on the form | a reply cap of 150 words. The references' own: the quiet room observation of about 5% of attendees at once (AdaCamp, an observation, not a standard) | contrast 4.5:1 for normal text and 3:1 for large text (WCAG 2.2 AA) | the subsidized fee about 4 times below real cost (PyCon US 2019, historical).\nWho funds it (Q1): \"a community budget where every provision competes with catering\" | notes: An attendee's access need is identical whether an employer or the attendee bought the ticket; no provision changes shape because of who paid - the axis that discriminates is who funds the provision line. Every provision competes with the money that would otherwise buy lunch: this moves menu 1 (depth), menu 2 (captioning) and menu 4 (economic access). Live captioning is also a sponsorable line ('captioning presented by ...'): budget the provision first, so it exists whether or not the line sells - a sale offsets the cost, it does not create the provision. It does not move menu 3: a two-person volunteer team and a foundation face the identical problem once an attendee discloses - the same duty of care, the same retention question, the same person who now has to answer.\nVenue (Q2): signed: yes | notes: Q2: the venue is signed. Almost every physical provision is a property of the building, so the building half of menu 1 is already chosen - what the building lacks is deleted for this edition, and the page states it rather than promising around it.\nMenu 1 - provision depth - pick: \"Venue-floor facts\"\n- rung 1: \"Venue-floor facts\" | moved: made the pick by Q9: nobody to answer a request channel\n- rung 2: \"Published page and request channel\" | moved: demoted by Q9: nobody to staff a request channel through to the event\n- rung 3: \"On-site provision set\" | moved: demoted by Q9: a low effort ceiling (under 10 organizer hours - self-set)\n- rung 4: \"Funded-access set\" | moved: demoted by Q1: a community budget - every provision competes with catering; demoted by Q9: a low effort ceiling; demoted by Q9: no budget committable before tickets sell\n- deleted, not demoted: \"An accessibility page describing provisions not yet secured\" | reason: the skill: it would win the efficiency line outright - and converts into a broken promise for whoever travelled on it\n- deleted, not demoted: \"The building's step-free route to every room the event uses, with lifts (only partly there)\" | reason: Q2: the venue is signed - a property of the building, deleted for this edition\n- deleted, not demoted: \"The building's restroom that can be designated all-gender (not there)\" | reason: Q2: the venue is signed - a property of the building, deleted for this edition\n- deleted, not demoted: \"The building's hearing loop in the session rooms (not there)\" | reason: Q2: the venue is signed - a property of the building, deleted for this edition\n- notes: Value and effort share one order on this menu, so no rung dominates another and the compliance axis rescues nothing.\nMenu 2 - captioning and interpretation - pick: \"Post-event corrected captions\"\n- rung 1: \"Post-event corrected captions\"\n- rung 2: \"Live captioning, main days/room only\" | moved: demoted by Q1: a community budget; demoted by Q9: a low effort ceiling (self-set line)\n- rung 3: \"Standing subtitle pipeline\"\n- rung 4: \"Live captioning in every room\" | moved: demoted by Q1: a community budget; demoted by Q9: a low effort ceiling (self-set line)\n- deleted, not demoted: \"Treating production capability as a captioning provision\" | reason: the skill: a capable broadcast operation is not a captioning provision until someone states, budgets and publishes what it covers\n- deleted, not demoted: \"Announcing an unvetted automatic feed as captioning coverage\" | reason: the skill: it would win efficiency on every live rung, and the attendee who relied on it discovers the gap mid-talk\n- deleted, not demoted: \"On-request live provision\" | reason: Q9: nobody staffs a request channel - an on-request provision cannot be asked for\n- notes: Every live rung assumes a human captioner (real-time stenotype captioning, also called CART). An automatic feed is a fallback inside a rung, never a rung: label it automatic on screen and on the page, and say which rooms have a human. Brief the captioner on the jargon before the event: the accessibility owner sends the programme, speaker names, slide decks when available and a glossary of product names, acronyms, library and tool names. Interpretation is not bundled with captioning at the same trigger: its trigger threshold is self-set - state the level chosen and why.\nMenu 3 - the request channel - pick: \"No request channel - walk-up only\"\n- deleted, not demoted: \"Routing requests to the general registration desk with no accessibility owner\" | reason: the skill, at any staffing level: not the cheap rung but the unowned one - the request is received, nobody is accountable, and the attendee learns this on the day\n- deleted, not demoted: \"Registration-flow field\" | reason: Q9: nobody to answer requests through to the event - every provision is designed to work walk-up instead\n- deleted, not demoted: \"Named inbox with named people\" | reason: Q9: nobody to answer requests through to the event - every provision is designed to work walk-up instead\n- deleted, not demoted: \"Structured form with a stated posture\" | reason: Q9: nobody to answer requests through to the event - every provision is designed to work walk-up instead\n- notes: First shrink what needs a request at all: a quiet space, all-gender restrooms, reserved seating and consent stickers work walk-up, and the people who most need them are the least likely to disclose. Only booked provisions need a channel - interpretation, childcare, a nursing room, an equipment rental, a grant. The funding pole does not move this menu: once an attendee discloses, a volunteer team and a foundation hold the same duty of care.\nBefore menu 4 - the slot (Q10): \"daytime\" | movable: no | excludes caregivers: no | hand to event-date-selection: no | note: A daytime slot - the slot does not exclude caregivers by itself; a full-day event still needs childcare to reach them.\nMenu 4 - economic access - pick: \"Ticket-side need-gated rung\"\n- rung 1: \"Ticket-side need-gated rung\"\n- deleted, not demoted: \"An unpublished hardship promise with no budget\" | reason: the skill: an unpublished 'email us and we'll see' hardship promise with no budget behind it\n- deleted, not demoted: \"Complimentary childcare\" | reason: Q9: nobody staffs a channel - childcare needs an RSVP\n- deleted, not demoted: \"Subsidized childcare\" | reason: Q9: nobody staffs a channel - childcare needs an RSVP\n- deleted, not demoted: \"Travel and registration grant\" | reason: Q9: nobody staffs a channel - an application cycle needs someone to run it\n- notes: Ticket price itself is not this skill's: the need-gated scholarship rung belongs to event-ticket-pricing - never a second application process for a route that already exists there. A subsidized fee looks cheaper and is not: the published fee sits against a real per-child-day cost roughly 4 times higher (PyCon US 2019, historical) - small budget relief, real administrative load.\nPeople attendees turn to (Q11) - pick: \"Organizers as the named contact\" | reason: Q11: a meetup or single-room day - attendees can see the organizers - skip the dedicated team; the organizers are the contact, named in the opening and on the event page. | conditions: Name the organizers in the opening and point at them; say the same on the event page. Matching shirts at a single-room event add a uniform, not reach. | Not the code-of-conduct response team: a member who hears a code-of-conduct violation hands it to that team under event-code-of-conduct's runbook - never investigates, decides or records it. A shared shirt requires every wearer to have that skill's staff briefing.\nProvision set - 21 provisions, known needs first, in this order:\n- provision: \"Step-free route\" | area: physical | status: \"venue gap\" | depth: \"not every room - name which\" | owner: \"not named\" | funded from: \"venue contract\" | known needs: 1 | basis: a property of the building - venue-floor facts, every rung\n- provision: \"Accessible bathrooms\" | area: physical | status: \"committed\" | depth: \"a checkable claim, by location\" | owner: \"not named\" | funded from: \"venue contract\" | known needs: 0 | basis: a property of the building - a specific checkable claim, never a general one\n- provision: \"Floor map\" | area: physical | status: \"committed\" | depth: \"areas, lifts, stairs, bathrooms, nursing\" | owner: \"not named\" | funded from: \"organizer hours\" | known needs: 0 | basis: published maps marking event areas, lifts, stairs, bathrooms and nursing stations (PyCon 2019, historical)\n- provision: \"Reserved seating\" | area: physical | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: available in each session for attendees with access needs (LF template), walk-up\n- provision: \"Companion ticket\" | area: physical | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: registers separately and free, same badge and catering (PyCon 2019, historical)\n- provision: \"Mobility-equipment rental\" | area: physical | status: \"not offered\" | depth: \"attendees source their own\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: a named third-party vendor for wheelchairs and scooters (LF template) - the pattern is naming a vendor at all\n- provision: \"Quiet space\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: rationale: sensory input - noise and light; away from the hub, dim, wheelchair-accessible, separate from any nursing room (AdaCamp)\n- provision: \"Nursing room\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: stated to exist unconditionally, only its location withheld until check-in (LF template) - reaches people who would never ask\n- provision: \"All-gender restrooms\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: designated specifically and named as such (LF template)\n- provision: \"Consent stickers\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: green open to talk, yellow only if you know me, red not interested in talking or being photographed - an access provision and a photo opt-out; enforcement lives with event-code-of-conduct\n- provision: \"Pronoun stickers\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: opt-in stickers at registration (LF template); what the choice says belongs to event-cultural-identity\n- provision: \"Live captioning\" | area: sensory | status: \"not offered\" | depth: \"post-event captions only\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: menu 2: Post-event corrected captions - a human captioner; an automatic feed is labelled automatic and never counted as coverage\n- provision: \"Sign-language interpretation\" | area: sensory | status: \"not offered\" | depth: \"no channel to ask through\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: interpreters only when notified by signing attendees (PyCon 2019, historical) - not bundled with captioning at the same trigger\n- provision: \"Hearing loop\" | area: sensory | status: \"venue gap\" | depth: \"the building has none\" | owner: \"not named\" | funded from: \"venue contract\" | known needs: 0 | basis: delivered technically by event-production\n- provision: \"Dietary categories\" | area: dietary | status: \"committed\" | depth: \"a registration question\" | owner: \"not named\" | funded from: \"catering budget\" | known needs: 0 | basis: ask everyone who will be fed; vegetarian, vegan, celiac and gluten-free, common allergies, kosher, halal (hackathon guide); the eight common allergens plus sesame (IACC); fallbacks: a one-off supplier request, or a delivery credit with advance notice\n- provision: \"Restricted-meal table\" | area: dietary | status: \"committed\" | depth: \"separate table, printed name list\" | owner: \"not named\" | funded from: \"catering budget\" | known needs: 0 | basis: restricted meals held at a separate table and checked off a printed list (hackathon guide, standing practice)\n- provision: \"Need-gated ticket route\" | area: economic | status: \"committed\" | depth: \"owned by the ticket sibling\" | owner: \"event-ticket-pricing\" | funded from: \"ticket pricing\" | known needs: 0 | basis: point at event-ticket-pricing - never a second application process\n- provision: \"Childcare\" | area: economic | status: \"not offered\" | depth: \"Q9: nobody staffs a channel\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: vendor due diligence: certified, background-checked, insured carers; ratios by age band; check-in and check-out logs (PyCon 2019, AdaCamp)\n- provision: \"Travel grant\" | area: economic | status: \"not offered\" | depth: \"Q9: nobody staffs a channel\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: travel, hotel, registration and childcare in one application; onsite disbursement against receipts excludes anyone who cannot front the cost - publish that limit\n- provision: \"WCAG 2.2 AA web surfaces\" | area: digital | status: \"committed\" | depth: \"target AA, keyboard-checked\" | owner: \"site maintainer\" | funded from: \"organizer hours\" | known needs: 0 | basis: the event's own website, forms, schedule and stream only - never coverage of anything on site\n- provision: \"Captions on recordings\" | area: digital | status: \"committed\" | depth: \"corrected captions, 12 recorded hours\" | owner: \"not named\" | funded from: \"organizer hours\" | known needs: 0 | basis: required on published media independently of live captioning\nPage sections - one per area, in this order: [physical; sensory; dietary; economic; digital]\n- area: physical | covered: [\"Accessible bathrooms\"; \"Floor map\"] | not covered: [\"Step-free route\"; \"Reserved seating\"; \"Companion ticket\"; \"Mobility-equipment rental\"]\n- area: sensory | covered: [none] | not covered: [\"Quiet space\"; \"Nursing room\"; \"All-gender restrooms\"; \"Consent stickers\"; \"Pronoun stickers\"; \"Live captioning\"; \"Sign-language interpretation\"; \"Hearing loop\"]\n- area: dietary | covered: [\"Dietary categories\"; \"Restricted-meal table\"] | not covered: [none]\n- area: economic | covered: [\"Need-gated ticket route\"] | not covered: [\"Childcare\"; \"Travel grant\"]\n- area: digital | covered: [\"WCAG 2.2 AA web surfaces\"; \"Captions on recordings\"] | not covered: [none]\nRequest channel: \"No request channel - walk-up only\" | owner: \"not named\" | lead time: 4 weeks | requests-by date: 2027-03-13 | reply within: 5 days | delete-by date: 2027-04-24 | form fields: [none - no channel]\nData-handling posture (all five decided before the channel opens; the first three published): retention: \"every request deleted by 2027-04-24 (14 days after the event - self-set)\" | access: \"the named owner and only the organizers who arrange what was asked for\" | turnaround: \"a reply within 5 days, a decline included\" | where it lives: nowhere - no request channel is open | who decides a decline: the named owner, with the reason written down\nDigital layer checklist - the event's own website, forms, schedule and stream only, never anything on site, target WCAG 2.2 AA:\n- item: \"Registration and ticket flow\" | status: \"to check\" | POUR: operable | check: exercise it end to end with the keyboard only, including any date picker, dropdown and the payment step\n- item: \"Accommodation-request field\" | status: \"not applicable\" | POUR: understandable | check: labelled in text, its help text programmatically associated, its errors described in words - never a placeholder-only label\n- item: \"CFP form\" | status: \"to check\" | POUR: understandable | check: the same rules: a speaker who cannot submit is a speaker you never hear from\n- item: \"Schedule\" | status: \"to check\" | POUR: perceivable | check: contrast 4.5:1 for normal text and 3:1 for large text and interface components, track and status never by colour alone, usable at 200% zoom and on a narrow viewport\n- item: \"Accessibility page\" | status: \"to check\" | POUR: robust | check: it fails more often than expected, and failing there undercuts the claim it makes\n- item: \"Livestream player\" | status: \"not applicable\" | POUR: operable | check: keyboard-operable controls and a caption track that can be turned on\n- item: \"Captions on published recordings\" | status: \"to check\" | POUR: perceivable | check: required independently of live captioning; if the programme was captioned live, publish the transcript\n- item: \"Published program documents\" | status: \"to check\" | POUR: robust | check: tagged structure, reading order and real text - if the PDF cannot work, publish the same content as a web page\nHand-offs, in this order:\n- to: \"event-production\" | what: captioning delivery and the signal path, with the owner's jargon brief sent ahead, and the hearing loop\n- to: \"event-vendor-sourcing\" | what: the dietary commitment, into the catering brief\n- to: \"event-speaker-experience\" | what: a speaker's declared need\n- to: \"event-attendee-experience\" | what: placement and wayfinding of what was sized\n- to: \"event-ticket-pricing\" | what: the need-gated ticket rung and its application mechanic\n- to: \"event-code-of-conduct\" | what: incident intake and the consequence for recording someone wearing red\nStated gaps that apply, in this order: [\"dietary and childcare practice\"; \"jurisdictional duties\"]\n- \"dietary and childcare practice\" | two independent organizations each, and the catalog states the range where they diverge\n- \"jurisdictional duties\" | out of scope by construction - Q6 goes to counsel\nRequests: none pasted\nDay-of contact: \"the organizers, named in the opening\" | last-updated date: 2026-12-01\nFindings (8):\n[fix] need_gap_1 (needs): Known need 1 (Step-free route): the signed building cannot meet it (not every room - name which) - move what it affects to a room that can, before the page goes out.\n[fix] role_owner (owner): Q5: \"the info@ inbox\" is a role inbox, not a person - name the person who owns accessibility until the debrief and answers every request.\n[check] jurisdiction (requests): Q6: nobody has checked what Northgate, Eastland requires of a public event and its disability data - a question for counsel, never answered here.\n[check] post_event_only (captioning): Menu 2 lands on post-event corrected captions: nobody in the room is captioned live - the page says so plainly, never 'the event is captioned'.\n[info] pole_community (pole): Q1: a community budget where every provision competes with catering - it moves menus 1, 2 and 4, never menu 3: the funding pole is not an excuse that reaches the request channel.\n[info] no_staff (requests): Q9: nobody staffs a request channel, so all three channel rungs are deleted - every provision on the page is designed to work walk-up, and nothing booked is promised.\n[info] known_first (needs): Known needs are provisioned first, against the evidence held, before a template - 1 known need listed first in the set.\n[info] not_legal_advice (scope): Not legal advice: access duties vary by jurisdiction - the page names the questions that need counsel and answers none of them."
}

Reply:

{
 "task": "plan",
 "summary": "Fix first: name a person as owner and move the workshop the known need affects to the step-free floor; nobody staffs requests, so every provision is walk-up.",
 "verdict": "fix first",
 "menus": {
  "depth": {
   "pick": "Venue-floor facts",
   "reason": "Made the pick by Q9: nobody to answer a request channel."
  },
  "captioning": {
   "pick": "Post-event corrected captions",
   "reason": "The cheap floor: correct an automated pass over published recordings - helps nobody in the room, never an answer to a live need."
  },
  "requests": {
   "pick": "No request channel - walk-up only",
   "reason": "Every rung is deleted: the skill, at any staffing level: not the cheap rung but the unowned one; Q9: nobody to answer requests through to the event."
  },
  "economic": {
   "pick": "Ticket-side need-gated rung",
   "reason": "The efficiency default: point at event-ticket-pricing, which owns the scholarship mechanic and its reviewer - spend nothing here; broadest reach, smallest cost removed."
  }
 },
 "slot_note": "A daytime slot - the slot does not exclude caregivers by itself; a full-day event still needs childcare to reach them.",
 "provisions": [
  {
   "area": "physical",
   "provision": "Step-free route",
   "depth": "not every room - name which",
   "owner": "not named",
   "funded_from": "venue contract",
   "status": "venue gap"
  },
  {
   "area": "physical",
   "provision": "Accessible bathrooms",
   "depth": "a checkable claim, by location",
   "owner": "not named",
   "funded_from": "venue contract",
   "status": "committed"
  },
  {
   "area": "physical",
   "provision": "Floor map",
   "depth": "areas, lifts, stairs, bathrooms, nursing",
   "owner": "not named",
   "funded_from": "organizer hours",
   "status": "committed"
  },
  {
   "area": "physical",
   "provision": "Reserved seating",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "physical",
   "provision": "Companion ticket",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "physical",
   "provision": "Mobility-equipment rental",
   "depth": "attendees source their own",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "sensory",
   "provision": "Quiet space",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "sensory",
   "provision": "Nursing room",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "sensory",
   "provision": "All-gender restrooms",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "sensory",
   "provision": "Consent stickers",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "sensory",
   "provision": "Pronoun stickers",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "sensory",
   "provision": "Live captioning",
   "depth": "post-event captions only",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "sensory",
   "provision": "Sign-language interpretation",
   "depth": "no channel to ask through",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "sensory",
   "provision": "Hearing loop",
   "depth": "the building has none",
   "owner": "not named",
   "funded_from": "venue contract",
   "status": "venue gap"
  },
  {
   "area": "dietary",
   "provision": "Dietary categories",
   "depth": "a registration question",
   "owner": "not named",
   "funded_from": "catering budget",
   "status": "committed"
  },
  {
   "area": "dietary",
   "provision": "Restricted-meal table",
   "depth": "separate table, printed name list",
   "owner": "not named",
   "funded_from": "catering budget",
   "status": "committed"
  },
  {
   "area": "economic",
   "provision": "Need-gated ticket route",
   "depth": "owned by the ticket sibling",
   "owner": "event-ticket-pricing",
   "funded_from": "ticket pricing",
   "status": "committed"
  },
  {
   "area": "economic",
   "provision": "Childcare",
   "depth": "Q9: nobody staffs a channel",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "economic",
   "provision": "Travel grant",
   "depth": "Q9: nobody staffs a channel",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "digital",
   "provision": "WCAG 2.2 AA web surfaces",
   "depth": "target AA, keyboard-checked",
   "owner": "site maintainer",
   "funded_from": "organizer hours",
   "status": "committed"
  },
  {
   "area": "digital",
   "provision": "Captions on recordings",
   "depth": "corrected captions, 12 recorded hours",
   "owner": "not named",
   "funded_from": "organizer hours",
   "status": "committed"
  }
 ],
 "people": {
  "pick": "Organizers as the named contact",
  "reason": "A meetup or single-room day - attendees can see the organizers - skip the dedicated team; the organizers are the contact, named in the opening and on the event page. Neither is the code of conduct response team's intake: a report goes to that team."
 },
 "digital": [
  {
   "item": "Registration and ticket flow",
   "status": "to check"
  },
  {
   "item": "Accommodation-request field",
   "status": "not applicable"
  },
  {
   "item": "CFP form",
   "status": "to check"
  },
  {
   "item": "Schedule",
   "status": "to check"
  },
  {
   "item": "Accessibility page",
   "status": "to check"
  },
  {
   "item": "Livestream player",
   "status": "not applicable"
  },
  {
   "item": "Captions on published recordings",
   "status": "to check"
  },
  {
   "item": "Published program documents",
   "status": "to check"
  }
 ],
 "handoffs": [
  {
   "to": "event-production",
   "what": "captioning delivery and the signal path, with the owner's jargon brief sent ahead, and the hearing loop"
  },
  {
   "to": "event-vendor-sourcing",
   "what": "the dietary commitment, into the catering brief"
  },
  {
   "to": "event-speaker-experience",
   "what": "a speaker's declared need"
  },
  {
   "to": "event-attendee-experience",
   "what": "placement and wayfinding of what was sized"
  },
  {
   "to": "event-ticket-pricing",
   "what": "the need-gated ticket rung and its application mechanic"
  },
  {
   "to": "event-code-of-conduct",
   "what": "incident intake and the consequence for recording someone wearing red"
  }
 ],
 "data": {
  "retention": "Every request is deleted by 2027-04-24, 14 days after the event (self-set).",
  "access": "The named owner and only the organizers who arrange what was asked for, shared only to arrange it.",
  "deletion": "Delete every request at the debrief, on the date the form states."
 },
 "gaps": [
  "dietary and childcare practice",
  "jurisdictional duties"
 ],
 "caveats": [
  "Known need 1 (Step-free route): the signed building cannot meet it (not every room - name which) - move what it affects to a room that can, before the page goes out.",
  "\"the info@ inbox\" is a role inbox, not a person - name the person who owns accessibility until the debrief and answers every request.",
  "nobody has checked what Northgate, Eastland requires of a public event and its disability data - a question for counsel, never answered here.",
  "Menu 2 lands on post-event corrected captions: nobody in the room is captioned live - the page says so plainly, never 'the event is captioned'."
 ]
}

The page's check: kept - nothing to flag

A signed venue with a step-free gap - page

Verdict: fix first; page ready to publish: no; depth: Venue-floor facts; request channel: No request channel - walk-up only; 7 of 21 provisions covered; 0 requests; 2 fix-level findings.

Input:

{
 "task": "page",
 "event": "Event: \"Northgate Python Day 2027\" | dates: 2027-04-10 (1 day) | city: \"Northgate\" | attendance: 120 | format: workshops | session rooms: 2 | programme hours a day: 6 | recording: recorded and published | catering: catered meals | as of: 2026-12-01\nQ1 who funds the provision line: a community budget where every provision competes with catering\nQ2 venue signed: yes | the building's access facts: [step-free route to every room the event uses, with lifts - partly - not every room; wheelchair-accessible bathrooms - yes; a restroom that can be designated all-gender - no; spare rooms for a quiet space and a separate nursing room - one; a hearing loop in the session rooms - no]\nQ3 known needs: 1 (one per line in the needs field)\nQ4 a legal entity able to sign a vendor contract, carry insurance and disburse money: yes\nQ5 owner from now until the debrief: \"not named\" | kind: a role inbox, not a person\nQ6 jurisdiction: \"Northgate, Eastland\" | checked: not checked - a question for counsel | an institutional partner requires a structured form: no\nQ7 publish by: 2027-02-01 | days from the as-of date: 62\nQ8 edition: a one-off edition | a volunteer subtitling community exists: no | an in-house signing volunteer: no\nQ9 effort ceiling: organizer hours: 8 | someone to staff a request channel through to the event: no | budget committable before tickets sell: no\nQ10 time slot: daytime | still movable: no\nQ11 size: a meetup or single-room day - attendees can see the organizers\nRequest flow: lead time for booked provisions: 4 weeks | requests-by date: 2027-03-13 | reply within: 5 days | requests deleted: 14 days after the event | delete-by date: 2027-04-24",
 "needs": "Known needs (Q3), provisioned against evidence first - 1:\n- need 1 | provision: \"Step-free route\" | status: \"venue gap\" | need: \"Step-free access to the workshop room\" | evidence: \"a workshop leader who uses a wheelchair, declared in their proposal\" | asked: \"the upstairs workshop on a step-free floor\" | a speaker's need: yes",
 "requests": "",
 "facts": "Verdict: \"fix first\" | page ready to publish: no | fix-level findings: 2\nSelf-set lines: a hard publish-by date at 56 days or fewer | requests in volume at 10 known needs or more | a large event at 150 attendees or more | a low effort ceiling under 10 organizer hours | reserved seats at known needs plus 2 per room | the lead time, turnaround and retention entered on the form | a reply cap of 150 words. The references' own: the quiet room observation of about 5% of attendees at once (AdaCamp, an observation, not a standard) | contrast 4.5:1 for normal text and 3:1 for large text (WCAG 2.2 AA) | the subsidized fee about 4 times below real cost (PyCon US 2019, historical).\nWho funds it (Q1): \"a community budget where every provision competes with catering\" | notes: An attendee's access need is identical whether an employer or the attendee bought the ticket; no provision changes shape because of who paid - the axis that discriminates is who funds the provision line. Every provision competes with the money that would otherwise buy lunch: this moves menu 1 (depth), menu 2 (captioning) and menu 4 (economic access). Live captioning is also a sponsorable line ('captioning presented by ...'): budget the provision first, so it exists whether or not the line sells - a sale offsets the cost, it does not create the provision. It does not move menu 3: a two-person volunteer team and a foundation face the identical problem once an attendee discloses - the same duty of care, the same retention question, the same person who now has to answer.\nVenue (Q2): signed: yes | notes: Q2: the venue is signed. Almost every physical provision is a property of the building, so the building half of menu 1 is already chosen - what the building lacks is deleted for this edition, and the page states it rather than promising around it.\nMenu 1 - provision depth - pick: \"Venue-floor facts\"\n- rung 1: \"Venue-floor facts\" | moved: made the pick by Q9: nobody to answer a request channel\n- rung 2: \"Published page and request channel\" | moved: demoted by Q9: nobody to staff a request channel through to the event\n- rung 3: \"On-site provision set\" | moved: demoted by Q9: a low effort ceiling (under 10 organizer hours - self-set)\n- rung 4: \"Funded-access set\" | moved: demoted by Q1: a community budget - every provision competes with catering; demoted by Q9: a low effort ceiling; demoted by Q9: no budget committable before tickets sell\n- deleted, not demoted: \"An accessibility page describing provisions not yet secured\" | reason: the skill: it would win the efficiency line outright - and converts into a broken promise for whoever travelled on it\n- deleted, not demoted: \"The building's step-free route to every room the event uses, with lifts (only partly there)\" | reason: Q2: the venue is signed - a property of the building, deleted for this edition\n- deleted, not demoted: \"The building's restroom that can be designated all-gender (not there)\" | reason: Q2: the venue is signed - a property of the building, deleted for this edition\n- deleted, not demoted: \"The building's hearing loop in the session rooms (not there)\" | reason: Q2: the venue is signed - a property of the building, deleted for this edition\n- notes: Value and effort share one order on this menu, so no rung dominates another and the compliance axis rescues nothing.\nMenu 2 - captioning and interpretation - pick: \"Post-event corrected captions\"\n- rung 1: \"Post-event corrected captions\"\n- rung 2: \"Live captioning, main days/room only\" | moved: demoted by Q1: a community budget; demoted by Q9: a low effort ceiling (self-set line)\n- rung 3: \"Standing subtitle pipeline\"\n- rung 4: \"Live captioning in every room\" | moved: demoted by Q1: a community budget; demoted by Q9: a low effort ceiling (self-set line)\n- deleted, not demoted: \"Treating production capability as a captioning provision\" | reason: the skill: a capable broadcast operation is not a captioning provision until someone states, budgets and publishes what it covers\n- deleted, not demoted: \"Announcing an unvetted automatic feed as captioning coverage\" | reason: the skill: it would win efficiency on every live rung, and the attendee who relied on it discovers the gap mid-talk\n- deleted, not demoted: \"On-request live provision\" | reason: Q9: nobody staffs a request channel - an on-request provision cannot be asked for\n- notes: Every live rung assumes a human captioner (real-time stenotype captioning, also called CART). An automatic feed is a fallback inside a rung, never a rung: label it automatic on screen and on the page, and say which rooms have a human. Brief the captioner on the jargon before the event: the accessibility owner sends the programme, speaker names, slide decks when available and a glossary of product names, acronyms, library and tool names. Interpretation is not bundled with captioning at the same trigger: its trigger threshold is self-set - state the level chosen and why.\nMenu 3 - the request channel - pick: \"No request channel - walk-up only\"\n- deleted, not demoted: \"Routing requests to the general registration desk with no accessibility owner\" | reason: the skill, at any staffing level: not the cheap rung but the unowned one - the request is received, nobody is accountable, and the attendee learns this on the day\n- deleted, not demoted: \"Registration-flow field\" | reason: Q9: nobody to answer requests through to the event - every provision is designed to work walk-up instead\n- deleted, not demoted: \"Named inbox with named people\" | reason: Q9: nobody to answer requests through to the event - every provision is designed to work walk-up instead\n- deleted, not demoted: \"Structured form with a stated posture\" | reason: Q9: nobody to answer requests through to the event - every provision is designed to work walk-up instead\n- notes: First shrink what needs a request at all: a quiet space, all-gender restrooms, reserved seating and consent stickers work walk-up, and the people who most need them are the least likely to disclose. Only booked provisions need a channel - interpretation, childcare, a nursing room, an equipment rental, a grant. The funding pole does not move this menu: once an attendee discloses, a volunteer team and a foundation hold the same duty of care.\nBefore menu 4 - the slot (Q10): \"daytime\" | movable: no | excludes caregivers: no | hand to event-date-selection: no | note: A daytime slot - the slot does not exclude caregivers by itself; a full-day event still needs childcare to reach them.\nMenu 4 - economic access - pick: \"Ticket-side need-gated rung\"\n- rung 1: \"Ticket-side need-gated rung\"\n- deleted, not demoted: \"An unpublished hardship promise with no budget\" | reason: the skill: an unpublished 'email us and we'll see' hardship promise with no budget behind it\n- deleted, not demoted: \"Complimentary childcare\" | reason: Q9: nobody staffs a channel - childcare needs an RSVP\n- deleted, not demoted: \"Subsidized childcare\" | reason: Q9: nobody staffs a channel - childcare needs an RSVP\n- deleted, not demoted: \"Travel and registration grant\" | reason: Q9: nobody staffs a channel - an application cycle needs someone to run it\n- notes: Ticket price itself is not this skill's: the need-gated scholarship rung belongs to event-ticket-pricing - never a second application process for a route that already exists there. A subsidized fee looks cheaper and is not: the published fee sits against a real per-child-day cost roughly 4 times higher (PyCon US 2019, historical) - small budget relief, real administrative load.\nPeople attendees turn to (Q11) - pick: \"Organizers as the named contact\" | reason: Q11: a meetup or single-room day - attendees can see the organizers - skip the dedicated team; the organizers are the contact, named in the opening and on the event page. | conditions: Name the organizers in the opening and point at them; say the same on the event page. Matching shirts at a single-room event add a uniform, not reach. | Not the code-of-conduct response team: a member who hears a code-of-conduct violation hands it to that team under event-code-of-conduct's runbook - never investigates, decides or records it. A shared shirt requires every wearer to have that skill's staff briefing.\nProvision set - 21 provisions, known needs first, in this order:\n- provision: \"Step-free route\" | area: physical | status: \"venue gap\" | depth: \"not every room - name which\" | owner: \"not named\" | funded from: \"venue contract\" | known needs: 1 | basis: a property of the building - venue-floor facts, every rung\n- provision: \"Accessible bathrooms\" | area: physical | status: \"committed\" | depth: \"a checkable claim, by location\" | owner: \"not named\" | funded from: \"venue contract\" | known needs: 0 | basis: a property of the building - a specific checkable claim, never a general one\n- provision: \"Floor map\" | area: physical | status: \"committed\" | depth: \"areas, lifts, stairs, bathrooms, nursing\" | owner: \"not named\" | funded from: \"organizer hours\" | known needs: 0 | basis: published maps marking event areas, lifts, stairs, bathrooms and nursing stations (PyCon 2019, historical)\n- provision: \"Reserved seating\" | area: physical | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: available in each session for attendees with access needs (LF template), walk-up\n- provision: \"Companion ticket\" | area: physical | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: registers separately and free, same badge and catering (PyCon 2019, historical)\n- provision: \"Mobility-equipment rental\" | area: physical | status: \"not offered\" | depth: \"attendees source their own\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: a named third-party vendor for wheelchairs and scooters (LF template) - the pattern is naming a vendor at all\n- provision: \"Quiet space\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: rationale: sensory input - noise and light; away from the hub, dim, wheelchair-accessible, separate from any nursing room (AdaCamp)\n- provision: \"Nursing room\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: stated to exist unconditionally, only its location withheld until check-in (LF template) - reaches people who would never ask\n- provision: \"All-gender restrooms\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: designated specifically and named as such (LF template)\n- provision: \"Consent stickers\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: green open to talk, yellow only if you know me, red not interested in talking or being photographed - an access provision and a photo opt-out; enforcement lives with event-code-of-conduct\n- provision: \"Pronoun stickers\" | area: sensory | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: opt-in stickers at registration (LF template); what the choice says belongs to event-cultural-identity\n- provision: \"Live captioning\" | area: sensory | status: \"not offered\" | depth: \"post-event captions only\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: menu 2: Post-event corrected captions - a human captioner; an automatic feed is labelled automatic and never counted as coverage\n- provision: \"Sign-language interpretation\" | area: sensory | status: \"not offered\" | depth: \"no channel to ask through\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: interpreters only when notified by signing attendees (PyCon 2019, historical) - not bundled with captioning at the same trigger\n- provision: \"Hearing loop\" | area: sensory | status: \"venue gap\" | depth: \"the building has none\" | owner: \"not named\" | funded from: \"venue contract\" | known needs: 0 | basis: delivered technically by event-production\n- provision: \"Dietary categories\" | area: dietary | status: \"committed\" | depth: \"a registration question\" | owner: \"not named\" | funded from: \"catering budget\" | known needs: 0 | basis: ask everyone who will be fed; vegetarian, vegan, celiac and gluten-free, common allergies, kosher, halal (hackathon guide); the eight common allergens plus sesame (IACC); fallbacks: a one-off supplier request, or a delivery credit with advance notice\n- provision: \"Restricted-meal table\" | area: dietary | status: \"committed\" | depth: \"separate table, printed name list\" | owner: \"not named\" | funded from: \"catering budget\" | known needs: 0 | basis: restricted meals held at a separate table and checked off a printed list (hackathon guide, standing practice)\n- provision: \"Need-gated ticket route\" | area: economic | status: \"committed\" | depth: \"owned by the ticket sibling\" | owner: \"event-ticket-pricing\" | funded from: \"ticket pricing\" | known needs: 0 | basis: point at event-ticket-pricing - never a second application process\n- provision: \"Childcare\" | area: economic | status: \"not offered\" | depth: \"Q9: nobody staffs a channel\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: vendor due diligence: certified, background-checked, insured carers; ratios by age band; check-in and check-out logs (PyCon 2019, AdaCamp)\n- provision: \"Travel grant\" | area: economic | status: \"not offered\" | depth: \"Q9: nobody staffs a channel\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: travel, hotel, registration and childcare in one application; onsite disbursement against receipts excludes anyone who cannot front the cost - publish that limit\n- provision: \"WCAG 2.2 AA web surfaces\" | area: digital | status: \"committed\" | depth: \"target AA, keyboard-checked\" | owner: \"site maintainer\" | funded from: \"organizer hours\" | known needs: 0 | basis: the event's own website, forms, schedule and stream only - never coverage of anything on site\n- provision: \"Captions on recordings\" | area: digital | status: \"committed\" | depth: \"corrected captions, 12 recorded hours\" | owner: \"not named\" | funded from: \"organizer hours\" | known needs: 0 | basis: required on published media independently of live captioning\nPage sections - one per area, in this order: [physical; sensory; dietary; economic; digital]\n- area: physical | covered: [\"Accessible bathrooms\"; \"Floor map\"] | not covered: [\"Step-free route\"; \"Reserved seating\"; \"Companion ticket\"; \"Mobility-equipment rental\"]\n- area: sensory | covered: [none] | not covered: [\"Quiet space\"; \"Nursing room\"; \"All-gender restrooms\"; \"Consent stickers\"; \"Pronoun stickers\"; \"Live captioning\"; \"Sign-language interpretation\"; \"Hearing loop\"]\n- area: dietary | covered: [\"Dietary categories\"; \"Restricted-meal table\"] | not covered: [none]\n- area: economic | covered: [\"Need-gated ticket route\"] | not covered: [\"Childcare\"; \"Travel grant\"]\n- area: digital | covered: [\"WCAG 2.2 AA web surfaces\"; \"Captions on recordings\"] | not covered: [none]\nRequest channel: \"No request channel - walk-up only\" | owner: \"not named\" | lead time: 4 weeks | requests-by date: 2027-03-13 | reply within: 5 days | delete-by date: 2027-04-24 | form fields: [none - no channel]\nData-handling posture (all five decided before the channel opens; the first three published): retention: \"every request deleted by 2027-04-24 (14 days after the event - self-set)\" | access: \"the named owner and only the organizers who arrange what was asked for\" | turnaround: \"a reply within 5 days, a decline included\" | where it lives: nowhere - no request channel is open | who decides a decline: the named owner, with the reason written down\nDigital layer checklist - the event's own website, forms, schedule and stream only, never anything on site, target WCAG 2.2 AA:\n- item: \"Registration and ticket flow\" | status: \"to check\" | POUR: operable | check: exercise it end to end with the keyboard only, including any date picker, dropdown and the payment step\n- item: \"Accommodation-request field\" | status: \"not applicable\" | POUR: understandable | check: labelled in text, its help text programmatically associated, its errors described in words - never a placeholder-only label\n- item: \"CFP form\" | status: \"to check\" | POUR: understandable | check: the same rules: a speaker who cannot submit is a speaker you never hear from\n- item: \"Schedule\" | status: \"to check\" | POUR: perceivable | check: contrast 4.5:1 for normal text and 3:1 for large text and interface components, track and status never by colour alone, usable at 200% zoom and on a narrow viewport\n- item: \"Accessibility page\" | status: \"to check\" | POUR: robust | check: it fails more often than expected, and failing there undercuts the claim it makes\n- item: \"Livestream player\" | status: \"not applicable\" | POUR: operable | check: keyboard-operable controls and a caption track that can be turned on\n- item: \"Captions on published recordings\" | status: \"to check\" | POUR: perceivable | check: required independently of live captioning; if the programme was captioned live, publish the transcript\n- item: \"Published program documents\" | status: \"to check\" | POUR: robust | check: tagged structure, reading order and real text - if the PDF cannot work, publish the same content as a web page\nHand-offs, in this order:\n- to: \"event-production\" | what: captioning delivery and the signal path, with the owner's jargon brief sent ahead, and the hearing loop\n- to: \"event-vendor-sourcing\" | what: the dietary commitment, into the catering brief\n- to: \"event-speaker-experience\" | what: a speaker's declared need\n- to: \"event-attendee-experience\" | what: placement and wayfinding of what was sized\n- to: \"event-ticket-pricing\" | what: the need-gated ticket rung and its application mechanic\n- to: \"event-code-of-conduct\" | what: incident intake and the consequence for recording someone wearing red\nStated gaps that apply, in this order: [\"dietary and childcare practice\"; \"jurisdictional duties\"]\n- \"dietary and childcare practice\" | two independent organizations each, and the catalog states the range where they diverge\n- \"jurisdictional duties\" | out of scope by construction - Q6 goes to counsel\nRequests: none pasted\nDay-of contact: \"the organizers, named in the opening\" | last-updated date: 2026-12-01\nCarried from the plan: summary: \"Fix first: name a person as owner and move the workshop the known need affects to the step-free floor; nobody staffs requests, so every provision is walk-up.\" | picks: [depth \"Venue-floor facts\"; captioning \"Post-event corrected captions\"; requests \"No request channel - walk-up only\"; economic \"Ticket-side need-gated rung\"] | picks match the page: yes | statuses matching the page: 21 of 21\nFindings (8):\n[fix] need_gap_1 (needs): Known need 1 (Step-free route): the signed building cannot meet it (not every room - name which) - move what it affects to a room that can, before the page goes out.\n[fix] role_owner (owner): Q5: \"the info@ inbox\" is a role inbox, not a person - name the person who owns accessibility until the debrief and answers every request.\n[check] jurisdiction (requests): Q6: nobody has checked what Northgate, Eastland requires of a public event and its disability data - a question for counsel, never answered here.\n[check] post_event_only (captioning): Menu 2 lands on post-event corrected captions: nobody in the room is captioned live - the page says so plainly, never 'the event is captioned'.\n[info] pole_community (pole): Q1: a community budget where every provision competes with catering - it moves menus 1, 2 and 4, never menu 3: the funding pole is not an excuse that reaches the request channel.\n[info] no_staff (requests): Q9: nobody staffs a request channel, so all three channel rungs are deleted - every provision on the page is designed to work walk-up, and nothing booked is promised.\n[info] known_first (needs): Known needs are provisioned first, against the evidence held, before a template - 1 known need listed first in the set.\n[info] not_legal_advice (scope): Not legal advice: access duties vary by jurisdiction - the page names the questions that need counsel and answers none of them."
}

Reply:

{
 "task": "page",
 "title": "Accessibility at Northgate Python Day 2027",
 "intro": "This page is for everyone coming to Northgate Python Day 2027 - disabled attendees, speakers and volunteers, caregivers, and anyone who needs something from us to take part. It says what we provide, what we do not, and how to ask, and it sits alongside our code of conduct.",
 "sections": [
  {
   "area": "physical",
   "covered": [
    "Accessible bathrooms",
    "Floor map"
   ],
   "not_covered": [
    "Step-free route",
    "Reserved seating",
    "Companion ticket",
    "Mobility-equipment rental"
   ],
   "text": "Not every room is step-free: some rooms are reached only by stairs, and the floor map names them. Accessible bathrooms: provided (a checkable claim, by location). Floor map: provided (areas, lifts, stairs, bathrooms, nursing). Reserved seating: not provided at this edition. Companion ticket: not provided at this edition. Mobility-equipment rental: not provided at this edition."
  },
  {
   "area": "sensory",
   "covered": [],
   "not_covered": [
    "Quiet space",
    "Nursing room",
    "All-gender restrooms",
    "Consent stickers",
    "Pronoun stickers",
    "Live captioning",
    "Sign-language interpretation",
    "Hearing loop"
   ],
   "text": "Quiet space: not provided at this edition. Nursing room: not provided at this edition. All-gender restrooms: not provided at this edition. Consent stickers: not provided at this edition. Pronoun stickers: not provided at this edition. Talks are not captioned live; the published recordings get corrected captions afterwards. Sign-language interpretation: not provided at this edition. Hearing loop: not available in this building (the building has none)."
  },
  {
   "area": "dietary",
   "covered": [
    "Dietary categories",
    "Restricted-meal table"
   ],
   "not_covered": [],
   "text": "Dietary categories: provided (a registration question). Restricted-meal table: provided (separate table, printed name list)."
  },
  {
   "area": "economic",
   "covered": [
    "Need-gated ticket route"
   ],
   "not_covered": [
    "Childcare",
    "Travel grant"
   ],
   "text": "A need-gated ticket route is open through our ticket team. Childcare is not offered at this edition. Travel grant: not provided at this edition."
  },
  {
   "area": "digital",
   "covered": [
    "WCAG 2.2 AA web surfaces",
    "Captions on recordings"
   ],
   "not_covered": [],
   "text": "WCAG 2.2 AA web surfaces: provided (target AA, keyboard-checked). Captions on recordings: provided (corrected captions, 12 recorded hours)."
  }
 ],
 "request_channel": {
  "channel": "No request channel - walk-up only",
  "owner": "not named",
  "lead_time": "not applicable",
  "turnaround": "not applicable",
  "retention": "not applicable"
 },
 "day_of_contact": "The organizers, named in the opening.",
 "last_updated": "2026-12-01",
 "form": {
  "fields": [],
  "statement": "No request form is open: every provision on this page works walk-up, without asking anyone."
 },
 "answers": [],
 "disclaimer": "This page is not legal advice; access duties vary by jurisdiction.",
 "note": "Not ready to publish: name the person who owns accessibility, and move the workshop the known need affects to the step-free floor."
}

The page's check: kept - nothing to flag

An evening meetup, requests in good time - plan

Verdict: answer the requests; page ready to publish: yes; depth: On-site provision set; request channel: Structured form with a stated posture; 19 of 21 provisions covered; 3 requests; 0 fix-level findings.

Input:

{
 "task": "plan",
 "event": "Event: \"Riverside JS Night - June 2027\" | dates: 2027-06-09 (1 day) | city: \"Riverside\" | attendance: 70 | format: talks | session rooms: 1 | programme hours a day: 3 | recording: streamed live and published | catering: light refreshments | as of: 2027-04-20\nQ1 who funds the provision line: a community budget where every provision competes with catering\nQ2 venue signed: yes | the building's access facts: [step-free route to every room the event uses, with lifts - yes; wheelchair-accessible bathrooms - yes; a restroom that can be designated all-gender - yes; spare rooms for a quiet space and a separate nursing room - two or more; a hearing loop in the session rooms - yes]\nQ3 known needs: 2 (one per line in the needs field)\nQ4 a legal entity able to sign a vendor contract, carry insurance and disburse money: yes\nQ5 owner from now until the debrief: \"Kofi Thistlewood\" | kind: a named person\nQ6 jurisdiction: \"Riverside, Westmark\" | checked: not checked - a question for counsel | an institutional partner requires a structured form: yes\nQ7 publish by: 2027-04-25 | days from the as-of date: 5\nQ8 edition: one year of a recurring event | a volunteer subtitling community exists: no | an in-house signing volunteer: yes\nQ9 effort ceiling: organizer hours: 25 | someone to staff a request channel through to the event: yes | budget committable before tickets sell: yes\nQ10 time slot: evening | still movable: yes\nQ11 size: a meetup or single-room day - attendees can see the organizers\nRequest flow: lead time for booked provisions: 3 weeks | requests-by date: 2027-05-19 | reply within: 5 days | requests deleted: 14 days after the event | delete-by date: 2027-06-23",
 "needs": "Known needs (Q3), provisioned against evidence first - 2:\n- need 1 | provision: \"Childcare\" | status: \"committed\" | need: \"Childcare during the talks\" | evidence: \"two regulars asked at the March meetup\" | asked: \"childcare on site\" | a speaker's need: no\n- need 2 | provision: \"Nursing room\" | status: \"committed\" | need: \"A private room to pump\" | evidence: \"one regular asked in March\" | asked: \"a lockable private room\" | a speaker's need: no",
 "requests": "received: 2027-04-12\nCould you arrange a sign-language interpreter for the June talks? I sign ASL.\n\nreceived: 2027-04-18\nCould my two children use the childcare? They are 4 and 7.\n\nreceived: 2027-04-19\nIs there somewhere quiet I can step away to during the break?",
 "facts": "Verdict: \"answer the requests\" | page ready to publish: yes | fix-level findings: 0\nSelf-set lines: a hard publish-by date at 56 days or fewer | requests in volume at 10 known needs or more | a large event at 150 attendees or more | a low effort ceiling under 10 organizer hours | reserved seats at known needs plus 2 per room | the lead time, turnaround and retention entered on the form | a reply cap of 150 words. The references' own: the quiet room observation of about 5% of attendees at once (AdaCamp, an observation, not a standard) | contrast 4.5:1 for normal text and 3:1 for large text (WCAG 2.2 AA) | the subsidized fee about 4 times below real cost (PyCon US 2019, historical).\nWho funds it (Q1): \"a community budget where every provision competes with catering\" | notes: An attendee's access need is identical whether an employer or the attendee bought the ticket; no provision changes shape because of who paid - the axis that discriminates is who funds the provision line. Every provision competes with the money that would otherwise buy lunch: this moves menu 1 (depth), menu 2 (captioning) and menu 4 (economic access). Live captioning is also a sponsorable line ('captioning presented by ...'): budget the provision first, so it exists whether or not the line sells - a sale offsets the cost, it does not create the provision. It does not move menu 3: a two-person volunteer team and a foundation face the identical problem once an attendee discloses - the same duty of care, the same retention question, the same person who now has to answer.\nVenue (Q2): signed: yes | notes: Q2: the venue is signed. Almost every physical provision is a property of the building, so the building half of menu 1 is already chosen - what the building lacks is deleted for this edition, and the page states it rather than promising around it.\nMenu 1 - provision depth - pick: \"On-site provision set\"\n- rung 1: \"On-site provision set\" | moved: made the pick by Q3: a known need this set answers (Nursing room)\n- rung 2: \"Published page and request channel\" | moved: promoted by Q7: a hard publish-by date (5 days away, hard at 56 or fewer - self-set) promotes the fast-acting rungs; promoted by Q8: a recurring event - the page is a reusable organizational asset, built once and edited each year\n- rung 3: \"Venue-floor facts\" | moved: promoted by Q7: a hard publish-by date\n- rung 4: \"Funded-access set\" | moved: demoted by Q1: a community budget - every provision competes with catering; demoted by Q7: a hard publish-by date - the slowest rung\n- deleted, not demoted: \"An accessibility page describing provisions not yet secured\" | reason: the skill: it would win the efficiency line outright - and converts into a broken promise for whoever travelled on it\n- notes: Value and effort share one order on this menu, so no rung dominates another and the compliance axis rescues nothing.\nMenu 2 - captioning and interpretation - pick: \"On-request live provision\"\n- rung 1: \"On-request live provision\" | moved: promoted by Q7: a hard publish-by date promotes the fast-acting rung; made the pick by Q11: a meetup or small event usually stays on the on-request rung\n- rung 2: \"Post-event corrected captions\"\n- rung 3: \"Live captioning, main days/room only\" | moved: demoted by Q1: a community budget\n- rung 4: \"Standing subtitle pipeline\"\n- rung 5: \"Live captioning in every room\" | moved: demoted by Q1: a community budget\n- deleted, not demoted: \"Treating production capability as a captioning provision\" | reason: the skill: a capable broadcast operation is not a captioning provision until someone states, budgets and publishes what it covers\n- deleted, not demoted: \"Announcing an unvetted automatic feed as captioning coverage\" | reason: the skill: it would win efficiency on every live rung, and the attendee who relied on it discovers the gap mid-talk\n- notes: Every live rung assumes a human captioner (real-time stenotype captioning, also called CART). An automatic feed is a fallback inside a rung, never a rung: label it automatic on screen and on the page, and say which rooms have a human. Brief the captioner on the jargon before the event: the accessibility owner sends the programme, speaker names, slide decks when available and a glossary of product names, acronyms, library and tool names. Interpretation is not bundled with captioning at the same trigger: its trigger threshold is self-set - state the level chosen and why. An in-house signing volunteer overturns the default: interpretation can be offered from inside the team - confirm availability per session.\nMenu 3 - the request channel - pick: \"Structured form with a stated posture\"\n- rung 1: \"Structured form with a stated posture\" | moved: demoted by Q7: a hard publish-by date - the heaviest upfront review; made the pick by an institutional partner requires it\n- rung 2: \"Registration-flow field\" | moved: promoted by Q7: a hard publish-by date - ten minutes to add\n- rung 3: \"Named inbox with named people\" | moved: promoted by Q7: a hard publish-by date; made the pick by Q6: the jurisdiction's data rules are unanswered - the inbox is promoted over the field\n- deleted, not demoted: \"Routing requests to the general registration desk with no accessibility owner\" | reason: the skill, at any staffing level: not the cheap rung but the unowned one - the request is received, nobody is accountable, and the attendee learns this on the day\n- notes: First shrink what needs a request at all: a quiet space, all-gender restrooms, reserved seating and consent stickers work walk-up, and the people who most need them are the least likely to disclose. Only booked provisions need a channel - interpretation, childcare, a nursing room, an equipment rental, a grant. The funding pole does not move this menu: once an attendee discloses, a volunteer team and a foundation hold the same duty of care.\nBefore menu 4 - the slot (Q10): \"evening\" | movable: yes | excludes caregivers: yes | hand to event-date-selection: yes | note: An evening slot excludes caregivers before any provision can reach them, and it is still movable - moving it costs nothing now and is cheaper than any childcare rung: hand it to event-date-selection (time of day).\nMenu 4 - economic access - pick: \"Complimentary childcare\"\n- rung 1: \"Complimentary childcare\" | moved: made the pick by Q3: a caregiving population in the audience (1 known need)\n- rung 2: \"Ticket-side need-gated rung\" | moved: promoted by Q7: a hard publish-by date - the fast-acting rung\n- rung 3: \"Subsidized childcare\" | moved: promoted by Q1: a community budget - the budget line, not organizer hours, is what binds\n- rung 4: \"Travel and registration grant\" | moved: demoted by Q7: a hard publish-by date - an application cycle of about two months\n- deleted, not demoted: \"An unpublished hardship promise with no budget\" | reason: the skill: an unpublished 'email us and we'll see' hardship promise with no budget behind it\n- notes: Ticket price itself is not this skill's: the need-gated scholarship rung belongs to event-ticket-pricing - never a second application process for a route that already exists there. A subsidized fee looks cheaper and is not: the published fee sits against a real per-child-day cost roughly 4 times higher (PyCon US 2019, historical) - small budget relief, real administrative load.\nPeople attendees turn to (Q11) - pick: \"Organizers as the named contact\" | reason: Q11: a meetup or single-room day - attendees can see the organizers - skip the dedicated team; the organizers are the contact, named in the opening and on the event page. | conditions: Name the organizers in the opening and point at them; say the same on the event page. Matching shirts at a single-room event add a uniform, not reach. | Not the code-of-conduct response team: a member who hears a code-of-conduct violation hands it to that team under event-code-of-conduct's runbook - never investigates, decides or records it. A shared shirt requires every wearer to have that skill's staff briefing.\nProvision set - 21 provisions, known needs first, in this order:\n- provision: \"Childcare\" | area: economic | status: \"committed\" | depth: \"free, RSVP, ratios 1:2 to 1:6\" | owner: \"Kofi Thistlewood\" | funded from: \"community budget\" | known needs: 1 | basis: vendor due diligence: certified, background-checked, insured carers; ratios by age band; check-in and check-out logs (PyCon 2019, AdaCamp)\n- provision: \"Nursing room\" | area: sensory | status: \"committed\" | depth: \"exists unconditionally, location at check-in\" | owner: \"Kofi Thistlewood\" | funded from: \"venue contract\" | known needs: 1 | basis: stated to exist unconditionally, only its location withheld until check-in (LF template) - reaches people who would never ask\n- provision: \"Step-free route\" | area: physical | status: \"committed\" | depth: \"every room the event uses\" | owner: \"Kofi Thistlewood\" | funded from: \"venue contract\" | known needs: 0 | basis: a property of the building - venue-floor facts, every rung\n- provision: \"Accessible bathrooms\" | area: physical | status: \"committed\" | depth: \"a checkable claim, by location\" | owner: \"Kofi Thistlewood\" | funded from: \"venue contract\" | known needs: 0 | basis: a property of the building - a specific checkable claim, never a general one\n- provision: \"Floor map\" | area: physical | status: \"committed\" | depth: \"areas, lifts, stairs, bathrooms, nursing\" | owner: \"Kofi Thistlewood\" | funded from: \"organizer hours\" | known needs: 0 | basis: published maps marking event areas, lifts, stairs, bathrooms and nursing stations (PyCon 2019, historical)\n- provision: \"Reserved seating\" | area: physical | status: \"committed\" | depth: \"2 seats per session room (self-set)\" | owner: \"Kofi Thistlewood\" | funded from: \"organizer hours\" | known needs: 0 | basis: available in each session for attendees with access needs (LF template), walk-up\n- provision: \"Companion ticket\" | area: physical | status: \"on request\" | depth: \"free, by writing to the owner\" | owner: \"Kofi Thistlewood\" | funded from: \"organizer hours\" | known needs: 0 | basis: registers separately and free, same badge and catering (PyCon 2019, historical)\n- provision: \"Mobility-equipment rental\" | area: physical | status: \"not offered\" | depth: \"attendees source their own\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: a named third-party vendor for wheelchairs and scooters (LF template) - the pattern is naming a vendor at all\n- provision: \"Quiet space\" | area: sensory | status: \"committed\" | depth: \"about 4 people at once (5% observed - self-set)\" | owner: \"Kofi Thistlewood\" | funded from: \"venue contract\" | known needs: 0 | basis: rationale: sensory input - noise and light; away from the hub, dim, wheelchair-accessible, separate from any nursing room (AdaCamp)\n- provision: \"All-gender restrooms\" | area: sensory | status: \"committed\" | depth: \"designated and named as such\" | owner: \"Kofi Thistlewood\" | funded from: \"venue contract\" | known needs: 0 | basis: designated specifically and named as such (LF template)\n- provision: \"Consent stickers\" | area: sensory | status: \"committed\" | depth: \"70 sets, one per attendee\" | owner: \"Kofi Thistlewood\" | funded from: \"organizer hours\" | known needs: 0 | basis: green open to talk, yellow only if you know me, red not interested in talking or being photographed - an access provision and a photo opt-out; enforcement lives with event-code-of-conduct\n- provision: \"Pronoun stickers\" | area: sensory | status: \"committed\" | depth: \"opt-in, at registration\" | owner: \"Kofi Thistlewood\" | funded from: \"organizer hours\" | known needs: 0 | basis: opt-in stickers at registration (LF template); what the choice says belongs to event-cultural-identity\n- provision: \"Live captioning\" | area: sensory | status: \"on request\" | depth: \"human captioner, 3 weeks' notice\" | owner: \"Kofi Thistlewood\" | funded from: \"community budget\" | known needs: 0 | basis: menu 2: On-request live provision - a human captioner; an automatic feed is labelled automatic and never counted as coverage\n- provision: \"Sign-language interpretation\" | area: sensory | status: \"on request\" | depth: \"in-house signing volunteer, on request\" | owner: \"Kofi Thistlewood\" | funded from: \"community budget\" | known needs: 0 | basis: interpreters only when notified by signing attendees (PyCon 2019, historical) - not bundled with captioning at the same trigger\n- provision: \"Hearing loop\" | area: sensory | status: \"committed\" | depth: \"every session room\" | owner: \"Kofi Thistlewood\" | funded from: \"venue contract\" | known needs: 0 | basis: delivered technically by event-production\n- provision: \"Dietary categories\" | area: dietary | status: \"committed\" | depth: \"a registration question\" | owner: \"Kofi Thistlewood\" | funded from: \"catering budget\" | known needs: 0 | basis: ask everyone who will be fed; vegetarian, vegan, celiac and gluten-free, common allergies, kosher, halal (hackathon guide); the eight common allergens plus sesame (IACC); fallbacks: a one-off supplier request, or a delivery credit with advance notice\n- provision: \"Restricted-meal table\" | area: dietary | status: \"committed\" | depth: \"separate table, printed name list\" | owner: \"Kofi Thistlewood\" | funded from: \"catering budget\" | known needs: 0 | basis: restricted meals held at a separate table and checked off a printed list (hackathon guide, standing practice)\n- provision: \"Need-gated ticket route\" | area: economic | status: \"committed\" | depth: \"owned by the ticket sibling\" | owner: \"event-ticket-pricing\" | funded from: \"ticket pricing\" | known needs: 0 | basis: point at event-ticket-pricing - never a second application process\n- provision: \"Travel grant\" | area: economic | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: travel, hotel, registration and childcare in one application; onsite disbursement against receipts excludes anyone who cannot front the cost - publish that limit\n- provision: \"WCAG 2.2 AA web surfaces\" | area: digital | status: \"committed\" | depth: \"target AA, keyboard-checked\" | owner: \"site maintainer\" | funded from: \"organizer hours\" | known needs: 0 | basis: the event's own website, forms, schedule and stream only - never coverage of anything on site\n- provision: \"Captions on recordings\" | area: digital | status: \"committed\" | depth: \"captions on every published recording\" | owner: \"Kofi Thistlewood\" | funded from: \"organizer hours\" | known needs: 0 | basis: required on published media independently of live captioning\nPage sections - one per area, in this order: [physical; sensory; dietary; economic; digital]\n- area: physical | covered: [\"Step-free route\"; \"Accessible bathrooms\"; \"Floor map\"; \"Reserved seating\"; \"Companion ticket\"] | not covered: [\"Mobility-equipment rental\"]\n- area: sensory | covered: [\"Nursing room\"; \"Quiet space\"; \"All-gender restrooms\"; \"Consent stickers\"; \"Pronoun stickers\"; \"Live captioning\"; \"Sign-language interpretation\"; \"Hearing loop\"] | not covered: [none]\n- area: dietary | covered: [\"Dietary categories\"; \"Restricted-meal table\"] | not covered: [none]\n- area: economic | covered: [\"Childcare\"; \"Need-gated ticket route\"] | not covered: [\"Travel grant\"]\n- area: digital | covered: [\"WCAG 2.2 AA web surfaces\"; \"Captions on recordings\"] | not covered: [none]\nRequest channel: \"Structured form with a stated posture\" | owner: \"Kofi Thistlewood\" | lead time: 3 weeks | requests-by date: 2027-05-19 | reply within: 5 days | delete-by date: 2027-06-23 | form fields: [\"Your name\"; \"How to reach you\"; \"What you need from us\"; \"By when you need it\"; \"Anything that would help us arrange it\"]\nData-handling posture (all five decided before the channel opens; the first three published): retention: \"every request deleted by 2027-06-23 (14 days after the event - self-set)\" | access: \"Kofi Thistlewood and only the organizers who arrange what was asked for\" | turnaround: \"a reply within 5 days, a decline included\" | where it lives: an inbox the organizers control, emptied at the debrief | who decides a decline: Kofi Thistlewood, with the reason written down\nDigital layer checklist - the event's own website, forms, schedule and stream only, never anything on site, target WCAG 2.2 AA:\n- item: \"Registration and ticket flow\" | status: \"to check\" | POUR: operable | check: exercise it end to end with the keyboard only, including any date picker, dropdown and the payment step\n- item: \"Accommodation-request field\" | status: \"to check\" | POUR: understandable | check: labelled in text, its help text programmatically associated, its errors described in words - never a placeholder-only label\n- item: \"CFP form\" | status: \"to check\" | POUR: understandable | check: the same rules: a speaker who cannot submit is a speaker you never hear from\n- item: \"Schedule\" | status: \"to check\" | POUR: perceivable | check: contrast 4.5:1 for normal text and 3:1 for large text and interface components, track and status never by colour alone, usable at 200% zoom and on a narrow viewport\n- item: \"Accessibility page\" | status: \"to check\" | POUR: robust | check: it fails more often than expected, and failing there undercuts the claim it makes\n- item: \"Livestream player\" | status: \"to check\" | POUR: operable | check: keyboard-operable controls and a caption track that can be turned on\n- item: \"Captions on published recordings\" | status: \"to check\" | POUR: perceivable | check: required independently of live captioning; if the programme was captioned live, publish the transcript\n- item: \"Published program documents\" | status: \"to check\" | POUR: robust | check: tagged structure, reading order and real text - if the PDF cannot work, publish the same content as a web page\nHand-offs, in this order:\n- to: \"event-production\" | what: captioning delivery and the signal path, with the owner's jargon brief sent ahead, and the hearing loop\n- to: \"event-vendor-sourcing\" | what: the dietary commitment, into the catering brief\n- to: \"event-attendee-experience\" | what: placement and wayfinding of what was sized\n- to: \"event-date-selection\" | what: the time-of-day question, while the slot is movable\n- to: \"event-ticket-pricing\" | what: the need-gated ticket rung and its application mechanic\n- to: \"event-code-of-conduct\" | what: incident intake and the consequence for recording someone wearing red\n- to: \"event-cultural-identity\" | what: what the pronoun option says\nStated gaps that apply, in this order: [\"dietary and childcare practice\"; \"quiet-space sizing\"; \"interpretation trigger threshold\"; \"jurisdictional duties\"]\n- \"dietary and childcare practice\" | two independent organizations each, and the catalog states the range where they diverge\n- \"quiet-space sizing\" | no established seat-to-attendee ratio anywhere sourced - AdaCamp's 5% is an observation; the figure is self-set\n- \"interpretation trigger threshold\" | self-set: nothing fixes the attendance or evidence level at which on-request stops being enough\n- \"jurisdictional duties\" | out of scope by construction - Q6 goes to counsel\nRequests (3), in this order:\n- request 1 | label: \"Request 1 - Sign-language interpretation\" | decision: \"covered with lead time\" | provision: \"Sign-language interpretation\" | received: 2027-04-12 | days before the event: 58 | requests-by date: 2027-05-19 | names a diagnosis: no | reason: booked on request - it arrived before the requests-by date 2027-05-19\n- request 2 | label: \"Request 2 - Childcare\" | decision: \"covered with lead time\" | provision: \"Childcare\" | received: 2027-04-18 | days before the event: 52 | requests-by date: 2027-05-19 | names a diagnosis: no | reason: booked on request - it arrived before the requests-by date 2027-05-19\n- request 3 | label: \"Request 3 - Quiet space\" | decision: \"covered\" | provision: \"Quiet space\" | received: 2027-04-19 | days before the event: 51 | requests-by date: 2027-05-19 | names a diagnosis: no | reason: Quiet space is committed (about 4 people at once (5% observed - self-set)) - it works without booking\nDay-of contact: \"Kofi Thistlewood and the organizers, named in the opening\" | last-updated date: 2027-04-20\nFindings (12):\n[check] jurisdiction (requests): Q6: nobody has checked what Riverside, Westmark requires of a public event and its disability data - a question for counsel, never answered here.\n[check] slot_evening (slot): Q10: An evening slot excludes caregivers before any provision can reach them, and it is still movable - moving it costs nothing now and is cheaper than any childcare rung: hand it to event-date-selection (time of day).\n[check] slot_before_childcare (economic): Childcare is funded for a slot nobody has questioned yet - ask Q10 first: moving the slot while it is movable is cheaper than any childcare rung.\n[check] publish_late (dates): Q7: the page goes out 45 days before the event - under 56 (self-set), most attendees have booked; a page published after they booked reached nobody it was for.\n[info] pole_community (pole): Q1: a community budget where every provision competes with catering - it moves menus 1, 2 and 4, never menu 3: the funding pole is not an excuse that reaches the request channel.\n[info] captioner_brief (captioning): Brief the captioner before the event: Kofi Thistlewood sends the programme, speaker names, slide decks when available and a glossary of product names, acronyms, library and tool names, at a lead time agreed with the captioner (self-set).\n[info] childcare_diligence (economic): Childcare puts minors in the event's care - the least reversible commitment here: a contract, insurance and a named organizer, and the vendor checked against the published standards (1:2 for 0-11 months, 1:3 for 1-3 years, 1:6 for 4-12 years - PyCon US 2019, historical; AdaCamp's range is roughly 1:1 to 1:6 by age, at least two carers per room).\n[info] quiet_sizing (sensory): Quiet-space sizing has no established ratio anywhere sourced; the page's figure is AdaCamp's observation (about 5% of attendees at once), labelled self-set - decide it against the room you have.\n[info] known_first (needs): Known needs are provisioned first, against the evidence held, before a template - 2 known needs listed first in the set.\n[info] requests_open (requests): 3 requests to answer - every one, declines included, early and in specifics: what cannot be done, why, what can be done instead, and whether it changes next edition.\n[info] hard_date (dates): Q7: the publish-by date is 5 days away (hard at 56 or fewer - self-set) - the fast-acting rungs are promoted on every menu.\n[info] not_legal_advice (scope): Not legal advice: access duties vary by jurisdiction - the page names the questions that need counsel and answers none of them."
}

Reply:

{
 "task": "plan",
 "summary": "Answer the three requests within 5 days, then publish: the set holds, but the evening slot is movable and cheaper than childcare - hand it to event-date-selection.",
 "verdict": "answer the requests",
 "menus": {
  "depth": {
   "pick": "On-site provision set",
   "reason": "Made the pick by Q3: a known need this set answers (Nursing room)."
  },
  "captioning": {
   "pick": "On-request live provision",
   "reason": "Made the pick by Q11: a meetup or small event usually stays on the on-request rung."
  },
  "requests": {
   "pick": "Structured form with a stated posture",
   "reason": "Made the pick by an institutional partner requires it."
  },
  "economic": {
   "pick": "Complimentary childcare",
   "reason": "Made the pick by Q3: a caregiving population in the audience (1 known need)."
  }
 },
 "slot_note": "An evening slot excludes caregivers before any provision can reach them, and it is still movable - moving it costs nothing now and is cheaper than any childcare rung: hand it to event-date-selection (time of day).",
 "provisions": [
  {
   "area": "economic",
   "provision": "Childcare",
   "depth": "free, RSVP, ratios 1:2 to 1:6",
   "owner": "Kofi Thistlewood",
   "funded_from": "community budget",
   "status": "committed"
  },
  {
   "area": "sensory",
   "provision": "Nursing room",
   "depth": "exists unconditionally, location at check-in",
   "owner": "Kofi Thistlewood",
   "funded_from": "venue contract",
   "status": "committed"
  },
  {
   "area": "physical",
   "provision": "Step-free route",
   "depth": "every room the event uses",
   "owner": "Kofi Thistlewood",
   "funded_from": "venue contract",
   "status": "committed"
  },
  {
   "area": "physical",
   "provision": "Accessible bathrooms",
   "depth": "a checkable claim, by location",
   "owner": "Kofi Thistlewood",
   "funded_from": "venue contract",
   "status": "committed"
  },
  {
   "area": "physical",
   "provision": "Floor map",
   "depth": "areas, lifts, stairs, bathrooms, nursing",
   "owner": "Kofi Thistlewood",
   "funded_from": "organizer hours",
   "status": "committed"
  },
  {
   "area": "physical",
   "provision": "Reserved seating",
   "depth": "2 seats per session room (self-set)",
   "owner": "Kofi Thistlewood",
   "funded_from": "organizer hours",
   "status": "committed"
  },
  {
   "area": "physical",
   "provision": "Companion ticket",
   "depth": "free, by writing to the owner",
   "owner": "Kofi Thistlewood",
   "funded_from": "organizer hours",
   "status": "on request"
  },
  {
   "area": "physical",
   "provision": "Mobility-equipment rental",
   "depth": "attendees source their own",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "sensory",
   "provision": "Quiet space",
   "depth": "about 4 people at once (5% observed - self-set)",
   "owner": "Kofi Thistlewood",
   "funded_from": "venue contract",
   "status": "committed"
  },
  {
   "area": "sensory",
   "provision": "All-gender restrooms",
   "depth": "designated and named as such",
   "owner": "Kofi Thistlewood",
   "funded_from": "venue contract",
   "status": "committed"
  },
  {
   "area": "sensory",
   "provision": "Consent stickers",
   "depth": "70 sets, one per attendee",
   "owner": "Kofi Thistlewood",
   "funded_from": "organizer hours",
   "status": "committed"
  },
  {
   "area": "sensory",
   "provision": "Pronoun stickers",
   "depth": "opt-in, at registration",
   "owner": "Kofi Thistlewood",
   "funded_from": "organizer hours",
   "status": "committed"
  },
  {
   "area": "sensory",
   "provision": "Live captioning",
   "depth": "human captioner, 3 weeks' notice",
   "owner": "Kofi Thistlewood",
   "funded_from": "community budget",
   "status": "on request"
  },
  {
   "area": "sensory",
   "provision": "Sign-language interpretation",
   "depth": "in-house signing volunteer, on request",
   "owner": "Kofi Thistlewood",
   "funded_from": "community budget",
   "status": "on request"
  },
  {
   "area": "sensory",
   "provision": "Hearing loop",
   "depth": "every session room",
   "owner": "Kofi Thistlewood",
   "funded_from": "venue contract",
   "status": "committed"
  },
  {
   "area": "dietary",
   "provision": "Dietary categories",
   "depth": "a registration question",
   "owner": "Kofi Thistlewood",
   "funded_from": "catering budget",
   "status": "committed"
  },
  {
   "area": "dietary",
   "provision": "Restricted-meal table",
   "depth": "separate table, printed name list",
   "owner": "Kofi Thistlewood",
   "funded_from": "catering budget",
   "status": "committed"
  },
  {
   "area": "economic",
   "provision": "Need-gated ticket route",
   "depth": "owned by the ticket sibling",
   "owner": "event-ticket-pricing",
   "funded_from": "ticket pricing",
   "status": "committed"
  },
  {
   "area": "economic",
   "provision": "Travel grant",
   "depth": "not in this edition's set",
   "owner": "none",
   "funded_from": "none",
   "status": "not offered"
  },
  {
   "area": "digital",
   "provision": "WCAG 2.2 AA web surfaces",
   "depth": "target AA, keyboard-checked",
   "owner": "site maintainer",
   "funded_from": "organizer hours",
   "status": "committed"
  },
  {
   "area": "digital",
   "provision": "Captions on recordings",
   "depth": "captions on every published recording",
   "owner": "Kofi Thistlewood",
   "funded_from": "organizer hours",
   "status": "committed"
  }
 ],
 "people": {
  "pick": "Organizers as the named contact",
  "reason": "A meetup or single-room day - attendees can see the organizers - skip the dedicated team; the organizers are the contact, named in the opening and on the event page. Neither is the code of conduct response team's intake: a report goes to that team."
 },
 "digital": [
  {
   "item": "Registration and ticket flow",
   "status": "to check"
  },
  {
   "item": "Accommodation-request field",
   "status": "to check"
  },
  {
   "item": "CFP form",
   "status": "to check"
  },
  {
   "item": "Schedule",
   "status": "to check"
  },
  {
   "item": "Accessibility page",
   "status": "to check"
  },
  {
   "item": "Livestream player",
   "status": "to check"
  },
  {
   "item": "Captions on published recordings",
   "status": "to check"
  },
  {
   "item": "Published program documents",
   "status": "to check"
  }
 ],
 "handoffs": [
  {
   "to": "event-production",
   "what": "captioning delivery and the signal path, with the owner's jargon brief sent ahead, and the hearing loop"
  },
  {
   "to": "event-vendor-sourcing",
   "what": "the dietary commitment, into the catering brief"
  },
  {
   "to": "event-attendee-experience",
   "what": "placement and wayfinding of what was sized"
  },
  {
   "to": "event-date-selection",
   "what": "the time-of-day question, while the slot is movable"
  },
  {
   "to": "event-ticket-pricing",
   "what": "the need-gated ticket rung and its application mechanic"
  },
  {
   "to": "event-code-of-conduct",
   "what": "incident intake and the consequence for recording someone wearing red"
  },
  {
   "to": "event-cultural-identity",
   "what": "what the pronoun option says"
  }
 ],
 "data": {
  "retention": "Every request is deleted by 2027-06-23, 14 days after the event (self-set).",
  "access": "Kofi Thistlewood and only the organizers who arrange what was asked for, shared only to arrange it.",
  "deletion": "Delete every request at the debrief, on the date the form states."
 },
 "gaps": [
  "dietary and childcare practice",
  "quiet-space sizing",
  "interpretation trigger threshold",
  "jurisdictional duties"
 ],
 "caveats": [
  "nobody has checked what Riverside, Westmark requires of a public event and its disability data - a question for counsel, never answered here.",
  "An evening slot excludes caregivers before any provision can reach them, and it is still movable - moving it costs nothing now and is cheaper than any childcare rung: hand it to event-date-selection (time of day).",
  "Childcare is funded for a slot nobody has questioned yet - ask Q10 first: moving the slot while it is movable is cheaper than any childcare rung.",
  "the page goes out 45 days before the event - under 56 (self-set), most attendees have booked; a page published after they booked reached nobody it was for."
 ]
}

The page's check: kept - nothing to flag

An evening meetup, requests in good time - page

Verdict: answer the requests; page ready to publish: yes; depth: On-site provision set; request channel: Structured form with a stated posture; 19 of 21 provisions covered; 3 requests; 0 fix-level findings.

Input:

{
 "task": "page",
 "event": "Event: \"Riverside JS Night - June 2027\" | dates: 2027-06-09 (1 day) | city: \"Riverside\" | attendance: 70 | format: talks | session rooms: 1 | programme hours a day: 3 | recording: streamed live and published | catering: light refreshments | as of: 2027-04-20\nQ1 who funds the provision line: a community budget where every provision competes with catering\nQ2 venue signed: yes | the building's access facts: [step-free route to every room the event uses, with lifts - yes; wheelchair-accessible bathrooms - yes; a restroom that can be designated all-gender - yes; spare rooms for a quiet space and a separate nursing room - two or more; a hearing loop in the session rooms - yes]\nQ3 known needs: 2 (one per line in the needs field)\nQ4 a legal entity able to sign a vendor contract, carry insurance and disburse money: yes\nQ5 owner from now until the debrief: \"Kofi Thistlewood\" | kind: a named person\nQ6 jurisdiction: \"Riverside, Westmark\" | checked: not checked - a question for counsel | an institutional partner requires a structured form: yes\nQ7 publish by: 2027-04-25 | days from the as-of date: 5\nQ8 edition: one year of a recurring event | a volunteer subtitling community exists: no | an in-house signing volunteer: yes\nQ9 effort ceiling: organizer hours: 25 | someone to staff a request channel through to the event: yes | budget committable before tickets sell: yes\nQ10 time slot: evening | still movable: yes\nQ11 size: a meetup or single-room day - attendees can see the organizers\nRequest flow: lead time for booked provisions: 3 weeks | requests-by date: 2027-05-19 | reply within: 5 days | requests deleted: 14 days after the event | delete-by date: 2027-06-23",
 "needs": "Known needs (Q3), provisioned against evidence first - 2:\n- need 1 | provision: \"Childcare\" | status: \"committed\" | need: \"Childcare during the talks\" | evidence: \"two regulars asked at the March meetup\" | asked: \"childcare on site\" | a speaker's need: no\n- need 2 | provision: \"Nursing room\" | status: \"committed\" | need: \"A private room to pump\" | evidence: \"one regular asked in March\" | asked: \"a lockable private room\" | a speaker's need: no",
 "requests": "received: 2027-04-12\nCould you arrange a sign-language interpreter for the June talks? I sign ASL.\n\nreceived: 2027-04-18\nCould my two children use the childcare? They are 4 and 7.\n\nreceived: 2027-04-19\nIs there somewhere quiet I can step away to during the break?",
 "facts": "Verdict: \"answer the requests\" | page ready to publish: yes | fix-level findings: 0\nSelf-set lines: a hard publish-by date at 56 days or fewer | requests in volume at 10 known needs or more | a large event at 150 attendees or more | a low effort ceiling under 10 organizer hours | reserved seats at known needs plus 2 per room | the lead time, turnaround and retention entered on the form | a reply cap of 150 words. The references' own: the quiet room observation of about 5% of attendees at once (AdaCamp, an observation, not a standard) | contrast 4.5:1 for normal text and 3:1 for large text (WCAG 2.2 AA) | the subsidized fee about 4 times below real cost (PyCon US 2019, historical).\nWho funds it (Q1): \"a community budget where every provision competes with catering\" | notes: An attendee's access need is identical whether an employer or the attendee bought the ticket; no provision changes shape because of who paid - the axis that discriminates is who funds the provision line. Every provision competes with the money that would otherwise buy lunch: this moves menu 1 (depth), menu 2 (captioning) and menu 4 (economic access). Live captioning is also a sponsorable line ('captioning presented by ...'): budget the provision first, so it exists whether or not the line sells - a sale offsets the cost, it does not create the provision. It does not move menu 3: a two-person volunteer team and a foundation face the identical problem once an attendee discloses - the same duty of care, the same retention question, the same person who now has to answer.\nVenue (Q2): signed: yes | notes: Q2: the venue is signed. Almost every physical provision is a property of the building, so the building half of menu 1 is already chosen - what the building lacks is deleted for this edition, and the page states it rather than promising around it.\nMenu 1 - provision depth - pick: \"On-site provision set\"\n- rung 1: \"On-site provision set\" | moved: made the pick by Q3: a known need this set answers (Nursing room)\n- rung 2: \"Published page and request channel\" | moved: promoted by Q7: a hard publish-by date (5 days away, hard at 56 or fewer - self-set) promotes the fast-acting rungs; promoted by Q8: a recurring event - the page is a reusable organizational asset, built once and edited each year\n- rung 3: \"Venue-floor facts\" | moved: promoted by Q7: a hard publish-by date\n- rung 4: \"Funded-access set\" | moved: demoted by Q1: a community budget - every provision competes with catering; demoted by Q7: a hard publish-by date - the slowest rung\n- deleted, not demoted: \"An accessibility page describing provisions not yet secured\" | reason: the skill: it would win the efficiency line outright - and converts into a broken promise for whoever travelled on it\n- notes: Value and effort share one order on this menu, so no rung dominates another and the compliance axis rescues nothing.\nMenu 2 - captioning and interpretation - pick: \"On-request live provision\"\n- rung 1: \"On-request live provision\" | moved: promoted by Q7: a hard publish-by date promotes the fast-acting rung; made the pick by Q11: a meetup or small event usually stays on the on-request rung\n- rung 2: \"Post-event corrected captions\"\n- rung 3: \"Live captioning, main days/room only\" | moved: demoted by Q1: a community budget\n- rung 4: \"Standing subtitle pipeline\"\n- rung 5: \"Live captioning in every room\" | moved: demoted by Q1: a community budget\n- deleted, not demoted: \"Treating production capability as a captioning provision\" | reason: the skill: a capable broadcast operation is not a captioning provision until someone states, budgets and publishes what it covers\n- deleted, not demoted: \"Announcing an unvetted automatic feed as captioning coverage\" | reason: the skill: it would win efficiency on every live rung, and the attendee who relied on it discovers the gap mid-talk\n- notes: Every live rung assumes a human captioner (real-time stenotype captioning, also called CART). An automatic feed is a fallback inside a rung, never a rung: label it automatic on screen and on the page, and say which rooms have a human. Brief the captioner on the jargon before the event: the accessibility owner sends the programme, speaker names, slide decks when available and a glossary of product names, acronyms, library and tool names. Interpretation is not bundled with captioning at the same trigger: its trigger threshold is self-set - state the level chosen and why. An in-house signing volunteer overturns the default: interpretation can be offered from inside the team - confirm availability per session.\nMenu 3 - the request channel - pick: \"Structured form with a stated posture\"\n- rung 1: \"Structured form with a stated posture\" | moved: demoted by Q7: a hard publish-by date - the heaviest upfront review; made the pick by an institutional partner requires it\n- rung 2: \"Registration-flow field\" | moved: promoted by Q7: a hard publish-by date - ten minutes to add\n- rung 3: \"Named inbox with named people\" | moved: promoted by Q7: a hard publish-by date; made the pick by Q6: the jurisdiction's data rules are unanswered - the inbox is promoted over the field\n- deleted, not demoted: \"Routing requests to the general registration desk with no accessibility owner\" | reason: the skill, at any staffing level: not the cheap rung but the unowned one - the request is received, nobody is accountable, and the attendee learns this on the day\n- notes: First shrink what needs a request at all: a quiet space, all-gender restrooms, reserved seating and consent stickers work walk-up, and the people who most need them are the least likely to disclose. Only booked provisions need a channel - interpretation, childcare, a nursing room, an equipment rental, a grant. The funding pole does not move this menu: once an attendee discloses, a volunteer team and a foundation hold the same duty of care.\nBefore menu 4 - the slot (Q10): \"evening\" | movable: yes | excludes caregivers: yes | hand to event-date-selection: yes | note: An evening slot excludes caregivers before any provision can reach them, and it is still movable - moving it costs nothing now and is cheaper than any childcare rung: hand it to event-date-selection (time of day).\nMenu 4 - economic access - pick: \"Complimentary childcare\"\n- rung 1: \"Complimentary childcare\" | moved: made the pick by Q3: a caregiving population in the audience (1 known need)\n- rung 2: \"Ticket-side need-gated rung\" | moved: promoted by Q7: a hard publish-by date - the fast-acting rung\n- rung 3: \"Subsidized childcare\" | moved: promoted by Q1: a community budget - the budget line, not organizer hours, is what binds\n- rung 4: \"Travel and registration grant\" | moved: demoted by Q7: a hard publish-by date - an application cycle of about two months\n- deleted, not demoted: \"An unpublished hardship promise with no budget\" | reason: the skill: an unpublished 'email us and we'll see' hardship promise with no budget behind it\n- notes: Ticket price itself is not this skill's: the need-gated scholarship rung belongs to event-ticket-pricing - never a second application process for a route that already exists there. A subsidized fee looks cheaper and is not: the published fee sits against a real per-child-day cost roughly 4 times higher (PyCon US 2019, historical) - small budget relief, real administrative load.\nPeople attendees turn to (Q11) - pick: \"Organizers as the named contact\" | reason: Q11: a meetup or single-room day - attendees can see the organizers - skip the dedicated team; the organizers are the contact, named in the opening and on the event page. | conditions: Name the organizers in the opening and point at them; say the same on the event page. Matching shirts at a single-room event add a uniform, not reach. | Not the code-of-conduct response team: a member who hears a code-of-conduct violation hands it to that team under event-code-of-conduct's runbook - never investigates, decides or records it. A shared shirt requires every wearer to have that skill's staff briefing.\nProvision set - 21 provisions, known needs first, in this order:\n- provision: \"Childcare\" | area: economic | status: \"committed\" | depth: \"free, RSVP, ratios 1:2 to 1:6\" | owner: \"Kofi Thistlewood\" | funded from: \"community budget\" | known needs: 1 | basis: vendor due diligence: certified, background-checked, insured carers; ratios by age band; check-in and check-out logs (PyCon 2019, AdaCamp)\n- provision: \"Nursing room\" | area: sensory | status: \"committed\" | depth: \"exists unconditionally, location at check-in\" | owner: \"Kofi Thistlewood\" | funded from: \"venue contract\" | known needs: 1 | basis: stated to exist unconditionally, only its location withheld until check-in (LF template) - reaches people who would never ask\n- provision: \"Step-free route\" | area: physical | status: \"committed\" | depth: \"every room the event uses\" | owner: \"Kofi Thistlewood\" | funded from: \"venue contract\" | known needs: 0 | basis: a property of the building - venue-floor facts, every rung\n- provision: \"Accessible bathrooms\" | area: physical | status: \"committed\" | depth: \"a checkable claim, by location\" | owner: \"Kofi Thistlewood\" | funded from: \"venue contract\" | known needs: 0 | basis: a property of the building - a specific checkable claim, never a general one\n- provision: \"Floor map\" | area: physical | status: \"committed\" | depth: \"areas, lifts, stairs, bathrooms, nursing\" | owner: \"Kofi Thistlewood\" | funded from: \"organizer hours\" | known needs: 0 | basis: published maps marking event areas, lifts, stairs, bathrooms and nursing stations (PyCon 2019, historical)\n- provision: \"Reserved seating\" | area: physical | status: \"committed\" | depth: \"2 seats per session room (self-set)\" | owner: \"Kofi Thistlewood\" | funded from: \"organizer hours\" | known needs: 0 | basis: available in each session for attendees with access needs (LF template), walk-up\n- provision: \"Companion ticket\" | area: physical | status: \"on request\" | depth: \"free, by writing to the owner\" | owner: \"Kofi Thistlewood\" | funded from: \"organizer hours\" | known needs: 0 | basis: registers separately and free, same badge and catering (PyCon 2019, historical)\n- provision: \"Mobility-equipment rental\" | area: physical | status: \"not offered\" | depth: \"attendees source their own\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: a named third-party vendor for wheelchairs and scooters (LF template) - the pattern is naming a vendor at all\n- provision: \"Quiet space\" | area: sensory | status: \"committed\" | depth: \"about 4 people at once (5% observed - self-set)\" | owner: \"Kofi Thistlewood\" | funded from: \"venue contract\" | known needs: 0 | basis: rationale: sensory input - noise and light; away from the hub, dim, wheelchair-accessible, separate from any nursing room (AdaCamp)\n- provision: \"All-gender restrooms\" | area: sensory | status: \"committed\" | depth: \"designated and named as such\" | owner: \"Kofi Thistlewood\" | funded from: \"venue contract\" | known needs: 0 | basis: designated specifically and named as such (LF template)\n- provision: \"Consent stickers\" | area: sensory | status: \"committed\" | depth: \"70 sets, one per attendee\" | owner: \"Kofi Thistlewood\" | funded from: \"organizer hours\" | known needs: 0 | basis: green open to talk, yellow only if you know me, red not interested in talking or being photographed - an access provision and a photo opt-out; enforcement lives with event-code-of-conduct\n- provision: \"Pronoun stickers\" | area: sensory | status: \"committed\" | depth: \"opt-in, at registration\" | owner: \"Kofi Thistlewood\" | funded from: \"organizer hours\" | known needs: 0 | basis: opt-in stickers at registration (LF template); what the choice says belongs to event-cultural-identity\n- provision: \"Live captioning\" | area: sensory | status: \"on request\" | depth: \"human captioner, 3 weeks' notice\" | owner: \"Kofi Thistlewood\" | funded from: \"community budget\" | known needs: 0 | basis: menu 2: On-request live provision - a human captioner; an automatic feed is labelled automatic and never counted as coverage\n- provision: \"Sign-language interpretation\" | area: sensory | status: \"on request\" | depth: \"in-house signing volunteer, on request\" | owner: \"Kofi Thistlewood\" | funded from: \"community budget\" | known needs: 0 | basis: interpreters only when notified by signing attendees (PyCon 2019, historical) - not bundled with captioning at the same trigger\n- provision: \"Hearing loop\" | area: sensory | status: \"committed\" | depth: \"every session room\" | owner: \"Kofi Thistlewood\" | funded from: \"venue contract\" | known needs: 0 | basis: delivered technically by event-production\n- provision: \"Dietary categories\" | area: dietary | status: \"committed\" | depth: \"a registration question\" | owner: \"Kofi Thistlewood\" | funded from: \"catering budget\" | known needs: 0 | basis: ask everyone who will be fed; vegetarian, vegan, celiac and gluten-free, common allergies, kosher, halal (hackathon guide); the eight common allergens plus sesame (IACC); fallbacks: a one-off supplier request, or a delivery credit with advance notice\n- provision: \"Restricted-meal table\" | area: dietary | status: \"committed\" | depth: \"separate table, printed name list\" | owner: \"Kofi Thistlewood\" | funded from: \"catering budget\" | known needs: 0 | basis: restricted meals held at a separate table and checked off a printed list (hackathon guide, standing practice)\n- provision: \"Need-gated ticket route\" | area: economic | status: \"committed\" | depth: \"owned by the ticket sibling\" | owner: \"event-ticket-pricing\" | funded from: \"ticket pricing\" | known needs: 0 | basis: point at event-ticket-pricing - never a second application process\n- provision: \"Travel grant\" | area: economic | status: \"not offered\" | depth: \"not in this edition's set\" | owner: \"none\" | funded from: \"none\" | known needs: 0 | basis: travel, hotel, registration and childcare in one application; onsite disbursement against receipts excludes anyone who cannot front the cost - publish that limit\n- provision: \"WCAG 2.2 AA web surfaces\" | area: digital | status: \"committed\" | depth: \"target AA, keyboard-checked\" | owner: \"site maintainer\" | funded from: \"organizer hours\" | known needs: 0 | basis: the event's own website, forms, schedule and stream only - never coverage of anything on site\n- provision: \"Captions on recordings\" | area: digital | status: \"committed\" | depth: \"captions on every published recording\" | owner: \"Kofi Thistlewood\" | funded from: \"organizer hours\" | known needs: 0 | basis: required on published media independently of live captioning\nPage sections - one per area, in this order: [physical; sensory; dietary; economic; digital]\n- area: physical | covered: [\"Step-free route\"; \"Accessible bathrooms\"; \"Floor map\"; \"Reserved seating\"; \"Companion ticket\"] | not covered: [\"Mobility-equipment rental\"]\n- area: sensory | covered: [\"Nursing room\"; \"Quiet space\"; \"All-gender restrooms\"; \"Consent stickers\"; \"Pronoun stickers\"; \"Live captioning\"; \"Sign-language interpretation\"; \"Hearing loop\"] | not covered: [none]\n- area: dietary | covered: [\"Dietary categories\"; \"Restricted-meal table\"] | not covered: [none]\n- area: economic | covered: [\"Childcare\"; \"Need-gated ticket route\"] | not covered: [\"Travel grant\"]\n- area: digital | covered: [\"WCAG 2.2 AA web surfaces\"; \"Captions on recordings\"] | not covered: [none]\nRequest channel: \"Structured form with a stated posture\" | owner: \"Kofi Thistlewood\" | lead time: 3 weeks | requests-by date: 2027-05-19 | reply within: 5 days | delete-by date: 2027-06-23 | form fields: [\"Your name\"; \"How to reach you\"; \"What you need from us\"; \"By when you need it\"; \"Anything that would help us arrange it\"]\nData-handling posture (all five decided before the channel opens; the first three published): retention: \"every request deleted by 2027-06-23 (14 days after the event - self-set)\" | access: \"Kofi Thistlewood and only the organizers who arrange what was asked for\" | turnaround: \"a reply within 5 days, a decline included\" | where it lives: an inbox the organizers control, emptied at the debrief | who decides a decline: Kofi Thistlewood, with the reason written down\nDigital layer checklist - the event's own website, forms, schedule and stream only, never anything on site, target WCAG 2.2 AA:\n- item: \"Registration and ticket flow\" | status: \"to check\" | POUR: operable | check: exercise it end to end with the keyboard only, including any date picker, dropdown and the payment step\n- item: \"Accommodation-request field\" | status: \"to check\" | POUR: understandable | check: labelled in text, its help text programmatically associated, its errors described in words - never a placeholder-only label\n- item: \"CFP form\" | status: \"to check\" | POUR: understandable | check: the same rules: a speaker who cannot submit is a speaker you never hear from\n- item: \"Schedule\" | status: \"to check\" | POUR: perceivable | check: contrast 4.5:1 for normal text and 3:1 for large text and interface components, track and status never by colour alone, usable at 200% zoom and on a narrow viewport\n- item: \"Accessibility page\" | status: \"to check\" | POUR: robust | check: it fails more often than expected, and failing there undercuts the claim it makes\n- item: \"Livestream player\" | status: \"to check\" | POUR: operable | check: keyboard-operable controls and a caption track that can be turned on\n- item: \"Captions on published recordings\" | status: \"to check\" | POUR: perceivable | check: required independently of live captioning; if the programme was captioned live, publish the transcript\n- item: \"Published program documents\" | status: \"to check\" | POUR: robust | check: tagged structure, reading order and real text - if the PDF cannot work, publish the same content as a web page\nHand-offs, in this order:\n- to: \"event-production\" | what: captioning delivery and the signal path, with the owner's jargon brief sent ahead, and the hearing loop\n- to: \"event-vendor-sourcing\" | what: the dietary commitment, into the catering brief\n- to: \"event-attendee-experience\" | what: placement and wayfinding of what was sized\n- to: \"event-date-selection\" | what: the time-of-day question, while the slot is movable\n- to: \"event-ticket-pricing\" | what: the need-gated ticket rung and its application mechanic\n- to: \"event-code-of-conduct\" | what: incident intake and the consequence for recording someone wearing red\n- to: \"event-cultural-identity\" | what: what the pronoun option says\nStated gaps that apply, in this order: [\"dietary and childcare practice\"; \"quiet-space sizing\"; \"interpretation trigger threshold\"; \"jurisdictional duties\"]\n- \"dietary and childcare practice\" | two independent organizations each, and the catalog states the range where they diverge\n- \"quiet-space sizing\" | no established seat-to-attendee ratio anywhere sourced - AdaCamp's 5% is an observation; the figure is self-set\n- \"interpretation trigger threshold\" | self-set: nothing fixes the attendance or evidence level at which on-request stops being enough\n- \"jurisdictional duties\" | out of scope by construction - Q6 goes to counsel\nRequests (3), in this order:\n- request 1 | label: \"Request 1 - Sign-language interpretation\" | decision: \"covered with lead time\" | provision: \"Sign-language interpretation\" | received: 2027-04-12 | days before the event: 58 | requests-by date: 2027-05-19 | names a diagnosis: no | reason: booked on request - it arrived before the requests-by date 2027-05-19\n- request 2 | label: \"Request 2 - Childcare\" | decision: \"covered with lead time\" | provision: \"Childcare\" | received: 2027-04-18 | days before the event: 52 | requests-by date: 2027-05-19 | names a diagnosis: no | reason: booked on request - it arrived before the requests-by date 2027-05-19\n- request 3 | label: \"Request 3 - Quiet space\" | decision: \"covered\" | provision: \"Quiet space\" | received: 2027-04-19 | days before the event: 51 | requests-by date: 2027-05-19 | names a diagnosis: no | reason: Quiet space is committed (about 4 people at once (5% observed - self-set)) - it works without booking\nDay-of contact: \"Kofi Thistlewood and the organizers, named in the opening\" | last-updated date: 2027-04-20\nCarried from the plan: summary: \"Answer the three requests within 5 days, then publish: the set holds, but the evening slot is movable and cheaper than childcare - hand it to event-date-selection.\" | picks: [depth \"On-site provision set\"; captioning \"On-request live provision\"; requests \"Structured form with a stated posture\"; economic \"Complimentary childcare\"] | picks match the page: yes | statuses matching the page: 21 of 21\nFindings (12):\n[check] jurisdiction (requests): Q6: nobody has checked what Riverside, Westmark requires of a public event and its disability data - a question for counsel, never answered here.\n[check] slot_evening (slot): Q10: An evening slot excludes caregivers before any provision can reach them, and it is still movable - moving it costs nothing now and is cheaper than any childcare rung: hand it to event-date-selection (time of day).\n[check] slot_before_childcare (economic): Childcare is funded for a slot nobody has questioned yet - ask Q10 first: moving the slot while it is movable is cheaper than any childcare rung.\n[check] publish_late (dates): Q7: the page goes out 45 days before the event - under 56 (self-set), most attendees have booked; a page published after they booked reached nobody it was for.\n[info] pole_community (pole): Q1: a community budget where every provision competes with catering - it moves menus 1, 2 and 4, never menu 3: the funding pole is not an excuse that reaches the request channel.\n[info] captioner_brief (captioning): Brief the captioner before the event: Kofi Thistlewood sends the programme, speaker names, slide decks when available and a glossary of product names, acronyms, library and tool names, at a lead time agreed with the captioner (self-set).\n[info] childcare_diligence (economic): Childcare puts minors in the event's care - the least reversible commitment here: a contract, insurance and a named organizer, and the vendor checked against the published standards (1:2 for 0-11 months, 1:3 for 1-3 years, 1:6 for 4-12 years - PyCon US 2019, historical; AdaCamp's range is roughly 1:1 to 1:6 by age, at least two carers per room).\n[info] quiet_sizing (sensory): Quiet-space sizing has no established ratio anywhere sourced; the page's figure is AdaCamp's observation (about 5% of attendees at once), labelled self-set - decide it against the room you have.\n[info] known_first (needs): Known needs are provisioned first, against the evidence held, before a template - 2 known needs listed first in the set.\n[info] requests_open (requests): 3 requests to answer - every one, declines included, early and in specifics: what cannot be done, why, what can be done instead, and whether it changes next edition.\n[info] hard_date (dates): Q7: the publish-by date is 5 days away (hard at 56 or fewer - self-set) - the fast-acting rungs are promoted on every menu.\n[info] not_legal_advice (scope): Not legal advice: access duties vary by jurisdiction - the page names the questions that need counsel and answers none of them."
}

Reply:

{
 "task": "page",
 "title": "Accessibility at Riverside JS Night - June 2027",
 "intro": "This page is for everyone coming to Riverside JS Night - June 2027 - disabled attendees, speakers and volunteers, caregivers, and anyone who needs something from us to take part. It says what we provide, what we do not, and how to ask, and it sits alongside our code of conduct.",
 "sections": [
  {
   "area": "physical",
   "covered": [
    "Step-free route",
    "Accessible bathrooms",
    "Floor map",
    "Reserved seating",
    "Companion ticket"
   ],
   "not_covered": [
    "Mobility-equipment rental"
   ],
   "text": "Step-free route: provided (every room the event uses). Accessible bathrooms: provided (a checkable claim, by location). Floor map: provided (areas, lifts, stairs, bathrooms, nursing). Reserved seating: provided (2 seats per session room (self-set)). Companion ticket is available on request (free, by writing to the owner) - ask by 2027-05-19. Mobility-equipment rental: not provided at this edition."
  },
  {
   "area": "sensory",
   "covered": [
    "Nursing room",
    "Quiet space",
    "All-gender restrooms",
    "Consent stickers",
    "Pronoun stickers",
    "Live captioning",
    "Sign-language interpretation",
    "Hearing loop"
   ],
   "not_covered": [],
   "text": "Nursing room: provided (exists unconditionally, location at check-in). Quiet space: provided (about 4 people at once (5% observed - self-set)). All-gender restrooms: provided (designated and named as such). Consent stickers: provided (70 sets, one per attendee). Pronoun stickers: provided (opt-in, at registration). Live captioning is available on request (human captioner, 3 weeks' notice) - ask by 2027-05-19. Sign-language interpretation is available on request (in-house signing volunteer, on request) - ask by 2027-05-19. Hearing loop: provided (every session room)."
  },
  {
   "area": "dietary",
   "covered": [
    "Dietary categories",
    "Restricted-meal table"
   ],
   "not_covered": [],
   "text": "Dietary categories: provided (a registration question). Restricted-meal table: provided (separate table, printed name list)."
  },
  {
   "area": "economic",
   "covered": [
    "Childcare",
    "Need-gated ticket route"
   ],
   "not_covered": [
    "Travel grant"
   ],
   "text": "Childcare: provided (free, RSVP, ratios 1:2 to 1:6). A need-gated ticket route is open through our ticket team. Travel grant: not provided at this edition."
  },
  {
   "area": "digital",
   "covered": [
    "WCAG 2.2 AA web surfaces",
    "Captions on recordings"
   ],
   "not_covered": [],
   "text": "WCAG 2.2 AA web surfaces: provided (target AA, keyboard-checked). Captions on recordings: provided (captions on every published recording)."
  }
 ],
 "request_channel": {
  "channel": "Structured form with a stated posture",
  "owner": "Kofi Thistlewood",
  "lead_time": "Ask by 2027-05-19 for anything that must be booked (3 weeks' notice).",
  "turnaround": "A reply within 5 days, a decline included.",
  "retention": "Deleted by 2027-06-23."
 },
 "day_of_contact": "Kofi Thistlewood and the organizers, named in the opening.",
 "last_updated": "2027-04-20",
 "form": {
  "fields": [
   "Your name",
   "How to reach you",
   "What you need from us",
   "By when you need it",
   "Anything that would help us arrange it"
  ],
  "statement": "Kofi Thistlewood reads these and replies within 5 days. What you tell us is shared only with the organizers who arrange what you asked for, and deleted by 2027-06-23."
 },
 "answers": [
  {
   "request": "Request 1 - Sign-language interpretation",
   "decision": "covered with lead time",
   "reply": "Thank you - yes. Our in-house signing volunteer interprets on request, and the request is well inside our 3 weeks' notice. Kofi Thistlewood will confirm within 5 days whether the volunteer can cover the talks in ASL, and will tell you straight away if not."
  },
  {
   "request": "Request 2 - Childcare",
   "decision": "covered with lead time",
   "reply": "Yes - complimentary childcare runs on site during the talks, and both children are welcome. Places are held against RSVPs, so Kofi Thistlewood will confirm the booking within 5 days."
  },
  {
   "request": "Request 3 - Quiet space",
   "decision": "covered",
   "reply": "Yes - a quiet space is set aside for the whole evening, away from the main room, and you can use it without asking anyone. It is marked on the floor map at the door."
  }
 ],
 "disclaimer": "This page is not legal advice; access duties vary by jurisdiction.",
 "note": "Answer the three requests within 5 days, publish the page by 2027-04-25, and hand the evening slot to event-date-selection while it is movable."
}

The page's check: kept - nothing to flag

The free venue criteria sheet for the 400-person conference sample

# Brightwater DevConf 2027 - venue accessibility criteria

_For event-venue-sourcing: check every candidate venue against this sheet before anything is signed - a signed venue deletes half of menu 1 permanently._

| Criterion | Weight | Why |
|---|---|---|
| Step-free route to every room the event uses, with lifts that take a wheelchair (known need) | must | almost every physical provision is a property of the building |
| Wheelchair-accessible bathrooms on every floor the event uses | must | a specific, checkable claim by location, never a general one (PyCon 2019, historical) |
| A hearing loop in the session rooms, or power and space for event-production to install one | should | delivered technically by event-production |
| A step-free route from public transit that can be published as a routing description | should | a public routing tool with an avoid-stairs setting (FOSDEM 2026) |
| Accessible rooms in nearby hotels, with how many each holds | should | accessible rooms are scarce - say so and ask early (PyCon 2019, historical) |
| Catering space to hold restricted meals at a separate table | should | the hackathon guide's distribution safeguard |
| Its service-animal policy and a relief area - decide your own scope explicitly | ask | one sourced policy admits guide dogs only (FOSDEM 2026) - narrower than most |

Event: 2027-03-04 to 2027-03-05 (2 days), 400 attendees, 3 session rooms. Owner: Tamsin Quillfeather.

_Not legal advice: what a jurisdiction requires of a public venue is a question for counsel._

Made with Access Pledge - https://access-pledge.skillsafe.ai/

Build the input yourself

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

const K = AccessKit, R = AccessReply;
const f = K.form({ name: "My Meetup 2027", start: "2027-05-20", city: "Ourtown", attendance: "60", rooms: "1", progHours: "3", asOf: "2027-02-01",
  funding: "community", venue: "signed", vStepFree: "yes", vToilets: "yes", ownerKind: "named", ownerName: "A. Name", publishBy: "2027-03-15", size: "small",
  needs: "Live captions | asked last time | captioning in the main room" });
// f.pole, f.venue, f.depth, f.captions, f.channel, f.slot, f.econ, f.people, f.provisions, f.areas, f.data, f.digital, f.requests, f.handoffs, f.gaps, f.verdict, f.findings
K.criteriaMd(f); K.provisionsCsv(f); K.skeletonMd(f)   // the free criteria sheet, provision set and page skeleton
const b = K.buildInput(f, "plan");                     // or "page"
const wire = K.toWire(b.input);                        // POST this to /estimate and /run
// then: const reply = R.normalize(R.parseReply(job.output.output), "plan");
// R.check(reply, b)                                   // {status: kept or flagged, notes}
// R.carryText(reply)                                  // the lines the page lane carries - set them as the carry field

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="YOUR_TOKEN"   # from https://access-pledge.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":"access-pledge"}' | 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": "plan", "event": "Event: ... | dates: ... | attendance: ...", "needs": "Known needs (Q3) ...", "requests": "", "facts": "Verdict: ..."}
# - 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 access-pledge:<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 plan carries summary, verdict, menus, slot_note, provisions, people, digital, handoffs, data, gaps and caveats; a page carries title, intro, sections, request_channel, day_of_contact, last_updated, form, answers, disclaimer and note. The code below prints the headline of either.

KEY="access-pledge:plan:$(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 '.verdict // .note, .summary // .title // empty' reply.json
jq -r '.provisions[]? | "\(.provision): \(.status)"' reply.json   # a plan; a page has .sections and .answers

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: access-pledge:plan:$(shasum -a 256 input.json | cut -c1-16):a1" --data @input.json