Files
Redflag/docs/E1_Incomplete_Features_Audit.md
jpetree331 7b46480556 docs: E-1 incomplete features audit
Audit of stubbed and incomplete features: signed package downloads,
configurable timeouts, install/logs UI, security audit trail.

Key findings:
- Signed package download: 80% complete (agent-side missing)
- Configurable timeouts: 40% (6 hardcoded values, infrastructure partial)
- Install/Logs UI: 85% (backend exists, frontend needs wiring)
- Security audit trail: 70% (table exists, query not written)
- TypeScript: 217 strict errors (app runs via Vite, not blocking)

Feature completeness matrix and prioritization in report.
See docs/E1_Incomplete_Features_Audit.md for full analysis.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 10:59:07 -04:00

8.4 KiB

E-1 Incomplete Features Audit

Date: 2026-03-29 Branch: culurien


1. SIGNED PACKAGE DOWNLOADS

Current State

  • downloads.go:92-98: Comment block with TODO — GetSignedPackage is stubbed out but the code path falls through to unsigned binary serving
  • Migration 016: agent_update_packages table EXISTS with columns: id, version, platform, architecture, binary_path, signature, checksum, file_size, created_at, created_by, is_active
  • Server handlers: SignUpdatePackage and ListUpdatePackages handlers EXIST in agent_updates.go (lines 424, 459) — these are functional
  • Agent side: Agent does NOT call /downloads/updates/:package_id (zero grep results). The A-2 update download endpoint is now auth-protected but unused by agents
  • Build orchestrator: agent_build.go, build_orchestrator.go, build_types.go exist — these handle cross-platform agent binary compilation

Assessment

The signed package infrastructure is 80% complete:

  • DB schema: EXISTS
  • Sign endpoint: EXISTS
  • List endpoint: EXISTS
  • Download endpoint: EXISTS (was protected in A-3)
  • Agent-side download + verify: MISSING
  • Wire downloads.go:92 to query DB instead of commented-out stub: 1 line fix

2. CONFIGURABLE CHECK-IN INTERVALS & TIMEOUTS

Hardcoded Values

Value Location Hardcoded
Offline check frequency main.go:429 2 minutes
Offline threshold main.go:436 10 minutes
Sent command timeout timeout.go:28 2 hours
Pending command timeout timeout.go:29 30 minutes
Token cleanup interval main.go:445 24 hours
Timeout check interval timeout.go:40 5 minutes

Settings Infrastructure

Component Status
security_settings table EXISTS (migration 020)
security_settings_audit table EXISTS (migration 020)
scanner_config table EXISTS (migration 027)
SecuritySettingsService EXISTS — has GetSetting, SetSetting, ValidateSetting
Security settings API EXISTS (7 routes re-enabled in A-3)
General settings API EXISTS (timezone only — 3 routes)
Scanner config API EXISTS (3 routes for scanner timeouts)
Settings UI page EXISTS (Settings.tsx) — timezone + dashboard refresh only
Security settings UI EXISTS (SecuritySettings.tsx) — categories and events

Assessment

The settings infrastructure EXISTS but the operational timeouts (offline threshold, command timeout, etc.) are not wired to it. The security_settings table is designed for security-specific settings. General operational settings would need either a new table or reuse of the existing infrastructure with a new category. The scanner_config table already handles per-scanner timeouts, suggesting the pattern could be extended.

Effort: LOW-MEDIUM — The DB, API, and UI patterns exist. Need to add timeout values to security_settings (or a new operational_settings table) and wire the hardcoded constants to read from DB at startup.


3. INSTALL/LOGS UI (AgentUpdates.tsx)

Stubs Found

Location Stub What's Missing
AgentUpdates.tsx:184 console.log('Install update:', update.id) API call to install endpoint
AgentUpdates.tsx:193 console.log('View logs for update:', update.id) API call to logs endpoint
AgentUpdatesEnhanced.tsx:93 api.installUpdate not in API client Missing API method
AgentUpdatesEnhanced.tsx:141 api.getCommandLogs not in API client Missing API method

Backend Status

  • Install endpoint (POST /updates/:id/install): EXISTS and functional
  • Logs endpoint (GET /logs): EXISTS and functional
  • Command logs per update: needs a filtered query but infrastructure exists

Assessment

Frontend-only fix — backend endpoints exist. The UI needs:

  1. Wire Install button to existing POST /updates/:id/install API
  2. Wire Logs button to existing GET /updates/:id/logs API
  3. Add installUpdate and getCommandLogs to the API client (api.ts)

Effort: LOW — pure frontend wiring.


4. SECURITY SETTINGS UI

Backend Status

Method Status
GetAllSecuritySettings EXISTS — returns settings from DB
GetSecuritySettingsByCategory EXISTS
UpdateSecuritySetting EXISTS
ValidateSecuritySettings EXISTS
ApplySecuritySettings EXISTS
GetSecurityAuditTrail PLACEHOLDER — returns empty array (DEV-020)
GetSecurityOverview PLACEHOLDER — returns all settings as overview (DEV-020)

Frontend Status

  • SecuritySettings.tsx: EXISTS — full category-based settings UI with save/validate
  • SecurityEvents.tsx: EXISTS — event display component
  • useSecurity.ts: EXISTS — calls /security/overview
  • useSecuritySettings.ts: EXISTS — CRUD operations

Assessment

The security settings pipeline is functional except for two placeholder endpoints. The audit trail needs the security_settings_audit table query (table exists, query not written). The overview needs a summary aggregation query.

Effort: LOW — write 2 queries for the placeholder handlers.


5. TYPESCRIPT BUILD ERRORS

Total unique error locations: 217

Error Code Count Description
TS6133 112 Unused declared variables
TS2339 49 Property does not exist on type
TS2322 20 Type mismatch
TS2367 4 Comparison type mismatch
TS7006 3 Implicit any parameter
TS2353 3 Object literal unknown property
TS2345 3 Argument type mismatch
Other 23 Various

Top affected files:

  • AgentHealth.tsx — 10 errors (type mismatches on security status)
  • AgentUpdatesEnhanced.tsx — 6 errors (missing API methods, undefined state)
  • ChatTimeline.tsx — multiple unused variables
  • SecuritySettings.tsx — type issues

Note: The Vite production build PASSES (uses vite build not tsc). These are strict TypeScript errors that Vite's esbuild transpilation ignores. The app runs correctly despite these type errors.


6. FEATURE COMPLETENESS MATRIX

Feature DB Schema API Endpoint Frontend UI Status
Signed package download EXISTS EXISTS (stub wiring) MISSING (no agent-side) 80%
Configurable timeouts PARTIAL (security only) PARTIAL (security only) PARTIAL (timezone only) 40%
Install/Logs UI EXISTS EXISTS STUB (console.log) 85%
Security audit trail EXISTS (table) PLACEHOLDER EXISTS (UI calls it) 70%
Security overview EXISTS (settings table) PLACEHOLDER EXISTS (UI calls it) 70%

7. PRIORITIZATION

Rank Feature Value Infrastructure Effort Notes
1 Install/Logs UI HIGH 85% complete LOW Frontend wiring only
2 Security audit trail + overview MEDIUM 70% complete LOW 2 DB queries
3 Configurable timeouts MEDIUM 40% complete MEDIUM Need to wire hardcoded values to DB
4 Signed package download HIGH (for upgrades) 80% complete MEDIUM Agent-side download + verify needed

Note for Fimeg: The signed package download (rank 4) is prerequisite for the agent self-upgrade feature that was explicitly requested. The infrastructure is mostly there — the missing piece is agent-side download and Ed25519 verification of the downloaded package.


FINDINGS SUMMARY

ID Feature Severity Finding Location
F-E1-1 Signed download MEDIUM Stub code commented out, needs 1-line DB lookup fix downloads.go:92-98
F-E1-2 Signed download HIGH Agent has no package download/verify code aggregator-agent/ (missing)
F-E1-3 Timeouts MEDIUM 6 hardcoded operational values not configurable main.go, timeout.go
F-E1-4 Install UI LOW Install button is console.log stub AgentUpdates.tsx:184
F-E1-5 Logs UI LOW Logs button is console.log stub AgentUpdates.tsx:193
F-E1-6 Install UI MEDIUM API client missing installUpdate method AgentUpdatesEnhanced.tsx:93
F-E1-7 Audit trail LOW GetSecurityAuditTrail returns empty array security_settings.go (DEV-020)
F-E1-8 Overview LOW GetSecurityOverview returns raw settings security_settings.go (DEV-020)
F-E1-9 TypeScript MEDIUM 217 strict TS errors (112 unused vars, 49 property errors) aggregator-web/src/