## Summary
- Add required Terms & Conditions checkbox to signup form with legal audit trail
- Create `terms-agreement` feature capsule for storing consent records
- Capture IP address, user agent, terms version, and content hash at signup
- Create terms agreement atomically with user profile in database transaction
Fixes #4
## Changes
### Backend
- New `terms_agreements` table with audit fields
- `TermsAgreementRepository` with transaction support
- Modified `AuthService.signup()` for atomic creation
- Added `termsAccepted` validation to signup schema
### Frontend
- Checkbox with PDF link in SignupForm
- Zod validation with `z.literal(true)`
- Error message displays when unchecked
## Test plan
- [ ] Signup with checkbox unchecked shows validation error
- [ ] Signup with checkbox checked creates user and terms agreement
- [ ] "Terms & Conditions" link opens PDF in new tab
- [ ] Works on mobile viewport (320px)
- [ ] Works on desktop viewport (1920px)
- [ ] Database has terms_agreements record after signup
🤖 Generated with [Claude Code](https://claude.com/claude-code)
- Add terms_agreements table for legal audit trail
- Create terms-agreement feature capsule with repository
- Modify signup to create terms agreement atomically
- Add checkbox with PDF link to SignupForm
- Capture IP, User-Agent, terms version, content hash
- Update CLAUDE.md documentation index
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <[email protected]>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
terms-agreementfeature capsule for storing consent recordsFixes #4
Changes
Backend
terms_agreementstable with audit fieldsTermsAgreementRepositorywith transaction supportAuthService.signup()for atomic creationtermsAcceptedvalidation to signup schemaFrontend
z.literal(true)Test plan
🤖 Generated with Claude Code