Chapter 34Lesson 05~300 minutes

Checkpoint Lab — Capstone: Operate a Governed Production SonarQube Quality Platform

Deliver a production-readiness evidence packet for a disposable SonarQube quality platform with explicit residual risks and recovery proof.

CheckpointProduction readinessEvidence packetResidual riskCourse completion

Learning objectives

  • Operate one complete review cycle on the disposable capstone platform and predict important state changes before action.
  • Assemble architecture, version, source, scanner, Compute Engine, policy, security/RBAC, API/CI/IDE, observability, recovery, upgrade, capacity and governance evidence.
  • Prove a restore/reindex path and one incident recovery without hiding first-failure evidence.
  • State commercial/edition assumptions and free/local fallbacks explicitly.
  • Publish residual risks, owners and follow-up criteria instead of declaring the platform “production ready” without qualifications.

1. Final checkpoint mission

Deliver a reviewable production-readiness dossier for the disposable sq34:capstone platform. The assessor should be able to reconstruct the operating model without trusting your memory: what version ran, what source was analyzed, how the report/task/result connected, which policy decided, what credential/trust boundary existed, how the database was backed up/restored, how updates/capacity are governed and which risks remain.

Pinned capstone baseline

Generation date: 2026-09-08. Mandatory executable work uses SonarQube Community Build 26.9.0.129388 and the official sonarqube:26.9.0.129388-community image. The recorded scanner baseline is SonarScanner CLI 8.1.0.6389. When scanner JRE auto-provisioning is unavailable or disabled, use Java 21 or newer. The local database family is PostgreSQL 17.x; the 2026.1 Server LTA documentation supports PostgreSQL 14–18. Commercial references are SonarQube Server 2026 Release 4.1 and 2026.1.5 LTA. Record the exact image digest, scanner output and database image digest you actually run.

Pass condition

The checkpoint passes when evidence is internally consistent and limitations are explicit—not when every metric is green. A failed gate or documented residual risk can be a stronger production artifact than a cosmetically perfect dashboard with missing provenance.

2. Exact assumptions and resource/credential preflight

Freeze the environment you are assessing. If your actual version differs from the baseline, do not falsify it—record the real version and rerun the compatibility checks.

Category Required assumption/preflight Evidence file
Platform Community Build 26.9.0.129388 image tag + actual digest; local URL 9000 00-sonarqube-image.txt
Database PostgreSQL 17.x image/digest; local fake credential; supported DB family 00-database.txt
Scanner CLI 8.1.0.6389 baseline or actual recorded version; JRE mode recorded 00-scanner-version.txt
Source Synthetic repo only; stable sq34:capstone key; exact Git SHA 00-revision.txt
Test evidence pytest/coverage producer runs before scan coverage.xml, junit.xml, producer log
Credential fake local analysis/read token; no value in evidence; revoke after lab governance/token-record.md
Plugins none required for mandatory path; inventory current extensions directory/system info server/plugin-inventory.txt
CI/provider local shell workflow is mandatory; hosted CI/decoration may be simulated ci/pipeline-evidence.md
Identity local built-in users/tokens only; enterprise SSO optional/simulated governance/identity-boundary.md
API documented instance API only; bearer auth; V2 migration noted api/api-contract.md

3. Write predictions before actions

Predict at least two state changes. This is a capstone control: you must know which layer should change before you touch it, then verify using a different evidence source.

# evidence/governance/predictions.yaml
predictions:
  - id: P1
    before: project sq34:capstone has the currently recorded gate assignment
    action: run a new analysis of the exact recorded revision with coverage.xml present
    expected_change: a new CE task/analysis record is created; source revision/project key stay unchanged
    independent_verification:
      - scanner report-task.txt
      - CE task status/API or UI
      - project analysis timestamp/result
  - id: P2
    before: backup artifact exists but restore target does not
    action: restore database to isolated sq34restore stack with fresh search/data volume
    expected_change: isolated server reconstructs project/config from restored durable state and builds usable indexes
    independent_verification:
      - restore logs + system status
      - project/config inspection
      - fresh equivalent analysis task
  - id: P3
    before: fake bounded exception SQ34-EX-001 is active in external governance ledger
    action: reach its review/expiry decision
    expected_change: exception closes or is explicitly renewed with new evidence; Sonar technical result is not silently suppressed
    independent_verification:
      - governance ledger diff
      - unchanged issue/gate evidence unless separately remediated

4. Required production-readiness evidence packet

Use a stable packet structure so review is mechanical instead of anecdotal.

evidence/
├── 00-generated-at.txt
├── 00-revision.txt
├── 00-sonarqube-image.txt
├── 00-database.txt
├── 00-scanner-version.txt
├── architecture/
│   ├── platform.mmd
│   ├── trust-boundaries.md
│   └── edition-matrix.md
├── scanner/
│   ├── effective-inputs.md
│   ├── analysis.log
│   └── report-task.txt
├── server/
│   ├── startup.log
│   ├── ce-task.json
│   ├── health.json
│   └── plugin-inventory.txt
├── policy/
│   ├── profile.md
│   ├── quality-gate.json
│   ├── new-code.md
│   └── exception-ledger.yaml
├── api/
│   ├── api-contract.md
│   ├── measures.json
│   └── permission-check.md
├── ci/
│   ├── producer.log
│   ├── pipeline-evidence.md
│   └── ide-or-provider-simulation.md
├── backup/
│   ├── sonarqube.dump
│   ├── sonarqube.dump.sha256
│   ├── restore.log
│   └── restore-verification.md
├── operations/
│   ├── upgrade-plan.md
│   ├── compatibility-matrix.md
│   ├── capacity-baseline.csv
│   └── incident-SQ34-INC-001.yaml
└── governance/
    ├── owners.md
    ├── predictions.yaml
    ├── review-decision.md
    ├── residual-risks.yaml
    └── assumptions-limitations.md

5. Execute the production-readiness review cycle

The checkpoint is intentionally broad, but each step is small. Reuse the runnable commands from Lessons 2 and 4 rather than inventing a second, inconsistent platform.

  1. Architecture/version inventory: capture container image digests, database/scanner/JRE mode, deployment topology, ports, persistence paths and trust boundaries.
  2. Build/test: run the synthetic tests and coverage producer; preserve producer log and reports before analysis.
  3. Analysis: run scanner with stable project key and revision; preserve effective inputs, indexing/import log and report-task.txt.
  4. Compute/result: verify referenced CE task, then capture current measures/issues/analysis identity.
  5. Policy: capture active profile, gate conditions/status and New Code definition; document any bounded exception separately.
  6. Security/RBAC: prove token ownership/purpose and a permission outcome without recording secret value; verify TLS/trust assumptions for any non-local adaptation.
  7. Automation/developer feedback: save a bearer-auth API read and either a local CI/Connected Mode artifact or clearly labeled provider simulation.
  8. Observability: capture health/startup/CE/search-relevant logs and the capacity baseline from an equivalent analysis.
  9. Recovery: verify DB backup checksum, isolated restore, fresh index/reindex behavior and a fresh validation analysis.
  10. Upgrade: write current→target compatibility/update plan including Java/database/scanner/plugin/API prerequisites and recovery boundary.
  11. Incident: run the bounded auth/report-path incident or interpret the synthetic CE case, preserve first failure, apply one correction and prove same-input rerun.
  12. Governance: review owners, exception expiry, adoption/remediation evidence and residual risks; sign the review decision with limitations.

6. One dossier, many independent evidence chains

The diagram is not architecture decoration. Each edge says which evidence must exist before the next conclusion is valid.

Production-readiness evidence flow
flowchart TB A["Version + architecture inventory"] --> B["Revision + build/test evidence"] B --> C["Scanner inputs + indexing + upload"] C --> D["CE task + durable project result"] D --> E["Profile + New Code + gate"] E --> F["RBAC + API + CI/IDE/provider"] F --> G["Health + logs + capacity"] G --> H["Database backup + restore/reindex proof"] H --> I["Upgrade plan + incident recovery"] I --> J["Governance review + residual risks"] J --> K["Production decision with limitations"]

7. Production-readiness acceptance matrix

A “pass” means the minimum evidence exists and is internally consistent. Residual risk is expected; hiding it is failure.

Domain Minimum pass evidence Residual-risk examples
Architecture/version exact edition/version/digests + DB/scanner/JRE + topology/trust boundaries single-node availability; local-only TLS model
Analysis revision + producer reports + effective scanner inputs + indexed/report/task evidence language-specific analyzer limits; synthetic source
Policy profile/gate/New Code assignment and result + exception ledger gate policy needs broader organizational validation
Security/RBAC least-privilege token record + permission response + fake-secret discipline enterprise SSO not exercised locally
Automation/feedback API contract/read + CI/IDE/provider artifact hosted provider decoration simulated
Observability/capacity health/log correlation + bounded scanner/CE/host baseline/headroom note small synthetic workload cannot predict enterprise scale
Recovery DB backup checksum + isolated restore + fresh analysis site-level DR not tested
Upgrade supported-path/compatibility matrix + recovery prerequisite no live production plugin estate
Governance owners + exception expiry + review decision + non-gaming metrics external audit/compliance mapping requires organization-specific evidence

8. Capacity evidence: enough to reason, not enough to overclaim

Record a small baseline from several equivalent local analyses. The purpose is to show the method from Chapter 31—not to extrapolate this tiny project into an enterprise sizing guarantee. Capture scanner time, CE/task time/queue wait where observable, host CPU/RAM, database/search/disk/network notes, concurrent activity and explicit headroom assumptions.

timestamp_utc,revision,loc,scanner_seconds,ce_seconds,queue_wait_seconds,host_cpu_peak_pct,host_ram_peak_mb,db_observation,disk_observation,notes
2026-09-08T00:00:00Z,<sha>,<nloc>,<measured>,<measured>,<measured>,<measured>,<measured>,<record>,<record>,bounded local synthetic run
Sizing limitation

Reference architectures and synthetic benchmarks are planning anchors. Production sizing requires measured real workload shape: project/language mix, arrival burstiness, CE duration, database/search pressure, disk IOPS/latency, users/API calls and growth.

9. Edition-aware simulation ledger

Commercial simulation is not a fake screenshot. It states the real control, the product/edition boundary and the free evidence that proves the underlying concept.

Optional capability Commercial/product boundary Mandatory free/local proof
Branch/PR analysis + provider decoration commercial edition/provider integration dependent same revision/task/gate/CI-state separation; provider decoration simulated
Advanced security/taint edition/language dependent synthetic basic vulnerability/hotspot boundaries + external security-control note
Applications/Portfolios/reports Developer/Enterprise dependent external project inventory + evidence packet + non-gaming trend aggregation
Enterprise SSO/SCIM commercial/IdP dependent local users/groups/tokens + trust/least-privilege model + simulated identity mapping
Data Center HA/autoscaling Data Center licensed single-node recovery/capacity evidence + documented DCE architecture simulation
Managed DB/Kubernetes/paid CI external service/provider choices local PostgreSQL/Docker/shell CI equivalent control

10. Residual risks and final operating decision

Production readiness is a risk decision, not a score. Name what the lab cannot prove, assign an owner and define the next evidence needed.

residual_risks:
  - id: RR-01
    risk: single-node Community Build lab does not prove high availability
    owner: platform-operations
    disposition: accepted-for-course-lab
    next_evidence: licensed DCE failure test if business availability requires it
  - id: RR-02
    risk: synthetic repository does not represent enterprise language/project mix
    owner: quality-platform-team
    disposition: requires-production-measurement
    next_evidence: 30-day workload/capacity baseline
  - id: RR-03
    risk: hosted CI/provider decoration and enterprise identity were simulated
    owner: devops-integration-team
    disposition: test-before-production
    next_evidence: provider sandbox + least-privilege integration test
  - id: RR-04
    risk: compliance/security reports do not prove secure software
    owner: security-governance
    disposition: retain-complementary-controls
    next_evidence: threat model + SCA/SBOM/DAST/runtime controls as applicable
Decision wording

Prefer: “The disposable platform demonstrates the required control chain under the recorded assumptions; the residual risks above must be addressed before applying the design to production.” Avoid: “SonarQube is secure/compliant/production ready because the dashboard is green.”

11. Verification checklist and cleanup

  • Every result is tied to the exact sq34:capstone revision and recorded effective inputs.
  • At least two predicted changes were independently verified from different evidence sources.
  • Scanner/upload, CE, durable analysis, gate, CI and provider/IDE states are not collapsed.
  • No token/password/private key is present in the packet; fake credential metadata is clearly labeled.
  • Database backup has checksum and an isolated restore/reindex/fresh-analysis verification.
  • Upgrade plan records current/target compatibility and does not rely on arbitrary downgrade.
  • Capacity numbers are bounded by explicit workload assumptions.
  • Commercial features are optional/simulated and never required for core completion.
  • Exceptions have owner/rationale/scope/expiry; metrics do not rank developers or reward exclusions.
  • Residual risks name owners and next evidence instead of being hidden.
# Finalize and hash the evidence packet before cleanup.
find evidence -type f -print0 | sort -z | xargs -0 sha256sum > evidence/SHA256SUMS.txt
tar -czf ../sq34-production-readiness-evidence.tgz evidence
sha256sum ../sq34-production-readiness-evidence.tgz > ../sq34-production-readiness-evidence.tgz.sha256

# Revoke the fake/local token in the UI before destroying the lab.
unset SONAR_TOKEN SONAR_HOST_URL

# Remove only owned lab stacks after evidence archive exists.
docker compose -f compose.restore.yaml -p sq34restore down -v 2>/dev/null || true
docker compose down -v

12. Knowledge check

Your scanner log is clean, CE task is successful, gate is green, but CI is red. What is the next layer?

A restore target shows the old project after the database restore. Is recovery proven?

Why is a green security report not proof that the application is secure?

What should happen if the capstone needs a commercial feature to demonstrate a concept?

What is the final artifact of the course?

13. What Chapter 34 adds—and post-course production practice

Chapter 34 converts the course from a collection of SonarQube skills into an operating discipline. You can now trace a source revision through build/test evidence, scanner indexing and report upload, Compute Engine processing, persistent results, profiles/New Code/gates, CI/API/IDE/provider outcomes, operations, recovery, upgrades, capacity and governance—while keeping ownership and edition boundaries explicit.

Post-course practice should be cyclical: re-verify releases and compatibility; review permissions/tokens; sample analysis evidence; test backups/restores; inspect API deprecations; measure capacity; rehearse incidents; expire exceptions; review remediation trends and developer feedback; and update the operating model when the platform or organization changes. The durable skill is not remembering a screen. It is preserving causality and evidence as the system evolves.

Course completion statement

A governed SonarQube platform is one where the exact revision, effective analysis inputs, asynchronous task/result, policy context, trust boundary, owning system, recovery path and residual risks can be independently verified.

Next lesson

Course complete — review, rehearse, and operate the full evidence chain

You have reached the final SonarQube lesson. Return to the course curriculum to review weak areas, repeat checkpoint labs, and keep version-sensitive operating evidence current.

Official references and version notes

Further reading

Verify version-sensitive behavior against primary documentation before using these patterns outside the disposable lab.

Version and compatibility note

SonarQube product names, editions, release trains, scanner runtimes, APIs, authentication options, and platform prerequisites can change independently. Re-check the linked SonarSource primary documentation for the exact target release before applying version-sensitive commands or operational guidance outside the disposable course environment.

Keep the academy open

Support free, practical DevOps education.

Every lesson is designed to remain readable in a browser, downloadable from GitHub, and usable without a paid learning platform. Contributions help expand and maintain the curriculum.

Ethereum / ERC-20
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0Send only Ethereum/ERC-20 compatible assets to this address.