HIP-1337: Space โ Sovereign Organization Workspaces, Virtual Drives & File Namespaces. Status Final. Hanzo architectural specification.
Package space (/v1/space) establishes a multi-tenant workspace, drive, and file abstraction layered over Hanzo's S-Chain distributed object store (hanzoai/s3). While Hanzo IAM answers "who" (organization, team, user, agent), space answers "where" (namespaces, drives, and file trees).
This proposal specifies the virtual drive model, presigned zero-copy file uploads/downloads, and cardinality management across organizations and team spaces.
Direct object storage APIs expose low-level bucket management that conflicts with multi-tenant organization boundaries. Creating a discrete cloud bucket per drive causes high cardinality that severely degrades bucket listing performance and complicates billing attribution. Conversely, flat shared buckets lack organizational boundaries, permission inheritance, and human folder semantics.
space resolves this by decoupling logical drives from physical buckets: one physical bucket exists per (org, space) pair, and drives are represented as key prefixes within that bucket. This preserves sub-millisecond prefix listing, eliminates per-tenant bucket explosion, and enables billing rollups directly to the parent organization.
The key words MUST, MUST NOT, SHOULD, SHOULD NOT and MAY are to be interpreted as in RFC 2119.
engineering, legal, finance). Billing attaches strictly to the owning organization.<org>-<space>/<drive>/...)./ delimiters in object keys. No explicit folders table exists, preventing naming drift upon file renames.(org, space) pair. Name syntax matches ^a-z0-9?$.File payloads MUST NOT pass through the API gateway or control plane process:
POST /v1/space/:space/drives/:drive/files to mint an authenticated presigned PUT URL against the public S3 endpoint.GET /v1/space/:space/drives/:drive/files/* to mint an authenticated presigned GET URL.presignTTL = 5 * time.Minute). The short TTL serves as the primary capability revocation window.| Method | Path | Description | |:---|:---|:---| | GET | /v1/space | List all spaces in the authenticated organization | | POST | /v1/space | Create a new space | | GET | /v1/space/:space | Get space metadata and storage stats | | DELETE | /v1/space/:space | Delete a space and purge underlying buckets | | GET | /v1/space/:space/drives | List drives in a space | | POST | /v1/space/:space/drives | Provision a new drive prefix | | GET | /v1/space/:space/drives/:drive/files | List files and folders within a drive prefix | | POST | /v1/space/:space/drives/:drive/files | Request presigned upload URL | | GET | /v1/space/:space/drives/:drive/files/ | Request presigned download URL | | DELETE | /v1/space/:space/drives/:drive/files/ | Delete an object |