Skip to content

Bobcat 1.0.0-rc.1 - #5697

Merged
jeremydmiller merged 1 commit into
masterfrom
bobcat-1.0.0-rc.1
Oct 18, 2026
Merged

jeremydmiller merged 1 commit into
masterfrom
bobcat-1.0.0-rc.1

Conversation

@jeremydmiller

Copy link
Copy Markdown
Member

Moves Marten onto Bobcat 1.0.0-rc.1 (nuget.org, 2026-10-18).

Pins

Directory.Packages.props: BobcatVersion 1.0.0-alpha.1 → 1.0.0-rc.1. That one property sets Bobcat, Bobcat.Generators, Bobcat.Xunit (DaemonTests and DaemonTests.ManualOnly) and Bobcat.Supervisor (build/).

Nothing else moved:

  • xunit.v3 4.0.2 / runner 4.0.1 (BobcatXunitV3Version): DaemonTests is already on the line rc.1 needs.
  • JasperFx 2.90.2 VersionOverride in build/build.csproj: rc.1 has the same floor as alpha.1 (2.90.2), so it stays, as bobcat#693's docs describe. Marten's own pins stay at 2.90.1. No NoWarn NU1605.

Changes and why

  1. Removed build/'s own fresh-process retry policy (RetryOptedInTestsInFreshProcess, from Supervised CI on Bobcat 0.60.4: worker lanes, per-lane databases, opt-in retries, committed ledger (bobcat#565) #5687). Bobcat 1.0's DefaultFailurePolicy now retries a Retry-tagged test in a fresh process by default (bobcat#661). Isolated=true was already fresh-process. Behaviour is the same as before: retries stay opt-in, the ceiling is 3 attempts with 25 retries per run, and --disable-test-retry still turns them off. Only a [Trait("RetryWarm","true")] would retry warm, and nothing in Marten has one. The one Retry trait in the repo (Bug_catching_up_should_catch_marten_command_exceptions) gets a fresh process, as it did before.
  2. Removed the display-name ledger workaround (LaneDurations and the Supervisor.TestFilter hook, plus re-keying earlier observations onto this run's uids). Bobcat now keys TestLedger and KnownDurations() by display name itself (bobcat#730). It re-keys an older uid-keyed ledger when it loads one, and prints Known durations matched N/M at the top of the run report. SupervisedTests.cs logs results.DurationCoverage in place of its own matched count.
  3. The ledger is now a CI artifact. The committed build/test-ledger/ and --update-test-ledger are gone. Each test job downloads the folded-test-ledgers artifact from the newest successful master run into artifacts/previous-test-ledger/ and balances its lanes on it. The roll-up job already gathers each job's folded ledger into that artifact. The workflow gains permissions: actions: read so the download can run. The step is best-effort: with no ledger, lanes balance by test count and the report says so.
    • Why the committed ledger was dropped: it only held EventSourcing and Linq. CI always gets fresher data from the previous master run, and keeping the file current would mean a commit every time. All it bought was duration balancing on a laptop's first run, and --previous-test-ledger <dir> pointed at a downloaded artifact covers that.
    • Retention moves from 3 to Bobcat's default of 5 runs per test. A test no run has seen for 30 days is pruned (PruneTestsNotSeenSince). Before, a test was dropped when it was missing from the current run, which also threw away history during a filtered run.
  4. Skipped is its own column in the retry ledger JSON and the job summary (bobcat#655). The roll-up's jq schema check reads only Job/RetriesPerformed/FlakyTests, so it is unaffected.
  5. CLAUDE.md and .nuke/build.schema.json are updated to match. The CLAUDE.md note that "BOBCAT_SPEC_CONSOLE=1 prints nothing when redirected on alpha.1" now points at bobcat#717, which fixed it in rc.1.

Nothing to change for the other rc.1 breaking changes. Marten never uses CritterStackScenario.Store / CritterStackSpec.Store (renamed to EventStore, bobcat#709). Collapsed-theory folding (bobcat#649) and the matched-durations and parallel-efficiency report lines (bobcat#663/#664) come through RunReport on their own.

Ran locally (no Postgres; other agents share this machine)

  • dotnet build src/Marten.slnx -c Release: 0 errors. build/build.csproj: 0 warnings, 0 errors.
  • DaemonTests --list-tests on the rc.1 host: 377 tests discovered.
  • ./build.sh test-source-generator --framework net9.0 --previous-test-ledger <master run 39031256690's folded-test-ledgers>: 19/19 passed through the rc.1 supervisor, and the run printed Known durations matched 19/19 test(s). The ledger in master's artifact is version 1 and keyed by uid; it loaded and was written back as version 3, keyed by display name.
  • A probe against the same artifact: EventSourcingTests.net10.0.json loads 2525 tests and gives 2525 durations keyed by display name, with no shared display names.

The Postgres suites are left to this PR's CI.

🤖 Generated with Claude Code

- Bobcat, Bobcat.Generators, Bobcat.Xunit and Bobcat.Supervisor 1.0.0-alpha.1 -> 1.0.0-rc.1.
- Drop build/'s fresh-process retry policy: Bobcat's DefaultFailurePolicy now retries a
  Retry/Isolated-tagged test in a fresh process itself (bobcat#661). Same ceiling (3), same opt-in.
- Drop the display-name TestFilter workaround and the committed build/test-ledger/: Bobcat keys
  the ledger by display name (bobcat#730). The ledger now travels as a CI artifact: each test job
  downloads the newest successful master run's folded-test-ledgers.
- The retry ledger and job summary count skipped tests on their own (bobcat#655).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YDKQhnBVcmVLCTkJbVeADk
@jeremydmiller
jeremydmiller merged commit 1e130e2 into master Oct 18, 2026
32 checks passed
@jeremydmiller
jeremydmiller deleted the bobcat-1.0.0-rc.1 branch October 18, 2026 13:56
This was referenced Oct 20, 2026
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.

1 participant