Buyer-visible / operator gap
Protected develop@622e5e6c3d534f230c390f10e3832efadfc01825 ships a bundled Docker Compose observability path that cannot reach the standard Zipkin HTTP collector as configured:
docker-compose.yml starts openzipkin/zipkin:2 and maps 9412:9412;
etl-service, cdc-service, and zuul-gateway each configure management.zipkin.tracing.endpoint as http://${ZIPKIN_HOST:localhost}:9412/api/v2/spans;
- the official OpenZipkin Docker quick start and server documentation use port 9411 for the Zipkin server/HTTP API (
docker run -p 9411:9411 openzipkin/zipkin; UI/API on 9411).
With the repository's default Compose topology, applications therefore target zipkin:9412 while the bundled Zipkin image's documented server port is 9411. This makes the default distributed-tracing control look configured while failing at the transport boundary.
Status: active_pr via Draft PR #167. Nothing in #167 is implemented_on_develop until protected integration.
Active remediation — PR #167
Fresh PR state keeps the bounded repair active on unchanged protected base develop@622e5e6c3d534f230c390f10e3832efadfc01825:
- branch:
fix/zipkin-compose-port-622e5e6;
- exact current source head:
82228115235edffbb37ef3fb662d60acf84ddb6e;
- Draft: true;
- GitHub mergeability: true at the latest refresh;
- requested reviewers/teams: none at the latest refresh;
- diff remains limited to
docker-compose.yml plus DockerComposeZipkinTransportTest.
The branch preserves a test-only RED at 8bf04b1a57e4c74d49bf880a52c2b16c7276f7f0, then the smallest GREEN production correction at current head 82228115235edffbb37ef3fb662d60acf84ddb6e:
- keep historical host compatibility port 9412 while forwarding it to container/service collector port 9411 (
9412:9411);
- give ETL, CDC, and gateway explicit Compose-only
MANAGEMENT_ZIPKIN_TRACING_ENDPOINT=http://zipkin:9411/api/v2/spans overrides;
- leave ordinary non-Compose endpoint configuration externalizable.
Current PR evidence is not merge acceptance. CI 31336585539, Dependency Review 31336585553, CycloneDX SBOM 31336585533, and SAST Semgrep 31336585566 are green, but CI executed GitHub synthetic merge a9169f87fad964952ac73d4dac914f7ad5e82aa0 rather than literal source head. Security Scan 31336585531 is genuinely failed on inherited protected-base Jackson advisories and is owned by shared remediation PR #160 rather than by this Compose diff. The protected JaCoCo quality gate is also independently non-vacuous only after #162/#164 is accepted. CodeRabbit skipped review because #167 is Draft; no qualifying formal approval is inferred from that skip.
Therefore #167 remains active_pr, not planned, but also not merge-ready or shipped truth. After #160 and the shared source-identity/coverage controls integrate, the unchanged behavior must be revalidated against the new exact protected base; no old-head/base check or review transfers.
RCA
- Immediate cause: repository-local Zipkin port constants drifted from the upstream server's documented 9411 transport.
- Technical root cause: Compose host/container mapping and Spring tracing endpoints repeat the port independently, with no machine-checkable cross-file contract.
- Control failure: no repository test proves that the bundled collector port and application exporter endpoints are mutually reachable.
- Blast radius: tracing/latency diagnostics and acquisition/operability evidence for the bundled stack; ETL/CDC request processing itself remains independent.
Distinct bounded remedies
- Preferred: restore the bundled stack to standard Zipkin 9411 end-to-end. Map a compatibility host port only if required, but use container/service port 9411 and Spring exporter endpoints
http://zipkin:9411/api/v2/spans inside the Compose network. Keep ordinary non-Compose configuration overrideable.
- Alternative: explicitly reconfigure the Zipkin server to listen on 9412. Execute only if current official OpenZipkin configuration documents that override and it is tested against the exact image; do not assume a generic environment variable works.
- Reject: leave 9412 on both sides and call startup success tracing evidence.
- Reject: add a fake always-green collector or disable tracing to make Compose tests pass.
TDD / acceptance
RED first at the shipped topology boundary, then the smallest product correction. Final acceptance must prove:
- a machine-checkable repository test fails on the current 9412 mismatch;
- the bundled Zipkin container is reachable on the documented HTTP collector port from service-network configuration;
- ETL, CDC, and gateway exporter endpoints agree with that internal port;
- any host-port compatibility mapping is clearly distinguished from the container/service port;
- ordinary endpoints remain configurable through Spring Boot externalized configuration rather than introducing a secret or hard-coded remote collector;
- no trace payload, credential, authorization header, raw principal, or PII is added to logs merely to test transport;
- existing full Maven tests, coverage, dependency/SBOM/SAST/security gates remain intact;
- operator/CHANGELOG documentation records the corrected default stack and rollback boundary;
- exact-source/review/protected-merge evidence is regenerated for the final head.
Sequencing / writer safety
This slice is independent of the blocked durable-job stack and connector behavior. Avoid editing actively moving #149/#157/#163/#164 source branches. PR #167 owns docker-compose.yml while it remains active; other commercial-loop slices such as #169 must not race that path.
Primary references
OpenZipkin. (2026). Zipkin. Official repository quick start: docker run -d -p 9411:9411 openzipkin/zipkin and UI on port 9411. https://github.com/openzipkin/zipkin
OpenZipkin. (2026). Quickstart. Official Docker guidance uses 9411:9411. https://zipkin.io/pages/quickstart.html
Buyer-visible / operator gap
Protected
develop@622e5e6c3d534f230c390f10e3832efadfc01825ships a bundled Docker Compose observability path that cannot reach the standard Zipkin HTTP collector as configured:docker-compose.ymlstartsopenzipkin/zipkin:2and maps9412:9412;etl-service,cdc-service, andzuul-gatewayeach configuremanagement.zipkin.tracing.endpointashttp://${ZIPKIN_HOST:localhost}:9412/api/v2/spans;docker run -p 9411:9411 openzipkin/zipkin; UI/API on 9411).With the repository's default Compose topology, applications therefore target
zipkin:9412while the bundled Zipkin image's documented server port is 9411. This makes the default distributed-tracing control look configured while failing at the transport boundary.Status:
active_prvia Draft PR #167. Nothing in #167 isimplemented_on_developuntil protected integration.Active remediation — PR #167
Fresh PR state keeps the bounded repair active on unchanged protected base
develop@622e5e6c3d534f230c390f10e3832efadfc01825:fix/zipkin-compose-port-622e5e6;82228115235edffbb37ef3fb662d60acf84ddb6e;docker-compose.ymlplusDockerComposeZipkinTransportTest.The branch preserves a test-only RED at
8bf04b1a57e4c74d49bf880a52c2b16c7276f7f0, then the smallest GREEN production correction at current head82228115235edffbb37ef3fb662d60acf84ddb6e:9412:9411);MANAGEMENT_ZIPKIN_TRACING_ENDPOINT=http://zipkin:9411/api/v2/spansoverrides;Current PR evidence is not merge acceptance. CI
31336585539, Dependency Review31336585553, CycloneDX SBOM31336585533, and SAST Semgrep31336585566are green, but CI executed GitHub synthetic mergea9169f87fad964952ac73d4dac914f7ad5e82aa0rather than literal source head. Security Scan31336585531is genuinely failed on inherited protected-base Jackson advisories and is owned by shared remediation PR #160 rather than by this Compose diff. The protected JaCoCo quality gate is also independently non-vacuous only after #162/#164 is accepted. CodeRabbit skipped review because #167 is Draft; no qualifying formal approval is inferred from that skip.Therefore #167 remains
active_pr, notplanned, but also not merge-ready or shipped truth. After #160 and the shared source-identity/coverage controls integrate, the unchanged behavior must be revalidated against the new exact protected base; no old-head/base check or review transfers.RCA
Distinct bounded remedies
http://zipkin:9411/api/v2/spansinside the Compose network. Keep ordinary non-Compose configuration overrideable.TDD / acceptance
RED first at the shipped topology boundary, then the smallest product correction. Final acceptance must prove:
Sequencing / writer safety
This slice is independent of the blocked durable-job stack and connector behavior. Avoid editing actively moving #149/#157/#163/#164 source branches. PR #167 owns
docker-compose.ymlwhile it remains active; other commercial-loop slices such as #169 must not race that path.Primary references
OpenZipkin. (2026). Zipkin. Official repository quick start:
docker run -d -p 9411:9411 openzipkin/zipkinand UI on port 9411. https://github.com/openzipkin/zipkinOpenZipkin. (2026). Quickstart. Official Docker guidance uses
9411:9411. https://zipkin.io/pages/quickstart.html