Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ jobs:
# Keep test in source; this job does not claim live-database coverage.
- name: Portable tests (live Antigravity discovery excluded)
run: swift test --disable-sandbox --skip 'testRealAntigravityDiscoverySmokeTest'
- name: Dedicated regression tests
run: swift test --disable-sandbox --filter 'LoomRegressionTests.*'
- name: Verify release and pages pipeline
run: |
bash scripts/verify-release-pipeline.sh
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,8 @@ jobs:
gh release download --repo "${{ github.repository }}" --pattern "appcast.xml" --dir site --clobber
fi

# 2. Download promotional demo videos from stable v1.0 release unless deliberately migrated
PROMO_RELEASE_TAG="${PROMO_RELEASE_TAG:-v1.0}"
# 2. Download promotional demo videos from the current media release (override PROMO_RELEASE_TAG when needed)
PROMO_RELEASE_TAG="${PROMO_RELEASE_TAG:-v2.0.0}"
echo "Downloading promotional videos from release ${PROMO_RELEASE_TAG}..."
for video in "Loom-Demo-16x9.mp4" "Loom-Demo-9x16.mp4"; do
echo "Fetching ${video} from ${PROMO_RELEASE_TAG}..."
Expand Down
27 changes: 27 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,33 @@ All notable changes to Loom are documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.2.0] - Unreleased

### Added
- **Session Productivity Quick Actions**: Safe, local, read-only utilities directly accessible on session cards: Focus Terminal/IDE host application, Copy Process PID, Copy Repository Path, Copy Provider Session ID, and Reveal in Finder.
- **Session Search & Filter Bar**: Real-time filtering bar with search input and filter chips (`All`, `Needs Attention`, `Working`, `Recent`) without disrupting scroll state or background polling.
- **Enhanced Provider Diagnostics**: Expanded health disclosure displaying discovery duration in milliseconds, workspace resolution ratios, process count breakdowns, and distinct isolation between process discovery errors and quota IPC failures.
- **Configurable Menu Bar Status Modes**: Added `Icon Only` (default), `Active Sessions count` (e.g. `⎇ 2`), and `Lowest Quota percentage` (e.g. `⎇ 18%`) status item modes in Settings, designed with minimal width for notched MacBook displays.
- **Privacy Quick Action Toggle**: One-click popover header toggle to immediately flip the `hideProjectPaths` privacy setting without opening Settings.
- **Notification History & Audit Log**: Bounded, local history log in Settings (capped at 100 recent events) storing event types, timestamps, and delivery status without sensitive transcripts or credentials.

## [1.1.0] - Unreleased

### Added
- **Liquid Glass Visual Redesign**: Native macOS 26+ popover UI adopting Apple's Liquid Glass styling (`.glassEffect` and `GlassEffectContainer`) with graceful, high-craft material fallbacks (`.ultraThinMaterial`) on macOS 14 and 15.
- **Unified Segmented Navigation**: Integrated native segmented control across `Sessions`, `Usage`, and `Storage` views, eliminating competing navigation bars.
- **Attention-First Session Prioritization**: Deterministic ordering surfacing sessions requiring human decision-making (`waiting` for user input, `failed`) at the top of the popover.
- **Collapsible Recent Sessions**: Completed tasks tuck cleanly into a collapsible disclosure section, eliminating popover clutter.
- **Truthful Quota Pacing & Reset Timestamps**: Quota velocity indicators based strictly on verifiable delta observations and window duration, accompanied by exact reset timestamps when reported by providers.
- **Native macOS Notifications**: Comprehensive desktop alerts via `UNUserNotificationCenter` for quota exhaustion thresholds (15% and 5% remaining), verified quota replenishment, and confirmed session transitions (`waiting`, `finished`, `failed`).
- **Persistent Notification Deduplication**: Cross-restart deduplication keyed by provider, bucket, window ID, and rule to prevent alert storms and duplicate notifications.
- **Notification Privacy Concealment**: Automatically conceals repository filesystem paths in notification banners and logs when `hideProjectPaths` is active.
- **Contextual Notification Permissions**: Seamless permission handling requesting macOS authorization only when notifications are enabled in Settings, complete with a test notification affordance.

### Changed
- **Decoupled Polling Architecture**: Separated fast in-memory process liveness sweeps (~5–10s) from slow provider quota IPC queries (~30–120s), eliminating false-positive waiting states caused by inactivity timeouts.
- **Updated Provider Registration Documentation**: Formally aligned architecture and product documentation with standard launch registration of OpenAI Codex, Anthropic Claude Code, and Google Antigravity.

## [1.0] - 2026-10-17

### Added
Expand Down
10 changes: 10 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,16 @@ swift test --disable-sandbox --skip 'testRealAntigravityDiscoverySmokeTest'

The live Antigravity discovery smoke test (`testRealAntigravityDiscoverySmokeTest`) requires a local Antigravity installation and SQLite database, and is excluded in environments lacking local agent state. The SIGTERM-resistant cancellation regression test (`testDefaultCodexAppServerTransportSigtermResistantCancellation`) is verified passing and is included in portable test runs. Running `swift test` locally without skips executes the full test suite. Some live usage checks additionally require `ENABLE_LIVE_SMOKE_TESTS=1`; never describe a skipped check as a pass. Remote CI execution has not yet been verified.

### Running and Adding Regression Tests

Regression tests live in `Tests/LoomRegressionTests/` and run under target/scheme `LoomRegressionTests`:

- **CLI**:
- `swift test --filter 'LoomRegressionTests.*'`
- `xcodebuild test -project Loom.xcodeproj -scheme LoomRegressionTests -destination 'platform=macOS'`
- **Xcode**: Run the `LoomRegressionTests` scheme (`⌘U`), or select individual regression tests in Xcode's Test Navigator (`⌘6`). The primary `Loom` scheme also includes this target in its Test action.
- **Adding new tests**: Add new regression cases to `Tests/LoomRegressionTests/` (or extend `LoomRegressionTestSuite.swift`). Maintain the canonical file header (`AGENTS.md`) and import `@testable import LoomCore`.

For menu changes, run `bash scripts/verify-menu-sizing.sh`, then open the packaged app and inspect narrow layouts, long lists, empty/error states, tab switches and repeated refresh. Report what you actually ran and any gaps.

Parser changes should include synthetic fixtures proving normalization and malformed/missing data handling. Never commit real transcripts, account identifiers, credentials, databases, or full configuration files. Use generic paths and scrub screenshots. Preserve errors rather than suppressing them to make tests pass.
Expand Down
Loading
Loading