> ## Documentation Index
> Fetch the complete documentation index at: https://docs.internal.nscale.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Object Storage (S3)

> The S3-compatible object storage Fleet Manager depends on for test images, reports and firmware artifacts.

* **Kind:** Dependency
* **Version:** 1
* **Fleet Manager owner:** Fleet Manager squad, #fleet-manager-chat (individual claimant pending)
* **Counterpart owner:** unassigned, Platform Services storage team (UNI object storage)
* **Last reviewed:** 2026-09-09

## What flows

Fleet Manager reads and writes artifacts in an S3-compatible bucket, one per environment (`fleet-manager-s3-<env>`
unless overridden). Hardware-test squashfs images are published to and pulled from it (ADR-0033,
`src/fleet_manager/temporal/activities/hardware_test_images.py`); [burn-in](../start-here/glossary#burn-in) reports and customer [handover](../start-here/glossary#handover) bundles are
uploaded to it (`src/fleet_manager/temporal/activities/reports.py`); firmware verification and [in-band](../start-here/glossary#in-band) firmware
inventory artifacts land there too. The workflow agent turns stored artifacts into download links for operators.
Fleet Manager holds no [device](../start-here/glossary#node) state in the bucket; losing it loses evidence and images, not the state machine.

## What breaks if this changes

A quota, credential or endpoint problem fails image preparation, report generation and firmware verification
workflows at their upload or download step. The satellite chart keeps in-band firmware inventory off until the
resolved credential can reach the bucket for that reason. A quota exhaustion has already broken this relationship
once, before the bucket was UNI-backed.

## Enforcement

* **Principal:** the object-storage credential issued to the workflow agent and [Temporal](../start-here/glossary#temporal) worker per site.
* **Mechanism:** S3 access key and secret, either from the Kubernetes Secret produced by the object-storage operator
  (`enableOperatorSecret`, default `workflow-agent-object-storage-credentials`) or from the `object-storage`
  [1Password](../start-here/glossary#1password) item (`src/fleet_manager/settings/clients/object_storage.py`, see [onepassword](./onepassword)); endpoint defaults to
  `https://s3.glo1.nscale.com`.
* Chart: `objectStorage` blocks in the hub and satellite charts.

## Gaps

* No quota or usage signal reaches Fleet Manager; the first symptom of a full bucket is a failed workflow.
* No pact or contract test; the S3 API surface used is small and stable.

## Change log

* 2026-09-09 v1: created; describes present behaviour.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.