Schema errors were reported but the cross-file checks still walked the
data as if it were well-formed, so a null list entry or a null item in
socialmedialinks crashed with an AttributeError and hid every other
error. Treat schema validation as a gate: report and skip the file.
Also skip the 'not listed in peoplelist.json' check when peoplelist.json
itself fails the schema, so the root cause is not buried.
The is_file() check passed on macOS for /images/bill.jpg because the
filesystem is case-insensitive, while GitHub Pages and the Actions runner
are not. Match against the actual images/ listing instead.
Add schema/person.schema.json and scripts/validate_people.py, run via a
pre-commit hook and a GitHub Actions job on pull requests. Checks:
- people/*.json match the schema (keys, types, item shapes)
- every peoplelist.json entry has a file and every file is listed once
- filenames are lowercase alphanumeric (two legacy names grandfathered)
- local image paths exist under images/
- link fields are http(s) with no surrounding whitespace
- text-only fields contain no HTML; maintext stays raw HTML by design
Warns (non-fatal) on gallery items with no title, which the page uses as
alt text. Adds a pip dependabot entry for scripts/requirements.txt.
Create comprehensive automation system for processing GitHub Issues
to generate memorial JSON files.
Phase 1 deliverables:
- Core Python script with issue fetching and parsing
- Configuration system with YAML support
- GitHub Issue template parser (handles * and - bullets)
- Person data extraction and normalization
- Filename generation logic
- Memorial JSON generator
- Dry-run mode with explicit CLI flags
- Comprehensive project documentation in devdocs/
Documentation includes:
- Architecture and component design
- Implementation phases and roadmap
- Data mapping from issues to JSON
- Testing checklist
- High-priority person list
- Progress tracker
Testing:
- Verified on issue 197 (Kevin Mitnick)
- Verified on issue 251 (Kris Nova)
- All tests run in safe dry-run mode