///|
fn web_first_required_output_section(display : String) -> Array[String] {
[
"## Required Output",
"",
web_first_research_question_output(),
web_first_search_log_output(),
web_first_source_screen_output(),
web_first_evidence_matrix_output(),
web_first_local_sources_output(),
web_first_synthesis_brief_output(),
web_first_deep_report_output(),
web_first_marketing_brief_output(),
web_first_wiki_materialization_output(display),
"",
]
}
///|
fn web_first_research_question_output() -> String {
"- `\{@research_policy.question_path()}` with scope and criteria."
}
///|
fn web_first_search_log_output() -> String {
"- `\{@research_policy.search_log_path()}` with queries, selected URLs, rejected URLs, and reasons."
}
///|
fn web_first_source_screen_output() -> String {
"- `\{@research_policy.source_screen_path()}` with authority, relevance, recency, and risk notes."
}
///|
fn web_first_evidence_matrix_output() -> String {
web_first_text([
"- `\{@research_policy.evidence_matrix_path()}` with claim IDs, source IDs,",
"evidence, confidence, and gaps.",
])
}
///|
fn web_first_local_sources_output() -> String {
web_first_text([
"- `\{@research_policy.local_sources_path()}` with exact file paths, symbols or",
"sections, and evidence bullets.",
])
}
///|
fn web_first_synthesis_brief_output() -> String {
web_first_text([
"- `\{@research_policy.synthesis_brief_path()}` with findings, contradictions,",
"gaps, and next research.",
])
}
///|
fn web_first_deep_report_output() -> String {
web_first_text([
"- `\{@research_policy.deep_report_path()}` with thesis-first research analysis,",
"tables, Mermaid relationship diagram, maturity assessment, and evidence",
"limits.",
])
}
///|
fn web_first_marketing_brief_output() -> String {
web_first_text([
"- `\{@research_policy.marketing_brief_path()}` with buyer-facing positioning,",
"product strengths, proof points, objections, and next action.",
])
}
///|
fn web_first_wiki_materialization_output(display : String) -> String {
web_first_text([
"- Wiki-ready materialization notes that are specific to \{display};",
"create durable wiki pages only when the current runtime owns MoonBook",
"wiki materialization.",
])
}
///|
fn web_first_deep_dossier_section() -> Array[String] {
[
"## Deep Dossier Target",
"",
web_first_deep_dossier_intent(),
"",
web_first_preferred_source_base_rule(),
web_first_minimum_source_base_rule(),
"- target report size with enough evidence: 12k-15k English words",
web_first_honest_depth_limit_rule(),
"",
]
}
///|
fn web_first_deep_dossier_intent() -> String {
web_first_text([
"For complex external, comparative, route-map, or technology research,", "source collection should be strong enough to support a long-form dossier,",
"not just a short article.",
])
}
///|
fn web_first_preferred_source_base_rule() -> String {
web_first_text([
"- preferred source base: \{@research_policy.preferred_included_source_range()} included, inspected sources",
"across \{@research_policy.extended_source_classes()} classes",
])
}
///|
fn web_first_minimum_source_base_rule() -> String {
web_first_text([
"- minimum source base for a cautious dossier: \{@research_policy.min_included_sources()} included, inspected",
"sources plus explicit blockers for missing classes",
])
}
///|
fn web_first_honest_depth_limit_rule() -> String {
web_first_text([
"- if this target cannot be reached honestly, write the source-depth", "blocker, set `ready_for_12k_dossier: false`, and write the next search",
"plan; do not pad with generic definitions",
])
}