chrismdp / counting-house-rung-2-shadow
Fernwick Air: rebook after a missed connection, tier shadow
workflow.yaml
workflow.yaml is AWML 0.6, as it was pushed. The registry draws, checks and fits it converted to AWML 0.8.
awml: "0.6"
title: "Fernwick Air: rebook after a missed connection, tier shadow"
description: |
Tier shadow. The rep handles the case exactly as at tier off. Side by side, a gateway swaps the
customer's personal data for tokens, and a model, the clerk, answers the same case. Its answer goes
only to a judge model, which scores it against what the rep did. Nothing the clerk writes reaches
the customer or the booking system. Fernwick Air is fictional.
scopes:
- { id: tokenised, label: "tokenised: Fernwick staff", processing: { anthropic: any } }
- { id: ops, label: "ops: Fernwick staff", processing: none, in: tokenised }
parts:
- { id: asks, kind: trigger, label: "A customer writes in: rebook me after a missed connection", wait: PT1H, untrusted: true }
- { id: contact, kind: connector, label: "Fernwick's contact centre: email and chat", in: ops, untrusted: true }
- { id: bookings, kind: connector, label: "Fernwick's booking system, live", in: ops }
- { id: split, kind: fork, label: "Both at once: the rep handles the case, and the clerk answers it alongside", in: ops }
- { id: tokenise, kind: code, op: bring-in, label: "PII gateway: swap names, booking references and contact details for tokens", in: ops }
- { id: vault, kind: context, label: "The PII vault: the real value behind each token", in: ops }
- { id: case, kind: context, label: "The tokenised case", in: tokenised }
- { id: sop, kind: context, label: "The intent's SOP and policy row", in: tokenised }
- { id: flights, kind: connector, label: "Flight status and seats, read only, through the MCP gateway", in: tokenised }
- { id: clerk, kind: ai, op: draft, label: "The clerk drafts a reply and a proposed rebooking", in: tokenised }
- { id: answer, kind: context, label: "The clerk's answer", in: tokenised }
- { id: rep_rebook, kind: person, op: do, label: "A rep rebooks the passenger, if eligible", in: ops }
- { id: rebook, kind: outside, label: "Rebook the passenger: Ask", in: ops }
- { id: rep_reply, kind: person, op: do, label: "The rep replies to the customer", in: ops }
- { id: reply, kind: outside, label: "Reply to the customer: Ask", in: ops }
- { id: tokenise_out, kind: code, op: bring-in, label: "PII gateway: tokenise what was sent and done", in: ops }
- { id: outcome, kind: context, label: "What was sent and done, tokenised", in: tokenised }
- { id: judge, kind: ai, op: check, label: "Once both are in, the judge scores the clerk's answer against what was sent and done, by the intent's rubric", in: tokenised }
- { id: record, kind: code, op: do, label: "Record the score", in: tokenised }
- { id: scores, kind: context, label: "The intent's scores, for promotion", in: tokenised }
lines:
- { from: asks, to: split, kind: start }
- { from: split, to: rep_rebook, kind: start }
- { from: contact, to: rep_rebook, kind: data, label: the message }
- { from: bookings, to: rep_rebook, kind: data }
- { from: rep_rebook, to: rebook, kind: data }
- { from: rebook, to: bookings, kind: data }
- { from: rep_rebook, to: rep_reply, kind: start }
- { from: rep_reply, to: reply, kind: data }
- { from: reply, to: contact, kind: data }
- { from: split, to: tokenise, kind: start }
- { from: contact, to: tokenise, kind: data, label: the message }
- { from: tokenise, to: vault, kind: data }
- { from: tokenise, to: case, kind: data, label: "tokens only, under Fernwick's data rule" }
- { from: tokenise, to: clerk, kind: start }
- { from: case, to: clerk, kind: data }
- { from: sop, to: clerk, kind: data }
- { from: flights, to: clerk, kind: data }
- { from: clerk, to: answer, kind: data }
- { from: rep_reply, to: tokenise_out, kind: start }
- { from: contact, to: tokenise_out, kind: data, label: the reply sent }
- { from: bookings, to: tokenise_out, kind: data, label: the rebooking made }
- { from: vault, to: tokenise_out, kind: data }
- { from: tokenise_out, to: outcome, kind: data, label: "tokens only, under Fernwick's data rule" }
- { from: clerk, to: judge, kind: start }
- { from: tokenise_out, to: judge, kind: start }
- { from: answer, to: judge, kind: data }
- { from: outcome, to: judge, kind: data }
- { from: judge, to: record, kind: start, label: the score }
- { from: record, to: scores, kind: data }