chore(release): v0.3.0 - #106
Conversation
Seventy-one commits since v0.2.1. The headline is the ninth server — Sentinel, which completes the SIEM pillar — but the release also carries the MCP Python SDK 2.0 migration, a local eval dashboard, and three cross-cutting fixes to guarantees the repo already claimed to make. Those three are worth calling out because each was a rule stated in CLAUDE.md and not actually enforced. Credentials were resolved against the process working directory, so launching a runtime from a subdirectory started all nine servers with none. Unmapped exceptions propagated past every server's redaction boundary to the client as raw strings, on all 58 tools. And the Sentinel server, added after the read-tool staleness audit had been declared complete across eight servers, inherited none of it — its incident queue returned closed incidents as current work and three of its tools truncated silently. Two behaviour changes an operator should know about: `list_sentinel_incidents` now returns open work by default (`status="any"` restores the old behaviour), and a `.env.<platform>` file now contributes only its own `<PLATFORM>_*` variables — anything else in it, including process-wide values like HTTPS_PROXY, is ignored and must be exported in the environment instead. Servers stay at 0.0.1: they are not independently published, per the single-shared-core layout decision in CLAUDE.md. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XYTy7da8Z5ZHhkwcCpjojZ
|
Claude finished @ubercylon8's task in 47s —— View job Security review of PR #106Scope: the diff vs.
FindingsNothing significant. This PR doesn't touch anything covered by the Critical Rules (read-only/gating, secret handling, redaction, findings schema, small-model-safe tool design) — there's no tool code, I spot-checked two of the CHANGELOG's own security claims against the current tree since they're exactly the kind of thing a security review should verify rather than take on faith:
One informational note (not a defect, already called out in the PR description): the |
Seventy-one commits since
v0.2.1. Version bumped in the three places that carry it (pyproject.toml,core/pyproject.toml,core/f0_sectools_core/__init__.py) plusuv.lock; servers stay at0.0.1since they are not independently published.What's in it
Added —
sentinel-mcpas the ninth server (SIEM pillar: KQL telemetry, the SOC incident queue, detection coverage, fast M365 audit search); the Umbrella cloud firewall as a secondhunt_firewallsurface; searchable and readable Umbrella identities; a local eval dashboard; the detection-coverage pillar in the CISO report.Changed — MCP Python SDK 2.0 across all servers; credential files located by search rather than by working directory, and scoped to their own platform's variables; the Sentinel incident queue defaults to open work.
Fixed — the three cross-cutting ones are the reason this is a minor bump rather than a patch. Each was a guarantee CLAUDE.md already stated and the code did not keep:
Security — every GitHub Action pinned to a SHA; TruffleHog, dependency-review and zizmor added; the
cryptographyand Pygments advisories held back by LimaCharlie's pins cleared via capped overrides.Operator-visible behaviour changes
list_sentinel_incidentsreturns open incidents by default.status="any"restores the previous behaviour..env.<platform>file now contributes only its own<PLATFORM>_*variables. Anything else in it — including process-wide values such asHTTPS_PROXY, which httpx honours on calls carrying a live token — is ignored and must be exported in the environment instead.f0_sentinel_mcp.tools.hunt_firewalltakessurfaceas its first argument. MCP clients pass by name and are unaffected; direct positional callers must be updated.Verification
1080 tests passing, ruff and mypy clean, no
gen_docsdrift. Every claim in the changelog was checked against the code (58 registered tools, 58 guarded, 9 servers, 30 skills) rather than taken from the commit messages.Note: the
[0.3.0]compare link in CHANGELOG.md 404s until the tag exists, solycheemay flag it on this PR. It resolves the moment the tag is pushed.🤖 Generated with Claude Code
https://claude.ai/code/session_01XYTy7da8Z5ZHhkwcCpjojZ