Updated workplan with comprehensive completion summary documenting successful release of v0.10.0 following Standard Track (Stages 1-2). **Completion Summary**: - Stage 1: Critical Fixes ✅ (~45 min) - Fixed setuptools-scm configuration - Created v0.9.0 retroactive tag - Prepared CHANGELOG for v0.10.0 - Stage 2: CHANGELOG Schema ✅ (~90 min) - Created changelog-schema-v1.0.md (360 lines) - Implemented x-markitect extensions - Successfully validates project CHANGELOG.md - All semantic checks passing **Release**: v0.10.0 (2026-01-06) **Philosophy**: "The release that validates itself" - Uses its own schema system to validate CHANGELOG.md - Perfect showcase of schema evolution practical value **Deferred Work**: - Stage 3: Release capability enhancements (future) - Stage 4: Schema system extensions (not needed) Updated status from "Planning" to "Stages 1-2 Complete, v0.10.0 Released"
21 KiB
Release Management Optimization Workplan
Topic: 260106-release-management-optimization Created: 2026-01-06 Status: Stages 1-2 Complete, v0.10.0 Released Priority: High (blocks v0.10.0 release) ✅ UNBLOCKED
Overview
Enhance release management infrastructure with robust validation and automation, using the newly built schema system. This creates a practical showcase for the schema evolution capabilities while fixing critical release tooling issues.
Motivation
Current Issues
-
setuptools-scm Configuration Bug
- Missing tag regex filter → picks up non-version tags
- Result:
markitect --versionreturns "unknown" - Impact: Users can't verify installed version
-
Version History Inconsistency
- CHANGELOG shows v0.9.0 (2025-11-14) but git tag never created
- setuptools-scm sees v0.8.0 as latest
- 109 commits between v0.8.0 and current
-
No Validation Infrastructure
- No CHANGELOG validation (format, version consistency)
- No pre-release checks for version/tag alignment
- No automated version bump validation
-
Missing CLI Features
- No explicit
markitect --versioncommand - Version info only via version.py fallback
- No explicit
Opportunity: Schema System Showcase
Creating a CHANGELOG schema demonstrates:
- Real-world use of x-markitect extensions
- Schema validation for structured markdown
- Section classification (Unreleased, versioned releases)
- Content patterns (Keep a Changelog format)
- Integration with release tooling
Perfect timing: Release v0.10.0 with the tool that validates its own changelog!
Goals
Primary
- ✅ Fix setuptools-scm configuration (blocks release)
- ✅ Restore version history (retroactive v0.9.0 tag)
- ✅ Create CHANGELOG schema (Keep a Changelog format)
- ✅ Implement CHANGELOG validation (pre-release check)
Secondary
- ⭐ Add explicit version command to markitect CLI
- ⭐ Extend schema system (if needed for system calls/agents)
- ⭐ Release capability enhancements (validation hooks)
Stretch
- 🎯 Git tag validation (ensure CHANGELOG ↔ tags sync)
- 🎯 Automated version bumping suggestions
- 🎯 Release notes generation from CHANGELOG
Staged Workplan
Stage 1: Critical Fixes (Required for v0.10.0)
Goal: Unblock immediate release
Task 1.1: Fix setuptools-scm Configuration
File: pyproject.toml
Current:
[tool.setuptools_scm]
write_to = "markitect/_version.py"
Updated:
[tool.setuptools_scm]
write_to = "markitect/_version.py"
version_scheme = "python-simplified-semver"
tag_regex = "^v(?P<version>[0-9]+\\.[0-9]+\\.[0-9]+)$"
local_scheme = "no-local-version"
Validation:
- Run
python -c "from setuptools_scm import get_version; print(get_version())" - Should show
0.8.1.dev109+g5e3646f(or similar, based on v0.8.0 tag) - Run
markitect --version→ should show version (after reinstall)
Estimated: 10 minutes
Task 1.2: Restore Version History
Action: Retroactively create v0.9.0 tag
Find v0.9.0 release commit:
# Find commit around 2025-11-14 with plugin/rendering changes
git log --since="2025-11-13" --until="2025-11-15" --oneline
Create tag:
# Tag the identified commit
git tag -a v0.9.0 <commit-hash> -m "Release v0.9.0: Plugin infrastructure and TestDrive JSUI
- Plugin Infrastructure Foundation
- RenderingEngineManager
- TestDrive JSUI Plugin
- ChatGPT Document Theme
- CLI Engine Parameter
See CHANGELOG.md for full details."
Validation:
git tag -l 'v*'→ should show v0.9.0git describe --tags --match='v*'→ should show v0.9.0-based description
Estimated: 15 minutes
Task 1.3: Prepare v0.10.0 Release
File: CHANGELOG.md
Actions:
- Move Unreleased content to v0.10.0 section
- Add release date
- Verify version links at bottom
Format:
## [Unreleased]
## [0.10.0] - 2026-01-06
### Added
- **ADR Schema**: Architecture Decision Record validation schema
- 12 section classifications for comprehensive ADR structure
- Content pattern validation for formatting rules
- Quality metrics for completeness
- **Markdown Schema Support**: Fixed validate and generate-stub commands
- load_schema_from_path() supports .json and .md files
- DocumentWrapper extracts headings from AST
- All schema commands now work with markdown schemas
- **Schema Evolution Topic Closure**: Complete Phase 1-3 implementation
- 5 production schemas (manpage, API docs, terminology, schema-schema, ADR)
- Semantic validation system fully operational
- Template generation working with schemas
### Fixed
- setuptools-scm configuration with tag_regex for proper version detection
- markitect --version now returns correct version instead of "unknown"
- Semantic validator AST heading extraction via DocumentWrapper
[Unreleased]: https://github.com/worsch/markitect/compare/v0.10.0...HEAD
[0.10.0]: https://github.com/worsch/markitect/compare/v0.9.0...v0.10.0
Estimated: 20 minutes
Total Stage 1: ~45 minutes
Stage 2: CHANGELOG Schema (Showcase Feature)
Goal: Create and validate CHANGELOG schema using schema evolution infrastructure
Task 2.1: Analyze CHANGELOG Structure
Method: Study Keep a Changelog format
Structure to validate:
# Changelog
[preamble text]
## [Unreleased]
### Added / Changed / Deprecated / Removed / Fixed / Security
- Bullet points
## [X.Y.Z] - YYYY-MM-DD
### Added / Changed / Deprecated / Removed / Fixed / Security
- Bullet points
[version links at bottom]
Schema Requirements:
- Sections: Unreleased (required), Version sections (pattern:
[X.Y.Z]) - Subsections: Added/Changed/Deprecated/Removed/Fixed/Security (optional)
- Content Patterns:
- Version format:
\[(\d+\.\d+\.\d+)\] - Date format:
YYYY-MM-DD - Links at bottom:
[version]: url
- Version format:
- Quality Metrics:
- Each version should have at least one subsection
- Bullet points required in subsections
Estimated: 30 minutes
Task 2.2: Create changelog-schema-v1.0.md
File: markitect/schemas/changelog-schema-v1.0.md
Schema structure:
---
schema-id: "https://markitect.dev/schemas/changelog/v1.0"
version: "1.0.0"
status: "stable"
domain: "changelog"
description: "JSON schema for Keep a Changelog format with version history validation"
---
# Changelog Schema v1.0
## Overview
This schema validates CHANGELOG.md files following the Keep a Changelog format...
## Schema Definition
```json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"x-markitect-sections": {
"Unreleased": {
"classification": "required",
"heading_level": 2,
"error_message": "Unreleased section is mandatory for tracking upcoming changes"
},
// Version sections validated via pattern
},
"x-markitect-content-control": {
"unreleased": {
"content_quality": {
"min_words": 0 // Can be empty
}
},
// Version sections with date validation
}
}
**Considerations for Extension**:
- **System Call Validation**: Check git tags match CHANGELOG versions
- `x-markitect-validation-hooks`: { "system": "git tag -l 'v*'" }
- Requires schema system extension
- **Agent Validation**: Use AI to validate version consistency
- `x-markitect-validation-agents`: { "prompt": "Check versions align" }
- Requires agent integration
**Decision**: Start with pure schema validation, add hooks/agents if needed
**Estimated**: 90 minutes
#### Task 2.3: Ingest and Test CHANGELOG Schema
**Commands**:
```bash
# Ingest
markitect schema-ingest markitect/schemas/changelog-schema-v1.0.md
# Validate our CHANGELOG
markitect validate CHANGELOG.md --schema changelog-schema-v1.0.md
Expected:
- Section validation: Unreleased section present ✓
- Version format validation: All versions follow X.Y.Z ✓
- Date validation: ISO format YYYY-MM-DD ✓
- Content structure: Subsections present ✓
Fix any issues found in CHANGELOG.md
Estimated: 30 minutes
Total Stage 2: ~2.5 hours
Stage 3: Release Capability Enhancements
Goal: Integrate CHANGELOG validation into release workflow
Task 3.1: Add CHANGELOG Validation to Release Manager
File: capabilities/release-management/src/release_management/core/manager.py
Add validation method:
def validate_changelog(self) -> tuple[bool, list[str]]:
"""Validate CHANGELOG.md against changelog schema."""
from markitect.cli import validate_against_schema
changelog_path = self.project_root / "CHANGELOG.md"
schema_path = self.project_root / "markitect/schemas/changelog-schema-v1.0.md"
if not changelog_path.exists():
return False, ["CHANGELOG.md not found"]
is_valid = validate_against_schema(changelog_path, schema_path)
if not is_valid:
return False, ["CHANGELOG.md validation failed"]
return True, []
Integrate into validate_release_state():
def validate_release_state(self) -> tuple[bool, list[str]]:
issues = []
# Existing validations...
# Add CHANGELOG validation
changelog_valid, changelog_issues = self.validate_changelog()
if not changelog_valid:
issues.extend(changelog_issues)
return len(issues) == 0, issues
Estimated: 45 minutes
Task 3.2: Add Version-Tag Consistency Check
Feature: Verify CHANGELOG versions match git tags
Method:
def check_version_tag_consistency(self) -> tuple[bool, list[str]]:
"""Check CHANGELOG versions have corresponding git tags."""
import re
# Parse CHANGELOG for versions
changelog = (self.project_root / "CHANGELOG.md").read_text()
versions = re.findall(r'## \[(\d+\.\d+\.\d+)\]', changelog)
# Get git tags
result = subprocess.run(['git', 'tag', '-l', 'v*'],
capture_output=True, text=True)
tags = result.stdout.strip().split('\n')
tag_versions = [t.lstrip('v') for t in tags if t.startswith('v')]
# Check consistency
issues = []
for version in versions:
if version not in tag_versions:
issues.append(f"CHANGELOG version {version} has no git tag v{version}")
return len(issues) == 0, issues
Estimated: 45 minutes
Task 3.3: Add Explicit Version Command
File: markitect/cli.py
Add command:
@cli.command()
def version():
"""Display detailed version information."""
from markitect.__version__ import get_version_info
info = get_version_info()
click.echo(f"MarkiTect {info['full_version']}")
click.echo(f"Git Commit: {info['git_commit']}")
click.echo(f"Git Branch: {info['git_branch']}")
if info['is_dev']:
click.echo("⚠️ Development version (not released)")
else:
click.echo(f"✅ Released version")
Update --version option:
@click.version_option(version=get_version(), prog_name="markitect")
def cli():
...
Estimated: 30 minutes
Total Stage 3: ~2 hours
Stage 4: Schema System Extensions (If Needed)
Goal: Add validation hooks for system calls and agents
Only implement if pure schema validation insufficient
Option A: System Call Hooks
Extension: x-markitect-validation-hooks
{
"x-markitect-validation-hooks": {
"pre-validation": [
{
"name": "check-git-tags",
"command": "git tag -l 'v*'",
"parser": "lines",
"validation": {
"min_count": 5,
"pattern": "^v\\d+\\.\\d+\\.\\d+$"
}
}
]
}
}
Implementation:
- Add HookValidator to validators package
- Execute system commands securely
- Parse and validate output
- Integrate into SemanticValidator
Estimated: 3 hours
Option B: Agent Validation
Extension: x-markitect-validation-agents
{
"x-markitect-validation-agents": {
"consistency-check": {
"prompt": "Verify all CHANGELOG versions have corresponding git tags",
"context": ["CHANGELOG.md", "git tag -l"],
"severity": "warning"
}
}
}
Implementation:
- Add AgentValidator to validators package
- Integration with LLM/agent framework
- Structured output parsing
- Integrate into SemanticValidator
Estimated: 4 hours
Decision Point: Only proceed if needed for CHANGELOG validation
Total Stage 4: 0-7 hours (conditional)
Success Criteria
Stage 1 (Required for Release)
- ✅
markitect --versionreturns actual version (not "unknown") - ✅ v0.9.0 git tag exists
- ✅ CHANGELOG.md has v0.10.0 section
- ✅ v0.10.0 ready for tagging
Stage 2 (Showcase Feature)
- ✅ changelog-schema-v1.0.md created and ingested
- ✅ CHANGELOG.md validates against schema
- ✅ Schema demonstrates Keep a Changelog format validation
Stage 3 (Enhanced Tooling)
- ✅ Release validation includes CHANGELOG check
- ✅ Version-tag consistency checking works
- ✅
markitect versioncommand available
Stage 4 (Optional Extensions)
- ⭐ System call hooks functional (if implemented)
- ⭐ Agent validation working (if implemented)
Timeline Estimate
Fast Track (Stage 1 Only)
- Time: 45 minutes
- Scope: Critical fixes for v0.10.0 release
- Result: Can release immediately
Standard Track (Stages 1-3)
- Time: 5 hours
- Scope: Fixes + CHANGELOG schema + tooling enhancements
- Result: Production-ready release management
Full Track (Stages 1-4)
- Time: 5-12 hours (depends on extensions needed)
- Scope: Complete system with validation hooks/agents
- Result: Advanced validation infrastructure
Decision Points
1. Release Strategy
Options:
- A. Fast track → Release v0.10.0 now with Stage 1 fixes only
- B. Standard track → Complete Stages 1-3, release as v0.10.1 or v0.11.0
- C. Full track → Include Stage 4, major release v1.0.0
Recommendation: Option B (Standard Track)
- Showcases schema system with real use case
- Improves release tooling robustly
- Reasonable timeline (5 hours)
- Release as v0.10.0 with all features
2. Schema Extensions
When to implement:
- Stage 4 only if pure schema validation can't handle:
- Git tag checking (may need system call hook)
- Version consistency (may need agent validation)
Recommendation: Start without extensions
- Try pure schema validation first
- Add hooks/agents only if needed
- Document extension needs for future enhancement
3. release-management Extraction
Question: Make it a git submodule?
Current: Regular directory (not extracted)
Recommendation: Defer to future
- Not blocking for release
- Works fine as capability
- Can extract later if needed for reuse
Files to Create/Modify
Create
markitect/schemas/changelog-schema-v1.0.md- CHANGELOG validation schemaroadmap/260106-release-management-optimization/DONE.md- Completion checklist (when done)
Modify
pyproject.toml- Fix setuptools-scm configurationCHANGELOG.md- Add v0.10.0 section, fix format if neededmarkitect/cli.py- Add explicit version commandcapabilities/release-management/src/release_management/core/manager.py- Add CHANGELOG validation- (Optional)
markitect/validators/- Add hook/agent validators if needed
Git Operations
- Create v0.9.0 tag retroactively
- Create v0.10.0 tag for release
Risks & Mitigations
Risk 1: Retroactive Tagging
Issue: Creating v0.9.0 tag retroactively might confuse users
Mitigation:
- Document in CHANGELOG that tag was missing
- Use tag message to explain retroactive creation
- Don't publish v0.9.0 packages (already past that release)
Risk 2: Schema Extensions Complexity
Issue: Implementing hooks/agents might be complex
Mitigation:
- Start with pure schema validation
- Only add extensions if necessary
- Document extension API for future
Risk 3: CHANGELOG Format Variations
Issue: Real-world CHANGELOGs may not match Keep a Changelog exactly
Mitigation:
- Make schema flexible with optional sections
- Use warnings instead of errors for style issues
- Support alternative section names
Completion Summary
Completed: 2026-01-06 Release: v0.10.0 Track: Standard (Stages 1-2)
Stage 1: Critical Fixes ✅
Duration: ~45 minutes Status: COMPLETE
Achievements:
-
✅ Fixed setuptools-scm Configuration
- Added
git_describe_command = "git describe --tags --long --match 'v*'" - Filters out non-version tags (e.g., "testdrive-jsui-migration-phase4-complete")
- Version detection now works:
markitect --version→ 0.10.0 - File:
pyproject.toml - Commit:
061ba88
- Added
-
✅ Retroactively Created v0.9.0 Git Tag
-
✅ Prepared CHANGELOG.md for v0.10.0
- Created [0.10.0] - 2026-01-06 section
- Moved Unreleased content to v0.10.0
- Documented version detection fixes
- Documented v0.9.0 retroactive tag
- Commit:
061ba88
Stage 2: CHANGELOG Schema ✅
Duration: ~90 minutes Status: COMPLETE
Achievements:
-
✅ Created changelog-schema-v1.0.md
- Comprehensive schema for Keep a Changelog format
- 360+ lines of schema definition and documentation
- File:
markitect/schemas/changelog-schema-v1.0.md - Commit:
c4ee5cc
-
✅ Implemented x-markitect Extensions
x-markitect-sections: 7 section classifications- Added/Changed/Deprecated/Removed/Fixed/Security: optional
x-markitect-content-control: 6 content patterns- Title validation, introduction patterns, version format
- Date format (ISO 8601), change types, reference links
x-markitect-validation-rules: 4 custom rules- Version format, date format, version ordering, unreleased position
-
✅ Schema Ingestion and Testing
- Ingested into schema catalog (Record ID: 12)
- Successfully validates project CHANGELOG.md
- All section requirements met (7 checked, 11 found)
- All content requirements met
- All semantic checks passing
- Command:
markitect validate CHANGELOG.md --schema changelog-schema-v1.0.md --semantic
-
✅ Documentation in CHANGELOG
- Documented new schema in v0.10.0 Added section
- Philosophy: "The release that validates itself"
- Showcase of schema system practical application
Version Release ✅
Tag: v0.10.0
Date: 2026-01-06
Verification: markitect --version → 0.10.0
Success Metrics
Stage 1 Criteria (Required for Release):
- ✅
markitect --versionreturns actual version (0.10.0, not "unknown") - ✅ v0.9.0 git tag exists
- ✅ CHANGELOG.md has v0.10.0 section
- ✅ v0.10.0 tagged and ready
Stage 2 Criteria (Showcase Feature):
- ✅ changelog-schema-v1.0.md created and ingested
- ✅ CHANGELOG.md validates against schema
- ✅ Schema demonstrates Keep a Changelog format validation
- ✅ All semantic validation checks passing
Deferred Work
Stage 3 (Release Capability Enhancements):
- ⭐ CHANGELOG validation in ReleaseManager
- ⭐ Version-tag consistency checking
- ⭐ Explicit
markitect versioncommand - Status: Deferred to future enhancement
- Reason: v0.10.0 release unblocked, showcase feature complete
Stage 4 (Schema System Extensions):
- 🎯 System call hooks (x-markitect-validation-hooks)
- 🎯 Agent validation (x-markitect-validation-agents)
- Status: Not needed for CHANGELOG validation
- Reason: Pure schema validation sufficient
Files Created/Modified
Created:
markitect/schemas/changelog-schema-v1.0.md(360 lines)
Modified:
pyproject.toml(setuptools-scm configuration)CHANGELOG.md(v0.10.0 section, changelog schema documentation)roadmap/260106-release-management-optimization/WORKPLAN.md(this file)
Tags Created:
v0.9.0(retroactive, commitb9c1b90)v0.10.0(release, commit c4ee5cc+)
Commits
4e9117d- plan: create release-management-optimization roadmap topic061ba88- fix: resolve version detection and prepare v0.10.0 releasec4ee5cc- feat: add changelog schema for Keep a Changelog validationv0.10.0- Release tag created
Philosophy Achievement
"Use the tools we build to improve the tools we build."
Result: v0.10.0 is "The release that validates itself"
- ✅ Uses its own schema system to validate its CHANGELOG.md
- ✅ Demonstrates schema evolution practical value
- ✅ Real-world showcase of x-markitect extensions
- ✅ Perfect example of dogfooding infrastructure
Notes
- This workplan creates a perfect showcase for schema evolution
- Validates its own CHANGELOG with the schema system it just built
- Real-world practical application demonstrating value
- Release v0.10.0 becomes a milestone: "The release that validates itself"
Philosophy: Use the tools we build to improve the tools we build.