Skip to content

test(e2e): validate #8304 failed-startup recovery - #8874

Merged
prekshivyas merged 13 commits into
mainfrom
codex/fix-8304-lifecycle-followup
Aug 12, 2026
Merged

test(e2e): validate #8304 failed-startup recovery#8874
prekshivyas merged 13 commits into
mainfrom
codex/fix-8304-lifecycle-followup

Conversation

@apurvvkumaria

@apurvvkumaria apurvvkumaria commented Aug 12, 2026

Copy link
Copy Markdown
Collaborator

Summary

The live Shields acceptance now exercises the supported failed-startup recovery path through nemoclaw <sandbox> shields down while the managed container still exists. It no longer unlocks the container directly and then asks the host to reconcile a stopped-container policy transition.

The reported Shields-up stop/start lifecycle already passes on current main with the merged lifecycle fixes. This PR keeps that regression coverage, makes the later failed-startup phase prove the public atomic policy-and-config transition before restart and relock, and gives the post-start health assertion a bounded convergence window without weakening its required healthy state.

Related Issue

Fixes #8304

Changes

  • Remove both startup markers and invoke the installed failed-startup guard directly to prove it refuses a live startup child in the supervised non-root compatibility topology.
  • Route the childless case through the supported host shields down command.
  • Use a one-shot trusted E2E executable shim that delegates the real policy set --wait, then pauses the supervisor and terminates the exact startup child immediately before the guarded config transition. This preserves real policy acknowledgement while making the terminal failed-startup boundary deterministic.
  • Assert the command commits the mutable posture, then resume the supervisor, recover through stop/start, and restore lockdown.
  • Poll the already-required post-start status result within a fixed bound so transient inference convergence does not obscure a successful lifecycle recovery; the assertion still requires exit 0 and Phase: Ready.
  • Keep the stopped-container production workaround and its synthetic policy-receipt acceptance path out of the PR's effective diff.

Type of Change

  • Code change (feature, bug fix, or refactor)
  • Code change with doc updates
  • Doc only (prose changes, no code sample modifications)
  • Doc only (includes code sample changes)
  • Test-only change

Quality Gates

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests not applicable — justification:
  • Docs updated for user-facing behavior changes
  • Docs not applicable — justification: This changes validation coverage only. The existing “Lower Shields After a Failed Startup” guide already documents the supported host command and its no-live-child/no-readiness-lease preconditions.
  • Sensitive-path review completed — justification: The current nine-category review found no findings: test(e2e): validate #8304 failed-startup recovery #8874 (comment). The effective diff remains one trusted live E2E file; the shim delegates the real OpenShell policy command before creating the childless boundary, dynamic values use validated argv and JSON encoding, temporary artifacts use 0700/0600 modes, interruption cleanup resumes the target container, and the bounded read-only health poll preserves the same exit-0 and Ready-state acceptance criterion. No credential, authentication, dependency, cryptographic, policy-schema, permission, or production-runtime behavior changes.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

Documentation Writer Review

  • Documentation writer subagent reviewed the completed changes
  • Result: no-docs-needed
  • Evidence: the effective diff contains only test/e2e/live/shields-config.test.ts at reviewed blob 5ecf9810521b757583c066bf7ead1a3f99982eb8; the fixture changes trusted E2E timing after real policy acknowledgement but does not change production commands, output, flags, defaults, schemas, health definitions, or the documented recovery workflow.
  • Agent: Codex Desktop

DGX Station Hardware Evidence

  • Tested on DGX Station
  • Tested commit:
  • Station profile/scenario:
  • Result:
  • Supporting evidence:

Verification

  • PR description includes a Signed-off-by: line and every commit appears as Verified in GitHub
  • Normal pre-commit, commit-msg, and pre-push hooks passed
  • npx vitest run --project cli src/lib/shields/openclaw-transition.test.ts src/lib/shields/policy-transition.test.ts — 55 passed
  • npx vitest run --project e2e-support test/e2e/support/shields-failed-startup.test.ts — 10 passed
  • npm run typecheck:cli
  • npm run test:projects:check
  • npm run test-size:check
  • npx prek run --files test/e2e/live/shields-config.test.ts
  • Exact-head ordinary CI run 31623844781 on 83f680b6f passed all applicable jobs.
  • Exact-head PR advisor run 31623842295 on 83f680b6f passed with recommendation merge_as_is; both model lanes completed with high confidence and reported no blockers, warnings, or suggestions.
  • Trusted E2E run 31603337079 on pre-refresh head f0c7bf79e passed shields-config, including the real policy acknowledgement, supported childless Shields recovery, stop/start, bounded healthy-status convergence, and relock. The signed merge-only refresh to 83f680b6f preserves the reviewed one-file effective diff byte-for-byte (SHA-256 0aa00af5f3bcbcde2617ff31a5466836882fa3ca8921d563fee968c820b76b84). The broad matrix completed with unrelated failures outside this one-file test diff; its protected managed-image GPU failure reproduced with the same phase, probe, and assertion on unchanged-current-main run 31585922181.
  • Exact-head selective E2E dispatch 31624448179 was rejected before checkout or testing because the trusted PR controller does not approve shields-config as a selective exact-revision target. The exact-head advisor independently recommends no E2E and classifies shields-config as manual-only from reviewed code on main; no rerun of the known-noisy broad matrix was warranted.
  • The unrelated installer-integration failure was in unchanged test/install-station-pair-preparation.test.ts; its complete 58-test file passes locally, and CI run 31603167697 passed on the one allowed failed-job rerun.
  • Quality Gates section completed with required justifications or waivers
  • No secrets, API keys, or credentials committed
  • npm run docs builds without warnings (doc changes only)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Signed-off-by: Apurv Kumaria akumaria@nvidia.com

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 29c65785-6a6a-41cc-8746-48ce45d8f15d

📥 Commits

Reviewing files that changed from the base of the PR and between 3952ff5 and 6456527.

📒 Files selected for processing (1)
  • test/e2e/live/shields-config.test.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • test/e2e/live/shields-config.test.ts

📝 Walkthrough

Walkthrough

The E2E recovery scenario now uses the supported shields down command. It verifies live-child refusal, childless recovery, mutable-state restoration, and restart validation.

Changes

Shields-down recovery

Layer / File(s) Summary
Recovery scenario contract
test/e2e/live/shields-config.test.ts
The test uses separate startup markers and updates the recovery phases and contract descriptions for supported shields down behavior.
Supported recovery command flow
test/e2e/live/shields-config.test.ts
The test removes the readiness marker, checks live-child refusal with startup-not-ready, validates childless state restoration, removes host-side reconciliation, and continues with restart validation.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

Suggested labels: area: e2e, integration: openclaw, area: policy, chore

Suggested reviewers: cv

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 7.14% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The test covers failed-startup recovery with shields down, stop/start recovery, and lockdown restoration required by issue #8304.
Out of Scope Changes check ✅ Passed The changes are limited to related end-to-end recovery coverage and include no production or documentation changes.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the end-to-end test coverage for issue #8304 failed-startup recovery, which matches the pull request's primary change.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/fix-8304-lifecycle-followup

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ❌ Some tests failed

Run: 31578289319
Workflow ref: codex/fix-8304-lifecycle-followup
Requested targets: (selector rejected by workflow validation)
Requested test IDs: (no test ID selector)
Summary: 0 passed, 1 failed, 0 cancelled, 0 skipped, 0 unknown

Test Result Total wall clock time
base-image-publication ❌ failure 6s

Failed tests: base-image-publication. Check the workflow run for all logs and artifacts.

@github-code-quality

github-code-quality Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit 79b41c3 in the codex/fix-8304-lifec... branch remains at 96%, unchanged from commit a0f6c9d in the main branch.

TypeScript / code-coverage/cli

The overall coverage in commit 79b41c3 in the codex/fix-8304-lifec... branch remains at 82%, unchanged from commit a0f6c9d in the main branch.

Show a code coverage summary of the most impacted files.
File main a0f6c9d codex/fix-8304-lifec... 79b41c3 +/-
src/lib/policy/...ne-exclusion.ts 92% 87% -5%
src/lib/policy/index.ts 68% 68% 0%
src/lib/state/registry.ts 87% 89% +2%
src/lib/state/config-io.ts 93% 95% +2%
src/lib/securit...ate-endpoint.ts 95% 97% +2%
src/lib/adapter...tp/curl-args.ts 97% 99% +2%
src/lib/messagi.../token-paste.ts 92% 96% +4%
src/lib/onboard...age/contract.ts 89% 93% +4%
src/lib/messagi...annel-config.ts 93% 99% +6%
src/lib/state/registry/lock.ts 39% 48% +9%

Updated August 12, 2026 19:06 UTC

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@scripts/checks/openshell-policy-mutation-read.mts`:
- Around line 522-526: Update POLICY_READ_RUNNERS handling in
policyReadFailureHandling so the generic identifier run is accepted only when
symbol resolution confirms it refers to src/lib/runner.ts run; keep the
explicitly named policy-read runners unchanged. Add focused tests covering the
real repository runner and a shadowed local run, ensuring guardrails avoid false
positives.

In `@src/lib/shields/index.ts`:
- Around line 4918-4924: The deferred policy flow around deferredPolicyConfirmed
must not enter config-unlock recovery when the direct sandbox is absent. In
test/helpers/shields-flow-harness.ts, update deferredPolicyContainerMissing so
every direct command fails; in src/lib/shields/policy-transition.test.ts, add
the deferred completion coverage asserting the supported fail-closed result and
no follow-up direct mutation. Update the src/lib/shields/index.ts flow as needed
so absence detection does not invoke direct privileged execution or
unlockAgentConfig.

In `@src/lib/shields/relock-reconfirm.test.ts`:
- Around line 46-78: Extend the parameterized rejection cases in
confirmDeferredPermissivePolicyForStoppedSandbox to include an accepted active
receipt state alongside pending, and add output-level fixtures containing
duplicate Version, Hash, and Status receipt fields. Assert each case rejects
while preserving the existing behavioral test structure.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 377e4233-227e-48cd-92eb-8027c1ac0781

📥 Commits

Reviewing files that changed from the base of the PR and between ba0fbfc and d472658.

📒 Files selected for processing (8)
  • scripts/checks/openshell-policy-mutation-read.mts
  • src/lib/sandbox/privileged-exec.test.ts
  • src/lib/sandbox/privileged-exec.ts
  • src/lib/shields/index.ts
  • src/lib/shields/policy-transition.test.ts
  • src/lib/shields/relock-reconfirm.test.ts
  • src/lib/shields/relock-reconfirm.ts
  • test/helpers/shields-flow-harness.ts

Comment thread scripts/checks/openshell-policy-mutation-read.mts
Comment thread src/lib/shields/index.ts Outdated
Comment on lines +46 to +78
it.each([
["a live sandbox", false, policyReceipt(), timedOutPolicySet()],
["a mismatched hash", true, policyReceipt("aaaaaaaaaaaa"), timedOutPolicySet()],
["a mismatched version", true, policyReceipt(SUBMITTED_POLICY_HASH, "12"), timedOutPolicySet()],
[
"a rejected receipt",
true,
policyReceipt(SUBMITTED_POLICY_HASH, "11", "rejected"),
timedOutPolicySet(),
],
[
"submission without a timeout",
true,
policyReceipt(),
timedOutPolicySet({ stderr: "policy rejected\n" }),
],
[
"duplicate submission evidence",
true,
policyReceipt(),
timedOutPolicySet({
stdout: `Policy version 11 submitted (hash: ${SUBMITTED_POLICY_HASH})\nPolicy version 11 submitted (hash: ${SUBMITTED_POLICY_HASH})\n`,
}),
],
])("rejects %s (#8304)", (_name, stopped, receipt, policySetResult) => {
expect(
confirmDeferredPermissivePolicyForStoppedSandbox(policySetResult, {
proveNoRunningDirectSandbox: () => stopped,
readPolicyReceipt: () => receipt,
parsePolicy: () => "version: 1\nnetwork_policies: {}",
}),
).toBe(false);
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Cover both permitted receipt states and duplicate receipt fields.

The success case covers pending, but the helper also accepts active. The rejection cases do not cover duplicate Version, Hash, or Status receipt fields. Add output-level cases for these conditions.

As per path instructions, tests must give behavioral confidence.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/lib/shields/relock-reconfirm.test.ts` around lines 46 - 78, Extend the
parameterized rejection cases in
confirmDeferredPermissivePolicyForStoppedSandbox to include an accepted active
receipt state alongside pending, and add output-level fixtures containing
duplicate Version, Hash, and Status receipt fields. Assert each case rejects
while preserving the existing behavioral test structure.

Source: Path instructions

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
@github-actions

github-actions Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings reported

Advisor assessment: No blocking advisor findings reported
Next action: No advisor follow-up needed.
Findings: 0 blockers · 0 warnings · 0 suggestions

Model lanes

  • GPT-5.6 Terra (primary): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Model comparison: normalized findings match; normalized terminology decisions differ; normalized E2E selections differ; severity counts match.
3 terminology differences from the second opinion

Advisory only. These are normalized differences from the primary terminology receipt.

  • childless at test/e2e/live/shields-config.test.ts:421: selected only by the second-opinion lane as established.
  • shim at test/e2e/live/shields-config.test.ts:421: selected only by the second-opinion lane as established.
  • terminal at test/e2e/live/shields-config.test.ts:1163: selected only by the second-opinion lane as conflict.
1 additional E2E selection from the second opinion

Advisory only. The primary lane did not select these E2E jobs or targets.

  • ubuntu-repo-cloud-openclaw: The completed second-opinion lane identified E2E coverage that the primary lane omitted.

Second-opinion terminology and E2E selections are advisory. Live E2E does not run automatically for pull requests.

3 semantic terminology decisions

Terminology decisions are advisory. They affect the assessment only when a separate finding identifies concrete semantic impact.

  • established — failed-startup guard at test/e2e/live/shields-config.test.ts:552: Keep `failed-startup guard` for the installed admission control.
  • established — childless state at test/e2e/live/shields-config.test.ts:552: Keep `childless state` for the zero-child startup condition.
  • justified — supported Shields down at test/e2e/live/shields-config.test.ts:552: Use `supported Shields down` when the distinction from direct guard invocation is required.

E2E guidance

Advisory only. A maintainer can dispatch the default E2E suite for the commit under review.

Recommended E2E: None

Manual-only E2E: cloud-inference, security-posture, shields-config
The manual PR workflow does not run these selectors for the commit under review. Run them from reviewed code on main.

Workflow run details

This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge.

cv
cv previously requested changes Aug 12, 2026

@cv cv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. src/lib/shields/index.ts:4918-4994 confirms the deferred case only after proving that no direct container runs, but then unconditionally calls unlockAgentConfig, whose OpenClaw preflight requires privileged direct-container execution. Production therefore throws the same missing-container error and rolls back, so shields down still cannot recover #8304. test/helpers/shields-flow-harness.ts:321-333 hides this behavior by failing only the /usr/bin/true probe and fabricating argv for later unlock calls; therefore src/lib/shields/policy-transition.test.ts:179-195 is invalid regression evidence. Implement a stopped-sandbox completion that does not require direct-container execution after absence is proved, or defer the unlock behind a verified later container lifecycle. Make missing-container mode fail every direct command and assert that no impossible follow-up mutation occurs. 2. scripts/checks/openshell-policy-mutation-read.mts:522-560 accepts every identifier named run as a policy runner without resolving its symbol. A local or shadowed run can be misclassified and weaken the exhaustive policy-mutation error-handling audit. Resolve run to src/lib/runner.ts and add regression tests for the repository runner and a shadowed local runner. 3. src/lib/shields/relock-reconfirm.test.ts:46-78 does not test a nonzero receipt read, the accepted active state, or duplicate receipt fields. This security admission boundary could regress to accepting failed or ambiguous evidence without a focused test failing. Add positive and negative receipt tests; the PR claim that failed reads and duplicate malformed evidence are covered is not supported by the current tests.

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
@apurvvkumaria apurvvkumaria changed the title fix(shields): recover stopped policy transition test(e2e): validate #8304 failed-startup recovery Aug 12, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@test/e2e/live/shields-config.test.ts`:
- Around line 1146-1163: The live-child recovery scenario must exercise the
supported CLI refusal contract instead of calling
runInstalledFailedStartupUnlock directly. Update the live-child case to invoke
runNemoclaw with the shields down command and its relevant arguments, then
assert the expected refusal result and message while preserving the existing
childless recovery coverage.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 1aad73ec-c742-4950-9509-e08867c693cf

📥 Commits

Reviewing files that changed from the base of the PR and between 9dd967a and 2708023.

📒 Files selected for processing (1)
  • test/e2e/live/shields-config.test.ts

Comment thread test/e2e/live/shields-config.test.ts
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
@wscurran wscurran added area: e2e End-to-end tests, nightly failures, or validation infrastructure chore Build, CI, dependency, or tooling maintenance integration: openclaw OpenClaw integration behavior platform: ubuntu Affects Ubuntu Linux environments labels Aug 12, 2026
@apurvvkumaria apurvvkumaria self-assigned this Aug 12, 2026
@apurvvkumaria

Copy link
Copy Markdown
Collaborator Author

Security review: PASS — no findings.

The current PR diff is limited to one live E2E file that exercises the supported Shields recovery command. The earlier production-code review threads are outdated because those changes are now in main; the current public-command coverage thread is resolved.

  1. Secrets and credentials — PASS. The hosted key remains redacted from artifacts, and the temporary executable and receipt use owner-only permissions.
  2. Input validation and sanitization — PASS. The sandbox name is validated, the resolved OpenShell executable must be absolute, and container and process identifiers are passed as argument arrays.
  3. Authentication and authorization — PASS. The test does not change runtime authorization and verifies fail-closed behavior while a supervised child remains active.
  4. Dependencies — PASS. No dependency, image, registry, or lockfile change is present.
  5. Error handling and logging — PASS. Failed delegated or process-control commands stop the shim, and cleanup resumes the supervisor and removes temporary state.
  6. Cryptography and data protection — PASS. No cryptographic behavior changes; credential redaction assertions remain in place.
  7. Configuration and security posture — PASS. The test proves locked and mutable file modes, ownership, and policy receipts through the supported command.
  8. Security testing — PASS. The live-child refusal and terminal childless recovery paths are both asserted, followed by restart and relock verification.
  9. Holistic security posture — PASS. The test boundary delegates the real policy update before creating the childless condition and restores the supervisor on every cleanup path.

Validation: required checks, DCO, documentation receipt, and commit verification pass. Repository hooks, the test-title gate, and the test-size gate also pass.

The earlier human changes-requested review remains the only external gate and needs reviewer re-evaluation. No reviewer-routing action was taken.

@cv
cv dismissed their stale review August 12, 2026 17:39

The latest PR commit removes the reviewed production workaround and related synthetic evidence. The remaining E2E exercises the supported recovery path. Dismissing this resolved review before a full current-commit review.

…cle-followup

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
@apurvvkumaria

Copy link
Copy Markdown
Collaborator Author

Readiness update after refreshing from current main:

  • The effective diff remains one test file: test/e2e/live/shields-config.test.ts.
  • The three production-code findings in the outstanding human review refer to files no longer changed by this PR; those changes are already in main.
  • The automated production-code threads are resolved and outdated. The remaining automated thread is outdated; its requested live-child CLI refusal coverage is present in the effective test diff.
  • Focused Shields coverage passes: 55 CLI tests and 10 E2E-support tests.
  • Project-membership, test-size, CLI type-checking, repository hooks, and push checks pass.
  • The effective change is 230 lines and is not flagged as a large change.
  • Contributor attribution, DCO, signed commits, documentation receipt, and the prior nine-category security review are preserved.

Fresh repository checks are running. The outstanding human review needs re-evaluation against the current one-file diff; no reviewer-routing action was taken.

@rsliter rsliter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reviewed the effective one-file test diff and linked issue. All 50 current checks pass on latest PR commit 79b41c381e, GitHub reports MERGEABLE, contributor compliance passes, and the security and documentation reviews have no findings.

@prekshivyas
prekshivyas merged commit 830d436 into main Aug 12, 2026
71 of 74 checks passed
@prekshivyas
prekshivyas deleted the codex/fix-8304-lifecycle-followup branch August 12, 2026 19:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: e2e End-to-end tests, nightly failures, or validation infrastructure chore Build, CI, dependency, or tooling maintenance integration: openclaw OpenClaw integration behavior platform: ubuntu Affects Ubuntu Linux environments

Projects

None yet

5 participants