> For the complete documentation index, see [llms.txt](https://faction-os.gitbook.io/faction-os-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://faction-os.gitbook.io/faction-os-docs/.spec_system/archive/sessions/phase20-session04-campaign-executable-dispatch/security-compliance.md).

# Security & Compliance Report

**Session ID**: `phase20-session04-campaign-executable-dispatch` **Package**: cross-package (`packages/protocol`, `apps/server`, `apps/web`) **Reviewed**: 2026-06-28 **Result**: PASS

## Scope

**Files reviewed** (session deliverables and supporting session changes):

* `packages/protocol/src/orchestrationCommandCenter.ts` - Safe campaign task readiness and execution summary protocol fields.
* `packages/protocol/src/taskQueue.ts` - Campaign task queue references and execution evidence links.
* `packages/protocol/src/rest.ts` - Execution-aware campaign workbench REST response types.
* `packages/protocol/tests/orchestrationCommandCenter.test.ts` - Protocol privacy and parser coverage.
* `packages/protocol/tests/orchestration.test.ts` - Task queue campaign reference and evidence-link coverage.
* `apps/server/src/lib/commandCenterValidation.ts` - Campaign task executable request validation.
* `apps/server/src/managers/planCampaignManager.ts` - Private executable storage and campaign dispatch runtime.
* `apps/server/src/routes/commandCenter.ts` - Async campaign dispatch route and event emission.
* `apps/server/src/server.ts` - Campaign manager coordinator wiring.
* `apps/server/tests/planCampaignExecutableDispatch.test.ts` - Acceptance coverage for executable campaign dispatch.
* `apps/server/tests/planCampaignManager.test.ts` - Manager runtime, idempotency, and privacy coverage.
* `apps/server/tests/commandCenterRoutes.test.ts` - REST and WebSocket campaign dispatch coverage.
* `apps/web/src/lib/orchestrationApi.ts` - Execution-aware campaign request/response guards.
* `apps/web/src/lib/commandCenterUi.ts` - Campaign execution row and action copy helpers.
* `apps/web/src/components/orchestration/CampaignWorkbench.tsx` - Campaign execution evidence UI.
* `apps/web/src/components/orchestration/CommandCenterPanes.tsx` - Queue evidence selection wiring.
* `apps/web/src/components/orchestration/OrchestrationShell.tsx` - Campaign dispatch toast outcomes.
* `apps/web/tests/commandCenterUi.test.ts` - UI helper privacy and copy coverage.
* `apps/web/tests/CommandCenterPanes.test.tsx` - Campaign workbench rendering coverage.
* `apps/web/tests/orchestrationApi.test.ts` - API response privacy guard coverage.
* `apps/web/tests/OrchestrationPanel.test.tsx` - Toast and panel coverage.
* `tests/e2e/orchestration-command-center.e2e.ts` - Browser proof for campaign dispatch evidence.
* `apps/server/README_server.md` - Server boundary documentation.
* `apps/web/README_web.md` - Web product-surface documentation.
* `docs/api/README_api.md` - API response and privacy boundary documentation.

**Review method**: Static analysis of session deliverables, targeted pattern scans, focused code inspections, full workspace quality gates, and browser validation. Dependency audit was not applicable because no dependency manifest or lockfile changed.

**Review evidence**:

* Command/check: `git diff --name-only HEAD | rg -n '(^|/)package(-lock)?\.json$|pnpm-lock\.yaml|yarn\.lock'`
  * Result: PASS - No dependency manifest or lockfile changes.
  * Evidence: Command returned no matches.
* Command/check: `rg -n "child_process|spawn\(|exec\(|execFile\(|shell:|eval\(|new Function" apps/server/src/lib/commandCenterValidation.ts apps/server/src/managers/planCampaignManager.ts apps/server/src/routes/commandCenter.ts apps/web/src/lib/orchestrationApi.ts apps/web/src/components/orchestration/CampaignWorkbench.tsx apps/web/src/components/orchestration/OrchestrationShell.tsx apps/web/src/lib/commandCenterUi.ts`
  * Result: PASS - No new direct shell, eval, or dynamic function execution in changed campaign paths.
  * Evidence: Command returned no matches.
* Command/check: `rg -n "BEGIN (RSA|OPENSSH|PRIVATE)|PRIVATE KEY|sk-[A-Za-z0-9]|api[_-]?key\s*[:=]|password\s*[:=]|secret\s*[:=]|token\s*[:=]" [session changed files]`
  * Result: PASS - No production secret material found.
  * Evidence: Matches were test sentinels (`token=secret`, `campaign-secret`), blocked-field parser fixtures, existing docs about privacy boundaries, and route names containing `task-queue`.
* Command/check: `rg -n "commandText|terminalOutput|stdout|stderr|diff --git|rawPayload|rawLog|absolutePath|patch" apps/server/src/lib/commandCenterValidation.ts apps/server/src/managers/planCampaignManager.ts apps/server/src/routes/commandCenter.ts apps/web/src/lib/orchestrationApi.ts apps/web/src/lib/commandCenterUi.ts apps/web/src/components/orchestration/CampaignWorkbench.tsx apps/web/src/components/orchestration/OrchestrationShell.tsx packages/protocol/src/orchestrationCommandCenter.ts packages/protocol/src/rest.ts packages/protocol/src/taskQueue.ts`
  * Result: PASS - Raw executable fields remain confined to request/private queue contracts, blocked-field sets, and redaction helpers.
  * Evidence: Broad campaign protocol/API/UI paths reject or redact blocked raw fields and render safe labels, states, ids, and result summaries.
* Command/check: `sed -n '350,535p' apps/server/src/managers/planCampaignManager.ts`; `sed -n '640,730p' apps/server/src/managers/planCampaignManager.ts`
  * Result: PASS - Campaign dispatch uses private executable payload lookup, stable queue/coordinator idempotency keys, and coordinator dispatch.
  * Evidence: Executable queue rows are created with `{ planId, taskId }`; terminal/Git work routes through `TaskExecutionCoordinator`; coordinator-unavailable is represented as safe unavailable evidence.
* Command/check: `sed -n '1420,1565p' apps/server/src/lib/commandCenterValidation.ts`; `sed -n '4050,4270p' apps/web/src/lib/orchestrationApi.ts`
  * Result: PASS - Request inputs are schema parsed and broad campaign responses reject blocked raw payload fields.
  * Evidence: Server calls `parseTaskQueueExecutablePayload`; web calls `isTaskQueueBroadPayloadSafe` and blocked-field recursion for campaign workbench responses.

## Security Assessment

### Overall: PASS

| Category                      | Status | Severity | Details                                                                                                                                                                                              |
| ----------------------------- | ------ | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Injection (SQLi, CMDi, LDAPi) | PASS   | --       | No direct shell/eval calls were added in changed campaign paths; executable inputs are parsed and dispatched through the existing coordinator boundary.                                              |
| Hardcoded Secrets             | PASS   | --       | Secret scan found only test sentinels, blocked-field fixtures, and documentation references.                                                                                                         |
| Sensitive Data Exposure       | PASS   | --       | Public campaign records expose safe readiness/result summaries, ids, and links only; raw command text, stdout, stderr, diffs, patch bodies, tokens, and broad paths are blocked from broad payloads. |
| Insecure Dependencies         | PASS   | --       | No package manifest or lockfile changed.                                                                                                                                                             |
| Security Misconfiguration     | PASS   | --       | No CORS, auth, debug, or hosted configuration defaults changed.                                                                                                                                      |

### Security Findings

No security findings.

## GDPR Compliance Assessment

### Overall: N/A

*N/A because this session introduced executable campaign task handling, local queue/execution evidence links, and product UI copy only. It did not add new personal data collection, storage, third-party transfer, consent flows, or retention behavior.*

**Categories reviewed**: Data Collection & Purpose, Consent Mechanism, Data Minimization, Right to Erasure, PII in Logs, Third-Party Data Transfers.

### Personal Data Inventory

No personal data collected or processed in this session.

### GDPR Findings

No GDPR findings.

## Recommendations

None - session is compliant.

## Sign-Off

* **Result**: PASS
* **Reviewed by**: AI validation (validate)
* **Date**: 2026-06-28


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://faction-os.gitbook.io/faction-os-docs/.spec_system/archive/sessions/phase20-session04-campaign-executable-dispatch/security-compliance.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
