diff --git a/.repo-classification.yaml b/.repo-classification.yaml new file mode 100644 index 0000000..d5a5941 --- /dev/null +++ b/.repo-classification.yaml @@ -0,0 +1,23 @@ +repo_classification: + standard: Repo Classification Standard + version: "1.0" + classified_at: "2026-08-14" + classified_by: agent + category: project + domain: financials + secondary_domains: + - infotech + capability_tags: + - platform + - operations + - storage + - governance + business_stake: + - technology + - operations + business_mechanics: + - coordination + - operation + repo_family: reef + ownership_repo: railiance-platform + substrate_kind: object-storage diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..d6283bb --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,17 @@ +# reef-storage — Agent Instructions + +## Repo Identity + +**Purpose:** Provider-delegated S3-compatible storage substrate. Owns +non-secret operating attributes. Does not host a rail. + +**Domain:** financials +**Repo slug:** reef-storage +**Workplan prefix:** `REEF-STORAGE-WP-` + +## Standing rules + +- No rail. Scaleway (or a successor provider) operates S3. +- No secrets in this repo. Cite `secret:railiance-platform/`. +- Attribute files are the source for `reef:storage/…#key` references. +- Do not fold this substrate into `reef-railiance`. diff --git a/INTENT.md b/INTENT.md new file mode 100644 index 0000000..d6ac90e --- /dev/null +++ b/INTENT.md @@ -0,0 +1,31 @@ +# INTENT + +## Why This Repo Exists + +`reef-storage` is the substrate boundary for **provider-delegated +S3-compatible object storage**. The first instance is Scaleway, used for +postgres backup and other large, slow-tolerant volumes. + +We consume the S3 capability. We do **not** host a rail and we do **not** +operate how Scaleway provides or runs object storage. This reef names the +boundary, holds the committed non-secret attributes, and is the place +operators look for “where is our object store?” + +It is a different reef from `reef-railiance`. Backup is not bolted onto +the home compute substrate. + +## What This Repo Must Protect + +- the split: procure/cost in `resource-control`, operate-by-reference here, + secrets in `railiance-platform`, consume in `rapp-*` +- no rail invented to satisfy a compute-centric schema +- no secret material in git +- independent failure domain from Host Europe / `reef-railiance` + +## What This Repo Is Not + +- a Scaleway account manager or billing ledger +- a Barman/CNPG operator (`rapp-postgres`) +- a secret store +- a generic S3 client library +- an extension of `reef-railiance` diff --git a/README.md b/README.md index 60e7492..9a73d78 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,12 @@ # reef-storage -Low cost data secure storage. Runtime independent S3 compatible storage facility for backup and large volume storage that can tolerate rather slow access. \ No newline at end of file +Low-cost, data-secure, runtime-independent **S3-compatible** storage +substrate for backup and large volumes that can tolerate slow access. + +Scaleway provides the S3 capability. This reef does **not** host a rail +and does not operate the object store. It names the boundary and holds +non-secret attributes. + +- Declaration: `declarations/reef.yaml` +- Attributes: `substrate/object-stores/` +- Join: `reef:storage/#` from `resource-control` \ No newline at end of file diff --git a/SCOPE.md b/SCOPE.md new file mode 100644 index 0000000..90a9642 --- /dev/null +++ b/SCOPE.md @@ -0,0 +1,29 @@ +# SCOPE + +## One-liner + +Provider-delegated S3-compatible storage reef: identity and non-secret +attributes, not a rail, not a secret store. + +## In Scope + +- Reef declaration (`substrate_kind: object-storage`, no rail) +- Committed non-secret object-store attributes (endpoint, region, bucket, + prefix, versioning/lifecycle flags, provider project ref) +- Runbooks for “how we use the delegated store,” not how Scaleway runs it +- Binding notes for consumers (`rapp-postgres` first) + +## Out of Scope + +- Purchase approval, forecasts, settlement (`resource-control`) +- Access keys and OpenBao delivery (`railiance-platform`) +- WAL archive, backup schedule, restore (`rapp-postgres`) +- Hosting Kubernetes or any rail +- Implementing S3 + +## Getting Oriented + +- Declaration: `declarations/reef.yaml` +- Attribute contract: `schemas/object-store-attributes.schema.json` +- Attribute files: `substrate/object-stores/` +- Join convention: `resource-control/docs/operational-reference-convention.md` diff --git a/declarations/reef.yaml b/declarations/reef.yaml new file mode 100644 index 0000000..2668875 --- /dev/null +++ b/declarations/reef.yaml @@ -0,0 +1,20 @@ +kind: substrate-reef +reef_id: reef-storage +repo: reef-storage +ownership_repo: railiance-platform +substrate_kind: object-storage +lifecycle_state: planned +criticality: high +current_members: [] +source_documents: + - repo: railiance-master + path: docs/reef-substrate-model.md + - repo: railiance-master + path: workplans/RMASTER-WP-0022-establish-reef-storage.md + - repo: resource-control + path: docs/operational-reference-convention.md +compatibility_notes: + - "S3-compatible capability is delegated to Scaleway. This reef does not host a rail and does not operate the object store internals." + - "Non-secret attributes (endpoint, bucket, region, prefix, lifecycle) live under substrate/object-stores/." + - "Credentials live in railiance-platform OpenBao. resource-control cites reef: and secret: references only." + - "This substrate is independent of reef-railiance. Backup is not provided on the home compute reef." diff --git a/schemas/object-store-attributes.schema.json b/schemas/object-store-attributes.schema.json new file mode 100644 index 0000000..165b957 --- /dev/null +++ b/schemas/object-store-attributes.schema.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://railiance.dev/reef-storage/object-store-attributes.schema.json", + "title": "Non-secret object-store attributes", + "type": "object", + "additionalProperties": false, + "required": ["schema_version", "resource_id", "provider", "status"], + "properties": { + "schema_version": {"const": "0.1"}, + "resource_id": {"type": "string", "pattern": "^resource:"}, + "provider": {"type": "string", "minLength": 1}, + "status": {"enum": ["planned", "active", "retired"]}, + "endpoint": {"type": ["string", "null"]}, + "region": {"type": ["string", "null"]}, + "bucket": {"type": ["string", "null"]}, + "prefix": {"type": ["string", "null"]}, + "versioning": {"type": ["boolean", "null"]}, + "lifecycle": {"type": ["string", "null"]}, + "provider_project_ref": {"type": ["string", "null"]}, + "notes": {"type": "array", "items": {"type": "string"}} + } +} diff --git a/substrate/object-stores/platform-audit-storage.yaml b/substrate/object-stores/platform-audit-storage.yaml new file mode 100644 index 0000000..7e6dffb --- /dev/null +++ b/substrate/object-stores/platform-audit-storage.yaml @@ -0,0 +1,15 @@ +# Planned. Fill after RESOURCE-WP-0002 purchase. No secrets. +schema_version: "0.1" +resource_id: resource:platform:audit-storage +provider: Scaleway +status: planned +endpoint: null +region: null +bucket: null +prefix: null +versioning: null +lifecycle: null +provider_project_ref: null +notes: + - Destination for rapp-postgres WAL and base backups once procured. + - resource-control cites reef:storage/substrate/object-stores/platform-audit-storage.yaml# diff --git a/workplans/REEF-STORAGE-WP-0001-bootstrap.md b/workplans/REEF-STORAGE-WP-0001-bootstrap.md new file mode 100644 index 0000000..5d0eb31 --- /dev/null +++ b/workplans/REEF-STORAGE-WP-0001-bootstrap.md @@ -0,0 +1,44 @@ +--- +id: REEF-STORAGE-WP-0001 +type: workplan +title: "Bootstrap reef-storage" +domain: financials +repo: reef-storage +status: active +owner: grok +topic_slug: railiance +created: "2026-08-14" +updated: "2026-08-14" +related: + - RMASTER-WP-0022 + - RESOURCE-WP-0002 +--- + +# REEF-STORAGE-WP-0001 — bootstrap + +## Goal + +Stand up the planned storage reef: declaration without a rail, attribute +file layout, and the contract for non-secret object-store facts. + +## T01 — Declare the reef + +```task +id: REEF-STORAGE-WP-0001-T01 +status: done +priority: high +``` + +`declarations/reef.yaml`: `substrate_kind: object-storage`, no +`primary_rail`, no `hosted_rails`, empty `current_members`, planned. + +## T02 — Attribute contract + +```task +id: REEF-STORAGE-WP-0001-T02 +status: done +priority: high +``` + +`schemas/object-store-attributes.schema.json` and a planned +`platform-audit-storage.yaml` with null operating fields until purchase.