Use this chapter when a run, cache, page, or export is not behaving as expected.
- Confirm the config path you ran.
- Check the selected pipeline steps and dashboard mode in logs.
- Check whether the issue appears in prepare, summarize, dashboard, or export.
- Inspect
<root>/<run-key>/manifest.jsonfor the affected run (see the cache layout). - If cache reuse is suspect, temporarily set
pipeline.overwrite: truefor the affected configured steps.
| Symptom | Likely causes | First checks |
|---|---|---|
| Run missing from dashboard | Missing summary cache, label mismatch, config run omitted | runs, cache directories, log run keys |
| Summary cache rebuilds unexpectedly | Input fingerprint changed, config digest changed, summary contract changed | the run manifest's summary-cache entries |
| Page says data unavailable | Required summary missing, optional raw input absent, prepared column missing | page catalog and summary catalog |
| Counts look wrong | Weighting mode, sample rate, explicit weight columns | summarize.weighting_modes, prepared finalweight |
| Geography options missing | Geography disabled, land-use columns missing, aggregation config wrong | zones, summarize.geography |
| Skim pages empty | Skimjoin disabled, no skim outputs, missing lookup rules | skimjoin manifest and reports |
| Export differs from live | Widget/section not registered, selector values omitted, unsupported node | page selector/section registrations |
| Dashboard-only run fails | Summary cache missing or prepared-data page needs prepared cache | pipeline.steps, page prepared-data mode |
For a reproducible full rebuild, configure the steps and overwrite policy:
pipeline:
steps: [prepare, summarize, dashboard]
dashboard_mode: live
overwrite: trueReturn overwrite to false after the rebuild. Developers can use targeted
one-off refresh flags while diagnosing a specific cache layer:
uv run activitysim-viz --config local_config.yaml --refresh-prepared-cache
uv run activitysim-viz --config local_config.yaml --refresh-summary-cache
uv run activitysim-viz --config local_config.yaml --refresh-cachesIf only dashboard presentation changed, a refresh usually should not be needed. If raw inputs or prepare config changed, refresh both caches.
Find the page in 31 - Dashboard Pages and check:
- required summary IDs
- required prepared tables
- prepared-data mode
- whether the page is enabled in live/export config
Then find each summary in 24 - Summary Catalog and check the required input tables/columns.
Suppose Trip Mode opens but shows the standard unavailable card:
- Find
trip_modein chapter 31. It requirestrip_mode_by_tour_purpose_and_tour_mode. - Find that ID in chapter 24. Note its required prepared table and columns.
- Open
<root>/<run-key>/manifest.jsonand inspect the summary entry. If the summary isunavailable, read its recorded reason before rebuilding anything. - If a required prepared column is missing, inspect the same manifest's
prepared-cache entry and the canonical column settings in
columns. - If the contract recently changed, rebuild the configured summarize step
with
pipeline.overwrite: true. - If the summary is present and valid, confirm the page's
columns=request matches the cached schema and that the selected weighting mode exists.
This sequence moves backward through the declared contracts. It avoids trying random cache refreshes when the real issue is an input or schema mismatch.
Check the skimjoin reports:
skim_lookup_summarymissing_lookup_reportfallback_lookup_reportskipped_rule_reporttour_aggregation_summaryfailure_report
Common fixes:
- correct skim file globs
- correct
network_los_file - align
activitysimsource columns with prepared tables - add missing dimension values
- change missing matrix/OD policy only after confirming the missing data is expected
If live mode works but export does not:
- Confirm the page is included in export page selection.
- Confirm ordinary dropdowns use
self.select(...)and custom widgets useself.selector(...). - Confirm affected content is registered with
self.section(...). - Check browser console errors.
- Try
?debug_export=1.
Export cannot reproduce arbitrary Python callbacks. It can only switch among serialized states and registered selector variants.
Create the smallest reproduction:
- one run
- one page or one summary
- one weighting mode
- fresh cache root
- copied log excerpt and manifest diagnostics
That usually makes the owning subsystem obvious.