v1.2.5
Release v1.2.5
Previous release: v1.2.3
Release date: 2026-06-15
Highlights
Unified Activity Log — Dashboard is now the official recorder
Every GESF operation performed via CLI or MCP is now recorded in .ges/activity-log.json and surfaced in the web dashboard under a new Activity Log tab. This makes the dashboard the single source of truth for what GESF did to your project.
Dashboard reflects all packs, controls, and implementations
The web dashboard now dynamically picks up packs installed after ges init, controls implemented via implement_control, and manual overrides — all without requiring a separate ges audit or ges score run first.
Empty dashboard tabs fixed
The Findings, Traceability, and Fixes Detail tabs were blank when audit findings were empty. They are now populated from non-passing control statuses so every tab stays interconnected.
Dashboard header cleanup
The header title is now the project name (not a generic label), and the subtitle shows GESF v{version}.
What's New
Activity Log System
New module: @greenarmor/ges-core → packages/core/src/activity-log/
ActivityLogEntrytype — capturessource(cli/mcp),action,title,description,status(success/partial/failed/info), and structureddetailsrecordActivity()— one-line helper that writes to.ges/activity-log.jsonloadActivityLog()/appendActivityLog()/clearActivityLog()/createActivityLogEntry()
Commands wired (21 total):
| Source | Commands |
|---|---|
| CLI (10) | ges init, ges audit, ges fix, ges policy install, ges policy remove, ges control, ges score, ges scan, ges validate, ges generate, ges hooks install/uninstall |
| MCP (11) | run_audit, auto_fix, apply_control_override, implement_control, init_project, run_scans, validate_project, policy_install, policy_remove, install_hooks, start_dashboard |
Shared Controls Utilities
New module: @greenarmor/ges-core → packages/core/src/controls/
| Function | Purpose |
|---|---|
loadControlsFromDisk |
Reads controls from controls/<pack>/controls.json |
loadControlOverrides |
Loads .ges/control-overrides.json |
saveControlOverride |
Writes/updates a single control override |
applyOverridesToControls |
Merges overrides into a control list |
addFrameworkToConfig |
Adds a framework to .ges/config.json |
removeFrameworkFromConfig |
Removes a framework from .ges/config.json |
getInstalledPackIds |
Scans controls/ for installed pack IDs |
Dashboard — Activity Log Tab
New 6th nav tab in the web dashboard:
- Summary cards: total operations, success/fail counts, CLI vs MCP source breakdown
- Operations by Type: action labels with counts
- Timeline table: time, source badge (CLI/MCP), action badge, status badge, description, impact details
- New
/api/activity-logAPI endpoint
Bug Fixes
Dashboard didn't reflect installed packs (fixed)
Installing an AI pack (or any pack) via ges policy install after ges init wrote controls/<pack>/controls.json but the dashboard never read it. Now:
loadControlsForConfigmerges controls from both the in-memory registry AND thecontrols/directory on diskpolicy install(CLI + MCP) now callsaddFrameworkToConfig()to sync.ges/config.jsonpolicy remove(CLI + MCP) now callsremoveFrameworkFromConfig()to clean up
implement_control didn't mark status (fixed)
After implementing a control via MCP implement_control, nothing was recorded — the dashboard still showed "not-implemented". Now:
implement_controlcallssaveControlOverride()to write apassoverride to.ges/control-overrides.jsonautomatically- The dashboard picks this up immediately on next page load
Empty dashboard tabs (fixed)
When .gesignore excluded all source files (or a project had no audit findings), the Findings, Traceability, and Fixes Detail tabs were completely blank. Now:
- Compliance issues are built from non-passing control statuses regardless of audit findings
- Findings page: severity tabs, By Pack grouping, audit evidence cards
- Traceability page: full control → framework → pack matrix
- Fixes Detail: Pending Fixes uses compliance fix cards with expandable details
Dashboard header (fixed)
- Before:
<h1>GESF Compliance Dashboard</h1>with subtitle showingProjectName | project-type | GESF vX.Y.Z - After:
<h1>{ProjectName}</h1>with subtitleGESF v{version}
New Types
export type ActivityAction =
| "init" | "audit" | "fix" | "policy_install" | "policy_remove"
| "control_override" | "implement_control" | "score" | "scan"
| "validate" | "generate" | "hooks_install" | "hooks_uninstall"
| "dashboard_start" | "badge_generate";
export type ActivityStatus = "success" | "partial" | "failed" | "info";
export interface ActivityLogEntry {
id: string;
timestamp: string;
source: "cli" | "mcp";
action: ActivityAction;
title: string;
description: string;
status: ActivityStatus;
details: {
packs_affected?: string[];
controls_affected?: string[];
files_created?: string[];
files_modified?: string[];
findings_count?: number;
fixes_applied?: number;
score?: number;
frameworks_added?: string[];
[key: string]: unknown;
};
}Files Changed
| Area | Files | Lines |
|---|---|---|
| Core (types, controls, activity-log) | 5 | +568 |
| Web Dashboard (index, template, tests) | 3 | +516 |
| MCP Server (server.ts) | 1 | +122 |
| CLI Commands (10 files) | 10 | +148 |
| Version bumps (all packages) | 20 | +214 |
Test Results
- 412 tests passing (up from 391 in v1.2.3)
- All 16 packages build clean
- E2E verified: CLI init → audit → policy install → validate → score, plus MCP policy_install, all recorded in activity log and visible in dashboard
Upgrade Guide
No breaking changes. Existing .ges/activity-log.json is created on first operation after upgrade.
npm update @greenarmor/ges
# or
pnpm update @greenarmor/gesTo view the activity log:
ges dashboard
# Then open the "Activity Log" tabOr via API:
curl http://localhost:3001/api/activity-logFull changelog: https://github.com/nickframanta/gesf/compare/v1.2.3...v1.2.5