=== RESEARCH ===
{'issue': 296, 'kind': 'docs', 'defect_status': 'confirmed', 'category': 'new-page', 'target_files': ['docs/src/gmm.md', 'docs/make.jl', 'docs/src/index.md'], 'summary': 'Create docs/src/gmm.md as a Method page covering the GMM/SMM module and register it in make.jl nav plus the index.md @contents list.', 'current_state': 'CONFIRMED still missing. `ls docs/src/` shows no gmm.md (pages run api.md → arima.md → ... vecm.md → volatility.md; no gmm.md). `grep -ni gmm|smm docs/make.jl` returns nothing — there is no "GMM & SMM" nav section (T196/#295 has NOT landed; make.jl Panel Models block ends docs/make.jl:52, DSGE Models begins :53, no GMM section between). The GMM/SMM surface currently appears ONLY as API-reference rows: api.md:85 (estimate_gmm), :228-229 (j_test/gmm_summary); api_types.md:157-163 (GMM Types @docs) and a hand-drawn hierarchy at :394-395; api_functions.md:429-433 (GMM Utilities), :465-477 (@autodocs Pages=gmm/gmm.jl and gmm/smm.jl). index.md advertises the module at index.md:28,44,150 but there is no narrative page. The gmm.jl/smm.jl/transforms.jl sources exist under src/gmm/. So the whole-module narrative gap the audit flags (report §6.3 item 1, docs/plans/2026-07-03-documentation-audit-report.md:500-503; nav target report:469) is real and unfixed at the release/v0.6.6 tip.', 'proposed_change': 'Create docs/src/gmm.md as a Method page per docrule §Page Anatomy (docs/docrule.md:7): H1 + intro → Quick Start (3-6 recipes) → H2 sections → Complete Example → Common Pitfalls → References. Cover EXACTLY the exported surface, verified against src/MacroEconometricModels.jl: types AbstractGMMModel, GMMModel, GMMWeighting (export line 550) and SMMModel (export line 769); functions estimate_gmm, gmm_objective, gmm_summary (line 763), linear_gmm_solve, gmm_sandwich_vcov, andrews_lu_mmsc (line 767), estimate_smm, autocovariance_moments, autocovariance_moment_contributions (line 769). estimate_lp_gmm / lp_gmm_moments (line 766) belong to lp.md — cross-reference only, do NOT document here.\n\nCopy every signature/default verbatim from source (docrule §Tables). Authoritative signatures/defaults at current tree:\n- estimate_gmm (src/gmm/gmm.jl:358-361): kwargs weighting::Symbol=:two_step, max_iter::Int=100, tol=1e-8, hac::Bool=true, bandwidth::Int=0, bounds::Union{Nothing,ParameterTransform}=nothing. Requires n_moments>=n_params (assert :368).\n- GMMWeighting keyword ctor (src/gmm/gmm.jl:56-57): method::Symbol=:two_step, max_iter::Int=100, tol=1e-8; valid methods are :identity, :optimal, :two_step, :iterated (validated :48). Document these four weighting modes (one-step identity / optimal / two-step / iterated).\n- estimate_smm (src/gmm/smm.jl:357-365): sim_ratio::Int=5, burn::Int=100, weighting::Symbol=:two_step, contributions_fn=nothing, bounds=nothing, hac::Bool=true, bandwidth::Int=0, max_iter::Int=1000, tol=1e-8, rng=Random.default_rng(). Requires n_moments>=n_params (assert :385).\n- autocovariance_moments (src/gmm/smm.jl:176): kwarg lags::Int=1. autocovariance_moment_contributions same signature (:225).\n- linear_gmm_solve (src/gmm/gmm.jl:668), gmm_sandwich_vcov (:693), andrews_lu_mmsc(j_stat, n_instruments, n_params, ...) (:725), gmm_objective (:223), gmm_summary (:544), j_test(::GMMModel) (:521), j_test(::SMMModel) (src/gmm/smm.jl:150).\n\nThree @example families (NOT static ```julia — must render + be executed by verify_examples): (a) linear IV via GMM using linear_gmm_solve / estimate_gmm; (b) Euler-equation GMM via estimate_gmm; (c) SMM on an AR(1) using autocovariance_moments + estimate_smm. Use docrule setup reductions (small n, tight max_iter/sim_ratio) so CI stays fast — SMM especially: keep sim_ratio and max_iter small, since estimate_smm defaults max_iter=1000. Add keyword + return tables for estimate_gmm and estimate_smm; math + "where"-bullet lists for the moment conditions and the objective Q(θ)=g\'Wg. Show report(m) output for both GMMModel and SMMModel in @example blocks — report() dispatches on AbstractGMMModel via `report(x::AbstractGMMModel)=show(stdout,x)` (src/summary.jl:407), which invokes GMMModel Base.show (src/gmm/gmm.jl:113) / SMMModel Base.show (src/gmm/smm.jl:99). Cross-link lp.md (LP-GMM), dsge_estimation.md (estimate_dsge(...; method=:smm)), and the API reference.\n\nRegistration (same commit, docrule new-page checklist): (1) docs/make.jl — since the "GMM & SMM" nav section (T196/#295) has not landed, insert a new entry `"GMM & SMM" => "gmm.md"` (or `=> ["Overview" => "gmm.md"]`) between the "Panel Models" block (ends docs/make.jl:52) and "DSGE Models" (docs/make.jl:53), matching the target IA in report:469. (2) docs/src/index.md — append "gmm.md" to the @contents Pages list at index.md:307 (insert near pvar.md, before dsge.md, to mirror nav order). Do NOT rename existing files or touch api_*.md content (that is #301/#302).', 'verify': 'julia --project=docs docs/verify_examples.jl docs/src/gmm.md → OK (proves all @example blocks execute/render). Optionally full makedocs to confirm nav + @contents resolve with no missing-reference warnings for gmm.md.', 'dependencies': [], 'collisions': ['docs/make.jl — #295 [T196] (nav restructure creates the GMM & SMM section; if #295 lands first, add gmm.md inside its section instead of creating a new entry — same file/region)', 'docs/src/index.md — #295 [T196] and #301 [T202] may also edit the @contents Pages list at index.md:307', 'api_functions.md/api_types.md — #301 [T202] (API split) owns the GMM @docs/@autodocs and type-hierarchy blocks this page cross-references; cross-ref target may move', 'scope overlap — #302 [T203] API-only backfill: this page closes the GMM/SMM portion of that backfill, so coordinate to avoid double-documenting the same 13 symbols'], 'effort': 'L', 'risk': 'med'}

=== VERIFY ===
{'issue': 296, 'verdict': 'CONFIRMED', 'assessment': 'Independently verified every citation. gmm.md is genuinely absent: `ls docs/src/` shows no gmm.md and `git log --all -- docs/src/gmm.md` is empty (never existed). make.jl has zero gmm/smm matches; Panel Models block ends at make.jl:52 and DSGE Models begins at make.jl:53, so the insertion point is exact. index.md @contents Pages list is at line 307 (contains pvar.md/did.md/event_study.md then dsge.md). All source signatures/defaults are verbatim-correct at the cited lines: estimate_gmm gmm.jl:358-361 (assert :368), GMMWeighting ctor :56-57 (methods validated :48), estimate_smm smm.jl:357-365 (assert :385), autocovariance_moments :176 / _contributions :225, linear_gmm_solve :668, gmm_sandwich_vcov :693, andrews_lu_mmsc :725 (sig j_stat,n_instruments,n_params,n_obs;hq_criterion=2.1), gmm_objective :223, gmm_summary :544, j_test(GMMModel) :521, j_test(SMMModel) smm.jl:150. Exports confirmed at lines 550/763/766/767/769, with estimate_lp_gmm/lp_gmm_moments (766) correctly deferred to lp.md. report dispatch summary.jl:407 and Base.show at gmm.jl:113 / smm.jl:99 confirmed. Proposed page structure matches docrule.md §Page Anatomy and §Code Block Types (@example + setup reductions + tables + where-lists). Audit report §6.3 item 1 and the target-IA nav block back the defect and the three example families. checkdocs=:exports with warnonly=[:missing_docs,:cross_references] means adding the page is safe. Only cosmetic slack: the "insert near pvar.md" @contents wording; the operative "before dsge.md" constraint is correct. Spec is correct and complete.', 'corrections': '', 'collision_issues': [295, 301, 302], 'discriminating_power': 'n/a (docs new-page task, no test assertions)', 'final_effort': 'L'}