127 lines
5.7 KiB
Markdown
127 lines
5.7 KiB
Markdown
# DGR-023 evidence — reproducible Python and C++ protobuf/gRPC generation
|
|
|
|
**Status:** complete after controller verification and independent-review repairs on 2026-07-17.
|
|
|
|
**Authority:** live Gitea issue #7. The local PRD is a secondary projection.
|
|
|
|
## Implemented contract
|
|
|
|
- Python generation requires exactly `grpcio-tools==1.82.1`; the generator checks installed distribution metadata and rejects missing or different versions with an actionable exact install command.
|
|
- The C++ bootstrap builds one ignored toolchain prefix from exact inputs:
|
|
- Protobuf release `33.1` (`protobuf-config` version `33.1.0`);
|
|
- Abseil release `20250814.1`;
|
|
- gRPC C++ `1.82.1` at commit `acccf84c0df20487d64101f528e5d426541ca4e5`;
|
|
- gRPC's exact-commit submodules for c-ares, RE2, OpenSSL, and zlib.
|
|
- Protobuf is configured with local dependencies only after the exact Abseil build. gRPC uses the installed Protobuf/Abseil packages and commit-pinned module dependencies, avoiding unpinned system development packages and download fallbacks.
|
|
- CMake requires exact Protobuf `33.1.0` and gRPC `1.82.1`, requires the exported `gRPC::grpc_cpp_plugin` target, and always generates/builds both message and service stubs in the ignored build tree.
|
|
- Python bindings remain committed package output; `--check` regenerates into a temporary directory and compares output. C++ bindings are never committed.
|
|
- The C++ conformance test parses Python-produced vectors, validates fields/CRC32C, and emits `cpp_roundtrip.binpb`; Python compares that artifact byte-for-byte.
|
|
|
|
## Defects found and fixed
|
|
|
|
1. A relative bootstrap prefix was resolved after entering the temporary source directory, so successful output was deleted by cleanup. The script now canonicalizes the caller-relative destination first. The regression executes `--print-prefix` from a temporary working directory and validates the resulting path behavior.
|
|
2. The original native path omitted gRPC C++ and accepted any discoverable plugin. The bootstrap now builds exact gRPC/plugin sources, and CMake rejects absent/incompatible versions.
|
|
3. The Python script named the `grpcio-tools` pin but did not validate the installed distribution. It now refuses mismatched versions.
|
|
4. Protobuf ignored a stale provider option and attempted to download a different Abseil. The build was stopped; exact Abseil is now built first and Protobuf uses `LOCAL_DEPENDENCIES_ONLY`.
|
|
5. The host lacked OpenSSL development headers. Rather than add a floating system dependency, gRPC now uses the submodule pinned by its exact commit.
|
|
6. Documentation uses `bash scripts/bootstrap_native_toolchain.sh ...`, so a normal checkout does not depend on executable-mode preservation.
|
|
|
|
## Verified toolchain
|
|
|
|
```text
|
|
cmake version 4.4.0
|
|
c++ (GCC) 15.2.1 20260123 (Red Hat 15.2.1-7)
|
|
libprotoc 33.1
|
|
protobuf CMake package 33.1.0
|
|
grpcio-tools 1.82.1
|
|
grpcio 1.82.1
|
|
protobuf Python runtime 7.35.1
|
|
gRPC C++ 1.82.1
|
|
commit acccf84c0df20487d64101f528e5d426541ca4e5
|
|
grpc_cpp_plugin sha256 995ca8ac620fe83532b649a7c8c0a9341c7003da927fe0e4a8f821bfc579206d
|
|
```
|
|
|
|
The native toolchain and generated/build artifacts live under ignored mounted-drive `build/` paths; model/build artifacts were not stored under `/home`.
|
|
|
|
## Commands and results
|
|
|
|
```bash
|
|
bash scripts/bootstrap_native_toolchain.sh build/native-toolchain
|
|
```
|
|
|
|
```text
|
|
passed from a clean build directory
|
|
libprotoc 33.1
|
|
gRPC 1.82.1 commit acccf84c0df20487d64101f528e5d426541ca4e5
|
|
grpc_cpp_plugin sha256 995ca8ac620fe83532b649a7c8c0a9341c7003da927fe0e4a8f821bfc579206d
|
|
```
|
|
|
|
```bash
|
|
cmake -S packages/node/native -B build/native \
|
|
-DCMAKE_PREFIX_PATH="$PWD/build/native-toolchain"
|
|
cmake --build build/native -j"$(nproc)"
|
|
test -f build/native/shard_runtime.grpc.pb.cc
|
|
test -f build/native/shard_runtime.grpc.pb.h
|
|
test -f build/native/libshard_runtime_grpc.a
|
|
ctest --test-dir build/native --output-on-failure
|
|
```
|
|
|
|
```text
|
|
Pinned gRPC 1.82.1: building ShardRuntime service stubs
|
|
shard_runtime_proto built
|
|
shard_runtime_grpc built
|
|
1/1 shard_protocol_conformance passed
|
|
```
|
|
|
|
```bash
|
|
python3 -m pytest -q tests/test_native_shard_protocol.py
|
|
```
|
|
|
|
```text
|
|
50 passed, 2 optional-path skips
|
|
```
|
|
|
|
All DGR-023-required checks were selected explicitly:
|
|
|
|
```bash
|
|
python3 -m pytest -q -rs tests/test_native_shard_protocol.py \
|
|
-k 'cpp_and_python_agree_byte_for_byte or generated_python_stubs_match_the_proto or native_toolchain_bootstrap or wrong_grpcio'
|
|
```
|
|
|
|
```text
|
|
4 passed, 48 deselected
|
|
```
|
|
|
|
```bash
|
|
python3 scripts/generate_native_protocol.py --check
|
|
python3 scripts/generate_protocol_goldens.py --check
|
|
python3 scripts/ralph_prd_schema.py validate .scratch/distributed-gguf-runtime/prd.json
|
|
python3 -m compileall -q packages tests
|
|
git diff --check
|
|
```
|
|
|
|
```text
|
|
generated stubs are up to date
|
|
conformance vectors are up to date
|
|
OK: 55 stories validated
|
|
compileall passed
|
|
git diff --check passed
|
|
```
|
|
|
|
## Changed files
|
|
|
|
- `scripts/bootstrap_native_toolchain.sh`
|
|
- `scripts/generate_native_protocol.py`
|
|
- `packages/node/native/CMakeLists.txt`
|
|
- `packages/node/native/README.md`
|
|
- `tests/test_native_shard_protocol.py`
|
|
- `.scratch/distributed-gguf-runtime/evidence/DGR-023/README.md`
|
|
- `.scratch/distributed-gguf-runtime/prd.json` (secondary completion projection only)
|
|
|
|
## Limitations and dependency handoff
|
|
|
|
- This story proves exact schema/message/service generation and cross-language conformance. It does not implement or run the standalone worker service itself; DGR-033/DGR-037 own worker behavior.
|
|
- The plugin SHA is evidence for this verified build. Reproducibility authority is the exact gRPC commit plus its submodule graph, not an assumption that different compilers produce byte-identical executables.
|
|
- No model, GPU, API credits, or model download was used.
|
|
- DGR-024 and DGR-037 may consume this completed generation dependency but must provide their own transport/worker evidence.
|