Boundary Demo
Build the smallest probe that can change one decision. The deliverable is
evidence, not a miniature product.
Start with one decision contract
Before implementation, write down:
- one question with at least two plausible answers;
- the evidence that would change the decision;
- the smallest observable failure;
- a timebox and stop rule;
- what is explicitly out of scope.
If these cannot be stated, ask one concise question. Do not expand into a full
product specification. Read
references/choosing-and-scoping.md when
the right probe or medium is unclear.
Choose exactly one mode
- Boundary: contracts, ownership, external services, failures, retries, or
side effects. Default integrations to deterministic fake or read-only
adapters.
- Logic: state machines, data shapes, policies, or transitions. Keep the
runner independent of the UI.
- Taste: interaction or information hierarchy is the uncertainty. Compare
two or three materially different variants against the same cases; read
references/taste-comparison.md.
Do not run all modes by default. Choose the medium after the mode:
- Prefer Streamlit for Python, data, LLM, state, trace, and human-review probes.
- Prefer a CLI when the question is pure state or business logic and a browser
adds no evidence.
- Use an existing Web surface when DOM, CSS, responsive behavior, browser
events, or page context is itself under test.
Build an observable probe
Make input, relevant state before and after, trace, output, and failure visible.
Seed at least one normal, one edge, and one failure case. Keep four evidence
classes separate:
- observed fact;
- automated verdict;
- human choice;
- AI hypothesis.
An automated pass never promotes a discovery case to regression or Gold.
Only the user can confirm the expected behavior or taste choice.
For a new Streamlit probe, initialize the bundled example:
python <SKILL_DIR>/scripts/init_demo.py <TARGET_DIR> \
--question "<ONE DECISION QUESTION>"
Then follow references/streamlit-runtime.md.
The scaffold uses a project-local configuration with automatic reruns and
loopback binding. Never modify a global Streamlit configuration.
Test the boundary, not the disposable shell
- Use ordinary pytest for contracts, state transitions, fake adapters, and
evaluation.
- Use Streamlit
AppTest for widgets, Session State, Run/Reset, and rendered
outcomes.
- Use Playwright or another browser harness only when actual DOM, CSS,
JavaScript, screenshots, resize, or browser timing is part of the decision.
Read references/cases-and-review.md for the
case lifecycle and P0/P1 review gate.
Authority and side effects
- A starter must not contain a working real adapter.
- Real network access, credentials, login state, deployment, or external
mutation requires explicit scope for that run.
- File-save reruns and widget reruns must not repeat side effects. Put adapter
calls only behind an explicit Run/Submit event, never at module import or page
render time.
- Redact secrets and personal data from inputs, traces, screenshots, and
exported receipts.
- Do not copy private project or Brain cases into a public repository.
Finish at the decision
Return supported, rejected, or inconclusive, with the decisive cases and
remaining uncertainty. Preserve the decision contract, confirmed regression
cases, and accepted interface/contract. The UI shell, captures, and exploratory
traces are disposable.
Never delete the probe or promote code into production without explicit user
authorization. When the decision is accepted, hand the contract and cases to
the production project or Product Foundry; rewrite production code under that
project's quality gates.
1---2name: boundary-demo3description: Build a disposable, observable demo that answers one uncertain system-boundary, state, integration, or experience decision and preserves reusable case/eval evidence. Use when asked for a demo, prototype, sandbox, spike, boundary explorer, integration simulator, or UI comparison before production implementation. Do not use to ship production features.4---56# Boundary Demo78Build the smallest probe that can change one decision. The deliverable is9evidence, not a miniature product.1011## Start with one decision contract1213Before implementation, write down:1415- one question with at least two plausible answers;16- the evidence that would change the decision;17- the smallest observable failure;18- a timebox and stop rule;19- what is explicitly out of scope.2021If these cannot be stated, ask one concise question. Do not expand into a full22product specification. Read23[references/choosing-and-scoping.md](references/choosing-and-scoping.md) when24the right probe or medium is unclear.2526## Choose exactly one mode2728- **Boundary:** contracts, ownership, external services, failures, retries, or29 side effects. Default integrations to deterministic fake or read-only30 adapters.31- **Logic:** state machines, data shapes, policies, or transitions. Keep the32 runner independent of the UI.33- **Taste:** interaction or information hierarchy is the uncertainty. Compare34 two or three materially different variants against the same cases; read35 [references/taste-comparison.md](references/taste-comparison.md).3637Do not run all modes by default. Choose the medium after the mode:3839- Prefer Streamlit for Python, data, LLM, state, trace, and human-review probes.40- Prefer a CLI when the question is pure state or business logic and a browser41 adds no evidence.42- Use an existing Web surface when DOM, CSS, responsive behavior, browser43 events, or page context is itself under test.4445## Build an observable probe4647Make input, relevant state before and after, trace, output, and failure visible.48Seed at least one normal, one edge, and one failure case. Keep four evidence49classes separate:50511. observed fact;522. automated verdict;533. human choice;544. AI hypothesis.5556An automated pass never promotes a discovery case to regression or Gold.57Only the user can confirm the expected behavior or taste choice.5859For a new Streamlit probe, initialize the bundled example:6061```sh62python <SKILL_DIR>/scripts/init_demo.py <TARGET_DIR> \63 --question "<ONE DECISION QUESTION>"64```6566Then follow [references/streamlit-runtime.md](references/streamlit-runtime.md).67The scaffold uses a project-local configuration with automatic reruns and68loopback binding. Never modify a global Streamlit configuration.6970## Test the boundary, not the disposable shell7172- Use ordinary pytest for contracts, state transitions, fake adapters, and73 evaluation.74- Use Streamlit `AppTest` for widgets, Session State, Run/Reset, and rendered75 outcomes.76- Use Playwright or another browser harness only when actual DOM, CSS,77 JavaScript, screenshots, resize, or browser timing is part of the decision.7879Read [references/cases-and-review.md](references/cases-and-review.md) for the80case lifecycle and P0/P1 review gate.8182## Authority and side effects8384- A starter must not contain a working real adapter.85- Real network access, credentials, login state, deployment, or external86 mutation requires explicit scope for that run.87- File-save reruns and widget reruns must not repeat side effects. Put adapter88 calls only behind an explicit Run/Submit event, never at module import or page89 render time.90- Redact secrets and personal data from inputs, traces, screenshots, and91 exported receipts.92- Do not copy private project or Brain cases into a public repository.9394## Finish at the decision9596Return `supported`, `rejected`, or `inconclusive`, with the decisive cases and97remaining uncertainty. Preserve the decision contract, confirmed regression98cases, and accepted interface/contract. The UI shell, captures, and exploratory99traces are disposable.100101Never delete the probe or promote code into production without explicit user102authorization. When the decision is accepted, hand the contract and cases to103the production project or Product Foundry; rewrite production code under that104project's quality gates.