# Week 8 lab: access, use, retention, and incidence

**Course:** Organizations, Personnel, and Internal Labor Markets.  
**Chapter:** Week 8. Wage-Setting, Retention, Outside Options, and Worker Voice.  
**Scope:** Standard; approximately two core hours plus a two-page incidence proposal.  
**Language:** Python 3.10+ standard library; no companion language or additional installation.  
**Prerequisites:** randomized assignment, means, sample variance, and post-treatment selection.

The question is whether keeping workers demonstrates a better job, and what access to voice identifies when usage is selected. The primary anchor is Adhvaryu, Gade, Molina, and Nyshadham (2026), *Sotto Voce*. Its data, parameters, assignment protocol, and empirical findings are not reproduced. Mas–Pallais, Jäger et al., and Dube–Giuliano–Leonard motivate the accompanying measurement questions.

The executed mode is **original synthetic design reconstruction**, recorded as `synthetic_design_reconstruction`, with `empirical_replication: false`. All generated CSVs and JSON results carry `SYNTHETIC_TEACHING_CONSTRUCTION_NOT_PUBLISHED_REPLICATION`. Optional empirical replication is omitted. The pack checked original archive listings; this implementation downloaded or executed no original data or code and inspected no original archive contents.

From this directory:

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

Smoke runs all **65 supplied assertions**, compiles the three Python scripts, independently checks saved outputs, compares two fresh seed-20260921 runs, and executes seed 88771. It tests actual exit-code-2 refusal with unchanged existing files, protects authored notes, and refuses modified generated targets. Statistical significance is not a passing criterion.

## 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 experiment, choose an empty or nonexistent output path:

```bash
conda run -n research python src/offline_lab.py --output /tmp/org8-week8-new-run --seed 20260921
```

Do not point the numerical generator at this documented lab root. If a path already contains files, choose a fresh path rather than erase the previous run. The installer generates in temporary storage and copies only its explicit artifact inventory. Existing generated targets must match their prior manifest; altered or untracked targets cause refusal before destination writes. Keep edits and reconcile them before requesting a refresh.

`manifest.json` hashes **19 generated files**; adding the manifest gives **20 deterministic artifacts**. Code, authored documentation, stale files and `output/smoke-checks.json` are excluded. `validation.json` records every native assertion; the separate smoke report records 546 integration assertions and the fresh-run comparisons. Compilation writes temporary bytecode. The completed lab contains 35 files.

## File map

| Path | Purpose |
|---|---|
| `lab.md`; `transfer-memo-template.md` | Student handout and full incidence proposal |
| `src/offline_lab.py` | Freeze population, draw assignment, estimate, diagnose, export |
| `src/install-generated.py`; `src/smoke-checks.py`; `smoke.sh` | Safe staging and executable validation |
| `data/teaching/observed_workers.csv`; `teaching-schema.csv` | Twenty baseline workers and observable-field definitions |
| `data/instructor/potential_outcomes.csv`; `oracle_design_audit.json`; `recomputed-potential-outcome-distribution.csv` | Separate known truth; never learner predictors |
| `output/reproduced/access_itt.csv`; `sharp_null_reference.csv` | Two complete-cohort ITTs and fixed-observed-outcome reference |
| `output/reproduced/source-mode-ledger.csv`; `reproduction_status.json` | Source and executed-mode boundaries |
| `output/diagnose/` | Access/use, wage/earnings, quit, reporting, transfer and analytical examples |
| `output/transfer/incidence-memo-template.md` | Generated compact proposal checklist |
| `output/results.md`; `validation.json`; `manifest.json`; `output/smoke-checks.json` | Results, native assertions, hashes and integration checks |
| `original/`; `transfer/`; `environment/`; `source-notes.md`; `run-log.md` | Access, measurement and run documentation |

There are 20 workers in 10 independent matched pairs, with one access recipient per pair. All 1,024 assignments are equally likely. The complete-cohort score includes leavers; the illustrative stayer-only field is blank after exit. Both complete follow-up and no interference are toy assumptions.

The Fisher test fixes observed outcomes and tests the global sharp null for each endpoint. The separate oracle audit recomputes known potential outcomes. Its variance is not an empirical standard error. The usual pair variance estimator is conservative in expectation under heterogeneous pair-average effects; it is neither a samplewise upper bound nor an exact confidence interval.

The true score access effect .76 and first stage .2 imply a population Wald ratio 3.8. This does not identify the .8 controlled-use parameter because access directly adds .6. The core path needs no network, API, private records, plotting dependency or original-study package. The chapter's two original figures consume the exported access-option and quit-curve CSVs.
