fix: skills hub dedup prefers higher trust levels + 43 tests

- unified_search and GitHubSource.search dedup: replace naive
  `trust_level == "trusted"` check with ranked comparison so
  "builtin" results are never overwritten by "trusted" or "community"
- Add 43 unit tests covering _parse_frontmatter_quick, trust_level_for,
  HubLockFile CRUD, TapsManager ops, LobeHub _convert_to_skill_md,
  unified_search dedup (with regression test), and append_audit_log
This commit is contained in:
0xbyt4
2026-02-28 21:25:55 +03:00
parent 6366177118
commit 08250a53a1
2 changed files with 450 additions and 4 deletions

View File

@@ -282,10 +282,13 @@ class GitHubSource(SkillSource):
logger.debug(f"Failed to search {tap['repo']}: {e}")
continue
# Deduplicate by name (prefer trusted sources)
# Deduplicate by name, preferring higher trust levels
_trust_rank = {"builtin": 2, "trusted": 1, "community": 0}
seen = {}
for r in results:
if r.name not in seen or r.trust_level == "trusted":
if r.name not in seen:
seen[r.name] = r
elif _trust_rank.get(r.trust_level, 0) > _trust_rank.get(seen[r.name].trust_level, 0):
seen[r.name] = r
results = list(seen.values())
@@ -1167,10 +1170,13 @@ def unified_search(query: str, sources: List[SkillSource],
except Exception as e:
logger.debug(f"Search failed for {src.source_id()}: {e}")
# Deduplicate by name, preferring trusted sources
# Deduplicate by name, preferring higher trust levels
_TRUST_RANK = {"builtin": 2, "trusted": 1, "community": 0}
seen: Dict[str, SkillMeta] = {}
for r in all_results:
if r.name not in seen or r.trust_level == "trusted":
if r.name not in seen:
seen[r.name] = r
elif _TRUST_RANK.get(r.trust_level, 0) > _TRUST_RANK.get(seen[r.name].trust_level, 0):
seen[r.name] = r
deduped = list(seen.values())