8.3 KiB
8.3 KiB
AgentCompany Cross-Feature Integrity Audit (2026-03-18)
Scope
PRD.md- Electron runtime code under
src/main,src/preload,src/renderer,src/shared - Connector adapters under
packages/* - Build and packaging config:
package.json,electron-builder.yml,electron.vite.config.ts,scripts/build-desktop.mjs - Existing validation assets under
tests/unit,tests/integration,tests/e2e - Current Electron guidance and packaging guidance from official Electron and electron-builder documentation
Pipeline Mapping
Phase 1: ProjectManager
- Confirmed product target remains a local-first Electron desktop control plane, not a browser-shaped admin shell.
- Current milestone for this remediation wave: cross-feature integrity, autonomous execution gating, and release validation.
Phase 2: ResearchAnalyst
- Checked current Electron guidance for:
- context isolation and preload boundaries
- sandbox and navigation restrictions
- utility-process usage
- packaging and update prerequisites
Phase 3: TechnicalImplementationResearcher
- Traced how connector health, onboarding, hiring, orchestration, snapshot loading, and renderer forms interact.
- Focused on defects where one subsystem looked valid locally but corrupted another subsystem at runtime.
Phase 4: EnterpriseArchitect
- Validated that the highest-severity current issues were policy drift and hidden truncation, not absence of feature surfaces.
- Chose to fix shared policy and shared data integrity before any cosmetic refactor.
What Is Already Real
- Main / preload / renderer separation exists.
- Renderer does not depend on direct Node access.
- SQLite-backed local-first persistence exists.
- The app already contains real systems for onboarding, companies, agents, goals, projects, tasks, approvals, runs, costs, meetings, knowledge, documents, social accounts, automation, messaging, and packaging.
- Worker execution already runs outside the renderer.
Highest-Severity Findings From This Audit
1. Global snapshot truncation polluted company-scoped behavior
Source:
src/main/database.ts
Problem:
listSnapshot()hard-cappedruns,cost_entries,agent_messages, andactivity.listRendererSnapshot()then filtered that already-truncated global result down to the current company.- This allowed newer rows from other companies to displace current-company runs, messages, costs, and activity from the renderer snapshot.
Why this matters:
- Inbox severity, board unread counts, standup summaries, cost totals, run history, and communication history could silently diverge from real persisted state.
- The defect was cross-feature by construction because multiple views derived from the same truncated snapshot.
2. Connector policy drift allowed non-production runtimes onto the main execution path
Sources:
src/main/onboarding-service.tssrc/main/orchestration-service.tssrc/main/ipc-core-work-graph-handlers.tssrc/main/api-server.tssrc/renderer/components/CompanyOnboarding.tsxsrc/renderer/components/organization.tsxsrc/main/connectors.tspackages/adapter-kimi-local/src/server/test.ts
Problem:
- Health checks marked generic or partial runtimes as
degraded. - Onboarding and orchestration still treated
degradedas runnable. - Hiring and agent editing could still bind agents to connectors that were not suitable for autonomous execution.
kimi_localwas explicitly documented as generic downgraded mode but was still able to enter product-critical flows.
Why this matters:
- The app could create or keep agents on runtimes that do not guarantee session resume or structured transcripts.
- That breaks the internal coordination model because messaging, run tracking, recovery, and auditability depend on a stable execution contract.
3. Policy enforcement was inconsistent across desktop UI, IPC, and local agent API
Problem:
- Even if the renderer restricted a path, API or IPC handlers could still write invalid connector assignments unless the same rule existed server-side.
Why this matters:
- The system would appear correct in one surface and remain invalid in another.
- That is an integrity failure, not a pure UI bug.
4. Architecture remains operationally real but still too concentrated
Largest modules remain heavy:
src/main/database.tssrc/main/api-server.tssrc/main/automation-service.tssrc/main/prompt-builder.tssrc/renderer/App.tsxsrc/renderer/components/communication.tsxsrc/renderer/components/execution.tsx
Interpretation:
- The app is no longer a blank prototype, but some boundaries are still broader than a stable long-term production shape.
- This is a structural follow-up item, not a reason to leave integrity bugs unfixed.
Remediation Implemented In This Wave
Shared connector execution policy
- Added
src/shared/connector-policy.ts. - Defined a single execution-readiness rule used by main and renderer.
- Autonomous execution now requires:
- connector status
ready - session resume support
- structured transcript support
- connector status
Snapshot integrity correction
- Kept protective limits on the global snapshot path used by broad system scans.
- Moved renderer and company analytics onto company-scoped SQL reads instead of filtering a global snapshot in memory.
- Added company +
created_atindexes so the scoped history reads can stay predictable as data grows.
Main-side enforcement
- Onboarding now rejects non-execution-ready connectors instead of silently falling back.
- Orchestration now blocks autonomous runs when the connector is not execution-ready.
- IPC agent save / hire request paths now reject non-execution-ready connectors.
- Local agent API hire requests now reject non-execution-ready connectors.
Renderer alignment
- Onboarding only offers execution-ready connectors and explains why others are blocked.
- Agent creation only offers execution-ready connectors.
- Agent editing keeps blocked current connectors visible for repair, but prevents saving or waking until the agent is moved onto a ready connector.
- Dashboard connector health now uses the same execution-readiness rule as onboarding and orchestration.
Verification Executed
pnpm typecheckpnpm lintpnpm test:unitpnpm test:integrationpnpm test:e2eAGENTCOMPANY_BUILD_VERSION=0.4.39 pnpm build
Build artifact produced in this session:
build/release/AgentCompany-0.4.39-arm64-mac.zip
Adversarial Review Outcome
- Reviewer CLI used:
claude -p - Lenses run: skeptic, architect, minimalist
- Accepted findings from that pass:
- global LIMIT removal was the wrong fix; replaced with company-scoped SQL snapshot reads while keeping global caps
- connector lookup failure needed structured
CONNECTOR_NOT_FOUNDhandling instead of uncaught throws - dashboard readiness needed to use the same connector policy as onboarding and orchestration
- Rejected findings from that pass:
- version bump concerns were procedural, not product risk
- pure shared readiness helpers used by renderer were acceptable because they remain data-only and build-safe in the current architecture
Residual Risks Still Present After This Wave
1. Preload surface is still broad
- It is typed, but still larger than ideal for a final hardened desktop app.
2. Several modules are still too large
- The codebase still needs deeper boundary extraction in
database,api-server,automation-service, renderer shell composition, and some feature panels.
3. Cross-platform packaging has not yet been runtime-verified on all target OSes in this session
- Packaging config exists for macOS, Windows, and Linux.
- This session validated macOS packaging only.
4. Signing / updater production readiness still depends on release credentials and environment
- The code and config exist, but release trust still depends on actual signing/notarization/update infrastructure material.
External References Used
- Electron security checklist:
- Electron context bridge:
- Electron utility process:
- electron-builder auto-update:
- electron-builder macOS code signing: