///|
fn research_blocking_rules() -> Array[String] {
  [
    research_tool_blocker_rule(),
    research_native_result_page_rule(),
    research_native_disabled_rule(),
    research_missing_web_evidence_rule(),
  ]
}

///|
fn research_tool_blocker_rule() -> String {
  [
    "If a tool is unavailable, record the exact blocker in `\{@research_policy.tool_blockers_path()}`.",
    "Continue with the remaining permitted path and still create the durable bootstrap notes that explain what happened.",
  ].join(" ")
}

///|
fn research_native_result_page_rule() -> String {
  [
    "If native `web_search` returns only a search-engine result page or query URL, fetch that page.",
    "Extract candidate URLs if possible, and retry with broader or narrower query variants before declaring the web pass blocked.",
  ].join(" ")
}

///|
fn research_native_disabled_rule() -> String {
  [
    "If native `web_search` is disabled, stalls, or only returns weak search pages, use bounded command-line web discovery.",
    "Use commands such as `\{@research_policy.command_fetch_pattern()}` against LLM-chosen search-result pages and candidate URLs.",
    "Retry `{bad request}` once with a simpler query or URL before recording a blocker.",
  ].join(" ")
}

///|
fn research_missing_web_evidence_rule() -> String {
  let no_fake_evidence = "If web search or fetch fails, do not pretend web evidence exists."
  let blocked_status = "Mark the source status as `blocked`, use local sources only as provisional evidence, and make the wiki page say what is missing."
  [no_fake_evidence, blocked_status].join(" ")
}