In scope
- Business administrators, editors, and reviewers.
- EU and UK organizations may participate.
- Customer-authored course content and media.
- Hosted multi-tenant SaaS with named beta customers.
A GDPR-first, light-SOC-2 review of what must be true before the LCMS is sold as an independent B2B SaaS beta.
The LCMS has a credible application-security foundation, but it is not yet a self-contained commercial service. Its identity path still depends on SolidProfessor systems, its privacy obligations are not operationalized, and its analytics and error-monitoring configuration sends identifiable context without a documented beta policy. A small, contract-controlled beta can launch after the blockers in this report are closed. A SOC 2 report is not a beta prerequisite.
This is a product-readiness review, not a certification opinion. It applies to a narrow B2B beta and deliberately excludes higher-risk use until a separate assessment is complete.
The findings below are based on the LCMS code at commit fef65e848e19. Deployment configuration, vendor contracts, production access, and operational practice were not available in the repository and therefore remain evidence gaps.
| Area | Observed evidence | Beta implication |
|---|---|---|
| Strength | Tenant-aware routing, queries, storage prefixes, and Admin/Editor/Viewer roles. | Good foundation; prove isolation with negative tests and deployment evidence. |
| Strength | Encrypted, expiring preview credentials; token hashes rather than raw source tokens in sessions. | Keep; shorten preview lifetime and document bearer-token handling. |
| Strength | Direct multipart uploads use tenant prefixes, server validation, lifecycle states, and stale-upload cleanup. | Keep; verify bucket encryption, private access, malware strategy, and retention. |
| Blocker | Web and API authentication trust SolidProfessor platform-backend/VAR entry points; no independent identity lifecycle exists. | Implement standalone OIDC/SAML or define the upstream service as a contracted dependency. Otherwise the product is not independent. |
| Blocker | resources/js/app.ts enables Sentry sendDefaultPii: true. | Disable by default for beta; allow only after minimization, contract, region, notice, and documented purpose are approved. |
| Blocker | Segment events include IP address, internal user ID, external user UUID, tenant ID, environment, and request ID. | Disable non-essential analytics until consent/configuration and vendor transfer controls are ready; minimize identifiers. |
| Gap | LaunchDarkly contexts include user and tenant identifiers and names. | Mark private attributes, minimize context, and include the vendor in the data map/subprocessor assessment. |
| Gap | Legacy reverse-sync and direct legacy database configuration remain in the application. | Remove or isolate these paths and credentials from the independent beta boundary. |
| Gap | Retention is not defined for accounts, logs, sessions, activity history, soft-deleted content, uploads, analytics, or backups. | Approve periods and implement deletion/expiry before onboarding real customer data. |
The company will be both a controller and a processor. The role changes by processing purpose; it should not be described with one blanket label.
| Data / purpose | Likely role | Proposed basis | Beta control |
|---|---|---|---|
| Customer admin name, email, account identity, organization membership | Controller for its own account relationship; processor where customer directs account administration | Contract, GDPR Art. 6(1)(b), where necessary; otherwise documented legitimate interests, Art. 6(1)(f) | Notice, minimization, access controls, retention |
| Customer-authored content, uploaded media, captions, transcripts, filenames and metadata | Processor; customer is normally controller | Customer instructions under an Art. 28 DPA | Prohibit unlawful/sensitive content; private storage; return/delete process |
| Audit trail, sign-in records, IP/device and security events | Controller for platform security | Legitimate interests, Art. 6(1)(f), supported by a short LIA | Limit fields/access, set retention, explain in notice |
| Product analytics and feature usage | Controller | Consent where storage/access rules require it; otherwise a separately documented lawful basis | Off by default for beta unless consent, minimization, notice, and vendors are ready |
| Error monitoring and support diagnostics | Controller and sometimes processor | Legitimate interests for necessary reliability/security; customer instructions for content fragments | Redaction, sampling, no default PII, short retention, restricted access |
| Vendor and customer business contacts | Controller | Contract or legitimate interests | Business-only fields and documented retention |
These are the go/no-go conditions. Manual, well-documented processes are acceptable for a small beta; missing processes are not.
| Document | Needed for beta? | What it must cover |
|---|---|---|
| Beta service terms / order form | Yes | Authorized users, beta status, support, change/termination, confidentiality, warranties, liability, governing law, suspension, and shared responsibilities. |
| Data Processing Addendum | Yes | Art. 28 terms, processing details, TOMs, subprocessors, transfers, rights assistance, breach support, return/delete, and audit information. |
| Privacy notice | Yes | LCMS-specific controller processing, account/security/analytics purposes, vendors, transfers, retention, rights, and contacts. |
| Acceptable Use Policy | Yes | No unlawful content, malware, credential sharing, abusive testing, children/sensitive data, infringement, or cross-tenant access attempts. |
| Subprocessor list | Yes | Name, service, processing purpose, country/region, transfer safeguard, and change-notification method. |
| Cookie / storage notice and controls | If used | Strictly necessary storage separated from non-essential analytics; prior consent where required. Simplest beta path: no non-essential client tracking. |
| Security overview / TOM schedule | Yes | Accurate description of access, encryption, tenancy, SDLC, vendors, monitoring, backups, incident handling, and customer duties. |
| Vulnerability disclosure page | Recommended | Monitored reporting channel, safe-harbor language approved by counsel, expected report contents, and response expectations. |
sendDefaultPii to false and implement explicit event scrubbing.Use the periods below as product decisions, not automatic legal defaults: active account data for contract life; content until customer deletion/termination plus a short recovery window; authentication/session data for days; security logs for months based on investigative need; support records for a defined business/legal period; stale multipart uploads for hours or days; backups on a fixed rolling expiry; telemetry shorter than primary product data. Legal should approve the final table and engineering must prove enforcement.
The incident lead records discovery time, affected tenants/data, containment, evidence preservation, risk assessment, vendors, decisions, and communications. As processor, LCMS must notify the affected controller without undue delay after becoming aware. As controller, the company must be capable of notifying the supervisory authority within 72 hours where the breach is likely to risk people, and affected people where the risk is high.
SOC 2 is independent assurance over controls, not a product license and not a substitute for GDPR compliance. Do not say “SOC 2 compliant” or “certified.” A CPA firm issues the examination report.
| Control family | Light beta practice | Evidence to retain |
|---|---|---|
| CC1-CC2 Governance and communication | Name the security owner, approve short policies, define responsibilities, provide annual security/privacy training. | Policies, approvals, org responsibilities, training completion. |
| CC3 Risk assessment | Maintain a product risk register and revisit it at each release or material vendor/architecture change. | Risk entries, owners, due dates, treatment decisions, review minutes. |
| CC6 Access controls | MFA, least privilege, access approval, timely offboarding, quarterly review. | Identity settings, approvals, termination tickets, review exports. |
| CC7 System operations | Monitor alerts and vulnerabilities, own patch deadlines, run incident tabletop. | Scan results, remediations, alerts, incident/tabletop records. |
| CC8 Change management | Peer-reviewed pull requests, automated tests, controlled deployments, rollback notes. | PR reviews, CI results, deployment logs, emergency-change records. |
| CC9 Vendor risk | Inventory and tier vendors; review security, privacy, contracts, regions, and exit options. | Vendor register, reviews, DPAs, SOC reports, renewal decisions. |
| Window | Outcome | Work |
|---|---|---|
| Days 0-30 | Define and shrink the beta boundary | Name legal/security/product owners; finalize data map and role analysis; choose independent identity; disable PII telemetry; inventory vendors; draft terms, DPA, privacy notice, AUP, TOMs, retention, rights, and incident runbooks; create risk register. |
| Days 31-60 | Implement and prove launch controls | Deliver identity/tenant lifecycle; remove legacy dependency; configure encryption/MFA/secrets/backups; implement deletion/export; add tenant/RBAC negative tests; complete vendor DPAs/transfers; run vulnerability scan and restore test; close critical/high issues. |
| Days 61-90 | Run a named-customer beta with evidence | Sign customer documents; complete readiness review; run incident tabletop and request rehearsal; monitor support/security metrics; review access and vendors; collect change/CI/deployment evidence; reassess DPIA and beta exclusions before expanding. |
The accountable product and security owners should sign a one-page release record that lists each gate, evidence link, residual risk, accepting owner, and customer restrictions. Any open blocker keeps the decision at no-go. Medium residual risks may be accepted only in writing with a deadline and a beta-specific containment.
| Evidence | Owner | Pass condition |
|---|---|---|
| Data inventory, RoPA, lawful-basis/LIA, DPIA screen | Privacy / Product | Approved, dated, matches production fields/vendors. |
| Terms, DPA, privacy notice, AUP, TOMs, subprocessors | Legal / Privacy | Approved versions and signed customer acceptance. |
| Identity, MFA, access and tenant-isolation evidence | Engineering / Security | Configuration plus passing negative tests and access review. |
| Telemetry field list and redaction proof | Engineering / Privacy | No default PII; only approved fields reach approved vendors. |
| Encryption, secrets, backups and restore result | Platform | Production configuration and successful dated restore test. |
| Vulnerability and dependency results | Security / Engineering | No open critical/high issues; lower findings owned and dated. |
| DSAR/delete/export rehearsal | Support / Privacy | Completed within target time across primary systems/vendors. |
| Incident tabletop and breach decision log | Security / Legal | Participants, scenario, gaps, owners, and closure dates recorded. |
| Beta release sign-off | Product / Security / Legal | All gates closed or explicitly contained and accepted. |
resources/js/app.ts, app/Services/Segment/SegmentTracker.php, app/Services/LaunchDarkly/LaunchDarklyContext.php, app/Auth/EntryPointAuthenticator.php, app/Http/Middleware/SyncPlatformSession.php, app/Services/Preview/PreviewToken.php, multipart-upload services and tests, tenancy/permission configuration, routes, CI configuration, database migrations, and dependency manifests.