=== RESEARCH ===
{'issue': 293, 'kind': 'docs', 'defect_status': 'partially_confirmed', 'category': 'docs-polish-sweep', 'target_files': ['docs/src/ia_irf.md', 'docs/src/ia_hd.md', 'docs/src/ia_fevd.md', 'docs/src/nongaussian.md', 'docs/src/id_nongaussian.md', 'docs/src/structural_identification.md', 'docs/src/tests_unitroot_advanced.md', 'docs/src/tests.md', 'docs/src/api_functions.md', 'docs/src/dsge_estimation.md', 'docs/src/dsge_linear.md', 'docs/src/dsge.md', 'docs/src/dsge_constraints.md', 'docs/src/dsge_olg.md', 'docs/src/dsge_nonlinear.md', 'docs/src/nowcast_dfm.md', 'docs/src/nowcast_news.md'], 'summary': 'Batch LOW-severity docs polish across DSGE / identification+IA+nowcast / tests+API pages: fix monthly-vs-quarters narration, dead FEVD computation, missing nongaussian symbols, Keweloh page range, orphan/URL-less references, Sims 2002 issue-number, `irf` closure shadowing, Step renumber, Lee-Strazicich locator, unqualify 4 exported solvers, remove hard counts, and add a `:mh`/`:rwmh` note.', 'current_state': 'Confirmed against current tree (release/v0.6.6 tip cb4f048). MONTHLY FRED-MD narrated as quarters: ia_irf.md:127 ("By ``h = 8`` quarters") and ia_hd.md:264 ("with a lag of several quarters") — both load `load_example(:fred_md)` (ia_irf.md:8, ia_hd.md:12); FRED-MD is monthly. Dead computation: ia_fevd.md:95-96 assign `h1_shares`/`h20_shares` but the @example block ends with `print_table(...)` (line 99) and never displays them (anti-pattern 16). nongaussian.md:128 "Supported symbols" lists 11 symbols but omits accepted symbols `:smooth_transition` and `:external_volatility` (src/core/identification.jl:287-291); `:nongaussian_ml` (identification.jl:284) is a third accepted symbol to adjudicate. Keweloh (2021) page range "772--882" appears in nongaussian.md:192 AND id_nongaussian.md:434; true JBES 39(3) range is 772-782 (DOI 10.1080/07350015.2020.1730858). Sims (2002) issue number inconsistent: dsge_constraints.md:438 reads "20(1), 1--20" while dsge_linear.md:480-481 and dsge.md:447-448 list the same ref; true journal is Computational Economics 20(1-2):1-20. Orphan refs (listed, not cited in body): Rendahl 2017 dsge_constraints.md:436 (also no URL), Koop-Pesaran-Potter dsge_linear.md:477, Fujiwara-Teranishi dsge_olg.md:180, Plagborg-Moller & Wolf ia_fevd.md:306, Giannone-Reichlin-Small 2008 nowcast_dfm.md:288, Banbura-Giannone-Reichlin 2011 nowcast_news.md:262. `irf` closure shadows the `irf` function: structural_identification.md:36,138,175 (`check = irf -> irf[...]`). tests_unitroot_advanced.md Complete-Example steps start at Step 2 (line 461) through Step 8 (line 490); no Step 1. Lee & Strazicich 2013 ref lacks DOI/URL: tests_unitroot_advanced.md:520 (Economics Bulletin 33(4):2483--2492). api_functions.md module-qualifies the 4 EXPORTED solvers `collocation_solver`(670), `pfi_solver`(671), `perfect_foresight`(672), `vfi_solver`(696) — all exported at src/MacroEconometricModels.jl:506,509 — while siblings gensys/blanchard_kahn/klein/perturbation_solver/evaluate_policy/max_euler_error are unqualified. dsge_estimation.md:367 input `method=:mh` vs stored `method=:rwmh` shown at line 508 — unexplained. NOTE — hard-count item is only PARTIALLY confirmed: tests.md:69 says "over 30 test functions organized into ten categories"; the numbered list actually has 36 functions (grep -c = 36) and the Test Taxonomy has 10 `###` headings (Unit Root, Cointegration, Structural Breaks, Panel Unit Root, VAR Diagnostics, Panel VAR, Normality, ARCH Diagnostics, Model Comparison, Convenience) — so "over 30" and "ten categories" are BOTH accurate; the audit\'s "12 headings" claim is itself wrong. Notation item: docs/src/notation.md and docs/src/bibliography.md do NOT exist yet (T200 not landed), so cross-page z_t/y_t/z standardization cannot be anchored to a canonical dictionary; dsge_nonlinear.md:91 does locally define `z_t` as the endogenous vector.', 'proposed_change': 'Do one pass per page; re-grep every anchor (lines drift). (1) ia_irf.md:127 change "By ``h = 8`` quarters" -> "By ``h = 8`` months". (2) ia_hd.md:264 change "with a lag of several quarters" -> "...several months" (leave "business-cycle horizons" as-is). (3) ia_fevd.md:95-96: remove the two dead lines and the "# Inspect variance shares..." comment (line 94) OR make them display — simplest conforming fix is to delete lines 94-96 since `report(decomp)` and `print_table(...)` already show the decomposition. (4) nongaussian.md:128: append the 2 missing heteroskedastic siblings so the list reads `..., :markov_switching, :garch, :smooth_transition, :external_volatility.` (source-of-truth src/core/identification.jl:287-291); confirm with implementer whether to also add `:nongaussian_ml` (identification.jl:284) — it is an aggregate ML meta-method and may be intentionally omitted from the user-facing list. (5) Keweloh page range: change "772--882" -> "772--782" at nongaussian.md:192 AND id_nongaussian.md:434 (true JBES 39(3):772-782, DOI 10.1080/07350015.2020.1730858). (6) Sims (2002): standardize all three to "20(1--2), 1--20" — edit dsge_constraints.md:438 ("20(1)" -> "20(1--2)"); grep the 2-line entries at dsge_linear.md:480-481 and dsge.md:447-448 and set the same "20(1--2)" (true: Computational Economics vol 20, issue 1-2, pp 1-20). (7) Orphan references — for each, either add an in-body citation with a locator or remove the list entry to satisfy the docrule References bijection: Rendahl 2017 (dsge_constraints.md:436) — add URL and cite where linear-time-iteration/time-iteration is discussed, else remove; Koop-Pesaran-Potter (dsge_linear.md:477) — GIRF ref misplaced on the linear page; remove (or move to the nonlinear page if cited there); Fujiwara-Teranishi (dsge_olg.md:180) — cite in the OLG NK discussion or remove; Plagborg-Moller & Wolf (ia_fevd.md:306) — cite near the LP cross-link at ia_fevd.md:216 or remove; Giannone-Reichlin-Small 2008 (nowcast_dfm.md:288) — cite in the DFM intro (nowcast_dfm.md:3) or remove; Banbura-Giannone-Reichlin 2011 (nowcast_news.md:262) — cite or remove (body cites Banbura & Modugno 2014, not the 2011 survey). (8) structural_identification.md:36,138,175 rename the closure argument `irf` -> `resp` (e.g. `check = resp -> resp[1,3,3] > 0 && ...`) to stop shadowing the exported `irf` function; verify no later line in each block references the old name. (9) tests_unitroot_advanced.md: renumber the Complete-Example step comments from 1 — Step 2->1 (line 461) through Step 8->7 (line 490). (10) tests_unitroot_advanced.md:520 add an Economics Bulletin locator/URL to Lee & Strazicich 2013 (article page: http://www.accessecon.com/Pubs/EB/2013/Volume33/EB-13-V33-I4-P229.pdf — implementer to confirm exact URL). (11) api_functions.md: strip the `MacroEconometricModels.` prefix from the 4 exported solvers at lines 670,671,672,696 so they read `collocation_solver`, `pfi_solver`, `perfect_foresight`, `vfi_solver` (exported at src/MacroEconometricModels.jl:506,509); leave `MacroEconometricModels.@dsge` (652) and the StatsAPI-qualified entries out of scope for this issue. (12) tests.md:69 — per docrule Writing Voice remove the hard counts; reword "The package exports over 30 test functions organized into ten categories." -> "The package exports a comprehensive suite of test functions organized by purpose." (do NOT "correct" to 12 headings — the audit\'s heading count is wrong; there are 10). (13) dsge_estimation.md — add a one-line note near the options table (line 508) reconciling the user-facing input `method=:mh` (line 367/379) with the stored `method=:rwmh`, e.g. "The `:mh` option selects random-walk Metropolis-Hastings; the fitted result reports it as `:rwmh`." (14) Notation z_t/y_t/z item: DEFER the cross-page standardization to T200 (notation.md does not exist yet); no safe edit here beyond confirming dsge_nonlinear.md:91 already defines `z_t` — do not repurpose symbols without the canonical dictionary.', 'verify': 'Per edited page run `julia --project=docs docs/verify_examples.jl docs/src/<page>.md` (must print OK) — required for ia_irf.md, ia_hd.md, ia_fevd.md (has @example blocks), nongaussian.md, structural_identification.md, dsge_estimation.md, api_functions.md. For reference-list / prose-only edits (Keweloh, Sims, orphan refs, Lee-Strazicich, tests.md count, tests_unitroot_advanced step comments) also run a full `julia --project=docs docs/make.jl` to confirm @ref cross-links and the References sections still resolve, since verify_examples only executes code blocks. Do NOT run the test suite (no test changes in this issue).', 'dependencies': [190, 191, 192], 'collisions': ['docs/src/dsge_linear.md — T190 (DSGE MED sweep, same pages)', 'docs/src/dsge.md — T190', 'docs/src/dsge_constraints.md — T190', 'docs/src/dsge_estimation.md — T190', 'docs/src/dsge_olg.md — T190', 'docs/src/dsge_nonlinear.md — T190', 'docs/src/ia_irf.md — T191 (IA/nowcast MED sweep)', 'docs/src/ia_hd.md — T191', 'docs/src/ia_fevd.md — T191', 'docs/src/nowcast_dfm.md — T191', 'docs/src/nowcast_news.md — T191', 'docs/src/tests.md — T192 (tests/API MED sweep)', 'docs/src/tests_unitroot_advanced.md — T192', 'docs/src/api_functions.md — T192', 'docs/src/dsge_constraints.md — T200 (bibliography/notation: Sims/Rendahl refs)', 'docs/src/dsge_linear.md — T200 (Sims/Koop-Pesaran-Potter refs)', 'docs/src/dsge.md — T200 (Sims ref)', 'docs/src/dsge_olg.md — T200 (Fujiwara-Teranishi ref)', 'docs/src/nongaussian.md — T200 (Keweloh ref)', 'docs/src/id_nongaussian.md — T200 (Keweloh ref)', 'docs/src/ia_fevd.md — T200 (Plagborg-Moller ref)', 'docs/src/nowcast_dfm.md — T200 (Giannone-Reichlin-Small ref)', 'docs/src/nowcast_news.md — T200 (Banbura-Giannone-Reichlin ref)', 'docs/src/tests_unitroot_advanced.md — T200 (Lee-Strazicich DOI)', 'docs/src/dsge_nonlinear.md — T200 (canonical notation.md; z_t/y_t item)', 'docs/src/structural_identification.md — T205 (lint: irf closure rename)', 'docs/src/ia_fevd.md — T205 (lint: dead-code removal)', 'docs/src/api_functions.md — T205 (lint: solver qualification)'], 'effort': 'L', 'risk': 'low'}

=== VERIFY ===
{'issue': 293, 'verdict': 'CORRECTED', 'assessment': 'I re-read every cited file:line at the current tree (release/v0.6.6 tip cb4f048). The bulk of the batch is genuinely confirmed: monthly-narrated-as-quarters (ia_irf.md:127, ia_hd.md:264 both on load_example(:fred_md)); dead h1_shares/h20_shares at ia_fevd.md:94-96; missing heteroskedastic symbols at nongaussian.md:128 (source identification.jl:287,290 accepts :smooth_transition/:external_volatility, and :282 accepts :nongaussian_ml); Keweloh 772--882 -> 772--782 at nongaussian.md:192 and id_nongaussian.md:434 (id_nongaussian IS a cited ref, line 342, not an orphan); Sims 20(1) at dsge_constraints.md:438 (dsge_linear.md:481 already 20(1--2), dsge.md:448 uses single-hyphen 20(1-2)); the six orphan refs are all factually uncited in-body; the irf closures at structural_identification.md:36,138,175; the Step-2..Step-8 numbering at tests_unitroot_advanced.md:461-490; Lee-Strazicich lacking URL at line 520; the 4 module-qualified but exported solvers at api_functions.md:670,671,672,696; the :mh(367/379) vs :rwmh(508) mismatch in dsge_estimation.md. The DOIs cited are genuine: Keweloh 10.1080/07350015.2020.1730858 and true range 772-782 (a 111-page article 772-882 is impossible for JBES); Sims 10.1023/A:1020517101123, true Computational Economics 20(1-2):1-20. HOWEVER three things in the spec are wrong or overreach. (a) The dead-code justification cites "anti-pattern 16" — docrule.md has exactly 12 anti-patterns; no #16 exists. The removal is still a fine minor polish, just not backed by that rule. (b) Item #12 (strip tests.md:69 counts) is UNJUSTIFIED: I verified the Test Taxonomy has exactly 36 numbered functions and 10 ### headings, so "over 30" and "ten categories" are BOTH accurate, and docrule Writing Voice contains NO anti-hard-count rule — its Precision rule actually favors concrete claims; replacing an accurate count with vague "a comprehensive suite ... organized by purpose" REDUCES precision. This sub-item should be dropped/no-changed. (c) The "References bijection" docrule basis for removing orphan refs does not exist as a strict rule; the only signal is docrule line 60 ("listing all cited works"), which is weak. The irf shadowing is purely cosmetic (a lambda parameter named irf does not rebind module-scope irf; the examples already verify). The Lee-Strazicich URL and api @dsge handling need the corrections below.', 'corrections': 'Implement the confirmed items, with these adjustments: (1) DROP item #12. Do NOT touch tests.md:69 — "over 30 test functions organized into ten categories" is factually accurate (36 functions, 10 ### headings) and docrule has no rule against hard counts; the proposed vague rewrite reduces precision. If anything, leave as-is. (2) ia_fevd.md:94-96 dead-code removal is OK, but the "anti-pattern 16" rationale is bogus (docrule has only 12 anti-patterns) — justify it as dead code, not a numbered anti-pattern; after deleting lines 94-96 also collapse the resulting double blank line so the @example block stays clean. (3) Orphan refs: docrule has no strict cite-or-remove bijection (only line 60 "listing all cited works"). PREFER adding an in-body Author (Year) citation over deletion for legitimate further-reading works; only remove a reference that is genuinely off-topic (e.g., Koop-Pesaran-Potter GIRF on the LINEAR dsge_linear.md page). Treat each of the six as a per-ref editorial decision, not a mechanical sweep. Also note this region overlaps T200 (bibliography/notation) heavily — sequence after or coordinate with T200 to avoid double-editing the same reference lists. (4) Lee-Strazicich tests_unitroot_advanced.md:520: adding a URL is docrule-aligned (line 331 says use direct URL when no DOI), BUT do NOT insert the guessed AccessEcon "EB-13-V33-I4-P229.pdf" URL — docrule line 331 forbids fabricating/guessing; verify the exact Economics Bulletin article URL first or leave the entry unchanged. (5) nongaussian.md:128: appending :smooth_transition/:external_volatility is correct, but both require extra kwargs (transition_var / regime_indicator per identification.jl:287-292) — either add a parenthetical noting the kwarg requirement or the list will imply irf(model,20;method=:smooth_transition) works bare (it throws ArgumentError). Also ADD :nongaussian_ml for completeness (identification.jl:282; it needs no kwarg and is already documented at id_nongaussian.md:243). (6) Sims: only dsge_constraints.md:438 has the factual error (20(1) -> 20(1--2)); dsge_linear.md:481 already correct; dsge.md:448 change is only a hyphen->en-dash house-style harmonization (1-20 -> 1--20), not a factual fix — fine to include but label it as cosmetic. (7) api_functions.md: unqualifying the 4 solvers (670,671,672,696) is safe since all are exported (506,509); note that @dsge (652) is ALSO exported (MacroEconometricModels.jl:502), so leaving it qualified is a minor inconsistency with the stated rationale — acceptable to leave (macro doc-resolution is finicky) but call it out. (8) structural_identification.md irf->resp rename: safe and improves readability, but state accurately that it is cosmetic only (no runtime shadowing; examples already pass verify). (9) ia_hd.md:264 "several quarters"->"several months" is the weakest item — monetary transmission lags are legitimately quarters in the literature — but changing it for consistency with the monthly frame is acceptable.', 'collision_issues': [190, 191, 192, 200, 205], 'discriminating_power': 'n/a (docs-only change; no test assertions in scope)', 'final_effort': 'L'}