Use these notes to review a concept or read at your own pace. The interactive workspace above adds predictions, editable code, and actual run results.
IDEA 1
Marketing claims still need evidence
A campaign is a coordinated set of messages and channels used to tell an audience about something. In this classroom project, the audience is a fictional school club and the channels are invented poster options. Persuasive writing can be useful, but it cannot establish that an event has a certain date, location, or donation promise.
Separate the draft from the event fact record. Check dates and venue exactly, and allow only claims listed in the fixture's supportedClaims array. This deliberately narrow matcher is not a general language fact checker. It teaches the architecture: proposed text is evaluated against independent evidence before being treated as ready.
A draft must match the fact record
- Event facts. Read the approved fictional date, venue, and supported claims.
- Draft. Inspect the promises actually present in the proposed announcement.
- Review issue. Flag a promise absent from the fact record.
Claims use exact authored strings so the classroom check is inspectable.
Check every proposed claim
const unsupported = draft.claims.some(claim => !facts.supportedClaims.includes(claim));One unsupported claim is enough to require review. Good spelling or a matching date cannot make that claim supported.
Think it through: The draft promises 'All proceeds donated,' but the fact record does not. What should happen?
IDEA 2
Budget and approval belong at the action boundary
The campaign's channel plan has its own constraints. A known total must fit the budget; an unknown channel price is a missing-cost issue. These checks are separate from factual review. A truthful announcement can still exceed the planned spend, and an inexpensive one can still contain a false promise.
Approval is tied to the exact draft version. If version 1 was approved and the text changed to version 2, the earlier approval does not cover the changed action. Here publishPreview returns only a simulated receipt: no ad is purchased, no student audience is profiled, and nothing is posted. A real application would obtain version-specific permission from its authenticated review flow.
Three independent gates
- Facts. Require every explicit claim to be supported.
- Cost. Require a known total at or below budget.
- Version. Match the approved version to this draft.
- Simulated action. Return a receipt only after all gates pass.
Passing checks prepares the draft; it does not manufacture human approval.
A changed draft needs review
const draftVersion = "v2";
const approvedVersion = "v1";
// The approval does not cover this version.The rule prevents a reviewed draft from being replaced with different content just before an action.
Think it through: All facts and costs pass, but there is no approval. Which result fits?
Put it into practice
Block unsupported claims and stale approvals while preserving exact campaign costs.
- Run the unsupported-promise case and inspect the starter's publishPreview call.
- Insert the claim-evidence gate.
- Run all cases and confirm the stale-version case makes no publication call.
- Set approvedVersion to null in custom input to prepare a reviewable preview.
Your next experiment: Remove approval to obtain a preview, then set the channel price to null. How is missing permission different from missing cost evidence?
A convincing draft still needs factual support, an affordable plan, and approval for that exact version.
Key terms
- Campaign
- A coordinated set of messages and channels for communicating an event or offer.
- Source of truth
- The designated record used to check a defined set of facts.
- Version-specific approval
- Permission tied to the exact reviewed draft or action.
Sources and scope
Original Stemtiq teaching, reviewed 2026-09-14. The named researchers and organizations do not endorse this course. Classroom cases are authored exercises, not published findings.
OpenAI: Guardrails and human review
Reviewed 13 September 2026 · undated documentation
Distinguish automatic checks from approval decisions, pause sensitive tool requests, retain state, and resume after an application approves or rejects them.
Model-generated approval text is not authorization. Resume examples that automatically approve a request do not establish that a person reviewed it.
AWS · Amazon Bedrock AgentCore: Policy in Amazon Bedrock AgentCore: Control Agent Interactions
Reviewed 13 September 2026 · undated documentation
Evaluate identity and tool inputs at a gateway before allowing a call. Treat policy authoring, review, enforcement, and decision logging as separate operations.
The gateway governs capabilities routed through it. A classroom approval check is not an AgentCore integration or a complete production authorization system.
Anthropic: Demystifying evals for AI agents
9 January 2026
Define tasks, trials, and graders; inspect both execution records and final outcomes; repeat trials when model behavior varies.
A score depends on its cases and grading rules. Repeating a deterministic classroom case does not measure the variability of a live model.
Microsoft Research: Defending Against Indirect Prompt Injection Attacks With Spotlighting
March 2024
Separating the provenance of retrieved content and user instructions helps address indirect prompt injection.
The paper evaluates particular mitigations and conditions. A classroom filter or trust flag neither implements the full method nor guarantees protection against all attacks.