sem
Use the pi-sem tools as a semantic lens, not as a universal replacement for raw git diff.
Default decision tree
Choose the smallest useful tool first:
Focused understanding of one entity →
sem_context- Best for a single function, method, class, block, or config section
- Prefer this before reading a whole large file
Blast radius / affected tests / hidden dependents →
sem_impact- Use when reasoning about what could break
- Prefer
scope=testsfor test selection - Prefer
scope=allwhen validating broader impact
Structural inventory of a file →
sem_entities- Use before drilling into a suspicious file
- Good for large files and mixed code/config files
What changed across a commit/range/working tree →
sem_diff- Use for semantic summaries, entity counts, and review overviews
- Do not default to it when you only need exact patch details or a single entity
History / ownership of an entity →
sem_log,sem_blame- Use for regressions, archaeology, and ownership questions
Review workflow
For commit / branch / PR review:
- Run
sem_diffonce for a semantic overview - Pick the riskiest changed entities
- Run
sem_impacton those entities - Run
sem_contexton the suspicious ones you need to understand deeply - Confirm final findings with raw
git diff,read, or direct file inspection before citing line numbers
For snapshot / folder review:
- Start with
sem_entities - Use
sem_contexton the most relevant entities - Use
sem_impactonly after you identify something suspicious
Important caveats
sem diff --format jsonis not always smaller than rawgit diffsemmay under-cover tests, assets, generated files, or non-semantic glue code- Do not cite
semoutput alone as final evidence for line-level review comments - If semantic coverage looks incomplete, fall back to raw
git diff,read,grep, and file inspection
Good prompts / tool choices
- “What changed in this commit?” →
sem_diff - “What tests are affected by this function?” →
sem_impactwithscope=tests - “Give me focused context for this class without reading the whole file.” →
sem_context - “What is in this Terraform file?” →
sem_entities - “How did this function evolve?” →
sem_log
Anti-patterns
Avoid these habits:
- Running
sem_diffrepeatedly whensem_contextwould answer the question faster - Using only raw
git difffor entity counts or blast radius questions - Treating
sem_impactas infallible; verify surprising results with file reads and grep - Writing review findings from semantic summaries without checking the actual changed code