Offline target-lesion follow-up review with explicit baseline, nadir and measurement evidence
moon run --target native cmd/demo -- --scenario nadir-boundary
moon run --target native cmd/demo -- --scenario node-resolution --format json
moon run --target native cmd/demo -- --scenario missing-visit --format svg
moon run --target native cmd/demo -- --study examples/study.json --input examples/followup.csv --format html --output review.html
moon run --target native cmd/demo -- --study examples/study.json --input examples/followup.csv --check-input --format json
moon run --target native cmd/demo -- --scenario nadir-boundary --bundle review-bundle
moon run --target native cmd/demo -- --init-example new-inputs --template multi --lang zh-CN
moon run --target native cmd/demo -- --study new-inputs/study.json --input new-inputs/followup.csv --format html --lang zh-CN --output new-inputs/review.htmlpython scripts/reproduce_examples.py --output _build/review-examplesmoon run --target native cmd/demo -- --study examples/study.json --input examples/followup.revised.csv --compare-study examples/study.json --compare-input examples/followup.csv --format html --lang zh-CN --output revision.htmlmoon run --target native cmd/demo -- --study examples/study.json --input examples/followup.csv --bundle review-bundle
moon run --target native cmd/demo -- --verify-bundle review-bundle --format json
moon run --target native cmd/demo -- --batch examples/batch.json --bundle new-batch-reviews --lang zh-CN| Synthetic scenario | What it demonstrates | Ordered target categories |
|---|---|---|
| nadir-boundary | Baseline 100.0 mm, then 20.0, 24.0, 25.0; PD needs both relative and absolute growth | PR, PR, PD |
| node-resolution | Node short axis 10.0 vs 9.9 mm; reappearance needs overall context | PR, CR, NE |
| missing-visit | An unmeasured visit cannot lower the nadir | PR, NE, PR, PD |
import { "impart563/lesion-followup" @lib }///|
test "exact target PD boundary through the public facade" {
let study : @lib.Study = {
id: "synthetic-example",
baseline_date: "2026-01-01",
technique_id: "ct-5mm",
slice_thickness_tenths_mm: 50,
targets: [
{ id: "T1", organ: "liver", kind: NonNodal, baseline_tenths_mm: 200, },
],
}
let visit : @lib.Visit = {
id: "week-4",
date: "2026-02-01",
technique_id: "ct-5mm",
measurements: [{ lesion_id: "T1", observation: Measured(250), }],
}
guard @lib.replay_track(study, [visit]) is Ok(trajectory) else {
fail("valid example was rejected")
}
assert_eq(trajectory.assessments[0].response.code(), "PD")
assert_eq(trajectory.assessments[0].nadir_visit_id, "baseline")
}moon run --target native examples/quickstart
moon -C examples/downstream-consumer run --target native .python scripts/build_browser.py
visit_id,date,technique_id,lesion_id,state,diameter_mm,note| state | diameter_mm | note | Meaning |
|---|---|---|---|
| measured | Required decimal | Empty | Reader's actual diameter, including sub-5-mm measurements |
| absent | Empty | Empty | Explicitly disappeared; effective size 0.0 mm |
| too_small | Empty | Empty | Visible but not reproducibly measurable; explicit 5.0 mm default |
| missing | Empty | Empty | Unmeasured, never imputed as zero |
| not_evaluable | Empty | Required reason | Reader-supplied limitation, such as lesion coalescence |
python scripts/acceptance.pyfn compare_tracks(before : Trajectory, after : Trajectory) -> Result[TrackRevision, Array[Diagnostic]]fn input_template_files(name : String, language? : ReportLanguage) -> Result[Array[(String, String)], String]fn parse_diameter_mm(text : String) -> Result[Int, String]fn render_bundle_manifest(trajectory : Trajectory, artifacts : Array[(String, String)], language? : ReportLanguage, raw_inputs? : Array[(String, Bytes)]) -> Stringfn render_validation_json(diagnostics : Array[Diagnostic], issues : Array[InputIssue], visit_count : Int) -> Stringfn sha256_hex(bytes : Bytes) -> StringInstall
Download zipOffline target-lesion follow-up review with explicit baseline, nadir and measurement evidence