Repository navigation
BoundedCode v0.1.0-alpha.4
Pre-releaseBoundedCode v0.1.0-alpha.4
Do the repositories still work together?
A multi-repository task can pass every repository's own checks and still
break the contract between them. For example, a provider renames a protobuf
field and updates its server, while a client in another repository still
builds against its vendored copy of the generated code. This alpha adds a
cross-repository compatibility gate (experimental). For every gRPC,
protobuf or OpenAPI link that a task's change affects, it reports
compatible, broken or untested, and it records the evidence: the
commands run, their outcomes, and the repositories and commits involved.
Everything else is as in v0.1.0-alpha.3. The local
default, Qwen3.6-35B-A3B on Linux with an NVIDIA GPU, is still the only
validated configuration. The gate is covered by unit, integration and CLI
tests on fixtures, and was run with the real Docker sandbox. It has not
yet been run on real tasks.
Highlights
-
Only real changes count. The gate compares the change's base and head
commits:.protomessages, fields, enums and RPC signatures are compared
structurally, and breaking changes are recognized: a field removed,
renumbered, retyped or renamed, or an RPC signature changed.- OpenAPI operations are compared together with the schemas they
reference. - Go code is compared by the function that holds the call.
- Comments, other RPCs and unrelated functions do not count.
-
Checked with the repositories' own tests, against each other's new
commits:- gRPC and protobuf (Go): the dependent repository's
go teststage
runs in the sandbox, built against the provider's candidate commit
through a generated Go workspace. A vendored copy or areplace
directive does not apply, and coverage must show the dependent's code
ran. - OpenAPI: the dependent's tests must fail when the operation is
removed from the spec, which shows they actually read it. - Failures: control runs at the base commits decide whether a failure
comes from the change or was already there.
- gRPC and protobuf (Go): the dependent repository's
-
In the task loop:
- A
brokenlink fails the attempt, and the agent is told which link
broke and why. - An
untestedlink withholdsTASK_VERIFIED. When a test could settle
it, the agent is asked once for one. - Results survive a crash or
task resume. A new commit marks them stale.
- A
-
Where to see it:
task status,verify --full(also--json) and the
Verification tab of the interface show the per-link report:cross-repository compatibility: BROKEN (3 broken, 2 untested, 0 compatible) BROKEN grpc_def grpc shop.payments.v1.PaymentService/Charge [changed] checkout@a5f2bdbb99 internal/pay/client.go:23 -> protos@f70b3b206e payments/v1/payments.proto:9 checkout's checks fail with protos's candidate (checkout@a5f2bdbb99 + protos@f70b3b206e) and pass with protos's base commit: internal/pay/client.go:23:77: unknown field AmountCents in struct literal of type paymentsv1.ChargeRequestThis example is the new
contract-breakfixture:
a field rename that all three repositories' own tests pass. See the
design and its limits. -
Vendored Go modules verify offline. Verification no longer forces
-mod=modon a module withvendor/modules.txt. That flag made Go ignore
the vendored copy and try to download it. A vendored module now builds
from its trackedvendor/.
Documentation
The README and docs at this tag were written before two clarifications
that are now on main:
- In a multi-repository task,
TASK_VERIFIEDalso requires every affected
gRPC, protobuf or OpenAPI link to becompatible. See
Verification and
the "How it works" diagram, which now shows the gate. - The sandbox controls
have an entry for the gate and describe vendored Go modules, and
CONTRIBUTING.mdlistsinternal/compatas security-sensitive.
The released binaries are unchanged; only the documentation was updated.
Upgrade notes
- The database migrates itself (migration 6).
- Behaviour change: a multi-repository task whose change affects a
gRPC, protobuf or OpenAPI link now endstask_verifiedonly if every
such link is showncompatible. Otherwise it endstests_green, with the
reason recorded as a decision. To keep the previous behaviour, set
repointel.compat_gate: false. - No new dependencies, and the sandbox image is unchanged.
Known limitations
- The gate checks gRPC and protobuf sides written in Go only: one module
at the repository root, ago teststage, and generated code committed
in a task repository (the gate never runsprotoc). OpenAPI sides are
checked only when a test reads the spec. Every other case is reported
untested, with the reason. compatiblefor a client and server means that both compile against the
same new definition and their own tests execute their side. The client
is never run against the real server.- A wire-incompatible definition change stays
untestedeven when every
task repository agrees. Services already deployed are not tested. - Test code is written by the agent and runs inside the check, the same
trust boundary as for verification. Likewise, the agent can edit a
vendored module'svendor/like any other source; only review catches
that. - The limitations of v0.1.0-alpha.3
still apply.
Please report what you find:
issues. A link reported
broken that was fine, or compatible when it was not, is especially
useful.
Assets
boundedcode-linux-amd64,boundedcode-linux-arm64,
boundedcode-darwin-amd64,boundedcode-darwin-arm64,
boundedcode-windows-amd64.exe,boundedcode-windows-arm64.exe: static
binaries (CGO disabled).SHA256SUMS: checksums, verified by the installers.SBOM-<os>-<arch>.spdx.json: SPDX 2.3 software bill of materials of each
binary.boundedcode-v0.1.0-alpha.4-licenses.tar.gz:LICENSE,NOTICE,
THIRD_PARTY_NOTICES.mdand the license texts of every Go module compiled
into the binaries (LICENSES/go) and of the upstream components
(LICENSES/upstream).
Model weights are not distributed. Download them with bcode setup or
bcode model fetch, from their publisher at a pinned revision, and review
their license.