f271ba09b0
Review follow-up (Enough1122) on the salvaged #91272: the original list_context_file_sources() hand-mirrored the priority ladder inside build_context_files_prompt, so the two would drift the moment the builder gained a context type or changed precedence — misreporting what the prompt holds is worse than not showing it. Now prompt_builder exposes one candidate finder per context type (_CONTEXT_FILE_CANDIDATES → discover_context_files) and BOTH the loaders and the manifest walk it. The manifest lives in the new sibling agent/context_file_sources.py (not appended to the facade) and: - reports empty / unreadable files truthfully instead of "✓ 0 tokens", - mirrors the install-tree guard ("suppressed") so a Desktop session that fell back into the Hermes tree sees why nothing loaded, - lists every .cursor/rules/*.mdc as loaded, matching the builder which concatenates all of them, - measures truncation on the rendered "## label" section like the builder. The block now renders on every surface that shows the /context category table: CLI/TUI (hermes_cli/cli_info_mixin.py) and the messaging gateway (gateway/slash_commands_status.py). The Desktop popover consumes the raw session.context_breakdown payload (no text table) and is left as-is. Tests trimmed to the two invariants: manifest/prompt parity across every context type at once, and truncated/suppressed follow the builder.