Skip to content

Auto-accumulated changelog for desktop releases#5236

Merged
m13v merged 56 commits intomainfrom
feat/cloud-agents-chat
Feb 28, 2026
Merged

Auto-accumulated changelog for desktop releases#5236
m13v merged 56 commits intomainfrom
feat/cloud-agents-chat

Conversation

@m13v
Copy link
Copy Markdown
Contributor

@m13v m13v commented Feb 28, 2026

Summary

  • Adds unreleased array to desktop/CHANGELOG.json for agents to append user-facing change descriptions as they work
  • GitHub Actions workflow (desktop_auto_release.yml) now consolidates unreleased entries into a versioned release entry before creating the tag
  • Falls back to "Bug fixes and improvements" if unreleased is empty
  • Updated desktop/CLAUDE.md with changelog entry instructions for agents
  • Updated release skill to reference auto-accumulated entries

How it works

  1. Agents append one-liners to unreleased in CHANGELOG.json after completing desktop tasks
  2. On merge to main, the auto-release workflow moves unreleased entries into releases[0] with version + date
  3. Clears unreleased to [] and commits with [skip ci]
  4. Creates and pushes the tag — Codemagic picks up releases[0] as before

🤖 Generated with Claude Code

github-actions Bot and others added 30 commits February 27, 2026 19:46
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…is set

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…tion

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…arding

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
github-actions Bot and others added 25 commits February 27, 2026 20:39
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@m13v m13v merged commit 9d68ba6 into main Feb 28, 2026
2 checks passed
@m13v m13v deleted the feat/cloud-agents-chat branch February 28, 2026 02:45
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Feb 28, 2026

Greptile Summary

Adds auto-accumulated changelog system for desktop releases and bundles in live 3D knowledge graph visualization during onboarding

Major Changes

  • Changelog auto-accumulation: GitHub Actions workflow consolidates unreleased entries into versioned releases, agents append changes to desktop/CHANGELOG.json as they work
  • Live knowledge graph during onboarding: Split-pane layout shows 3D graph building incrementally as AI discovers user information (MemoryGraphPage, OnboardingView, incremental graph updates)
  • Onboarding improvements: Added "Why?" button for permissions, name confirmation step, comprehensive Omi feature descriptions in prompt, model switch from Opus to Sonnet
  • Backend improvements: Auto-configures single_language_mode based on Deepgram multi-language support, WAL checkpoint before DB migration
  • Developer tooling: New desktop/CLAUDE.md documentation, headless advice test runner, improved run scripts

Concerns

  • Scope creep: PR title focuses on changelog but includes a major unrelated feature (knowledge graph) plus numerous other changes across 26 files (1057 insertions, 256 deletions)
  • Workflow race condition: Concurrent merges could compute identical version numbers from the same base tag
  • Missing error handling: Python script in workflow lacks error handling for malformed JSON

Confidence Score: 3/5

  • Safe to merge with minor workflow robustness concerns, but PR scope exceeds stated purpose
  • Score reflects scope creep (changelog + major knowledge graph feature bundled together), potential race condition in release workflow, and missing error handling in Python script. Individual code changes are well-implemented, but the PR bundles multiple unrelated features that should be separate.
  • Pay close attention to .github/workflows/desktop_auto_release.yml (race condition, error handling) and verify the knowledge graph onboarding feature works correctly (major UX change)

Important Files Changed

Filename Overview
.github/workflows/desktop_auto_release.yml Adds Python script to consolidate unreleased changelog entries into versioned releases; potential race condition if multiple PRs merge simultaneously
desktop/CHANGELOG.json Adds unreleased array with 3 entries for new onboarding features; also includes Unicode character normalization changes
desktop/CLAUDE.md New comprehensive documentation file for desktop project with changelog entry instructions, build workflow, and debugging guides
desktop/.claude/skills/release/SKILL.md Updated release skill to reference auto-accumulated changelog entries from unreleased array instead of manual entry creation
desktop/Desktop/Sources/Chat/ChatPrompts.swift Major onboarding prompt overhaul: adds incremental knowledge graph building, "Why?" button for permissions, Omi features description, and privacy policy context
desktop/Desktop/Sources/MainWindow/Pages/MemoryGraph/MemoryGraphPage.swift Adds addGraphFromStorage() method for incremental graph updates during onboarding with animated scene nodes and physics integration
desktop/Desktop/Sources/OnboardingView.swift Adds split layout with live 3D knowledge graph pane alongside chat during onboarding; implements real-time graph updates
desktop/Backend-Rust/src/services/firestore.rs Auto-configures single_language_mode based on Deepgram multi-language support when setting user language

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Agent completes desktop task] --> B{User-visible change?}
    B -->|Yes| C[Append to unreleased array in CHANGELOG.json]
    B -->|No| D[Skip changelog entry]
    C --> E[Commit changes]
    D --> E
    E --> F[Push to main branch]
    F --> G[GitHub Actions: desktop_auto_release.yml triggers]
    G --> H[Get latest v*-macos tag]
    H --> I[Compute next version<br/>increment patch]
    I --> J[Run Python script:<br/>consolidate changelog]
    J --> K{unreleased array empty?}
    K -->|Yes| L[Use default:<br/>Bug fixes and improvements]
    K -->|No| M[Use unreleased entries]
    L --> N[Create release entry with version + date]
    M --> N
    N --> O[Insert at releases start]
    O --> P[Clear unreleased to empty]
    P --> Q[Commit CHANGELOG.json<br/>with skip ci]
    Q --> R[Push to main]
    R --> S[Create and push git tag]
    S --> T[Codemagic builds release]
Loading

Last reviewed commit: 24208ae

Copy link
Copy Markdown
Contributor

@greptile-apps greptile-apps Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

26 files reviewed, 2 comments

Edit Code Review Agent Settings | Greptile

Comment on lines +48 to +72
python3 -c "
import json, sys

with open('desktop/CHANGELOG.json', 'r') as f:
data = json.load(f)

unreleased = data.get('unreleased', [])
if not unreleased:
unreleased = ['Bug fixes and improvements']

new_release = {
'version': '$VERSION',
'date': '$TODAY',
'changes': unreleased
}

data.setdefault('releases', []).insert(0, new_release)
data['unreleased'] = []

with open('desktop/CHANGELOG.json', 'w') as f:
json.dump(data, f, indent=2)
f.write('\n')

print(f'Consolidated {len(unreleased)} changelog entries for v$VERSION')
"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Python script lacks error handling for malformed JSON or missing keys

Suggested change
python3 -c "
import json, sys
with open('desktop/CHANGELOG.json', 'r') as f:
data = json.load(f)
unreleased = data.get('unreleased', [])
if not unreleased:
unreleased = ['Bug fixes and improvements']
new_release = {
'version': '$VERSION',
'date': '$TODAY',
'changes': unreleased
}
data.setdefault('releases', []).insert(0, new_release)
data['unreleased'] = []
with open('desktop/CHANGELOG.json', 'w') as f:
json.dump(data, f, indent=2)
f.write('\n')
print(f'Consolidated {len(unreleased)} changelog entries for v$VERSION')
"
TODAY=$(date -u +%Y-%m-%d)
python3 -c "
import json, sys
try:
with open('desktop/CHANGELOG.json', 'r') as f:
data = json.load(f)
except (FileNotFoundError, json.JSONDecodeError) as e:
print(f'Error reading CHANGELOG.json: {e}', file=sys.stderr)
sys.exit(1)
unreleased = data.get('unreleased', [])
if not unreleased:
unreleased = ['Bug fixes and improvements']
new_release = {
'version': '$VERSION',
'date': '$TODAY',
'changes': unreleased
}
data.setdefault('releases', []).insert(0, new_release)
data['unreleased'] = []
with open('desktop/CHANGELOG.json', 'w') as f:
json.dump(data, f, indent=2)
f.write('\n')
print(f'Consolidated {len(unreleased)} changelog entries for v$VERSION')
"

Comment on lines 23 to 44
@@ -43,7 +43,41 @@ jobs:
echo "New version: $VERSION"
echo "New tag : $RELEASE_TAG"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Potential race condition: if two PRs merge simultaneously, both workflows compute the same next version from the same latest tag, leading to duplicate version numbers or tag conflicts

Glucksberg pushed a commit to Glucksberg/omi-local that referenced this pull request Apr 28, 2026
## Summary
- Adds `unreleased` array to `desktop/CHANGELOG.json` for agents to
append user-facing change descriptions as they work
- GitHub Actions workflow (`desktop_auto_release.yml`) now consolidates
unreleased entries into a versioned release entry before creating the
tag
- Falls back to "Bug fixes and improvements" if unreleased is empty
- Updated `desktop/CLAUDE.md` with changelog entry instructions for
agents
- Updated release skill to reference auto-accumulated entries

## How it works
1. Agents append one-liners to `unreleased` in `CHANGELOG.json` after
completing desktop tasks
2. On merge to main, the auto-release workflow moves unreleased entries
into `releases[0]` with version + date
3. Clears `unreleased` to `[]` and commits with `[skip ci]`
4. Creates and pushes the tag — Codemagic picks up `releases[0]` as
before

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant