Skip to content

feat: add GATRA SOC integration layer#293

Open
ghifiardi wants to merge 2 commits intokoala73:mainfrom
ghifiardi:feat/gatra-integration-layer
Open

feat: add GATRA SOC integration layer#293
ghifiardi wants to merge 2 commits intokoala73:mainfrom
ghifiardi:feat/gatra-integration-layer

Conversation

@ghifiardi
Copy link

Summary

  • src/gatra/connector.ts — Unified connector that fetches all GATRA 5-agent pipeline data (ADA alerts, TAA analyses, CRA actions, agent health, correlations) in parallel with pub/sub snapshot notifications
  • src/panels/gatra-soc-panel.ts — Enhanced dashboard panel with agent status dots, incident stats, severity-colored alert feed, TAA threat analysis (actor/campaign/kill-chain), CRA response actions, and dynamic World Monitor correlation insights
  • src/layers/gatra-alerts-layer.ts — Standalone deck.gl layer factory with severity-colored ScatterplotLayer markers and pulsing rings for critical/high alerts
  • Extends src/services/gatra.ts with TAA analysis, correlation, and typed CRA action mock data using realistic Indonesian locations (Jakarta, Surabaya, Bandung, Medan, Makassar) and IOH infrastructure references
  • Wires the missing createGatraAlertsLayers() method in DeckGLMap.ts
  • Adds gatraAlerts field to all variant MapLayers definitions (finance, full, tech, e2e harnesses)

Test plan

  • Verify npx tsc --noEmit passes with zero errors
  • Switch to cyber variant and confirm GATRA SOC panel renders with all 6 sections
  • Confirm GATRA alert markers appear on the map with red pulsing for critical alerts
  • Verify agent health dots show correct color coding (green/yellow/red)
  • Check that correlation insights dynamically reference alert locations

🤖 Generated with Claude Code

Introduces a unified GATRA SOC integration layer for the World Monitor
cyber variant:

- src/gatra/connector.ts: Centralized connector that fetches all GATRA
  data sources (ADA alerts, TAA analyses, CRA actions, agent health,
  correlations) in parallel with pub/sub notifications
- src/panels/gatra-soc-panel.ts: Enhanced dashboard panel with 6
  sections — agent status, incident stats, alert feed, TAA threat
  analysis (actor/campaign/kill-chain), CRA response actions, and
  dynamic World Monitor correlation insights
- src/layers/gatra-alerts-layer.ts: Standalone deck.gl layer factory
  with severity-colored markers and pulsing rings for critical/high
  alerts
- Extends src/services/gatra.ts with TAA analysis, correlation, and
  typed CRA action mock data using Indonesian locations and IOH
  infrastructure references
- Wires createGatraAlertsLayers() in DeckGLMap.ts and adds gatraAlerts
  to all variant MapLayers definitions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@vercel
Copy link

vercel bot commented Feb 24, 2026

@ghifiardi is attempting to deploy a commit to the Elie Team on Vercel.

A member of the Team first needs to authorize it.

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e782af66e4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

research: { name: 'Security Research', enabled: true, priority: 1 },
policy: { name: 'Cyber Policy', enabled: true, priority: 2 },
aiSecurity: { name: 'AI & Security', enabled: true, priority: 2 },
'gatra-soc': { name: 'GATRA SOC', enabled: true, priority: 1 },

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Instantiate the configured gatra-soc dashboard panel

This config enables a gatra-soc panel by default, but App.createPanels() never registers a panel instance for that key (and GatraSOCDashboardPanel has no usage sites), so the key is skipped when panel order is rendered and the SOC panel never appears in the cyber variant.

Useful? React with 👍 / 👎.

Comment on lines +3309 to +3311
public setGatraAlerts(alerts: GatraAlert[]): void {
this.gatraAlerts = alerts;
this.render();

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Wire GATRA alert data into the new map layer path

The new setGatraAlerts entry point is never called anywhere in src, so this.gatraAlerts remains empty and the added render guard (mapLayers.gatraAlerts && this.gatraAlerts.length > 0) keeps the GATRA layer from ever drawing markers even when the toggle is enabled.

Useful? React with 👍 / 👎.

export const DEFAULT_PANELS = SITE_VARIANT === 'tech' ? TECH_PANELS : SITE_VARIANT === 'finance' ? FINANCE_PANELS : FULL_PANELS;
export const DEFAULT_MAP_LAYERS = SITE_VARIANT === 'tech' ? TECH_MAP_LAYERS : SITE_VARIANT === 'finance' ? FINANCE_MAP_LAYERS : FULL_MAP_LAYERS;
export const MOBILE_DEFAULT_MAP_LAYERS = SITE_VARIANT === 'tech' ? TECH_MOBILE_MAP_LAYERS : SITE_VARIANT === 'finance' ? FINANCE_MOBILE_MAP_LAYERS : FULL_MOBILE_MAP_LAYERS;
export const DEFAULT_PANELS = SITE_VARIANT === 'tech' ? TECH_PANELS : SITE_VARIANT === 'finance' ? FINANCE_PANELS : SITE_VARIANT === 'cyber' ? CYBER_PANELS : FULL_PANELS;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Align cyber panel defaults with actual feed loading

Switching SITE_VARIANT === 'cyber' to CYBER_PANELS exposes cyber-only news panels (for example indonesia, threats, malware), but news loading still iterates FEEDS from config/feeds.ts which has no cyber branch, so these default-enabled panels do not receive updates and stay empty/loading in cyber builds.

Useful? React with 👍 / 👎.

@koala73
Copy link
Owner

koala73 commented Feb 24, 2026

thank you @ghifiardi
I think this might be part of a bigger feature ?

Currently this can't be merged

P1 - High

Build is currently broken.
src/config/panels.ts:502 adds gatraAlerts: ['gatra'], but gatra is not a valid DataSourceId in src/services/data-freshness.ts:9.
I ran npm run typecheck on pr-293; it fails with:
Type '"gatra"' is not assignable to type 'DataSourceId'.

The gatra-soc panel is configured but never instantiated in the app.

src/config/panels.ts:393 enables the panel, but src/App.ts:2092 creates no GATRA panel instance.
Then src/App.ts:2430 silently skips panel keys that have no object in this.panels.

GATRA map data path is incomplete, so the map layer cannot be populated.

src/components/DeckGLMap.ts:3309 adds setGatraAlerts, but MapContainer has no corresponding setter around its data API (compare src/components/MapContainer.ts:320).
Also, app loaders never fetch/set GATRA data in layer flows (see src/App.ts:3150 and src/App.ts:3191).

Cyber variant is only partially wired into product flows.

SITE_VARIANT persistence/recognition still only handles full|tech|finance in src/config/variant.ts:4.
Feed routing still has no cyber branch in src/config/feeds.ts:966.
Header variant switcher exposes only full/tech/finance in src/App.ts:1837.
So cyber-specific panel/feed intent is not integrated end-to-end.

P2 - Medium

Duplicate, unused panel implementations increase maintenance risk.
Both src/components/GatraSOCPanel.ts:22 and src/panels/gatra-soc-panel.ts:62 define GATRA panels, but neither is wired into App.ts.

Integration + Value Assessment
Current value added to the shipped product is low-to-negative:

  1. It does not pass typecheck/build.
  2. The flagship panel/map integration paths are not connected in App.ts/MapContainer.
  3. Cyber variant rollout is incomplete across variant selection + feed plumbing.
  4. If fully wired, the feature could add clear value (SOC context + geo correlation), but in the current PR state it is not production-ready and should not merge.

Instantiate GatraSOCDashboardPanel for cyber variant, add loadGatraData()
method with 60s refresh cycle, wire gatraAlerts layer toggle, and add
setGatraAlerts() proxy in MapContainer. Also adds cyber variant to the
header switcher and enables local variant switching on localhost.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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.

2 participants