You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This Software Requirements Specification defines the technical requirements, architecture, interfaces, and constraints for implementing the Open World Model (OWM) system as described in BRS v1.1.0.
1.2 Scope
This document covers all software components of the OWM system: the node daemon, federated model engine, Lightning payment subsystem, OpenTimestamps anchoring, GitHub integration service, public API, and governance portal.
Federated Learning: McMahan et al., "Communication-Efficient Learning of Deep Networks from Decentralized Data" (2017)
2. Overall Description
2.1 Product Perspective
OWM is a distributed AI: many different AI models form one conglomerate system (it is not a single "model of the world"). It is a standalone distributed system composed of:
A P2P node network where each node runs the OWM daemon.
A coordinator layer that bootstraps the network and routes tasks (decentralizes progressively).
A model layer consisting of a federated ensemble of transformer-based sub-models.
A payment layer using Bitcoin Lightning for reward distribution.
A provenance layer using OpenTimestamps for model integrity.
A developer layer exposing a public API and GitHub integration tooling.
2.2 User Classes
User Class
Interface
Primary Action
Node Operator
CLI + Dashboard
Run node daemon, earn BTC
Data Contributor
CLI + API
Submit datasets, earn BTC
API Consumer
REST/WebSocket API
Query the conglomerate model (OWM)
GitHub User
GitHub App + Bounty Board
Contribute code, earn BTC
Core Maintainer
All interfaces + admin CLI
Deploy, configure, govern
Treasury Signer
Multisig wallet UI
Approve treasury transactions
2.3 Operating Environment
Node OS: Linux (Ubuntu 22.04+ primary; Debian/Arch supported). Windows/macOS via Docker.
GPU: NVIDIA CUDA 12.x (primary); AMD ROCm 6.x (Tier 1/2).
Python: 3.11+
Rust: 1.75+ (for LDK Lightning integration and performance-critical components)
Container: Docker 24+ / Podman 4+
Orchestration: Kubernetes (k8s) for coordinator; standalone daemon for nodes
Register with the coordinator (announce hardware tier, public key, LN node URI).
Receive and execute compute tasks (inference, training, gradient aggregation).
Report task completion proofs (hash of output + execution time + hardware attestation).
Maintain an LN payment channel to receive reward satoshis.
Participate in federated learning rounds.
Self-update via signed release packages (OTS-verified).
4.1.2 Functional Requirements
ID
Requirement
SRS-NODE-01
The daemon shall start with a single command: owm-node start --config owm.toml
SRS-NODE-02
On first run, the daemon shall generate an Ed25519 identity keypair stored in ~/.owm/identity.key
SRS-NODE-03
The daemon shall detect available GPU resources via nvidia-smi / rocm-smi and classify the node into Tier 1, 2, or 3 automatically
SRS-NODE-04
The daemon shall publish a signed capability manifest (hardware tier, VRAM, bandwidth estimate) to the coordinator every 60 seconds
SRS-NODE-05
The daemon shall execute tasks in isolated Python subprocesses with GPU memory limits enforced via CUDA MPS
SRS-NODE-06
The daemon shall maintain a local SQLite task log with inputs, outputs, timing, and payment status
SRS-NODE-07
The daemon shall validate all incoming tasks against a schema before execution
SRS-NODE-08
The daemon shall expose a local HTTP health endpoint on localhost:8080/health
SRS-NODE-09
The daemon shall support graceful shutdown, completing in-progress tasks before stopping
SRS-NODE-10
The daemon shall verify OTS proofs on all model weight updates before loading them
SRS-NODE-11
On first registration, the daemon shall guide the operator through opening a Lightning channel to the treasury with the required stake amount for their tier
SRS-NODE-12
The daemon shall monitor its stake channel health and alert the operator if channel capacity falls below the tier minimum (e.g., due to fee depletion)
SRS-NODE-13
The daemon shall optionally launch a built-in Stratum v2 mining client (owm-mine) that points at the OWM pool using the node's identity key
The payment subsystem shall connect to an LND or CLN node via gRPC/REST
SRS-LN-02
Node registration shall require a valid LN node URI (pubkey@host:port) for receiving payments
SRS-LN-03
The system shall attempt to open a payment channel to each new node upon registration if treasury balance permits
SRS-LN-04
Reward payments shall be dispatched within 60 seconds of task completion proof receipt
SRS-LN-05
All payment attempts, successes, and failures shall be logged with task ID, node ID, amount, and timestamp
SRS-LN-06
If a direct channel does not exist, the system shall route payment via the LN gossip graph
SRS-LN-07
The commercial API shall generate a BOLT11 Lightning invoice per request; access is granted upon payment confirmation
SRS-LN-08
GitHub bounty payments shall be triggered by a webhook from the GitHub App upon PR merge
SRS-LN-09
The treasury multisig wallet shall require 3-of-5 signatures for any on-chain transaction exceeding 0.01 BTC
SRS-LN-10
The system shall expose a /payments/history API endpoint for node operators to audit their earnings
SRS-LN-11
The coordinator shall query the treasury LN node to verify that a registering node's channel exists and meets the tier-minimum capacity before granting active status
SRS-LN-12
Upon slashing decision, the stake manager shall call the LN node's ForceCloseChan RPC for the offending node's channel ID
SRS-LN-13
All slashing events shall be logged immutably with: node ID, channel ID, reason, evidence hash, timestamp, and coordinator signature
SRS-LN-14
Mining pool FPPS rewards shall be dispatched to miners via Lightning within 60 minutes of each Bitcoin block confirmation, using the node's registered LN URI
Non-commercial (free tier): API key (rate limited: 100 req/day)
Commercial tier: Lightning invoice per request OR monthly subscription Lightning payment
Node operators: Authenticated via Ed25519 node identity key (exempt from rate limiting for node-management endpoints)
4.8.2 API Endpoints
# Query API
POST /v1/query # Send a query to the conglomerate model (OWM)
POST /v1/query/stream # Streaming token generation (WebSocket)
GET /v1/query/{query_id} # Retrieve cached query result
# Model & Provenance
GET /v1/model/versions # List all model versions with OTS status
GET /v1/model/versions/{id} # Get specific version metadata
GET /v1/model/versions/{id}/ots # Download OTS proof file
# GitHub Integration
POST /v1/github/analyze # Submit a repo for analysis
GET /v1/github/analysis/{id} # Get analysis results
GET /v1/github/bounties # List active bounties
POST /v1/github/bounties # Create a new bounty
# Node Management (authenticated)
POST /v1/nodes/register # Register a new node
DELETE /v1/nodes/{node_id} # Deregister a node
GET /v1/nodes/{node_id}/status # Get node status
GET /v1/nodes/{node_id}/earnings # Get earnings history
# Network
GET /v1/network/stats # Network-wide statistics
GET /v1/network/nodes # List active nodes (anonymized)
# Payments
GET /v1/payments/invoice # Generate Lightning invoice for API access
GET /v1/payments/history # Node operator earnings history
# Mining Pool
GET /v1/mining/stats # Pool-wide hashrate, miners, blocks found
GET /v1/mining/nodes/{node_id} # Node's mining stats and earnings
GET /v1/mining/payouts # Recent payout history (public)
GET /v1/mining/dashboard # WebSocket feed for live pool metrics
# Stake
GET /v1/stake/requirements # Tier stake minimums
GET /v1/stake/nodes/{node_id} # Node stake status and channel info
GET /v1/network/slashing-log # Public immutable slashing event log
# Governance
GET /v1/governance/proposals # List governance proposals
POST /v1/governance/proposals # Submit a new proposal (authenticated)
POST /v1/governance/proposals/{id}/comment # Comment on a proposal
4.8.3 Query Request/Response Schema
// POST /v1/query — Request
{
"query": "What is the current seismic activity near the Cascadia Subduction Zone?",
"context": {},
"max_tokens": 1024,
"stream": false
}
// POST /v1/query — Response
{
"query_id": "qry_01J4K...",
"answer": "As of March 5, 2026...",
"sub_models_used": ["owm-geo", "owm-events"],
"data_sources": ["USGS Earthquake API", "Wikipedia"],
"confidence": 0.87,
"model_version": "owm-v0.4.2",
"ots_verified": true,
"latency_ms": 312,
"cost_sats": 5
}
4.8.4 Functional Requirements
ID
Requirement
SRS-API-01
All API responses shall include X-OWM-Model-Version and X-OWM-OTS-Verified headers
SRS-API-02
Rate limiting shall be enforced per API key using a sliding window algorithm
SRS-API-03
Commercial API access shall be unlocked for 24 hours upon receipt of a valid Lightning payment
SRS-API-04
The API shall return structured errors following RFC 7807 (Problem Details for HTTP APIs)
SRS-API-05
Streaming responses shall use Server-Sent Events (SSE) over HTTPS
SRS-API-06
The API shall be versioned; breaking changes require a new version prefix (/v2/)
4.9 Governance Portal
Language: Python 3.11 (FastAPI backend) + plain HTML/HTMX frontend (no heavy JS framework)
Package:owm.governance
4.9.1 Functional Requirements
ID
Requirement
SRS-GOV-01
The portal shall display all open governance proposals with their comment period deadline
SRS-GOV-02
Any authenticated user (node operator or GitHub contributor) may submit a proposal
SRS-GOV-03
Proposals shall specify: title, description, type (technical / treasury / policy), requested amount (if treasury), implementation plan
SRS-GOV-04
The comment period shall default to 7 days; core maintainers may extend to 21 days for critical changes
SRS-GOV-05
Treasury proposals exceeding 0.1 BTC shall require a 14-day comment period and all 5 multisig holder acknowledgments before signing
SRS-GOV-06
The portal shall link to all corresponding Bitcoin transactions for executed treasury proposals
4.10 Coordinator Service (Bootstrap Layer)
Language: Go 1.22
Package:owm-coordinator
4.10.1 Functional Requirements
ID
Requirement
SRS-COORD-01
The coordinator shall maintain a live registry of all active nodes, their tiers, and capability manifests
SRS-COORD-02
The coordinator shall expose a gRPC service for node registration, heartbeat, and task dispatch
SRS-COORD-03
The coordinator shall run FL round orchestration: round initiation, participant selection, gradient collection, aggregation triggering
SRS-COORD-04
In Phase 2, the coordinator shall migrate node discovery to a Kademlia DHT, reducing central dependency
SRS-COORD-05
The coordinator shall be horizontally scalable behind a load balancer
SRS-COORD-06
The coordinator shall store state in a PostgreSQL database with WAL replication
SRS-COORD-07
The coordinator SHALL publish a Tor v3 hidden service (.onion) address for its gRPC control-plane endpoint in addition to the clearnet address
SRS-COORD-08
The coordinator SHALL bind the Tor hidden service to a local-only port (default 127.0.0.1:9002) distinct from the public clearnet gRPC port, with both served by the same gRPC server instance
SRS-COORD-09
At startup the coordinator SHALL read and log its .onion hostname from the Tor HiddenServiceDir/hostname file when Tor mode is enabled
Accept hashrate connections from OWM nodes and external ASIC/GPU miners via Stratum v2.
Distribute work templates to miners using Bitcoin's getblocktemplate RPC.
Validate submitted shares and compute FPPS payouts.
Dispatch 80% of block rewards to miners via Lightning; deposit 20% to treasury.
Publish real-time hashrate, share difficulty, and payout history on a public dashboard.
4.11.2 Functional Requirements
ID
Requirement
SRS-POOL-01
The pool shall implement the Stratum v2 protocol (SRI codebase) with end-to-end encryption (Noise protocol handshake)
SRS-POOL-02
Miners shall authenticate to the pool using their OWM Ed25519 node identity key, linking mining contributions to their node profile
SRS-POOL-03
The pool shall support GPU software miners (e.g., lolMiner, TeamRedMiner, via Stratum v2 proxy) and ASIC miners with native SV2 firmware
SRS-POOL-04
The pool shall use FPPS payout: each valid share earns (block_subsidy / pool_difficulty) * 0.80 satoshis regardless of whether the pool finds the block
SRS-POOL-05
The pool shall connect to a Bitcoin full node via getblocktemplate for work generation; both Bitcoin Core and Bitcoin Knots are supported
SRS-POOL-06
Share validation shall occur within 100ms of submission; invalid shares shall be logged with reason code
SRS-POOL-07
Accumulated miner balances shall be paid out via Lightning once they exceed a configurable threshold (default: 10,000 sats) or on a 1-hour timer, whichever comes first
SRS-POOL-08
The treasury shall receive its 20% cut in the same Lightning payment batch as miner payouts, directed to the treasury's own LN node
SRS-POOL-09
The pool shall expose a WebSocket API for real-time metrics: hashrate per miner, pool total hashrate, shares accepted/rejected, estimated earnings
SRS-POOL-10
The pool dashboard (pool.owm.network) shall display: pool hashrate (1h/24h), total miners, blocks found (last 30 days), current difficulty, FPPS rate, recent payouts
SRS-POOL-11
The pool shall maintain a share database (PostgreSQL) retaining 30 days of share history for dispute resolution
4.11.3 Mining Node Integration (owm-mine)
The OWM node daemon includes an optional built-in mining client that connects to the pool:
# owm.toml — mining section
[mining]
enabled = truepool_url = "stratum2+tcp://pool.owm.network:3333"# Node identity key is used automatically for pool authenticationworker_name = "my-node-gpu0"intensity = 80# GPU utilization % (0–100)# For pool operators running a local full node:# bitcoin_rpc_url = "http://127.0.0.1:8332"# Supports Bitcoin Core 27+ and Bitcoin Knots 27+ (same RPC interface)
Verify that a registering node has opened a qualifying Lightning channel to the treasury.
Monitor existing node channels for health and capacity compliance.
Execute slashing (force-close) on confirmed misbehaving nodes.
Manage the 30-day re-stake cooldown for slashed nodes.
Provide a transparent public log of all slashing events.
4.12.2 Stake Verification Flow
Node Registration Request
│
▼
1. Coordinator receives RegisterNodeRequest with declared tier
2. Stake Manager queries treasury LND:
ListChannels(peer_pubkey = node.public_key)
3. Check: channel exists AND local_balance >= tier_min_sats
│
┌────┴────────────────────────────────┐
│ PASS │ FAIL
▼ ▼
Node granted "pending" status Return REGISTRATION_FAILED
Coordinator sends funding invoice with INSUFFICIENT_STAKE error
(channel open instructions) and minimum required amount
│
▼
Channel confirmed on-chain (≥1 block)
│
▼
Node status → "active"
Tasks begin flowing, rewards enabled
4.12.3 Slashing Decision Flow
Misbehavior Signal Received
(e.g., poisoned gradient, fake task proof)
│
▼
1. Anomaly detector flags node with evidence hash
2. Stake Manager logs evidence to immutable slashing log
3. For Tier 1 nodes: automated slashing after 3 confirmed signals
For Tier 2/3 nodes: requires 2 maintainer acknowledgments
4. Stake Manager calls LND ForceCloseChan(channel_id)
5. Node status → "suspended"
6. Cooldown timer starts: 30 days
7. Slashing event published to public slashing log
8. Node operator notified via registered contact (if provided)
│
▼ (after 30-day cooldown)
Node may re-register and open a new stake channel
4.12.4 Functional Requirements
ID
Requirement
SRS-STAKE-01
The stake manager shall verify channel existence and capacity via the treasury LN node's ListChannels RPC before granting active status
SRS-STAKE-02
The stake manager shall re-verify all active node channels every 6 hours; nodes whose channel capacity drops below minimum shall be moved to "degraded" status and notified
SRS-STAKE-03
Nodes in "degraded" status have 24 hours to restore channel capacity before being suspended (no slashing — just suspension)
SRS-STAKE-04
Slashing shall require a minimum of 3 independent anomaly signals for Tier 1, or 2 maintainer acknowledgments for Tier 2/3
SRS-STAKE-05
Force-close shall be executed by calling ForceCloseChan on the treasury LN node; the channel ID is retrieved from the node's registration record
SRS-STAKE-06
A public, immutable slashing log shall be maintained at GET /v1/network/slashing-log; each entry includes node ID (pseudonymous), channel ID, evidence hash, date, and slashing reason
SRS-STAKE-07
The 30-day cooldown shall be enforced by rejecting registration requests from a node's public key until the cooldown expires
SRS-STAKE-08
A voluntary cooperative channel close shall not trigger slashing or cooldown; the node is simply deregistered
SRS-STAKE-09
The stake manager shall expose internal metrics to Prometheus: active channels, total sats staked, slashing events (7d), degraded nodes
SRS-STAKE-10
The stake bonus in reward calculation shall be re-computed whenever a node's channel capacity changes
5. Data Models
5.1 Node
@dataclassclassNode:
node_id: str# UUID v4public_key: str# Ed25519 public key (hex)ln_node_uri: str# pubkey@host:port (clearnet or .onion)onion_address: str|None# optional Tor v3 .onion address for control planetier: Literal["t1", "t2", "t3"]
vram_gb: floatram_gb: floatbandwidth_mbps: floatregistered_at: datetimelast_heartbeat: datetimereliability_score: float# 0.0 – 1.0total_tasks_completed: inttotal_sats_earned: intstatus: Literal["online", "offline", "suspended"]
The coordinator control plane (gRPC: register, heartbeat, task dispatch, stake queries) SHALL support both clearnet TCP and Tor hidden service transport
SRS-NET-02
Node operators MAY configure a SOCKS5 proxy address (typically 127.0.0.1:9050) in owm.toml to route all control-plane gRPC connections through Tor
SRS-NET-03
Nodes MAY register an optional onion_address (v3 .onion hostname) alongside their clearnet ln_node_uri; the coordinator SHALL persist this in the node registry
SRS-NET-04
FL gradient uploads and model weight downloads SHALL use clearnet only; the node daemon SHALL reject attempts to route these over a SOCKS5 proxy
SRS-NET-05
Stratum v2 mining connections SHALL use clearnet only; share submission is latency-sensitive and incompatible with Tor overhead
SRS-NET-06
Lightning Network channels MAY use Tor .onion addresses in ln_node_uri; this is handled natively by LND and requires no coordinator changes
SRS-NET-07
The coordinator SHALL NOT enforce IP-based rate limiting on the Tor hidden service endpoint, as all Tor connections appear to originate from 127.0.0.1; rate limiting on that endpoint SHALL be based on node public key
7. Security Requirements
ID
Requirement
SRS-SEC-01
All inter-node and node-coordinator communication shall use mTLS with Ed25519 certificates
SRS-SEC-02
Task inputs and outputs shall be encrypted with the recipient's public key (NaCl box encryption)
SRS-SEC-03
The node identity keypair shall never leave the node; all authentication is via challenge-response signatures
SRS-SEC-04
The coordinator shall rate-limit registration attempts: max 10 new nodes per IP per hour
SRS-SEC-05
Byzantine fault-tolerant gradient aggregation shall be applied in all FL rounds (Krum or trimmed mean)
SRS-SEC-06
All API inputs shall be validated and sanitized; parameterized queries shall be used for all database operations
SRS-SEC-07
Secrets (LND macaroon, multisig keys) shall never appear in logs or error messages
SRS-SEC-08
The GitHub App shall use short-lived installation tokens (1-hour TTL) and store no long-lived credentials
SRS-SEC-09
Security advisories shall be reported via a responsible disclosure policy documented in SECURITY.md
SRS-SEC-10
A CVE scanning CI step shall run on every PR using pip-audit, cargo-audit, and trivy
SRS-SEC-11
Nodes flagged for malicious behavior (poisoned gradients, fake task proofs) shall be suspended and their reputation score set to 0
SRS-SEC-12
The multisig treasury shall use hardware wallets (Coldcard or Trezor) for all signing operations
SRS-SEC-13
Force-close (slashing) shall only be executable by the coordinator service using a dedicated, access-controlled LN RPC credential separate from the payment credential
SRS-SEC-14
Slashing decisions for Tier 2 and Tier 3 nodes shall require signed acknowledgment from at least 2 core maintainers before ForceCloseChan is called
SRS-SEC-15
The mining pool shall validate that submitted shares reference the current work template; stale or fabricated shares shall be rejected immediately
SRS-SEC-16
The Stratum v2 Noise protocol handshake shall be enforced; plain-text Stratum v1 connections shall be rejected
8. Performance Requirements
ID
Requirement
Target
SRS-PERF-01
API query end-to-end latency (p95)
< 2 seconds
SRS-PERF-02
API query end-to-end latency (p99)
< 5 seconds
SRS-PERF-03
Lightning payment dispatch latency after task completion
< 60 seconds
SRS-PERF-04
Node heartbeat processing throughput
10,000 nodes/minute
SRS-PERF-05
FL round completion time (100 nodes)
< 30 minutes
SRS-PERF-06
GitHub repo analysis (1,000-file repo)
< 5 minutes
SRS-PERF-07
API uptime SLA (public endpoint)
99.5%
SRS-PERF-08
Maximum concurrent API requests
1,000
SRS-PERF-09
Task scheduler dispatch latency
< 1 second
SRS-PERF-10
OTS calendar submission acknowledgment
< 30 seconds
SRS-PERF-11
Mining pool share validation latency
< 100 ms
SRS-PERF-12
Mining pool FPPS payout dispatch after block confirmation
< 60 minutes
SRS-PERF-13
Stake channel verification during node registration
< 5 seconds
SRS-PERF-14
Periodic stake channel re-verification (all active nodes)
# One-command install
curl -fsSL https://install.owm.network | bash
# Or via Docker
docker run -d \
--gpus all \
-v ~/.owm:/root/.owm \
-v ~/.lnd:/root/.lnd:ro \
-p 9000:9000 \
owmnetwork/owm-node:latest \
start --config /root/.owm/owm.toml
10.3 Environment Configuration
Variable
Description
Required
OWM_COORDINATOR_URL
Coordinator gRPC endpoint
Yes
OWM_LND_HOST
LND gRPC host:port
Yes
OWM_LND_MACAROON_HEX
LND admin macaroon (hex)
Yes
OWM_LND_TLS_CERT_PATH
Path to LND TLS cert
Yes
OWM_IDENTITY_KEY_PATH
Ed25519 node key path
Yes
OWM_MODEL_CACHE_DIR
Local model cache directory
No (default: ~/.owm/models)
OWM_LOG_LEVEL
Logging verbosity
No (default: INFO)
DATABASE_URL
PostgreSQL connection string (coordinator only)
Coordinator only
11. Documentation Requirements
Deliverable
Location
Audience
Node setup guide
docs/node-setup.md
Node operators
API reference
docs/api-reference.md + auto-generated from OpenAPI spec
API consumers
Architecture deep dive
docs/architecture.md
Contributors
Federated learning protocol
docs/fl-protocol.md
Researchers / contributors
Lightning integration guide
docs/lightning-integration.md
Node operators
GitHub App setup
docs/github-app.md
Repo owners
Governance process
docs/governance.md
Community
Contributing guide
CONTRIBUTING.md
All contributors
Security policy
SECURITY.md
Security researchers
License
LICENSE
All users
Changelog
CHANGELOG.md
All users
OTS verification guide
docs/ots-verification.md
All users
Mining pool setup guide
docs/mining-pool.md
Mining node operators
Proof-of-Stake guide
docs/proof-of-stake.md
All node operators
Slashing & appeals process
docs/slashing.md
Node operators, community
All public-facing Python code shall include:
Module-level docstrings describing purpose.
Type annotations on all function signatures.
Inline comments for non-obvious logic only.
12. Technology Stack
Layer
Technology
Version
Rationale
Node daemon
Python
3.11+
AI/ML ecosystem maturity
Performance-critical components
Rust
1.75+
Memory safety, LDK bindings
Coordinator
Go
1.22+
gRPC performance, concurrency
AI Framework
PyTorch
2.x
Federated learning support, wide model compatibility
Quantization
bitsandbytes, llama.cpp
Latest
Tier 1 node support
LoRA fine-tuning
peft (Hugging Face)
Latest
Incremental model updates
Federated Learning
Flower (flwr)
1.x
Mature FL framework, extensible
HTTP API
FastAPI
0.110+
Async, OpenAPI auto-gen
gRPC
grpcio / native Go
Latest
Node-coordinator protocol
Lightning
LND + lnd-grpc Python client
Latest LND
Widely deployed, robust
Lightning (Rust)
LDK
Latest
For embedded node support
Mining Pool
SRI (Stratum Reference Implementation)
Latest
Stratum v2 pool; Rust-based; open-source
Bitcoin Full Node
Bitcoin Core 27+ or Bitcoin Knots 27+
27+
getblocktemplate for pool work generation; operator's choice
Mining Client (built-in)
Custom Stratum v2 client
—
Embedded in node daemon for GPU mining
Database
PostgreSQL
16+
Reliability, JSONB support
Cache / Queue
Redis
7+
Task queue, rate limiting
Object Storage
MinIO (self-hosted) / S3
Latest
Model artifact storage
Vector Store
Qdrant
Latest
RAG data retrieval
OTS
opentimestamps Python library
Latest
Bitcoin anchoring
Container
Docker / Podman
24+ / 4+
Node portability
CI/CD
GitHub Actions
N/A
Community familiarity
Frontend
HTMX + Tailwind CSS
Latest
Minimal JS, fast governance portal
Monitoring
Prometheus + Grafana
Latest
Node and network metrics
Logging
structlog (Python) / zap (Go)
Latest
Structured JSON logs
13. Directory Structure
13.1 Current structure
As of the document date, the repository contains the following. LICENSE, CONTRIBUTING.md, SECURITY.md, and CHANGELOG.md are planned and referenced elsewhere in this SRS.