forked from Manuel/meeting-assistant
66 lines
7.7 KiB
Markdown
66 lines
7.7 KiB
Markdown
# macOS main synchronization — 2026-10-03
|
|
|
|
## Candidate and scope
|
|
|
|
Repository: `/Users/dh/Documents/DanielsVault/_ops/meeting-assistant`.
|
|
Authorized delivery: fetch remote main, merge into `codex/macos-support`, deploy and verify on this Mac. No main push or OpenSpec archive.
|
|
|
|
Old branch HEAD: `bf6e1e7560c6bdfcebf69ad0e3240b4de647adb6`.
|
|
Fetched and rechecked remote main: `7b2bcd36310ae6434a4ee6eeb3a47b6d1d431df4`.
|
|
The initial worktree was clean. Upstream changes are included unchanged except conflict resolution; prior macOS features are preserved.
|
|
|
|
Substantive review covers the owned merge resolutions and required portable interface adaptation, not an independent review of all upstream or earlier branch features. Reviewed current content manifest:
|
|
|
|
| File | SHA-256 |
|
|
| --- | --- |
|
|
| `MeetingAssistant/Program.cs` | `1165364aeb846fc164cc875146b8fd70636dbc2c51e47ae3a373dab75330ce2a` |
|
|
| `MeetingAssistant/MacOs/MacOsWorkflowRulesEditorWindowService.cs` | `b008ef5893dd1caf20f504e3a9bde390dd8f0e4fe6c31f9725d26fd5007b6e23` |
|
|
| `MeetingAssistant.Tests/MacOsDesktopControlManifestTests.cs` | `3ff6e8c73830fb350c6f7d89e550a84eacef6acb3c363407ab8eb8a8c2f0dfe5` |
|
|
| `docs/meeting-workflow-engine.md` | `9792a398f387a96a4fe1a02bfe13f19a9ca30cc869bbbe393f7341e0cbdb3a9e` |
|
|
| `openspec/changes/add-macos-desktop-controls/specs/meeting-session/spec.md` | `5b730cd96bed5e7dff87690272d5755d8b9d0ef5bcc78a674c6688e152ac635d` |
|
|
| `openspec/changes/add-macos-desktop-controls/tasks.md` | `877304a11600e513630d495882564dfd083825f163a4c53574f76f3fd2d1f42e` |
|
|
|
|
This receipt and generated logs are evidence, excluded from the reviewed behavioral content identity.
|
|
|
|
## Requirements and verification
|
|
|
|
- Preserve macOS recording/menu/calendar/screenshot/editor registrations: resolved composition inspected; existing native registration and manifest tests pass. Upstream no-op approval dependency is present without replacing real macOS providers.
|
|
- Reject unavailable automatic approvals without changing the interactive conversation: `MacOsApplicationDeclinesUnavailableAutomaticApprovals` calls the registered approval service through its public interface and observes `false`.
|
|
- Never silently discard an automatic workflow prompt: `AutomaticWorkflowChangeCannotSilentlyLoseItsPromptOnMacOs` observes `PlatformNotSupportedException`. A compiled red run first reported actual `NotImplementedException`; the subsequent implementation passes.
|
|
- Existing interactive editor remains available: existing `MacOsApplicationRegistersARealInteractiveAgentWindow` passes; `Show()` is unchanged.
|
|
- Full portable regression suite: **576 passed, zero failed**, on this Mac. Command: `dotnet test MeetingAssistant.Tests/MeetingAssistant.Tests.csproj -f net10.0 -c Release -p:EnableWindowsTargeting=true --logger 'trx;LogFileName=macos-main-sync-green.trx'`. Raw red/green receipts: `MeetingAssistant.Tests/TestResults/macos-main-sync-{red,green}.trx` (generated, not committed).
|
|
- Strict OpenSpec validation passed for `add-macos-desktop-controls`, `add-summary-agent-requests`, and `prompt-for-new-microphone`. `git diff --check` passed.
|
|
|
|
The new upstream approval notifications are Windows-only. On portable hosts approval requests are declined as permitted by the upstream notification-unavailable scenario. No new native notification feature is claimed.
|
|
|
|
## Standards and sequential review
|
|
|
|
Rules: repository `AGENTS.md`, the active macOS desktop-control scenario, and upstream automatic approval unavailability requirements.
|
|
Coverage: public-interface tests/duplication → DRY; coherent dependencies, explicit platform failure, lifecycle preservation, source ownership → SOLID; minimal sync scope, naming/readability, spec/docs/task consistency → KISS. Typechecking and whitespace are covered by build/tests and diff check.
|
|
|
|
- DRY `/root/review_dry`: clean; verified all six manifest hashes and surrounding composition/approval code. No duplication needing consolidation. Public-interface tests satisfy repository guidance.
|
|
- SOLID `/root/review_solid`: clean; verified all six hashes, interface/callers and native registrations. Explicit unsupported handoff is caught by its caller; normal interactive editor is unchanged. No abstraction needed.
|
|
- KISS `/root/review_kiss`: clean; verified the same six hashes at merge commit `fc0edd812dd22a03e6eb5e3b3bfdd0fa080fc010`. Inspected nearby interfaces/callers and raw TRX evidence. Minimal structure, clear names, consistent spec/docs/tasks; no binding violations or material risks.
|
|
|
|
## Delivery and runtime evidence
|
|
|
|
State: technically complete for the reviewed code; final production-configuration restoration accompanies the evidence-only closeout commit.
|
|
The existing updater can skip managed-only bundle changes. This deployment must replace the complete signed bundle, not just the loose runtime.
|
|
Recoverable backup: `/Users/dh/Library/Application Support/MeetingAssistant/backups/main-sync-20261003.DtKbYS`.
|
|
Isolated test/evidence directory: `/private/tmp/meeting-assistant-main-sync.gABedp`.
|
|
Configuration and credentials remain external; a temporary root-level smoke overlay is restored byte-for-byte after testing. No genuine meeting artifacts are test cleanup targets.
|
|
|
|
### Operational verification
|
|
|
|
- The installed merge build reports `1.0.0+fc0edd812dd22a03e6eb5e3b3bfdd0fa080fc010`; staged and installed runtime SHA-256 matched `71b4b2495fcaa5bf790712586073f88d1b6e1dc5fdd37a4893f1623f47d554d5`.
|
|
- `codesign --verify --deep --strict` passed for staged and installed bundles. The designated requirement remains `identifier "cloud.schweigert.meeting-assistant"`, retaining the stable installed privacy identity.
|
|
- `/health` returned service `meeting-assistant`, status `ok`; `/diagnostics/platform-capabilities` reported the actual macOS calendar, screenshot and editor implementations. Process inspection confirmed the installed bundle runtime and macOS menu-bar helper.
|
|
- The native integrations helper `self-test` returned `status: ok` with calendar, prompt, screenshot and crop features. This packaging check does not itself prove all permissions or UI interactions.
|
|
- First successful real test recording: `20261003-1024`, 77 seconds, system audio through the installed helper and Azure Speech to a transcript and completed LiteLLM summary. The long synthetic utterance was only partly recognized; no perfect recognition claim is made.
|
|
- Stronger short-utterance check: `20261003-1027`, 26 seconds. All four synthetic sentences were transcribed, including `Die Aufnahme endet jetzt mit dem Wort Kaffeetasse.` The summary includes the identifier and recording end. Assistant context reached `state: finished`; `/recording/status` returned `isRecording:false,state:0`.
|
|
- Agent-runnable assertion: `/private/tmp/meeting-assistant-main-sync.gABedp/verify-smoke.sh` returned `PASS: real system audio -> Azure transcript including end marker -> LiteLLM summary -> finished/idle`.
|
|
- Evidence: `vault/Meetings/Transcripts/20261003-1027-transcript.md`, `vault/Meetings/Summaries/20261003-1027-summary.md`, and `runtime-smoke.log` inside the isolated test directory above. Both live native audio helpers produced PCM; microphone gain was zero to avoid recording ambient conversations, so actual spoken microphone transcription was not tested.
|
|
- An initial test-start timeout was caused by the smoke setup's ten-minute note-opening delay, before capture began. The overlay was corrected to zero and the two real recordings above completed. This was not a runtime audio failure of the new build.
|
|
|
|
The closeout commit changes only this evidence record; the reviewed behavioral manifest remains unchanged. Its rebuilt bundle is installed while idle, production env is restored exactly from the preserved original, and final health/status/signature/provenance checks are performed before handoff. No remote push is included in this request.
|