@@ -335,6 +335,106 @@ Response:
335335
336336Maps `agent_id` → `AiRequest.agentId`, each `context` entry onto `AiRequest.metadata()`. External gateways pointed at MS's ASGI app work against Atmosphere without payload translation.
337337
338+ # ## `GET /api/admin/governance/health`
339+
340+ Operator snapshot aggregating kill-switch state, dry-run counters, SLO
341+ status, and per-policy hash fingerprints. Admin dashboards use this as a
342+ single-fetch status endpoint.
343+
344+ # ## `GET /api/admin/governance/agt-verify`
345+
346+ Compliance export shaped for Microsoft's `agt verify` CLI — cross-framework
347+ findings (OWASP Agentic Top 10 + EU AI Act + HIPAA + SOC2) with per-row
348+ evidence pointers and a per-framework coverage summary. Round-trips into
349+ tooling that already consumes MS's Agent Compliance package format.
350+
351+ # ## `POST /api/admin/governance/reload`
352+
353+ Hot-reload a policy wrapped in `SwappablePolicy`. Body : ` {swapName, yaml}` ;
354+ response reports outgoing + incoming delegate identity.
355+
356+ # ## `POST /api/admin/governance/kill-switch/{arm,disarm}`
357+
358+ Operator break-glass. Armed state halts every admission decision in
359+ sub-millisecond time. Live verification on the startup-team sample
360+ shows the same prompt that admits at 0.11ms deny at 0.09ms while armed
361+ — no redeploy, no restart.
362+
363+ ` ` ` bash
364+ curl -X POST http://localhost:8080/api/admin/governance/kill-switch/arm \
365+ -H 'Content-Type: application/json' \
366+ -d '{"reason":"incident-42","operator":"oncall"}'
367+ ` ` `
368+
369+ ---
370+
371+ # # Multi-agent governance
372+
373+ Single-endpoint scope is half the story — cross-agent dispatch needs the
374+ same enforcement. Atmosphere's `FleetInterceptor` SPI (in
375+ ` atmosphere-coordinator` ) gates every outbound `AgentCall` before it
376+ leaves the coordinator.
377+
378+ # ## `FleetInterceptor` SPI
379+
380+ ` ` ` java
381+ public interface FleetInterceptor {
382+ Decision before(AgentCall call);
383+ sealed interface Decision {
384+ record Proceed() implements Decision {}
385+ record Rewrite(AgentCall modifiedCall) implements Decision {}
386+ record Deny(String reason) implements Decision {}
387+ }
388+ }
389+ ` ` `
390+
391+ Install via `AgentFleet.withInterceptor(interceptor)`. Denies synthesize
392+ a failed `AgentResult` without consuming the transport hop.
393+
394+ # ## `GovernanceFleetInterceptor`
395+
396+ Ready-made bridge that runs the full `GovernancePolicy` chain on every
397+ dispatch. A coordinator mistakenly dispatching "write Python" to its
398+ research agent gets denied at the fleet boundary, not just at the
399+ user-facing entry.
400+
401+ ` ` ` java
402+ var governed = fleet.withInterceptor(new GovernanceFleetInterceptor(policies));
403+ var research = governed.agent("research").call("web_search", args);
404+ ` ` `
405+
406+ # ## Commitment records on cross-agent dispatch
407+
408+ When `JournalingAgentFleet.signer()` is installed and
409+ ` CommitmentRecordsFlag.isEnabled()` is true (default off per v4 Phase B1),
410+ every dispatch emits a W3C Verifiable-Credential-subtype record signed
411+ with Ed25519. The admin **Commitments** tab renders verified records with
412+ a ✓ badge. Unique pairing with durable sessions : the signed audit trail
413+ survives pause-and-resume across the `CheckpointStore` — demonstrated in
414+ the [checkpoint-agent sample](https://github.com/Atmosphere/atmosphere/tree/main/samples/spring-boot-checkpoint-agent).
415+
416+ Enable for a sample deployment :
417+
418+ ` ` ` java
419+ @Bean CommitmentSigner signer() { return Ed25519CommitmentSigner.generate(); }
420+ @PostConstruct void enable() { CommitmentRecordsFlag.override(Boolean.TRUE); }
421+ ` ` `
422+
423+ ---
424+
425+ # # Samples applied to the 4 goals
426+
427+ | Sample | Goal 1 MS YAML | Goal 2 Scope | Goal 3 Commitments | Goal 4 OWASP |
428+ |---|:-:|:-:|:-:|:-:|
429+ | [spring-boot-ms-governance-chat](https://github.com/Atmosphere/atmosphere/tree/main/samples/spring-boot-ms-governance-chat) | ✅ | ✅ | — | ✅ |
430+ | [spring-boot-ai-classroom](https://github.com/Atmosphere/atmosphere/tree/main/samples/spring-boot-ai-classroom) | ✅ | ✅ | — | — |
431+ | [spring-boot-multi-agent-startup-team](https://github.com/Atmosphere/atmosphere/tree/main/samples/spring-boot-multi-agent-startup-team) | ✅ | ✅ | ✅ | ✅ |
432+ | [spring-boot-checkpoint-agent](https://github.com/Atmosphere/atmosphere/tree/main/samples/spring-boot-checkpoint-agent) | — | — | ✅ | — |
433+ | [spring-boot-mcp-server](https://github.com/Atmosphere/atmosphere/tree/main/samples/spring-boot-mcp-server) | — | ✅ | — | ✅ |
434+
435+ Each sample's e2e test boots the real Spring Boot context and asserts
436+ admission decisions at runtime — no mocking at the governance seam.
437+
338438---
339439
340440# # Audit trail
0 commit comments