# Dataset card — Timmy consented stool-image corpus Generated by [`scripts/dataset_card.py`](../scripts/dataset_card.py) from the append-only corpus manifest. Do not edit this page by hand: regenerate it, or `--check` fails. Every count below is read back from `manifest.jsonl`; a fact the pipeline does not collect is printed as `pending` rather than estimated, so nothing here is invented. | Field | Value | |---|---| | Corpus | `/srv/timmy-corpus` | | Corpus present on this machine | no | | Last manifest record | pending — no record yet | | Active samples | 0 | | Contributors | 0 | | Withdrawals | 0 | | Contexts | pending — not collected by ingest — no setting, time-of-day, or location fields are recorded | | Devices | pending — not collected by ingest — no camera, model, or OS fields are recorded | | Licenses | pending — no contributor grant is recorded yet, so no license is asserted | | Regenerate | `python3 scripts/dataset_card.py --corpus /srv/timmy-corpus` | ## What this corpus is for Consented photos of stool, labelled by a human reviewer, for research on a stool-form classifier. The corpus may not be used to diagnose disease, to identify a person, or to train a model that speaks to a patient with clinical authority. A model's output stays provisional until the person logging confirms it: see [PRODUCT-DECISIONS.md](PRODUCT-DECISIONS.md). This corpus holds no consented images yet. Every count of zero below is a real count of an empty manifest, not a placeholder, and the pending facts stay pending until the pipeline collects them. ## Contributor-level split policy Splits are derived from the salted pseudonymous subject key, never assigned per photo: the first byte of the key decides the split, `< 205` train, `< 230` validation, otherwise test (the ingestion rule in `scripts/ingest_training_photo.py`). One contributor's photos all land in one split, and this generator refuses a manifest where a subject key appears in two splits or where a recorded split is not the one its subject key derives. Both edges are stated here so the policy on this page is the policy in the code. | Split | Contributors | Active samples | |---|---:|---:| | `train` | 0 | 0 | | `validation` | 0 | 0 | | `test` | 0 | 0 | ## Class balance (active samples only) **Type** | Type | Active samples | |---|---:| | Type 1 | 0 | | Type 2 | 0 | | Type 3 | 0 | | Type 4 | 0 | | Type 5 | 0 | | Type 6 | 0 | | Type 7 | 0 | **Color** | Color | Active samples | |---|---:| | `brown` | 0 | | `green` | 0 | | `yellow` | 0 | | `pale` | 0 | | `red` | 0 | | `black` | 0 | **Quality** | Quality | Active samples | |---|---:| | `good` | 0 | | `fair` | 0 | | `poor` | 0 | **Review status** | Review status | Active samples | |---|---:| | `user-confirmed` | 0 | | `clinician-reviewed` | 0 | A withdrawn sample is excluded from every table above. Labels are what a reviewer saw, not a diagnosis: [LABELING_GUIDE.md](LABELING_GUIDE.md) says what a label may and may not assert. ## Exclusions and withdrawals A withdrawal appends a tombstone, deletes the derived image and any raw copy, and stays in the history. Contribution ids and reasons are published here because a deletion receipt is checkable; subject keys and labels are never published. No withdrawals are recorded. ## Limitations - Composition (devices, contexts, licenses) is pending, so the corpus is not yet a representative sample of anything and must not be described as one. - Review status is a human decision, not a clinical gold standard; `user-confirmed` means the person who took the photo agreed with the proposal. - A held-out split measures generalization across contributors, not across a population.