Repository navigation
fix(#7751): unblock behaviour on OpenShell 0.1 and retry its profile-not-found error - #7847
Conversation
PR Summary by QodoRestore behaviour tests and provider retries on OpenShell 0.1
AI Description
Diagram
High-Level Assessment
Files changed (9)
|
|
🤖 Finished Review · ✅ Success · Started 8:28 PM UTC · Completed 8:43 PM UTC Commit: Runtime: pi · Model: sonnet → claude-sonnet-5 · Effort: high · Cost: $5.08 |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
|
Risk Assessment: moderate (2/5) DetailsModerate risk score of 2 preserved from prior assessment: elevated regression history and change coupling in internal/sandbox, offset by zero protected paths, no dependency changes, solid test coverage, and alignment with tracking issue #7751; the additional commit since the prior review is a small, unrelated, test-only fix that does not change the tier signals. Previous runRisk Assessment: moderate (2/5) DetailsModerate risk driven by regression history and change coupling in internal/sandbox, offset by narrow scope, zero protected path changes, strong test coverage, and clear alignment with tracking issue #7751. Unchanged from the prior assessment on this PR (Tier 1 signals stable across the one additional commit since the last review). Previous run (2)Risk Assessment: moderate (2/5) DetailsModerate risk driven by regression history and change coupling in internal/sandbox, offset by narrow scope across 11 files, zero protected path changes, 45% test ratio, easily revertible changes, and continuity with the closed OpenShell 0.1 migration tracking issue; consistent with the prior assessment on this PR. Previous run (3)Risk Assessment: moderate (2/5) DetailsModerate risk driven by regression history and change coupling in internal/sandbox, offset by narrow scope, zero protected path changes, strong test coverage, and clear alignment with the tracking issue. |
ReviewFindingsLow
Previous runLooks good to me Previous run (2)Looks good to me Previous run (3)ReviewFindingsLow
Previous run (4)ReviewFindingsLow
Next steps:
|
Code Review by Qodo
1. Flow-style harnesses fail to parse
|
027350b to
c05749e
Compare
|
🤖 Finished Review · ✅ Success · Started 9:00 PM UTC · Completed 9:18 PM UTC Commit: Runtime: pi · Model: sonnet → claude-sonnet-5 · Effort: high · Cost: $4.31 |
Superseded by updated review
c05749e to
c583177
Compare
|
🤖 Finished Review · ✅ Success · Started 11:33 PM UTC · Completed 11:46 PM UTC Commit: Runtime: pi · Model: sonnet → claude-sonnet-5 · Effort: high · Cost: $3.63 |
Superseded by updated review
Since the move to OpenShell 0.1.2, every behaviour scenario that runs a
custom harness fails: 15 to 16 of 33 on main and on every rebased PR.
OpenShell 0.1.2 refuses both policy shapes those harnesses reached:
- no policy: the sandbox ends in phase Error with ConfigurationInvalid
("Effective configuration could not be activated; replace the policy
or repair attached providers"), whether or not providers are attached;
- a policy file with no fields: create fails with "failed to decode
sandbox policy fields". The steps committed "# Minimal policy for
<name>" for every relative policy a harness names.
Reproduced on a local 0.1.2 gateway with a dummy-runtime harness and no
providers: no policy and the comment-only placeholder both fail at
create, and the base policy runs to exit 0. The fleet harnesses kept
passing because they resolve a real policy from the agents repo.
fullsend ships no default policy (#7266), so a harness must name one.
The feature files now say so: every standalone and base harness heredoc
declares policy: policies/base.yaml, and base-composed children inherit
it from their base. The resource helpers commit the base policy that
fullsend agent new writes (agentnew.BasePolicy, exported for this) for
any relative policy a harness names, in the config repo or the hosting
repo. It has no network section, so egress still comes only from the
harness's providers.
Assisted-by: Claude
Signed-off-by: Wayne Sun <gsun@redhat.com>
…und error Parallel fullsend runs on one gateway reimport shared profiles, so a run can create a provider while another run has the profile deleted. The retry for that matched OpenShell 0.0.x's "unsupported provider type or profile". OpenShell 0.1 reports it as "provider profile '<id>' not found; import a matching profile", so the run failed without retrying: three of four parallel functional-test cases hit it. Match the 0.1 wording too, across the CLI's line wrap. Assisted-by: Claude Signed-off-by: Wayne Sun <gsun@redhat.com>
c583177 to
24d5e1a
Compare
|
🤖 Finished Review · ✅ Success · Started 11:48 PM UTC · Completed 12:05 AM UTC Commit: Runtime: pi · Model: sonnet → claude-sonnet-5 · Effort: high · Cost: $4.98 |
Superseded by updated review
GitHub can return 422 expected-head-sha mismatches when the onboarding reconciler rewrites fullsend/onboard while MergeChangeProposal handles a 409. Retry only this specific concurrent-head error in TestAdminInstallUninstall so the merge-queue E2E run re-reads the PR state. This is merge-queue E2E resilience only; it does not change product behavior, reconciliation, or the shared forge API. Signed-off-by: Barak Korren <bkorren@redhat.com> Assisted-by: Codex (gpt-5.6-sol)
|
🤖 Finished Review · ✅ Success · Started 6:45 AM UTC · Completed 6:58 AM UTC Commit: Runtime: pi · Model: sonnet → claude-sonnet-5 · Effort: high · Cost: $4.10 |
Superseded by updated review
…iour fix The behaviour tests build fullsend at the version this go.mod pins. The pin was v0.43.1-0.20260916094335-b108ba60479e, from 2026-09-16. That fullsend predates the OpenShell 0.1 behaviour fix, so behaviour has failed on main since the OpenShell 0.1.2 port (#1513): the scenario's fullsend.yaml run concludes with a failure. Pin fullsend main d8cbb9744, which carries: - fullsend-ai/fullsend#7847: unblock behaviour on OpenShell 0.1, retry profile-not-found. - fullsend-ai/fullsend#7845: start the Podman API socket with systemd. - fullsend-ai/fullsend#7840: always recreate a pool repo after reset instead of trusting a stale GetRepo success, so allocation cannot skip recreation and then 404 during `fullsend github setup`. - fullsend-ai/fullsend#7865: retry the GitHub pre-flight on EOF and connection reset. The behaviour suite builds both the install driver and cmd/fullsend from this pin, so both flake fixes reach agents CI. go.sum gains only the two fullsend lines, as the previous bump did. `go mod tidy` against the published module cannot resolve fullsend's nested internal/mintcore module, because its replace directive applies only inside fullsend. The behaviour workflow already replaces both modules with the pinned checkout and tidies a temporary modfile. That path was run locally at d8cbb9744: tidy succeeds, the behaviour package compiles and vets with the behaviour tag, and cmd/fullsend builds. Assisted-by: Claude Signed-off-by: Wayne Sun <gsun@redhat.com>
Summary
Two OpenShell 0.1.x regressions from #7233 that CI could not catch before merge.
1.
behaviourfails onmain(required check). Since #7233, every scenario that runs a test-defined custom harness fails (15–16 of 33 onmainrun 36621388462 and on rebased PRs). The fleet triage/review harnesses in the same suite pass. OpenShell 0.1.2 refuses both policy shapes the custom harnesses reach:Error, with or without providers attached:# Minimal policy for <name>for every relativepolicy:a harness names, and 0.1.2 fails at create withfailed to decode sandbox policy fields.Reproduced on a local 0.1.2 gateway with a
runtime: dummyharness and no providers, as the scenarios run: no policy →ConfigurationInvalid; the comment-only placeholder → decode failure; the base policy below → sandbox created, agent exit 0. The fleet harnesses pass because they resolve a real policy from the agents repo. (codex-openai/pi-openainame a policy but are capability-gated and were skipped, so they were never evidence either way. They would have hit the decode failure once enabled.)fullsend ships no default policy (#7266), so a harness must name one, and the feature files now show it: every standalone and base harness heredoc declares
policy: policies/base.yaml, and base-composed children inherit it from their base. The resource helpers commit the base policyfullsend agent newwrites (agentnew.BasePolicy, exported for this) for any relative policy a harness names, in the config repo or the hosting repo. It has no network section, so egress still comes only from the harness's providers.2. Parallel runs fail with
provider profile '<id>' not found. Parallel runs on one gateway reimport shared profiles; the provider-create retry for that only matched OpenShell 0.0.x's "unsupported provider type or profile". Three of four parallel functional-test cases failed on it (run 36623063153).isTransientProviderErrnow also matches 0.1's wording, across the CLI's line wrap.User custom harnesses without a policy break the same way on 0.1.x; a clear early error for that is #7849.
Independent of the WIF
HTTP 429behaviour flake (#7843, #7844): this PR's previous behaviour run had no 429s and still failed 15 scenarios.Testing
go test ./pkg/behaviourtest/... ./internal/agentnew/ ./internal/sandbox/, andgo vet -tags behaviour ./e2e/behaviour/. Tests: every committed policy resource is the base policy (version: 1, non-emptyfilesystem_policy), including one committed next to a URL-sourced base for its children to inherit; the 0.1 error text (plain and line-wrapped) is retried and a missing provider is not.dispatch.go,url_dispatch.go) fails the step tests; without the new matcher the retry test fails.behaviour33/33 on c05749e (the same base policy, then injected by the steps). This head moves the policy into the feature files and needs its own run.The previous
e2efailure (triage pre-flightGet "https://api.github.com/rate_limit": EOFfrom a Ready sandbox) is a different shape: it has a real policy and providers. It passed on #7233's re-run, so it is treated as a flake for now and re-checked on this run.