The full technical exercise is preserved for readers who want to inspect or change the program. These files are optional for the lesson above. A ZIP is a single download containing the sample documents and code; extract it before following the developer instructions.
A text editor; Python 3.11+ for the checker. An assistant account is optional.
Your finished result
You coordinate a workshop for eight people and need a short software recommendation. Start with five fictional source notes. Finish with a readable brief, a table linking each selected fact to its source, and two questions that need an answer before buying.
Input: a current Cedar plan costs $30 per month for ten seats; an old Cedar card says $20; Maple's $25 plan has five seats. The client needs eight seats and CSV export.
Finished recommendation: “Compare Cedar with procurement before buying. Maple cannot seat the full group on this plan.” The brief keeps the data region and cancellation terms unresolved. It does not call the cheapest plan the best plan or invent a location for the data.
This project belongs to the Agentic journal's research-assistant path. A research assistant collects and organizes evidence for a question. Here you learn the input and checking work before connecting an assistant to a live search tool.
Why use an assistant here?
For five short notes, a table and a human-written paragraph are sufficient. That is the baseline. An assistant may help draft a clearer explanation or compare more notes later, but the extra review can outweigh the typing saved. Start small so you can see every source and notice an unsupported sentence.
The research question is: can a coordinator produce a useful recommendation without treating old prices or missing facts as current evidence? The completed artifact is a brief for review, not an automated purchasing decision.
1. Inspect the five sources
Open sources.json. Each source has an ID, date, status and a set of facts. An ID is a short label for finding a record. It is not proof of a claim. The records are original fictional notes, so no copyrighted article or private account is needed.
S1 states the workshop requirements. S2 is Cedar's current card, while S3 is its superseded card. S4 describes Maple. S5 records an unapproved annual contract and an unknown storage region. Read all five before selecting facts. In a real project, replace these with authorized source notes and preserve enough context to understand each statement.
2. Draft, then select evidence
Use prompt.txt with the interface route below. Compare your answer with model-draft.md, an AI-authored worked note. Neither is an approved purchasing brief. A fluent answer can still omit a constraint.
Open selection.json. Its eight claims select facts needed for this decision. The recommendation and open questions remain human-reviewed prose. The example review name and approval status are fictional exercise inputs, not an assertion that a customer reviewed this project.
The checker requires a current source, a known fact and an exact value and type. It rejects a stale source even if that source's price is copied accurately. This shows two separate questions: did we copy the number correctly, and is that record suitable for today's decision?
3. Build the brief
Use the clean-folder commands below. The exact stdout is:
checked_claims=8
files=brief.md,claims.csv
decision=review before purchase
Open results/brief.md. It contains selected facts with source dates, the recommendation and unanswered questions. Open results/claims.csv in a spreadsheet. Eight rows should follow the header. Check the current Cedar price directly in S2: it is 30. Check Maple's seat limit directly in S4: it is 5. Since five is fewer than eight, that plan does not fit the supplied group. This arithmetic does not establish whether another Maple plan would work; none was supplied.
4. Try a failure and repair it
In a spare copy of selection.json, change the Cedar price claim to source: S3 and value: 20. Running the compiler must fail with superseded source selected, exit status 2 and no new result folder. Restore S2 and 30. Run again with a fresh output folder.
verify.py also tries an unknown source, an altered value, a missing review, duplicate sources and a repeated selected claim. These are seeded exercises, not failures observed from a particular model. It checks complete stdout, result files and repeat protection as well.
Now ask your assistant, “What are Cedar's cancellation terms?” The honest answer is that the supplied notes do not say. This is an interface exercise for you to inspect, not a guaranteed response from every assistant.
5. Review the meaning
Check every sentence in the recommendation, including any new sentence you added. The compiler validates selected structured facts. It cannot decide whether a free-text recommendation is misleading, whether a quote supports an inference, or whether the five sources cover the decision adequately. Even a real external source can be incomplete or wrong. Agreement from a second model does not replace source checking.
Completion check: you can show the brief, identify the source for every price and seat count, explain why the old card was excluded, and point to the two unresolved questions. You can also reproduce the stale-price rejection.
Adapt it: replace the notes with a decision from your own work, keep source dates and status, and have a person approve the recommendation. Add evidence for security, accessibility or contract requirements only when the task actually needs it. Do not reuse fictional prices as current vendor pricing.
Next task: compare the manually written brief with your assistant's version using the same notes. Record review and repair effort. Only after that should you add live search and test how missing, conflicting and untrusted search results affect the brief.
Technical reading
Stack Overflow's knowledge survey gives context on why developers value source attribution; it does not validate this project. Anthropic's context engineering explanation describes selecting material for a model. Our five-note exercise is a simpler local application, not a reproduction of vendor performance claims.
Choose a route
Interface route: download and unzip the project. Read the input files and the included finished-*.md example in a text editor. Copy the finished example as an editable template; it is also included so you can complete the interface route without running Python. Paste their contents and prompt.txt into an assistant you already use, or write the draft yourself. Work with the fictional example first. Keep the raw answer unchanged, then save your corrections separately. Nothing in this project connects to email, purchasing or a client database.
Code route: install Python 3.11 or newer from python.org. Open a terminal in the unzipped folder. No packages, API keys or private repository access are required. Run:
python3 -I run.py
python3 -I verify.py
On Windows, use py -3 -I run.py and py -3 -I verify.py. The -I option isolates Python from user-specific Python settings. It does not turn the exercise into a sandbox for arbitrary downloaded code. Read the files before running them.
The first command creates results/. The second uses temporary copies to check the expected output and deliberate bad inputs. It leaves your own inputs and results alone. A second run refuses to overwrite results/; choose a fresh folder with python3 -I run.py --output results-2 when you intentionally want another version. Compare versions before deleting anything.
The programs assemble reviewed structured inputs into documents. They do not call a model, browse the web or decide whether prose is true. The supplied AI-authored draft came from this editorial authoring session. run-record.md explains exactly what was and was not observed. No separate API benchmark, customer deployment or independent reader trial is claimed.
Record a real attempt
Use comparison-log.csv to compare the same task and acceptance criteria on the manual and assistant routes. Copy run-record-template.json before trying your own assistant. Record the product and model label shown to you, date, exact prompt and supplied files, raw output, corrections, and setup, review and repair minutes. Unknown usage charges stay unknown rather than becoming zero. Do not confuse a download with a completed task. Finish the manual baseline too; for a one-off task, it may be the better method.
Before using real material, remove personal details and obtain appropriate permission. Your assistant's data handling depends on its product and account settings. This local exercise does not verify those settings.
Troubleshooting
- Python is not found: use the Windows command above or verify your Python installation, then reopen the terminal.
- A file cannot be found: unzip the whole folder. Keep
run.py, project.json and the input files together.
- JSON will not load: use double quotes, remove trailing commas and check the file in a JSON-aware editor. Preserve a clean copy before editing.
- The checker rejects a draft: read the specific error, compare the input with the authoritative note, correct the draft and use a new output folder. Do not loosen the check just to get a pass.
- The assistant writes different sentences: that is expected. The exact output below belongs to the deterministic compiler, not to every model's prose. Review the meaning of the assistant's answer separately.
What a pass means
The downloaded files are original educational material that you can adapt. A passing checker proves only the stated structural and data checks. It does not establish legal approval, broad factual accuracy, an effective model or a complete deployed agent. Human judgment still matters where the instructions say it does.