# Week 6 lab: training access and career risk sets

**Course:** Organizations, Personnel, and Internal Labor Markets.  
**Chapter:** Week 6. Training, Internal Mobility, Promotions, and Career Ladders.  
**Scope:** Standard; approximately two core hours plus a two-page proposal and denominator table.  
**Language:** Python 3.10+ standard library.  
**Prerequisites:** randomized assignment, means and variances, and conditional probabilities.

Can an evaluation distinguish greater capability from changes in access, selection and opportunity supply? Adhvaryu–Kala–Nyshadham (2023) motivates the training-access question; Haegele (2026), Benson–Li–Shue (2019) and Bianchi et al. (2023) motivate the career diagnostics. The lab does not reproduce their samples, assignment rules, coefficients or microdata.

The executed route is **original synthetic design reconstruction**, recorded as `original_synthetic_design_reconstruction`, with `empirical_replication: false`. Generated CSVs and JSON metadata carry `SYNTHETIC_TEACHING_CONSTRUCTION_NOT_PUBLISHED_REPLICATION`. The optional original-data route was omitted: no original archive files or licenses were inspected here, and no original data or code were downloaded or executed.

From this directory:

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

The existing `research` environment supplies everything needed. Smoke preserves all **35 starter assertions**, independently reconstructs saved outputs, runs two fresh default-seed roots and seed 88771, and compares **19 deterministic artifact hashes**. It checks that a nonempty-output rerun exits with code **2** and leaves every file unchanged. No significance threshold is a pass condition.

## Run order and output protection

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

The numerical generator accepts only an empty or nonexistent output root. Do not point it at this documented lab directory. A separate experimental run can use a new path:

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

Choose a different fresh path if that directory contains files; the generator never deletes user output to make a run succeed. The staging installer creates a fresh temporary run, checks its explicit inventory, then installs only generated artifacts. It preserves authored documentation and unrelated files, and refuses before destination writes when a generated target differs from its previous manifest or is untracked. Preserve and reconcile such edits rather than bypassing the guard.

`manifest.json` covers 18 explicit generated files; including the manifest gives the 19 compared artifacts. It excludes code, authored notes, stale files and the later smoke report. Root `validation.json` records all 35 starter checks. `output/reproduced/reproduction_status.json` records seed, mode and scientific scope; `output/smoke-checks.json` records the expanded fresh-run validation.

## Data and outputs

| Path | Content |
|---|---|
| `lab.md`; `transfer-memo-template.md` | Student tasks and career-transition proposal |
| `data/teaching/workers.csv`; `teaching-schema.csv` | Eighteen baseline workers and definitions for all four teaching tables |
| `data/teaching/career_panel.csv`; `events.csv`; `opportunities.csv` | 108 worker-months, ordered events and three openings |
| `data/instructor_only/potential_outcomes.csv` | Known potentials, compliance and behavioral draws; never learner predictors |
| `data/instructor_only/truth_check.json`; `potential-outcome-distribution.csv` | Separate potential-outcome expectation and all 8,000 corresponding statistics |
| `output/reproduced/assignment_effect.json`; `sharp_null_distribution.csv` | Assessment-offer ITT, first stage, Neyman SE and all 8,000 fixed-outcome null statistics |
| `output/reproduced/career_funnel.csv`; `competing_risks.csv` | Cohort/conditional rates and first-event hazards/incidences |
| `output/transfer/diagnostic_examples.json` | Denominators, exits, assignment, finance, disclosure and hoarding arithmetic |
| `output/reproduced/source-mode-ledger.csv`; `reproduction_status.json`; `generated-source-notes.md` | Provenance and execution limits |
| `output/results.md`; `validation.json`; `manifest.json`; `output/smoke-checks.json` | Readable result, checks and hashes |

Three offers are randomized among six workers in each of three departments, giving $\binom{6}{3}^3=8000$ permitted lotteries. Assessments are observed for **all eighteen workers, including leavers**, an artificial teaching follow-up guarantee. Skill potential outcomes depend on own offer only. Career outcomes are competitive because each department has one fixed promotion slot. Cohort career rates are realized allocation summaries, not ordinary individual promotion ATEs.

The chapter figures use generated diagnostics and, where shown, the actual eighteen-worker summaries. The 100-worker denominator reversal and 100-worker competing-exit example are separate constructions; do not claim that the realized eighteen-worker funnel necessarily reverses. No extra plotting dependency is required by numerical smoke. Read `transfer/data-notes.md` for timing and DGP details and `run-log.md` for executed results.
