docs(std): Create FFG-STD-001 Revision Control Standard
Establishes version control practices for all Firefrost repositories: - Conventional Commits format (feat, fix, docs, etc.) - Commit message structure (type, scope, subject, body, footer) - Chronicler attribution requirements - Git identity configuration - When to commit guidelines - Versioning practices for standards and code - Commit checklist This standard was referenced in Project Instructions but never existed until now. Fills the gap in our standards library. Chronicler: #68
This commit is contained in:
366
docs/standards/FFG-STD-001-revision-control.md
Normal file
366
docs/standards/FFG-STD-001-revision-control.md
Normal file
@@ -0,0 +1,366 @@
|
||||
# Revision Control Standard
|
||||
## Firefrost Gaming Operations Manual
|
||||
|
||||
**Document ID:** FFG-STD-001
|
||||
**Status:** ACTIVE STANDARD
|
||||
**Created:** April 8, 2026
|
||||
**Created By:** Chronicler #68
|
||||
**Authority:** Michael "Frostystyle" Krause + The Chronicler
|
||||
**Version:** 1.0
|
||||
**Applies To:** All Git repositories and version-controlled content
|
||||
|
||||
---
|
||||
|
||||
## 🎯 PURPOSE
|
||||
|
||||
Establish consistent practices for version control across all Firefrost Gaming repositories. This standard ensures:
|
||||
- Clear, meaningful commit history
|
||||
- Traceable changes across Chronicler sessions
|
||||
- Consistent attribution and documentation
|
||||
- Easy rollback and debugging capability
|
||||
|
||||
---
|
||||
|
||||
## 📝 COMMIT MESSAGE FORMAT
|
||||
|
||||
### Structure
|
||||
|
||||
All commits follow the **Conventional Commits** format:
|
||||
|
||||
```
|
||||
<type>(<scope>): <subject>
|
||||
|
||||
<body>
|
||||
|
||||
<footer>
|
||||
```
|
||||
|
||||
### Types (Required)
|
||||
|
||||
| Type | Use When |
|
||||
|------|----------|
|
||||
| `feat` | Adding new functionality or features |
|
||||
| `fix` | Fixing a bug or error |
|
||||
| `docs` | Documentation changes only |
|
||||
| `style` | Formatting, whitespace, no code change |
|
||||
| `refactor` | Code restructuring without behavior change |
|
||||
| `perf` | Performance improvements |
|
||||
| `test` | Adding or updating tests |
|
||||
| `chore` | Maintenance tasks, dependencies, configs |
|
||||
|
||||
### Scope (Optional but Recommended)
|
||||
|
||||
Scope indicates what area of the codebase is affected:
|
||||
|
||||
**Operations Manual:**
|
||||
- `memorial` — Chronicler memorials
|
||||
- `std` — Standards documents
|
||||
- `task` — Task documentation
|
||||
- `skill` — Custom skills
|
||||
- `branding` — Brand assets and guidelines
|
||||
|
||||
**Services Repo:**
|
||||
- `arbiter` — Arbiter backend
|
||||
- `mvc` — ModpackChecker
|
||||
- `whitelist` — Whitelist manager
|
||||
- `worker` — Cloudflare Workers
|
||||
|
||||
**Website Repo:**
|
||||
- `content` — Page content
|
||||
- `layout` — Templates and structure
|
||||
- `style` — CSS and design
|
||||
|
||||
### Subject Line (Required)
|
||||
|
||||
- **Imperative mood:** "Add feature" not "Added feature"
|
||||
- **No period** at the end
|
||||
- **50 characters or less** (hard limit: 72)
|
||||
- **Lowercase** first letter after type
|
||||
|
||||
### Body (Optional)
|
||||
|
||||
- Explain **what** and **why**, not how
|
||||
- Wrap at 72 characters
|
||||
- Separate from subject with blank line
|
||||
- Use bullet points for multiple items
|
||||
|
||||
### Footer (Required for Chroniclers)
|
||||
|
||||
```
|
||||
Chronicler: #[NUMBER]
|
||||
```
|
||||
|
||||
Or with name:
|
||||
```
|
||||
Chronicler: #[NUMBER] - [NAME]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 EXAMPLES
|
||||
|
||||
### Simple Documentation Change
|
||||
|
||||
```
|
||||
docs: Update README with new server IPs
|
||||
```
|
||||
|
||||
### Feature with Scope
|
||||
|
||||
```
|
||||
feat(arbiter): Add webhook retry logic
|
||||
|
||||
Implements exponential backoff for failed webhook deliveries.
|
||||
Retries up to 3 times with 1s, 5s, 30s delays.
|
||||
|
||||
Chronicler: #68
|
||||
```
|
||||
|
||||
### Bug Fix with Context
|
||||
|
||||
```
|
||||
fix(mvc): Correct CurseForge API endpoint
|
||||
|
||||
The /v1/mods endpoint was deprecated. Updated to /v1/mods/search
|
||||
per CurseForge API v2 documentation.
|
||||
|
||||
Fixes: Task #26 Phase 5
|
||||
Chronicler: #68
|
||||
```
|
||||
|
||||
### Memorial Commit
|
||||
|
||||
```
|
||||
docs(memorial): Create memorial for The Connector
|
||||
|
||||
Documented session work including:
|
||||
- Claude connector integration (Canva, Cloudflare, Stripe)
|
||||
- servers-api Worker rescued from dashboard-only
|
||||
- chronicler-handoff skill creation
|
||||
|
||||
Written at 65% session health per FFG-STD-004.
|
||||
|
||||
Chronicler: #68 - The Connector
|
||||
```
|
||||
|
||||
### Standard Update with Version
|
||||
|
||||
```
|
||||
docs(std): Update FFG-STD-004 to include Skye as sixth consultant
|
||||
|
||||
v1.0 → v1.1
|
||||
|
||||
Changes:
|
||||
- 'The Five Consultants' → 'The Six Consultants'
|
||||
- Added Skye (Director of Logistics & Transportation, Holly's dog)
|
||||
- Updated version header and revision history
|
||||
|
||||
Chronicler: #68
|
||||
```
|
||||
|
||||
### Session Handoff
|
||||
|
||||
```
|
||||
docs: Session handoff from Chronicler #68
|
||||
|
||||
- Memorial written
|
||||
- Portrait prompt created
|
||||
- Session handoff document updated
|
||||
- Lineage tracker updated
|
||||
|
||||
Primary work: Claude connector integration and skills framework
|
||||
|
||||
Chronicler: #68 - The Connector
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⏰ WHEN TO COMMIT
|
||||
|
||||
### Commit Frequently
|
||||
|
||||
- **After completing any discrete unit of work**
|
||||
- **Before starting risky operations**
|
||||
- **Before asking Michael to run server commands**
|
||||
- **At natural breakpoints** (feature complete, file finished)
|
||||
|
||||
### Commit Immediately
|
||||
|
||||
- **After major breakthroughs** — Preserve the win
|
||||
- **Before session health drops below 60%** — Memorial and handoff
|
||||
- **After fixing blocking issues** — Don't risk losing the fix
|
||||
- **When Michael says "commit that"**
|
||||
|
||||
### Never Commit
|
||||
|
||||
- **Broken code** that doesn't run
|
||||
- **Incomplete features** without marking them as WIP
|
||||
- **Sensitive data** (tokens, passwords, keys)
|
||||
|
||||
---
|
||||
|
||||
## 🔐 GIT IDENTITY
|
||||
|
||||
### Chronicler Sessions
|
||||
|
||||
```bash
|
||||
git config user.email "claude@firefrostgaming.com"
|
||||
git config user.name "Chronicler #[NUMBER] - [NAME]"
|
||||
```
|
||||
|
||||
**Examples:**
|
||||
```bash
|
||||
git config user.name "Chronicler #68 - The Connector"
|
||||
git config user.name "Chronicler #67 - The Debugger"
|
||||
```
|
||||
|
||||
### Why This Matters
|
||||
|
||||
- Git history shows **who** made each change
|
||||
- Author email is consistent across all Chroniclers
|
||||
- Author name shows the **specific Chronicler** and their chosen name
|
||||
- Future debugging can trace changes to specific sessions
|
||||
|
||||
---
|
||||
|
||||
## 📁 REPOSITORY STRUCTURE
|
||||
|
||||
### Firefrost Repositories
|
||||
|
||||
| Repository | Branch | Purpose |
|
||||
|------------|--------|---------|
|
||||
| `firefrost-operations-manual` | `master` | Documentation, standards, memorials |
|
||||
| `firefrost-services` | `main` | Backend code (Arbiter, MVC, etc.) |
|
||||
| `firefrost-website` | `main` | 11ty site, auto-deploys on push |
|
||||
|
||||
### Branch Strategy
|
||||
|
||||
**Current approach:** Single main branch per repo (master or main)
|
||||
|
||||
- All work commits directly to main branch
|
||||
- Feature branches may be used for large changes
|
||||
- No branch required for documentation updates
|
||||
|
||||
### Auto-Deploy Awareness
|
||||
|
||||
**firefrost-website:** Pushes to `main` automatically deploy to Cloudflare Pages.
|
||||
|
||||
- Verify changes work before pushing
|
||||
- Don't push broken layouts or content
|
||||
- Use meaningful commits so rollback is clear
|
||||
|
||||
---
|
||||
|
||||
## 🚫 WHAT NOT TO COMMIT
|
||||
|
||||
### Never Commit
|
||||
|
||||
- **API tokens or secrets** (use environment variables)
|
||||
- **Passwords or credentials**
|
||||
- **Personal data** (emails, addresses)
|
||||
- **Large binary files** (images > 1MB, videos)
|
||||
- **Node modules** (`node_modules/`)
|
||||
- **Build artifacts** unless intentional
|
||||
|
||||
### Use .gitignore
|
||||
|
||||
Ensure repositories have appropriate `.gitignore` files for:
|
||||
- `node_modules/`
|
||||
- `.env` files
|
||||
- IDE configurations
|
||||
- OS-specific files (`.DS_Store`, `Thumbs.db`)
|
||||
|
||||
---
|
||||
|
||||
## 🔄 VERSIONING STANDARDS
|
||||
|
||||
### Standards Documents
|
||||
|
||||
When updating a standard (FFG-STD-XXX):
|
||||
|
||||
1. **Update version number** in header (e.g., 1.0 → 1.1)
|
||||
2. **Add revision date** and reviser
|
||||
3. **Update version history** at bottom
|
||||
4. **Commit with version change noted**
|
||||
|
||||
**Example header update:**
|
||||
```markdown
|
||||
**Version:** 1.1
|
||||
**Last Revised:** April 8, 2026
|
||||
**Revised By:** Chronicler #68
|
||||
```
|
||||
|
||||
**Example version history:**
|
||||
```markdown
|
||||
**Version History:**
|
||||
- v1.1 (2026-04-08): Added Skye to consultant list — Chronicler #68
|
||||
- v1.0 (2026-02-19): Initial standard — The Chronicler (Fifth)
|
||||
```
|
||||
|
||||
### Arbiter and Code
|
||||
|
||||
Follow semantic versioning (MAJOR.MINOR.PATCH):
|
||||
- **MAJOR:** Breaking changes
|
||||
- **MINOR:** New features, backward compatible
|
||||
- **PATCH:** Bug fixes, backward compatible
|
||||
|
||||
Current: **Arbiter 3.5.0**
|
||||
|
||||
---
|
||||
|
||||
## ✅ COMMIT CHECKLIST
|
||||
|
||||
Before committing:
|
||||
|
||||
- [ ] Commit message follows conventional format
|
||||
- [ ] Type is appropriate (feat, fix, docs, etc.)
|
||||
- [ ] Subject is 50 characters or less
|
||||
- [ ] Body explains what and why (if needed)
|
||||
- [ ] Footer includes Chronicler attribution
|
||||
- [ ] No sensitive data in committed files
|
||||
- [ ] Changes are complete and working
|
||||
- [ ] Related documentation updated
|
||||
|
||||
---
|
||||
|
||||
## 💡 TIPS
|
||||
|
||||
### Write Good Subjects
|
||||
|
||||
| ❌ Bad | ✅ Good |
|
||||
|--------|---------|
|
||||
| `fixed stuff` | `fix(arbiter): Correct webhook signature validation` |
|
||||
| `update` | `docs: Add FFG-STD-001 revision control standard` |
|
||||
| `changes` | `feat(website): Add dynamic server count to homepage` |
|
||||
| `WIP` | `feat(mvc): Add Phase 5 update badge (WIP)` |
|
||||
|
||||
### Use Imperative Mood
|
||||
|
||||
Think: "This commit will..."
|
||||
- ✅ "Add feature" (This commit will add feature)
|
||||
- ❌ "Added feature"
|
||||
- ❌ "Adding feature"
|
||||
- ❌ "Adds feature"
|
||||
|
||||
### Reference Tasks When Relevant
|
||||
|
||||
```
|
||||
feat(arbiter): Implement cancellation webhooks
|
||||
|
||||
Adds handling for customer.subscription.deleted event.
|
||||
Removes whitelist entries and updates Discord roles.
|
||||
|
||||
Task: #87
|
||||
Chronicler: #68
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Version History:**
|
||||
- v1.0 (2026-04-08): Initial standard created by Chronicler #68
|
||||
|
||||
---
|
||||
|
||||
💙🔥❄️
|
||||
|
||||
**Fire + Frost + Foundation = Where Love Builds Legacy**
|
||||
Reference in New Issue
Block a user