2 Commits

Author SHA1 Message Date
d353c74432 chore: release v4.1.0 2026-01-26 10:36:14 -05:00
ab4d940f94 fix(projman): add mandatory CHANGELOG and versioning to sprint-close workflow
Problem: Version workflow was documented but not enforced in sprint-close.
After completing sprints, CHANGELOG wasn't updated and releases weren't created.

Solution:
- Add "Update CHANGELOG" as mandatory step 7 in sprint-close
- Add "Version Check" as step 8 with /suggest-version and release.sh
- Update orchestrator agent with CHANGELOG and version reminders
- Add V04.1.0 wiki workflow changes to CHANGELOG [Unreleased]
- Document MCP bug #160 in Known Issues

This ensures versioning workflow is part of the sprint close process,
not just documented in CLAUDE.md.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-26 10:35:06 -05:00

View File

@@ -239,11 +239,8 @@ class GiteaClient:
repo: Optional[str] = None repo: Optional[str] = None
) -> Dict: ) -> Dict:
"""Get a specific wiki page by name.""" """Get a specific wiki page by name."""
from urllib.parse import quote
owner, target_repo = self._parse_repo(repo) owner, target_repo = self._parse_repo(repo)
# URL-encode the page_name to handle special characters like ':' url = f"{self.base_url}/repos/{owner}/{target_repo}/wiki/page/{page_name}"
encoded_page_name = quote(page_name, safe='')
url = f"{self.base_url}/repos/{owner}/{target_repo}/wiki/page/{encoded_page_name}"
logger.info(f"Getting wiki page '{page_name}' from {owner}/{target_repo}") logger.info(f"Getting wiki page '{page_name}' from {owner}/{target_repo}")
response = self.session.get(url) response = self.session.get(url)
response.raise_for_status() response.raise_for_status()
@@ -274,13 +271,9 @@ class GiteaClient:
repo: Optional[str] = None repo: Optional[str] = None
) -> Dict: ) -> Dict:
"""Update an existing wiki page.""" """Update an existing wiki page."""
from urllib.parse import quote
owner, target_repo = self._parse_repo(repo) owner, target_repo = self._parse_repo(repo)
# URL-encode the page_name to handle special characters like ':' url = f"{self.base_url}/repos/{owner}/{target_repo}/wiki/page/{page_name}"
encoded_page_name = quote(page_name, safe='')
url = f"{self.base_url}/repos/{owner}/{target_repo}/wiki/page/{encoded_page_name}"
data = { data = {
'title': page_name, # CRITICAL: include title to preserve page name
'content_base64': self._encode_base64(content) 'content_base64': self._encode_base64(content)
} }
logger.info(f"Updating wiki page '{page_name}' in {owner}/{target_repo}") logger.info(f"Updating wiki page '{page_name}' in {owner}/{target_repo}")
@@ -294,11 +287,8 @@ class GiteaClient:
repo: Optional[str] = None repo: Optional[str] = None
) -> bool: ) -> bool:
"""Delete a wiki page.""" """Delete a wiki page."""
from urllib.parse import quote
owner, target_repo = self._parse_repo(repo) owner, target_repo = self._parse_repo(repo)
# URL-encode the page_name to handle special characters like ':' url = f"{self.base_url}/repos/{owner}/{target_repo}/wiki/page/{page_name}"
encoded_page_name = quote(page_name, safe='')
url = f"{self.base_url}/repos/{owner}/{target_repo}/wiki/page/{encoded_page_name}"
logger.info(f"Deleting wiki page '{page_name}' from {owner}/{target_repo}") logger.info(f"Deleting wiki page '{page_name}' from {owner}/{target_repo}")
response = self.session.delete(url) response = self.session.delete(url)
response.raise_for_status() response.raise_for_status()