The premise
Most governance layers are stochastic. That is the bug.
Agentic commerce channels rank and re-rank your products through two opaque layers you cannot audit. The one lever you hold is input quality. Teams reach for a model to assess it — and in doing so make the governance layer itself non-reproducible.
The component you build in this workshop takes the opposite position. No model calls exist in the scoring path. A score must be reproducible bit-for-bit from SKU data plus rubric version. An LLM may consume readiness records; it may never produce them.
That single constraint is what makes everything downstream possible: evidence you can cite, a rubric you can version, a refusal you can defend, and an audit trail that means something six months later when someone asks why a SKU shipped.
The four rules of the scoring path
- Deterministic only. Same input plus same rubric yields the same score, every time.
- Evidence-linked by construction. The schema makes it impossible to deduct a point without naming the field and the rubric rule that caused it.
- Bands, not vibes.
AGENT_READY ≥ 85,REMEDIATE 60–84,NOT_READY < 60. Thresholds are rubric properties, not code constants. - Fail-closed on unknowns. A missing or unparseable field scores as absent, never as assumed-present.
What you build
Four tools, four resources, one gate
You implement the MCP surface end to end — not a toy version. Resources are read-only and ungated. Tools carry consequence tiers, and the tier decides whether a human has to sign.
| Tool | Tier | Effect |
|---|---|---|
score_catalog_readiness | 1 | Recompute scores. Read and compute only, no external side effects. |
propose_golden_records | 1 | Rank candidates for the pilot pool. Produces a proposal, never an action. |
stage_syndication_manifest | 2 | Freeze the exact payload that would be sent, with a hash, for review. |
authorise_syndication | 3 | Record human authorisation against a frozen manifest. Non-delegable. |
The tier assignment follows one rule, and you will spend a session arguing about it: anything that reads or computes is automatable; anything that publishes into a system whose behaviour you cannot audit is not.
The rubric is itself exposed as a resource, at catalog-readiness://rubric. That is deliberate, and it is the thesis of the whole workshop in one design decision.
Curriculum
Six units across two days
Every unit ends with working code and a decision you had to defend. You bring a catalog export; you work on yours, not on a fixture.
The surface and the boundary
Resources versus tools, and why that split is a governance decision rather than an API convention. Mapping your own data to the Seam. Registering the resource template and the four tools with zod schemas at the server boundary.
Deterministic scoring
The five dimensions and their weights. Building the scoring path with no model in it. Property-testing the guarantee: same input plus rubric yields the same score. Fail-closed handling of missing and unparseable fields.
Evidence as a type constraint
Making an unjustified deduction impossible to express rather than merely discouraged. Every deduction cites a field and a rule ID. Ordering remediation by points recoverable against effort, which is what makes a report actionable instead of merely accurate.
Golden records and the ranking formula
Eligibility gates before ranking. Weighting margin, inventory depth and readiness proximity — and why proximity is weighted at all. Producing a ranked proposal with its full evidence trail. The tool proposes; pool selection stays human.
Freeze, sign, bind
Staging a manifest with a payload hash. The sign-off block. The three invariants: staleness voids authorisation, authorisation is per-manifest and never standing, and a refusal returns its rationale. Then the harder exercise — try to defeat your own gate, and find out whether it holds.
Hard rules and the trail
Where a weighted average must not be allowed to operate, and how to express that as a hard rule instead of a deduction. Append-only audit entries, corrections as new records, never an overwrite. Wiring the component into a real merchandising workflow.
The teaching case
How a compliance defect scored 85.7 and passed
A food SKU was missing its allergen disclosure. It scored 85.7 and landed in AGENT_READY.
Nothing malfunctioned. The rubric worked exactly as specified — the SKU was strong on attribute completeness, clean on structured data, well photographed. A weighted average did what a weighted average does: it absorbed one failing dimension into five passing ones and returned a number above the threshold.
The lesson
A compliance defect is not a ranking input. Disclosure warnings are must-display — a platform may not hide or auto-dismiss one — so a missing disclosure is not a SKU that scores slightly lower. It is a SKU that must not cross the Seam at all.
The fix is architectural, not numerical. Raising the threshold would not have caught it; a different weighting would only have moved the failure. What catches it is a hard rule at the staging boundary that rejects the SKU outright, sitting outside the scoring path entirely, where no average can reach it.
// Gate invariant — enforced at stage, not scored
if (isDisclosureRequired(sku.category) && !hasDisclosureEntry(sku)) {
return reject("POLICY_FAIL", {
rule: "hardRules.compelledDisclosure",
rationale: "Compelled disclosure absent. Not a scored deduction."
});
}
You will spend a full unit on the general form of this problem: identifying which of your own rules are being quietly averaged away right now, and moving them out of the score and into the gate. Most teams find at least one.
Format
Small cohorts, your catalog, working code
- Two days. Six units, each ending in something that runs.
- Small cohort. Capped deliberately — this is a workshop, and a workshop that cannot see everyone's screen is a lecture.
- Your data. Bring a catalog export. You build against it, and you leave knowing your own readiness position.
- Remote or on-site. Remote runs as two consecutive days. On-site available for teams; travel quoted separately.
- You keep everything. The component, the rubric file, the fixture harness, the audit scaffolding. No runtime dependency on us.
Prerequisites — read these honestly
You need working TypeScript, and you need to be comfortable reading a schema and arguing with it. You do not need prior MCP experience; the server surface is taught from zero. You do not need to have run an audit before.
This workshop is a poor fit if you want a conceptual overview of AI governance. That is the certification programme. This is the engineering.
Cohorts are scheduled as demand forms rather than against a fixed calendar, so the group is always the right size and always roughly the right level. Register your interest and you will be told the next date before it is public, with a place held while you decide.
Register
Take a place in the next cohort
Tell us what you are building against. Cohorts form around the problems in the room, so the detail here changes what gets taught.
Questions
Before you ask
Is this the same as the GIA certification?
No. The certification is nine modules on governance architecture and carries a credential. This is two days of building one component with your hands. They complement each other, and neither requires the other.
Do I need my own MCP server already running?
No. You build the surface from zero during unit 01. If you already have a server, you extend it instead — bring it and we will register the component alongside what you have.
What if our catalog data is a mess?
Then you are exactly the person this is for, and you will get more out of it than someone whose data is clean. A component that only works on tidy input has not been tested.
Can we run it privately for our team?
Yes. On-site and private remote cohorts both run. Select "a whole team" above and say roughly how many, and you will get a quote with dates.
What language and stack?
TypeScript over stdio, schemas validated with zod, targeting Claude Desktop as the host. The architecture transfers to any MCP host and the governance patterns transfer to any language — but the code you write in the room is TypeScript.