Skip to content

Bound full smoke Git workspace workload#525

Open
qiffang wants to merge 5 commits into
mainfrom
dat9-dev2/bound-full-git-smoke
Open

Bound full smoke Git workspace workload#525
qiffang wants to merge 5 commits into
mainfrom
dat9-dev2/bound-full-git-smoke

Conversation

@qiffang

@qiffang qiffang commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Summary

  • bound Run full smoke-all suite with a 35 minute step timeout
  • keep Git workspace coverage in smoke-all but constrain it to the drive9 repo and agent_edit_add_commit scenario
  • document that the broader Git matrix remains the separate hard-fail step

Validation

Summary by CodeRabbit

  • Chores
    • Reduced e2e workflow timeouts, tightened workspace clone/ready bounds, and added explicit mount-ready timeout for faster, more reliable feedback.
  • Tests
    • Improved mount startup/shutdown and restore orchestration with stricter failure handling and more deterministic durability checks.
  • Documentation
    • Clarified README: smoke coverage is intentionally bounded to a specific repo/scenario while full feature-matrix runs remain separate.

@coderabbitai

coderabbitai Bot commented Jun 8, 2026

Copy link
Copy Markdown

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: defaults

Review profile: CHILL

Plan: Pro

Run ID: 67b2bb4c-d200-44dc-ad46-efbd3a705804

📥 Commits

Reviewing files that changed from the base of the PR and between 17443c8 and 1de57c9.

📒 Files selected for processing (1)
  • .github/workflows/local-e2e.yml

📝 Walkthrough

Walkthrough

Shorten the local-e2e smoke-all step timeout and add Git workspace env/timeouts; README clarifies smoke coverage is bounded to drive9/agent_edit_add_commit; the runner updates mount invocation, unmount argument forwarding, restore pack/unpack flow, sentinel path for durability checks, and tightens failure returns.

Changes

Git workspace smoke test timeout and pinning + runner restore change

Layer / File(s) Summary
Workflow: smoke suite timeout & env vars
.github/workflows/local-e2e.yml
Run full smoke-all suite step timeout reduced; adds GIT_WORKSPACE_REPOS, GIT_WORKSPACE_SCENARIOS, sets GIT_WORKSPACE_CLONE_TIMEOUT_S=600 and MOUNT_READY_TIMEOUT_S=60. Run Git feature matrix also sets MOUNT_READY_TIMEOUT_S=60. The enforce-results helper parameter rename to conclusion is applied for failure messages.
Docs: README clarification
e2e/README.md
Reworded to specify run_e2e_smoke_all=1 enables bounded Git workspace smoke coverage pinned to drive9 and agent_edit_add_commit, keeping the broader feature matrix as a separate hard-fail step.
Runner: start_mount uses --foreground
e2e/_feature-matrix-runner.sh, e2e/git-workspace-smoke-test.sh
start_mount calls drive9 mount with --foreground in both scripts (keeps backgrounded readiness handling).
Runner: stop_mount forwards extra args
e2e/_feature-matrix-runner.sh
stop_mount now forwards "$@" into drive9 umount in addition to the mount point.
Runner: run_restore_suite pack/unpack flow
e2e/_feature-matrix-runner.sh
Introduces restore_pack_archive, calls stop_mount --pack "$restore_pack_archive" --pack-path .git, then remounts with --unpack "$restore_pack_archive" and --foreground.
Runner: durability sentinel path
e2e/_feature-matrix-runner.sh
Durability test writes sentinel to restore-workspace/build/cache.tmp and asserts its absence after remount (replaces prior ignored-build paths).
Runner: tighten failure returns
e2e/_feature-matrix-runner.sh
main returns 1 on start_mount failures for read-write and Git workspace mounts instead of an unqualified return.

Sequence Diagram(s)

sequenceDiagram
  participant Actions as GitHub_Actions
  participant Runner as feature-matrix-runner.sh
  participant Drive9 as drive9_cli
  participant Workspace as Git_Workspace
  Actions->>Runner: trigger "Run full smoke-all suite" (env includes GIT_WORKSPACE_*, MOUNT_READY_TIMEOUT_S)
  Runner->>Drive9: start_mount (--foreground, clone with GIT_WORKSPACE_CLONE_TIMEOUT_S)
  Drive9->>Workspace: mount filesystem
  Runner->>Drive9: stop_mount (--pack restore_pack_archive --pack-path .git)
  Runner->>Drive9: start_mount (--unpack restore_pack_archive --foreground)
  Runner->>Actions: publish step conclusions for summary
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • mem9-ai/drive9#519: Related modifications to .github/workflows/local-e2e.yml enforcement logic.
  • mem9-ai/drive9#533: Related updates to the enforce-results helper wiring for Git smoke steps.
  • mem9-ai/drive9#497: Related changes to e2e/_feature-matrix-runner.sh restore/durability logic.

Suggested reviewers

  • mornyx

Poem

A rabbit trims the pipeline light,
Shorter timeouts, focused sight.
It pins the repo, packs a stash,
Unpacks, remounts, then clears the cache.
The mount stands ready — hop, all right! 🐇✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% 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
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Bound full smoke Git workspace workload' directly captures the main objective of the PR: constraining Git workspace smoke test coverage to specific scenarios and repos while keeping the broader Git feature matrix as a separate step.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dat9-dev2/bound-full-git-smoke
⚔️ Resolve merge conflicts
  • Resolve merge conflict in branch dat9-dev2/bound-full-git-smoke

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 54911ead97

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/local-e2e.yml Outdated
RUN_GIT_WORKSPACE_SMOKE: "1"
GIT_WORKSPACE_CLONE_TIMEOUT_S: "1800"
GIT_WORKSPACE_REPOS: "drive9=https://github.com/mem9-ai/drive9.git"
GIT_WORKSPACE_SCENARIOS: "agent_edit_add_commit"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Keep fast worktree coverage in a hard-fail path

When scheduled local-e2e or a manual run_e2e_smoke_all=1 run reaches this step, overriding GIT_WORKSPACE_SCENARIOS to only agent_edit_add_commit drops the fast_worktree scenario that is the only e2e path exercising drive9 git worktree add --fast/remove --fast. I checked the separate Git feature matrix and it covers clone/diff/restore flows but not worktree add/remove, so this change leaves that production CLI flow without the daily hard-fail coverage the smoke script previously provided.

Useful? React with 👍 / 👎.

@qiffang

qiffang commented Jun 8, 2026

Copy link
Copy Markdown
Contributor Author

Updated head 278d1de after all-flags run 27147891365.

Findings from 27147891365:

  • FUSE performance compare correctly hard-failed on a real metric regression: small_file_write ratio 0.652 (< 0.70 threshold). This confirms the fail-on-regression path is active.
  • smoke-all Git workspace coverage no longer hung, but the mount readiness check was too short for background FUSE startup; the mount later succeeded and the scenario completed.
  • Git feature matrix was still using coding-agent restore semantics without --pack-path .git, and the non-durable generated-file assertion used ignored-build/, which is Git-ignored but not a Drive9 coding-agent local-only path.

Fixes in 278d1de:

  • raise MOUNT_READY_TIMEOUT_S to 60s for smoke-all and Git feature matrix CI steps;
  • run Git feature matrix coding-agent mounts with --pack-path .git so .git checkpoint restore is intentionally exercised;
  • use build/cache.tmp for the non-durable generated-file assertion because build/** is actually in the builtin coding-agent local-only policy.

Validation:

  • workflow YAML parse
  • bash -n e2e/_feature-matrix-runner.sh e2e/git-feature-matrix.sh e2e/git-workspace-smoke-test.sh e2e/smoke-all.sh
  • git diff --check origin/main...HEAD

New all-flags run: https://github.com/mem9-ai/drive9/actions/runs/27150267937.

@qiffang

qiffang commented Jun 8, 2026

Copy link
Copy Markdown
Contributor Author

Follow-up after checking all-flags run 27150267937.

Findings:

  • The run now reaches the intended hard-fail compare path, but it still had harness noise:
    • smoke-all failed drive9 agent_edit_add_commit mount starts because PR Make drive9 mount run in the background by default #520 made drive9 mount background by default while the e2e script already backgrounds the process and waits for the actual FUSE mount. The mount log shows only drive9: mount running in background, so readiness was waiting on the short parent instead of the FUSE worker.
    • Git feature matrix failed its setup with flag provided but not defined: -pack-path; --pack-path belongs to drive9 umount, not drive9 mount. The step was also incorrectly allowed to return success on setup mount failure because the main path used bare return after recording a FAIL row.

Fix in head 2565a89:

  • Force Git e2e-managed mounts to run with drive9 mount --foreground so the script-owned background PID is the real FUSE process.
  • Move restore-suite .git packing to drive9 umount --pack ... --pack-path .git, then remount with explicit --unpack ....
  • Make feature-matrix setup mount failures return non-zero, so CI cannot report a green Git matrix while the report contains setup FAIL rows.

Validation before push:

  • YAML parse for .github/workflows/local-e2e.yml
  • bash -n e2e/_feature-matrix-runner.sh e2e/git-feature-matrix.sh e2e/git-workspace-smoke-test.sh e2e/smoke-all.sh
  • git diff --check origin/main...HEAD
  • checked remaining --pack-path usage is only on umount

Fresh runs:

Expected final state: smoke-all and Git feature matrix should be clean; if the manual gate remains red only because FUSE_PERF_COMPARE_FAIL_ON_REGRESSION=1 catches the known perf regression, that is the desired PR #519/PR #525 hard-fail behavior.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
e2e/git-workspace-smoke-test.sh (1)

269-277: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Tear down failed foreground mounts before returning.

With --foreground, the process started at Line 274 stays attached until unmount. If Line 276 or Line 277 times out, start_mount returns nonzero but leaves that mount process running, so a late mount can interfere with later checks or the next scenario. Mirror the cleanup path already used in e2e/_feature-matrix-runner.sh.

🛠️ Proposed fix
   args+=( :/ "$MOUNT_POINT" )
   drive9 "${args[@]}" >>"$MOUNT_LOG" 2>&1 &
   MOUNT_PID="$!"
-  wait_mount_state mounted
-  wait_mount_log_ready "$MOUNT_LOG"
+  if wait_mount_state mounted && wait_mount_log_ready "$MOUNT_LOG"; then
+    return 0
+  fi
+  if [ -n "${MOUNT_PID:-}" ] && kill -0 "$MOUNT_PID" >/dev/null 2>&1; then
+    kill "$MOUNT_PID" >/dev/null 2>&1 || true
+    wait "$MOUNT_PID" >/dev/null 2>&1 || true
+  fi
+  tail -n 80 "$MOUNT_LOG" >&2 || true
+  return 1
🤖 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 `@e2e/git-workspace-smoke-test.sh` around lines 269 - 277, The foreground mount
started with drive9 (args, MOUNT_PID) can be left running on failure; update the
start sequence around drive9, MOUNT_PID, wait_mount_state and
wait_mount_log_ready so that if wait_mount_state or wait_mount_log_ready times
out/fails you kill/terminate the foreground mount process (use MOUNT_PID), wait
for it to exit, and remove/cleanup the mount state before returning non-zero;
mirror the teardown logic used in e2e/_feature-matrix-runner.sh to ensure the
background foreground process is properly stopped on any error path.
e2e/_feature-matrix-runner.sh (1)

1174-1180: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Rebuild the checkpoint after writing the non-durable sentinel.

restore_pack_archive is produced at Line 1115, but build/cache.tmp is only created at Lines 1174-1175 and the remount at Line 1178 still unpacks that older archive. This check stays green even if build/** starts being checkpointed, because the file was never part of the artifact under test. Move the sentinel creation before Line 1115, or regenerate the archive after writing it.

🤖 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 `@e2e/_feature-matrix-runner.sh` around lines 1174 - 1180, The test writes the
non-durable sentinel "build/cache.tmp" after the checkpoint archive
(restore_pack_archive) is produced, so the remount unpacks an archive that never
contained the sentinel; update the script so the sentinel file is created before
producing restore_pack_archive or, alternatively, recreate/regenerate
restore_pack_archive immediately after writing "$restore_repo/build/cache.tmp"
so the later start_mount/unpack (start_mount with "$restore_pack_archive") uses
an archive that actually reflects the sentinel; locate the archive creation at
the restore_pack_archive generation step and modify that flow or add a
regeneration step before the start_mount/--unpack call.
🤖 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.

Outside diff comments:
In `@e2e/_feature-matrix-runner.sh`:
- Around line 1174-1180: The test writes the non-durable sentinel
"build/cache.tmp" after the checkpoint archive (restore_pack_archive) is
produced, so the remount unpacks an archive that never contained the sentinel;
update the script so the sentinel file is created before producing
restore_pack_archive or, alternatively, recreate/regenerate restore_pack_archive
immediately after writing "$restore_repo/build/cache.tmp" so the later
start_mount/unpack (start_mount with "$restore_pack_archive") uses an archive
that actually reflects the sentinel; locate the archive creation at the
restore_pack_archive generation step and modify that flow or add a regeneration
step before the start_mount/--unpack call.

In `@e2e/git-workspace-smoke-test.sh`:
- Around line 269-277: The foreground mount started with drive9 (args,
MOUNT_PID) can be left running on failure; update the start sequence around
drive9, MOUNT_PID, wait_mount_state and wait_mount_log_ready so that if
wait_mount_state or wait_mount_log_ready times out/fails you kill/terminate the
foreground mount process (use MOUNT_PID), wait for it to exit, and
remove/cleanup the mount state before returning non-zero; mirror the teardown
logic used in e2e/_feature-matrix-runner.sh to ensure the background foreground
process is properly stopped on any error path.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e7db5107-e52e-4e1f-a7ce-336197179a9c

📥 Commits

Reviewing files that changed from the base of the PR and between 278d1de and 2565a89.

📒 Files selected for processing (2)
  • e2e/_feature-matrix-runner.sh
  • e2e/git-workspace-smoke-test.sh

@qiffang

qiffang commented Jun 8, 2026

Copy link
Copy Markdown
Contributor Author

Follow-up for all-flags gate 27152525186:

  • The actual required workloads all completed successfully: FUSE release gate, performance compare, concurrency stress, POSIX/fsx, full smoke-all, and Git feature matrix.
  • The job still failed in final Enforce smoke results because Run Git feature matrix has continue-on-error: true; GitHub kept the final step conclusion=success, but the workflow enforced the raw pre-continue outcome=failure.
  • Pushed 17443c8 to use final step conclusion in the summary/enforce gate, while still preserving real failures in the step logs.

Validation: workflow YAML parse, expression audit, and git diff --check origin/main...HEAD passed.

Fresh runs:

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

This PR tightens and stabilizes the local E2E workflow by bounding the “smoke-all” runtime, narrowing Git workspace smoke coverage to a single repo/scenario, and improving mount lifecycle behavior/restore durability in the Git feature matrix runner.

Changes:

  • Add a 35-minute timeout to the “full smoke-all” workflow step and bound Git workspace smoke to mem9-ai/drive9 + agent_edit_add_commit.
  • Run Drive9 mounts in --foreground mode in the Git workspace smoke test and feature-matrix runner (enabling better process tracking/cleanup semantics).
  • Extend the Git feature-matrix restore suite to pack/unpack .git state across unmount/remount and propagate failures with non-zero returns.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

File Description
e2e/README.md Documents the newly bounded Git workspace smoke coverage within smoke-all, keeping the broader Git matrix as a separate hard-fail step.
e2e/git-workspace-smoke-test.sh Runs drive9 mount with --foreground to make mount process behavior more deterministic under CI.
e2e/_feature-matrix-runner.sh Runs mounts with --foreground, adds pack/unpack of .git on restore flows, and returns non-zero on key mount failures.
.github/workflows/local-e2e.yml Adds step timeout and new env bounds; updates summary/enforcement logic (but currently introduces an enforcement regression via .conclusion).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/local-e2e.yml Outdated
Comment on lines +349 to +359
echo "| Check | Outcome |"
echo "| --- | --- |"
echo "| API smoke | ${{ steps.api-smoke.outcome || 'skipped' }} |"
echo "| Existing-key smoke | ${{ steps.existing-key-smoke.outcome || 'skipped' }} |"
echo "| CLI smoke | ${{ steps.cli-smoke.outcome || 'skipped' }} |"
echo "| FUSE release gate | ${{ steps.fuse-smoke.outcome || 'skipped' }} |"
echo "| FUSE performance compare | ${{ steps.fuse_performance_compare.outcome || 'skipped' }} |"
echo "| FUSE concurrency stress | ${{ steps.fuse-concurrency-stress.outcome || 'skipped' }} |"
echo "| FUSE POSIX/fsx gate | ${{ steps.fuse-posix-fsx.outcome || 'skipped' }} |"
echo "| Full smoke-all suite | ${{ steps.smoke-all.outcome || 'skipped' }} |"
echo "| Git feature matrix | ${{ steps.git-feature-matrix.outcome || 'skipped' }} |"
echo "| API smoke | ${{ steps.api-smoke.conclusion || 'skipped' }} |"
echo "| Existing-key smoke | ${{ steps.existing-key-smoke.conclusion || 'skipped' }} |"
echo "| CLI smoke | ${{ steps.cli-smoke.conclusion || 'skipped' }} |"
echo "| FUSE release gate | ${{ steps.fuse-smoke.conclusion || 'skipped' }} |"
echo "| FUSE performance compare | ${{ steps.fuse_performance_compare.conclusion || 'skipped' }} |"
echo "| FUSE concurrency stress | ${{ steps.fuse-concurrency-stress.conclusion || 'skipped' }} |"
echo "| FUSE POSIX/fsx gate | ${{ steps.fuse-posix-fsx.conclusion || 'skipped' }} |"
echo "| Full smoke-all suite | ${{ steps.smoke-all.conclusion || 'skipped' }} |"
echo "| Git feature matrix | ${{ steps.git-feature-matrix.conclusion || 'skipped' }} |"
Comment on lines 409 to +413
check_required() {
local name="$1"
local outcome="$2"
if [ "$outcome" != "success" ]; then
echo "$name did not succeed (outcome: $outcome)"
local conclusion="$2"
if [ "$conclusion" != "success" ]; then
echo "$name did not succeed (conclusion: $conclusion)"
Comment thread .github/workflows/local-e2e.yml Outdated
Comment on lines 418 to 436
check_required "API smoke" "${{ steps.api-smoke.conclusion }}"
check_required "Existing-key smoke" "${{ steps.existing-key-smoke.conclusion }}"
check_required "CLI smoke" "${{ steps.cli-smoke.conclusion }}"
check_required "FUSE release gate" "${{ steps.fuse-smoke.conclusion }}"
if [ "${COMPARE_FUSE_PERFORMANCE_METRICS}" = "1" ]; then
check_required "FUSE performance compare" "${{ steps.fuse_performance_compare.outcome }}"
check_required "FUSE performance compare" "${{ steps.fuse_performance_compare.conclusion }}"
fi
if [ "${FUSE_CONCURRENCY_STRESS_REQUIRED}" = "1" ]; then
check_required "FUSE concurrency stress" "${{ steps.fuse-concurrency-stress.outcome }}"
check_required "FUSE concurrency stress" "${{ steps.fuse-concurrency-stress.conclusion }}"
fi
if [ "${RUN_FUSE_POSIX_FSX}" = "1" ]; then
check_required "FUSE POSIX/fsx gate" "${{ steps.fuse-posix-fsx.outcome }}"
check_required "FUSE POSIX/fsx gate" "${{ steps.fuse-posix-fsx.conclusion }}"
fi
if [ "${RUN_E2E_SMOKE_ALL}" = "1" ]; then
check_required "Full smoke-all suite" "${{ steps.smoke-all.outcome }}"
check_required "Full smoke-all suite" "${{ steps.smoke-all.conclusion }}"
fi
if [ "${RUN_GIT_FEATURE_MATRIX}" = "1" ]; then
check_required "Git feature matrix" "${{ steps.git-feature-matrix.outcome }}"
check_required "Git feature matrix" "${{ steps.git-feature-matrix.conclusion }}"
fi
1. Restore fast_worktree scenario: GIT_WORKSPACE_SCENARIOS was narrowed
   to agent_edit_add_commit only, dropping the only e2e coverage for
   drive9 git worktree add/remove --fast. Add it back.

2. Use steps.<id>.outcome instead of steps.<id>.conclusion in both the
   summary table and enforcement step. For continue-on-error steps,
   conclusion is coerced to success even when the step command failed,
   hiding real failures. outcome reflects the actual step result.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

@srstack srstack 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.

Code Review: Bound full smoke Git workspace workload

Overview

Fixes a CI hang introduced after #519 merged: the full smoke-all step was running an unbounded Git workspace workload. Changes add a 35-minute step timeout, pin Git workspace smoke to a single repo (drive9) and scenario set (agent_edit_add_commit,fast_worktree), tighten clone/mount-ready timeouts, and add --foreground to FUSE mount calls in the feature matrix and git workspace smoke scripts.


Strengths

  • Root cause addressed: scoping to one repo + bounded scenarios is the right surgical fix.
  • 35-minute hard timeout prevents future CI stalls.
  • return 1 fix in _feature-matrix-runner.sh: bare return in a function that uses set -e was masking mount failures with a success exit code. Now correctly propagates failure.
  • --foreground on FUSE mounts: keeps the mount process as a child so its stderr lands in the log and process lifecycle is tied to the test. Correct pattern for CI.
  • stop_mount shift fix: the old code didn't consume mount_point from $@ before passing remaining args to drive9 umount, so extra args like --pack would be passed in the wrong position. Now correct.

Issues

1. GIT_WORKSPACE_SCENARIOS includes fast_worktree which is not in the PR description

The PR description says scope is pinned to agent_edit_add_commit, but the diff sets:

GIT_WORKSPACE_SCENARIOS: "agent_edit_add_commit,fast_worktree"

If fast_worktree is a heavier scenario, it may partially defeat the bounding intent. Confirm it fits comfortably within the 35-minute budget alongside agent_edit_add_commit.

2. outcome vs conclusion rename in check_required

The variable is renamed from outcome to conclusion. GitHub Actions has different semantics for steps.X.outcome vs steps.X.conclusion (outcome reflects continue-on-error; conclusion does not). Confirm the callers are passing the correct expression -- if they still pass steps.X.outcome this rename is cosmetic but misleading.

3. MOUNT_READY_TIMEOUT_S: "60" may be too tight on cold EC2 runners

If FUSE mount startup takes more than 60 seconds on a cold runner, the smoke step will fail spuriously. Confirm this is based on observed startup times or bump to 90-120 seconds.


Minor

  • The restore_pack_archive variable and --pack/--unpack args in run_restore_suite are a functional change bundled into what is described as a CI timeout fix. These look correct but should be called out explicitly in the PR description.
  • ignored-build -> build directory rename: same concern -- functional change bundled with CI fix.

Verdict

The timeout and scoping fix is correct and necessary. Confirm fast_worktree scenario is intentional and fits the budget. The two bundled functional changes (pack/unpack in restore suite, directory rename) should be documented in the PR description.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants