Skip to content

fix: 3-way-audit P1 gaps (apps fencing, safari macOS 26, HTTP crash, notarize, docs)#305

Merged
heznpc merged 1 commit into
mainfrom
audit-p1-fixes
Jun 17, 2026
Merged

fix: 3-way-audit P1 gaps (apps fencing, safari macOS 26, HTTP crash, notarize, docs)#305
heznpc merged 1 commit into
mainfrom
audit-p1-fixes

Conversation

@heznpc

@heznpc heznpc commented Jun 17, 2026

Copy link
Copy Markdown
Owner

A 3-way completeness audit (Claude existing session + Claude new session + Codex new session) surfaced these P1 gaps. This PR closes all 5 — notably one was the headline finding from each independent run.

  • apps egress fencingcalendar_week_view / music_player / timeline_today returned external Apple content (event titles, reminder names, track metadata) to the model UNFENCED. Now fenced (untrusted markers + _meta); widgets render from raw structuredContent.
  • safari macOS 26 — a module-level brokenOn:[26] skip-dropped ALL 12 Safari tools on macOS 26, though only add_bookmark is broken (and it already self-gates at the tool level). Removed it → the 11 working tools register on 26.
  • HTTP post-bind crash — the HTTP server had no error listener after listening, so a post-bind socket error crashed the process. Added a permanent handler.
  • notarize .appex entitlements — re-signing the widget extension dropped its entitlements (codesign --verify still passed). Now extracted before strip + re-applied; the --deep outer sign (which re-stripped them) is removed.
  • README .mcpb claim — README said the .mcpb/npm tarball ship the Swift bridge; they don't. Corrected (source build / bundled app only).

Verified: typecheck, full suite (2006 tests), gen/manifest checks, mcp:validate, npm audit --audit-level=high all green. New behavioral tests for apps fencing + safari-registers-on-26 (manifest-driven). Adversarially verified, including an empirical notarize entitlement-survival run.

Not closed here (needs real macOS + Apple signing): live notarize submission, Siri/AppIntents runtime registration. P2 audit items (dual-provider guard, audit tail-truncation anchor, FM runtime test, count-docs reconciliation, app/FM CI, etc.) are a separate follow-up.

…rash, notarize, docs)

- apps: fence calendar/music/timeline app-tool egress; widgets read raw structuredContent
- safari: drop module-level brokenOn:[26] — only add_bookmark broke, 11 tools were lost on 26
- http-transport: permanent error handler after listen so a post-bind socket error no longer crashes
- notarize-app.sh: preserve .appex entitlements across re-sign; drop --deep that stripped them
- README: stop claiming .mcpb/npm ship the Swift bridge (source build / bundled app only)
- tests: apps egress fencing (behavioral) + safari-registers-on-26 (manifest-driven)
- adversarially verified + empirical notarize entitlement-survival run; suite 2017 green
@heznpc heznpc marked this pull request as ready for review June 17, 2026 21:40
@heznpc heznpc merged commit a5e2170 into main Jun 17, 2026
4 checks passed
@heznpc heznpc deleted the audit-p1-fixes branch June 17, 2026 21:40
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