365 lines
8.6 KiB
Markdown
365 lines
8.6 KiB
Markdown
---
|
|
name: project-history
|
|
description: Build initial historical timeline for a project. Queries all datasources and creates week-by-week analysis files up to a sync date. Requires project-init to have been run first (datasources.md must exist).
|
|
disable-model-invocation: true
|
|
argument-hint: [project-name] [date-from] [date-to]
|
|
---
|
|
|
|
# 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:
|
|
|
|
```python
|
|
# 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
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```python
|
|
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:
|
|
|
|
```python
|
|
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:
|
|
|
|
1. **Key Decisions** — Strategic choices, architecture changes, vendor selections, security responses
|
|
2. **Technical Work** — Features developed, bug fixes, infrastructure changes, merges/PRs
|
|
3. **Team Activity** — Who was active, new people, departures, role changes
|
|
4. **Blockers** — Issues, delays, dependencies
|
|
|
|
### Week file template
|
|
|
|
**File:** `projects/$0/timeline/{year-month}/week-{n}.md`
|
|
|
|
```markdown
|
|
# $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`
|
|
|
|
```markdown
|
|
# $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:
|
|
|
|
```markdown
|
|
# $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`:
|
|
|
|
```markdown
|
|
# 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
|
|
```markdown
|
|
### 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
|
|
```markdown
|
|
### 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
|
|
```markdown
|
|
### 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
|