# Week 10 capstone lab: source identification and portable claims

**Course:** Organizations, Personnel, and Internal Labor Markets.  
**Chapter:** Week 10. Frontier Questions, Personnel Data, and Student Research Designs.  
**Scope:** Standard; approximately two core hours plus a four-page research memo and concise access/validation appendix.  
**Language:** Python 3.10+ standard library; no installation or companion language.  
**Prerequisites:** matched-pair randomization, means, sample variance, weighting and potential outcomes.

The question is what an identified effect within selected organizations establishes about another population. Allcott (2015) motivates source identification versus prediction elsewhere; Bloom–Han–Liang (2024) motivates a personnel-study claims audit; DellaVigna–Linos (2022) motivates evidence selection. This exercise reproduces none of their samples, assignment protocols, scales, estimates or programs.

The executed mode is **original synthetic design reconstruction**, recorded as `original_synthetic_design_reconstruction`, with `empirical_replication: false`. Generated CSVs and JSON records carry `SYNTHETIC_TEACHING_CONSTRUCTION_NOT_PUBLISHED_REPLICATION`. Original-data replication is **NOT RUN**: no original microdata or estimation programs were downloaded or executed. The guaranteed route uses no network, API, private records or new dependencies.

From this directory:

```bash
ENV_NAME=research bash smoke.sh
```

Smoke executes all **67 supplied assertions** and **2,142 integration checks**. It compiles all three Python scripts, runs the actual CLI twice without a seed override to verify the native default **20260922**, and runs seed **88771**. Default runs are byte-identical and match the installed outputs. Tests independently reconstruct observed-CSV estimates, SEs, null/oracle rows, weights and diagnostics; verify real exit-code-2 refusal with unchanged files; and test safe staging. No significance requirement is imposed.

## Safe run order

```bash
conda run -n research --live-stream python src/install-generated.py
conda run -n research --live-stream python src/smoke-checks.py
```

For a separate numerical run, choose a new or empty path. This week's native option is **`--out`**:

```bash
conda run -n research python src/offline_lab.py --out /tmp/org8-week10-new-run
conda run -n research python src/offline_lab.py --out /tmp/org8-week10-alternate-run --seed 88771
```

Do not point the numerical generator at this documented lab root. If a target contains files, choose a fresh path rather than erase the old run. The installer generates into temporary storage and copies only explicit artifacts after checking destination hashes. Changed or untracked generated targets cause refusal before destination writes. Authored notes and full handouts remain in place.

`manifest.json` hashes **30 generated files**, giving **31 deterministic artifacts including the manifest**. The complete lab contains **48 files**. Code, authored documentation, copied handouts, stale files and the later smoke report are excluded from recursive hashing. `validation.json` mirrors `checks.json`; `run_summary.json` preserves the native result summary; `output/smoke-checks.json` records integration checks. Compilation writes temporary bytecode only.

## Student materials and file map

Read the [lab handout](lab.md), complete the **full [research memo template](research-memo-template.md)**, and use the **[proposal review rubric](proposal-review-rubric.md)**. Both full handouts are byte-identical copies of the supplied native files. The root transfer entry and generated claim card supplement them; they do not replace the four-page memo or its appendices.

| Path | Role |
|---|---|
| `data/teaching/source_sites.csv`; `target_frame.csv`; `teaching-schema.csv` | Twelve observed source sites, twenty outcome-free target sites and field definitions |
| `data/instructor/source_potential_outcomes.csv`; `design_audit.csv`; `recomputed-potential-outcome-distribution.csv` | Separate truth and 128 estimator/assignment audit rows |
| `output/reproduced/pair_contrasts.csv`; `stratum_estimates.csv`; `estimates.csv`; `target_weights.csv` | Observed-source estimation and predetermined target weights |
| `output/reproduced/global_sharp_null_distribution.csv` | Two statistics across 64 legal source assignments, holding outcomes and weights fixed |
| `output/reproduced/source-mode-ledger.csv`; `reproduction_status.json` | Provenance and executed scope |
| `output/diagnose/` | Transport scenarios/sensitivity, missingness and other original examples |
| `output/transfer/claim_card.md`; `transfer-memo-template.md` | Compact claim prompts and route to the full memo/rubric |
| `output/results.md`; `checks.json`; `validation.json`; `run_summary.json`; `manifest.json`; `output/smoke-checks.json` | Results and validation records |
| `src/`; `smoke.sh`; `environment/`; `original/`; `transfer/`; `source-notes.md`; `run-log.md` | Code, environment, access, measurement and execution documentation |

Native `observed/` maps to `data/teaching/`, `instructor/` to `data/instructor/`, and native result/diagnostic/transfer folders map under `output/`. Full source follow-up and no interference are explicit toy assumptions. The target frame has no outcomes. Source and target-weighted statistics use different context masses and context-stratified variance summaries; there are six independent pairs, including only two low-support pairs. Weight ESS is a concentration diagnostic, not an assignment count.

Both exact p values concern the **source global sharp no-effect null**. Neither tests transport stability or unobserved target effects. Oracle variance is instructor knowledge, not empirical uncertainty; identification ranges are not confidence intervals. Course figures read the saved known-scenario and worker-follow-up-range CSVs; no unsupported normal bands or duplicate lab plots are generated.
