Skip to content

docs(compliance): SOC 2 TSC gap assessment + ISO gap summary (#324) - #3678

Merged
olafkfreund merged 10 commits into
mainfrom
docs/324-soc2-gap-assessment
Nov 7, 2026
Merged

olafkfreund merged 10 commits into
mainfrom
docs/324-soc2-gap-assessment

Conversation

@olafkfreund

Copy link
Copy Markdown
Owner

Part of #324 (evidence & audit-readiness). This adds the per-framework gap assessment. The residual-risk sign-off is deliberately left unsigned for the Security Owner.

What changed

  • New docs/compliance/soc2-gap-assessment.md: one row for each of the 38 TSC criteria (Security CC1-CC9, Availability A1, Confidentiality C1). Each row gives status, evidence, gap, register risk and issue. The ratings are capped by the SoA. The result is 0 Met, 24 Partial and 14 Gap. It also has an ISO 27001 summary that points at the SoA, plus an unsigned sign-off table. Processing Integrity is excluded and Privacy is deferred; both are open for the owner to reverse at sign-off.
  • SoA summary table: Partial now has its own column, so the totals read 54/4/18/17. The old table showed 58 Implemented because it folded Partial in.
  • Control matrix: the [compliance] Evidence & audit-readiness — control-to-framework matrix, automated evidence, gap assessments #324 row moves from Gap to Partial, and the evidence-collection section describes the live collector and access-review push. The code-scanning snapshot is still blocked on the evidence-github-token secret.
  • README: links the new document.

Who did what

  • Step 1 (SOC 2 document): coder (Sonnet). Review fixes were done by the lead.
  • Step 2 (SoA table): codex.
  • Steps 3-4 (matrix, README): agy.

Reviews

  • Final reviewer: a fresh Opus agent, given the plan and the diff, plus codex (gpt-6.1-sol). Both found the same two issues:
    • The ceiling-rule wording was ambiguous; the legend now states the rule the rows follow.
    • Rows A1.3, CC7.5 and CC9.1 said no restore drill had run; they now cite the 2026-08-10 restore drill.
  • CC6.2: the review-cadence and access-review-push statements contradicted each other; the row now reconciles them.
  • agy review: not obtained, UNAVAILABLE (code 503): No capacity available for model gpt-oss-120b-medium on the server.

Tests

All of the plan's Tests 1-8 pass:

  • the exact criterion set, allowed statuses, per-category reconciliation, evidence present, risk IDs present, unsigned sign-off, SoA counts and relative links;
  • gitleaks pre-commit.

Left for the owner

🤖 Generated with Claude Code

https://claude.ai/code/session_01WtDyDqabJ8SR4gD3ubwYx1

olafkfreund and others added 10 commits November 7, 2026 14:51
Reviewed by codex (gpt-6.1-sol): SoA counts, current-vs-target residual,
domain-level SOC 2 wording and PI assumption fixed. agy not obtained (503).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtDyDqabJ8SR4gD3ubwYx1
Approved unseen by user 2026-11-07, bulk run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtDyDqabJ8SR4gD3ubwYx1
Reviewed by codex (gpt-6.1-sol): unmapped criteria, Met coverage + SoA ceiling,
register-score labelling, R-016 acceptance and runnable checks fixed.
agy (model not reported) findings refuted: they need files that do not exist
yet, or the SoA status column it said is missing (it exists).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtDyDqabJ8SR4gD3ubwYx1
Approved unseen by user 2026-11-07, bulk run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtDyDqabJ8SR4gD3ubwYx1
Reviewed by codex (gpt-6.1-sol) and agy (model not reported): A1/C1 regex,
https link-check, per-category reconciliation, carried-over spec details and
fenced replacement row fixed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtDyDqabJ8SR4gD3ubwYx1
Approved unseen by user 2026-11-07, bulk run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtDyDqabJ8SR4gD3ubwYx1
Plan step 1 (coder). Sign-off notes six stale risk-register rows (plan
deviation recorded in plan/).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtDyDqabJ8SR4gD3ubwYx1
Plan step 2 (codex): 54 Implemented, 4 Partial, 18 Planned, 17 N/A.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtDyDqabJ8SR4gD3ubwYx1
…324)

Plan steps 3-4 (agy).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtDyDqabJ8SR4gD3ubwYx1
Plan step 1 follow-up. Legend states the SoA-ceiling column rule the rows
already follow; A1.3/CC7.5/CC9.1 cite the 2026-08-10 restore drill (status
unchanged under the stale SoA ceiling); CC6.2 reconciles the review cadence
and the merged access-review push (AIFactory#1018).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtDyDqabJ8SR4gD3ubwYx1
@olafkfreund
olafkfreund merged commit 9e0288b into main Nov 7, 2026
13 checks passed
@olafkfreund
olafkfreund deleted the docs/324-soc2-gap-assessment branch November 7, 2026 15:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant