# PR #3205 — delete dead entity-aware strategy + orphaned question generator

Components deleted in PR #3205 (see that PR for the full pre-deletion code —
this file only summarises what was novel).

Both components were unreachable from `search_system_factory.py` at
deletion; the question generator had no callers outside the strategy
class, so removing the strategy orphaned it.

---

## Component: `EntityAwareSourceStrategy`

- File deleted: `src/local_deep_research/advanced_search_system/strategies/entity_aware_source_strategy.py` (139 LOC at deletion).
- Reachability: not in `search_system_factory.py`; not exported from `strategies/__init__.py`; only referenced by its own pure-logic test and `STRATEGY_IMPORTS`.
- Closest reachable successor: `BrowseCompEntityStrategy` (`src/local_deep_research/advanced_search_system/strategies/browsecomp_entity_strategy.py`, factory key `"browsecomp-entity"`) for constraint-driven entity research. For plain-string entity-ID queries, the fallback is `SourceBasedSearchStrategy` with `StandardQuestionGenerator` or `BrowseCompQuestionGenerator`.

### Useful ideas from the pre-deletion version

- **17-keyword entity-query classifier** — the strategy and its question
  generator both classified a query as entity-seeking if any of `who /
  what / which / identify / name / character / person / place /
  organization / company / author / scientist / inventor / city /
  country / book / movie` appeared in lowercase. High false-positive
  rate in practice (`who` / `what` / `which` match most research
  queries), but the list is a starting point if someone builds a proper
  classifier later.
- **Naive capitalised-word NER** — `_format_search_results_as_context`
  treated every capitalised token of length > 2 as a candidate entity
  with a ±2-word context window. The file's own TODO flagged this as
  a placeholder. Documented here only so the next person who reaches
  for this shortcut knows it was tried and found inadequate
  (matches section headings, sentence-initial words, title-cased junk).

### Why deletion was safe

Zero user-facing path. The strategy added only a question-generator
swap and the naive NER over its parent `SourceBasedSearchStrategy` —
no algorithmic novelty. The real prompt engineering lived in the
question generator (next section).

### Interface gap worth noting

`BrowseCompEntityStrategy` requires pre-built `Constraint` objects.
`EntityAwareSourceStrategy` was the only (unreachable) path that
accepted plain-string entity-ID queries. That gap is already unserved
in production; if it matters, it's a future feature request, not a
revert.

### Recovery path

Do not restore this 139-LOC wrapper. If plain-string entity-ID queries
matter, add a helper that extracts `Constraint` objects from a free-form
query (reuse `ConstraintAnalyzer`) and routes to `BrowseCompEntityStrategy`.

---

## Component: `EntityAwareQuestionGenerator`

- File deleted: `src/local_deep_research/advanced_search_system/questions/entity_aware_question.py` (178 LOC at deletion).
- Reachability: only consumer was `EntityAwareSourceStrategy`; orphaned once that was removed. Also dropped from `questions/__init__.py`'s `__all__`.
- Closest reachable successor: `BrowseCompQuestionGenerator` (`src/local_deep_research/advanced_search_system/questions/browsecomp_question.py`). It covers entity-combination queries algorithmically (extract entities, progressively combine 2–3 of them, quote when beneficial) rather than through the explicit prompt templates below.

### Useful ideas from the pre-deletion version

- **Prompt templates teaching multi-constraint quoted searches** —
  `generate_questions` and `generate_sub_questions` are the only
  prompts in the codebase that explicitly tell the model to combine
  multiple identifying constraints into a single quoted search, with
  a concrete worked example (a fictional 1960s-1980s TV character who
  breaks the fourth wall). If you need to prompt for entity-ID
  queries later, start from these rather than re-deriving — they're a
  reasonable first cut, just never validated.
- **Liability to avoid on revival** — `generate_questions` returned
  an empty list whenever the 17-keyword gate didn't match, which
  halted follow-up research entirely for non-entity queries. Don't
  reintroduce that fallback.

### Why deletion was safe

Zero remaining consumers after `EntityAwareSourceStrategy` was removed.

### Recovery path

If the prompt engineering proves useful, subclass
`BrowseCompQuestionGenerator` (or add an optional mode to it) rather
than restoring a parallel generator class. Drop the empty-list
fallback if you do.
