Checked for duplicates
Yes - I've already checked
π§βπ¬ User Persona(s)
Data User, Planetary Scientist, Educational Users, Automated Systems
πͺ Motivation
...so that I can find data using common names, NAIF IDs, or alternative designations without needing to know exact PDS terminology.
π Additional Details
Current Behavior:
- β
Fuzzy matching via
Context.TARGETS.search() handles typos
- β No systematic synonyms (e.g., "Mars" β "Red Planet", "499")
- β No asteroid number support (e.g., "101955" for Bennu)
- β TODO comment indicates NAIF host ID integration not implemented (contexts.py:126)
Proposed Solution:
Hybrid synonym system combining PDS API metadata with user-configurable aliases:
# Should all find Mars data
products.has_target("Mars")
products.has_target("Red Planet")
products.has_target("499") # NAIF ID
# Should all find Bennu data
products.has_target("Bennu")
products.has_target("101955") # Asteroid number
products.has_target("1999 RQ36") # Provisional designation
# Refresh synonym cache
context = pep.Context()
context.refresh_synonyms(force=True)
Implementation Approach:
- Primary source: Load from PDS API (
pds:Alias.pds:alternate_title, NAIF IDs)
- Secondary source: User-configurable file (
~/.pds/peppi/target_synonyms.yaml)
- Caching: TTL-based cache with
refresh_synonyms(force=True) method
- Priority: user config > packaged config > API metadata
- Introspection: Add
get_synonyms() and resolve() methods
Configuration Example:
# ~/.pds/peppi/target_synonyms.yaml
targets:
mars:
synonyms:
- "red planet"
- "499"
bennu:
synonyms:
- "101955"
- "1999 rq36"
cache:
ttl_seconds: 86400
Related:
For Internal Dev Team To Complete
Acceptance Criteria
Given a user wants to search for Mars using its common name
When I perform products.has_target("Red Planet")
Then I expect products matching the Mars LID
βοΈ Engineering Details
To be filled by Engineering Node Team
π I&T
To be filled by Engineering Node Team
Checked for duplicates
Yes - I've already checked
π§βπ¬ User Persona(s)
Data User, Planetary Scientist, Educational Users, Automated Systems
πͺ Motivation
...so that I can find data using common names, NAIF IDs, or alternative designations without needing to know exact PDS terminology.
π Additional Details
Current Behavior:
Context.TARGETS.search()handles typosProposed Solution:
Hybrid synonym system combining PDS API metadata with user-configurable aliases:
Implementation Approach:
pds:Alias.pds:alternate_title, NAIF IDs)~/.pds/peppi/target_synonyms.yaml)refresh_synonyms(force=True)methodget_synonyms()andresolve()methodsConfiguration Example:
Related:
For Internal Dev Team To Complete
Acceptance Criteria
Given a user wants to search for Mars using its common name
When I perform
products.has_target("Red Planet")Then I expect products matching the Mars LID
βοΈ Engineering Details
To be filled by Engineering Node Team
π I&T
To be filled by Engineering Node Team