The rdkafka-sys crate build was failing with 'No such file or directory (os error 2)'
because the make command was missing from the build dependencies. This is required
for building librdkafka statically. Adding make to the apt-get install list.
Co-Authored-By: Claude <noreply@anthropic.com>
The librdkafka configure script looks for the 'c++' command, not just 'g++'.
Installing g++ should provide the c++ symlink via alternatives, but this
doesn't always work correctly in minimal containers. This adds an explicit
fallback to create the symlink if update-alternatives fails.
The rust:1.87-slim image doesn't include git, but the build-binaries step
runs 'git clone' which fails with exit code 127 (command not found).
Install git along with other build dependencies before cloning.
Co-Authored-By: Claude <noreply@anthropic.com>
The rust:1.87-slim image doesn't have sh in a location that Argo's
executor can find. Using bash (which is at /usr/bin/bash) fixes
the 'command not found' (exit code 127) error.
- Changed git clone destination from /src to /workspace/src
- This ensures binaries are available to subsequent steps (build-image, create-github-release)
- Fixes exit code 127 failure in miroir-release workflow
The kafka-sink Cargo feature existed but was not enabled in production builds,
causing all Kafka CDC events to be silently dropped at runtime.
Changes:
- Add --features miroir-core/kafka-sink to cargo-build in miroir-ci.yaml
- Update Dockerfile comments to reflect the expected build commands
- Add kafka_sink_feature.rs integration test with #[cfg(feature = "kafka-sink")]
The test verifies:
- Feature is enabled (compile-time check)
- CdcManager publish works with Kafka config
- Kafka sink config parses correctly
Fixes plan-gap: kafka-sink feature not enabled in CI build and Dockerfile
Bead-Id: bf-4v4rz
Updates the CI workflow to:
1. Add HTML coverage report output (plan §8 coverage policy)
- Previously only generated Lcov + Xml formats
- Now also outputs Html for browser-based viewing
2. Publish coverage reports as Argo artifacts
- coverage-html/ directory for interactive browsing
- cobertura.xml for CI tool integration
- lcov.info for diff tools
3. Add PR comment showing coverage delta
- Posts coverage percentage on PRs when revision != main
- Shows current coverage vs 90% target vs base (main)
- Includes link to full coverage artifact
4. Generate coverage summary file for PR comment consumption
The coverage gate (--fail-under 90) was already in place; this adds
the visibility (artifacts + PR comments) required by plan §8.
Closes: miroir-89x.1
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add example ArgoCD Application manifests and supporting files for
deploying Miroir via GitOps following plan §6 pattern.
Includes:
- Application template with placeholders for customization
- Production and development values.yaml examples
- Chart.yaml shim referencing upstream OCI chart
- ExternalSecret template for ESO integration
- Cluster-specific examples (ardenone-cluster, rs-manager)
- README with deployment instructions
Pattern: declarative-config repo holds per-instance values and Chart
shim; ArgoCD syncs from git path rather than inline values.
Closes: miroir-qjt.5
Changes:
- Dockerfile: Remove multi-stage build, now expects pre-built miroir-proxy-linux-amd64
- Dockerfile: Add inline comment documenting the plan §7 cargo-build template
- CI workflow: Change /workspace/dist → /workspace/artifacts to match plan §7
- CI workflow: Update create-github-release to reference /workspace/artifacts
This aligns with plan §7 and §12: scratch base, no libc, minimal attack surface.
The CI builds the static musl binary separately, then Dockerfile copies it.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
OP#1 (shard migration write safety): chaos-test scope documented; anti-entropy
as the mitigation is complete. Bead miroir-zc2.1 closed.
OP#2 (Raft vs Redis): full crate survey + prototype + benchmark. Decision:
Redis wins, revisit before v2.0. Bead miroir-zc2.2 closed; docs in
docs/research/raft-task-store.md.
OP#3 (resharding 2× load): benchmark confirms 2.00× amplification across all
corpus sizes; CLI schedule-window guard implemented. Bead miroir-zc2.3 closed;
docs in docs/benchmarks/resharding-load.md.
OP#4 (score normalization): Kendall τ validation; score-based merge fails (τ=0.79),
RRF fails (τ=0.14), DFS preflight passes (τ=0.98). Bead miroir-zc2.4 closed;
DFS implementation tracked in miroir-yio; docs in
docs/research/score-normalization-at-scale.md.
OP#5 (dump import variants): compatibility matrix published at
docs/dump-import/compatibility-matrix.md. Bead miroir-zc2.5 closed.
OP#6 (arm64): deferred to v1.x+. Implementation roadmap expanded in
docs/plan/plan.md (commit 7f03fe6). Bead miroir-zc2.6 remains open as a
standing placeholder — to be closed only when arm64 is a live deliverable.
Also: minor unused-variable warning fixes in task_registry.rs, redis.rs,
sqlite.rs; add k8s/openbao-policy.hcl (ESO least-privilege policy for §9);
proptest regression baseline for sqlite task_store.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Matches the manifest already in declarative-config (commit 3d72934).
OCI Helm chart at ghcr.io/jedarden/charts/miroir, automated sync
with prune + selfHeal + ServerSideApply.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Replace sprig regex template expressions with a shell script approach for
Kaniko destination tags, matching the pattern in miroir-ci.yaml. Pin Kaniko
image to v1.23.0-debug. Fix serviceAccountName from argo-runner to argo-workflow.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>