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 runbookowner— assign one named engineer per runbook (signoff.mdSection F)slack_channel— same value for all five if you have one shared channel; otherwise per-runbookpagerduty_service— same value across most; mlflow_db_recovery + qa_to_prod_sync may differestimated_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-rowValueErrorguard - ADR-004: cite the actual
tests/commodity_hindcast/lib/results/test_results_slice.pypath 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¶
- Schedule a 90-minute session with the outgoing + incoming engineer.
- Open this file alongside
signoff.mdandcontacts.md. - Walk Categories 1 → 6 in order; categories 1, 2, 5 share most answers.
- For each marker filled, also update the source document directly (don't rely on this register as the source of truth).
- Mark Category 6 items as DEFERRED if no test exists — that's an honest answer.
- Sign off
signoff.mdSection 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):
Re-run that command after filling to verify zero unfilled markers remain (or only the deliberately-deferred ones).