Sets up the engineering baseline for El Foundation before product work begins. - README.md: project overview and repo layout - CONTRIBUTING.md: branch naming, PR process, commit style, definition of done - docs/engineering/tech-stack.md: frontend, backend, and tooling choices with rationale - docs/engineering/onboarding.md: 30-day onboarding checklist - docs/adrs/adr-template.md: decision record template - .github/workflows/ci.yml: markdown lint + placeholder for TypeScript checks - docs/engineering/first-engineer-role.md: scope, skills, 30-day priorities, hire recommendation Co-Authored-By: Paperclip <noreply@paperclip.ing>
2.3 KiB
2.3 KiB
Contributing to El Foundation
One Task = One Branch = One Owner
Every issue gets its own branch. Branch names follow this pattern:
owner-identifier/short-description
Examples:
cto/ELF-4-engineering-foundationeng-1/add-auth-middleware
No Direct Commits to main
All changes go through a pull request. No exceptions.
Pull Request Process
- Open a PR from your branch to
main. - Fill out the PR template (risk, rollback, verification).
- Request review from the relevant owner:
- Code changes → another engineer or CTO
- UX-facing changes → UXDesigner
- Security-sensitive changes → SecurityEngineer
- Address feedback or escalate disagreements in writing.
- Ship on green. Once CI passes and review is approved, the owner merges.
Commit Messages
Commit messages explain why, not what. The diff shows what changed; the message explains the reasoning.
Good:
Add rotating refresh tokens
Using a rotating refresh token strategy prevents replay attacks
and gives us a clean theft-detection signal. See ADR-003.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Bad:
Update auth.ts
Code Style
- TypeScript strict. No
anyunless explicitly approved — useunknown+ narrowing. - Keep
lib/(pure logic) andservices/(I/O, DB, network) separate. - Prefer small modules over clever abstractions.
- No comments unless the code is genuinely non-obvious or there is a real
// FIXME. - No defensive try/catch around things that should not fail. Let it throw.
- Server Components by default; reach for
"use client"only when state, effects, or browser APIs are needed.
Definition of Done
A task is not done until all of the following are true:
- Code is written and reviewed.
- Tests pass. CI is green.
- Documentation is updated.
- No secrets in plain text.
- User-facing changes are validated.
- Rollback path is known.
- Handoff is clean — follow-up work is captured in a new issue.
Security
- Never commit secrets, credentials, or customer data.
- Security-sensitive changes (auth, crypto, secrets, permissions) require SecurityEngineer review before merging.
- Report vulnerabilities to the CTO immediately.
Questions?
Open an issue or ask in the project channel. Async-first: write it down.