Add initial documentation

This commit is contained in:
2025-07-20 21:38:21 +03:00
parent 8ba0a0ba6d
commit 42d9d2d860
24 changed files with 4447 additions and 0 deletions

147
docs/23_FAQ_MATRIX.md Normal file
View File

@ -0,0 +1,147 @@
#23 · FAQ Matrix —StellaOps 
#FAQ & Support Matrix
A living list of the questions we get every day, plus a compact matrix of what is **SupportedNow**, **InPreview**, and **OntheRoadmap (TODO)**.
---
##0QuickLegend
| Mark | Meaning |
|------|---------|
| ✅ | Fully supported in the current release |
| 🅿️ | Preview / optin behind a feature flag |
| 🛠 | Planned in the **6month** roadmap (Feature Matrix “TODO”) |
| 🚧 | Longerterm; 912month horizon or beyond |
---
##1General
| # | Question | ShortAnswer | Status |
|---|----------|-------------|--------|
| G1 | *Why launch **another** DevSecOps product?* | Existing scanners are either SaaSonly, slow, or lack offline & Russian language feeds. StellaOps focuses on *speed(<5s), modularity, airgap friendliness*, and an AGPL codebase that enterprises can extend inhouse. | ✅ |
| G2 | *What tech stack?* | Backend **.NET 9** + Redis; runners are OCI images (Trivy, Syft, Grype). UI Angular17. | ✅ |
| G3 | *License?* | **AGPLv3** for all core repos; plugins inherit if linked. | ✅ |
| G4 | *Where do I report bugs?* | Open an issue in `git.stella-ops.ru/stella/core` or ping `#stella-ops` on Matrix. | ✅ |
---
##2Installation & Upgrades
| # | Question | Answer | Status |
|---|----------|--------|--------|
| I1 | *How do I pull agent images now?* | All official images are in the **anonymous readonly registry** `registry.git.stella-ops.ru`. No auth token required for pull. | ✅ *(new)* |
| I2 | *Can I still use GHCR?* | Images remain mirrored for convenience but are not signed; internal registry is the source of truth. | ✅ |
| I3 | *How to upgrade from ≤v0.8?* | Regenerate `dockercompose.yml` with the bootstrap script; volumes remain intact. Import legacy muterules via `/policy/import`. | ✅ |
| I4 | *Helm charts?* | K8s Helm chart is under `deploy/helm`; undefaulted (requires `values.yaml`). | 🅿️ |
---
##3SBOM & Scanning
| # | Question | ShortAnswer | Status |
|---|----------|-------------|--------|
|---|----------|-------------|--------|
| **S1** | *Why exactly **333 scans**?* | Covers p95 workload of SMBs (~290 builds/day) while keeping infra costs <$5/mo per user and nudging larger orgs toward Plus/Pro. | ✅ |
| **S2** | *How is the limit technically enforced?* | Each `/scan` request carries a **ClientJWT**. The Quota plugin atomically increments `quota:<token>:<date>` in Redis. Soft (5s) and hard (60s) waitwalls ensure fair use. | ✅ |
| **S3** | *What if my site is fully offline?* | Every **OUK tarball** contains a fresh ClientJWT valid **30days**. Uploading the OUK refreshes the token automatically; no Internet required. | ✅ |
| S4 | *Can I pool multiple tokens?* | Yes, but each token has its own 333/day budget. Use distinct tokens per CI line if you need more throughput. | ✅ |
| S5 | *Does quota enforcement affect performance?* | No. Legitimate scans still complete in <5s; blocked scans incur only their specified waitwall. | |
| S6 | *Which SBOM formats does Stella emit?* | Builtin: **`trivy-json-v2`**, **`spdx-json`**, **`cyclonedx-json`**. | |
| S7 | *What is ΔSBOM and how fast is it?* | Uploads only new layers; P951s on cached bases. | |
| S8 | *Windows container scanning?* | Runner binaries compile on Windows, but layerunpack path is unoptimised; full support 🚧. | 🚧 |
---
##4PolicyasCode
| # | Question | Answer | Status |
|---|----------|--------|--------|
| P1 | *How are mutes & blocks stored now?* | Default: **YAML** (`scan-policy.yaml`) in Mongo (versioned). Import / export via `/policy/{import,export}` or Settings Policies. | |
| P2 | *Why YAML over OPA?* | YAML lowers entry barrier; advanced users may embed **Rego** snippets. Firstclass Rego evaluation is 🛠. | 🛠 |
| P3 | *CLI enforcement?* | Pass `--policy-file path` plus `--enforce` to fail builds on violations. Exitcode reflects policy gate. | |
| P4 | *Audit history?* | Every policy change writes an immutable record (`audit_policies` collection) and appears in UI *History* tab. | |
---
##5Registry & Offline Use
| # | Question | Answer | Status |
|---|----------|--------|--------|
| R1 | *Is the internal registry mandatory?* | No, but recommended for sovereignty & signature verification (`cosign verify`). | |
| R2 | *How to mirror for OUK?* | `oras pull registry.git.stella-ops.ru/library/* --output ./ouk-bundle` import on the target via `ctr images import`. | |
| R3 | *Does the backend fetch external feeds?* | Only when `--feeds.auto=1`; OUK installs run fully offline with NVD packed in the tarball. | |
---
##6Performance
| # | Scenario | Target | Achieved (July2025) |
|---|----------|--------|----------------------|
| Local SBOM scan (`alpine`) | **5s** | 4.2s P95 |
| ΔSBOM warm base | **1s** | 0.8s P95 |
| Image unpack (200MB) | **10s** | 8.6s P95 |
*Numbers measured on 4vCPU / 8GB Ubuntu22.04 runner.*
---
##7Security & Compliance
| # | Question | Answer | Status |
|---|----------|--------|--------|
| C1 | *How are images signed?* | Cosign signatures pushed alongside each tag (`*.sig`). Santech verifies on pull. | |
| C2 | *Supplychain attestation (SLSA)?* | SLSAgen at build time and verification in runner is 🛠 (≤6months). | 🛠 |
| C3 | *Rekor transparency log?* | Local Rekor mirror for offline installs is 🚧 (912months). | 🚧 |
| C4 | *TLS ciphers?* | Default OpenSSL suites; plugin allows GOST/SM (via `ITlsProvider`). | |
---
##8Roadmap / FutureFeatures
| Area | Feature | ETA | Notes |
|------|---------|-----|-------|
| UI | Modular route plugins | Q12026 | Dynamic Angular module loader |
| SBOM | Multiarch ΔSBOM | Q12026 | Layer digest per arch |
| Policy | Rego native engine | Q12026 | `opa eval` inproc |
| Supply chain | SLSA provenance | Q12026 | Level 3 target |
| Integrity | Rekor mirror | Q22026 | Airgap friendly |
| Ecosystem | Community plugin market | Q22026 | Curated index in UI |
| Scale | Redis Cluster autoshard | Q32026 | Transparent failover |
---
##9Troubleshooting
| Symptom | Likely Cause | Fix |
|---------|--------------|-----|
| **`ER_BAD_SV` error on scan** | SBOM format flag mismatch | Set correct `--sbom-type` or let autodetect. |
| ΔSBOM still uploads full SBOM | Cache cold or digest mismatch | Check `docker history` shows reused layers; bump builder version. |
| Policy file invalid | YAML schema error | Run `/policy/validate` endpoint; lint with VS Code schema. |
| Pull fails with 401 | Corporate proxy intercepts registry | Mirror to onpremise Harbor; set `--registry` flag. |
---
##10Licensing & Community
| # | Question | Answer |
|---|----------|--------|
| L1 | *Can I build a commercial fork?* | AGPL allows commercial services but derivatives must remain AGPL if distributed. |
| L2 | *Commercial support?* | Community only today; paid support partners in discussion. |
| L3 | *How to contribute a plugin?* | Fork implement DI contract (`IScannerRunner`, etc.) PR + ADR. |
---
##11Change Log
| Date | Highlights |
|------------|------------|
| 20250714 | Added internal registry, multiformat SBOM, ΔSBOM, PolicyasCode, updated roadmap (SLSA/Rekor) |
| 20250630 | Initial public FAQ matrix |
---
*(End of FAQ Matrix v2.0)*