PolicyEngine code review patterns - validation checklist, common issues, review standards
From essentialnpx claudepluginhub policyengine/policyengine-claude --plugin data-scienceThis skill uses the workspace's default tool permissions.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Configures VPN and dedicated connections like Direct Connect, ExpressRoute, Interconnect for secure on-premises to AWS, Azure, GCP, OCI hybrid networking.
Comprehensive patterns for reviewing PolicyEngine implementations.
When reviewing implementations that reference other states:
š“ CRITICAL: Check WHY Variables Exist
Before approving any state-specific variable, verify:
parameters(period).gov.states.XXExample Analysis:
# IL TANF has this variable:
class il_tanf_assistance_unit_size(Variable):
adds = ["il_tanf_payment_eligible_child", "il_tanf_payment_eligible_parent"]
# ā
VALID: IL-specific eligibility rules
# But IN TANF shouldn't copy it blindly:
class in_tanf_assistance_unit_size(Variable):
def formula(spm_unit, period):
return spm_unit("spm_unit_size", period)
# ā INVALID: No IN-specific logic, just wrapper
Red Flags - Variables that shouldn't exist:
return entity("federal_variable", period)Action: Request deletion of unnecessary wrapper variables
These issues will cause crashes or incorrect results:
ā FAILS:
if household("income") > 1000: # Will crash with arrays
return 500
ā
PASSES:
return where(household("income") > 1000, 500, 100)
ā FAILS:
benefit = min_(income * 0.33, 500) # Hard-coded 0.33 and 500
ā
PASSES:
benefit = min_(income * p.rate, p.maximum)
ā FAILS:
reference:
- title: State website
href: https://state.gov
ā
PASSES:
reference:
- title: Idaho Admin Code 16.05.03.205(3)
href: https://adminrules.idaho.gov/rules/current/16/160503.pdf#page=14
These affect accuracy or maintainability:
ā FAILS:
income: 50000 # No separator
ā
PASSES:
income: 50_000 # Proper formatting
ā FAILS:
description: The amount of SNAP benefits # Passive voice
ā
PASSES:
description: SNAP benefits # Active voice
These improve code quality:
defined_foradds for simple sums| Issue | Example | Fix |
|---|---|---|
| No primary source | "See SNAP website" | Add USC/CFR citation |
| Wrong value | $198 vs $200 in source | Update parameter |
| Generic link | dol.gov | Link to specific regulation |
| Missing subsection | "7 CFR 273" | "7 CFR 273.9(d)(3)" |
| Issue | Impact | Fix |
|---|---|---|
| if-elif-else with data | Crashes microsim | Use where/select |
| Hard-coded values | Inflexible | Move to parameters |
| Missing defined_for | Inefficient | Add eligibility condition |
| Manual summing | Wrong pattern | Use adds attribute |
| Issue | Example | Fix |
|---|---|---|
| No separators | 100000 | 100_000 |
| No documentation | output: 500 | Add calculation comment |
| Wrong period | 2024-04 | Use 2024-01 or 2024 |
| Made-up variables | heating_expense | Use existing variables |
For each parameter file:
ā Value matches source document
ā Source is primary (statute > regulation > website)
ā URL links to exact section with page anchor
ā Effective dates correct
Primary sources (preferred):
Secondary sources (acceptable):
Not acceptable alone:
See policyengine-vectorization skill for comprehensive vectorization patterns and scan targets.
Search for numeric literals ā flag anything like:
"0.5"
"100"
"0.33"
"65"
## PolicyEngine Review: CHANGES REQUIRED ā
### Critical Issues (Must Fix)
1. **Non-vectorized code** - lines 45-50
```python
# Replace this:
if income > threshold:
benefit = high_amount
# With this:
benefit = where(income > threshold, high_amount, low_amount)
Please address these issues and re-request review.
---
## Test Validation
### Check Test Structure
```yaml
# Verify proper format:
- name: Case 1, description. # Numbered case with period
period: 2024-01 # Valid period (2024-01 or 2024)
input:
people:
person1: # Generic names
employment_income: 50_000 # Underscores
output:
# Calculation documented
# Income: $50,000/year = $4,167/month
program_benefit: 250
# Unit tests
pytest policyengine_us/tests/policy/baseline/gov/
# Integration tests
policyengine-core test <path> -c policyengine_us
# Microsimulation
pytest policyengine_us/tests/microsimulation/
ā ļø CRITICAL: Variable/function renaming has high potential to break things
When reviewing PRs that rename variables or functions across the codebase:
Test Coverage Requirements
Common Breakage Points
entity(variable_name, period)Validation Strategy
# Basic validation
pytest # All unit tests
# If notebooks exist, run them
jupyter nbconvert --execute notebook.ipynb
# Check for string references to renamed variables
grep -r "old_variable_name" --include="*.py" --include="*.yaml"
Approval Requirements
Parameters:
Variables:
Tests:
Overall:
_in_effect boolean), do not instruct them to remove it in favor of a "simpler" approach that introduces an anti-pattern. Trust domain-specific correctness over superficial simplicity.