Visitar URL original
docs: overhaul all documentation to current project state + installation quickstart by senolcolak · Pull Request #101 · cobaltcore-dev/lightstack · GitHub
Skip to content

docs: overhaul all documentation to current project state + installation quickstart - #101

Open
senolcolak wants to merge 14 commits into
mainfrom
docs/current-state-overhaul
Open

senolcolak wants to merge 14 commits into
mainfrom
docs/current-state-overhaul

Conversation

@senolcolak

Copy link
Copy Markdown
Collaborator

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.md rewritten as a choose-your-path install guide:

  • A. Docker Compose (stub mode, ~5 min) — correct file path, ports, expected containers, client setup, first VM
  • B. Docker Compose + Horizon dashboard
  • C. Binary from source (make db-up && make migrate && make run)
  • D. Helm chart (image required, no default by design)
  • E. Real-KVM single node (deploy script)
  • Default credentials, security warning (JWT secret), troubleshooting table, port table

What was wrong (all verified against code before fixing)

Class Examples
Wrong ports Keystone 5000/5001 in API.md / INSTALLATION / DOCKER_DEPLOYMENT / OPERATIONS / QUICKSTART — it is 35357
Wrong compose path bare docker compose up -d from repo root — the file is deployments/docker-compose.yml
Fictional env vars LIGHTSTACK_NOVA_MODE, LIGHTSTACK_DATABASE_URL, LIGHTSTACK_*_PORT, LIGHTSTACK_CEPH_* … in UNIFIED/DOCKER_DEPLOYMENT — replaced with the 14 vars the binary reads
Nonexistent flags/subcommands --validate, --dry-run, lightstack migrate — removed; lightstack-migrate documented
Storage backend errors Cinder s3 recommended (does not exist); Glance rbd recommended (unimplemented placeholder) — corrected everywhere incl. chart README
Feature presented as working Rate limiting (ADR-002 accepted, zero code) — now marked planned-not-implemented
Superseded figures "104% (342/330)" → blueprint's ~335 functional operations; contract tests 157/191 → 223/233
Stale architecture 5 servers → 7 (Placement :8778 stub, Metadata :8775); "no VXLAN in v1" → implemented; Glance "RBD-backed" → local/S3
Wrong versions Go 1.26 → 1.27+, PostgreSQL 14/16 → 18, kolla Horizon 2023.2 → 2025.2-noble
Broken links/refs .beastmode/, memory/constitution.md, GAP_ANALYSIS.md, HORIZON_PROJECTS_ISSUE.md, developer-local absolute paths
Undocumented features CLI subcommands (cleanup, healthcheck, console-tokens), rollback procedure (migrate-down before binary), undocumented deploy scripts
Contradictions chart README claimed delete retention policy unimplemented (both are); CLAUDE.md referenced nonexistent workflow files

Also: docs/README.md reduced to a stub pointing at INDEX.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 at docs/review/comprehensive-review-report-2026-10-12.md.

Scope

Documentation only — no code changes. 30 files changed.

Testing

  • Every corrected fact was checked against the source (config/lightstack.yaml, deployments/*.yml, cmd/lightstack/main.go, Makefile, go.mod, chart templates)
  • Comprehensive review loop run on the branch before merge

Uwe Schwaeke added 7 commits October 12, 2026 15:49
…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>
@senolcolak

Copy link
Copy Markdown
Collaborator Author

Review-fix loop completed ✅

The comprehensive review loop ran 6 rounds until the verdict came back CLEAN:

Round Findings Key fixes
1 4 Critical, 10 Medium, 8 Low Helm install keys (postgres.url→database.url + required secrets.adminPassword), LIGHTSTACK_JWT_SECRET export for the Horizon stack, noVNC-proxy myth removed from stub-stack docs
2 3 Medium, 5 Low JWT-secret export propagated to all compose-horizon flows, HORIZON_SETUP noVNC leftovers, console-type claims (SPICE/RDP refused)
3 3 Medium, 7 Low "compute": 2.1→integer 2 in all local_settings templates, default role _member_→member, test-file count, network names
4 1 Medium Kubernetes doc: 6→7 listeners, Placement :8778 in table + containerPorts + Service ports
5 1 Low one residual "six services" sentence
6 — CLEAN — verified, no findings

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 docs/review/comprehensive-review-report-2026-10-12.md):

  • deployments/horizon-config/local_settings still ships _member_ as default role (docs now say member, matching the seed) — one-line config fix for a code PR
  • charts/lightstack/Chart.yaml appVersion: 0.7.0 vs unreleased docs — resolves with the v0.7.0 release work (R2 in the review report)

senolcolak pushed a commit that referenced this pull request Oct 13, 2026
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>
@senolcolak
senolcolak force-pushed the docs/current-state-overhaul branch from a3acf3d to 8691eec Compare October 13, 2026 12:43
Uwe Schwaeke added 5 commits October 13, 2026 12:58
- 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>
@senolcolak

Copy link
Copy Markdown
Collaborator Author

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: ff10a33, e1a4b7e, 2836a02, 4ac1db7, 8691eec). Full trend of the new loop:

Round Findings Fixed in
1 1 High / 8 Medium / 12 Low 8d9944f
2 1 High / 5 Medium / 5 Low cc8764c
3 4 Medium / 7 Low b596fb6
4 2 Medium / 1 Low e8f7d2c
5 3 Medium / 4 Low 697edaa
6 (final) CLEAN — 0 findings —

Round 1 — the 21 findings (all documentation-localized)

  • HIGH: KUBERNETES_DEPLOYMENT cited a nonexistent published ghcr.io image as a prerequisite — first kubectl apply would ErrImagePull. Now states the image must be built/pushed first, with placeholders and a QUICKSTART Path D link.
  • MEDIUMs: init-container env order broke $(DB_PASSWORD) expansion (k8s expands dependent env in definition order); the metrics-endpoint myth across three docs (no /metrics endpoint or 9090 listener exists); bogus soft-delete cleanup SQL (instances are hard-DELETEd); make migrate-up → make migrate; QUICKSTART Path C wrong prereq; dead .env.example variables (DEBUG, resource limits); CONFIGURATION.md implied ${VAR} YAML interpolation the loader does not perform; wrong GitHub org.
  • LOWs: table totals, stale parentheticals, placeholder issue links, unsupported two-secrets rotation advice, port notes, doc counts.

Round 2 — fix-on-fix verification (11)

The multi-node example still carried the literal ${JWT_SECRET} the round-1 fix was removing; the OPERATIONS metrics section other docs now cite still presented :9090 as real; the HORIZON_INTEGRATION table used superseded counts (now blueprint.md's authoritative 66/74/100/116/38 = 394 raw, ~335 functional); the K8s ConfigMap planted $(DB_PASSWORD)/overridden-by-env placeholders that would be used verbatim if the env vars ever went missing; remaining 'Production Ready' overclaims aligned with the review report; a broken prerequisite list repaired.

Rounds 3–5 — finding-status truth

  • F1 (noVNC) and F13 (project create) were reported as open UI gaps but are fixed in this branch's code (#534/#545); F16 (launch wizard volume) likewise (SPEC-020 FR-025). F10/F11 were fixed by SPEC-024/#546 mid-loop, so the open-gap set converged to F18 (domain switching) with the fixes and the outstanding Horizon re-pass noted everywhere.
  • CLAUDE.md corrections (cinder has no s3 mode; rate-limiting is dead config); AD/LDAP FAQ (none exists); TLS wording (no TLS listener — terminate at a proxy, LIGHTSTACK_ENDPOINT_SCHEME governs advertised URLs); Terraform '100%/zero-modification' claims qualified per blueprint §6; +12 over baseline arithmetic replaced with the reconciled figures; .env.example knobs annotated as binary-level vs compose-interpolated.

Round 6 — CLEAN

Final class sweep (finding-status claims, '100%', Production Ready, metrics/9090, ${VAR}-in-YAML, admin/secret, nonexistent ports/commands/env-vars, links/anchors) — no counted findings; the review report matches current code on every spot-checked claim.

CI on the final commit: 10/10 checks green (incl. DCO and SAP Sign-off).

Uwe Schwaeke added 2 commits November 2, 2026 10:26
…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>
@senolcolak

Copy link
Copy Markdown
Collaborator Author

Comprehensive review — round 7 findings fixed

Reviewed against origin/main @ e909227 (docs-only PR; every tree-checkable claim re-verified, including all 35 changed files and the quickstart paths).

Found 9 (1 High, 6 Medium, 2 Low) — all fixed in c206ed9.

Severity Finding Fix
High Path B required only LIGHTSTACK_JWT_SECRET and logged in with admin/secret; #103's compose requires LIGHTSTACK_ADMIN_PASSWORD via :? Both secrets required everywhere (README, QUICKSTART, UNIFIED_DEPLOYMENT, HORIZON_SETUP, QUICK_REFERENCE), openssl recipe, login uses the generated password; CONFIGURATION table 14→16 vars
Med Shipped Horizon local_settings used _member_, a role that does not exist Both configs use member (the seeded role)
Med docker exec ... lightstack-migrate down silently no-ops (prompt gets EOF, exits 0) echo yes | docker exec -i ... + interactive-prompt note
Med Two [Unreleased] sections contradicted each other (legacy list still called Placement/VXLAN future) Legacy block folded into historical notes; stale entries marked shipped
Med Superseded contract-test report presented as current Soft gate + 85% CI floor stated; report dated as a snapshot
Low .env guidance pointed at the repo root; Compose V2 reads it beside the compose file cp .env.example deployments/.env
Low Changelog said migrations went "from 055" (v0.6.1 tops at 059) 059

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 (9025720, unrelated to content): Go 1.27.3 for GO-2026-6809 and pinned Helm 3.22.1, which was failing every PR's SBOM/Helm jobs.

CI: 10/10 green.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant