Commit Graph
2924 Commits
Author SHA1 Message Date
ciregenz b047e31abd [eric] agents: a refusal guard may not eat a real answer; wording alone never destroys content (ENG-387) 2026-08-23 15:27:36 -07:00
ciregenz 8ed2330c76 [eric] agents: the two guards that could fail silently now declare themselves (ENG-388, ENG-386) 2026-08-23 13:19:26 -07:00
ciregenz d4bfc122f0 [eric] agents: OSW_FAULT fires real provider failures on demand so the guards get drilled, not hoped for 2026-08-23 11:31:58 -07:00
ciregenz 7e4bb7a43b [eric] agents: OSW_COMPACT_CEILING_TOKENS makes the mid-turn breaker drillable without a 180K turn 2026-08-22 21:55:05 -07:00
ciregenz 690da2940b [eric] release: bump to 1.7.9-exp.1 2026-08-21 18:46:14 -07:00
ciregenz 628f6e57a0 [eric] dictation: the Accessibility check waits on the Input Monitoring request by callback, not line order (rdar://7381305) 2026-08-21 15:52:59 -07:00
ciregenz 07566a77e5 [eric] dictation: ask for Input Monitoring before any Accessibility check, or macOS never shows the prompt (rdar://7381305) 2026-08-21 15:50:14 -07:00
ciregenz 89f7621140 [eric] dictation: a denied watcher stays listed in the Input Monitoring pane instead of vanishing (ENG-360) 2026-08-21 14:45:26 -07:00
ciregenz 1947238dec [eric] dictation: using dictation asks for the fn grant every time, not once per launch (ENG-360) 2026-08-21 14:30:31 -07:00
ciregenz 76ef467a6e [eric] tests: bound the relay assertion on the region, not a magic char count 2026-08-21 14:16:01 -07:00
ciregenz 4be3f0fb7e [eric] dictation: log the trigger path so a dead key can be told from an unpressed one 2026-08-21 14:15:01 -07:00
ciregenz 35a4b18647 [eric] dictation: fn recovers without a relaunch, and no OS is left with a silent dead key (ENG-360) 2026-08-21 13:51:09 -07:00
ciregenz 5e2fe299a3 [eric] dictation: a live fn watcher now MEANS a working tap, and a dead fn key says so (ENG-360) 2026-08-21 13:20:57 -07:00
ciregenz 05cd0f1990 [eric] agents: drop an unused import from the aging recap 2026-08-21 11:51:14 -07:00
ciregenz df31e8d5d2 [eric] tests: the suite can never resume real chats with live credentials (ENG-388) 2026-08-21 11:51:14 -07:00
ciregenz 6cc705c0ee [eric] models: only the catalog retires a pinned model, so a router bounce cannot move a chat vendors (ENG-386) 2026-08-21 11:51:14 -07:00
ciregenz 2c8ae9a3b8 [eric] agents: extraction-shaped handoffs and relayed refusals never reach the subscription lane (ENG-387) 2026-08-21 11:51:14 -07:00
ciregenz 2583c80f6c [eric] agents: a session about to continue reports running, and releases it if the continuation dies (ENG-390) 2026-08-21 11:51:14 -07:00
ciregenzandClaude Opus 5 771a7243b0 [eric] agents: a silent quit rebuilds only when the rebuild would buy something (ENG-354)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018foyDoK19jjbYdudfzQVkZ
2026-08-21 10:29:56 -07:00
ciregenzandClaude Opus 5 da18c0a5ef [eric] agents: the Resume chip is a human, so a stopped chat honours it (ENG-384)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018foyDoK19jjbYdudfzQVkZ
2026-08-21 08:07:55 -07:00
ciregenzandClaude Fable 5 f3e7f7b1af [eric] release: bump to 1.7.8-exp.21
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En8dRGsJPLrJCQBEkTH4Mp
2026-08-21 00:20:05 -07:00
ciregenzandClaude Fable 5 de70e9fe79 [eric] agents: a subscription-lane policy block fails over to the user's own API key (ENG-383)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En8dRGsJPLrJCQBEkTH4Mp
2026-08-21 00:20:05 -07:00
ciregenzandClaude Fable 5 42e4f9116b [eric] agents: transport heals respawn the CLI on the same transcript instead of rebuilding it (ENG-382)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En8dRGsJPLrJCQBEkTH4Mp
2026-08-21 00:20:04 -07:00
ciregenzandClaude Fable 5 a4be8c469f [eric] agents: the recap carries no model text, nudges are short and unlabeled (ENG-358)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En8dRGsJPLrJCQBEkTH4Mp
2026-08-21 00:20:04 -07:00
ciregenzandClaude Fable 5 295a7b52e2 [eric] agents: a policy block ratchets the recap down instead of bricking the chat (ENG-358)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En8dRGsJPLrJCQBEkTH4Mp
2026-08-20 23:44:44 -07:00
ciregenzandClaude Fable 5 e8dc7c5fdd [eric] import: only markdown becomes a bare skill, and skills always confirm (ENG-376)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En8dRGsJPLrJCQBEkTH4Mp
2026-08-20 22:22:49 -07:00
ciregenzandClaude Fable 5 5e0e89abe1 [eric] agents: a fresh heartbeat extends the unwedger to a 300s hard ceiling (ENG-368)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En8dRGsJPLrJCQBEkTH4Mp
2026-08-20 22:22:49 -07:00
ciregenzandClaude Fable 5 e90abb7bfc [eric] system: watchdog deaths blame no workflow, card tails not owed, 20s probe (ENG-366)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En8dRGsJPLrJCQBEkTH4Mp
2026-08-20 22:22:49 -07:00
ciregenzandClaude Fable 5 1f1ce09d7a [eric] agents: 401 needs auth context; answers can be blocks; quits forgiven (ENG-364/365)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En8dRGsJPLrJCQBEkTH4Mp
2026-08-20 22:22:49 -07:00
ciregenzandClaude Fable 5 74d70de13f [eric] workflows: a schedule switch never lies; writes roll back or serialize (ENG-375)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En8dRGsJPLrJCQBEkTH4Mp
2026-08-20 22:22:48 -07:00
ciregenzandClaude Fable 5 fa9196c8af [eric] signin: live port hand-off, stalled-wait retry, openswarm:// registered (ENG-381)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En8dRGsJPLrJCQBEkTH4Mp
2026-08-20 22:22:48 -07:00
ciregenzandClaude Fable 5 3c24c10cbd [eric] voice: prefetch the dictation model at boot so the first press never waits (ENG-380)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En8dRGsJPLrJCQBEkTH4Mp
2026-08-20 22:22:48 -07:00
ciregenzandClaude Fable 5 6c14b2d65b [eric] dictation: no cursor means your composer, not a new chat (ENG-378)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En8dRGsJPLrJCQBEkTH4Mp
2026-08-20 22:22:48 -07:00
ciregenzandClaude Fable 5 326574b995 [eric] chat: the transcript follows the stream until the USER scrolls away (ENG-379)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En8dRGsJPLrJCQBEkTH4Mp
2026-08-20 22:22:48 -07:00
ciregenzandClaude Fable 5 0ccc3af040 [eric] canvas: a resize ends when the hand lets go, webview or not (ENG-377)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En8dRGsJPLrJCQBEkTH4Mp
2026-08-20 22:22:48 -07:00
ciregenz 8e0d10f49b [eric] release: publish.sh sources gitignored .release.env (Apple + castlabs EVS) so a signed build never stalls on missing creds 2026-08-20 20:52:48 -07:00
ciregenz 672ba51592 [eric] import: a dropped screenshot no longer strands the Drop overlay; unsupported files are told so, and a file:// drop can never replace the app v1.7.8-exp.20 2026-08-20 19:39:33 -07:00
ciregenz 3235324122 [eric] agents: a user's Stop or Close is final; no watchdog resend, disk reload, read, or late-booting child revives the card 2026-08-20 19:39:33 -07:00
ciregenzandClaude Opus 5 6edce86d68 [eric] browser: children survive turn 1 on every lane, never report "done" for nothing, tables render first try
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014wtspwSFzZmjCx9UNPAorQ
2026-08-20 18:16:51 -07:00
ciregenz b14791074f Revert "[eric] agents: Stop disarms every queued injection, so a stopped agent can never resurrect"
This reverts commit 332ae7d183.
2026-08-20 16:13:50 -07:00
ciregenz 10bca6ba17 Revert "[eric] browser: a card the renderer parked is slow, not dead; parallel agents no longer ghost"
This reverts commit 6ed6206c7b.
2026-08-20 16:13:50 -07:00
ciregenzandClaude Opus 5 6ed6206c7b [eric] browser: a card the renderer parked is slow, not dead; parallel agents no longer ghost
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014wtspwSFzZmjCx9UNPAorQ
2026-08-20 15:50:55 -07:00
ciregenzandClaude Opus 5 332ae7d183 [eric] agents: Stop disarms every queued injection, so a stopped agent can never resurrect
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014wtspwSFzZmjCx9UNPAorQ
2026-08-20 15:50:55 -07:00
ciregenzandClaude Opus 5 ea04b1da11 [eric] agents: one provider verdict per ask, and a spent plan is never sold as a short wait
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014wtspwSFzZmjCx9UNPAorQ
2026-08-20 15:08:12 -07:00
ciregenzandClaude Opus 5 7c04c755ae [eric] agents: an invisible thinking pill no longer breaks the repeat-card dedup
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014wtspwSFzZmjCx9UNPAorQ
2026-08-20 12:32:14 -07:00
ciregenzandClaude Opus 5 6f313a445c [eric] settings: the disconnect spinner always releases, even when the refresh throws
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014wtspwSFzZmjCx9UNPAorQ
2026-08-20 12:22:34 -07:00
ciregenzandClaude Opus 5 e5e8da37ac [eric] agents: a provider's error never reaches the user as the agent's own words
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014wtspwSFzZmjCx9UNPAorQ
2026-08-20 12:22:34 -07:00
ciregenzandClaude Opus 5 18b83d9697 [eric] build: the signing preflight must not assume a keychain exists
The pin added earlier read the local keychain unconditionally, which was right
for publish.sh and wrong for release-macos.yml: on CI the cert arrives as a
base64 .p12 in CSC_LINK and electron-builder imports it into a temporary
keychain LATER than this preflight runs, so the probe would have found nothing
and aborted every CI mac build before it started. Fixed by branching on where
the cert actually comes from -- keychain locally, the .p12 itself on CI -- and
running the profile check against whichever cert that resolves to, since both
sources can drift from the embedded profile.

Verified with controls on both paths: the .p12 reader returns the true SHA-1 of
a synthetic cert and returns nothing (rather than a bogus hash) under a wrong
password, and the local path still passes against the live cert and profile.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014wtspwSFzZmjCx9UNPAorQ
2026-08-20 11:49:01 -07:00
ciregenzandClaude Opus 5 00e4336b71 [eric] build: rebind the embedded profile to the live signing cert
The profile shipped with the app listed only the certificate whose private key
was lost with the old Mac, so it would have signed the new build without
complaint and then dropped keychain-access-groups at runtime, taking passkeys
and Touch ID with it. Regenerated against the cert we can actually sign with;
the preflight added alongside it now refuses any build where the two disagree.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014wtspwSFzZmjCx9UNPAorQ
2026-08-20 11:40:00 -07:00
ciregenzandClaude Opus 5 e15b0dc8a1 [eric] build: prove the signing identity before packing, not after
find-identity reports five entries all named "Developer ID Application: Haik
Decie (Y26NUZH4NG)": one live cert and four copies of the one whose private key
died with the old Mac. The dead copies still report valid and only fail at the
moment they are asked to sign, so auto-discovery was a coin flip between a real
build and a crash forty minutes into packing a 4.8 GB .app. Pin by SHA-1, then
spend one scratch signature proving the key is actually usable.

The profile check is the same lesson applied to a quieter failure. entitlements
request keychain-access-groups, which macOS honors only when the embedded
profile lists the very cert that signed the app. A profile issued for the
previous cert signs without one complaint and then loses passkeys and Touch ID
at runtime: a green build that ships broken. Verified with both controls, the
old profile fails against the new cert and passes against its own.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014wtspwSFzZmjCx9UNPAorQ
2026-08-20 11:36:34 -07:00