release: tag v0.2.1 prep — CHANGELOG, pyproject author, tag-triggered release workflow
CHANGELOG.md
- Promote the prior "Unreleased — Phase J" section to "[v0.2.1] — 2026-05-19".
- Add a "Highlights since v0.1.0" series summary covering the
Anthropic SDK migration, Debt-1 (schema codegen drift gate),
Debt-2 (capability-token auth), F19 correlation IDs, Phase I
performance, Phase J UX polish — with file-path references so the
log doubles as a tour of the codebase.
- Engineering signals shipped this series: 56/56 findings, four
required CI gates, 124 / 1,334 / 17 test counts, atomic-write
retrofit, multi-layer kill chain, full OSS meta layer.
cortex/pyproject.toml
- Authors: "Cortex Team" → "Steven Wang <wangchuyue888@gmail.com>".
- Maintainers entry added.
- Keywords expanded with anthropic / claude / mediapipe / macos /
signal-processing so PyPI search surfaces match the project.
- [project.urls] section: Homepage, Repository, Documentation
(wiki), Changelog, Issues, Releases — these light up as link
buttons on PyPI and on GitHub's repo sidebar.
.github/workflows/release.yml
- Triggers on `v*` tag push (or workflow_dispatch with a tag input).
- Three jobs:
ci-gate runs ruff + mypy --strict + codegen drift + pytest
on macos-14 (mirrors the merge-gate exactly so a
release can never ship a broken main).
build-dmg runs build_macos_app.sh on macos-14 with optional
CORTEX_SIGN_IDENTITY + CORTEX_NOTARIZE_PROFILE
secrets; uploads the DMG as an artifact (14-day
retention).
attach-to-release downloads the artifact and attaches it to
the GitHub release via softprops/action-gh-release.
- For this v0.2.1 release the DMG is uploaded manually because
CI signing identities aren't yet configured. The workflow is in
place so v0.2.2+ can ship hands-free.
audit Phase-J: a11y sweep on remaining surfaces + CHANGELOG
Closes Phase J with a final accessibility sweep and the user-facing
release-boundary CHANGELOG.
A11y sweep additions:
* Segmented-control tab buttons in the dashboard now carry an
explicit accessible name ("Dashboard tab" / "Advanced tab") and a
long-form description for VoiceOver. The audit-w2 reconciliation
covered the rest of the dashboard; the segmented control was the
one remaining navigation surface without semantic context.
* ``setFocusPolicy(Qt.FocusPolicy.StrongFocus)`` is now explicit on:
the segmented-control buttons, the dashboard Connect + Stop
buttons, the connections-panel back button, and every
``_primary_button`` on the connections panel. QPushButton's default
on macOS Qt sometimes inherits ``WheelFocus`` which silently
excludes the button from the keyboard tab cycle.
CHANGELOG.md (new, removed from .gitignore at the Phase J boundary)
documents:
* The five user-facing additions (onboarding refinement, error toast,
empty states, overlay micro-interactions, a11y sweep).
* Reduce Motion support on the overlay.
* Four residual a11y items deliberately left for a future polish
pass: VoiceOver rotor item announcements on the biometrics
numerics, High-Contrast mode palette, live-region announcements on
state transitions, Reduce Motion gating on non-overlay tweens.
All four are P2/P3 — none of them block this release.
Verification: the full unit suite under offscreen Qt is green —
``QT_QPA_PLATFORM=offscreen pytest cortex/tests/unit/
--ignore=cortex/tests/unit/test_desktop_shell.py`` reports 1233
passed, 1 skipped (the skip is pre-existing). The new Phase J test
files (test_dashboard_toast, test_dashboard_empty_state,
test_onboarding_hints, test_overlay_animation) add 26 cases, all
green.
Files: cortex/apps/desktop_shell/{dashboard.py, connections.py};
CHANGELOG.md (new); .gitignore (untrack CHANGELOG.md).
chore: untrack dev-only files — CLAUDE.md, CHANGELOG.md, vscode compiled output
chore: public readiness — remove personal data, untrack artifacts, rewrite setup docs
- Remove UPenn credentials from config defaults, .env.example, scripts
- Remove hardcoded absolute paths from .cortex_launcher.c (now derives from executable location)
- Reset native_host.py shebang to generic (patched at install time)
- Untrack build artifacts: .plasmo/, CortexDaemon.app/, .vsix, IDE configs
- Comprehensive .gitignore update
- Fixed extension manifest key for deterministic ID (no --extension-id needed)
- install_native_host auto-detects all Chromium browsers + existing extension IDs
- Rewritten README with 7-step setup guide, 3 LLM options, troubleshooting
- Rewritten setup.md with correct order and complete instructions
- Fixed API endpoint docs, test counts, CHANGELOG
docs: add CHANGELOG.md and update README with honest description
- CHANGELOG.md documents all Wave 1/2/3 changes with finding IDs
- README.md now includes What To Expect section from honest audit