01. Define
Build the input, questions, and every allowed option. Include a way to abstain.
PayItemQuestions.ForBID REVIEW QUEUE / 15-MINUTE WALKTHROUGH
Let a model classify. Let your .NET application decide when to trust, escalate, or ask a person.
THE BUSINESS PROBLEM
An estimator needs to map bid items to utility systems and work types before pricing. Some descriptions are clear; others need judgment. The goal is a reviewable classification, not awarding a contract, pricing a bid, or sending it.
THE RESPONSIBILITY BOUNDARY
Build the input, questions, and every allowed option. Include a way to abstain.
PayItemQuestions.ForMicrosoft-Decision-1 returns a choice and per-option probabilities, not a written rationale.
state + questionsCheck the response contract. Apply the threshold. Ask a second model only for eligible uncertain lines.
ReviewPolicy.EvaluateReview unresolved cases. Changing an answer invalidates its previous approval.
Review, correct, approveThese calls are orchestrated by the sample, not by an automatic Foundry workflow. The lab uses Blazor Server and a Minimal API with shared services; GitHub Pages hosts only this static guide.
Each item needs bounded classification, with no autonomous tools, memory, or conversation. A model cascade with human review is enough. Interfaces separate live calls from replay; an agent framework would add orchestration this task does not need.
ONE CASE BEFORE THE WHOLE DATASET
Unit: LS (lump sum). The model receives the number, description, and unit. Quantities and prices stay in the .NET application.
Pause here. Is this gravity sewer work or force main work? The application offers those categories; the model cannot introduce a new accepted category.
FIRST MODEL / RECORDED
Work-type probability: 0.9954. The weakest selected probability drives the threshold rule.
SECOND OPINION / RECORDED
Different system. Same work type.
The second opinion supplies choices, not a replacement probability. Disagreement remains evidence even if you lower the threshold.
CHANGE THE POLICY, NOT THE EVIDENCE
The initial threshold is 0.90. Explore only this recorded case; this is not the full app's review queue.
The system probability is below 0.90 and the recorded models disagree. Neither a valid response nor a second opinion proves correctness.
A reduced view of the bundled recordings, not a new response. The separate service confidence field is not used by the threshold rule.
Enable JavaScript to inspect the recorded JSON, or open the recording in the repository below.Open the decision recordingFAMILIAR .NET, A PROBABILISTIC DEPENDENCY
Start with the existing endpoint. Blazor calls the same service and policies directly; the UI does not need an HTTP round trip to this endpoint.
var outcome = await decisions.DecideAsync(request.Item, request.Mode, request.ReverseOptions, ct);
var result = outcome.Result;
var review = ReviewPolicy.Evaluate(request.Item, result, outcome.Questions, request.Threshold);PayItemQuestions.For creates the questions and options. unclear permits abstention. A span copied from text can still be the wrong span.
IDecisionProvider separates Foundry from replay. The service uses explicit mode selection, cancellation, timeouts, and visible errors. A failed live request never becomes a silent replay.
DecisionWire.ParseResponse checks each question, offered choice, and finite probability. Every offered option must be scored, with a sum of 1 within the application's 0.02 tolerance.
The rule accepts only when every selected probability meets the threshold, every choice is most probable, and none is unclear. Reviewer edits require approval again.
Only eligible lines below the threshold reach the second model. Abstentions and non-top choices go to a person instead. All choices must agree for acceptance by agreement; a failed second opinion leaves the line with a person.
if (request.SecondOpinion && EscalationPolicy.Eligible(result, outcome.Questions, request.Threshold))
{
try { opinion = await decisions.SecondOpinionAsync(request.Item, outcome.Questions, request.Mode, ct); }
catch (DecisionFailure failure) { secondOpinionError = failure.Message; }
}A model cascade with human review describes this sample's design, not a built-in Foundry approval feature. The JavaScript experiment above illustrates only item 13; the .NET policies remain the application implementation.
YOUR LIVE PRESENTATION
"We are classifying bid lines, not approving contracts." Introduce the application, model, and person as separate responsibilities.
Ask the audience to predict. Reveal the recorded choices, their disagreement, and the review route. Name the recorded mode before showing the results.
Show the endpoint, the parser, and the policy. "The model is a dependency. Validation and business rules are still our job."
Move the threshold without a model call. In the separate .NET app, approve a line, edit an answer, and show approval clear. Export originals separately from edits.
"Two models can be wrong together. Choose a threshold on representative labeled data, not because 0.90 sounds reassuring."
From a repository checkout in PowerShell 7, with the exact SDK from global.json installed:
.\scripts\Test-Prerequisites.ps1
.\Start-Demo.ps1 -Lab 2 -OfflineOpen http://localhost:5190. At 0.90 with recorded second opinions enabled, the bundled demo expects 35 decided: 24 by rule, 8 by agreement, 3 awaiting review. Confirm these during rehearsal; new live calls need not reproduce them.
Restore and compile before presenting. -Offline disables live configuration, not network access for package restore. Stop with Ctrl+C and remove exported synthetic JSON when no longer needed.
WHAT THIS DEMO DOES NOT PROVE
A 0.90 prediction does not establish 90% correctness. Calibration is measured across comparable labeled cases, not inferred from one answer.
Two models can share an error. Agreement does not create a new calibrated probability or replace meaningful human review.
These October 14, 2026 recordings do not establish current Foundry availability, latency, pricing, or model quality on your workload.
The app keeps review state in its Blazor session. It is not a durable audit trail. This guide stores no approvals and sends no bid data.
The sample targets .NET 11 RC1, Microsoft-Decision-1 version 1, and the Microsoft provider's v1/systemone API. The sample treats the decision model as preview: its recorded catalog observation and documentation signals differ. See the source register rather than assuming general availability.
Build it. Understand it.
Make it reproducible.