← Meet Match
API
Tokens

Run Meet Match from your own code

Both metered lanes are available over HTTP and each returns one JSON object. The division of labour: the page decides whether the program runs at all, writes down what may not move, gates consent (only people whose consent covers matching or contact are matchable), re-ranks the four menus (matching mechanism, scheduling mechanic, quota commitment posture, no-show handling) with every deleted rung struck, writes the criterion as a sentence, lays the slots inside the block and never across a session, places a timetable that never double-books a person or a table, lists every unplaced pair with its reason, and holds each named meeting number against what the block can hold - all free, in matchkit.js. The run explains the design, or writes the one meeting brief and the confirmations; the page then holds the reply to its own board (matchreply.js). It never quotes a vendor or platform benchmark and never invents a person, an organization, a slot, a fill rate, a meeting count or a consent.

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":"meet-match"}), 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, sides, block, facts) is missing. notes 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 design. Both lanes send the same six fields; for the brief, the facts also carry the design's picks, criterion and timetable (the page fills these from the design). The notes field may be an empty string.

The input

FieldRequiredWhat
taskyesdesign or brief. If it is missing or neither, do design and set "task": "design".
eventyesthe event basics (name, dates, city, attendance, community or vendor-run, the as-of date) and the interview answers Q1 to Q11, the named organizer on duty, how the package words its number with its make-good and criteria, and the criterion's two halves.
sidesyesone line per person on side A (name, organization, wants to meet, consented to, matchable, the meeting number named, availability) and on side B (name, organization, interests, consented to, matchable, opted in to meet, availability).
blockyesthe meeting block as the published grid gives it (date, start and end, slot length, buffer, tables in parallel) and the published sessions it must not cross.
notesnopasted notes; may be empty. A request in the notes is never a commitment.
factsyesthe page's verdict, its self-set lines, the run decision, the fixed items, the consent counts, the four menus re-ranked, the criterion, the slots, the timetable rows and unplaced rows it sent (each list says how many it holds and how many were cut), the quota rows, the no-show rule, the measurement fields - each item with its own must line - for the brief task the design it carries, 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

design

  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: do not run it, settle consent first, fix first or ready to publish the brief.
  3. run - one object: decision - the page's run decision, exactly ("run it" or "do not run it"); reason - one sentence that says what decided it, using the page's word from the run must line: "Q1" when a package names a meeting number, "Q2" when two populations were invited separately, "Q1 and Q2" when neither holds.
  4. fixed - one string per fixed item of the page, in its order, every item: each names the item exactly ("Signed meeting number", "Published grid", "Consent wording each side saw", "Floor plan", "Room block") and says who owns it.
  5. consent - one object: matchable - the page's matchable count, exactly (for example "6 Sponsors, 25 Attendees"); excluded - the page's excluded count, exactly; note - one sentence using the page's word from the consent must line: "wording" when a side's consent wording was never shown, "excluded" when people are excluded, "every" when everyone's consent covers matching.
  6. mechanism - one object: pick - the page's mechanism, exactly; criterion - the matching criterion as one sentence using the words "good match" and "both" (both sides said so themselves), or, when the page's run decision is "do not run it", one sentence using the words "no meeting program"; reason - one sentence that says what moved the pick, using the page's word from the mechanism must line: the question number (for example "Q1", "Q2", "Q3", "Q4" or "Q8") when an interview answer moved it, or the word "default" when nothing did.
  7. scheduling - one object: pick - the page's scheduling mechanic, exactly; reason - one sentence using the page's word from the scheduling must line (the question number, or the word "default").
  8. timetable - one object per meeting the page sent, in its order, every row, not only the first: slot, table, a and b exactly as the page gives them. [] when the page sent none.
  9. unplaced - one object per unplaced row the page sent, in its order, every row: a and b exactly; reason - says why, using the row's word: "slot", "free", "booked" or "table". [] when the page sent none.
  10. quota - one object per quota row of the page, in its order, every sponsor with a named number: sponsor, named, feasible and posture exactly as the page gives them. [] when the page lists none.
  11. no_show - one object: pick - the page's no-show handling, exactly; reason - one sentence using the page's word from the no_show must line (the question number, or the word "default").
  12. 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": "design",
  "summary": "one sentence",
  "verdict": "fix first",
  "run": { "decision": "run it", "reason": "one sentence" },
  "fixed": [ "Signed meeting number - one sentence" ],
  "consent": { "matchable": "the page's count", "excluded": "the page's count", "note": "one sentence" },
  "mechanism": { "pick": "the page's pick", "criterion": "one sentence", "reason": "one sentence" },
  "scheduling": { "pick": "the page's pick", "reason": "one sentence" },
  "timetable": [ { "slot": "the page's slot", "table": "the page's table", "a": "the page's name", "b": "the page's name" } ],
  "unplaced": [ { "a": "the page's name", "b": "the page's name", "reason": "one sentence" } ],
  "quota": [ { "sponsor": "the page's sponsor", "named": "10", "feasible": "3", "posture": "the page's posture" } ],
  "no_show": { "pick": "the page's pick", "reason": "one sentence" },
  "caveats": [ "a caveat" ]
}

The page holds it to its own board: the verdict and the run decision exactly, with the question that decided it ("Q1", "Q2") in the reason; the five fixed items in order; the matchable and excluded counts exactly with "wording", "excluded" or "every" in the note; the mechanism, scheduling and no-show picks exactly, each with the question that moved it or "default"; a criterion with "good match" and "both" (or "no meeting program"); every timetable row the page sent - slot, table and both names - in order; every unplaced row with its reason word ("slot", "free", "booked", "table"); every quota row's sponsor, named, feasible and posture; caveats when the page has a fix; and no number, percentage, benchmark, quote or pronoun the input does not hold. Required words are read tolerantly: "each side accepted" is both, "a named number" is Q1.

brief

  1. title - one line; it must contain the event's name exactly.
  2. who_meets_whom - the matching criterion as one sentence, using the words "good match" and "both".
  3. when_and_where - one or two sentences: contains the block's date exactly and the page's publish window exactly (for example "14:00-14:55"), says where meetings happen, and says the block never crosses a session (the word "session").
  4. how_to_book - one short paragraph on how a pairing comes to exist and gets its slot, using the page's scheduling word: "book" for self-service booking, "introduction" for no booked slots, "accept" for hybrid, "confirm" for an organizer-assigned grid. Both sides accept every pairing.
  5. missed_slot - one or two sentences on what happens to a missed slot, using the page's no-show word: "remind" for reconfirm-and-remind, "standby" for standby refill, "missed" for nothing, "overbook" for slot overbooking. Never a deposit or a penalty.
  6. contact - the page's named organizer exactly, or the words "to be named".
  7. consent_note - one short paragraph: what is shared, with whom, on what trigger, how a person stops (the word "withdraw") and when the pool ends (the word "deleted").
  8. confirmations - one object per meeting the page sent, in its order, every row, not only the first: a, b, slot and table exactly as the page gives them; message - one or two short sentences to both people asking them to confirm (the word "confirm") before the schedule is published. [] when the page sent none.
  9. note - one sentence: when the page's verdict is not ready to publish the brief, begin with "Not ready to publish:" and say what to fix first; otherwise use the word "publish" and say what happens next.
{
  "task": "brief",
  "title": "the event's name - 1:1 meeting brief",
  "who_meets_whom": "one sentence",
  "when_and_where": "one or two sentences",
  "how_to_book": "one paragraph",
  "missed_slot": "one or two sentences",
  "contact": "the page's named organizer",
  "consent_note": "one paragraph",
  "confirmations": [ { "a": "the page's name", "b": "the page's name", "slot": "the page's slot", "table": "the page's table", "message": "one or two sentences" } ],
  "note": "one sentence"
}

The page requires the event's name in the title; "good match" and "both" in who meets whom; the block's date, the publish window and "session" in when and where; the scheduling word in how to book ("book", "introduction", "accept" or "confirm"); the no-show word in the missed slot ("remind", "standby", "missed" or "overbook"); the named contact or "to be named"; "withdraw" and "deleted" in the consent note; one confirmation per timetable row the page sent, exactly, each message asking both to "confirm"; and a note beginning "Not ready to publish:" unless the page is ready.

Worked examples - both lanes

Two of the page's four free samples (fictional events, organizations and people). 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. The brief input carries its sample's saved design, as the handoff does.

A 700-person conference, 10 guaranteed meetings and a block the keynote overlaps - design

Verdict: fix first; ready to publish: no; run it; matchable: 6 Sponsors, 25 Attendees; mechanism: Mutual opt-in; scheduling: Self-service booking; 12 of 32 pairs placed in 12 seats, published as 14:00-14:55; quota: Best-efforts target; no-show: Standby refill; 5 fix-level findings.

Input:

{
 "task": "design",
 "event": "Event: \"Harbourline DevConf 2027\" | dates: 2027-09-14 to 2027-09-15 | city: \"Port Avel\" | attendance: 700 | run by: \"a community event\" | as of: 2027-07-01\nQ1 a meeting number in a package: \"a drafted package names a number\"\nQ2 the two sides: \"one audience with sponsors standing in it\" | invited specifically to meet each other: \"no\"\nQ3 expected pairs: \"more than a handful\"\nQ4 data held: \"an opt-in profile form the registration flow already collects, on both sides\" | a sponsor's own target list: no\nQ5 consent wording seen: Sponsors: \"recorded as shown\" | Attendees: \"recorded as shown\" | the wording: \"Join the 1:1 meeting pool: a sponsor you opt in to sees your name, company and interests once you both accept, you can withdraw any time, the pool is deleted 30 days after the event.\"\nQ6 where meetings happen: \"the mezzanine meeting lounge, booked by the organizers\" | room block contracted: no\nQ7 the block in the grid: \"placed and fixed in the published grid\"\nQ8 staffing during the block: \"someone is staffed at the meeting area during the block\"\nQ9 booking opens: 2027-08-01 | schedule stops moving: 2027-09-07\nQ10 edition: \"a one-off edition\" | measured on this program last edition: none\nQ11 effort ceiling: \"medium\" | political capital to tell a paying sponsor: \"yes\"\nNamed organizer on duty: \"Ines Varga, sponsor desk\"\nPackage wording: \"a number printed with no criteria and no make-good\" | make-good: \"not stated\" | criteria: \"not written\"\nCriterion halves: Sponsors situation: \"works on a product area and wants feedback from people running it in production\" | Attendees capability: \"runs or builds in that same area and said they want to talk about it\"",
 "sides": "Sponsors (side A) - 6, one per line:\n- a 1: \"Mara Quist\" | organization: \"Brightpath Cloud\" | wants to meet: [observability; kubernetes] | consented to: \"matching\" | matchable: yes | meeting number named: 10 | available: \"the whole block\"\n- a 2: \"Tomas Ilves\" | organization: \"Corvane Data\" | wants to meet: [databases; data pipelines] | consented to: \"matching\" | matchable: yes | meeting number named: 10 | available: \"the whole block\"\n- a 3: \"Ines Duarte\" | organization: \"Delphin Labs\" | wants to meet: [security; identity] | consented to: \"matching\" | matchable: yes | meeting number named: not set | available: \"the whole block\"\n- a 4: \"Kofi Mensah\" | organization: \"Equivane Dev\" | wants to meet: [developer tooling; ci; cd] | consented to: \"matching\" | matchable: yes | meeting number named: not set | available: \"the whole block\"\n- a 5: \"Lena Park\" | organization: \"Fernhill AI\" | wants to meet: [machine learning; data pipelines] | consented to: \"matching\" | matchable: yes | meeting number named: not set | available: \"the whole block\"\n- a 6: \"Ravi Nair\" | organization: \"Gridline Pay\" | wants to meet: [payments; apis] | consented to: \"matching\" | matchable: yes | meeting number named: not set | available: \"the whole block\"\nAttendees (side B) - 40, one per line:\n- b 1: \"Ada Brennan\" | organization: \"Kelpwise\" | interests: [observability; kubernetes] | consented to: \"matching\" | matchable: yes | opted in to meet: [brightpath cloud; equivane dev] | available: \"the whole block\"\n- b 2: \"Bo Lindqvist\" | organization: \"Northmark\" | interests: [databases] | consented to: \"matching\" | matchable: yes | opted in to meet: [corvane data] | available: \"the whole block\"\n- b 3: \"Cara Mbeki\" | organization: \"Tallowsoft\" | interests: [kubernetes; ci; cd] | consented to: \"matching\" | matchable: yes | opted in to meet: [brightpath cloud; equivane dev] | available: \"the whole block\"\n- b 4: \"Dev Raman\" | organization: \"Saltgrid\" | interests: [data pipelines; machine learning] | consented to: \"matching\" | matchable: yes | opted in to meet: [corvane data; fernhill ai] | available: \"the whole block\"\n- b 5: \"Elif Sahin\" | organization: \"Brooklarch Health\" | interests: [security] | consented to: \"matching\" | matchable: yes | opted in to meet: [delphin labs] | available: \"the whole block\"\n- b 6: \"Femi Adeyemi\" | organization: \"Quaymarrow Bank\" | interests: [payments; security] | consented to: \"matching\" | matchable: yes | opted in to meet: [gridline pay; delphin labs] | available: \"the whole block\"\n- b 7: \"Gus Moreau\" | organization: \"Larchfield\" | interests: [observability] | consented to: \"matching\" | matchable: yes | opted in to meet: [brightpath cloud] | available: \"the whole block\"\n- b 8: \"Hana Sato\" | organization: \"Moorgate Media\" | interests: [databases; apis] | consented to: \"matching\" | matchable: yes | opted in to meet: [corvane data; gridline pay] | available: \"the whole block\"\n- b 9: \"Ivo Petrov\" | organization: \"Pinecrest\" | interests: [machine learning] | consented to: \"matching\" | matchable: yes | opted in to meet: [fernhill ai] | available: \"the whole block\"\n- b 10: \"Jade Okafor\" | organization: \"Riverbend\" | interests: [developer tooling] | consented to: \"matching\" | matchable: yes | opted in to meet: [equivane dev] | available: \"the whole block\"\n- b 11: \"Kai Nakamura\" | organization: \"Stonefly\" | interests: [kubernetes] | consented to: \"matching\" | matchable: yes | opted in to meet: [brightpath cloud] | available: \"the whole block\"\n- b 12: \"Lu Chen\" | organization: \"Thornbury\" | interests: [data pipelines] | consented to: \"matching\" | matchable: yes | opted in to meet: [corvane data] | available: \"the whole block\"\n- b 13: \"Mia Kowalski\" | organization: \"Umberly\" | interests: [identity] | consented to: \"matching\" | matchable: yes | opted in to meet: [delphin labs] | available: \"the whole block\"\n- b 14: \"Nils Berg\" | organization: \"Vantor\" | interests: [apis] | consented to: \"matching\" | matchable: yes | opted in to meet: [gridline pay] | available: \"the whole block\"\n- b 15: \"Omar Haddad\" | organization: \"Westray\" | interests: [observability; ci; cd] | consented to: \"matching\" | matchable: yes | opted in to meet: \"any\" | available: \"the whole block\"\n- b 16: \"Pia Rossi\" | organization: \"Yarrowby\" | interests: [databases] | consented to: \"matching\" | matchable: yes | opted in to meet: [corvane data] | available: \"the whole block\"\n- b 17: \"Quinn Abara\" | organization: \"Zellmark\" | interests: [machine learning; data pipelines] | consented to: \"matching\" | matchable: yes | opted in to meet: [fernhill ai; corvane data] | available: \"the whole block\"\n- b 18: \"Rosa Ibarra\" | organization: \"Ashcombe\" | interests: [kubernetes; observability] | consented to: \"matching\" | matchable: yes | opted in to meet: [brightpath cloud] | available: \"the whole block\"\n- b 19: \"Sami Virtanen\" | organization: \"Birchwood\" | interests: [security; identity] | consented to: \"matching\" | matchable: yes | opted in to meet: [delphin labs] | available: \"the whole block\"\n- b 20: \"Tara Doyle\" | organization: \"Cobbleton\" | interests: [ci; cd] | consented to: \"matching\" | matchable: yes | opted in to meet: [equivane dev] | available: \"the whole block\"\n- b 21: \"Uma Iyer\" | organization: \"Dunmore\" | interests: [payments] | consented to: \"matching\" | matchable: yes | opted in to meet: [gridline pay] | available: \"the whole block\"\n- b 22: \"Viktor Hale\" | organization: \"Elmstead\" | interests: [databases; data pipelines] | consented to: \"matching\" | matchable: yes | opted in to meet: [corvane data] | available: \"the whole block\"\n- b 23: \"Wen Zhou\" | organization: \"Foxley\" | interests: [observability] | consented to: \"matching\" | matchable: yes | opted in to meet: [brightpath cloud] | available: [16:00-17:00]\n- b 24: \"Xena Laine\" | organization: \"Glenrock\" | interests: [machine learning] | consented to: \"matching\" | matchable: yes | opted in to meet: [fernhill ai] | available: \"the whole block\"\n- b 25: \"Yusuf Kaya\" | organization: \"Hawthorne\" | interests: [developer tooling; kubernetes] | consented to: \"matching\" | matchable: yes | opted in to meet: [equivane dev; brightpath cloud] | available: \"the whole block\"\n- b 26: \"Zoe Grant\" | organization: \"Ivyhill\" | interests: [observability] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [brightpath cloud] | available: \"the whole block\"\n- b 27: \"Abel Moss\" | organization: \"Juniper Row\" | interests: [databases] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [corvane data] | available: \"the whole block\"\n- b 28: \"Bree Holt\" | organization: \"Kestrel Bay\" | interests: [security] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [delphin labs] | available: \"the whole block\"\n- b 29: \"Cyril Vance\" | organization: \"Lowmoor\" | interests: [ci; cd] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [equivane dev] | available: \"the whole block\"\n- b 30: \"Dina Faro\" | organization: \"Marlow Works\" | interests: [machine learning] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [fernhill ai] | available: \"the whole block\"\n- b 31: \"Edo Ferri\" | organization: \"Netherby\" | interests: [payments] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [gridline pay] | available: \"the whole block\"\n- b 32: \"Fay Lund\" | organization: \"Oakhurst\" | interests: [kubernetes] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [brightpath cloud] | available: \"the whole block\"\n- b 33: \"Gil Ortega\" | organization: \"Penhallow\" | interests: [data pipelines] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [corvane data] | available: \"the whole block\"\n- b 34: \"Hal Kimura\" | organization: \"Quillon\" | interests: [identity] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [delphin labs] | available: \"the whole block\"\n- b 35: \"Iris Novak\" | organization: \"Redcliffe\" | interests: [developer tooling] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: \"any\" | available: \"the whole block\"\n- b 36: \"Jon Arden\" | organization: \"Seacombe\" | interests: [apis] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [gridline pay] | available: \"the whole block\"\n- b 37: \"Kim Soler\" | organization: \"Trevose\" | interests: [observability] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: \"any\" | available: \"the whole block\"\n- b 38: \"Leo Strand\" | organization: \"Underhill\" | interests: [databases] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [corvane data] | available: \"the whole block\"\n- b 39: \"Mona Reyes\" | organization: \"Vellacott\" | interests: [machine learning] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [fernhill ai] | available: \"the whole block\"\n- b 40: \"Ned Cole\" | organization: \"Wexcombe\" | interests: [security] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [delphin labs] | available: \"the whole block\"",
 "block": "Block: date: 2027-09-14 | as published: \"14:00-15:30\" | slot length: 15 min | buffer: 5 min | tables in parallel: 4\nPublished sessions it must not cross - 2: [15:00-15:45 Keynote: the state of the platform; 12:30-13:30 Lunch]",
 "notes": "Gold prospectus draft, 2027-06-20: 10 guaranteed meetings for Brightpath Cloud and Corvane Data. Brightpath asked whether we can send them the attendee list.",
 "facts": "Verdict: \"fix first\" | ready to publish the brief: no | fix-level findings: 5\nSelf-set lines: [the fit score is the count of shared tags; at most 20 timetable rows are sent; at most 10 unplaced rows are sent; booking opening within 14 days is soon; a summary cap of 40 words; at most 5 caveats; the criterion template is the page's wording]\nNever stated: [a vendor or platform benchmark; a fill rate; a no-show or acceptance percentage; a meeting count from another event; a person, an organization, a slot or a consent the input does not hold]\nRun at all (step 1): decision: \"run it\" | moved by: \"Q1\" | named numbers: 2 | two populations: no\n  run must: [decision \"run it\" exactly; reason uses the word \"Q1\"]\nFixed (step 2) - what may not move, in this order - 5:\n- fixed 1: \"Signed meeting number\" | detail: Brightpath Cloud 10, Corvane Data 10 (a drafted package names a number) - an input to deliver | owner: \"event-sponsor-agreement\"\n  must: [contains \"Signed meeting number\"]\n- fixed 2: \"Published grid\" | detail: the block 2027-09-14 14:00-15:30 among the sessions 15:00-15:45 Keynote: the state of the platform, 12:30-13:30 Lunch - the block is a guest, a session never moves | owner: \"event-schedule-design\"\n  must: [contains \"Published grid\"]\n- fixed 3: \"Consent wording each side saw\" | detail: Sponsors recorded as shown, Attendees recorded as shown - scope is fixed when a person submits, never retrofitted | owner: \"the people who submitted\"\n  must: [contains \"Consent wording each side saw\"]\n- fixed 4: \"Floor plan\" | detail: meetings happen at the mezzanine meeting lounge, booked by the organizers | owner: \"event-venue-sourcing\"\n  must: [contains \"Floor plan\"]\n- fixed 5: \"Room block\" | detail: no room block contracted | owner: \"event-venue-sourcing\"\n  must: [contains \"Room block\"]\nConsent (step 4): matchable: \"6 Sponsors, 25 Attendees\" | excluded: \"0 Sponsors, 15 Attendees\" | directory only: 15 | registration only: 0 | nothing: 0 | wording Sponsors: \"recorded as shown\" | wording Attendees: \"recorded as shown\"\n  consent must: [matchable \"6 Sponsors, 25 Attendees\" exactly; excluded \"0 Sponsors, 15 Attendees\" exactly; note uses the word \"excluded\"]\nMatching mechanism menu (step 3), re-ranked - pick: \"Mutual opt-in\"\n- rung 1: \"Mutual opt-in\" | moved: made the pick by Q1: a package names a meeting number - promote the default to mutual opt-in\n- rung 2: \"Open directory\"\n- rung 3: \"Scored ranking\" | moved: promoted by Q4: structured, comparable profile data already exists on both sides from a form collected anyway\n- rung 4: \"Organizer brokering\" | moved: promoted by Q8: a named person is already staffed and can hand-pair\n- rung 5: \"No meeting program\" | moved: demoted by Q1: the program runs\n- deleted, not demoted: \"Any pairing where only one side opted in - handing a sponsor a list to book against\" | reason: the mechanic behind every ambushed-meeting complaint\n- notes: Two of the five axis orderings are argued, not asserted: effort tops at brokering because it never amortizes; compliance tops at scored ranking because it derives new facts about a person. Ten pairs, zero strict-dominance relations: relevance rewards human judgment, certainty rewards volume and structure.\nMechanism: pick: \"Mutual opt-in\" | moved by: \"Q1\" | candidate pairs: 32\nCriterion (the organizer's two halves): \"A meeting is a good match when a person from Sponsors who works on a product area and wants feedback from people running it in production meets a person from Attendees who runs or builds in that same area and said they want to talk about it, and both opted in to the pairing themselves.\"\n  mechanism must: [pick \"Mutual opt-in\" exactly; reason uses the word \"Q1\"; criterion uses the words \"good match\" and \"both\"]\nScheduling mechanic menu (step 5), re-ranked - pick: \"Self-service booking\"\n- rung 1: \"Self-service booking\"\n- rung 2: \"No booked slots\"\n- rung 3: \"Hybrid\"\n- rung 4: \"Organizer-assigned grid\"\n- deleted, not demoted: \"A meeting placed on someone's schedule without their acceptance\" | reason: it manufactures quota out of people's time, and a meeting nobody accepted is a no-show already on the schedule\n- notes: The delivered-quota axis is rank-identical to inverse effort - a warning, not a result; attendee autonomy is the axis that carries this menu. No compliance-cost axis applies here. Six pairs, zero strict-dominance relations.\nScheduling: pick: \"Self-service booking\" | moved by: \"default\"\n  scheduling must: [pick \"Self-service booking\" exactly; reason uses the word \"default\"]\nBlock (step 5): date: 2027-09-14 | as published: \"14:00-15:30\" | crosses sessions: 1 | slots laid: 3 | publish window: \"14:00-14:55\" | capacity: 12 meetings\nSlots - 3: [slot 1 \"14:00-14:15\"; slot 2 \"14:20-14:35\"; slot 3 \"14:40-14:55\"]\nTimetable (step 5) - placed: 12 of 32 candidate pairs | rows below: 12 of 12 | cut: 0 (at most 20 sent, self-set - the page's CSV holds every row) - in this order:\n- meeting 1: slot: \"14:00-14:15\" | table: \"Table 1\" | a: \"Mara Quist\" | b: \"Ada Brennan\" | kind: draft placement - both book or confirm\n  must: [slot \"14:00-14:15\" exactly; table \"Table 1\" exactly; a \"Mara Quist\" exactly; b \"Ada Brennan\" exactly]\n- meeting 2: slot: \"14:00-14:15\" | table: \"Table 2\" | a: \"Tomas Ilves\" | b: \"Viktor Hale\" | kind: draft placement - both book or confirm\n  must: [slot \"14:00-14:15\" exactly; table \"Table 2\" exactly; a \"Tomas Ilves\" exactly; b \"Viktor Hale\" exactly]\n- meeting 3: slot: \"14:00-14:15\" | table: \"Table 3\" | a: \"Ines Duarte\" | b: \"Sami Virtanen\" | kind: draft placement - both book or confirm\n  must: [slot \"14:00-14:15\" exactly; table \"Table 3\" exactly; a \"Ines Duarte\" exactly; b \"Sami Virtanen\" exactly]\n- meeting 4: slot: \"14:00-14:15\" | table: \"Table 4\" | a: \"Kofi Mensah\" | b: \"Cara Mbeki\" | kind: draft placement - both book or confirm\n  must: [slot \"14:00-14:15\" exactly; table \"Table 4\" exactly; a \"Kofi Mensah\" exactly; b \"Cara Mbeki\" exactly]\n- meeting 5: slot: \"14:20-14:35\" | table: \"Table 1\" | a: \"Mara Quist\" | b: \"Rosa Ibarra\" | kind: draft placement - both book or confirm\n  must: [slot \"14:20-14:35\" exactly; table \"Table 1\" exactly; a \"Mara Quist\" exactly; b \"Rosa Ibarra\" exactly]\n- meeting 6: slot: \"14:20-14:35\" | table: \"Table 2\" | a: \"Tomas Ilves\" | b: \"Bo Lindqvist\" | kind: draft placement - both book or confirm\n  must: [slot \"14:20-14:35\" exactly; table \"Table 2\" exactly; a \"Tomas Ilves\" exactly; b \"Bo Lindqvist\" exactly]\n- meeting 7: slot: \"14:20-14:35\" | table: \"Table 3\" | a: \"Lena Park\" | b: \"Dev Raman\" | kind: draft placement - both book or confirm\n  must: [slot \"14:20-14:35\" exactly; table \"Table 3\" exactly; a \"Lena Park\" exactly; b \"Dev Raman\" exactly]\n- meeting 8: slot: \"14:20-14:35\" | table: \"Table 4\" | a: \"Ravi Nair\" | b: \"Femi Adeyemi\" | kind: draft placement - both book or confirm\n  must: [slot \"14:20-14:35\" exactly; table \"Table 4\" exactly; a \"Ravi Nair\" exactly; b \"Femi Adeyemi\" exactly]\n- meeting 9: slot: \"14:40-14:55\" | table: \"Table 1\" | a: \"Mara Quist\" | b: \"Cara Mbeki\" | kind: draft placement - both book or confirm\n  must: [slot \"14:40-14:55\" exactly; table \"Table 1\" exactly; a \"Mara Quist\" exactly; b \"Cara Mbeki\" exactly]\n- meeting 10: slot: \"14:40-14:55\" | table: \"Table 2\" | a: \"Tomas Ilves\" | b: \"Dev Raman\" | kind: draft placement - both book or confirm\n  must: [slot \"14:40-14:55\" exactly; table \"Table 2\" exactly; a \"Tomas Ilves\" exactly; b \"Dev Raman\" exactly]\n- meeting 11: slot: \"14:40-14:55\" | table: \"Table 3\" | a: \"Ines Duarte\" | b: \"Elif Sahin\" | kind: draft placement - both book or confirm\n  must: [slot \"14:40-14:55\" exactly; table \"Table 3\" exactly; a \"Ines Duarte\" exactly; b \"Elif Sahin\" exactly]\n- meeting 12: slot: \"14:40-14:55\" | table: \"Table 4\" | a: \"Kofi Mensah\" | b: \"Omar Haddad\" | kind: draft placement - both book or confirm\n  must: [slot \"14:40-14:55\" exactly; table \"Table 4\" exactly; a \"Kofi Mensah\" exactly; b \"Omar Haddad\" exactly]\nUnplaced (step 5) - pairs both want, not placed: 20 | rows below: 10 of 20 | cut: 10 (at most 10 sent, self-set) - in this order:\n- unplaced 1: a: \"Mara Quist\" | b: \"Gus Moreau\" | why: \"every slot both are free is already booked for one of them\"\n  must: [a \"Mara Quist\" exactly; b \"Gus Moreau\" exactly; reason uses the word \"booked\"]\n- unplaced 2: a: \"Tomas Ilves\" | b: \"Hana Sato\" | why: \"every slot both are free is already booked for one of them\"\n  must: [a \"Tomas Ilves\" exactly; b \"Hana Sato\" exactly; reason uses the word \"booked\"]\n- unplaced 3: a: \"Mara Quist\" | b: \"Kai Nakamura\" | why: \"every slot both are free is already booked for one of them\"\n  must: [a \"Mara Quist\" exactly; b \"Kai Nakamura\" exactly; reason uses the word \"booked\"]\n- unplaced 4: a: \"Tomas Ilves\" | b: \"Lu Chen\" | why: \"every slot both are free is already booked for one of them\"\n  must: [a \"Tomas Ilves\" exactly; b \"Lu Chen\" exactly; reason uses the word \"booked\"]\n- unplaced 5: a: \"Mara Quist\" | b: \"Omar Haddad\" | why: \"every slot both are free is already booked for one of them\"\n  must: [a \"Mara Quist\" exactly; b \"Omar Haddad\" exactly; reason uses the word \"booked\"]\n- unplaced 6: a: \"Tomas Ilves\" | b: \"Pia Rossi\" | why: \"every slot both are free is already booked for one of them\"\n  must: [a \"Tomas Ilves\" exactly; b \"Pia Rossi\" exactly; reason uses the word \"booked\"]\n- unplaced 7: a: \"Mara Quist\" | b: \"Wen Zhou\" | why: \"no slot where both are free\"\n  must: [a \"Mara Quist\" exactly; b \"Wen Zhou\" exactly; reason uses the word \"free\"]\n- unplaced 8: a: \"Tomas Ilves\" | b: \"Quinn Abara\" | why: \"every slot both are free is already booked for one of them\"\n  must: [a \"Tomas Ilves\" exactly; b \"Quinn Abara\" exactly; reason uses the word \"booked\"]\n- unplaced 9: a: \"Mara Quist\" | b: \"Yusuf Kaya\" | why: \"every slot both are free is already booked for one of them\"\n  must: [a \"Mara Quist\" exactly; b \"Yusuf Kaya\" exactly; reason uses the word \"booked\"]\n- unplaced 10: a: \"Lena Park\" | b: \"Quinn Abara\" | why: \"every table is taken in every slot both are free\"\n  must: [a \"Lena Park\" exactly; b \"Quinn Abara\" exactly; reason uses the word \"table\"]\nQuota commitment posture menu (step 6), re-ranked - pick: \"Best-efforts target\"\n- rung 1: \"Best-efforts target\"\n- rung 2: \"No meeting promise\"\n- rung 3: \"Guaranteed count with criteria\"\n- rung 4: \"Guaranteed count\" | moved: demoted by Q10: no booked-versus-held count measured on a previous edition of this program - a guarantee would rest on nothing measured\n- deleted, not demoted: \"A meeting number printed in a prospectus with no criteria and no stated make-good\" | reason: the same commitment with the remedy left to be improvised in front of an unhappy sponsor\n- notes: The two guarantees tie on compliance cost, argued not dodged: both are a countersigned number to deliver or remedy. Price is rank-identical to inverse effort; renewal survivability makes this menu decidable. Six pairs, zero strict-dominance relations. Sponsorship buys access, never program influence.\nQuota (step 6) - sponsors with a named number: 2 | named in all: 20 | the block holds: 12 - in this order:\n- quota 1: sponsor: \"Brightpath Cloud\" | named: \"10\" | feasible: \"3\" | booked here: 3 | posture: \"Best-efforts target\" | status: over-committed by 7\n  must: [sponsor \"Brightpath Cloud\" exactly; named \"10\" exactly; feasible \"3\" exactly; posture \"Best-efforts target\" exactly]\n- quota 2: sponsor: \"Corvane Data\" | named: \"10\" | feasible: \"3\" | booked here: 3 | posture: \"Best-efforts target\" | status: over-committed by 7\n  must: [sponsor \"Corvane Data\" exactly; named \"10\" exactly; feasible \"3\" exactly; posture \"Best-efforts target\" exactly]\nNo-show handling menu (step 7), re-ranked - pick: \"Standby refill\"\n- rung 1: \"Standby refill\" | moved: made the pick by Q8: someone is already staffed at the meeting area during the block - the queue has someone to drain it\n- rung 2: \"Reconfirm-and-remind\"\n- rung 3: \"Nothing\"\n- deleted, not demoted: \"Slot overbooking\" | reason: Q10: no measured booked-versus-held count from a previous edition of this same program - and the event-level show-up bands are a different unit\n- deleted, not demoted: \"A deposit, a forfeited benefit, or any penalty on the attendee side of a missed meeting\" | reason: it puts a price on a conversation the attendee was invited to have\n- notes: Quota protected is rank-identical to inverse effort; counterpart experience does the work, and doing nothing outranks overbooking on it - an empty table disappoints one person, a collision turns away someone who did everything asked.\nNo-show: pick: \"Standby refill\" | moved by: \"Q8\" | the rule: every pairing confirmed by both sides before the schedule is published\n  no_show must: [pick \"Standby refill\" exactly; reason uses the word \"Q8\"]\nMeasurement (step 9) - per pair: [booked; held; empty; replaced] | measures, all self-set: [Held against booked; Booked against promised; Mutual-acceptance rate; Empty-slot count; Unwanted-meeting complaints; Confirmation completeness]\nHand-off (step 10): one generic outcome record, one row per pairing, to event-sponsor-fulfillment; no per-sponsor tracking or renewal report here.\nDesign must: [summary at most 40 words; verdict \"fix first\" exactly; fixed carries the 5 items above, in this order; timetable copies the 12 rows above, in this order; unplaced copies the 10 rows above, in this order; quota copies the 2 rows above, in this order; caveats carry the fix findings first, at most 5]\nBrief must: [title contains \"Harbourline DevConf 2027\"; who_meets_whom uses the words \"good match\" and \"both\"; when_and_where contains \"2027-09-14\" and \"14:00-14:55\" and the word \"session\"; how_to_book uses the word \"book\"; missed_slot uses the word \"standby\"; contact \"Ines Varga, sponsor desk\" exactly; consent_note uses the words \"withdraw\" and \"deleted\"; confirmations copies the 12 rows above, in this order, each message uses the word \"confirm\"] | brief note must: [begin \"Not ready to publish:\" and say what to fix first]\nFindings (17):\n[fix] block_session_1 (block): The block 14:00-15:30 crosses the published session \"15:00-15:45 Keynote: the state of the platform\" by 30 minutes. The block is a guest in the grid and loses every conflict: the page lays no slot inside the session, so publish the block as \"14:00-14:55\" or route its placement to samber/dev-event-organizer-skills@event-schedule-design - never move the session.\n[fix] quota_over_1 (quota): \"Brightpath Cloud\": the package names 10 meetings; this block can hold at most 3 for it (3 slots it is free in, 8 counterparts who opted in and share a tag) - over-committed by 7. Never fill it with whoever is free: change the drafted number or its posture before the package is sold.\n[fix] quota_over_2 (quota): \"Corvane Data\": the package names 10 meetings; this block can hold at most 3 for it (3 slots it is free in, 7 counterparts who opted in and share a tag) - over-committed by 7. Never fill it with whoever is free: change the drafted number or its posture before the package is sold.\n[fix] quota_sum (quota): The named numbers add up to 20; the block holds 12 meetings in all (3 slots x 4 tables) - the packages promise more than the block can hold.\n[fix] pkg_bare (quota): The package prints a meeting number with no criteria and no make-good - the rung the skill deletes, not demotes. Rewrite it as Best-efforts target with written criteria; samber/dev-event-organizer-skills@event-sponsor-agreement drafts the clause.\n[check] one_audience (run): Q2: one audience with sponsors standing in it - the program runs only to deliver the named number. Developer attendees are not buyers by default: an unsolicited vendor meeting is an interruption, so only people who opted in are matched.\n[check] retrofit_B (consent): 15 people on Attendees consented to a directory listing only - excluded from matching. Retrofitting consent after a directory is live is the one error here that cannot be undone: ask afresh with new wording, and they stay excluded until they say yes.\n[check] self_count (scheduling): Self-service booking delivers meetings but cannot guarantee a count - a named number on it is a target at most; promote to hybrid the moment a package signs the number.\n[check] list_request (consent): The notes ask to hand a sponsor a list of people - the deleted rung: a pairing where only one side opted in. Sponsors get aggregate demographics, never names; only people who opted in meet anyone.\n[info] pairs_blocked (pairs): 25 requests came from or reached someone whose consent does not cover matching - no pair is made from them.\n[info] pairs_notag (pairs): 5 opt-ins share no tag with the person asked - under the criterion that is not a match; the organizer may read them by hand.\n[info] unplaced (scheduling): 20 pairs both sides want are not placed - the block holds 12 meetings (3 slots x 4 tables); each is listed with its reason, and none is placed on anyone's schedule without both acceptances.\n[info] confirm_rule (noshow): Confirm every pairing with both sides before the schedule is published - publication is the point of no return; then publish one view per person, never the whole pair grid.\n[info] measure (measure): Every measure here is self-set and becomes meaningful only across editions of this program: record per pair booked, held, empty or replaced, and every complaint about an unwanted meeting.\n[info] notes (context): The pasted notes are context: a request in the notes is never a commitment.\n[info] handoff (scope): Hand the outcome downstream as one generic record - one row per pairing: the two sides, accepted by both, held, refilled from standby, the criteria checked. Per-sponsor tracking and renewal reporting belong to samber/dev-event-organizer-skills@event-sponsor-fulfillment, never built here.\n[info] scope (scope): No vendor or platform benchmark appears anywhere: no fill rate, no no-show percentage, no meeting count from another event. Every number on the page is the organizer's own or a count of it, and every rule of the page's own is labelled self-set."
}

Reply:

{
 "task": "design",
 "summary": "Fix first: two drafted packages promise 10 meetings each where the block holds 3 per sponsor, and the keynote overlaps the block - rewrite the packages and publish the block as laid.",
 "verdict": "fix first",
 "run": {
  "decision": "run it",
  "reason": "Q1: a package names a meeting number for 2 sponsors - that is an input to deliver, not a decision to take."
 },
 "fixed": [
  "Signed meeting number - Brightpath Cloud 10, Corvane Data 10 (a drafted package names a number) - an input to deliver (event-sponsor-agreement).",
  "Published grid - the block 2027-09-14 14:00-15:30 among the sessions 15:00-15:45 Keynote: the state of the platform, 12:30-13:30 Lunch - the block is a guest; a session never moves (event-schedule-design).",
  "Consent wording each side saw - Sponsors recorded as shown, Attendees recorded as shown - scope is fixed when a person submits, never retrofitted (the people who submitted).",
  "Floor plan - meetings happen at the mezzanine meeting lounge, booked by the organizers (event-venue-sourcing).",
  "Room block - no room block contracted (event-venue-sourcing)."
 ],
 "consent": {
  "matchable": "6 Sponsors, 25 Attendees",
  "excluded": "0 Sponsors, 15 Attendees",
  "note": "15 people whose consent covers only a directory listing are excluded - a directory consent is never re-purposed into matching."
 },
 "mechanism": {
  "pick": "Mutual opt-in",
  "criterion": "A meeting is a good match when a person from Sponsors who works on a product area and wants feedback from people running it in production meets a person from Attendees who runs or builds in that same area and said they want to talk about it, and both opted in to the pairing themselves.",
  "reason": "Q1: a package names a meeting number - promote the default to mutual opt-in."
 },
 "scheduling": {
  "pick": "Self-service booking",
  "reason": "Nothing in the interview moved this menu, so the default stands: each side states when it is free, the counterpart books - every meeting on an attendee's day is one they chose; cannot guarantee a count."
 },
 "timetable": [
  {
   "slot": "14:00-14:15",
   "table": "Table 1",
   "a": "Mara Quist",
   "b": "Ada Brennan"
  },
  {
   "slot": "14:00-14:15",
   "table": "Table 2",
   "a": "Tomas Ilves",
   "b": "Viktor Hale"
  },
  {
   "slot": "14:00-14:15",
   "table": "Table 3",
   "a": "Ines Duarte",
   "b": "Sami Virtanen"
  },
  {
   "slot": "14:00-14:15",
   "table": "Table 4",
   "a": "Kofi Mensah",
   "b": "Cara Mbeki"
  },
  {
   "slot": "14:20-14:35",
   "table": "Table 1",
   "a": "Mara Quist",
   "b": "Rosa Ibarra"
  },
  {
   "slot": "14:20-14:35",
   "table": "Table 2",
   "a": "Tomas Ilves",
   "b": "Bo Lindqvist"
  },
  {
   "slot": "14:20-14:35",
   "table": "Table 3",
   "a": "Lena Park",
   "b": "Dev Raman"
  },
  {
   "slot": "14:20-14:35",
   "table": "Table 4",
   "a": "Ravi Nair",
   "b": "Femi Adeyemi"
  },
  {
   "slot": "14:40-14:55",
   "table": "Table 1",
   "a": "Mara Quist",
   "b": "Cara Mbeki"
  },
  {
   "slot": "14:40-14:55",
   "table": "Table 2",
   "a": "Tomas Ilves",
   "b": "Dev Raman"
  },
  {
   "slot": "14:40-14:55",
   "table": "Table 3",
   "a": "Ines Duarte",
   "b": "Elif Sahin"
  },
  {
   "slot": "14:40-14:55",
   "table": "Table 4",
   "a": "Kofi Mensah",
   "b": "Omar Haddad"
  }
 ],
 "unplaced": [
  {
   "a": "Mara Quist",
   "b": "Gus Moreau",
   "reason": "Every slot both are free is already booked for one of them."
  },
  {
   "a": "Tomas Ilves",
   "b": "Hana Sato",
   "reason": "Every slot both are free is already booked for one of them."
  },
  {
   "a": "Mara Quist",
   "b": "Kai Nakamura",
   "reason": "Every slot both are free is already booked for one of them."
  },
  {
   "a": "Tomas Ilves",
   "b": "Lu Chen",
   "reason": "Every slot both are free is already booked for one of them."
  },
  {
   "a": "Mara Quist",
   "b": "Omar Haddad",
   "reason": "Every slot both are free is already booked for one of them."
  },
  {
   "a": "Tomas Ilves",
   "b": "Pia Rossi",
   "reason": "Every slot both are free is already booked for one of them."
  },
  {
   "a": "Mara Quist",
   "b": "Wen Zhou",
   "reason": "No slot where both are free."
  },
  {
   "a": "Tomas Ilves",
   "b": "Quinn Abara",
   "reason": "Every slot both are free is already booked for one of them."
  },
  {
   "a": "Mara Quist",
   "b": "Yusuf Kaya",
   "reason": "Every slot both are free is already booked for one of them."
  },
  {
   "a": "Lena Park",
   "b": "Quinn Abara",
   "reason": "Every table is taken in every slot both are free."
  }
 ],
 "quota": [
  {
   "sponsor": "Brightpath Cloud",
   "named": "10",
   "feasible": "3",
   "posture": "Best-efforts target"
  },
  {
   "sponsor": "Corvane Data",
   "named": "10",
   "feasible": "3",
   "posture": "Best-efforts target"
  }
 ],
 "no_show": {
  "pick": "Standby refill",
  "reason": "Q8: someone is already staffed at the meeting area during the block - the queue has someone to drain it."
 },
 "caveats": [
  "The block 14:00-15:30 crosses the published session \"15:00-15:45 Keynote: the state of the platform\" by 30 minutes.",
  "\"Brightpath Cloud\": the package names 10 meetings; this block can hold at most 3 for it (3 slots it is free in, 8 counterparts who opted in and share a tag) - over-committed by 7.",
  "\"Corvane Data\": the package names 10 meetings; this block can hold at most 3 for it (3 slots it is free in, 7 counterparts who opted in and share a tag) - over-committed by 7.",
  "The named numbers add up to 20; the block holds 12 meetings in all (3 slots x 4 tables) - the packages promise more than the block can hold.",
  "The package prints a meeting number with no criteria and no make-good - the rung the skill deletes, not demotes."
 ]
}

The page's check: kept - nothing to flag

The same, block moved and the quota posture fixed - ready to publish - brief

Verdict: ready to publish the brief; ready to publish: yes; run it; matchable: 6 Sponsors, 25 Attendees; mechanism: Mutual opt-in; scheduling: Self-service booking; 16 of 32 pairs placed in 16 seats, published as 13:30-14:45; quota: Best-efforts target; no-show: Standby refill; 0 fix-level findings.

Input:

{
 "task": "brief",
 "event": "Event: \"Harbourline DevConf 2027\" | dates: 2027-09-14 to 2027-09-15 | city: \"Port Avel\" | attendance: 700 | run by: \"a community event\" | as of: 2027-07-01\nQ1 a meeting number in a package: \"a drafted package names a number\"\nQ2 the two sides: \"one audience with sponsors standing in it\" | invited specifically to meet each other: \"no\"\nQ3 expected pairs: \"more than a handful\"\nQ4 data held: \"an opt-in profile form the registration flow already collects, on both sides\" | a sponsor's own target list: no\nQ5 consent wording seen: Sponsors: \"recorded as shown\" | Attendees: \"recorded as shown\" | the wording: \"Join the 1:1 meeting pool: a sponsor you opt in to sees your name, company and interests once you both accept, you can withdraw any time, the pool is deleted 30 days after the event.\"\nQ6 where meetings happen: \"the mezzanine meeting lounge, booked by the organizers\" | room block contracted: no\nQ7 the block in the grid: \"placed and fixed in the published grid\"\nQ8 staffing during the block: \"someone is staffed at the meeting area during the block\"\nQ9 booking opens: 2027-08-01 | schedule stops moving: 2027-09-07\nQ10 edition: \"a one-off edition\" | measured on this program last edition: none\nQ11 effort ceiling: \"medium\" | political capital to tell a paying sponsor: \"yes\"\nNamed organizer on duty: \"Ines Varga, sponsor desk\"\nPackage wording: \"a best-efforts target, criteria written\" | make-good: \"not stated\" | criteria: \"an attendee who listed one of the sponsor's areas and opted in to that sponsor, not the sponsor's own staff or an existing customer, Ines Varga decides a borderline case by 2027-09-01\"\nCriterion halves: Sponsors situation: \"works on a product area and wants feedback from people running it in production\" | Attendees capability: \"runs or builds in that same area and said they want to talk about it\"",
 "sides": "Sponsors (side A) - 6, one per line:\n- a 1: \"Mara Quist\" | organization: \"Brightpath Cloud\" | wants to meet: [observability; kubernetes] | consented to: \"matching\" | matchable: yes | meeting number named: 4 | available: \"the whole block\"\n- a 2: \"Tomas Ilves\" | organization: \"Corvane Data\" | wants to meet: [databases; data pipelines] | consented to: \"matching\" | matchable: yes | meeting number named: 4 | available: \"the whole block\"\n- a 3: \"Ines Duarte\" | organization: \"Delphin Labs\" | wants to meet: [security; identity] | consented to: \"matching\" | matchable: yes | meeting number named: not set | available: \"the whole block\"\n- a 4: \"Kofi Mensah\" | organization: \"Equivane Dev\" | wants to meet: [developer tooling; ci; cd] | consented to: \"matching\" | matchable: yes | meeting number named: not set | available: \"the whole block\"\n- a 5: \"Lena Park\" | organization: \"Fernhill AI\" | wants to meet: [machine learning; data pipelines] | consented to: \"matching\" | matchable: yes | meeting number named: not set | available: \"the whole block\"\n- a 6: \"Ravi Nair\" | organization: \"Gridline Pay\" | wants to meet: [payments; apis] | consented to: \"matching\" | matchable: yes | meeting number named: not set | available: \"the whole block\"\nAttendees (side B) - 40, one per line:\n- b 1: \"Ada Brennan\" | organization: \"Kelpwise\" | interests: [observability; kubernetes] | consented to: \"matching\" | matchable: yes | opted in to meet: [brightpath cloud; equivane dev] | available: \"the whole block\"\n- b 2: \"Bo Lindqvist\" | organization: \"Northmark\" | interests: [databases] | consented to: \"matching\" | matchable: yes | opted in to meet: [corvane data] | available: \"the whole block\"\n- b 3: \"Cara Mbeki\" | organization: \"Tallowsoft\" | interests: [kubernetes; ci; cd] | consented to: \"matching\" | matchable: yes | opted in to meet: [brightpath cloud; equivane dev] | available: \"the whole block\"\n- b 4: \"Dev Raman\" | organization: \"Saltgrid\" | interests: [data pipelines; machine learning] | consented to: \"matching\" | matchable: yes | opted in to meet: [corvane data; fernhill ai] | available: \"the whole block\"\n- b 5: \"Elif Sahin\" | organization: \"Brooklarch Health\" | interests: [security] | consented to: \"matching\" | matchable: yes | opted in to meet: [delphin labs] | available: \"the whole block\"\n- b 6: \"Femi Adeyemi\" | organization: \"Quaymarrow Bank\" | interests: [payments; security] | consented to: \"matching\" | matchable: yes | opted in to meet: [gridline pay; delphin labs] | available: \"the whole block\"\n- b 7: \"Gus Moreau\" | organization: \"Larchfield\" | interests: [observability] | consented to: \"matching\" | matchable: yes | opted in to meet: [brightpath cloud] | available: \"the whole block\"\n- b 8: \"Hana Sato\" | organization: \"Moorgate Media\" | interests: [databases; apis] | consented to: \"matching\" | matchable: yes | opted in to meet: [corvane data; gridline pay] | available: \"the whole block\"\n- b 9: \"Ivo Petrov\" | organization: \"Pinecrest\" | interests: [machine learning] | consented to: \"matching\" | matchable: yes | opted in to meet: [fernhill ai] | available: \"the whole block\"\n- b 10: \"Jade Okafor\" | organization: \"Riverbend\" | interests: [developer tooling] | consented to: \"matching\" | matchable: yes | opted in to meet: [equivane dev] | available: \"the whole block\"\n- b 11: \"Kai Nakamura\" | organization: \"Stonefly\" | interests: [kubernetes] | consented to: \"matching\" | matchable: yes | opted in to meet: [brightpath cloud] | available: \"the whole block\"\n- b 12: \"Lu Chen\" | organization: \"Thornbury\" | interests: [data pipelines] | consented to: \"matching\" | matchable: yes | opted in to meet: [corvane data] | available: \"the whole block\"\n- b 13: \"Mia Kowalski\" | organization: \"Umberly\" | interests: [identity] | consented to: \"matching\" | matchable: yes | opted in to meet: [delphin labs] | available: \"the whole block\"\n- b 14: \"Nils Berg\" | organization: \"Vantor\" | interests: [apis] | consented to: \"matching\" | matchable: yes | opted in to meet: [gridline pay] | available: \"the whole block\"\n- b 15: \"Omar Haddad\" | organization: \"Westray\" | interests: [observability; ci; cd] | consented to: \"matching\" | matchable: yes | opted in to meet: \"any\" | available: \"the whole block\"\n- b 16: \"Pia Rossi\" | organization: \"Yarrowby\" | interests: [databases] | consented to: \"matching\" | matchable: yes | opted in to meet: [corvane data] | available: \"the whole block\"\n- b 17: \"Quinn Abara\" | organization: \"Zellmark\" | interests: [machine learning; data pipelines] | consented to: \"matching\" | matchable: yes | opted in to meet: [fernhill ai; corvane data] | available: \"the whole block\"\n- b 18: \"Rosa Ibarra\" | organization: \"Ashcombe\" | interests: [kubernetes; observability] | consented to: \"matching\" | matchable: yes | opted in to meet: [brightpath cloud] | available: \"the whole block\"\n- b 19: \"Sami Virtanen\" | organization: \"Birchwood\" | interests: [security; identity] | consented to: \"matching\" | matchable: yes | opted in to meet: [delphin labs] | available: \"the whole block\"\n- b 20: \"Tara Doyle\" | organization: \"Cobbleton\" | interests: [ci; cd] | consented to: \"matching\" | matchable: yes | opted in to meet: [equivane dev] | available: \"the whole block\"\n- b 21: \"Uma Iyer\" | organization: \"Dunmore\" | interests: [payments] | consented to: \"matching\" | matchable: yes | opted in to meet: [gridline pay] | available: \"the whole block\"\n- b 22: \"Viktor Hale\" | organization: \"Elmstead\" | interests: [databases; data pipelines] | consented to: \"matching\" | matchable: yes | opted in to meet: [corvane data] | available: \"the whole block\"\n- b 23: \"Wen Zhou\" | organization: \"Foxley\" | interests: [observability] | consented to: \"matching\" | matchable: yes | opted in to meet: [brightpath cloud] | available: [16:00-17:00]\n- b 24: \"Xena Laine\" | organization: \"Glenrock\" | interests: [machine learning] | consented to: \"matching\" | matchable: yes | opted in to meet: [fernhill ai] | available: \"the whole block\"\n- b 25: \"Yusuf Kaya\" | organization: \"Hawthorne\" | interests: [developer tooling; kubernetes] | consented to: \"matching\" | matchable: yes | opted in to meet: [equivane dev; brightpath cloud] | available: \"the whole block\"\n- b 26: \"Zoe Grant\" | organization: \"Ivyhill\" | interests: [observability] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [brightpath cloud] | available: \"the whole block\"\n- b 27: \"Abel Moss\" | organization: \"Juniper Row\" | interests: [databases] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [corvane data] | available: \"the whole block\"\n- b 28: \"Bree Holt\" | organization: \"Kestrel Bay\" | interests: [security] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [delphin labs] | available: \"the whole block\"\n- b 29: \"Cyril Vance\" | organization: \"Lowmoor\" | interests: [ci; cd] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [equivane dev] | available: \"the whole block\"\n- b 30: \"Dina Faro\" | organization: \"Marlow Works\" | interests: [machine learning] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [fernhill ai] | available: \"the whole block\"\n- b 31: \"Edo Ferri\" | organization: \"Netherby\" | interests: [payments] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [gridline pay] | available: \"the whole block\"\n- b 32: \"Fay Lund\" | organization: \"Oakhurst\" | interests: [kubernetes] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [brightpath cloud] | available: \"the whole block\"\n- b 33: \"Gil Ortega\" | organization: \"Penhallow\" | interests: [data pipelines] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [corvane data] | available: \"the whole block\"\n- b 34: \"Hal Kimura\" | organization: \"Quillon\" | interests: [identity] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [delphin labs] | available: \"the whole block\"\n- b 35: \"Iris Novak\" | organization: \"Redcliffe\" | interests: [developer tooling] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: \"any\" | available: \"the whole block\"\n- b 36: \"Jon Arden\" | organization: \"Seacombe\" | interests: [apis] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [gridline pay] | available: \"the whole block\"\n- b 37: \"Kim Soler\" | organization: \"Trevose\" | interests: [observability] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: \"any\" | available: \"the whole block\"\n- b 38: \"Leo Strand\" | organization: \"Underhill\" | interests: [databases] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [corvane data] | available: \"the whole block\"\n- b 39: \"Mona Reyes\" | organization: \"Vellacott\" | interests: [machine learning] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [fernhill ai] | available: \"the whole block\"\n- b 40: \"Ned Cole\" | organization: \"Wexcombe\" | interests: [security] | consented to: \"a directory listing only\" | matchable: no - a directory listing only | opted in to meet: [delphin labs] | available: \"the whole block\"",
 "block": "Block: date: 2027-09-14 | as published: \"13:30-15:00\" | slot length: 15 min | buffer: 5 min | tables in parallel: 4\nPublished sessions it must not cross - 2: [15:00-15:45 Keynote: the state of the platform; 12:30-13:30 Lunch]",
 "notes": "The schedule team moved the meeting block to 13:30-15:00, clear of the keynote. The two Gold packages now say: we will aim to arrange 4 meetings with attendees matching the written criteria - a target, not a guarantee.",
 "facts": "Verdict: \"ready to publish the brief\" | ready to publish the brief: yes | fix-level findings: 0\nSelf-set lines: [the fit score is the count of shared tags; at most 20 timetable rows are sent; at most 10 unplaced rows are sent; booking opening within 14 days is soon; a summary cap of 40 words; at most 5 caveats; the criterion template is the page's wording]\nNever stated: [a vendor or platform benchmark; a fill rate; a no-show or acceptance percentage; a meeting count from another event; a person, an organization, a slot or a consent the input does not hold]\nRun at all (step 1): decision: \"run it\" | moved by: \"Q1\" | named numbers: 2 | two populations: no\n  run must: [decision \"run it\" exactly; reason uses the word \"Q1\"]\nFixed (step 2) - what may not move, in this order - 5:\n- fixed 1: \"Signed meeting number\" | detail: Brightpath Cloud 4, Corvane Data 4 (a drafted package names a number) - an input to deliver | owner: \"event-sponsor-agreement\"\n  must: [contains \"Signed meeting number\"]\n- fixed 2: \"Published grid\" | detail: the block 2027-09-14 13:30-15:00 among the sessions 15:00-15:45 Keynote: the state of the platform, 12:30-13:30 Lunch - the block is a guest, a session never moves | owner: \"event-schedule-design\"\n  must: [contains \"Published grid\"]\n- fixed 3: \"Consent wording each side saw\" | detail: Sponsors recorded as shown, Attendees recorded as shown - scope is fixed when a person submits, never retrofitted | owner: \"the people who submitted\"\n  must: [contains \"Consent wording each side saw\"]\n- fixed 4: \"Floor plan\" | detail: meetings happen at the mezzanine meeting lounge, booked by the organizers | owner: \"event-venue-sourcing\"\n  must: [contains \"Floor plan\"]\n- fixed 5: \"Room block\" | detail: no room block contracted | owner: \"event-venue-sourcing\"\n  must: [contains \"Room block\"]\nConsent (step 4): matchable: \"6 Sponsors, 25 Attendees\" | excluded: \"0 Sponsors, 15 Attendees\" | directory only: 15 | registration only: 0 | nothing: 0 | wording Sponsors: \"recorded as shown\" | wording Attendees: \"recorded as shown\"\n  consent must: [matchable \"6 Sponsors, 25 Attendees\" exactly; excluded \"0 Sponsors, 15 Attendees\" exactly; note uses the word \"excluded\"]\nMatching mechanism menu (step 3), re-ranked - pick: \"Mutual opt-in\"\n- rung 1: \"Mutual opt-in\" | moved: made the pick by Q1: a package names a meeting number - promote the default to mutual opt-in\n- rung 2: \"Open directory\"\n- rung 3: \"Scored ranking\" | moved: promoted by Q4: structured, comparable profile data already exists on both sides from a form collected anyway\n- rung 4: \"Organizer brokering\" | moved: promoted by Q8: a named person is already staffed and can hand-pair\n- rung 5: \"No meeting program\" | moved: demoted by Q1: the program runs\n- deleted, not demoted: \"Any pairing where only one side opted in - handing a sponsor a list to book against\" | reason: the mechanic behind every ambushed-meeting complaint\n- notes: Two of the five axis orderings are argued, not asserted: effort tops at brokering because it never amortizes; compliance tops at scored ranking because it derives new facts about a person. Ten pairs, zero strict-dominance relations: relevance rewards human judgment, certainty rewards volume and structure.\nMechanism: pick: \"Mutual opt-in\" | moved by: \"Q1\" | candidate pairs: 32\nCriterion (the organizer's two halves): \"A meeting is a good match when a person from Sponsors who works on a product area and wants feedback from people running it in production meets a person from Attendees who runs or builds in that same area and said they want to talk about it, and both opted in to the pairing themselves.\"\n  mechanism must: [pick \"Mutual opt-in\" exactly; reason uses the word \"Q1\"; criterion uses the words \"good match\" and \"both\"]\nScheduling mechanic menu (step 5), re-ranked - pick: \"Self-service booking\"\n- rung 1: \"Self-service booking\"\n- rung 2: \"No booked slots\"\n- rung 3: \"Hybrid\"\n- rung 4: \"Organizer-assigned grid\"\n- deleted, not demoted: \"A meeting placed on someone's schedule without their acceptance\" | reason: it manufactures quota out of people's time, and a meeting nobody accepted is a no-show already on the schedule\n- notes: The delivered-quota axis is rank-identical to inverse effort - a warning, not a result; attendee autonomy is the axis that carries this menu. No compliance-cost axis applies here. Six pairs, zero strict-dominance relations.\nScheduling: pick: \"Self-service booking\" | moved by: \"default\"\n  scheduling must: [pick \"Self-service booking\" exactly; reason uses the word \"default\"]\nBlock (step 5): date: 2027-09-14 | as published: \"13:30-15:00\" | crosses sessions: 0 | slots laid: 4 | publish window: \"13:30-14:45\" | capacity: 16 meetings\nSlots - 4: [slot 1 \"13:30-13:45\"; slot 2 \"13:50-14:05\"; slot 3 \"14:10-14:25\"; slot 4 \"14:30-14:45\"]\nTimetable (step 5) - placed: 16 of 32 candidate pairs | rows below: 16 of 16 | cut: 0 (at most 20 sent, self-set - the page's CSV holds every row) - in this order:\n- meeting 1: slot: \"13:30-13:45\" | table: \"Table 1\" | a: \"Mara Quist\" | b: \"Ada Brennan\" | kind: draft placement - both book or confirm\n  must: [slot \"13:30-13:45\" exactly; table \"Table 1\" exactly; a \"Mara Quist\" exactly; b \"Ada Brennan\" exactly]\n- meeting 2: slot: \"13:30-13:45\" | table: \"Table 2\" | a: \"Tomas Ilves\" | b: \"Viktor Hale\" | kind: draft placement - both book or confirm\n  must: [slot \"13:30-13:45\" exactly; table \"Table 2\" exactly; a \"Tomas Ilves\" exactly; b \"Viktor Hale\" exactly]\n- meeting 3: slot: \"13:30-13:45\" | table: \"Table 3\" | a: \"Ines Duarte\" | b: \"Sami Virtanen\" | kind: draft placement - both book or confirm\n  must: [slot \"13:30-13:45\" exactly; table \"Table 3\" exactly; a \"Ines Duarte\" exactly; b \"Sami Virtanen\" exactly]\n- meeting 4: slot: \"13:30-13:45\" | table: \"Table 4\" | a: \"Kofi Mensah\" | b: \"Cara Mbeki\" | kind: draft placement - both book or confirm\n  must: [slot \"13:30-13:45\" exactly; table \"Table 4\" exactly; a \"Kofi Mensah\" exactly; b \"Cara Mbeki\" exactly]\n- meeting 5: slot: \"13:50-14:05\" | table: \"Table 1\" | a: \"Mara Quist\" | b: \"Rosa Ibarra\" | kind: draft placement - both book or confirm\n  must: [slot \"13:50-14:05\" exactly; table \"Table 1\" exactly; a \"Mara Quist\" exactly; b \"Rosa Ibarra\" exactly]\n- meeting 6: slot: \"13:50-14:05\" | table: \"Table 2\" | a: \"Tomas Ilves\" | b: \"Bo Lindqvist\" | kind: draft placement - both book or confirm\n  must: [slot \"13:50-14:05\" exactly; table \"Table 2\" exactly; a \"Tomas Ilves\" exactly; b \"Bo Lindqvist\" exactly]\n- meeting 7: slot: \"13:50-14:05\" | table: \"Table 3\" | a: \"Lena Park\" | b: \"Dev Raman\" | kind: draft placement - both book or confirm\n  must: [slot \"13:50-14:05\" exactly; table \"Table 3\" exactly; a \"Lena Park\" exactly; b \"Dev Raman\" exactly]\n- meeting 8: slot: \"13:50-14:05\" | table: \"Table 4\" | a: \"Ravi Nair\" | b: \"Femi Adeyemi\" | kind: draft placement - both book or confirm\n  must: [slot \"13:50-14:05\" exactly; table \"Table 4\" exactly; a \"Ravi Nair\" exactly; b \"Femi Adeyemi\" exactly]\n- meeting 9: slot: \"14:10-14:25\" | table: \"Table 1\" | a: \"Mara Quist\" | b: \"Cara Mbeki\" | kind: draft placement - both book or confirm\n  must: [slot \"14:10-14:25\" exactly; table \"Table 1\" exactly; a \"Mara Quist\" exactly; b \"Cara Mbeki\" exactly]\n- meeting 10: slot: \"14:10-14:25\" | table: \"Table 2\" | a: \"Tomas Ilves\" | b: \"Dev Raman\" | kind: draft placement - both book or confirm\n  must: [slot \"14:10-14:25\" exactly; table \"Table 2\" exactly; a \"Tomas Ilves\" exactly; b \"Dev Raman\" exactly]\n- meeting 11: slot: \"14:10-14:25\" | table: \"Table 3\" | a: \"Ines Duarte\" | b: \"Elif Sahin\" | kind: draft placement - both book or confirm\n  must: [slot \"14:10-14:25\" exactly; table \"Table 3\" exactly; a \"Ines Duarte\" exactly; b \"Elif Sahin\" exactly]\n- meeting 12: slot: \"14:10-14:25\" | table: \"Table 4\" | a: \"Kofi Mensah\" | b: \"Omar Haddad\" | kind: draft placement - both book or confirm\n  must: [slot \"14:10-14:25\" exactly; table \"Table 4\" exactly; a \"Kofi Mensah\" exactly; b \"Omar Haddad\" exactly]\n- meeting 13: slot: \"14:30-14:45\" | table: \"Table 1\" | a: \"Mara Quist\" | b: \"Gus Moreau\" | kind: draft placement - both book or confirm\n  must: [slot \"14:30-14:45\" exactly; table \"Table 1\" exactly; a \"Mara Quist\" exactly; b \"Gus Moreau\" exactly]\n- meeting 14: slot: \"14:30-14:45\" | table: \"Table 2\" | a: \"Tomas Ilves\" | b: \"Hana Sato\" | kind: draft placement - both book or confirm\n  must: [slot \"14:30-14:45\" exactly; table \"Table 2\" exactly; a \"Tomas Ilves\" exactly; b \"Hana Sato\" exactly]\n- meeting 15: slot: \"14:30-14:45\" | table: \"Table 3\" | a: \"Lena Park\" | b: \"Quinn Abara\" | kind: draft placement - both book or confirm\n  must: [slot \"14:30-14:45\" exactly; table \"Table 3\" exactly; a \"Lena Park\" exactly; b \"Quinn Abara\" exactly]\n- meeting 16: slot: \"14:30-14:45\" | table: \"Table 4\" | a: \"Ines Duarte\" | b: \"Femi Adeyemi\" | kind: draft placement - both book or confirm\n  must: [slot \"14:30-14:45\" exactly; table \"Table 4\" exactly; a \"Ines Duarte\" exactly; b \"Femi Adeyemi\" exactly]\nUnplaced (step 5) - pairs both want, not placed: 16 | rows below: 10 of 16 | cut: 6 (at most 10 sent, self-set) - in this order:\n- unplaced 1: a: \"Mara Quist\" | b: \"Kai Nakamura\" | why: \"every slot both are free is already booked for one of them\"\n  must: [a \"Mara Quist\" exactly; b \"Kai Nakamura\" exactly; reason uses the word \"booked\"]\n- unplaced 2: a: \"Tomas Ilves\" | b: \"Lu Chen\" | why: \"every slot both are free is already booked for one of them\"\n  must: [a \"Tomas Ilves\" exactly; b \"Lu Chen\" exactly; reason uses the word \"booked\"]\n- unplaced 3: a: \"Mara Quist\" | b: \"Omar Haddad\" | why: \"every slot both are free is already booked for one of them\"\n  must: [a \"Mara Quist\" exactly; b \"Omar Haddad\" exactly; reason uses the word \"booked\"]\n- unplaced 4: a: \"Tomas Ilves\" | b: \"Pia Rossi\" | why: \"every slot both are free is already booked for one of them\"\n  must: [a \"Tomas Ilves\" exactly; b \"Pia Rossi\" exactly; reason uses the word \"booked\"]\n- unplaced 5: a: \"Ravi Nair\" | b: \"Hana Sato\" | why: \"every table is taken in every slot both are free\"\n  must: [a \"Ravi Nair\" exactly; b \"Hana Sato\" exactly; reason uses the word \"table\"]\n- unplaced 6: a: \"Mara Quist\" | b: \"Wen Zhou\" | why: \"no slot where both are free\"\n  must: [a \"Mara Quist\" exactly; b \"Wen Zhou\" exactly; reason uses the word \"free\"]\n- unplaced 7: a: \"Tomas Ilves\" | b: \"Quinn Abara\" | why: \"every slot both are free is already booked for one of them\"\n  must: [a \"Tomas Ilves\" exactly; b \"Quinn Abara\" exactly; reason uses the word \"booked\"]\n- unplaced 8: a: \"Kofi Mensah\" | b: \"Tara Doyle\" | why: \"every table is taken in every slot both are free\"\n  must: [a \"Kofi Mensah\" exactly; b \"Tara Doyle\" exactly; reason uses the word \"table\"]\n- unplaced 9: a: \"Lena Park\" | b: \"Ivo Petrov\" | why: \"every table is taken in every slot both are free\"\n  must: [a \"Lena Park\" exactly; b \"Ivo Petrov\" exactly; reason uses the word \"table\"]\n- unplaced 10: a: \"Ravi Nair\" | b: \"Nils Berg\" | why: \"every table is taken in every slot both are free\"\n  must: [a \"Ravi Nair\" exactly; b \"Nils Berg\" exactly; reason uses the word \"table\"]\nQuota commitment posture menu (step 6), re-ranked - pick: \"Best-efforts target\"\n- rung 1: \"Best-efforts target\"\n- rung 2: \"No meeting promise\"\n- rung 3: \"Guaranteed count with criteria\"\n- rung 4: \"Guaranteed count\" | moved: demoted by Q10: no booked-versus-held count measured on a previous edition of this program - a guarantee would rest on nothing measured\n- deleted, not demoted: \"A meeting number printed in a prospectus with no criteria and no stated make-good\" | reason: the same commitment with the remedy left to be improvised in front of an unhappy sponsor\n- notes: The two guarantees tie on compliance cost, argued not dodged: both are a countersigned number to deliver or remedy. Price is rank-identical to inverse effort; renewal survivability makes this menu decidable. Six pairs, zero strict-dominance relations. Sponsorship buys access, never program influence.\nQuota (step 6) - sponsors with a named number: 2 | named in all: 8 | the block holds: 16 - in this order:\n- quota 1: sponsor: \"Brightpath Cloud\" | named: \"4\" | feasible: \"4\" | booked here: 4 | posture: \"Best-efforts target\" | status: holds\n  must: [sponsor \"Brightpath Cloud\" exactly; named \"4\" exactly; feasible \"4\" exactly; posture \"Best-efforts target\" exactly]\n- quota 2: sponsor: \"Corvane Data\" | named: \"4\" | feasible: \"4\" | booked here: 4 | posture: \"Best-efforts target\" | status: holds\n  must: [sponsor \"Corvane Data\" exactly; named \"4\" exactly; feasible \"4\" exactly; posture \"Best-efforts target\" exactly]\nNo-show handling menu (step 7), re-ranked - pick: \"Standby refill\"\n- rung 1: \"Standby refill\" | moved: made the pick by Q8: someone is already staffed at the meeting area during the block - the queue has someone to drain it\n- rung 2: \"Reconfirm-and-remind\"\n- rung 3: \"Nothing\"\n- deleted, not demoted: \"Slot overbooking\" | reason: Q10: no measured booked-versus-held count from a previous edition of this same program - and the event-level show-up bands are a different unit\n- deleted, not demoted: \"A deposit, a forfeited benefit, or any penalty on the attendee side of a missed meeting\" | reason: it puts a price on a conversation the attendee was invited to have\n- notes: Quota protected is rank-identical to inverse effort; counterpart experience does the work, and doing nothing outranks overbooking on it - an empty table disappoints one person, a collision turns away someone who did everything asked.\nNo-show: pick: \"Standby refill\" | moved by: \"Q8\" | the rule: every pairing confirmed by both sides before the schedule is published\n  no_show must: [pick \"Standby refill\" exactly; reason uses the word \"Q8\"]\nMeasurement (step 9) - per pair: [booked; held; empty; replaced] | measures, all self-set: [Held against booked; Booked against promised; Mutual-acceptance rate; Empty-slot count; Unwanted-meeting complaints; Confirmation completeness]\nHand-off (step 10): one generic outcome record, one row per pairing, to event-sponsor-fulfillment; no per-sponsor tracking or renewal report here.\nDesign must: [summary at most 40 words; verdict \"ready to publish the brief\" exactly; fixed carries the 5 items above, in this order; timetable copies the 16 rows above, in this order; unplaced copies the 10 rows above, in this order; quota copies the 2 rows above, in this order; caveats carry the fix findings first, at most 5]\nBrief must: [title contains \"Harbourline DevConf 2027\"; who_meets_whom uses the words \"good match\" and \"both\"; when_and_where contains \"2027-09-14\" and \"13:30-14:45\" and the word \"session\"; how_to_book uses the word \"book\"; missed_slot uses the word \"standby\"; contact \"Ines Varga, sponsor desk\" exactly; consent_note uses the words \"withdraw\" and \"deleted\"; confirmations copies the 16 rows above, in this order, each message uses the word \"confirm\"] | brief note must: [use the word \"publish\" and say what happens next]\nCarried from the design: summary: \"Ready to publish the brief: the block sits clear of the keynote, both named targets of 4 fit the block, and every placed pair still needs both confirmations.\" | parts matching the page: 4 of 4\nFindings (11):\n[check] one_audience (run): Q2: one audience with sponsors standing in it - the program runs only to deliver the named number. Developer attendees are not buyers by default: an unsolicited vendor meeting is an interruption, so only people who opted in are matched.\n[check] retrofit_B (consent): 15 people on Attendees consented to a directory listing only - excluded from matching. Retrofitting consent after a directory is live is the one error here that cannot be undone: ask afresh with new wording, and they stay excluded until they say yes.\n[check] self_count (scheduling): Self-service booking delivers meetings but cannot guarantee a count - a named number on it is a target at most; promote to hybrid the moment a package signs the number.\n[info] pairs_blocked (pairs): 25 requests came from or reached someone whose consent does not cover matching - no pair is made from them.\n[info] pairs_notag (pairs): 5 opt-ins share no tag with the person asked - under the criterion that is not a match; the organizer may read them by hand.\n[info] unplaced (scheduling): 16 pairs both sides want are not placed - the block holds 16 meetings (4 slots x 4 tables); each is listed with its reason, and none is placed on anyone's schedule without both acceptances.\n[info] confirm_rule (noshow): Confirm every pairing with both sides before the schedule is published - publication is the point of no return; then publish one view per person, never the whole pair grid.\n[info] measure (measure): Every measure here is self-set and becomes meaningful only across editions of this program: record per pair booked, held, empty or replaced, and every complaint about an unwanted meeting.\n[info] notes (context): The pasted notes are context: a request in the notes is never a commitment.\n[info] handoff (scope): Hand the outcome downstream as one generic record - one row per pairing: the two sides, accepted by both, held, refilled from standby, the criteria checked. Per-sponsor tracking and renewal reporting belong to samber/dev-event-organizer-skills@event-sponsor-fulfillment, never built here.\n[info] scope (scope): No vendor or platform benchmark appears anywhere: no fill rate, no no-show percentage, no meeting count from another event. Every number on the page is the organizer's own or a count of it, and every rule of the page's own is labelled self-set."
}

Reply:

{
 "task": "brief",
 "title": "Harbourline DevConf 2027 - 1:1 meeting brief",
 "who_meets_whom": "A meeting is a good match when a person from Sponsors who works on a product area and wants feedback from people running it in production meets a person from Attendees who runs or builds in that same area and said they want to talk about it, and both opted in to the pairing themselves.",
 "when_and_where": "On 2027-09-14, 13:30-14:45, in the mezzanine meeting lounge, booked by the organizers. The block sits inside the published grid and never crosses a session.",
 "how_to_book": "Opt in to the people you want to meet. Once both of you have opted in, book a slot in the block from the times you are both free - every meeting on your day is one you chose, and both sides accept it before it is published.",
 "missed_slot": "If a confirmed meeting goes unfilled, the organizer on duty offers the slot to the next person on that side's standby list. Nobody pays a penalty for a missed meeting.",
 "contact": "Ines Varga, sponsor desk",
 "consent_note": "Your name, organization and interests are shown only to a counterpart once you both accept the pairing, and to the organizers. You can withdraw at any time, and your accepted pairings are cancelled when you do. The pool is deleted after the event.",
 "confirmations": [
  {
   "a": "Mara Quist",
   "b": "Ada Brennan",
   "slot": "13:30-13:45",
   "table": "Table 1",
   "message": "Please confirm your 1:1 meeting at 13:30-13:45, Table 1. It appears on the schedule only once you both confirm."
  },
  {
   "a": "Tomas Ilves",
   "b": "Viktor Hale",
   "slot": "13:30-13:45",
   "table": "Table 2",
   "message": "Please confirm your 1:1 meeting at 13:30-13:45, Table 2. It appears on the schedule only once you both confirm."
  },
  {
   "a": "Ines Duarte",
   "b": "Sami Virtanen",
   "slot": "13:30-13:45",
   "table": "Table 3",
   "message": "Please confirm your 1:1 meeting at 13:30-13:45, Table 3. It appears on the schedule only once you both confirm."
  },
  {
   "a": "Kofi Mensah",
   "b": "Cara Mbeki",
   "slot": "13:30-13:45",
   "table": "Table 4",
   "message": "Please confirm your 1:1 meeting at 13:30-13:45, Table 4. It appears on the schedule only once you both confirm."
  },
  {
   "a": "Mara Quist",
   "b": "Rosa Ibarra",
   "slot": "13:50-14:05",
   "table": "Table 1",
   "message": "Please confirm your 1:1 meeting at 13:50-14:05, Table 1. It appears on the schedule only once you both confirm."
  },
  {
   "a": "Tomas Ilves",
   "b": "Bo Lindqvist",
   "slot": "13:50-14:05",
   "table": "Table 2",
   "message": "Please confirm your 1:1 meeting at 13:50-14:05, Table 2. It appears on the schedule only once you both confirm."
  },
  {
   "a": "Lena Park",
   "b": "Dev Raman",
   "slot": "13:50-14:05",
   "table": "Table 3",
   "message": "Please confirm your 1:1 meeting at 13:50-14:05, Table 3. It appears on the schedule only once you both confirm."
  },
  {
   "a": "Ravi Nair",
   "b": "Femi Adeyemi",
   "slot": "13:50-14:05",
   "table": "Table 4",
   "message": "Please confirm your 1:1 meeting at 13:50-14:05, Table 4. It appears on the schedule only once you both confirm."
  },
  {
   "a": "Mara Quist",
   "b": "Cara Mbeki",
   "slot": "14:10-14:25",
   "table": "Table 1",
   "message": "Please confirm your 1:1 meeting at 14:10-14:25, Table 1. It appears on the schedule only once you both confirm."
  },
  {
   "a": "Tomas Ilves",
   "b": "Dev Raman",
   "slot": "14:10-14:25",
   "table": "Table 2",
   "message": "Please confirm your 1:1 meeting at 14:10-14:25, Table 2. It appears on the schedule only once you both confirm."
  },
  {
   "a": "Ines Duarte",
   "b": "Elif Sahin",
   "slot": "14:10-14:25",
   "table": "Table 3",
   "message": "Please confirm your 1:1 meeting at 14:10-14:25, Table 3. It appears on the schedule only once you both confirm."
  },
  {
   "a": "Kofi Mensah",
   "b": "Omar Haddad",
   "slot": "14:10-14:25",
   "table": "Table 4",
   "message": "Please confirm your 1:1 meeting at 14:10-14:25, Table 4. It appears on the schedule only once you both confirm."
  },
  {
   "a": "Mara Quist",
   "b": "Gus Moreau",
   "slot": "14:30-14:45",
   "table": "Table 1",
   "message": "Please confirm your 1:1 meeting at 14:30-14:45, Table 1. It appears on the schedule only once you both confirm."
  },
  {
   "a": "Tomas Ilves",
   "b": "Hana Sato",
   "slot": "14:30-14:45",
   "table": "Table 2",
   "message": "Please confirm your 1:1 meeting at 14:30-14:45, Table 2. It appears on the schedule only once you both confirm."
  },
  {
   "a": "Lena Park",
   "b": "Quinn Abara",
   "slot": "14:30-14:45",
   "table": "Table 3",
   "message": "Please confirm your 1:1 meeting at 14:30-14:45, Table 3. It appears on the schedule only once you both confirm."
  },
  {
   "a": "Ines Duarte",
   "b": "Femi Adeyemi",
   "slot": "14:30-14:45",
   "table": "Table 4",
   "message": "Please confirm your 1:1 meeting at 14:30-14:45, Table 4. It appears on the schedule only once you both confirm."
  }
 ],
 "note": "Publish the brief to both sides now, then send each pair its confirmation - nothing goes on the schedule until both confirm."
}

The page's check: kept - nothing to flag

The free brief skeleton for the resolved sample

# Harbourline DevConf 2027 - meeting brief (the page's skeleton)

_Verdict: ready to publish the brief._

## Who meets whom

A meeting is a good match when a person from Sponsors who works on a product area and wants feedback from people running it in production meets a person from Attendees who runs or builds in that same area and said they want to talk about it, and both opted in to the pairing themselves.

## When and where

- 2027-09-14, 13:30-14:45, the mezzanine meeting lounge, booked by the organizers - never across a published session (15:00-15:45 Keynote: the state of the platform, 12:30-13:30 Lunch)

## How to book

- Self-service booking: each side states when it is free, the counterpart books - every meeting on an attendee's day is one they chose; cannot guarantee a count

## A missed slot

- Standby refill: a per-counterpart standby queue drained on the day into an emptied slot - worthless unattended

## Consent

- What is shared, who sees it, what triggers it, what you get, how to withdraw, when the pool is deleted - in your line of sight before you submit.

## The organizer on duty

Ines Varga, sponsor desk

## Before anything is published

- [ ] Every pairing accepted by both sides
- [ ] One view per person, never the whole pair grid

Made with Meet Match - https://meet-match.skillsafe.ai/

Build the input yourself

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

const K = MatchKit, R = MatchReply;
const f = K.form({ name: "My Conf 2027", q1: "drafted", q2: "one", q5A: "shown", q5B: "shown", labelA: "Sponsors", labelB: "Attendees",
  sideA: "Mara Quist | Brightpath Cloud | observability | matching | 4 |",
  sideB: "Ada Brennan | Kelpwise | observability | matching | Brightpath Cloud |",
  blockDate: "2027-09-14", blockStart: "13:30", blockEnd: "15:00", slotLen: "15", buffer: "5", tables: "4", sessions: "15:00-15:45 Keynote" });
// f.run, f.fixed, f.consent, f.mechanism / f.criterion, f.sched, f.slots, f.placed, f.unplaced, f.quotaMenu / f.quota, f.noShow, f.verdict, f.findings
K.timetableCsv(f); K.timetableIcs(f); K.unplacedCsv(f); K.outcomeCsv(f); K.briefMd(f); K.board(f)   // the free exports
const b = K.buildInput(f, "design");                         // or "brief"
const wire = K.toWire(b.input);                              // POST this to /estimate and /run
// then: const reply = R.normalize(R.parseReply(job.output.output), "design");
// R.check(reply, b)                                         // {status: kept or flagged, notes}
// R.carryText(reply)                                        // the lines the brief 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://meet-match.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":"meet-match"}' | 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": "design", "event": "Event: ... | dates: ... | city: ...", "sides": "Sponsors (side A) - 6 ...", "block": "Block: date: ... | as published: ...", "notes": "", "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 meet-match:<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 design carries summary, verdict, run, fixed, consent, mechanism, scheduling, timetable, unplaced, quota, no_show and caveats; a brief carries title, who_meets_whom, when_and_where, how_to_book, missed_slot, contact, consent_note, confirmations and note. The code below prints the headline of either.

KEY="meet-match:design:$(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' reply.json
jq -r '.timetable[]? | "\(.slot) \(.table): \(.a) and \(.b)"' reply.json   # a design; a brief has .confirmations

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