diff --git a/Directory.Build.props b/Directory.Build.props
index 96b88ca..2575f3c 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -29,8 +29,8 @@
https://github.com/managedcode/Storage
https://github.com/managedcode/Storage
Managed Code - Storage
- 10.0.9
- 10.0.9
+ 10.0.10
+ 10.0.10
diff --git a/ManagedCode.Storage.Core/AGENTS.md b/ManagedCode.Storage.Core/AGENTS.md
index 3464ada..d2b451b 100644
--- a/ManagedCode.Storage.Core/AGENTS.md
+++ b/ManagedCode.Storage.Core/AGENTS.md
@@ -51,3 +51,5 @@ Parent: `../AGENTS.md`
- Treat `IStorage`, `IStorageProvider`, and factory abstractions as public contracts; changing them is an ask-first API change.
- Keep shared helpers vendor-agnostic; SDK-specific behavior belongs in provider projects, not in Core.
- Preserve keyed and default storage resolution semantics because VFS, server integrations, and Orleans depend on them.
+
+- Shared low-level storage contracts and value types belong in `ManagedCode.Storage.Core.Primitives`; do not introduce a generic `Objects` namespace.
diff --git a/ManagedCode.Storage.Core/Objects/IObjectStorage.cs b/ManagedCode.Storage.Core/Primitives/IObjectStorage.cs
similarity index 97%
rename from ManagedCode.Storage.Core/Objects/IObjectStorage.cs
rename to ManagedCode.Storage.Core/Primitives/IObjectStorage.cs
index 572f8fa..ad2fd50 100644
--- a/ManagedCode.Storage.Core/Objects/IObjectStorage.cs
+++ b/ManagedCode.Storage.Core/Primitives/IObjectStorage.cs
@@ -4,7 +4,7 @@
using System.Threading;
using System.Threading.Tasks;
-namespace ManagedCode.Storage.Core.Objects;
+namespace ManagedCode.Storage.Core.Primitives;
/// Optional atomic object operations. Providers must enforce conditions server-side.
public interface IObjectStorage
diff --git a/ManagedCode.Storage.Core/Objects/StorageObjectModels.cs b/ManagedCode.Storage.Core/Primitives/StorageObjectModels.cs
similarity index 97%
rename from ManagedCode.Storage.Core/Objects/StorageObjectModels.cs
rename to ManagedCode.Storage.Core/Primitives/StorageObjectModels.cs
index dd629ac..a024439 100644
--- a/ManagedCode.Storage.Core/Objects/StorageObjectModels.cs
+++ b/ManagedCode.Storage.Core/Primitives/StorageObjectModels.cs
@@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
-namespace ManagedCode.Storage.Core.Objects;
+namespace ManagedCode.Storage.Core.Primitives;
public sealed record StorageContainerInfo(string ETag, bool IsPrivate, IReadOnlyDictionary Metadata);
diff --git a/Storages/ManagedCode.Storage.Azure/AzureObjectOperations.cs b/Storages/ManagedCode.Storage.Azure/AzureObjectOperations.cs
index c9ddad3..8467b10 100644
--- a/Storages/ManagedCode.Storage.Azure/AzureObjectOperations.cs
+++ b/Storages/ManagedCode.Storage.Azure/AzureObjectOperations.cs
@@ -8,7 +8,7 @@
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;
-using ManagedCode.Storage.Core.Objects;
+using ManagedCode.Storage.Core.Primitives;
namespace ManagedCode.Storage.Azure;
diff --git a/Storages/ManagedCode.Storage.Azure/AzureStorage.ObjectOperations.cs b/Storages/ManagedCode.Storage.Azure/AzureStorage.ObjectOperations.cs
index 0ff2e77..ba52744 100644
--- a/Storages/ManagedCode.Storage.Azure/AzureStorage.ObjectOperations.cs
+++ b/Storages/ManagedCode.Storage.Azure/AzureStorage.ObjectOperations.cs
@@ -3,7 +3,7 @@
using System.IO;
using System.Threading;
using System.Threading.Tasks;
-using ManagedCode.Storage.Core.Objects;
+using ManagedCode.Storage.Core.Primitives;
namespace ManagedCode.Storage.Azure;
diff --git a/Storages/ManagedCode.Storage.Azure/AzureStorage.cs b/Storages/ManagedCode.Storage.Azure/AzureStorage.cs
index 9cb0c6c..4ed66ec 100644
--- a/Storages/ManagedCode.Storage.Azure/AzureStorage.cs
+++ b/Storages/ManagedCode.Storage.Azure/AzureStorage.cs
@@ -20,7 +20,7 @@
namespace ManagedCode.Storage.Azure;
public partial class AzureStorage(IAzureStorageOptions options, ILogger? logger = default)
- : BaseStorage(options), IAzureStorage, ManagedCode.Storage.Core.Objects.IMultipartObjectStorage
+ : BaseStorage(options), IAzureStorage, ManagedCode.Storage.Core.Primitives.IMultipartObjectStorage
{
private static readonly StorageTransferOptions DefaultUploadTransferOptions = new()
{
diff --git a/Tests/ManagedCode.Storage.Tests/Storages/Azure/AzureObjectStorageTests.cs b/Tests/ManagedCode.Storage.Tests/Storages/Azure/AzureObjectStorageTests.cs
index 846279b..e6c7af3 100644
--- a/Tests/ManagedCode.Storage.Tests/Storages/Azure/AzureObjectStorageTests.cs
+++ b/Tests/ManagedCode.Storage.Tests/Storages/Azure/AzureObjectStorageTests.cs
@@ -5,7 +5,7 @@
using System.Threading.Tasks;
using ManagedCode.Storage.Azure;
using ManagedCode.Storage.Azure.Options;
-using ManagedCode.Storage.Core.Objects;
+using ManagedCode.Storage.Core.Primitives;
using ManagedCode.Storage.Tests.Common;
using ManagedCode.Storage.VirtualFileSystem.Extensions;
using ManagedCode.Storage.VirtualFileSystem.Core;
diff --git a/docs/Architecture.md b/docs/Architecture.md
index dc7080c..a8bbd07 100644
--- a/docs/Architecture.md
+++ b/docs/Architecture.md
@@ -16,7 +16,7 @@ Single source of truth: keep this doc navigational and coarse. Detailed behavior
## Atomic object capabilities
`IStorage` retains its existing portable API. AzureStorage additionally implements
-`IObjectStorage` and `IMultipartObjectStorage` from Core. Consumers acquire these
+`IObjectStorage` and `IMultipartObjectStorage` from `ManagedCode.Storage.Core.Primitives`. Consumers acquire these
capabilities with `RequireObjectStorage` / `RequireMultipartStorage`; unsupported
providers fail explicitly rather than approximating atomic conditions. No Azure
SDK models appear in these capability contracts. `AzureStorageConnection.Create`