githubnext / githubnext/ado-aw

fix(smoke): route multi-repo Cargo through the internal feed

Open
#1,823 0 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Rust
Stars
23
Forks
8
Avg merge
4d 9h
Merged PRs (30d)
22

Description

## Failure summary

Final candidate orchestrator build 630157 failed only because multi-repo child 630166 failed. The other four children, including exact-tip ado-proxy child 630164, succeeded.

Expected: the trusted pre-agent step verifies both checkout paths and baked self identity, then the agent emits exactly one noop proof and stops.

Actual sequence in child 630166:
1. The trusted multi-repo assertion step passed.
2. The agent searched the repository and chose to run `cargo test --test compiler_tests -- --nocapture`.
3. Cargo attempted four CONNECT requests to `index.crates.io:443`; AWF denied all four with HTTP 403 / `TCP_DENIED`.
4. The agent emitted `report-incomplete` instead of the required noop, reporting `CONNECT tunnel failed, response 403`.
5. Agent and Detection jobs succeeded, but SafeOutputs rejected/executed the incomplete report as a failure, so the child and parent failed.
6. The agent made no repository changes.

Evidence:
- Parent: https://dev.azure.com/msazuresphere/AgentPlayground/_build/results?buildId=630157
- Child: https://dev.azure.com/msazuresphere/AgentPlayground/_build/results?buildId=630166
- Child source: `tests/smoke/multi-repo.md`, staged commit `fb39b209a72a929a63efb77cbaa56ed0518e09c9`
- Firewall timestamps: 2026-08-05T21:18:47.539Z, 21:18:48.473Z, 21:18:51.974Z, and 21:18:58.476Z; all `CONNECT index.crates.io:443`, status 403, decision `TCP_DENIED`.

## What is and is not the fix

- Direct `network.allowed: [rust]` is NOT the fix because it permits public crates.io and bypasses the internal supply-chain boundary.
- The candidate orchestrator already writes `.cargo/config.toml` replacing crates.io with `sparse+https://pkgs.dev.azure.com/msazuresphere/AgentPlayground/_packaging/cargo/Cargo/index/` and runs `CargoAuthenticate@0`, but that setup is local to the orchestrator checkout and does not reach the staged child worktree/agent.
- The multi-repo child must declare/configure Rust in front matter through an internal-feed-backed contract. Prefer a first-class structured Rust runtime/language declaration (for example `runtimes.rust` with internal feed configuration) if that is the intended authoring surface; ado-aw currently has no Rust runtime stanza, so the implementation must decide/add the safe contract rather than pretending one exists.
- A smoke-local trusted setup step is acceptable only if it writes source replacement to the self checkout and authenticates via `CargoAuthenticate@0` without exposing a broadly scoped token.
- No public crates.io/index/static/rustup hosts may be added to AWF for this smoke.

## Acceptance criteria

- Cargo resolves crates.io through the Azure Artifacts sparse mirror.
- Config/auth is available inside the AWF agent.
- Public crates hosts remain denied.
- `cargo test` can run.
- Exactly one noop.
- Child and parent green.
- A static assertion proves internal feed/source replacement and prevents public rust allowlist.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with tests/smoke/multi-repo.md and the candidate orchestrator's .cargo/config.toml and CargoAuthenticate@0 setup; trace how the staged child worktree reaches the AWF agent and inspect existing runtime front-matter contracts. Define the safe Rust/internal-feed contract, then run the multi-repo smoke and static assertions; done means Cargo uses the internal mirror, public hosts remain denied, exactly one noop is emitted, and parent and child are green.

Written by the indexing model from the issue text.

Assessment

Tech stack
azure, rust
Domain
ci-cd, security, testing
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.