Skip to content

Placeholders register — commodity_hindcast handover

This page aggregates every [PLACEHOLDER] (and the [PH] shorthand used in contacts.md tables) across the handover pack. The outgoing engineer must either fill them or explicitly accept them as out-of-scope before the handover sign-off (signoff.md Section E) is countersigned.

Total markers: 117 (across 12 files; 0 in HANDOVER.md, ADR-001, ADR-003).

Counts by document

Document Placeholders Notes
contacts.md 34 RACI matrix is a SCAFFOLD by design; expect the highest count
data_lineage.md 15 every external source has unknown owner + cadence
risk_register.md 14 every owner cell
access.md 10 Slack channels, Streamlit prod URL, terraform prod env, OIDC owner
signoff.md 9 engineer names, dates, witness
runbook/multi_year_forecast.md 7 metadata + 1 disk-size + 1 owner
runbook/mlflow_db_recovery.md 7 metadata + DB-auto-create behaviour + backup policy
runbook/qa_to_prod_sync.md 6 metadata + several config knobs
runbook/full_hindcast_rerun.md 6 metadata + retention policy
runbook/forecast_per_init.md 6 metadata + data-correction owner
decisions/ADR-002-calibration-result-persistence.md 1 empty-row test citation
decisions/ADR-004-forecast-path-restructure.md 1 test file path
decisions/ADR-005-fit-production-endpoint.md 1 author

Categories — fill these in concert

Category 1: Operational metadata (every runbook)

The five 2026 metadata block fields are intentionally blank because they have honest answers only after first verification:

  • last_tested — populate after the FIRST verified run of each runbook
  • owner — assign one named engineer per runbook (signoff.md Section F)
  • slack_channel — same value for all five if you have one shared channel; otherwise per-runbook
  • pagerduty_service — same value across most; mlflow_db_recovery + qa_to_prod_sync may differ
  • estimated_duration — measure on first verified run; record as median

5 runbooks × 5 fields = 25 markers that share these answers.

Category 2: Owners (risk register, contacts, runbooks)

Every risk has [PLACEHOLDER: owner needed]. Most of these will resolve to the same 1-2 engineers per the contacts.md RACI matrix. Suggest a single 30-minute working session: walk through the 14 risks and assign each.

Category 3: External data owners (data_lineage)

Each external source row has [PLACEHOLDER] for owner + cadence:

  • NASS (USDA) — public dataset; owner is the team that pulls it; cadence depends on the upstream sync workflow
  • IBGE-PAM (Brazil) — same shape
  • WASDE (USDA) — monthly publication
  • CONAB (Brazil) — survey-driven
  • Greenprint weather indices/stress/climo/areal zarrs — internal data team owns
  • geometry.parquet — internal pipeline owns

The data-team Slack channel can fill these in <1 hour.

Category 4: AWS / infra (access, qa_to_prod_sync)

  • AWS account 390844765299 — friendly name (e.g. "treefera-prod-us-east-2")
  • OIDC role ARN owner — platform/SRE team
  • Prod terraform env path — currently only terraform/envs/qa/ is checked in
  • Streamlit prod URL — internal hosting
  • 1Password / vault group for rotated keys
  • Prod S3 bucket versioning state — confirm with aws s3api get-bucket-versioning
  • Prod ECS scheduler / CloudWatch dashboard

Category 5: Communication channels (contacts, signoff)

  • 6 Slack channels (day-to-day eng, delivery / customer-facing, on-call, incident, model deploy, vendor coordination)
  • PagerDuty service membership
  • GitHub team membership group
  • TMI engineering lead contact
  • Witness / line manager for sign-off

Category 6: ADR follow-ups

  • ADR-002: confirm whether a test exists for the to_frame() empty-row ValueError guard
  • ADR-004: cite the actual tests/commodity_hindcast/lib/results/test_results_slice.py path if a test exists
  • ADR-005: original PR-339 author identity for ADR header

These are factual lookups in the test tree + git log; ~15 minutes total.

Fill workflow

  1. Schedule a 90-minute session with the outgoing + incoming engineer.
  2. Open this file alongside signoff.md and contacts.md.
  3. Walk Categories 1 → 6 in order; categories 1, 2, 5 share most answers.
  4. For each marker filled, also update the source document directly (don't rely on this register as the source of truth).
  5. Mark Category 6 items as DEFERRED if no test exists — that's an honest answer.
  6. Sign off signoff.md Section E once placeholders are EITHER filled OR explicitly accepted as deferred.

Raw index

The full list of every marker with its file:line:text is at /tmp/placeholders_raw.txt (regenerable):

grep -rEn '\[PLACEHOLDER[^]]*\]|\[PH\]' /data/processing/tmp/tmi-handover/drafts/

Re-run that command after filling to verify zero unfilled markers remain (or only the deliberately-deferred ones).