← Occestra
celebrate pack

A retirement lunch for my old English teacher, Marguerite Sandoval, who is leaving after thirty-one years at the school — the plan

oce_01kz1gkcpnrd3ghe16mhz2 · created 2026-08-02

pass rate 100%OQS v1.0.0
manifest hash
0xd041c08d5ecd018f546f6926e09a81535225207e23431cedc15b9b85caa57318
signed by · EIP-712
0x0d63f9EeB86813230B72017444cea16Cd4A453F2

The work

A retirement lunch for my old English teacher, Marguerite Sandoval, who is leaving after thirty-one years at the school — the plan

plan · json

pass
The structured data, exactly as delivered
{
  "date": "2027-06-19",
  "summary": "warm, literary, a long table and no speeches after the coffee\n\nA retirement lunch for my old English teacher, Marguerite Sandoval, who is leaving after thirty-one years at the school — Marseille, 2027-06-19, 22 people.\n4 real candidate venues are shortlisted below, each with the source we found it in. None of them is booked.\nThe date is beyond any real forecast horizon, so this plan does not claim to know the weather.",
  "claims": [
    {
      "text": "Le Petit Nice — 28 Place Jean Jaurès. A candidate for \"warm, literary, a long table and no speeches after the coffee\". NOT booked, NOT confirmed: call them yourself.",
      "grounded": true,
      "source": {
        "source": "openstreetmap",
        "retrievedAt": "2026-08-02T15:13:40.518Z",
        "url": "https://www.openstreetmap.org/node/738499750"
      }
    },
    {
      "text": "Chez Axel — 122 Avenue des Chartreux, Marseille. A candidate for \"warm, literary, a long table and no speeches after the coffee\". NOT booked, NOT confirmed: call them yourself.",
      "grounded": true,
      "source": {
        "source": "openstreetmap",
        "retrievedAt": "2026-08-02T15:13:40.518Z",
        "url": "https://www.openstreetmap.org/node/1594633518"
      }
    },
    {
      "text": "Bar Tabac du Vieux Port — address not listed in OpenStreetMap. A candidate for \"warm, literary, a long table and no speeches after the coffee\". NOT booked, NOT confirmed: call them yourself.",
      "grounded": true,
      "source": {
        "source": "openstreetmap",
        "retrievedAt": "2026-08-02T15:13:40.518Z",
        "url": "https://www.openstreetmap.org/node/997670271"
      }
    },
    {
      "text": "La Samaritaine — address not listed in OpenStreetMap. A candidate for \"warm, literary, a long table and no speeches after the coffee\". NOT booked, NOT confirmed: call them yourself.",
      "grounded": true,
      "source": {
        "source": "openstreetmap",
        "retrievedAt": "2026-08-02T15:13:40.518Z",
        "url": "https://www.openstreetmap.org/node/1005302996"
      }
    }
  ],
  "uncertainties": [
    "No venue here is booked. Every one is a candidate you still have to call.",
    "The weather for this date cannot be known yet."
  ],
  "prepChecklist": [
    "Call the venue",
    "Confirm the headcount",
    "Confirm dietary needs"
  ]
}

Running order

schedule · json

pass
The structured data, exactly as delivered
{
  "occasion": "A retirement lunch for my old English teacher, Marguerite Sandoval, who is leaving after thirty-one years at the school",
  "date": "2027-06-19",
  "city": "Marseille",
  "headcount": 22,
  "timezone": "Europe/Paris",
  "notes": [
    "All times are local to Marseille (Europe/Paris). The ISO timestamps are the exact instants; the \"local\" fields are what a guest will read on a clock.",
    "Starts at 12:30 because this is a lunch."
  ],
  "constraints": {
    "earliestStartLocal": "12:30",
    "latestEndLocal": "16:30",
    "statedIn": [
      "nothing before 12:30",
      "finished by 16:30"
    ]
  },
  "items": [
    {
      "title": "Arrival",
      "start": "2027-06-19T10:30:00.000Z",
      "end": "2027-06-19T11:15:00.000Z",
      "startLocal": "12:30",
      "endLocal": "13:15",
      "venue": {
        "name": "Le Petit Nice",
        "lat": 43.2954384,
        "lng": 5.3858843
      }
    },
    {
      "title": "The main event",
      "start": "2027-06-19T11:20:00.000Z",
      "end": "2027-06-19T13:20:00.000Z",
      "startLocal": "13:20",
      "endLocal": "15:20",
      "venue": {
        "name": "Le Petit Nice",
        "lat": 43.2954384,
        "lng": 5.3858843
      }
    },
    {
      "title": "Goodbyes",
      "start": "2027-06-19T13:25:00.000Z",
      "end": "2027-06-19T13:55:00.000Z",
      "startLocal": "15:25",
      "endLocal": "15:55",
      "venue": {
        "name": "Le Petit Nice",
        "lat": 43.2954384,
        "lng": 5.3858843
      }
    }
  ]
}

Budget

budget · json

pass
The structured data, exactly as delivered
{
  "currency": "USD",
  "total": 2600,
  "perHead": 118.18,
  "lineItems": [
    {
      "label": "Food",
      "amount": 1404
    },
    {
      "label": "Drinks",
      "amount": 585
    },
    {
      "label": "Everything else",
      "amount": 351
    },
    {
      "label": "Contingency reserve (10%)",
      "amount": 260
    }
  ],
  "notes": [
    "Amounts are in USD, because that is the currency the budget was given in.",
    "The 10% reserve is held back deliberately. It is not spare money; it is the money for the thing that goes wrong.",
    "Excludes tips and service charges unless a line item says otherwise."
  ]
}

If it goes wrong

contingency · md

pass

If it goes wrong

· The weather. 2027-06-19 is too far out for any real forecast to exist, so this plan does not pretend to know. Check it about ten days before, and hold an indoor option until you do. · The venue cannot take you. Nothing here is booked. Call in this order: 1. Le Petit Nice 2. Chez Axel 3. Bar Tabac du Vieux Port 4. La Samaritaine. If the first three are gone, move the time before you move the place. · People do not show. You are planning for 22. Confirm heads 48 hours out; most venues will let you drop a couple of covers that late, and none of them will let you add six. · The constraints you gave us. two former pupils are vegetarian; nothing before 12:30; finished by 16:30. Say this to the kitchen when you book, not when you arrive. · The venue is not booked yet.

A retirement lunch for my old English teacher, Marguerite Sandoval, who is leaving after thirty-one years at the school — guest guide

guest_guide · html

pass
The page source, exactly as delivered
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>A retirement lunch for my old English teacher, Marguerite Sandoval, who is leaving after thirty-one years at the school</title>
<style>
  :root { --ground:#F4EFE2; --ink:#3E3428; --accent:#B5623C; }
  *{box-sizing:border-box}
  body{margin:0;background:var(--ground);color:var(--ink);font-family:ui-sans-serif,system-ui,sans-serif;line-height:1.55;padding:6vh 6vw}
  main{max-width:36rem;margin:0 auto}
  h1{font-family:ui-serif,Georgia,serif;font-weight:400;font-size:clamp(2rem,6vw,3rem);line-height:1.1;margin:0 0 .4rem}
  .sub{color:var(--accent);font-size:.78rem;letter-spacing:.16em;text-transform:uppercase;margin:0 0 2rem}
  table{width:100%;border-collapse:collapse;margin:0 0 2rem}
  td{padding:.85rem 0;border-top:1px solid rgba(0,0,0,.1);vertical-align:top}
  td.t{width:7.5rem;font-variant-numeric:tabular-nums;color:var(--accent);white-space:nowrap}
  .what{font-weight:600}
  .where{font-size:.9rem;opacity:.75}
  .travel{font-size:.8rem;opacity:.6;margin-top:.25rem}
  h2{font-size:.78rem;letter-spacing:.16em;text-transform:uppercase;color:var(--accent);margin:2rem 0 .6rem}
  p,li{font-size:.95rem}
  a{color:var(--accent)}
  footer{margin-top:3rem;font-size:.8rem;opacity:.55}
  .note{margin:1.25rem 0 2rem;padding:.85rem 1rem;border-left:3px solid #B5623C;background:rgba(0,0,0,.03);font-size:.92rem;line-height:1.55}
</style>
</head>
<body>
<main>
  <h1>A retirement lunch for my old English teacher, Marguerite Sandoval, who is leaving after thirty-one years at the school</h1>
  <p class="sub">2027-06-19 &middot; Marseille &middot; all times local (Europe/Paris)</p>

  <!--
    UP FRONT, not buried in the FAQ.
    The guide used to lay out a venue with coordinates and a map pin like settled fact, and
    only admit twelve inches lower that nothing was actually booked. A reader who stops
    before the FAQ walks away believing there is a reservation. Occestra never claims a
    booking it did not make — so the page says so before it says anything else.
  -->
  <p class="note"><strong>Nothing here is booked.</strong> These are real, researched
  candidates — not reservations. The host confirms the venue; until then, treat every
  place and time on this page as a proposal.</p>

  <table>
      <tr>
        <td class="t">12:30–13:15</td>
        <td><div class="what">Arrival</div><div class="where">Le Petit Nice &middot; <a href="https://www.openstreetmap.org/?mlat=43.2954384&mlon=5.3858843#map=18/43.2954384/5.3858843">map</a></div></td>
      </tr>
      <tr>
        <td class="t">13:20–15:20</td>
        <td><div class="what">The main event</div><div class="where">Le Petit Nice &middot; <a href="https://www.openstreetmap.org/?mlat=43.2954384&mlon=5.3858843#map=18/43.2954384/5.3858843">map</a></div></td>
      </tr>
      <tr>
        <td class="t">15:25–15:55</td>
        <td><div class="what">Goodbyes</div><div class="where">Le Petit Nice &middot; <a href="https://www.openstreetmap.org/?mlat=43.2954384&mlon=5.3858843#map=18/43.2954384/5.3858843">map</a></div></td>
      </tr>
  </table>

  <h2>Weather</h2>
  <p>The forecast does not reach this far ahead yet — we will not guess it.</p>

  <h2>What to wear</h2>
  <p>warm, literary, a long table and no speeches after the coffee. Dress for the room, not for the photo.</p>

  <h2>Good to know</h2>
  <ul><li>two former pupils are vegetarian</li><li>nothing before 12:30</li><li>finished by 16:30</li></ul>

  <h2>Questions</h2>
  <ul>
    <li><strong>Am I late?</strong> Arrive at the first time above. The schedule has slack, but not much.</li>
    <li><strong>Is it booked?</strong> The host is confirming venues — nothing on this page is a reservation.</li>
  </ul>

  <footer>Made by Occestra. Times and travel are estimates, not routed journeys.</footer>
</main>
</body>
</html>

The Tribunal's report

Every artifact above was graded against the published Occestra Quality Standard — the full report ships with the pack, pass or fail. Read the standard.

planpassfull report
source coveragedate validityuncertainty disclosure
  • CONTRAST_LOWA plan has no text surface; contrast does not apply.
  • DATE_INVALIDPlan date is real and matches the brief.
  • DIM_ASPECT_MISMATCHNot an image.
  • FILE_TOO_LARGENot an image.
  • PALETTE_DRIFTNot an image.
  • POLICY_VIOLATIONFinal copy is clean.
  • SCHEMA_INVALIDArtifact and payload satisfy their schemas.
  • SOURCE_MISSINGEvery grounded claim carries its source and retrieval time.

The critic's notes

  • · Two venues (Bar Tabac du Vieux Port, La Samaritaine) have no address listed — the OSM nodes are cited but the address data was absent; this is disclosed in the artifact itself, which is correct behaviour, though it limits actionability.
  • · No pricing, hours, or capacity data is sourced for any venue — these are sourceable claims that were simply not retrieved. The artifact does not assert them, so this is a gap rather than a failure, but it limits the plan's usefulness.
  • · The plan contains no schedule, budget, contingency, or guest_guide sections, which were all listed as required deliverables in the brief. These are craft/completeness issues, not correctness failures under the scored axes.
schedulepassfull report
schedule feasibilitydate validitysource coverageuncertainty disclosure
  • CONTRAST_LOWA schedule has no text surface; contrast does not apply.
  • DIM_ASPECT_MISMATCHNot an image.
  • FILE_TOO_LARGENot an image.
  • PALETTE_DRIFTNot an image.
  • POLICY_VIOLATIONFinal copy is clean.
  • SCHEDULE_CONSTRAINTRuns 12:30–15:55, inside every timing bound the brief stated.
  • SCHEMA_INVALIDArtifact and payload satisfy their schemas.
  • SOURCE_MISSINGEvery venue the schedule names is backed by a retrieved source.

The critic's notes

  • · The ISO timestamps appear to assume UTC+2 (CEST), which is correct for Marseille on 2027-06-19 (Europe/Paris in summer). The arithmetic checks out: 10:30Z = 12:30 local, 11:20Z = 13:20 local, etc. No overlaps, no travel required (single venue). Schedule is physically coherent.
  • · date_validity: 2027-06-19 is a Saturday. The brief says 'retirement lunch' for a teacher 'leaving after thirty-one years at the school' — a Saturday is plausible but slightly unusual for a school-linked event. Cannot confirm or deny from the artifact alone; no contradiction is explicit, so no deduction applied.
  • · source_coverage: The four OSM nodes attached are all point-of-interest lookups. The artifact names 'Le Petit Nice' (a well-known Marseille restaurant) and its coordinates. OSM node 738499750 plausibly covers this venue. No hours, pricing, or capacity claims are made in the schedule itself, so there is nothing else that requires sourcing here. Coverage is adequate for what is claimed.
  • · uncertainty_disclosure: Nothing in the schedule is asserted as booked or confirmed — it is a running order only. No pricing or booking language appears. This is acceptable.
  • · Minor craft note: the 'notes' array contains a redundant explanation ('Starts at 12:30 because this is a lunch') that adds no information beyond what the constraints already state. Not a correctness issue.
budgetpassfull report
budget consistencyuncertainty disclosure
  • BUDGET_SUM_MISMATCHLine items sum to the stated total (2600.00).
  • CONTRAST_LOWA budget has no text surface; contrast does not apply.
  • DIM_ASPECT_MISMATCHNot an image.
  • FILE_TOO_LARGENot an image.
  • PALETTE_DRIFTNot an image.
  • POLICY_VIOLATIONFinal copy is clean.
  • SCHEMA_INVALIDArtifact and payload satisfy their schemas.

The critic's notes

  • · Per-head figure of 118.18 is correct for 22 guests (2600 / 22 = 118.18). No arithmetic issues found.
  • · The event is in Marseille; USD is used because the brief specified budgetUsd. The notes acknowledge this explicitly, which is appropriate, but no EUR equivalents are given — not a failure, but a mild usability gap for a French venue.
  • · 'Everything else' is a vague catch-all label with no sub-items; a reader cannot verify what is included. This is a craft concern, not a correctness failure.
  • · No line item is asserted as booked or confirmed; the plan is appropriately provisional.
contingencypassfull report
contingencyuncertainty disclosure
  • CONTRAST_LOWA contingency has no text surface; contrast does not apply.
  • DIM_ASPECT_MISMATCHNot an image.
  • FILE_TOO_LARGENot an image.
  • PALETTE_DRIFTNot an image.
  • POLICY_VIOLATIONFinal copy is clean.
  • SCHEMA_INVALIDArtifact and payload satisfy their schemas.

The critic's notes

  • · The venue fallback list (Le Petit Nice, Chez Axel, Bar Tabac du Vieux Port, La Samaritaine) is presented as a ranked call-order but without any note on why this order — capacity, vegetarian menu availability, or time-window fit — so the fallback logic is usable but not fully reasoned for this specific occasion.
  • · The weather contingency correctly defers to a ten-day check but does not name what the indoor option actually is — 'hold an indoor option' is actionable only if the planner already knows what that option is; for a 22-person lunch in Marseille in June, a concrete indoor fallback venue or a note that the primary venue must have an indoor section would sharpen this.
  • · The headcount fallback ('drop a couple of covers… none of them will let you add six') is good general guidance but does not address the specific vegetarian constraint — if two of the no-shows are the vegetarians, the kitchen needs to know; if two unexpected guests arrive and one is vegetarian, the constraint changes. A line tying headcount drift to the dietary constraint would close this gap.
  • · The final bullet ('The venue is not booked yet.') repeats information already stated in the venue-cannot-take-you section without adding anything. It reads like a leftover editorial note rather than a contingency action.
guest_guidepassfull report
source coveragedate validityuncertainty disclosure
  • TEXT_OVERFLOW_RISKCopy is long enough to overflow its layout slot.
  • CONTRAST_LOWAll body text clears 4.5:1.
  • DIM_ASPECT_MISMATCHNot an image.
  • FILE_TOO_LARGENot an image.
  • PALETTE_DRIFTNot an image.
  • POLICY_VIOLATIONFinal copy is clean.
  • SCHEMA_INVALIDArtifact and payload satisfy their schemas.

The critic's notes

  • · The OpenStreetMap coordinates (43.2954384, 5.3858843) point to a specific location labelled as Le Petit Nice — if those coordinates are wrong for that venue, the map link misleads guests. Cannot verify from artifact alone; scored at floor.
  • · Weather section correctly declines to forecast, which is appropriate for a date 11+ months out.
  • · 'What to wear' section pastes the vibe string verbatim ('warm, literary, a long table and no speeches after the coffee') as dress-code advice — this reads as a copy-paste error and may confuse guests.
  • · TEXT_OVERFLOW_RISK: Copy is long enough to overflow its layout slot.
Pack-level gaps disclosed
  • planner:degradedthe planning model did not return usable JSON (after 2 repairs: blocks.2.title: String must contain at most 80 character(s)); this plan uses a generic shape rather than one designed for your occasion
  • weather:beyond-horizonthe occasion is 321 days out and no real forecast exists that far ahead; the plan says so rather than inventing one

Made by Occestra — every moment, made monumental. Anything here can be independently verified; the seal above is on X Layer mainnet.