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.

Astronaut and alien sharing ice cream — a light start after a hard closeout

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

  1. lesson78_next_train_opening_charter_policy.md (sections below)
  2. lesson78_next_train_opening_charter.csv (one row per new train opening)
  3. 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:

  1. Purpose – bind prior closeout baseline to the new train_cycle_id.
  2. Scope – which events count as “opening” versus a mid-train waiver extension.
  3. Baseline import rule – cite closeout_row_id and hash field names from Lesson 88.
  4. First window rule – map to Lesson 86 W1–W3 vocabulary; forbid overlapping windows with prior train archive without explicit carry_forward_batch_id.
  5. Borrow-cap rule – reference Lesson 80 lane table; Day 0 may be stricter than steady state.
  6. Cooldown rulecharter_signed_at_utc >= prior_next_train_allowed_at_utc with 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)

  1. Verify O1: load archived Lesson 88 row; compare baseline_evidence_hash byte-for-byte.
  2. Verify O2: compare wall-clock (or signed log time) to prior_next_train_allowed_at_utc.
  3. Verify O3: publish first window id and UTC bounds to ingestion owners and incident command.
  4. Verify O4: set Day-0 borrow cap; block new borrow requests above cap until checkpoint.
  5. Sign: initials; store row at immutable archive_uri pattern 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

Treat the charter csv as the train starter motor, not a calendar invite.