Task 2 Findings: fynd.deals Epic 15 Versioning Patterns
Task: E3:S01:T02 – Ingest versioning findings from fynd.deals Epic 15 work
Created: 2025-12-02
Status: Complete
Deliverable: Summary of reusable patterns and findings
Executive Summary
This document captures reusable versioning patterns extracted from the fynd.deals Epic 15 work, as reflected in the packages/frameworks/numbering & versioning/ framework package. The framework package already contains the refined versioning policies and strategies developed in fynd.deals Epic 15, Story 1.
Key Finding: The framework package (packages/frameworks/numbering & versioning/) already contains the fynd.deals Epic 15 findings, as documented in PACKAGE_UPDATE_SUMMARY.md which states: "Copied current versioning-policy.md from docs/fynd_deals/_design/versioning/".
1. Version Schema Pattern
Pattern: RC.EPIC.STORY.TASK+BUILD
Source: packages/frameworks/numbering & versioning/versioning-policy.md
Structure:
- RC: Release Candidate (0 = development, 1+ = release candidate)
- EPIC: Epic number (e.g., 9)
- STORY: Story number within epic (e.g., 21)
- TASK: Task number within story (e.g., 3)
- BUILD: Build number (increments per release within task)
Key Characteristics:
- Enables parallel epic/workstream development
- Maintains clear version tracking at task level
- Provides build-level granularity
- Supports forensic traceability
Example Progression:
0.9.21.3+1 → First release of Task 3
0.9.21.3+2 → Second release of Task 3 (BUILD increments)
0.9.21.4+1 → Moving to Task 4 (TASK increments, BUILD resets to 1)
Reusability: ✅ Fully portable - schema is project-agnostic
2. Epic Renumbering Strategy Pattern
Pattern: Legacy vs New Format Separation
Source: packages/frameworks/numbering & versioning/versioning-policy.md (lines 204-226)
Strategy:
- Epic 1-9: Legacy format (
RC.EPIC.STORY.PATCH) - Grandfathered, immutable - Epic 10+: New format (
RC.EPIC.STORY.TASK+BUILD) - Fresh start, clean version space
Migration Approach:
- Complete legacy epics with old format
- Mark legacy epics as complete
- Start new epics (10+) with new format exclusively
- All new work uses new format
Benefits:
- Clean separation between legacy and new formats
- No version collisions
- Fresh start for new epics
- Clear branch strategy (
epic/10-*,epic/11-*, etc.)
Reusability: ⚠️ Project-specific - Each project must define its own epic ranges and migration strategy
Dev-Kit Adaptation: ✅ Already adapted - dev-kit uses Epic 1+ with new format exclusively (no legacy range)
3. Version File Pattern
Pattern: Component-Based Version File
Source: packages/frameworks/numbering & versioning/versioning-policy.md (lines 117-135)
Structure:
VERSION_RC = 0 # Release candidate
VERSION_EPIC = 9 # Epic number
VERSION_STORY = 21 # Story number
VERSION_TASK = 3 # Task number
VERSION_BUILD = 1 # Build number
# Composite version string
VERSION_STRING = f"{VERSION_RC}.{VERSION_EPIC}.{VERSION_STORY}.{VERSION_TASK}+{VERSION_BUILD}"
Key Characteristics:
- Component-based (not single string) for easy manipulation
- Composite string built from components
+character preserved in version string- Location:
src/\{project\}/version.py(customizable)
Current Dev-Kit Implementation: ✅ Matches pattern exactly (src/fynd_deals/version.py)
Reusability: ✅ Fully portable - structure is project-agnostic
4. CHANGELOG Structure Pattern
Pattern: Two-Layer Changelog System
Source: packages/frameworks/numbering & versioning/versioning-strategy.md (lines 88-166)
Layer 1: Main Summary Changelog (CHANGELOG.md)
Format:
- Short date:
DD-MM-YYformat - Example:
### [0.9.21.3+1] - 01-12-25 - Purpose: Shows when version was merged into
main - Can be updated if merge date changes
Current Dev-Kit Implementation: ✅ Matches pattern (CHANGELOG.md uses DD-MM-YY)
Layer 2: Detailed Changelog Archive (CHANGELOG_ARCHIVE/CHANGELOG_v{version}.md)
Format:
- Full timestamp:
YYYY-MM-DD HH:MM:SS UTCformat - Example:
**Release Date:** 2025-12-01 16:51:30 UTC - Purpose: Forensic-level precision for accountability
- IMMUTABLE once written
Current Dev-Kit Implementation: ✅ Matches pattern (docs/changelog-and-release-notes/changelog-archive/CHANGELOG_v*.md)
Reusability: ✅ Fully portable - structure is project-agnostic
5. Version Validation Pattern
Pattern: Branch Context + Changelog Format Validation
Source: packages/frameworks/workflow mgt/scripts/validation/
Components:
-
Branch Context Validator (
validate_branch_context.py)- Validates version matches branch/epic
- Checks version format (old vs new)
- Validates CHANGELOG entries match branch
-
Changelog Format Validator (
validate_changelog_format.py)- Validates version format in CHANGELOG.md
- Checks date format (old:
YYYY-MM-DD, new:DD-MM-YY) - Validates build number >= 1
- Grandfathers old format (warnings only)
Key Characteristics:
- Grandfathered files (old format) pass validation (preserved as-is)
- New files (TASK+BUILD format) require strict enforcement
- Pre-commit hooks enforce format before commit
- CI/CD validates in continuous integration
Current Dev-Kit Implementation: ✅ Validators exist and are used in RW
Reusability: ✅ Fully portable - scripts are project-agnostic
6. Canonical Ordering Principle
Pattern: Version Numbers Are Canonical (Not Timestamps)
Source: packages/frameworks/numbering & versioning/versioning-strategy.md (lines 28-61)
Fundamental Rule:
- Version numbers (
RC.EPIC.STORY.TASK+BUILD) are the canonical ordering metric - Version ordering is independent of wall-clock time
- Parallel epic development is fully supported
- Changelog orders by version number, not Git commit time
Example:
- If
0.9.21.3+2was committed on 2025-12-01 at 15:30:00 UTC - And
0.9.20.5+1was committed on 2025-12-02 at 10:00:00 UTC - The changelog still orders them as:
0.9.20.5+1first, then0.9.21.3+2 - The version number determines order, not the actual commit timestamp
Current Dev-Kit Implementation: ✅ CHANGELOG.md orders by version number
Reusability: ✅ Fully portable - principle is project-agnostic
7. Forensic Traceability Grid
Pattern: Multi-Dimensional Traceability
Source: packages/frameworks/numbering & versioning/versioning-strategy.md (lines 169-290)
Dimensions:
- Version ↔ Epic/Story/Task - Version number encodes work hierarchy
- Version ↔ Detailed Changelog - One file per version with full timestamp
- Version ↔ Main Summary Changelog - Summary entry with short date
- Version ↔ Kanban Forensic Markers - Epic/Story documents reference versions
- Version ↔ Git History - Version in commit messages and tags
Key Characteristics:
- Complete accountability across all dimensions
- Efficient traceability regardless of commit timing
- Immutability rules preserve historical accuracy
Current Dev-Kit Implementation: ✅ All dimensions implemented:
- Version numbers encode Epic/Story/Task
- Detailed changelogs in archive
- Main changelog with summaries
- Kanban docs reference versions
- Git commits include version in messages
Reusability: ✅ Fully portable - grid structure is project-agnostic
8. Immutability Rules Pattern
Pattern: Historical Metadata Preservation
Source: packages/frameworks/numbering & versioning/versioning-strategy.md (lines 294-338)
Rules:
- Detailed Changelog Timestamps Are Immutable - Never edit
**Release Date:**in existing files - Version Ordering Is Immutable - Position in changelog fixed by version number
- Historical Files Are Preserved As-Is - Grandfathered files remain unchanged
Rationale:
- Preserves forensic record integrity
- Maintains historical accuracy
- Enables reliable traceability
Current Dev-Kit Implementation: ✅ Follows immutability rules
Reusability: ✅ Fully portable - rules are project-agnostic
9. Date Format Patterns
Pattern: Two-Layer Date System
Source: packages/frameworks/numbering & versioning/versioning-strategy.md (lines 88-166)
Layer 1: Main Changelog
- Format:
DD-MM-YY(e.g.,01-12-25) - Purpose: Quick reference for merge-to-main date
- Can be updated if merge date changes
Layer 2: Detailed Changelog
- Format:
YYYY-MM-DD HH:MM:SS UTC(e.g.,2025-12-01 16:51:30 UTC) - Purpose: Forensic-level precision
- IMMUTABLE once written
Migration Note:
- Old format used
YYYY-MM-DDin main changelog - New format uses
DD-MM-YYin main changelog - Old format files are grandfathered
Current Dev-Kit Implementation: ✅ Uses new format (DD-MM-YY in main, full timestamp in archive)
Reusability: ✅ Fully portable - format is project-agnostic
10. Grandfathering Strategy Pattern
Pattern: Legacy Format Preservation
Source: packages/frameworks/numbering & versioning/versioning-strategy.md (lines 341-393)
Approach:
- Old format (
RC.EPIC.STORY.PATCH) automatically grandfathered - Grandfathered files pass validation (warnings only)
- New files (Epic 10+) require strict enforcement
- Historical files preserved as artifacts
Cutoff Criteria:
- Version format: Old schema automatically grandfathered
- Date-based cutoff: Any release before policy introduction date
- Version number: Versions before new format introduction
Current Dev-Kit Implementation: ✅ No legacy format (dev-kit started with new format)
Reusability: ⚠️ Project-specific - Each project must define its own grandfathering cutoff
11. Validation Script Patterns
Pattern: Automated Format Enforcement
Source: packages/frameworks/workflow mgt/scripts/validation/
Scripts:
-
validate_branch_context.py- Validates version matches branch/epic
- Checks version format (old vs new)
- Validates CHANGELOG entries match branch
-
validate_changelog_format.py- Validates version format in CHANGELOG.md
- Checks date format (old:
YYYY-MM-DD, new:DD-MM-YY) - Validates build number >= 1
- Grandfathers old format (warnings only)
Integration:
- Pre-commit hooks enforce format before commit
- CI/CD validates in continuous integration
- Release Workflow runs validators before commit
Current Dev-Kit Implementation: ✅ Scripts exist and are integrated into RW
Reusability: ✅ Fully portable - scripts are project-agnostic
12. Version File Location Pattern
Pattern: Standardized Location
Source: packages/frameworks/numbering & versioning/versioning-policy.md (line 119)
Standard Location: src/\{project\}/version.py
Examples:
- fynd.deals:
src/fynd_deals/version.py - ai-dev-kit:
src/fynd_deals/version.py(currently - should besrc/vibe_dev_kit/version.py)
Note: Dev-kit currently uses src/fynd_deals/version.py which is a legacy path from when it was copied. Should be updated to src/vibe_dev_kit/version.py or similar.
Reusability: ✅ Portable - path is customizable per project
Summary of Reusable Patterns
✅ Fully Portable (Project-Agnostic)
- Version Schema:
RC.EPIC.STORY.TASK+BUILDformat - Version File Structure: Component-based with composite string
- CHANGELOG Structure: Two-layer system (main + archive)
- Canonical Ordering: Version numbers, not timestamps
- Forensic Traceability Grid: Multi-dimensional traceability
- Immutability Rules: Historical metadata preservation
- Date Format Patterns: Two-layer date system
- Validation Scripts: Automated format enforcement
⚠️ Project-Specific (Requires Customization)
- Epic Renumbering Strategy: Each project defines its own epic ranges
- Grandfathering Strategy: Each project defines its own cutoff criteria
- Version File Location:
src/\{project\}/version.py(customizable path)
Recommendations for Dev-Kit
1. Version File Location
Current: src/fynd_deals/version.py
Recommended: src/vibe_dev_kit/version.py or src/vibe_dev_kit/version.py
Action: Update version file location to reflect dev-kit project name (not fynd.deals)
2. Framework Package Completeness
Status: ✅ Framework package already contains fynd.deals Epic 15 findings
Evidence:
packages/frameworks/numbering & versioning/versioning-policy.md- Complete schema and Epic renumbering strategypackages/frameworks/numbering & versioning/versioning-strategy.md- Complete forensic traceability systemPACKAGE_UPDATE_SUMMARY.mddocuments that files were copied from fynd.deals
3. Dev-Kit Policy Alignment
Status: ✅ Dev-kit versioning policy (docs/architecture/standards-and-adrs/dev-kit-versioning-policy.md) aligns with framework
Note: Dev-kit uses Epic 1+ with new format exclusively (no legacy range), which is cleaner than fynd.deals' Epic 1-9 legacy range.
4. Validation Scripts
Status: ✅ Validators exist and are integrated into Release Workflow
Location: packages/frameworks/workflow mgt/scripts/validation/
Next Steps
- ✅ T002 Complete - Findings documented
- T003 - Update dev-kit versioning policy as canonical SoT (use these findings)
- T004 - Align dev-kit version.py and CHANGELOG with framework (update file location)
- T005 - Document consumption pattern for other projects (reference these patterns)
References
packages/frameworks/numbering & versioning/versioning-policy.mdpackages/frameworks/numbering & versioning/versioning-strategy.mdpackages/frameworks/workflow mgt/scripts/validation/validate_branch_context.pypackages/frameworks/workflow mgt/scripts/validation/validate_changelog_format.pydocs/architecture/standards-and-adrs/dev-kit-versioning-policy.mdsrc/fynd_deals/version.py(current dev-kit version file)
Last updated: 2025-12-02