8.6 KiB
Build Project History
When to use: After /project-init has been run and the user has reviewed datasources.md. This skill gathers historical data and builds the week-by-week timeline.
Precondition: projects/$0/datasources.md must exist. If it doesn't, run /project-init $0 first.
Step 1: Read Datasources
Read projects/$0/datasources.md to determine:
- Which Zulip stream IDs and search terms to query
- Which git repository to clone/pull
- Which meeting room names to filter by
- Which entity types to prioritize
Step 2: Gather Historical Data
Query data for the period $1 to $2.
A. Query Zulip
For each PRIMARY stream in datasources.md:
# Paginate through all threaded conversations
GET /api/v1/query
entity_types=threaded_conversation
connector_ids=zulip
date_from=$1
date_to=$2
search={project-search-term}
limit=100
offset=0
B. Clone/Pull Git Repository
# First time
git clone --depth 200 {url} ./tmp/$0-clone
# Or if already cloned
cd ./tmp/$0-clone && git pull
# Extract commit history for the period
git log --since="$1" --until="$2" --format="%H|%an|%ae|%ad|%s" --date=short
git log --since="$1" --until="$2" --format="%an" | sort | uniq -c | sort -rn
C. Query Meeting Recordings
For each PRIMARY meeting room in datasources.md:
GET /api/v1/query
entity_types=meeting
date_from=$1
date_to=$2
room_name={room-name}
limit=100
Also do a semantic search for broader coverage:
POST /api/v1/search
search_text={project-name}
entity_types=["meeting"]
date_from=$1
date_to=$2
limit=50
Step 3: Analyze by Week
For each week in the period, create a week file. Group the gathered data into calendar weeks (Monday-Sunday).
For each week, analyze:
- Key Decisions — Strategic choices, architecture changes, vendor selections, security responses
- Technical Work — Features developed, bug fixes, infrastructure changes, merges/PRs
- Team Activity — Who was active, new people, departures, role changes
- Blockers — Issues, delays, dependencies
Week file template
File: projects/$0/timeline/{year-month}/week-{n}.md
# $0 - Week {n}, {Month} {Year}
**Period:** {date-range}
**Status:** [Active/Quiet/Blocked]
## Key Decisions
### Decision Title
- **Decision:** What was decided
- **Date:** {date}
- **Who:** {decision-makers}
- **Impact:** Why it matters
- **Context:** Background
## Technical Work
- [{Date}] {Description} - {Who}
## Team Activity
### Core Contributors
- **Name:** Focus area
### Occasional Contributors
- Name: What they contributed
## GitHub Activity
**Commits:** {count}
**Focus Areas:**
- Area 1
**Key Commits:**
- Hash: Description (Author)
## Zulip Activity
**Active Streams:**
- Stream: Topics discussed
## Current Blockers
1. Blocker description
## Milestones Reached
If any milestones were completed this week, document with business objective:
- **Milestone:** What was achieved
- **Business Objective:** WHY this matters (search for this in discussions, PRs, meetings)
- **Impact:** Quantifiable results if available
## Next Week Focus
- Priority 1
## Notes
- Context and observations
- Always try to capture the WHY behind decisions and milestones
Categorization principles
Key Decisions:
- Technology migrations
- Architecture changes
- Vendor switches
- Security incidents
- Strategic pivots
Technical Work:
- Feature implementations
- Bug fixes
- Infrastructure changes
- Refactoring
Skip Unless Meaningful:
- Routine check-ins
- Minor documentation updates
- Social chat
Contributor types
Core Contributors: Regular commits (multiple per week), active in technical discussions, making architectural decisions, reviewing PRs.
Occasional Contributors: Sporadic commits, topic-specific involvement, testing/QA, feedback only.
Step 4: Create/Update Timeline Index
File: projects/$0/timeline/index.md
# $0 Timeline Index
## {Year}
### {Quarter}
- [Month Week 1](./{year}-{month}/week-1.md)
- [Month Week 2](./{year}-{month}/week-2.md)
## Key Milestones
| Date | Milestone | Business Objective | Status |
|------|-----------|-------------------|--------|
| Mar 2025 | SQLite → PostgreSQL migration | Improve query performance (107ms→27ms) and enable concurrent access for scaling | Complete |
| Jul 2025 | Chakra UI 3 migration | Modernize UI component library and improve accessibility | Complete |
## Summary by Quarter
### Q{X} {Year}
- **Milestone 1:** What happened + Business objective
- **Milestone 2:** What happened + Business objective
Step 5: Create Project Dashboard (project.md)
File: projects/$0/project.md
Create the living document — the entry point showing current status:
# $0 Project
**One-liner:** [Brief description]
**Status:** [Active/On Hold/Deprecated]
**Last Updated:** [Date]
---
## This Week's Focus
### Primary Objective
[What the team is working on right now - from the most recent week]
### Active Work
- [From recent commits and discussions]
### Blockers
- [Any current blockers]
---
## Last Week's Focus
### Delivered
- ✅ [What was completed]
### Decisions Made
- [Key decisions from last week]
---
## Team
### Core Contributors (Active)
| Name | Focus | Availability |
|------|-------|--------------|
| [From git analysis] | [Area] | Full-time/Part-time |
### Occasional Contributors
- [Name] - [Role]
---
## Milestones
### In Progress 🔄
| Milestone | Target | Business Objective |
|-----------|--------|-------------------|
| [Active milestones from the data] | [Date] | [WHY this matters] |
### Recently Completed ✅
| Milestone | Date | Business Objective |
|-----------|------|-------------------|
| [Recently completed] | [Date] | [WHY this mattered] |
### Lost in Sight / Paused ⏸️
| Milestone | Status | Reason |
|-----------|--------|--------|
| [If any] | Paused | [Why] |
---
## Recent Decisions
### Week [N] (Current)
- **[Decision]** - [Context from data]
---
## Quick Links
- [📊 Timeline](./timeline/index.md) - Week-by-week history
- [📋 Background](./background.md) - Project architecture
- [🔌 Data Sources](./datasources.md) - How to gather information
---
*This is a living document. It reflects the current state and changes frequently.*
Fill in from the analyzed data:
- Team members from git contributors
- Current focus from the most recent week's activity
- Milestones from major features/deployments found in the data
- Recent decisions from meeting transcripts and Zulip discussions
Step 6: Update Sync State
Update projects/$0/sync-state.md:
# Sync State
status: history_complete
created_at: {original date}
last_sync_date: $2
initial_history_from: $1
initial_history_to: $2
Common Patterns
Security Incident
### Security Incident: {CVE-ID}
- **Discovered:** {date}
- **Severity:** CRITICAL/HIGH/MEDIUM
- **Who:** {discoverers}
- **Impact:** {description}
- **Actions:**
1. Immediate fix
2. Secrets rotated
3. Monitoring added
Technology Migration
### Migration: {Old} -> {New}
- **Decision:** {date}
- **Who:** {decision-makers}
- **Timeline:** {duration}
- **Rationale:** {why} ← Always include the business objective
- **Status:** Complete/In Progress/Planned
Important: When documenting any milestone or decision, always search for and include the WHY:
- Performance improvements (quantify if possible: "reduced from X to Y")
- Business capabilities enabled ("allows concurrent access for scaling")
- User experience improvements ("improves accessibility")
- Risk mitigation ("addresses security vulnerability")
- Cost reduction ("eliminates cloud dependency")
Look for this context in: meeting recordings, Zulip planning threads, PR descriptions, release notes.
Team Change
### Team: {Name} {Joined/Left/Role Change}
- **Date:** {date}
- **From:** {old role} (if applicable)
- **To:** {new role}
- **Impact:** {on project}
Key Rules
- Link to sources: Always reference commit hashes, PR numbers, Zulip topic names, meeting dates
- Be explicit about exclusions: Document what streams/sources you're NOT analyzing and why
- Write once: Week files are historical records — don't modify them after creation
- Paginate all queries: Result sets can be large, always loop through all pages