ZacharyZhang-NY
2df921ca88
refactor(agents): share leadership role detector, use word-boundary match
...
P2-23: 'lead' in system-prompt.ts matched 'cleaner' / 'leaderboard' via
substring .includes(). Hoist LEADERSHIP_ROLE_KEYWORDS into a shared
agent-role-helpers.ts module; tokenize input on non-alphanum to require
whole-word match.
P3-54: Same keyword list was duplicated in automation-skills with drift
(missing 'ceo', different members). Both sites now call through the
shared helper.
2026-04-16 22:57:35 -04:00
ZacharyZhang-NY
ba6ba8360b
docs(budget): clarify policy.amount<=0 disables the rule
2026-04-16 22:57:05 -04:00
ZacharyZhang-NY
f468f7c238
fix(prompt): use UTC day-of-week to match UTC date/time stamp
...
P2-24: now.getDay() returns local time weekday but the stamp reads
'UTC', producing off-by-one-day errors near UTC midnight. Switch to
now.getUTCDay().
2026-04-16 22:56:54 -04:00
ZacharyZhang-NY
0706ad78bb
refactor(browser-manager): hoist resolvedRoot out of screenshot filter chain
2026-04-16 22:56:46 -04:00
ZacharyZhang-NY
4000854b69
fix(heartbeat): remove silent-default try/catch around getHeartbeatPolicy
...
P2-35: The policy row is the gate that decides whether the agent runs;
pretending cooldown is 10s when the read fails hides data corruption.
db.getHeartbeatPolicy already supplies field-level defaults from policy
JSON — and the only reason to throw here is 'agent not found', which
is already impossible because the caller just loaded db.getAgent.
2026-04-16 22:56:43 -04:00
ZacharyZhang-NY
fc47b60d1b
refactor(approval-policy): normalize decisionNote into single local
2026-04-16 22:56:34 -04:00
ZacharyZhang-NY
2deaa0d8b8
feat(automation): add per-action zod schemas for config validation
...
P2-29: JSON.parse(actionConfigJson) with blanket '(config.x as string)'
coerced malformed config to placeholder values silently (e.g. numeric
priority landed as 'medium'). Introduce parseActionConfig(action, json)
backed by per-action zod schemas in automation-action-schemas.ts.
Validation failures throw, surfaced by evaluateAutomationRules' logger
+ execution recorder. Individual case branches keep existing default
semantics for optional fields.
2026-04-16 22:56:18 -04:00
ZacharyZhang-NY
6429c76ac7
fix(run-housekeeping): gate auto knowledge_base writes on task type or department
2026-04-16 22:56:16 -04:00
ZacharyZhang-NY
1b76a51894
perf(useUIController): hoist page/panel transition objects to module scope (P2-32)
...
Stable refs across renders eliminate unnecessary motion prop diffing.
2026-04-16 22:56:14 -04:00
ZacharyZhang-NY
ca936aabe6
dashboard: extract AttentionRow, cap stagger at 8, limit pulse animation to first 2 rows (P1-15, P2-44, P2-47)
2026-04-16 22:56:09 -04:00
ZacharyZhang-NY
0845187672
refactor(sidebar): group nav into sidebarGroups instead of slice(0,3)+slice(3) (P2-27)
...
Move Core vs Collaborate grouping from implicit array index to explicit
sidebarGroups NavGroup[] structure surfaced from useUIController.
2026-04-16 22:55:58 -04:00
ZacharyZhang-NY
32687033fc
build(mac-sign): remove codesign retry loop, let it crash (P3-29)
2026-04-16 22:55:35 -04:00
ZacharyZhang-NY
9a5cdad86e
fix(db): use single timestamp in markRefreshed + recordAutomationExecution (P1-23, P3-46)
2026-04-16 22:55:33 -04:00
ZacharyZhang-NY
c93b28925b
build(postinstall): fail loud when electron name patch errors (P3-28)
2026-04-16 22:55:32 -04:00
ZacharyZhang-NY
08968e8331
build(generate-icons): exit with clear error on non-darwin (P3-27)
2026-04-16 22:55:30 -04:00
ZacharyZhang-NY
a2ceba5c33
build(scripts): inline vitest invocation and remove run-vitest wrapper (P3-25)
2026-04-16 22:55:16 -04:00
ZacharyZhang-NY
7ba19fab77
fix(db): validate backup schema version + recover db on restore failure (P1-21, P1-22)
2026-04-16 22:55:05 -04:00
ZacharyZhang-NY
1f660e79b8
build(release-local): derive docker volume name from rootDir hash (P2-22)
2026-04-16 22:55:00 -04:00
ZacharyZhang-NY
d154b45741
build(build-desktop): remove EBUSY cleanup retry loop, let it crash (P2-21)
2026-04-16 22:54:57 -04:00
ZacharyZhang-NY
ed2f467e4e
build(scripts): rename build:all to build:current to match semantics (P2-20)
2026-04-16 22:54:54 -04:00
ZacharyZhang-NY
5feeb96522
fix(browser-manager): enforce 5min per-action timeout with cancellation path
2026-04-16 22:54:53 -04:00
ZacharyZhang-NY
b6e1756f1c
refactor(CommandPaletteView): extract PaletteResultSection, closeAndReset (P1-23, P3-49, P3-50)
...
Five near-identical 25-line entity result blocks collapse into one
PaletteResultSection. Extract closeAndReset() callback used in 5 places.
Drop dead fallback: runs.find(...)?.id.slice(0,8) === run.id.slice(0,8).
2026-04-16 22:54:53 -04:00
ZacharyZhang-NY
3c8a593be7
docs(electron-vite): explain why zod is bundled into preload (P2-17)
2026-04-16 22:54:50 -04:00
ZacharyZhang-NY
775b10f46e
build(electron-builder): exclude node_modules/pycache/logs from builtin-skills copy (P2-16)
2026-04-16 22:54:47 -04:00
ZacharyZhang-NY
69b1d8b667
security(ipc): add ensureCompanyExists+belongsToCompany guards to operations handlers (P1-20)
2026-04-16 22:54:34 -04:00
ZacharyZhang-NY
be0ff5a041
lib(renderer): add safeJson helper; migrate 6 JSON.parse try/catch call sites
2026-04-16 22:54:20 -04:00
ZacharyZhang-NY
a07b42e493
refactor(App): extract Shell wrapper for locale+titlebar chrome (P1-20)
...
Collapse two near-identical LocaleContext/TranslationContext/TitleBar
wrapper blocks into a single Shell component.
2026-04-16 22:53:56 -04:00
ZacharyZhang-NY
3deb1c00ac
perf(db): batch skill-words + reports queries for scoreCandidate (P1-18)
2026-04-16 22:53:39 -04:00
ZacharyZhang-NY
bb397dff02
refactor(heartbeat): centralize [Heartbeat] prefix as a shared constant
...
P2-36: Multiple subsystems were string-coupled via the magic
'[Heartbeat]' prefix. Introduce src/main/orchestration/heartbeat-task.ts
as the single source of truth and replace scattered literals in
heartbeat dispatch, automation actions, and run completion.
P3-52: Collapse 5-deep ternary in automation-actions' wake-trigger
selection into lookup helpers (deriveHeartbeatWakeTrigger,
deriveEscalationWakeTrigger).
2026-04-16 22:53:19 -04:00
ZacharyZhang-NY
4838750009
refactor(useDataLoader): drop 16 positional setters, use getState() (P1-22)
...
Function signature reduced from 16 args to 4; setters sourced from
useAppStore.getState() inside callbacks (stable refs, no deps needed).
useCompanyController no longer has to thread 14 setters through.
2026-04-16 22:53:08 -04:00
ZacharyZhang-NY
12279005fe
fix(db): add run_events(run_id,seq) unique index + wrap appendRunEvent in tx (P1-15)
2026-04-16 22:53:06 -04:00
ZacharyZhang-NY
8dfa69cacf
refactor(useUIController): group reads via useShallow, fetch setters from getState (P1-17)
...
Replace 11 individual useAppStore subscriptions with a single useShallow
selector; setters read once from useAppStore.getState() (stable refs).
2026-04-16 22:52:27 -04:00
ZacharyZhang-NY
7f2d028080
fix(updater): only toast 'Up to Date' on manual user-initiated checks
2026-04-16 22:52:16 -04:00
ZacharyZhang-NY
bea8aa9542
ui: add Card/Eyebrow/Spinner primitives, iconOnly ActionButton, drop ui.tsx barrel
2026-04-16 22:52:16 -04:00
ZacharyZhang-NY
8867f50b37
refactor(db): consolidate BOARD_READER_ID in helpers + escape backslash in LIKE (P3-50, P1-26)
2026-04-16 22:52:09 -04:00
ZacharyZhang-NY
b15f6a1415
chore(npmrc): remove shamefully-hoist workaround (P3-24)
2026-04-16 22:52:05 -04:00
ZacharyZhang-NY
37a57d512c
chore(tsconfig): remove orphan tsconfig.base.json (P2-18)
2026-04-16 22:52:01 -04:00
ZacharyZhang-NY
40a1e5af07
chore(scripts): remove dead seed-research-team.ts (P1-14)
2026-04-16 22:51:59 -04:00
ZacharyZhang-NY
796665ceec
refactor(release-local): rename hasDocker to hasDockerInstalled (P1-12)
2026-04-16 22:51:56 -04:00
ZacharyZhang-NY
9aa03a0efd
lint(eslint): surface no-explicit-any as warn to constrain future code (P1-6)
2026-04-16 22:51:54 -04:00
ZacharyZhang-NY
6c2b229704
docs(readme): drop nonexistent pnpm test:packages from verification (P1-5)
2026-04-16 22:51:51 -04:00
ZacharyZhang-NY
e42879bfbe
perf(db): push listAgentMessages visibility filter + limit to SQL (P1-17)
2026-04-16 22:51:27 -04:00
ZacharyZhang-NY
d42901b86d
refactor(renderer): consolidate navigateTo into navigation slice (P1-11)
...
Delete the useUIController.navigateTo duplicate; augment slice version with
task-with-run lookup (via get().snapshot) so notification-click and command
palette share one codepath. App.tsx now reads navigateTo from the store.
2026-04-16 22:51:26 -04:00
ZacharyZhang-NY
66f5e0923d
fix(automation): log no-op status-change calls instead of silently returning
...
P2-34: Silent no-op guard hid caller bugs. Warn-log the violation so
it shows up in traces; callers should still gate.
2026-04-16 22:51:12 -04:00
ZacharyZhang-NY
4ebd98bb99
fix(automation): surface malformed condition JSON instead of silently returning false
...
P2-46: Previous bare try/catch hid parse errors, making rules silently
non-firing. Let JSON.parse throw; the caller (evaluateAutomationRules)
already logs and records the failure.
2026-04-16 22:51:00 -04:00
ZacharyZhang-NY
6b391887c3
fix(connector-auth): emit .bat file on Windows instead of '&'-chained script
2026-04-16 22:50:56 -04:00
ZacharyZhang-NY
43a03aa5e9
refactor(db): collapse three markRead variants into markMessageReadForReader (P1-16)
2026-04-16 22:50:40 -04:00
ZacharyZhang-NY
62050c9c05
refactor(automation): use JSON-stringified execution keys
...
P1-19: Previous string-join with ':' separator could collide when
field values contain colons (e.g. runId='a:b' vs runId='a' + previousStatus='b').
Use JSON.stringify for unambiguous serialization.
2026-04-16 22:50:38 -04:00
ZacharyZhang-NY
2050c0e8fd
fix(notification-service): track latest section for batch summary
2026-04-16 22:50:09 -04:00
ZacharyZhang-NY
4ed1e47c32
refactor(desktop-shell-menu): drop dead '?? ""' defense in openPath
2026-04-16 22:49:41 -04:00