Workspace/Mini projects
Loading progress
All mini projects
MODULE 31 · 8 HOUR BUILD

A reproducible experiment dossier

Build a compact research artifact that states a falsifiable hypothesis, compares paired outcomes, records lineage, and supports a bounded conclusion.

Build evidence Record your actual checks, results, and limitations.

Build it in stages

  1. Run the synthetic comparison seed and verify every per-case result.
  2. Write a one-page experiment card and a related-work matrix using primary sources.
  3. Replace or extend the fixtures with an authorized task collection split by independent groups.
  4. Add a strong simple baseline, one mechanism ablation, and a fixed resource budget.
  5. Export per-case results, manifest, uncertainty analysis, and a report with failures and limitations.
  6. Test the quick-start procedure from a clean environment and distinguish smoke-test results from full experiments.

Your acceptance criteria

Use these as your project review. Record commands, outputs, and failure cases in your repository.

  • The hypothesis, primary metric, guardrails, and falsifier are written before final evaluation.
  • Baseline and candidate use identical case IDs with no silently dropped failures.
  • The manifest records code, data, model, prompt, and configuration identifiers or explicitly unavailable fields.
  • Reported metrics can be recomputed from per-case outputs.
  • The conclusion labels synthetic data and observed limitations, and makes no unsupported novelty claim.

A working starting point

The seed runs as supplied. Extend it to satisfy the full brief. It is a teaching starting point, not a finished portfolio submission.

main.py
python
import hashlib
import json
from itertools import product

CASES = [("a", 0, 0), ("b", 1, 0), ("c", 2, 1),
         ("d", 3, 1), ("e", 4, 1), ("f", 5, 1)]
CONFIG = {"baseline_threshold": 3, "candidate_threshold": 2,
          "fixture": "invented scalar classification", "higher_score_is_better": True}

def evaluate(threshold):
    return {case_id: int(int(value >= threshold) == label)
            for case_id, value, label in CASES}

def compare(baseline, candidate):
    differences = [candidate[key] - baseline[key] for key in sorted(baseline)]
    mean = sum(differences) / len(differences)
    extreme = sum(abs(sum(sign * value for sign, value in zip(signs, differences))
                      / len(differences)) >= abs(mean) - 1e-12
                  for signs in product((-1, 1), repeat=len(differences)))
    return {"mean_delta": mean, "p_value": extreme / 2 ** len(differences),
            "wins": sum(value > 0 for value in differences),
            "losses": sum(value < 0 for value in differences)}

def run():
    baseline = evaluate(CONFIG["baseline_threshold"])
    candidate = evaluate(CONFIG["candidate_threshold"])
    payload = json.dumps({"config": CONFIG, "cases": CASES}, sort_keys=True)
    return {"config": CONFIG, "input_sha256": hashlib.sha256(payload.encode()).hexdigest(),
            "baseline": baseline, "candidate": candidate,
            "comparison": compare(baseline, candidate),
            "limitation": "synthetic smoke study; no population generalization claim"}

if __name__ == "__main__":
    report = run()
    assert sum(report["baseline"].values()) == 5
    assert sum(report["candidate"].values()) == 6
    assert report["comparison"]["p_value"] == 1.0
    print(json.dumps(report, indent=2, sort_keys=True))

Push it further

Run an independent reproduction with a second implementation or a different environment, then publish a discrepancy analysis that can challenge the original conclusion.