| id | course-da-report | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| type | course | ||||||||
| title | From Analysis to Report with an Agent | ||||||||
| summary | Challenge course — turn a verified EDA summary into a structured report (report.json + report.md) where every number traces back to its input. Verification checks structure and number consistency, not writing quality. | ||||||||
| lang | en-US | ||||||||
| content_version | 2 | ||||||||
| status | reviewed | ||||||||
| reviewed_on | 2026-11-07 | ||||||||
| badge |
|
||||||||
| course_id | course-da-report |
When the learner asks to start a lesson or requests guided help, act as Coach P. At your first introduction in that session, say:
I'm Coach P, an AI coach running inside your own agent, using your model. I'll help you reason through the task;
verify.pychecks the objective gates. Reflection checkpoints still need your own answers and explicit confirmation.
Ask what the learner tried and what they expect before suggesting a change.
Give the smallest useful hint, then wait for their answer. Name the failing test
and explain which contract it checks; do not paste a solution or edit solution/.
Follow this course's lesson order and file boundaries. If the learner cannot
explain a result, return to that test and ask them to predict the next run.
Before --attest or a claim submission, obtain the learner's own answers and
confirmation for those checkpoints; never answer or attest on their behalf.
The Skill's authorization and human-confirmation gates still apply. For a
verification-only or progress request, perform that workflow without forcing a
lesson. Coach P is an AI teaching style, not a human teacher or a certification;
do not promise learning or career outcomes. FlyPython does not run the model
or receive the chat conversation through this workflow; course-file, account,
and claim requests are separate API data.
TL;DR: challenge course — turn
scenario/analysis-pack/results.jsonintoout/report.json+out/report.md. The contract: every number in the report traces back to its input unchanged. Verification checks structure and numeric consistency; it does not grade prose.
A report generator: load verified inputs → build a structured report dict → render Markdown → write both artifacts. The structured JSON is the auditable layer; the Markdown is for humans.
cd courses/da-report
# Standard library only — nothing to install.| # | Challenge | Gate |
|---|---|---|
| L01 | A report is a contract with the reader | self-attested |
| L02 | Structure before prose | self-attested |
| L03 | Build and render the report | objective (starter suite) |
| L04 | Numbers traceable to inputs | objective (both suites) |
| L05 | What report verification cannot see | self-attested |
- Badge: Report Challenger (badge id
da-report) — all five checkpoints claimed. - Challenges: L01–L05, 10 points each; +50 course-badge bonus on flypython.com.
- Evidence:
python verify.py— L03/L04 objective, L01/L02/L05 attested. Self-reported evidence, never a certificate.
Templates engines (Jinja), PDF export, styling, or editorial quality. The suite verifies structure and numbers — good writing stays your job.
COURSE.md / COURSE_cn.md this file (EN / 中文)
lessons/L01.md … L05.md challenge notes (each has an _cn.md pair)
scenario/analysis-pack/ results.json (verified input)
TASK.md / TASK_cn.md the contract
starter/report.py unfinished implementation
solution/report.py reviewed solution
tests/test_report.py contract suite (read-only)
verify.py objective pass/fail + claim codes
REVIEW.md maintainer run-through record
Code is MIT-licensed; prose is CC BY 4.0 (see repository LICENSE).