Skip to content

Cesivi Changelog

[1.10.0] — 2026-06-07

C-C Event-Sourced Write Side — temporal as-of + replay, opt-in and off by default

The append-only event-log mechanics already shipped in v1.2 (the WORM audit substrate — hash-chain + SHA-256 + sealed/cloud-immutable). v1.10 adds the two genuine gaps — point-in-time (as-of) query and event-replay rebuild — reusing the WORM engine, behind Cesivi:EventSourcing:Enabled (default false → the decorator is never constructed → byte-identical, zero migration). CQRS read/write split was declined (it breaks SP read-your-write).

  • B.0–B.4 (PLAN-1720/1723/1728/1732/1735): WORM segment engine extracted to a domain-agnostic FileSystemWormSegmentEngine (on-disk format unchanged) + a new Cesivi.Storage.EventSourcing assembly; EventJournalingStorageService no-op DispatchProxy seam; live append in true mode (append-then-apply + compensating …Failed, effectively-once); canonical stream-key + pure-fold EventJournalReplayProjector (byte-identical replay, tamper-detecting chain verify); shared EventStreamFold + EventJournalAsOfReader with internal GET /_admin/eventjournal/asof (CentralAdmin, 404 in false-mode); eventSourcing capability on GET /_vti_bin/diagnostics; runbook _docs_dev/event-sourcing/RUNBOOK.md. Genesis seeding deferred (start-from-now; as-of/replay cover the post-opt-in window only).

C-E Kubernetes-Native Operator — declarative CesiviTenant/CesiviFarm CRDs (external, zero server files)

A new external Cesivi.Operator (.NET / KubeOps 11.2.0, its own Cesivi.Operator.sln, not in Cesivi.sln or the server batch) referencing Cesivi.Common so the CRDs (cesivi.io/v1alpha1) ARE the server tenancy types. Reconciles the v1.9 /_farm/tenants surface.

  • B.0–B.5 (PLAN-1719/1724/1729/1733/1736): CRDs + no-op reconcile (no-op at the type level); provisioning reconcile (404→provision→re-observe→Ready, no storm); suspend/resume + CR-wins drift (reconcile-pause gate); finalizer/teardown (tenant-teardown finalizer, requeue-until-404, no orphan); CesiviFarm observe-only; slug validation via CRD OpenAPI pattern + reconciler guard (no webhook). Ship-blocker fixed: the B.0 Dockerfile adduser broke the build on .NET 10 aspnet:10.0 (no adduser; built-in app UID 1654) → USER $APP_UID; image builds AND runs. charts/cesivi-operator/ (appVersion 1.10.0); least-priv RBAC; operator 85/85. Runbook _docs_dev/k8s-operator/RUNBOOK.md.

Drop-in upgrade from v1.9.0 — no migration. Cesivi:EventSourcing:Enabled stays false → byte-identical; the operator is opt-in infra deployed separately. See RELEASE-NOTES-v1.10.md.


[1.9.0] — 2026-06-06

C-B Multi-Tenant — one farm hosts many isolated tenants, opt-in and off by default

One Cesivi farm can now host many isolated tenants (own webs/lists/storage) behind tenant routing with a deny-by-default cross-tenant guard. Cesivi:MultiTenant:Enabled defaults to false — every existing farm stays byte-identical and pays zero cost; the whole machinery is a pass-through in false mode.

  • B.0–B.5 (PLAN-1700/1701/1703/1708/1713/1714): scoped ITenantContext (constant→DI refactor, ~470 sites); dormant farm registry (ITenantStore/TenantDescriptor, __farm__ namespace); live TenantResolutionMiddleware (host→tenant, unresolved→404, state-gating); the safety-critical TenantScopedStorageService decorator (per-tenant key namespacing + deny-by-default guard, 227-method coverage sweep); per-tenant backends via the C-A registry + GUID-index tenant-stamp; /_farm/tenants farm-admin REST behind CentralAdmin + a MultiTenantFeatureGate (404 in false mode) with legal lifecycle gating.
  • B.6 — milestone closure (PLAN-1715): multiTenant:true made production-functional.
  • SystemTenantScope (AsyncLocal ambient) — context-less callers (boot, provision-seed, teardown) run storage ops under an explicit tenant; the HTTP request context always wins.
  • True-mode boot skips the single-tenant default seed (no default tenant; __farm__ lazy-created) — boots without SkipDefaultDataInit.
  • POST /_farm/tenants seeds the new tenant's root web/site/lists (reuses the boot seeder under SystemTenantScope, fresh per-tenant GUIDs to avoid global GUID-index + web-context collisions); seed failure → tombstone Deleting + 500.
  • DELETE /_farm/tenants/{id} purges the tenant's storage namespace (tenant-scoped).
  • Cache-layer isolation: TenantScopedCacheService decorator + CesiviDataService instance-cache prefixing — the object caches sat above the storage decorator and leaked across tenants; closed (true-mode only; false mode FLAT).
  • Docs: _docs/MULTI-TENANT.md operator runbook + RE-KEY-TOOL-DESIGN.md (build deferred).

Drop-in upgrade from v1.8.0 — no migration, no data re-key. Cesivi:MultiTenant:Enabled stays false → byte-identical single-tenant behaviour. To run a farm, enable the flag on a fresh deployment and provision tenants (the false→true in-place re-key tool is designed but not yet built). Pre-condition: wire FarmAdmin to a trusted IdP before enabling — the demo mock auth grants it to every user. See RELEASE-NOTES-v1.9.md and MULTI-TENANT.md.


[1.8.0] — 2026-06-04

C-A Pluggable Storage Backends — bring your own storage without forking

Extends the package contract so a customer can supply their own storage backend (S3 / Azure Blob / own-DB) without forking, via a narrow IStorageBackend primitive the rich IStorageService composes over — Cesivi's caching, plugins, change-notification and security-trimming stay in-house. (v1.7 was an untagged infrastructure cycle; the 1.7.0 version is intentionally skipped.)

  • α-1 — storage backend primitive seam (PLAN-1692): narrow streaming-first IStorageBackend (1 prop + 6 methods) over a typed StorageKey; StorageProviderRegistry front door (legacy Program.cs switch replaced, zero config change); InMemoryStorageBackend + BackendComposedStorageService prove "rich service composes over the primitive" end-to-end behind opt-in id InMemory-Backend. Zero shipping backends touched.
  • α-2 — bundled-backend composition (PLAN-1693): composed the whole IStorageService surface over IStorageBackend; fixed 3 latent FileSystem bugs in the shipping service (Libraries/Lists doc-path unification, removed a hardcoded debug log, sidecar items.db pool-release before recursive delete); added FileSystemStorageBackend (durable + native-streaming) under opt-in id FileSystem-Backend; conformance wall 43/43. Query pushdown (PLAN-274/275) does not compose through the narrow primitive, so the 4 SQL backends + FileSystem keep their legacy shipping ids (permanent, byte-identical, zero data re-key).
  • α-3 — first third-party backend + package loading (PLAN-1694): Cesivi.Storage.S3 (S3StorageBackend over a narrow IS3Gateway; AWSSDK.S3, MinIO-compat) selectable via Cesivi:StorageProvider="s3"; manifest top-level backendProviders + PackageActivatorStorageProviderRegistry; signing/isolation gate (signed→in-proc; unsigned in-proc + OOP-backend refused with stable codes); HealthGatedStorageBackend (fault→typed exception, never fail-soft-to-empty). Conformance 22/22 Docker-free + skippable MinIO.
  • α-3.2 — out-of-process backend + streaming (PLAN-1695): unsigned→OOP backend runs in the sandboxed worker; the host marshals every op and blobs stream over a pull/push sub-protocol on the existing worker channel (backpressure implicit, no new credit layer). Paired-channel conformance 8/8 (incl. 5.5-chunk large blob + worker-death fault).
  • Ship-ceremony residue (PLAN-1696): /health and the root / banner now report the real product version (read from the assembly informational version; was hardcoded 1.0.0).

Drop-in upgrade from v1.6.0 — no migration, no data re-key. The 6 bundled storage ids (FileSystem, InMemory, SqlServer, Sqlite, MySql, LiteDb) resolve byte-identically through the new registry. NEW: Cesivi:StorageProvider="s3" selects the bundled S3 backend; packages may contribute IStorageBackends via manifest top-level backendProviders (signed→in-proc, unsigned→OOP worker); opt-in proof ids InMemory-Backend / FileSystem-Backend. β (search) / γ (auth) backend tiers are future additive slices. See RELEASE-NOTES-v1.8.md.


[1.6.0] — 2026-06-02

UI Feature Parity Audit + Multi-Provider IDP Unification + Customer Extensibility Surface

  • Workstream A — UI Feature Parity Audit (PLAN-1656..1673): Full inventory of 26 SP SE Classic feature areas (20 ✅ / 4 🟡 / 2 ⬜). Per-cluster gap closures: B1 Workflow UI (14/14), B2 Publishing lifecycle+variations+deployment (31/31), B3 BCS CRUD+admin (19/19), B4 Specialty Lists/Calendar, B5 Social Features (14/14), B6 Settings sub-pages — aclinv.aspx Grant Permissions form (16/16), B7 Extensibility E2E (21+/21+). See RELEASE-NOTES-v1.6.md.
  • Workstream B — Multi-Provider IDP Consolidation (PLAN-1657): Residual OIDC challenge exception handling merged from main1 (Login.cshtml.cs try/catch for unreachable IdP). _docs/MULTI-PROVIDER-IDP.md updated to v1.6. server-stable retagged.
  • Workstream C — Customer Extensibility Surface (PLAN-1658..1666): Typed context interfaces (Cesivi.Sdk.Hosting), Web Part gallery integration, custom field renderer/storage wiring, in-process event receiver dispatcher, feature lifecycle, provisioning services (CT/Field/List/ListTemplate/WebTemplate with REST discovery endpoints), developer tooling (dotnet new cesivi-package/cesivi-webpart/cesivi-feature, DEVELOPER-GUIDE.md).
  • v1.6 Integration Gap Closure (PLAN-1674): PackageWebPartsBridge fixed (WebPartManager.GetEffectiveTypeName/MatchesTypeName + UnavailableWebPart fallback); WebPartExtensibilityE2ETests pre-built DLL pattern (2/2 GREEN); Newlobsystem.aspx implemented. All 22 E2E tests GREEN.

Drop-in upgrade from v1.5.0 — no migration. New REST endpoints: /_api/cesivi/extensions/{list,web}templates, /_api/web/lists('{id}')/workflowsubscriptions. New admin: aclinv.aspx Grant Permissions form; Newlobsystem.aspx. New developer: dotnet new cesivi-* templates via Cesivi.Templates NuGet.


[1.5.0] — 2026-05-30

Realtime Live-Update Beyond AllItems, WORM Cloud Adapters, SPO Backup, Memory Scale Gates

  • Group D — Realtime beyond AllItems (PLAN-1651): DispForm per-item SignalR filter (filterItemId in isRelevantChange; Deleted→redirect-to-AllItems). Site Home per-widget multi-list subscribeList() + /api/webpartrefresh HTML-fragment endpoint + data-realtime-list DOM opt-in. Sub-web isolation fix: WebPathForNotification strips RootWeb/ prefix so group key is list:subweb:Name not list:RootWeb/subweb:Name. 2 regression tests (13/13 GREEN) + 9 Playwright two-tab E2E tests (DispForm 3 + Home 4 + sub-web 2). See RELEASE-NOTES-v1.5.md.
  • Group E — Memory Residuals — N/A (re-classified): Investigation confirmed every BACKLOG-v1.x §16-phaseC cluster shipped in v1.1 (PLAN-1598..1603). No additional plan filed.
  • Group C-1 — WORM Cloud Adapters (PLAN-1652): S3ObjectLockWormAuditLogStore (S3 Object Lock COMPLIANCE, WormSegmentEntry.S3VersionId for version-aware delete) + AzureBlobImmutableWormAuditLogStore (API version V2023_11_03). Config-driven DI factory (Cesivi:Archive:Worm:Backend = FileSystem|S3|AzureBlob; FileSystem default). 63 WORM contract-parity tests GREEN (MinIO + Azurite). Setup wizard S3/AzureBlob panels (17/17 GREEN). WormChainMigrator + StorageConverter CLI --migrate-worm-chain (2 migration tests). StorageBrowser WormBackendName row. Docs: ARCHIVE_AUDIT.md + COMPLIANCE_COOKBOOK.md cloud-WORM section + KNOWN_LIMITATIONS.md resolved.
  • Group C-2 — Variant B SPO Local Backup (PLAN-1653): SpoConnector : ICesiviConnector (MSAL OAuth2: device-code + client-credentials). DataExporter SPO-compat + ThrottlingPolicy (Retry-After). Per-list ChangeToken watermark in ICheckpointStore. IncrementalSyncService (GetChanges-based, idempotent). Three cadence modes (daily/hourly/cron + SpoWebhookDaemon 5s-debounce + SubscriptionRenewalService). Setup wizard SPO panel + ControlCenter SpoSyncStatus page. TUTORIAL_H_ARCHIVE_SPO_BACKUP.md + compliance cookbook Variant B section. 26 tests GREEN. One-way (SPO → Cesivi) in v1.5; round-trip is v1.6+.
  • §16-phaseD — Customer-scale memory acceptance tests (PLAN-1654): ScaleSeed.SeedListRowsAsync/SeedLargeFileAsync/SeedReindexCorpusAsync + SqliteScaleTestFixture + MemoryStressGuard.WithWorkingSetBudget(2 GB). 3 smoke tests GREEN (50 rows/1 MB/100 docs). 3 opt-in tests SKIP-correctly (CESIVI_MEMORY_SCALE_TESTS=1 gating). Root-cause fix: SqliteStorageService.LoadWebAsync rebuilds web.Lists from Lists table after cache miss.

Drop-in upgrade from v1.4.0 — no migration. New optional config: Cesivi:Archive:Worm:Backend (default FileSystem) + SPO source block (absent = no change). New DOM contract: data-realtime-list opt-in for Site Home widgets.


[1.4.0] — 2026-05-30

Accessibility (WCAG 2.1 AA), German i18n Wave 9, OpenTelemetry WebUI

  • Group A1 — WCAG 2.1 AA × 10 surfaces (PLAN-1638..1647): KnownAxeAcceptances=[] on every PRIORITY 0 surface. Keyboard nav + SR semantics + Narrator proxy reports per surface. _a11y.css global contrast overrides. NEW forms/field-validation.mjs (jump-to-first-error + aria-invalid, inherited by all FieldRenderers). WAI-ARIA tree on TermStoreManager. keyboard-reorder.mjs shared helper (3 consumers). _LayoutBlank.cshtml <main> landmark. NEW USER-GUIDE-ONLYOFFICE.md. See RELEASE-NOTES-v1.4.md.
  • Group A2 — JS i18n Wave 9 (PLAN-1648): 36 JS files migrated to Cesivi.t() lookups; wave9-strings-en-US.json 555 keys (en-US + de-DE) across 18+ namespaces. 172/172 multilingual GREEN. Closes the German-UI translation arc at the JS layer.
  • Group B — OpenTelemetry WebUI client-side (PLAN-1649): cesivi-telemetry.mjs client SDK + batched flush + PII scrub; POST /api/telemetry server endpoint; cesivi-fetch.mjs W3C traceparent wrapper (7 call sites); per-surface spans (listview start/render/interaction; form save); config-driven sampling (OpenTelemetry:Sampler default always_off). NEW TelemetrySettings.aspx admin toggle + TELEMETRY-GUIDE.md. 21 JS unit + 4 E2E + 2 traceparent tests GREEN.

Drop-in upgrade from v1.3.0 — no migration, no flag changes. NEW optional OpenTelemetry:Sampler + OpenTelemetry:SampleRate config keys (default off).


[1.3.0] — 2026-05-29

UI Quality + Feature Parity to SharePoint Server Subscription Edition

  • Surface #1 — Site Collections + Sub-Sites (PLAN-1629): Central Admin SC pages; InheritPermissions checkbox; sub-web depth 1/2/3; 33 E2E + CSOM/PnP/REST/SOAP smoke. See USER-GUIDE-SITE-COLLECTIONS.md.
  • Surface #2 — Lists + Libraries (PLAN-1636 + PLAN-1626): 12-template lifecycle matrix; AdvSetng round-trip; versioning+content-approval; library-specific surfaces (checkout/OnlyOffice/picture-lib); Save-As-Template; 77 E2E + cross-client smoke. See USER-GUIDE-LISTS-AND-LIBRARIES.md.
  • Surface #3 — List Items + File Uploads (PLAN-1628): 12-type column renderer matrix; upload-path matrix; folder ops; sub-web routing bugs fixed (CreateFolder, AddFileToLibrary, SaveFileAsync). See USER-GUIDE-LIST-ITEMS.md.
  • Surface #4 — Site + List Columns (PLAN-1630): site-column gallery; 13 field-type matrix; push-down propagation; advanced types (Calculated/Taxonomy/Lookup-multi); 50 E2E + 12 smoke. See USER-GUIDE-COLUMNS.md.
  • Surface #5 — List Views (PLAN-1631): Calendar/Gantt/Datasheet; PersonalView isolation; CAML sort/filter/group-by round-trip; 47 E2E + 12 smoke. See USER-GUIDE-VIEWS.md.
  • Surface #6 — Permissions (PLAN-1632): web/list/item/folder/file scopes; all 5 URL shapes guarded (v422.x treadmill class); 55 E2E + 9 smoke. See USER-GUIDE-PERMISSIONS.md.
  • Surface #7 — Web Parts + Wiki Pages (PLAN-1633): add/remove across all URL shapes (v422.x guard); wiki Edit-Mode UX consolidated into ribbon (PLAN-1626 Phase C); 44 E2E + 12 smoke. See USER-GUIDE-WEBPARTS-AND-WIKI.md.
  • Surface #8 — Search (PLAN-1634): 5 entry-point URL shapes guarded; KQL syntax matrix; admin CRUD (ManagedProperties/ResultSources/ResultTypes/DisplayTemplates/QueryRules); security trimming; 47 E2E + CSOM smoke. See USER-GUIDE-SEARCH.md.
  • Surface #9 — Taxonomy / Managed Metadata (PLAN-1635): TermStoreManager admin; term-picker UX; ManagedMetadata column lifecycle; enterprise keywords; managed navigation; CSOM+REST/SOAP gaps closed; 54 tests. See USER-GUIDE-TAXONOMY.md.
  • Surface #10 — OnlyOffice Integration (PLAN-1627): live container (OO 8.2.2); 2 bugs fixed (UpdateList cache-invalidation bypass; GetParentListAsync wrong storage key); browser-iframe E2E; 16/16 GREEN. See onlyoffice-admin.md.

Drop-in upgrade from v1.2.0 — no migration, no flag changes.


[1.2.0] — 2026-05-28

SharePoint Archive Variant A (G1–G4)

  • Archive Mode (PLAN-1606): archive_mode flag on Web+List; write-rejection gate (ArchiveGateService) at all REST/CSOM/SOAP mutation paths; "ARCHIVED" banner in modern UI; ControlCenter /Archive/Mode toggle + audit trail. See ARCHIVE_MODE.md.
  • Federated Identity + Snapshot Fallback (PLAN-1607): Identity snapshot at import (IIdentitySnapshotStore, 4 backends); IArchiveIdentityResolver three-tier resolver; UserFieldRenderer archive render-layer markers; IArchivedAclStore + ArchivedAclAuthorizationService; ControlCenter /Archive/Identity dashboard. See ARCHIVE_IDENTITY.md.
  • MigrationTool Full-Fidelity Importer (PLAN-1608): ArchiveImporter coordinator importing lists, items, ALL versions, attachments, CTs, fields, permissions, users, groups, term store; resumable via checkpoint store; ControlCenter /Archive/ImportProgress. See ARCHIVE_IMPORTER.md.
  • Per-Item Audit Log + WORM Substrate (PLAN-1609): FileSystemWormAuditLogStore (sealed-segment JSONL, SHA-256 hash chain, OS-level immutability); DurableAuditEventSink; 5 event types; WormChainVerificationService; ControlCenter /Archive/AuditLog with SignalR live-tail + CSV export. See ARCHIVE_AUDIT.md.
  • Long-Term Integrity Verification (PLAN-1610): SHA-256 hash at import; IntegrityVerificationService background walker; ArchiveReadIntegrityGate on-access gate (451 on mismatch); ControlCenter /Archive/Integrity dashboard. See ARCHIVE_INTEGRITY.md.
  • Retention Enforcement (PLAN-1611): Hard gate (no admin override) at 12 mutation call sites; FileSystemArchiveRetentionStore; RetentionHub SignalR live-tail; ControlCenter /Archive/Retention with expiration heatmap. See ARCHIVE_RETENTION.md.
  • Legal Hold (PLAN-1612): Hold beats retention; ArchiveLegalHoldGate at same 12 call sites + 8 read sites; per-item read-access logging; ControlCenter /Archive/LegalHold. See ARCHIVE_LEGAL_HOLD.md.
  • ControlCenter Archive Admin Bundle (PLAN-1614): _ArchiveLayout.cshtml secondary nav; 7-card KPI dashboard; ArchiveBundleHub SignalR fan-in. See ARCHIVE_CONTROLCENTER.md.
  • Tools Archive-Awareness (PLAN-1620): StorageBrowser archive indicators; StorageConverter 7 archive metadata movers (WORM-safe); Setup wizard archive branch (3 XAML pages). See ARCHIVE_TOOLS_OPERATOR.md.
  • Tutorial G + Whitepaper + Compliance Cookbook (PLAN-1621): TUTORIAL_G_ARCHIVE_ONPREM_RETIREMENT.md (end-to-end); CESIVI_ARCHIVE_VARIANT_A.md (whitepaper); COMPLIANCE_COOKBOOK.md (HIPAA/GDPR/SOX/FRCP).

Acceptance Gates

Side Fixes

  • BUG-1515..1520 (PLAN-1623): /_layouts/15/new.aspx template chooser; SitePages save URL-normalization data-loss fix; ribbon Edit-button visibility; canonical ?editmode=1; Add-WebPart gallery wiring; viewlsts.aspx regression guard.

Test Suite

Suite Result vs v1.1.0
Server-batch PENDING Phase 1 baseline: 6519P/8F/4S
RestSoap PENDING Phase 1 baseline: 786P/0F/0S
CSOM PENDING Phase 1 baseline: 584P/3F/7S
MsCsom PENDING Phase 1 baseline: 583P/3F/7S

[1.1.0] — 2026-05-26

Memory Footprint Hardening

  • Cluster 3F — DB-provider StreamListItemsAsync (PLAN-1598): SqlServer + PostgreSQL providers now override StreamListItemsAsync with AsAsyncEnumerable() for true row-by-row streaming, replacing DIM page-buffering. H1+H2 unbounded sites eliminated.
  • Cluster 4 — StorageConverter ByteArray round-trip (PLAN-1600): StorageConverter round-trip fidelity hardened; byte-array handling bounded.
  • Cluster 5 — BatchProcessor + ResponseCachingMiddleware (PLAN-1601): BatchProcessor.ParseBatchRequestAsync now uses a chunked char[8192] read loop with 16 MiB hard cap (MaxBatchBodyBytes; oversize → HTTP 413). ResponseCachingMiddleware MISS path caps response body at 1 MiB (MaxCacheableResponseBytes); over-cap responses stream uncached. C3+D1 unbounded sites eliminated.
  • Cluster 6 — SearchIndexCrawlerService (PLAN-1599): search indexer background loop bounded.
  • Cluster 7 — AuditLog ring-buffer + G1 sort (PLAN-1603): AuditServiceOptions.MaxInMemoryEntries cap (10000) with FIFO eviction in LogEventAsync; OrderByDescending on bounded list (G1 bounded-by-F1). Micro-fix G3 (XML doc on StorageQueryHelper.ApplyQuery, bounded-by-caller). Micro-fix G4 (inline comment in GetListItems slow-path, bounded-by-fast-path). F1 + G1 + G3 + G4 all GREEN. v1.x Memory Audit backlog COMPLETE — 0 UNBOUNDED sites remain.

E2E Stabilization

  • 98.03% pass rate (PLAN-1596): Full-batch Playwright suite 2142P/10F/33S across 306 classes. Gate 97% cleared with margin. 66 deferred v1.0 failures resolved.
  • 10 residual closures (PLAN-1597): ModernRedirectMiddleware /Modern/Settings exemption restored; DispForm navigation fix; Regionalsetng.cshtml label for= axe fix; 8-class regression sample 75/75 GREEN.

Direction — v1.2 SharePoint Archive Variant A

  • Scope decision recorded (masterplan §"v1.1 SHIP-GATE + v1.2 MISSION"): SharePoint Archive Variant A (on-prem retirement archive) is the v1.2 flagship mission. Full-fidelity import of lists / libraries / items / versions / attachments / CTs / fields / permissions / users / groups / term store. Track plan at _project/areas/sharepoint-archive/implementation-track.md.

Test Suite

Suite Result vs v1.0
E2E (Playwright) 2142P/10F/33S — 98.03% +2.28pp vs v1.0 95.75%
Server-batch 6519P/8F/4S (0 product regressions)
RestSoap 786P/0F/0S (+40P/-12F vs Round-2)
CSOM 584P/3F/7S (FLAKE/STATE only)
MsCsom 583P/3F/7S (-11F vs Round-2)

[1.0.0] — 2026-05-24

First general-availability release of Cesivi Server.

Highlights

  • REST API — 20+ endpoint groups, 150+ routes, full OData v3/v4 support including $select, $filter, $expand, $orderby, $top, $skip, batch requests, and CAML query push-down via RenderListDataAsStream
  • SOAP — 26 SharePoint SOAP services (Lists, Webs, SiteData, People, Search, Versions, Copy, Workflow, UserGroup, etc.)
  • CSOM — ~98% of Microsoft.SharePoint.Client surface area; load-lambda expression evaluation; ObjectPath batching; real ClientRequestException on 404/403
  • PnP PowerShell — ~81% cmdlet parity; 154 cmdlets across 26 categories via the CS-* prefix; Connect-CSSite/Disconnect-CSSite connection management
  • PowerShell moduleCesivi.PowerShell v3.1.0; installable from the PowerShell Gallery workflow
  • Authentication — NTLM, Basic, Bearer JWT, Forms-based, SAML/WS-Federation, Certificate, App-Only (ACS + OAuth2 client-credentials)
  • Storage back-ends — FileSystem (default), InMemory, SqlServer, SQLite, MySQL, LiteDb, PostgreSQL; all providers pass the full storage-parity matrix
  • Search — KQL parser, Lucene full-text indexing with leader-election for multi-node clusters; managed properties, result sources, query rules, display templates
  • Taxonomy — full Term Store (Groups/Term Sets/Terms), CSOM TaxonomySession surface, REST /_api/v2.0/termStore, PnP taxonomy cmdlets
  • Publishing — Publishing Web activation, Pages library (BaseTemplate 850), scheduling, approval workflow, variations
  • Forms Designer — visual tab/section/field layout editor with visibility rules, default-value override, custom HTML slots; consumer surfaces wired to NewForm/EditForm/DispForm
  • BCS — Tier 1–4 Business Connectivity Services (external content types, HTTP/JSON/REST providers, event subscriptions)
  • OnlyOffice integration — WOPI host for in-browser document editing (Community Edition, 20-connection cap)
  • Clustering — Garnet embedded or external Redis back-plane; Lucene leader-election; DataProtection key sharing; SignalR cross-node via Redis; two-node smoke tests
  • Modern UI — face-lifted shell (_ModernLayout) over the complete classic SharePoint feature surface; three density modes; WCAG 2.1 AA a11y pass; multilingual (en-US, de-DE)
  • Cesivi Administration — rebranded Central Administration pages; farm health, web app management, service config, timer jobs, backup/restore
  • Migration Tool — document-library import from file-system, SharePoint Online (via CSOM), SharePoint 2016/2019
  • ExtensibilityCesivi.Server.Extensibility plugin framework (collectible ALC, hook system, custom field renderers, custom API surfaces, custom web parts)
  • E2E test suite — Playwright-based, 309 test classes, 95.75% pass rate (2048P/66F/25S)

Known Limitations

See _docs/KNOWN_LIMITATIONS.md for the full catalog. Key items:

  • ~39 PnP tests blocked by PnP PowerShell 3.x client-side limitations (not server-side)
  • CSOM suite-level CsomListItemTests hang when run en-masse (pass individually); use the batch runner
  • 3 LoadQueryWhere tests skip due to client-side BaseType enum limitation
  • OnlyOffice: 20-connection Community Edition cap; legacy .doc/.xls/.ppt require conversion step
  • 66 E2E test failures deferred to v1.1 (scatter residuals across ModernMisc, ModernForm, SuiteBar, SearchFlow, VersioningSettings, TopNavMobile, Ribbon classes)

Upgrade Path

N/A — this is the first release.