BDPolicyLab analysis in the twin. Part of what the twin can answer. Every figure below is the value the route serves, with its source; the raw response is at /api/twin/absorb/products.
Descriptive, sourced: no model
Basis: BPL products linked to Body or Place by exact name; counts of items, no model.
72 items; the first 50 are listed.
Analyzeradp_deliverability
app/analysis/adp_deliverability.py
Analyzeragriculture
app/analysis/agriculture.py
Analyzerair_quality
app/analysis/air_quality.py
Analyzeraquaculture
app/analysis/aquaculture.py
Analyzerautomation_atlas
app/analysis/automation_atlas.py
Analyzerbangladesh_index
app/analysis/bangladesh_index.py
Analyzerbanking_financial
app/analysis/banking.py
Bangladesh Bank: a data series it reads comes from this body (series bb_npl_ratio: data_series.source 'bangladesh_bank' names 'bangladesh bank')
72 analyzer modules, each run once offline into a pinned snapshot built 2026-10-02T07:21:38Z; results are not validated.
Kinds: `pub_module` (app/publications/pubs), `publication` (the publication store, app.publications in data/app.duckdb), `narrative` (content/narratives), `story` (the stories table in bdpolicy.db) and `analyzer` (app/analysis). Each item links to Body or Place objects only where a name matches exactly, and every link says how (`via`): - `tag`: a frontmatter or store tag, hyphens and underscores read as spaces, equals the full name_en of a national Body or the title_en of a division or district Place (case-insensitive, whole string). Acronyms and lower tiers are not matched from tags: tag `sob` means state-owned banks in a banking narrative, not Survey of Bangladesh (SoB), and a field office named "Forest" or a union named "Benapole" is a homonym of the topic. Product (DGDA medicine brands) is not matched: brands include common words (Energy, Macro, Forest). - `text_binding`: a narrative's text names the Body by its exact registry name, as bound by scripts/build_publication_bindings.py (publication_bindings.parquet, the file /api/twin/entity/{id}/evidence serves); reused here, not re-derived. - `series_source`: the item reads a series (its analyzers' required_series, or a series name printed in its own code) whose `data_series.source` names a Body. The source is compared whole, split on " / ", and with one trailing parenthetical taken as an alternative name, each part compared whole against Body name_en or acronym. A key matching more than one object is ambiguous and dropped, never resolved by guess. The index is built lazily on first use and cached; nothing here writes. Lane BRN7B: nothing here reads bdpolicy.db or runs an analyzer at request time. The series-to-source map, the stories and every analyzer's stored answer come from two manifest-pinned parquets (bpl_series_source, bpl_analyzer_snapshot; root lake_bpl_absorb) that scripts/twin_bpl_absorb/build_analyzer_snapshot.py builds offline. A missing file, or one whose sha256 is not its pin, raises SnapshotUnavailable (the routes answer 503).
Analyzerblue_economy
app/analysis/blue_economy.py
Analyzerbrick_kilns
app/analysis/brick_kilns.py
Analyzerceramics_plastics
app/analysis/ceramics_plastics.py
Analyzerclimate_disaster
app/analysis/climate.py
Analyzerclimate_vulnerability
app/analysis/climate_vulnerability.py
Analyzercoastal_vulnerability
app/analysis/coastal_vulnerability.py
Analyzercost_of_living
app/analysis/cost_of_living.py
Bangladesh Bank: a data series it reads comes from this body (series bb_cpi_inflation: data_series.source 'bangladesh_bank' names 'bangladesh bank'; 1 more)
Analyzerclimate_agriculture_nexus
app/analysis/cross_climate_agriculture.py
Analyzereducation_labor_nexus
app/analysis/cross_education_labor.py
Analyzerexternal_economy_nexus
app/analysis/cross_external_economy.py
Analyzergovernance_finance_nexus
app/analysis/cross_governance_finance.py
Analyzerhuman_development_nexus
app/analysis/cross_human_development.py
Analyzerdefense_security
app/analysis/defense_security.py
Analyzerdevelopment_indicators
app/analysis/development.py
Analyzerdigital_economy
app/analysis/digital.py
Analyzerdigital_economy
app/analysis/digital_economy.py
Analyzereducation_skills
app/analysis/education.py
Analyzerenergy_climate
app/analysis/energy.py
Analyzerenvironmental_change
app/analysis/environmental_change.py
Analyzerfinancial_inclusion
app/analysis/financial_inclusion.py
Analyzerfiscal_analysis
app/analysis/fiscal.py
Analyzerfood_processing
app/analysis/food_processing.py
Analyzergender_social_inclusion
app/analysis/gender.py
Analyzergovernance_analysis
app/analysis/governance.py
Analyzergroundwater
app/analysis/groundwater.py
Analyzerhaor_ews
app/analysis/haor_ews.py
Analyzerhealth_policy
app/analysis/health.py
Analyzerhealth_sector
app/analysis/health_sector.py
Analyzerict_software
app/analysis/ict_software.py
Analyzerinequality_poverty
app/analysis/inequality.py
Analyzerinflation_watch
app/analysis/inflation_watch.py
Bangladesh Bank: a data series it reads comes from this body (series bb_cpi_inflation: data_series.source 'bangladesh_bank' names 'bangladesh bank')
Analyzerjute_industry
app/analysis/jute.py
Analyzerlabor_employment
app/analysis/labor.py
Analyzerlandslide_ews
app/analysis/landslide_ews.py
Analyzerleather_footwear
app/analysis/leather_footwear.py
Analyzerlight_engineering
app/analysis/light_engineering.py
Analyzermacro_monitor
app/analysis/macro_monitor.py
Bangladesh Bank: a data series it reads comes from this body (series usd_bdt_rate: data_series.source 'bangladesh_bank' names 'bangladesh bank')
Export Promotion Bureau: a data series it reads comes from this body (series trade_total_exports: data_series.source 'epb' names 'epb'; 2 more)
Analyzermicrofinance_sme
app/analysis/microfinance_sme.py
Analyzermigration_diaspora
app/analysis/migration_diaspora.py
Analyzernational_ews
app/analysis/national_ews.py
Analyzernutrition
app/analysis/nutrition.py
Analyzerpeer_benchmark
app/analysis/peer_benchmark.py
Analyzerpharmaceuticals
app/analysis/pharmaceuticals.py