.claude/skills/new-version/SKILL.md
Create a new pipeline version end-to-end. Use when starting a new feature or major change.
npx skillsauth add praveenmaiya/holley-rec new-versionInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Automates the full pipeline version lifecycle from spec to validation.
┌──────────┐ ┌───────────┐ ┌──────────┐ ┌──────────┐ ┌─────────┐
│ 1. Spec │──▶│ 2. Implement│──▶│ 3. Test │──▶│ 4. Validate│──▶│ 5. Compare│
│ Create │ │ SQL │ │ Dry-run │ │ QA │ │ Diff │
└──────────┘ └───────────┘ └──────────┘ └──────────┘ └─────────┘
version: Version number (e.g., "5.8")description: Brief description of changesFirst, ask user for:
Create spec file:
# Check existing spec as template
cat specs/v5_6_recommendations.md
Create new spec at specs/v{version}_recommendations.md with:
Copy and modify pipeline:
# Copy existing pipeline as base
cp sql/recommendations/v5_17_vehicle_fitment_recommendations.sql \
sql/recommendations/v{version}_vehicle_fitment_recommendations.sql
Update in new file:
pipeline_version declarationtarget_dataset to new version datasetValidate SQL syntax:
bq query --dry_run --use_legacy_sql=false < sql/recommendations/v{version}_*.sql
Must pass before proceeding.
Execute the pipeline:
bq query --use_legacy_sql=false < sql/recommendations/v{version}_*.sql
Verify output table created:
bq query --use_legacy_sql=false "
SELECT COUNT(*) as users, pipeline_version
FROM \`auxia-reporting.temp_holley_v{version}.final_vehicle_recommendations\`
GROUP BY pipeline_version
"
Run full validation suite:
bq query --use_legacy_sql=false < sql/validation/qa_checks.sql
All checks must pass:
bq query --use_legacy_sql=false "
WITH new AS (
SELECT COUNT(*) as users, ROUND(AVG(rec1_score), 2) as avg_score
FROM \`auxia-reporting.temp_holley_v{version}.final_vehicle_recommendations\`
),
prod AS (
SELECT COUNT(*) as users, ROUND(AVG(rec1_score), 2) as avg_score
FROM \`auxia-reporting.company_1950_jp.final_vehicle_recommendations\`
)
SELECT 'new' as version, * FROM new
UNION ALL
SELECT 'prod' as version, * FROM prod
"
Compare recommendation overlap:
bq query --use_legacy_sql=false "
WITH new AS (
SELECT email_lower, rec_part_1, rec_part_2
FROM \`auxia-reporting.temp_holley_v{version}.final_vehicle_recommendations\`
),
prod AS (
SELECT email_lower, rec_part_1, rec_part_2
FROM \`auxia-reporting.company_1950_jp.final_vehicle_recommendations\`
)
SELECT
COUNT(*) as users_in_both,
ROUND(100.0 * COUNTIF(n.rec_part_1 = p.rec_part_1) / COUNT(*), 2) as pct_same_rec1
FROM new n
JOIN prod p ON n.email_lower = p.email_lower
"
Update documentation:
docs/decisions.md with changesdocs/release_notes.md with versionSTATUS_LOG.mdPresent summary to user:
Ask: "Ready to proceed with /deploy?"
At each step, verify success before proceeding:
| Step | Success Criteria | |------|------------------| | Spec | User approved | | Implement | File created | | Dry-run | No syntax errors | | Run | Table created with data | | Validate | All QA checks pass | | Compare | <5% user count diff |
If issues found:
docs/known_issues.md/deploy - Deploy to production/validate - Run QA checks/compare-versions - Detailed comparisontesting
Generate a team-facing weekly status update from STATUS_LOG.md and git history.
testing
Run QA validation checks on the recommendation pipeline output. Use after pipeline runs to verify data quality.
research
Compare Personalized vs Static treatment performance with unbiased methodology. Use for A/B analysis and treatment comparison.
testing
Show current pipeline and deployment status. Use for quick health check.