Troubleshooting and Recovery Cookbook
Common Issues
BatchTIPSY input parsing errors
Likely causes:
Fixed-width DAT misalignment
Column-wizard mismatch versus previously validated settings
Unsupported species/FIZ pairings
Recovery:
Keep wizard column mapping constant across runs.
Regenerate DAT from FEMIC with unchanged schema.
Apply species-code overrides in case/FMU TIPSY YAML config where needed.
Sparse/unstable VDYP fits
Likely causes:
Over-fragmented strata/SI bins
Too-few stands in fit bins
Outlier points driving NLLS behavior
Sampled VDYP polygon/layer temp files drifting out of feature alignment
Recovery:
Reduce stratification complexity for small areas.
Increase SI-bin collapse aggressiveness or merge bins.
Inspect the sampled VDYP temp CSVs and confirm polygon rows and layer rows still share the same
FEATURE_IDset before VDYP launch.Apply targeted fit overrides and compare diagnostics only after the batch handoff itself looks sane.
VDYP fit-policy config surface
FEMIC-level default per-case/per-FMU smoothing exceptions live in
config/vdyp_fit_policy.yaml.Case-specific overrides can live beside the instance in
<instance_root>/config/vdyp_fit_policy.yaml.Normal precedence is: explicit runtime override map -> instance-local YAML -> FEMIC default YAML -> code fallback for missing/malformed shared defaults.
Use the instance-local overlay only for bounded, reviewable exceptions such as accepted K3Z curve-specific tail handling. Do not treat it as a shortcut for broad global smoothing-policy experiments.
Unexpected cache/resume behavior
Likely causes:
Resume with stale checkpoints under changed run profile
Debug-row mode interacting with cached artifacts
Recovery:
Use explicit run IDs per experiment.
Disable/clear relevant caches when run semantics changed.
Confirm manifest provenance and runtime parameters.
Docs/Pages visibility confusion
Likely causes:
GitHub Pages source set to branch/Jekyll instead of Actions artifact
Deploy job skipped by workflow
ifguard
Recovery:
Set Pages source to GitHub Actions.
Ensure deploy guard matches intended trigger (push/manual).
Re-run workflow and validate guide URLs directly.
Total Managed OK, Species-wise Managed Empty
Failure signature:
product.Yield.managed.Totalreports nonzero behavior in Patchworks.Species-wise managed accounts are empty/near-zero unexpectedly.
Deterministic troubleshooting flow:
Run account-surface diagnostics and capture JSON evidence:
python -m femic instance account-surface \ --config config/patchworks.runtime.windows.yaml \ --output runtime/logs/account_surface-<run_id>.json \ --instance-root <instance-root>
If diagnostics prints
total OK, species-wise empty:Inspect
tracks/products.csvandtracks/curves.csvfor missing or zero-signal species labels.Inspect matrix manifest
accounts_sync.excluded_patternsfor over-broad regex exclusions.
Re-run deterministic rebuild with Patchworks:
python -m femic instance rebuild \ --spec config/rebuild.spec.yaml \ --with-patchworks \ --instance-root <instance-root>
Confirm fatal species policy invariants pass:
required_present,expected_absent,required_nonzero,expected_zero.If still failing, compare against baseline/allowlist diff output in
instance_rebuild_report-<run_id>.jsonand only allowlist intentional deltas.
VDYP Gate Rescue Picks Worse Tail Curve
Failure signature:
tail_blend_selectionalready logstail_blend_rejectedfor a stratum.A later
fit_quality_gateevent used to rescue back totail_blendanyway because that curve clearedearly_overshoot_exceeds_gate.Final
fallback_policythen reportedselected_path = tail_blendeven though the rejected tail fit had materially worse RMSE or tail RMSE.
Deterministic troubleshooting flow:
Inspect the stratum’s Stage 01a curve events in
vdyp_curve_events-tsaXX-<run_id>.jsonl.If
tail_blend_selectionalready rejected the candidate, confirm the later rescue path only considers previously accepted candidates (reparameterized_nlls,censored_refit, acceptedtail_blend, acceptedmerchantable_floor, plusprimary_nlls).If the selected fit still fails the gate and no accepted candidate resolves it, expect
selected_curve_gate_unresolvedplusfallback_policy.selected_path = primary_nllsrather than a revived raw tail blend.Treat any remaining unresolved gate as a separate fitting-policy problem, not as evidence that the rejected tail-blend candidate should be revived.