Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
## What I built
- Data-quality audit: `validation_queries.sql`
- Star-schema views: `schema_setup.sql` (`vw_dim_zones`, `vw_fact_trips`)
- Data dictionary: `data_dictionary.md`
- Verification queries: `verification_results.sql`
- Per-borough count screenshot: `assets/borough_count.png`
- `## Findings` section added to this README with my actual audit numbers
- AI usage: `AI_ASSIST.md`

## How to review
- SQL: read `schema_setup.sql` (grain + negative-fare filter + join keys) and `validation_queries.sql`.
- Results: see the `## Findings` section in the README and `assets/borough_count.png`.
- AI usage: `AI_ASSIST.md`.

## How to run
Run every query against **your own assigned schema** on the shared Azure Postgres (not `public`):

```bash
psql "<your Postgres connection string>" -f validation_queries.sql
psql "<your Postgres connection string>" -f schema_setup.sql
psql "<your Postgres connection string>" -f verification_results.sql
```

Prerequisite: your assigned schema on the shared instance; source tables `nyc_taxi.raw_trips` and `nyc_taxi.raw_zones` already loaded.

## What reviewers should see (expected results)
Fill in your actual audit numbers (from your `## Findings`):
- Duplicate trips: <e.g. ~189>
- NULL pickup/dropoff location IDs: <e.g. 5 / 5>
- Negative `fare_amount` rows: <e.g. 182>
- Orphaned `pickup_location_id` (not in raw_zones): <e.g. N>
- Busiest borough by trip count: <e.g. Manhattan>

## Known limitations / out of scope
- <e.g. one verification query still returns more rows than expected>
- Write "none" if everything in the assignment is done and working.

## Self-check
- [ ] `bash .hyf/test.sh` passes (completeness)
- [ ] `vw_fact_trips` excludes `fare_amount < 0` and joins cleanly to `vw_dim_zones`
- [ ] `## Findings` in the README contains real counts, not "I checked"
- [ ] `assets/borough_count.png` is committed
52 changes: 52 additions & 0 deletions .github/workflows/pr-body-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: PR body check

# Fails the check when a pull request description is missing the sections from
# .github/PULL_REQUEST_TEMPLATE.md. GitHub only auto-fills that template in the
# web "compose" form and in `gh pr create` with no --body; a PR opened through
# the REST API or `gh pr create --body "..."` (the path most AI tools take)
# silently skips it. This check is the only thing that actually enforces it.
#
# Recovery is automatic: editing the PR description fires the `edited` event and
# re-runs this check with the new body. No new commit or manual re-run needed.

on:
pull_request:
types: [opened, edited, reopened, synchronize]
branches: [main]

permissions:
contents: read

jobs:
check:
runs-on: ubuntu-latest
steps:
- name: Check required sections are present
env:
PR_BODY: ${{ github.event.pull_request.body }}
run: |
set -euo pipefail
required=(
"## What I built"
"## How to review"
"## How to run"
"## What reviewers should see"
"## Self-check"
)
missing=()
for section in "${required[@]}"; do
if ! printf '%s' "$PR_BODY" | grep -qiF "$section"; then
missing+=("$section")
fi
done
if [ ${#missing[@]} -ne 0 ]; then
echo "::error::Your PR description is missing required sections. Start from the template (.github/PULL_REQUEST_TEMPLATE.md) and keep these headings:"
for m in "${missing[@]}"; do echo " - $m"; done
echo ""
echo "If you (or an AI tool) opened this PR without the template, click 'Edit' on the"
echo "PR description, paste the template, and fill it in. Editing the description"
echo "re-runs this check automatically. A complete PR is easy to review and"
echo "reproducible: that is part of the assignment."
exit 1
fi
echo "All required PR sections present."