What's in this release
- A real Windows Application Event Log adapter (
adapters/windows_eventlog.py). Setsiem_output: windows_eventlogin your policy YAML and bothgsh-sentinel-deploy.pyandgsh-mcp-proxy.pywill write findings to the local Windows Application Event Log under a registered source (defaultGSH-Sentinel), for pickup by an existing Windows-based log forwarder (Winlogbeat, NXLog, etc.). - Severity maps to Windows event type: CRITICAL/HIGH → Error, MEDIUM → Warning, LOW → Information.
- Windows-only, and optional even there: the module imports cleanly on any platform.
pywin32is now an optional, platform-marked dependency (pywin32>=306; sys_platform == "win32"inrequirements.txt) sopip install -r requirements.txtstill succeeds on Linux/macOS. Without pywin32 or on a non-Windows platform,send()logs a warning and returnsFalserather than raising, so the existing file/stdout fallback still applies — a finding is never silently dropped. - Closes repo issue #8.
- New: a Version History table in
README.mdsummarizing every release (v1.0.0-beta through this one) in one place, alongside the full release notes on this Releases page.
Verified against the real Event Log, not just mocks
Wrote and read back real events two ways: directly via the adapter, and through the full gsh-sentinel-deploy.py script with siem_output: windows_eventlog configured, confirming the finding data landed correctly (verified with Get-EventLog/Get-WinEvent).
This surfaced and fixed a real bug in the first draft: event ID 1000 doesn't resolve against win32evtlogutil's default message-table DLL, so Event Viewer showed a "description for Event ID ... cannot be found" wrapper even though the finding data was written correctly underneath it. Switched to event ID 1, which does resolve against the built-in generic message table — verified by direct comparison of IDs 0, 1, and 1000 against the real log. 11 new tests in tests/test_windows_eventlog.py, including one that performs a real write-and-read-back rather than a mock.
Also fixed a stale docstring in adapters/mcp_proxy.py that still said Splunk/Elastic output was "in progress under issues #5 and #7" — those shipped back in v1.3.0.
Known limitations
- Registering a new event source (
win32evtlogutil.AddSourceToRegistry) writes toHKLM\SYSTEM\CurrentControlSet\Services\EventLog\Applicationand typically requires an elevated/administrator context for the first write under a given source name. If registration fails, this is caught and logged as a warning, and the finding falls back to local file output rather than being lost. - No QRadar or generic syslog output yet.