Repository navigation
docs: overhaul all documentation to current project state + installation quickstart - #101
senolcolak wants to merge 14 commits into
Conversation
…ons, links) - CHANGELOG: add [Unreleased] section covering SPEC-009..SPEC-027 (63 commits) - README: replace superseded 104%/342 figure with blueprint's ~335 functional operations, fix storage-mode examples (cinder has no s3, glance no rbd), add Placement + Metadata to architecture, add CLI subcommands section - CLAUDE.md: remove nonexistent .beastmode/ and memory/constitution.md refs, seven servers incl. Placement, Go 1.27, current package tree - STATUS/ROADMAP: stale-snapshot and superseded banners - docs: WHATS_LEFT header, INDEX figures, new review report 2026-10-12 Signed-off-by: Uwe Schwaeke <uwe.schwaeke@sap.com>
QUICKSTART.md: rewritten as an installation-focused guide — five install paths (Docker Compose, Compose+Horizon, binary from source, Helm, real-KVM single node), correct compose path and ports, credentials, verification, first-VM walkthrough, troubleshooting. Corrections across all docs, verified against the code: - Ports: Keystone 35357 everywhere (5000/5001 never existed); Placement :8778 (stub) and Metadata :8775 added to all architecture/port tables - Storage modes: Cinder has no s3; Glance rbd marked as unimplemented placeholder everywhere it was recommended (CONFIGURATION, STORAGE_MODES, SCALING, KUBERNETES, chart README, UNIFIED/DOCKER deployment) - Config: real DB pool keys (max_connections/min_connections/ max_conn_lifetime/max_conn_idle_time/health_check_period); removed nonexistent keys (per-service host:, external_bridge, node_name, vxlan_local_ip, rbd_pool/rbd_user, registry_enabled, metadata.host/port) - Env vars: UNIFIED/DOCKER deployment sections rewritten to the 14 vars the binary actually reads (LIGHTSTACK_DB_URL, LIGHTSTACK_JWT_SECRET, ...) - Flags: removed nonexistent --validate/--dry-run and 'lightstack migrate' subcommand (lightstack-migrate is the real tool) - Rate limiting: marked planned-not-implemented (ADR-002) in ARCHITECTURE and CONFIGURATION — was presented as working - Coverage: superseded 342/104% figure replaced with blueprint's ~335 functional operations across HORIZON_*, ELEKTRA, WHATS_LEFT, INDEX - API.md: base URL 5000->35357, catalog includes placement, domain names case-sensitive (Default) - ARCHITECTURE: 7 servers, VXLAN implemented, Glance backends corrected, pool default 50 - OPERATIONS: new CLI subcommands section (cleanup/healthcheck/ console-tokens), stateless-JWT token guidance, bcrypt password reset - UPGRADING: rollback procedure (migrate down before reverting binary) - INSTALLATION: PostgreSQL 18 (was 14), Go 1.27, compose path - REAL_MODE_TESTING: 'Phase 2' limitations all implemented now - scripts/README: state-root prompt, undocumented scripts added, smoke test reference fixed - chart README: dataRetentionPolicy retain AND delete both implemented - test/contract/README: current 223/233 status, broken refs removed - docs/README: reduced to stub pointing at INDEX.md - Domain case fixes (Default) in CONTRIBUTING and SPEC-000 Signed-off-by: Uwe Schwaeke <uwe.schwaeke@sap.com>
…efaults) Critical: - QUICKSTART Helm install: postgres.url -> database.url (schema rejects unknown keys); add required secrets.adminPassword - QUICKSTART Path B: export LIGHTSTACK_JWT_SECRET (compose-horizon hard-requires it, no default) - noVNC console proxy removed from the stub compose stack docs — the proxy is chart/real-mode only (UNIFIED_DEPLOYMENT architecture, expected output, troubleshooting; QUICK_REFERENCE port table; README) Medium: - UNIFIED_DEPLOYMENT: memcached section (already present, no collision) - UPGRADING/OPERATIONS: lightstack-migrate down takes no count - CONFIGURATION: cleanup --dry-run does exist; no config search path (single --config default); quota SQL against quotas table not projects - DOCKER_DEPLOYMENT: LIGHTSTACK_REDIS_URL/CACHE_ENABLED marked as not read by the binary; log samples made illustrative - KUBERNETES: 'Helm Chart (Planned)' section replaced with the real chart at charts/lightstack and its actual values schema - HORIZON_SETUP/DEPLOYMENT: v0.5.0+ prerequisites updated Low: - pool defaults: binary code defaults (20/2/1h/15m/1m) vs shipped yaml (50/2/1h/10m/30s) stated correctly in CONFIGURATION/ARCHITECTURE - README API-only flow now self-contained (network+image first); per-service tallies relabeled as raw routes (HORIZON_INTEGRATION) - CHANGELOG 63 -> 65 commits (verified); CLAUDE.md Go-version bullet - ELEKTRA broken ../REMAINING_WORK.md link; .env.example dead KEYSTONE_PORT=5000 comment removed Signed-off-by: Uwe Schwaeke <uwe.schwaeke@sap.com>
…, console types) - M1: LIGHTSTACK_JWT_SECRET export added before every docker-compose-horizon up in README, UNIFIED_DEPLOYMENT, QUICK_REFERENCE, HORIZON_SETUP (the compose file hard-requires it, no default) - M2: HORIZON_SETUP stub-stack noVNC references corrected (no proxy in the stub stack; troubleshooting now distinguishes stub vs real mode) - M3: README console-access claim corrected (noVNC real mode + serial log; SPICE/RDP are refused) - L: CHANGELOG commit count dropped (drifts with each fix commit); UNIFIED_DEPLOYMENT expected output includes memcached; Horizon OPENSTACK_API_VERSIONS compute=2 (integer, not 2.1); contract test file count 71->97; .env.example dead service port vars removed Signed-off-by: Uwe Schwaeke <uwe.schwaeke@sap.com>
…anup) - README: remaining '71 test files' -> 97 - HORIZON_DEPLOYMENT + SINGLE_NODE_DEPLOYMENT: 'compute': 2.1 -> integer 2 in the local_settings templates (Horizon rejects 2.1) - HORIZON_DEPLOYMENT: default role _member_ -> member (matches seed); plain-compose network name corrected (prefixed deployments_*) - KUBERNETES_DEPLOYMENT: 6 -> 7 HTTP listeners (Placement :8778 in-process stub); illustrative image tags made placeholders - UNIFIED_DEPLOYMENT: Apple Silicon FAQ aligned with the platform-support facts (native ARM64 lightstack, QEMU for Horizon) - ROADMAP: broken ./specs/ links repointed at docs/specs/ (000-terraform- compatibility removed — never existed) - scripts/README: transcript version marked as example output Signed-off-by: Uwe Schwaeke <uwe.schwaeke@sap.com>
- KUBERNETES_DEPLOYMENT: 6 -> 7 HTTP listeners with Placement :8778 row, plus placement containerPort and Service port in the manifest examples (the round-3 commit message claimed this fix but the text replacement had not matched — now applied and verified) - .env.example: HORIZON_HTTPS_PORT removed (never interpolated) - CONTRIBUTING: postgres example tag 18.3 -> 18.4-alpine Signed-off-by: Uwe Schwaeke <uwe.schwaeke@sap.com>
…eck note) Signed-off-by: Uwe Schwaeke <uwe.schwaeke@sap.com>
Review-fix loop completed ✅The comprehensive review loop ran 6 rounds until the verdict came back CLEAN:
Every round-1 Critical was a command that would have hard-failed on first use (rejected Helm install, refused compose-up, operating a nonexistent container) — all verified fixed against the chart schema, compose files and binary source. Known follow-ups (out of scope for this docs-only PR, tracked in
|
C1 (CRITICAL): release.yml migrate build passed -s -w as top-level go
build flags — 'flag provided but not defined: -s' — and bash -e killed
the loop on the first iteration, so the pipeline could never produce
anything. Now -ldflags "-s -w" like the lightstack line.
H1: Dockerfile declared ARG VERSION only in the runtime stage, so the
builder stage's ${VERSION} expanded to empty and the image would carry
an unidentifiable binary — the exact failure class R1 exists to remove.
ARG VERSION=dev is now declared in the builder stage (annotated).
H2: the JWT-secret guard gated lightstack-migrate, breaking shipped
deployment paths that run it against the canned config before any secret
is wired in (image entrypoint CMD, the documented Kubernetes init
container, test/migration_test.sh). LoadConfig now delegates to a shared
loadConfig(path, enforceSecretGuard); the new
common.LoadConfigForMigration skips the guard — the tool never signs or
validates a token (it reads database.url and logging only). Pinned by
TestLoadConfigForMigrationSkipsSecretGuard.
M1: image was pushed as :v0.7.0 while the in-repo chart's appVersion
(0.7.0, no v) is what image.tag defaults to — a repo-direct helm install
would ImagePullBackOff forever. The workflow now computes
IMAGE_TAG=${GITHUB_REF_NAME#v} for the image tag and the chart's
--app-version; the binary keeps the full v-prefixed tag (consistent with
git describe stamps).
L1: deployments/docker/docker-compose.yaml also uses the default secret
without the escape hatch — added (with the same dev-only warning
comment).
L2: docs/review/comprehensive-review-report-2026-10-12.md was referenced
from the new code/comments but only existed on the docs branch — landed
in-tree (identical content on both branches; merges cleanly with
PR #101).
L3: release.yml action versions aligned with ci.yml (checkout@v6,
setup-go@v6).
L4: GitHub Release file glob narrowed to
dist/lightstack-<tag>-*-* + dist/checksums-* so the chart tarball can
never be absorbed by step reordering.
make test: PASS (all unit tests, race detector)
Signed-off-by: Uwe Schwaeke <uwe.schwaeke@sap.com>
a3acf3d to
8691eec
Compare
- KUBERNETES_DEPLOYMENT: no published image exists — build/push one first
(placeholders instead of a nonexistent ghcr tag, QUICKSTART Path D link);
init-container env order fixed (DB_PASSWORD must precede the $(DB_PASSWORD)
DSN or k8s leaves the literal in place); metrics/ServiceMonitor reframed
as not-yet-implemented (no /metrics endpoint or 9090 listener exists);
wrong GitHub org in the values example; unsupported two-secrets rotation
advice dropped (exactly one jwt_secret).
- CONFIGURATION: production examples no longer imply ${VAR} YAML
interpolation the loader does not perform — LIGHTSTACK_DB_URL and
LIGHTSTACK_JWT_SECRET are the real injection points; admin_password is
file-only.
- .env.example: DEBUG renamed to HORIZON_DEBUG (the variable the Horizon
compose file actually interpolates); dead resource-limit variables
replaced with a working compose-override example.
- OPERATIONS: cleanup SQL referenced nonexistent soft-delete columns —
instances are hard-DELETEd; VACUUM FULL guidance instead. '(if created)'
dropped for the existing TROUBLESHOOTING.md.
- QUICKSTART: make migrate needs install-tools (or rely on make run's
auto-migrate); 8775 added to the port-conflict row; security note for
the unauthenticated metadata port Path A publishes.
- UNIFIED/DOCKER/SCALING: metrics-endpoint myth removed everywhere;
'coming soon' and issues/XXX placeholders dropped; stale Last-Updated
and 'Production Ready' status aligned with the review report; horizon
stack needs no host port 5432 (postgres is network-internal).
- HORIZON_INTEGRATION: table total matches its own rows (342);
SESSION_TIMEOUT comment corrected (4h is deliberately shorter than the
24h token_ttl); INDEX.md file count and date corrected; review report's
.env.example line reference fixed.
Signed-off-by: Uwe Schwaeke <uwe.schwaeke@sap.com>
- CONFIGURATION: the multi-node example still carried the literal
${JWT_SECRET} the round-1 fix was removing (used verbatim as the
signing secret — the intro also exported the dead JWT_SECRET
variable); both now use LIGHTSTACK_JWT_SECRET, and the stale comment
describing the removed database.url placeholder is gone.
- OPERATIONS: the 'Prometheus Metrics (Future)' section — which the
other docs now cite as today's reference — still presented :9090
/metrics and metric names that exist nowhere; rewritten to say no
metrics endpoint ships as of v0.6.x (health endpoints + logs are the
surface) with the planned shape clearly labeled.
- HORIZON_INTEGRATION: endpoint table now uses blueprint.md's
authoritative counts (66/74/100/116/38 = 394 raw, ~335 functional)
instead of the superseded API_COVERAGE_REPORT numbers.
- KUBERNETES_DEPLOYMENT: the ConfigMap no longer plants
$(DB_PASSWORD)/'overridden-by-env' placeholders that would be used
verbatim if the env vars ever went missing — the URL and jwt_secret
lines are removed in favor of the env vars, and admin_password
carries a substitute-before-applying value instead of 'secret'.
- README / DOCKER_DEPLOYMENT / SCALING / HORIZON_INTEGRATION /
HORIZON_DEPLOYMENT: remaining 'Production Ready' overclaims aligned
with the review report's verdict.
- UNIFIED_DEPLOYMENT: the network-internal-postgres note no longer
breaks the prerequisite port list (9696 was rendered detached).
- .env.example: the compose-override example lives in the repo root,
where the documented command runs.
- QUICKSTART: port-conflict row includes the stack's 5432/6379.
- SCALING / SINGLE_NODE_DEPLOYMENT: Last-Updated stamps refreshed.
Signed-off-by: Uwe Schwaeke <uwe.schwaeke@sap.com>
- WHATS_LEFT: 'PRODUCTION READY' verdict and checklist caption aligned
with the review report; Horizon gap list updated (F1/F13 are fixed —
#534/#545; open set is F10/F11/F18).
- README / INDEX / HORIZON_INTEGRATION: the noVNC console (F1) and
project create (F13) were reported as open UI gaps; the cited
compatibility report marks both FIXED. noVNC now described as working
in real mode (#534) and absent from the stub stacks (they ship no
console proxy). '100% Terraform Compatible' qualified per blueprint §6
(port-id workaround; security groups / object storage outside the
validated set). 'Production deployments validated' softened to the
deployment paths actually exercised + report pointer.
- CLAUDE.md: cinder.storage_mode has no 's3' (Glance-only) — corrected
to stub/local/rbd/local,rbd, matching the same file's own backend
description; rate_limiting.* flagged as dead config (S4, ADR-002).
- UNIFIED_DEPLOYMENT FAQ: no AD/LDAP integration exists (PostgreSQL-
backed identity; the domain-config endpoint returns an empty stub).
- KUBERNETES_DEPLOYMENT: the 'key settings' table still pointed at
database.url, which the round-2 fix removed from the ConfigMap —
repointed at the Deployment's LIGHTSTACK_DB_URL env.
- DOCKER_DEPLOYMENT: the binary has no TLS listener — TLS terminates at
a reverse proxy; LIGHTSTACK_ENDPOINT_SCHEME governs advertised URLs.
- SCALING: the monitoring compose file is not in the repository — the
doc now says to create it with the shown contents.
- ELEKTRA: Sprint-66 archive pointer (no such archive) replaced with
the compatibility report.
- REAL_MODE_TESTING: footer ('awaiting Linux testing', March date)
contradicted the header's 2026-06-22 validated banner — aligned.
Signed-off-by: Uwe Schwaeke <uwe.schwaeke@sap.com>
- README / HORIZON_DEPLOYMENT: F16 (launch wizard's 'Create New Volume') was still described as broken; the compatibility report marks it FIXED (SPEC-020 FR-025 — the entry creates a volume from the image and boots from it), and UPGRADING.md documents the new behavior. - HORIZON_INTEGRATION: the Status line still named the noVNC console as an open UI gap two lines above the Executive Summary that (since round 3) correctly says it works in real mode (#534) — now names the actual open set (F10/F11/F18). Signed-off-by: Uwe Schwaeke <uwe.schwaeke@sap.com>
- F10/F11 (standalone port create in real mode, router gateways) are fixed by SPEC-024/#546 — in this branch's code and CHANGELOG — but the docs still listed them as open UI gaps, contradicting themselves. Open set is now domain switching (F18), with the F10/F11 fix and the outstanding Horizon re-pass noted (README, INDEX, HORIZON_INTEGRATION, WHATS_LEFT). - Terraform '100% / unchanged / zero-modification' residuals in CLAUDE.md and README qualified per blueprint §6 (port-id workaround; security-groups/object-storage outside the validated set). - WHATS_LEFT: SPICE/RDP console access is refused by design, not complete; the superseded '+12 over baseline' arithmetic replaced with the blueprint's reconciled figures. - ELEKTRA: '100% Compatible / production-ready' overclaims aligned with the summary's usable-for-resource-management verdict. - HORIZON_SETUP: the unscoped noVNC-gap line now scopes to the stub stack (it works in real mode, #534). - .env.example: LIGHTSTACK_ENDPOINT_HOST/SCHEME, OPENSTACK_HOST and HORIZON_IMAGE annotated as not compose-interpolated (binary-level or doc-snippet variables), matching the standard round 1 set for DEBUG. Signed-off-by: Uwe Schwaeke <uwe.schwaeke@sap.com>
Review-fix loop on this PR — converged CLEAN ✅This PR went through a fresh review-fix loop on top of its earlier rounds (pre-loop history:
Round 1 — the 21 findings (all documentation-localized)
Round 2 — fix-on-fix verification (11)The multi-node example still carried the literal Rounds 3–5 — finding-status truth
Round 6 — CLEANFinal class sweep (finding-status claims, '100%', Production Ready, metrics/9090, CI on the final commit: 10/10 checks green (incl. DCO and SAP Sign-off). |
…findings Review findings (comprehensive review of the open senolcolak PRs). These docs describe the post-#103 merged state, so #103 must merge first: - HIGH: Path B required only LIGHTSTACK_JWT_SECRET and logged in with admin/secret, but #103's horizon compose requires LIGHTSTACK_ADMIN_PASSWORD via :? and logs in with it. Require both secrets everywhere, generate them with openssl, and update the login instructions. CONFIGURATION's env table is now sixteen rows (adds ADMIN_PASSWORD and the dev-only hatch). - MEDIUM: shipped Horizon local_settings used _member_, a role that does not exist; both configs now use member (the seeded role). - MEDIUM: the documented rollback command no-ops — docker exec without -i gives the interactive down prompt EOF and exits 0. Feed yes and use -i. - MEDIUM: two [Unreleased] sections contradicted each other; fold the legacy v2.0 list into a clearly historical block. - MEDIUM: the contract-test README called a superseded report current; state the soft gate/85% floor and date the snapshot. - LOW: .env belongs beside the compose file, not the repo root; and the migration baseline was 059, not 055. Signed-off-by: Uwe Schwaeke <uwe.schwaeke@sap.com>
Shared CI unblocker for the open PRs (independent of this PR's content): - govulncheck now reports GO-2026-6809 in crypto/x509 (reachable through the HTTP server), fixed in Go 1.27.3. Main pins 1.27.2 everywhere, so every PR's Runtime Vulnerabilities and SBOM job fails. Pin 1.27.3 in go.mod, tools/go.mod, CI workflows, the builder image, the test container and the single-node deploy script (version + sha256). - The unpinned Helm install now pulls Helm 4, whose 'helm plugin install' rejects the helm-unittest source without --verify=false, failing the Helm Charts job with 'plugin source does not support verification'. Install Helm 3.22.1 and helm-unittest 1.2.1 in an isolated plugin dir, matching PR #107, so the gate is version-stable. Signed-off-by: Uwe Schwaeke <uwe.schwaeke@sap.com>
Comprehensive review — round 7 findings fixedReviewed against Found 9 (1 High, 6 Medium, 2 Low) — all fixed in
Merge dependency: these docs intentionally describe the post-#103 state. #103 must merge first so the compose file and guard match. Textual conflicts with #103/#106 are expected (CHANGELOG/README/QUICK_REFERENCE, CLAUDE.md/CONTRIBUTING.md); #106's Terraform hedges must win when resolving CLAUDE.md. CI unblocker included ( CI: 10/10 green. |
Summary
Brings all project documentation in line with the actual state of the code at HEAD, and adds an installation-focused Quickstart.
New: installation Quickstart
docs/QUICKSTART.mdrewritten as a choose-your-path install guide:make db-up && make migrate && make run)What was wrong (all verified against code before fixing)
docker compose up -dfrom repo root — the file isdeployments/docker-compose.ymlLIGHTSTACK_NOVA_MODE,LIGHTSTACK_DATABASE_URL,LIGHTSTACK_*_PORT,LIGHTSTACK_CEPH_*… in UNIFIED/DOCKER_DEPLOYMENT — replaced with the 14 vars the binary reads--validate,--dry-run,lightstack migrate— removed;lightstack-migratedocumenteds3recommended (does not exist); Glancerbdrecommended (unimplemented placeholder) — corrected everywhere incl. chart README.beastmode/,memory/constitution.md, GAP_ANALYSIS.md, HORIZON_PROJECTS_ISSUE.md, developer-local absolute pathscleanup,healthcheck,console-tokens), rollback procedure (migrate-down before binary), undocumented deploy scriptsdeleteretention policy unimplemented (both are); CLAUDE.md referenced nonexistent workflow filesAlso:
docs/README.mdreduced to a stub pointing atINDEX.md(was a drifting duplicate), CHANGELOG gained an[Unreleased]section covering the 63 post-v0.6.1 commits, and a comprehensive review report is archived atdocs/review/comprehensive-review-report-2026-10-12.md.Scope
Documentation only — no code changes. 30 files changed.
Testing
config/lightstack.yaml,deployments/*.yml,cmd/lightstack/main.go,Makefile,go.mod, chart templates)