bootstrap: planned object-storage reef, no rail
Declare reef-storage as substrate_kind object-storage. Hold non-secret attribute paths for Scaleway S3. Do not host a compute rail.
This commit is contained in:
parent
c5349e30bd
commit
ce0be1efad
9 changed files with 211 additions and 1 deletions
23
.repo-classification.yaml
Normal file
23
.repo-classification.yaml
Normal file
|
|
@ -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
|
||||||
17
AGENTS.md
Normal file
17
AGENTS.md
Normal file
|
|
@ -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/<id>`.
|
||||||
|
- Attribute files are the source for `reef:storage/…#key` references.
|
||||||
|
- Do not fold this substrate into `reef-railiance`.
|
||||||
31
INTENT.md
Normal file
31
INTENT.md
Normal file
|
|
@ -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`
|
||||||
11
README.md
11
README.md
|
|
@ -1,3 +1,12 @@
|
||||||
# reef-storage
|
# 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.
|
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/<path>#<key>` from `resource-control`
|
||||||
29
SCOPE.md
Normal file
29
SCOPE.md
Normal file
|
|
@ -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`
|
||||||
20
declarations/reef.yaml
Normal file
20
declarations/reef.yaml
Normal file
|
|
@ -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."
|
||||||
22
schemas/object-store-attributes.schema.json
Normal file
22
schemas/object-store-attributes.schema.json
Normal file
|
|
@ -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"}}
|
||||||
|
}
|
||||||
|
}
|
||||||
15
substrate/object-stores/platform-audit-storage.yaml
Normal file
15
substrate/object-stores/platform-audit-storage.yaml
Normal file
|
|
@ -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#<key>
|
||||||
44
workplans/REEF-STORAGE-WP-0001-bootstrap.md
Normal file
44
workplans/REEF-STORAGE-WP-0001-bootstrap.md
Normal file
|
|
@ -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.
|
||||||
Loading…
Add table
Add a link
Reference in a new issue