=== RESEARCH ===
{'issue': 276, 'kind': 'docs', 'defect_status': 'confirmed', 'category': 'api-register', 'target_files': ['docs/src/api_types.md', 'docs/src/api_functions.md', 'docs/src/api.md'], 'summary': 'Splice the HA-DSGE / continuous-time / OLG / X-13 / Kalman-smoother export surface (types + functions) into the three API reference pages via explicit @docs blocks and add api.md quick-reference rows linking to the owning narrative pages.', 'current_state': "Defect still present at working-tree tip (release/v0.6.6, cb4f048). All symbols remain exported: src/MacroEconometricModels.jl:523-540 (KalmanSmootherResult, dsge_smoother, dsge_particle_smoother, HADSGESpec/HAGrid/IncomeProcess/IndividualProblem, HASteadyState/HADSGESolution/KrusellSmithSolution/DenHaanAccuracy, rouwenhorst/tauchen, load_ha_example, distribution_irf/inequality_irf/simulate_panel/den_haan_test, BlanchardOLG*/blanchard_*, CTAiyagari/CTPoissonIncome/CTSteadyState/CTTransition/ct_*, CTTwoAsset/CTTwoAssetSolution/ct_two_asset_solve) and lines 937/941/944 (X13FilterResult, x13_filter, seasonal). A literal-name grep of api.md/api_types.md/api_functions.md returns ZERO hits for every one of these except dsge_smoother/dsge_particle_smoother, which appear ONLY as quick-reference table rows in api.md:386-387 (not as rendered @docs blocks). api_types.md DSGE Models @docs block (lines 473-492) lists only core/OccBin/constraint types; Time Series Filters @docs block (29-36) has BaxterKingResult/BoostedHPResult but not X13FilterResult. api_functions.md DSGE Models section (647-729) has no HA/CT/OLG/smoother subsections; Time Series Filters @docs (74-82) has trend/cycle but not x13_filter/seasonal. No @autodocs Pages block covers dsge/heterogeneous/*.jl, ct/*.jl, olg/blanchard.jl, filters/x13.jl, or dsge/smoother.jl (api_types Pages entries: only lp/types*.jl; api_functions Pages entries listed at 101-845 — none match). Only one commit touched these pages since the 2026-07-03 audit (019c2a8, unrelated T083), and T202's per-domain split (#301) has NOT run: make.jl:101-103 still lists Overview/Types/Functions. Docstrings ALREADY EXIST on every target symbol (verified: HA types in dsge/heterogeneous/types.jl:93-527, DenHaanAccuracy krusell_smith.jl:537, CT types ct/continuous_aiyagari.jl + ct/two_asset.jl, OLG olg/blanchard.jl:55-99, X13FilterResult filters/types.jl:189, KalmanSmootherResult dsge/smoother.jl:44; functions rouwenhorst types.jl:210, tauchen types.jl:286, den_haan_test krusell_smith.jl:576, load_ha_example examples.jl:342, distribution_irf/inequality_irf/simulate_panel analysis.jl, ct_* aiyagari/two_asset, blanchard_* blanchard.jl, x13_filter filters/x13.jl:11, seasonal filters/x13.jl:115, dsge_smoother smoother.jl:60, dsge_particle_smoother smoother.jl:586) — so no docstrings must be fabricated and #277 is not a hard blocker.", 'proposed_change': 'Use explicit `@docs` blocks (bare symbol names) throughout — matching the DSGE Models section convention and avoiding @autodocs `Pages` substring collisions (dsge/heterogeneous/types.jl vs filters/types.jl vs lp/types.jl all endswith "types.jl"; ct_* is split across ct/continuous_aiyagari.jl + ct/two_asset.jl). Bare-name @docs resolves parametric `where{T}` types fine, so ignore the issue\'s @autodocs-for-parametrics hint.\n\n(1) docs/src/api_types.md:\n - In "Time Series Filters" @docs block (insert after BoostedHPResult, line 35): add `X13FilterResult`.\n - After the "DSGE Models" section (after line 494 `---`, before "## Panel Regression Models" at 496) insert four H2 sections, each `@docs`:\n   `## Heterogeneous-Agent DSGE` → HADSGESpec, HAGrid, IncomeProcess, IndividualProblem, HASteadyState, HADSGESolution, KrusellSmithSolution, DenHaanAccuracy\n   `## Continuous-Time DSGE` → CTAiyagari, CTPoissonIncome, CTSteadyState, CTTransition, CTTwoAsset, CTTwoAssetSolution\n   `## Overlapping Generations (OLG)` → BlanchardOLG, BlanchardOLGSteadyState, BlanchardOLGSolution\n   `## DSGE Smoothers` → KalmanSmootherResult\n\n(2) docs/src/api_functions.md:\n - In "Time Series Filters" @docs block (line 74-82, after `cycle`) add `x13_filter` and `seasonal` (both have docstrings at filters/x13.jl:11 and :115).\n - In the "DSGE Models" section, after "### Constraint Constructors" (after line 729, before the `---` at 731) insert four H3 subsections, each `@docs`:\n   `### Heterogeneous-Agent Solvers and Analysis` → rouwenhorst, tauchen, load_ha_example, distribution_irf, inequality_irf, simulate_panel, den_haan_test\n   `### Continuous-Time Solvers` → ct_hjb, ct_kfe, ct_steady_state, ct_mit_shock, ct_two_asset_solve\n   `### OLG Solvers` → blanchard_steady_state, blanchard_solve, blanchard_transition\n   `### DSGE Smoothers` → dsge_smoother, dsge_particle_smoother\n   (These are all exported/unqualified, so no `MacroEconometricModels.` prefix — matching sibling exported entries.)\n\n(3) docs/src/api.md quick-reference tables (docrule §Formatting Cross-Reference Requirements — every row links to owning narrative page):\n - "### Time Series Filters" table (starts line 54): add row `| \\`x13_filter(y; frequency=12, method=:seats)\\` | X-13ARIMA-SEATS seasonal adjustment |` and link the name to [x13.md](x13.md). (Narrative page x13.md exists; make.jl:29.)\n - Add a new `### Heterogeneous-Agent DSGE` table (place adjacent to the DSGE tables, e.g. after "### DSGE Smoothers and Diagnostics" at line 390) with rows for `load_ha_example(:name)` → link [dsge_ha.md](dsge_ha.md), `compute_steady_state(spec::HADSGESpec)`, and `solve(spec::HADSGESpec)` → link [dsge_ha.md](dsge_ha.md). (compute_steady_state/solve are already registered as functions in api_functions.md Steady State/Solution Methods; here they only get index rows.)\n - dsge_smoother already has a row at api.md:386 — no duplicate; just ensure its cell links to the owning narrative (smoother narrative — check docs/src for dsge estimation/smoother page; none dedicated exists, so link to the DSGE overview page used by neighboring smoother rows).\n - Do NOT touch the hand-drawn type-hierarchy tree (api_types.md lines 317-467) — that is #301 (T202)\'s @eval work.\n\nNo make.jl change: the three API pages stay in place (Overview/Types/Functions at make.jl:101-103); no page relocation, so no pages= or cross-ref entry moves. All narrative pages referenced (dsge_ha.md:60, dsge_olg.md:61, dsge_continuous.md:62, x13.md:29) already exist in nav.', 'verify': "Acceptance signal is a clean docs build, not verify_examples.jl (these pages contain no @example blocks, so verify_examples.jl won't exercise them). Per planning constraints do not run it now; the implementer runs `julia --project=docs docs/make.jl` and confirms ZERO `:missing_docs`, `:docs_block`, or `:autodocs_block` warnings mentioning any of the ~40 registered symbols (grep the build log for each name). If any narrative page were edited, `julia --project=docs docs/verify_examples.jl docs/src/dsge_ha.md` (and dsge_olg.md / dsge_continuous.md / x13.md) — but this spec edits only the three API pages, so that step is N/A.", 'dependencies': [], 'collisions': ['docs/src/api_types.md — #301 (T202: splits API reference into per-domain pages + @eval type hierarchy; if it lands first, register these symbols on the new per-domain pages instead per issue body)', 'docs/src/api_functions.md — #301 (T202 same restructure)', 'docs/src/api.md — #301 (T202 same restructure)', 'docs/src/api_types.md — #291 (T192: rewrites the type-hierarchy tree at ~317-467 and edits api.md load_example table / api_functions.md plotting @autodocs; same files, mostly disjoint regions but sequence to avoid churn)', 'docs/src/api.md — #291 (T192 edits load_example table row)', 'docs/src/api_functions.md — #291 (T192 adds plotting/spectral.jl to @autodocs at line 834)', 'docs/src/api_types.md — #277 (T178: supplies/verifies docstrings for the 11 fully-undocumented HA/CT/OLG types + distribution_irf that THIS issue registers; docstrings already exist, so soft-coordinate to avoid double-registering the same @docs entries)', 'docs/src/api_functions.md — #277 (T178 same symbol overlap: distribution_irf, den_haan_test, CT/OLG)'], 'effort': 'M', 'risk': 'low'}

=== VERIFY ===
{'issue': 276, 'verdict': 'CORRECTED', 'assessment': 'I re-read all cited files at working-tree tip (release/v0.6.6, cb4f048). The core defect is REAL for the HA/CT/OLG/X13 surface: with checkdocs=:exports (make.jl:106), the ~34 symbols in MacroEconometricModels.jl:527-540 (HA/OLG/CT types+funcs) and 937/941/944 (X13FilterResult, x13_filter, seasonal) are exported, all carry docstrings (I verified each definition has a preceding """ block in dsge/heterogeneous/types.jl, krusell_smith.jl, examples.jl, analysis.jl; ct/continuous_aiyagari.jl; ct/two_asset.jl; olg/blanchard.jl; filters/x13.jl; filters/types.jl:189), and NONE are registered in any @docs/@autodocs across docs/src (a repo-wide grep shows the HA/CT/OLG/X13 names appear only inside ```julia code blocks or prose in the four narrative pages, which contain zero @docs blocks). So they currently emit :missing_docs and are absent from the rendered API reference. BUT the spec is wrong on the DSGE-Smoother portion: its current_state only grepped the 3 api pages and missed dsge_hd.md:386-391, an @docs block (page is in nav at make.jl:59) that ALREADY registers historical_decomposition, dsge_smoother, dsge_particle_smoother, and KalmanSmootherResult. Documenter dedups docstring inclusion globally; re-registering those three in api_types.md/api_functions.md creates a duplicate-docstring :docs_block error. warnonly (make.jl:110) is [:missing_docs, :cross_references] only — :docs_block is NOT excepted, and the make.jl comment explicitly says docs/autodocs block failures must FAIL the build. So the spec\'s smoother registrations would break the build and violate its own acceptance criterion. The proposed x13_filter default (method=:seats) matches filters/x13.jl:53; insertion boundaries (api_types.md 494/496, api_functions.md 729/731) are accurate; api.md quick-ref edits are plain markdown with no registration collision.', 'corrections': 'Keep the HA/CT/OLG/X13 registrations, but DROP the two DSGE-Smoother registrations — they already live in dsge_hd.md:386-391 and re-registering them fails the build (:docs_block duplicate, not in warnonly).\n\n(1) api_types.md: DROP the proposed "## DSGE Smoothers -> KalmanSmootherResult" section entirely (KalmanSmootherResult is already at dsge_hd.md:390). KEEP: add X13FilterResult to the Time Series Filters @docs block (after BoostedHPResult, ~line 35); add the "## Heterogeneous-Agent DSGE" (HADSGESpec, HAGrid, IncomeProcess, IndividualProblem, HASteadyState, HADSGESolution, KrusellSmithSolution, DenHaanAccuracy), "## Continuous-Time DSGE" (CTAiyagari, CTPoissonIncome, CTSteadyState, CTTransition, CTTwoAsset, CTTwoAssetSolution), and "## Overlapping Generations (OLG)" (BlanchardOLG, BlanchardOLGSteadyState, BlanchardOLGSolution) sections between the DSGE Models block (ends ~492) and "## Panel Regression Models" (496) — all verified exported with docstrings and currently unregistered.\n\n(2) api_functions.md: DROP the proposed "### DSGE Smoothers -> dsge_smoother, dsge_particle_smoother" subsection entirely (both already at dsge_hd.md:388-389). KEEP: add x13_filter and seasonal to the Time Series Filters @docs block (after cycle, ~line 82); add "### Heterogeneous-Agent Solvers and Analysis" (rouwenhorst, tauchen, load_ha_example, distribution_irf, inequality_irf, simulate_panel, den_haan_test), "### Continuous-Time Solvers" (ct_hjb, ct_kfe, ct_steady_state, ct_mit_shock, ct_two_asset_solve — all exported, bare names OK), and "### OLG Solvers" (blanchard_steady_state, blanchard_solve, blanchard_transition) after "### Constraint Constructors" (after 729, before --- at 731).\n\n(3) api.md quick-reference edits are fine as written (plain markdown tables, no @docs collision): add the x13_filter row to "### Time Series Filters" (link name to x13.md) and the new "### Heterogeneous-Agent DSGE" table. dsge_smoother/dsge_particle_smoother already have rows at api.md:386-387 — leave them; their owning narrative page is dsge_hd.md (Historical Decomposition), so link there (no dedicated smoother page exists).\n\nMinor, non-blocking: docstrings confirmed present despite line drift in the spec — load_ha_example def is examples.jl:369 (spec said 342), x13_filter def filters/x13.jl:51 (spec said :11), seasonal def filters/x13.jl:119 (spec said :115). Also, the exported accessor `adjusted` (MacroEconometricModels.jl:944) stays unregistered after this change — out of scope for #276, remains a non-fatal :missing_docs warning.', 'collision_issues': [277, 291, 301], 'discriminating_power': 'n/a (docs-only change; no test assertions involved).', 'final_effort': 'M'}