Lesson 89: Next-Train Opening Charter - Baseline Import, First Ingestion Window, Borrow Cap, and Cooldown Gate for RPG Live-Ops
Direct answer: A next-train opening charter is a single signed row (plus policy contract) that proves a new borrow-train cycle may start only after: the prior Lesson 88 baseline_evidence_hash is imported by reference, the first Lesson 86 ingestion export window is named with UTC bounds, concurrent borrows under Lesson 80 are capped for Day 0, and next_train_allowed_at_utc from the closeout row is already in the past at charter sign time. It is the green flag that separates cooldown from new work.

What this lesson solves
Teams often slide from certificate to commits without a charter: ingestion windows float, borrow slots refill silently, and nobody proves the cooldown clock. This lesson makes opening as explicit as closing.
Prerequisites: Lessons 80, 86, 88, and the latest lesson78_borrow_train_closeout_certificate_log.csv row for the train you are reopening. Expected time: about seventy minutes including one tabletop dry run.
What you will build
lesson78_next_train_opening_charter_policy.md(sections below)lesson78_next_train_opening_charter.csv(one row per new train opening)- A Day-0 borrow-cap rule tied to your cross-lane capacity table
Step 1 - Define opening gate classes
| gate | fail signal | action |
|---|---|---|
| O1 – Baseline missing | prior_baseline_evidence_hash empty or not matching archived Lesson 88 row |
hold charter |
| O2 – Cooldown active | charter_signed_at_utc is before prior_next_train_allowed_at_utc from closeout |
hold charter |
| O3 – Window unnamed | no first_ingestion_window_id plus UTC start/end for first export |
hold charter |
| O4 – Borrow cap absent | max_concurrent_borrows_day0 not set or above policy max |
hold charter |
If O1–O4 are not green, you publish a charter_status = withheld row with reasons so the next train does not start “informally.”
Step 2 - Author lesson78_next_train_opening_charter_policy.md
Minimum sections:
- Purpose – bind prior closeout baseline to the new
train_cycle_id. - Scope – which events count as “opening” versus a mid-train waiver extension.
- Baseline import rule – cite
closeout_row_idand hash field names from Lesson 88. - First window rule – map to Lesson 86
W1–W3vocabulary; forbid overlapping windows with prior train archive without explicitcarry_forward_batch_id. - Borrow-cap rule – reference Lesson 80 lane table; Day 0 may be stricter than steady state.
- Cooldown rule –
charter_signed_at_utc >= prior_next_train_allowed_at_utcwith no exceptions except documented governance waiver ids.
Step 3 - Author lesson78_next_train_opening_charter.csv
| column | purpose |
|---|---|
charter_row_id |
monotonic id |
new_train_cycle_id |
label for the opening cycle |
prior_closeout_row_id |
matches Lesson 88 closeout_row_id |
prior_baseline_evidence_hash |
copy from Lesson 88; must verify match |
prior_next_train_allowed_at_utc |
copy from Lesson 88 cooldown exit |
charter_signed_at_utc |
when charter became active |
first_ingestion_window_id |
e.g. W1_open tied to Lesson 86 policy |
first_export_window_utc_start |
inclusive |
first_export_window_utc_end |
inclusive |
max_concurrent_borrows_day0 |
integer cap before first merge checkpoint |
cooldown_verified_by |
initials proving O2 check |
charter_owner_lane |
owning lane id |
signer_divergence |
initials |
signer_incident_command |
initials |
charter_status |
active, withheld, or superseded |
charter_evidence_hash |
sha256 over canonical concatenation of row fields above |
Step 4 - Run the opening ceremony (40 minutes)
- Verify O1: load archived Lesson 88 row; compare
baseline_evidence_hashbyte-for-byte. - Verify O2: compare wall-clock (or signed log time) to
prior_next_train_allowed_at_utc. - Verify O3: publish first window id and UTC bounds to ingestion owners and incident command.
- Verify O4: set Day-0 borrow cap; block new borrow requests above cap until checkpoint.
- Sign: initials; store row at immutable
archive_uripattern consistent with Lesson 88.
Step 5 - Tabletop - cap breach on Day 0
Walk a scenario where social pressure requests three borrows when cap is two. Outcome: queue third request with ticket id; charter stays active because policy was enforced, not ignored.
Troubleshooting
Can we open if Lesson 88 was withheld?
Only with a governance waiver that defines an alternate baseline hash; otherwise O1 fails.
Does the first window have to match the closeout ingestion hash?
No. The baseline is evidence of the prior train end; the first window is where new signal starts. They must be logically adjacent, not identical.
Who owns max_concurrent_borrows_day0?
Divergence lane proposes; incident command confirms against surge posture.
Lesson recap
You can start a train with the same discipline you used to stop one: explicit hashes, explicit time, explicit caps.
Next lesson teaser
Next, complete the Lesson 90: First-Week Intervention-Governance Drift Check so daily ingestion snapshots and published governance bullets are reconciled before the new train’s first executive readout.
Related learning
- Lesson 88: Borrow-Train Closeout Certificate
- Lesson 86: Daily Causal-Factor Ingestion
- Lesson 80: Cross-Lane Capacity Borrowing Protocol
- How to Score Forecast Calibration Drift Before Release Gates for Live-Ops Teams (2026)
Treat the charter csv as the train starter motor, not a calendar invite.