AltimateAI / AltimateAI/altimate-code
feat(review): expand grain-key not_null detector to fire on any contracted-model column change
- Linguagem predominante
- TypeScript
- Estrelas
- 811
- Forks
- 134
- Merge médio
- 3d 2h
- PRs com merge (30d)
- 50
Descrição
Deferred from the v0.9.3 pre-release review.
### Current behavior
`extractGrainKeyGaps` in `packages/opencode/src/altimate/review/dbt-patterns.ts` fires only when the grain declaration itself changes, filtered by `grainDeclChangedEntities` — which iterates `newMap` and compares against `oldMap` for additions.
### Gap
A PR that adds a new column to an existing contracted model without touching `unique_combination_of_columns` will not surface uncovered grain columns, even when new columns increase the exposure surface. The scoping is conservative and correct for the initial ship, but leaves recall on the table.
### Proposal
Extend the change-scoping filter to also fire when any column added/modified in a contracted model's schema.yml overlaps with existing grain-key coverage. Keep the current "grain declaration changed" path as one of two entry conditions.
### Why deferred
Scope expansion touches filter semantics and could shift the false-positive rate; the initial detector is intentionally conservative and documented, so a follow-up release is the right cadence for widening.
Guia de contribuição
Direção de pesquisa
Start in packages/opencode/src/altimate/review/dbt-patterns.ts at extractGrainKeyGaps and the grainDeclChangedEntities filter. Trace how newMap and oldMap identify additions, then inspect how contracted-model schema.yml column changes are represented. Done means the detector preserves the existing grain-declaration path and also evaluates added or modified columns that overlap existing grain-key coverage without unnecessarily broadening unrelated changes.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- typescript
- Domínio
- data-engineering
- Tipo de issue
- Funcionalidade
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Pouca atividade
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 48/100