Skip to content

Release v0.11.1 — Fail Closed (Windows fix before publishing) - #1066

Merged
cemililik merged 3 commits into
mainfrom
development
Oct 23, 2026
Merged

cemililik merged 3 commits into
mainfrom
development

Conversation

@cemililik

@cemililik cemililik commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

The second, and final, release pull request for v0.11.1 — "Fail Closed". The first one (#1064) merged into main and was tagged, but the tag's publish run failed on all four Windows combinations, so nothing reached PyPI. This pull request brings the fix. After it merges, the unpublished v0.11.1 tag moves to the new merge commit, recreated and GPG-signed. The owner approved this plan.

The rest of the release is exactly as described in #1064. It is still numbered as a patch by maintainer decision, as a one-time exception to release.md's bump table. The exception is recorded in CHANGELOG.md, docs/roadmap/releases.md and the 2026-10-23 addendum in docs/roadmap/risks-and-decisions.md.

What main gains

Commit / PR What
#1065 dc9056e The fix. On Windows, os.path.relpath answers models\final. The model-directory recheck takes the config's / form and rejected it, so a run with a nested training.final_model_dir failed at finalisation. The recheck now converts the separator. A POSIX name containing a backslash still fails the existing resolve() comparison. The pull request adds two Linux-runnable regression tests, amends the [0.11.1] CHANGELOG entry and updates the release record's test count from 6769 to 6771.
#1065 49f9690 Sync of #1064's merge commit back into development, with no file changes, so this pull request starts up to date.

Failed publish run

Run 40005826279:

  • build passed.
  • The Ubuntu and macOS combinations passed, 8 of 8.
  • The Windows combinations failed, 4 of 4, all on the same four TestFinalizedModelIntegrity tests.
  • publish was skipped.

These four tests were the only failures. Each Windows job ran 6,631 tests that passed.

What merging this does

  • Website. site-deploy.yml runs only on pushes that touch site/ or docs/usermanuals/, and this pull request touches neither.
  • Tag and publish. After merging:
    • the v0.11.1 tag is deleted on the remote and locally;
    • it is recreated, GPG-signed, on the new merge commit and pushed;
    • publish.yml runs again, including Windows;
    • the pypi deployment waits for the owner's approval.

Notes for reviewers

  • Merge method: a merge commit, which the ruleset requires.
  • After the release: bring main back into development and open the next development cycle.

Type

  • Bug fix
  • CI / infrastructure (release)

Testing

🤖 Generated with Claude Code

Summary by Sourcery

Correct Windows model-directory validation and update the v0.11.1 release records so the release can be published successfully.

Bug Fixes:

  • Fix model destination rechecks on Windows by accepting platform-native path separators while preserving POSIX path validation.

Documentation:

  • Update release documentation and changelog test counts to reflect the added regression coverage.

Tests:

  • Add regression tests covering Windows-style relative paths and rejecting backslashes as literal POSIX path names.

cemililik and others added 3 commits October 23, 2026 22:18
The v0.11.1 publish matrix failed on every Windows combination (nothing
was published): os.path.relpath answers 'models\final' there, and the
layout check, which takes the config's '/' form, rejected it, so a run
with a nested training.final_model_dir would fail after training, at
finalisation. The recheck now converts the separator; on POSIX a
backslash is part of a name and that path still fails the resolve()
comparison that follows.

Two Linux-runnable regression tests, one per mutant (no conversion; no
resolve comparison). The [0.11.1] CHANGELOG entry that promised the
recheck for nested directories now says it holds on Windows too, and the
release record's test count moves from 6769 to 6771.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bring back the merge commit of the first v0.11.1 release pull request so the next one starts up to date.
…check

fix: read the model-directory recheck's relpath with '/' on Windows
@coldtea-pr-lens

Copy link
Copy Markdown

Note

The title starts with Release, so PR Lens left this pull request undrawn. Comment @pr-lens draw to draw it

github.comment.notice: false in .github/pr-lens.yml turns this note off

@sourcery-ai

sourcery-ai Bot commented Oct 23, 2026

Copy link
Copy Markdown

Sorry @cemililik, you've used your own review budget of 250,000 diff characters for the last 7 days.

You can request another review in 21 hours and 34 minutes by commenting @sourcery-ai review. Upgrade to get a review now.

@coderabbitai

coderabbitai Bot commented Oct 23, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Essentials
  • Run ID: 5887fdc2-55d7-48ef-bff3-d64a869faaf2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

@sourcery-ai

sourcery-ai Bot commented Oct 23, 2026

Copy link
Copy Markdown

Reviewer's Guide

This release fix makes final-model destination rechecks portable across Windows and POSIX by normalizing only the lexical relative path used for layout validation, while keeping resolved-path integrity checks intact. It adds targeted regression tests and updates the v0.11.1 release records for the two additional tests.

Sequence diagram for portable final-model destination recheck

sequenceDiagram
    participant Finalizer
    participant Check as _check_model_destination
    participant OS as os.path.relpath
    participant Layout as _validate_layout
    participant Resolve as resolve comparison

    Finalizer->>Check: _check_model_destination(output_dir, final_path, config)
    Check->>OS: relpath(final_path, output_dir)
    OS-->>Check: platform-relative path
    Check->>Check: replace("\\", "/")
    Check->>Layout: _validate_layout(output_dir, relative, benchmark_output_dir)
    Layout-->>Check: layout valid
    Check->>Resolve: compare resolved destinations
    Resolve-->>Check: integrity result
Loading

Flow diagram for Windows final-model validation fix

flowchart LR
    A[Windows relpath returns models\\final] --> B[Normalize lexical path to models/final]
    B --> C[_validate_layout accepts config layout]
    C --> D[Resolved-path comparison remains enforced]
    D --> E[Final model destination recheck succeeds]
Loading

File-Level Changes

Change Details Files
Normalize Windows relative paths before validating configured model-directory layouts while preserving POSIX backslash safety.
  • Convert platform separators from os.path.relpath to the layout validator’s / form.
  • Retain the resolved-destination comparison so POSIX backslashes cannot bypass validation.
  • Add regression coverage for Windows-style relative paths and POSIX backslash-containing names.
forgelm/_artifact_paths.py
tests/test_config.py
Update release documentation and changelog to record the Windows fix and corrected v0.11.1 test total.
  • Document that nested final model directories are rechecked correctly on Windows.
  • Update the release test count from 6,769 to 6,771 in English and Turkish roadmap records.
CHANGELOG.md
docs/roadmap-tr.md
docs/roadmap.md
docs/roadmap/releases.md

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@cemililik
cemililik merged commit 2636b5c into main Oct 23, 2026
23 checks passed
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