=== RESEARCH ===
{'issue': 287, 'kind': 'docs', 'defect_status': 'partially_confirmed', 'category': 'prose-fix', 'target_files': ['docs/src/lp.md', 'docs/src/bayesian.md', 'docs/src/manual.md', 'docs/src/favar.md', 'docs/src/vecm.md', 'docs/src/factormodels.md'], 'summary': 'Fix drifted keyword defaults, a narrated draw count, leaked setup slices, an undocumented static estimation block, missing ICA cross-links (vecm/lp only), and a wrong Blanchard-Quah DOI across the multivariate pages; item 7 (factormodels T<N) is verify-gated and likely a false positive.', 'current_state': 'Item 1 CONFIRMED: docs/src/lp.md:662 table reads `| reps | Int | 500 |` but src/lp/core.jl:420 has `reps::Int=200`; docs/src/lp.md:824 reads `| bias_correct | Bool | false |` but src/lp/fevd.jl:54 has `bias_correct::Bool=true`. (Only the tables drift; the code examples at lp.md:83/805/886 already use bias_correct=true, and lp.md:643 uses reps=50.) Rest of lp.md tables verified correct vs source: main structural_lp table method `:cholesky`/lags `4`/cov_type `:newey_west`/ci_type `:none` match src/lp/core.jl:420-424; lp_fevd table n_boot `500`, method `:r2`, conf_level `0.95` match src/lp/fevd.jl:53-56.\nItem 2 CONFIRMED: docs/src/bayesian.md:604 prose says "produces 1000 posterior draws" but the block it narrates (Complete Example, post_ce at bayesian.md:579) uses `n_draws=100`. (bayesian.md:312 and :610 are advisory prose about 1000, and :318 table default 1000 matches source — all correct, do NOT touch.)\nItem 3 CONFIRMED: docs/src/manual.md:83,97,397,451 shown `@example var` code contains `estimate_var(Y[end-59:end, :], 2)`, but the hidden `@setup var` at manual.md:20 already reduces `Y = Y[end-59:end, :]` to 60 rows, so the visible slice both leaks the reduction (docrule Setup Reduction) and is a redundant re-slice of an already-60-row Y.\nItem 4 CONFIRMED: docs/src/favar.md:303-307 is a static ```julia``` block running real estimation `irf(favar_panel, 20; method=:sign, ...)` with no rendered output and no admonition (the adjacent cholesky block at favar.md:297-301 is `@example favar`).\nItem 5 PARTIAL: vecm.md (l.8, l.254) and lp.md (l.10 bullet, l.608 Identification Methods section, l.616 FastICA row, l.618 SOBI row) advertise ICA but never link the identification pages (grep for nongaussian/id_nongaussian across all three returns nothing). Both link targets exist: docs/src/nongaussian.md:1 `@id nongaussian_page`, docs/src/id_nongaussian.md:1 `@id id_nongaussian_page`. factormodels.md is a FALSE POSITIVE: it does not advertise ICA — its only non-Gaussian mention (factormodels.md:366) is "Non-Gaussian innovations" describing a bootstrap CI, and Structural DFM supports only `:cholesky`/`:sign` (src/factor/structural.jl:156).\nItem 6 CONFIRMED: manual.md:700 cites Blanchard-Quah (1989) with DOI `10.3386/w2737` (NBER working paper); lp.md:955 already cites the same work with `10.2307/1827924` (JSTOR/AER article). Pages disagree; lp.md is already canonical.\nItem 7 CONDITIONAL / likely FALSE POSITIVE: factormodels.md Quick Start Recipe 6 (l.68-73) runs `estimate_structural_dfm(X, 2; ...)` on X = full FRED-MD reduced to 60 rows (setup l.15-21), i.e. T=60 < N; the dedicated section (l.561-565) uses `randn(200,20)`. But Recipe 4 (l.52-55) already runs `estimate_gdfm(X, 2)` on the same X, which is the first internal step of estimate_structural_dfm (structural.jl:115), so if the page builds in CI the Quick Start almost certainly does NOT error.', 'proposed_change': 'Make these edits (re-locate by grep; lines drift):\nItem 1 (lp.md): change the `reps` default table cell from `500` to `200` (src/lp/core.jl:420); change the `bias_correct` default cell from `false` to `true` (src/lp/fevd.jl:54). No other lp.md default cells need changing (verified against src/lp/core.jl:420-424 and src/lp/fevd.jl:53-56).\nItem 2 (bayesian.md:604): change "the conjugate NIW sampler produces 1000 posterior draws" to "...produces 100 posterior draws" to match n_draws=100 at bayesian.md:579. Leave bayesian.md:312, :318, :610 unchanged.\nItem 3 (manual.md:83,97,397,451): replace `model_short = estimate_var(Y[end-59:end, :], 2)` with `model_short = estimate_var(Y, 2)` on all four lines; Y is already the 60-row reduced matrix from the hidden @setup (manual.md:20), so the model is unchanged and the shown code no longer exposes the slice (docrule Setup Reduction Guidelines).\nItem 4 (favar.md:303-307): preferred fix — convert the ```julia``` fence to ```@example favar``` so the sign-restriction IRF renders output (the setup seeds Random at favar.md via Random.seed!, and favar_panel is already in scope from an earlier @example block); if the implementer finds sign-restriction search too slow or non-reproducible, instead keep it static and add an admonition immediately above explaining why (docrule Code Block Types: static-julia-running-real-estimation requires an admonition). Do not touch the Complete Example (favar.md:313+), which is issue #282\'s scope.\nItem 5 (vecm.md, lp.md ONLY): add an `@ref` cross-link where each page advertises ICA — e.g. append to vecm.md:254 and lp.md\'s Identification Methods intro (lp.md:608) a sentence linking `[Statistical Identification](@ref nongaussian_page)` (hub) and/or `[Non-Gaussian Methods](@ref id_nongaussian_page)` (anchors verified at nongaussian.md:1 and id_nongaussian.md:1). Do NOT edit factormodels.md for this item (false positive — no ICA advertised).\nItem 6 (manual.md:700): change the Blanchard-Quah DOI from `https://doi.org/10.3386/w2737` to `https://doi.org/10.2307/1827924` so it matches lp.md:955 verbatim (one canonical entry, DOI resolving to the published AER 79(4) article via JSTOR). lp.md needs no change. Implementer should confirm 10.2307/1827924 resolves to the AER article before finalizing (docrule References; Gregory-Hansen lesson).\nItem 7 (factormodels.md): FIRST run verify_examples on factormodels.md. Only if Recipe 6 (l.68-73) actually errors, change it to use a T>N input consistent with the dedicated section — e.g. `X_qs = randn(200, 20)` then `estimate_structural_dfm(X_qs, 2; ...)`. If it builds (expected), mark item 7 no_change_needed. Do not scale up the FRED-MD data otherwise.\nmake.jl: NO changes — all six pages keep their existing pages= entries (make.jl:35-40); no page is moved/created, and the @ref targets are already registered pages (make.jl:79-80). No API-reference or nav edits.', 'verify': 'Run per edited page: julia --project=docs docs/verify_examples.jl docs/src/lp.md ; then bayesian.md ; manual.md ; favar.md ; vecm.md ; factormodels.md — each must print OK. factormodels.md run is also the gate for item 7 (confirms whether the Quick Start errors). (docs/verify_examples.jl confirmed present.)', 'dependencies': [282], 'collisions': ['docs/src/favar.md — #282', 'docs/src/lp.md — #292', 'docs/src/vecm.md — #292', 'docs/src/factormodels.md — #292', 'docs/src/manual.md — #292', 'docs/src/bayesian.md — #292', 'docs/src/lp.md — #302', 'docs/src/manual.md — #302', 'docs/src/factormodels.md — #302'], 'effort': 'M', 'risk': 'low'}

=== VERIFY ===
{'issue': 287, 'verdict': 'CONFIRMED', 'assessment': 'Independently read all cited files at current working-tree (branch release/v0.6.6, tip cb4f048). Every item checks out. Item 1: lp.md:662 reps=500 vs core.jl:420 reps::Int=200; lp.md:824 bias_correct=false vs fevd.jl:54 bias_correct::Bool=true — both drifts real; all other default cells verified correct vs core.jl:417-424 / fevd.jl:53-56. Item 2: bayesian.md:604 "produces 1000 posterior draws" narrates the @example bvar block (:573-602) which uses n_draws=100 (:579) — real inconsistency; :610/:612 advisory text is fine. Item 3: manual.md:83,97,397,451 (exactly 4, all @example var) re-slice Y[end-59:end,:] though @setup var:20 already reduced Y to 60 rows — violates docrule.md rule 3 ("no Y[1:10,:] in shown code"); estimate_var(Y,2) yields identical model. Item 4: favar.md:303-307 static ```julia``` runs real estimation irf(...method=:sign) — violates docrule.md:155/194 (static julia only for plot_result/API sigs); favar_panel in scope from @example :247, RNG seeded :15. NON-BLOCKING nuance (research already flags fallback): the block has NO report() call (last line is assignment r_sign_favar=irf(...)), so an @example conversion shows the raw ImpulseResponse `show` output rather than a report table — implementer should add report(r_sign_favar) for symmetry with the cholesky block, or take the admonition-static route; sign search (max_draws=1000) could fail to converge and break the build, which the mandated verify_examples run gates. Item 5: vecm.md:8/254 and lp.md:10/608-618 advertise ICA with zero nongaussian/id_nongaussian @refs (grep confirms); anchors exist (nongaussian.md:1, id_nongaussian.md:1) and pages registered (make.jl:79-80) so links resolve; factormodels.md correctly excluded (only "Non-Gaussian innovations" bootstrap-CI row at :366). Item 6: manual.md:700 DOI 10.3386/w2737 (genuine NBER WP) vs lp.md:955 10.2307/1827924; web-verified JSTOR i331802=AER 79(4) Sep 1989 and 10.2307/1827924 resolves to the published Blanchard-Quah 655-673 article, which matches the cited AER text — lp.md canonical, change manual. Item 7: estimate_structural_dfm(X,2) first calls estimate_gdfm(X,2) (structural.jl:115) identical to Recipe 4\'s shipped @example on same X; only obs guard is T_obs>p+q (60>3, structural.jl:169), unaffected by T<N — no error, no_change_needed. Fixes are exact and complete; both false-positive calls (factormodels-ICA, item 7) are sound.', 'corrections': '', 'collision_issues': [282, 292, 302], 'discriminating_power': 'n/a (docs issue — no test assertions involved)', 'final_effort': 'M'}