Skip to content

Prepare the v0.1.0 release - #6

Merged
imanimanyara merged 4 commits into
mainfrom
release/v2.0.0
Aug 27, 2026
Merged

imanimanyara merged 4 commits into
mainfrom
release/v2.0.0

Conversation

@imanimanyara

Copy link
Copy Markdown
Member

v1.0.1 sits ten commits behind main, so consumers on ^1.0 are not getting code that has
landed — and two of those commits are breaking and were never written down. Both arrived through
org-wide sweeps rather than a change to this package's own surface, which is how they escaped the
changelog.

composer tag-currency is red on main today, for exactly this reason.

The two breaks

Break Effect
Translation namespace laranail-validation:: → laranail/validation:: No alias is registered, so a key spelled the old way returns itself. No exception, no warning — the raw key renders where the validation error should be
Provider → …\Validation\Providers\ValidationServiceProvider Auto-discovery is fine; anything naming the class explicitly fatals at boot

Both are breaking on a 1.x line, so 2.0.0.

What's here

  • CHANGELOG.md — the v2.0.0 section, which is what release.yml extracts as the release body
  • UPGRADING.md — a v2.0.0 section per break, with the grep and git mv for the published-translations case
  • rector-migrate-2.0.php — codemods the provider rename. Configured with withImportNames() so a consumer's diff is a one-line use change rather than a fully-qualified name left inline beside a stale import. Verified against a scratch Testbench case
  • composer.json — branch-alias → 2.0.x-dev
  • README.md — stability section to ^2.0

It also fixes docs/release.md

The page said: create the release, write the body, let CI write the changelog back. release.yml
does the reverse
— it extracts the ## vX.Y.Z section out of CHANGELOG.md and exit 1s when
it's missing. Following the page as written would have failed this release on its first step.
update-changelog.yml only backfills a hand-authored release and skips when the section exists.

After merge

Tag v2.0.0 on main and push it; CI does the release, benchmark injection and SBOM.

Consumer constraint updates are deliberately not in here — nothing breaks on release, since every
consumer is pinned below 2.0. validation-js is the constrained one: it keeps this in require-dev
because validation is ^8.5 and it is ^8.4.1 || ^8.5, so it needs ^0.1.1 || ^1.0 || ^2.0 —
widened, not replaced, or its 8.4 cells stop resolving.

6155 tests, PHPStan, Pint clean.

v1.0.1 sits ten commits behind main, so consumers on ^1.0 are not getting code that has
landed -- and two of those commits are breaking and were never written down. Both arrived
through org-wide sweeps rather than through a change to this package's own surface, which
is how they escaped the changelog.

The translation namespace became laranail/validation:: with no alias registered, so a key
spelled the old way returns itself instead of a message. No exception, no warning -- the
raw key renders where the validation error should be. That is the one worth reading the
upgrade note for.

The service provider moved into Providers/. Auto-discovery handles it; anything naming the
class explicitly fatals at boot. rector-migrate-2.0.php rewrites it, and the config imports
names so a consumer's diff is a one-line change to a use statement rather than a
fully-qualified name left inline beside a stale import. Verified against a scratch
Testbench case rather than assumed.

Also corrects docs/release.md, which described the older flow: create the release, write
the body, let CI write the changelog back. release.yml does the reverse -- it extracts the
## vX.Y.Z section OUT of CHANGELOG.md and exit 1s when it is missing. Following the page as
written would have failed this release on its first step.
Copilot AI lite review requested due to automatic review settings August 27, 2026 10:32
@github-actions

github-actions Bot commented Aug 27, 2026 •

Copy link
Copy Markdown

Benchmark results

Scenario Optimizations Native Laravel Optimized Speedup Δ vs base
Product import — 500 items, simple rules Wildcard, fast-check 183.6ms 3.3ms ~55x +0%
Nested order lines — 1000 orders × 5 line items Wildcard, fast-check (nested) 1342.4ms 23.7ms ~57x -12%
Event scheduling — 100 items, field-ref dates Wildcard, partial fast-check 29.5ms 1.3ms ~23x +0%
Article submission — 50 items, custom Rule objects Wildcard only 10.5ms 2.8ms ~4x +0%
Conditional import — 100 items, 47 conditional fields Wildcard, pre-evaluation 3798.2ms 51.1ms ~74x +2%
Login form — 3 fields, no wildcards Fast-check (flat) 0.1ms 0.0ms ~9x —

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

Prepares the package for a v2.0.0 release by documenting two previously-unrecorded breaking changes (translation namespace + service provider namespace move), updating consumer-facing docs, and adding a Rector migration config to codemod the provider rename.

Changes:

  • Add v2.0.0 upgrade guidance and a new rector-migrate-2.0.php codemod for the provider class rename.
  • Update release process documentation to reflect that CI extracts the release body from CHANGELOG.md.
  • Update package metadata/docs for the 2.x line (README stability section + Composer branch alias).

Reviewed changes

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

Show a summary per file
File Description
UPGRADING.md Adds v2.0.0 upgrade instructions for the two breaking changes.
rector-migrate-2.0.php Introduces a Rector config to rewrite the service provider class reference.
README.md Updates stability guidance to reference the 2.x line and the new migration script.
docs/release.md Corrects the documented release flow to match CI behavior.
composer.json Updates branch-alias to 2.0.x-dev (plus minor string encoding changes).
CHANGELOG.md Adds the v2.0.0 section intended to be used as the release body.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread docs/release.md Outdated
Comment thread rector-migrate-2.0.php
Comment thread UPGRADING.md Outdated
Comment thread CHANGELOG.md
… calls

Rector 2.6.4 swapped its bundled container from Illuminate's to
Entropy's, and the new one has no tag(). driftingly/rector-laravel
registers its node visitors with $rectorConfig->tag(), so the config
fatals at load time with "Call to undefined method
Rector\Config\RectorConfig::tag()".

There is no stable rector-laravel built against the new container --
2.6.0 requires rector/rector dev-main -- so the range takes a ceiling
until one ships. This is a known-broken-release exclusion, not a pin;
the lower bound stays open.
docs/release.md had two competing "1." lists -- one saying tag first, one
saying changelog first. Merged into a single ordered list matching what
release.yml actually does: write, verify extraction, commit, tag, push.

UPGRADING.md showed the codemod with no target path, while the config
itself documents `app/`. The config declares no paths, so as written the
command did nothing. Added `app/` and a note on which other paths matter.

CHANGELOG.md lost its `## Unreleased` heading when the section was
renamed to v2.0.0, which left the file's own header note describing a
section that no longer existed. Restored as a placeholder; verified the
v2.0.0 body still extracts (41 lines).

rector-migrate-2.0.php keeps `importShortClasses: false`. The flag gates
only global-namespace classes -- ShortClassImportSkipVoter skips an
import solely when the name has no separator -- so it cannot affect the
provider rename. Documented why it diverges from rector.php rather than
changing behaviour.
The org floors every package at v0.1.0 while pre-stable, so the 1.x and
2.0 tags on this repo are internal history rather than published
releases. The two breaking changes this branch documents are real and
still land -- they just land inside v0.1.0.

- CHANGELOG: the release section is v0.1.0, and the withdrawn versions
  move under an "Internal history (not published)" heading. That heading
  is deliberately `##` so the release-body extractor still stops at the
  end of the v0.1.0 section; verified at 41 lines.
- branch-alias: 2.0.x-dev -> 0.1.x-dev, so a dev checkout satisfies ^0.1.
- README constrains to ^0.1.
- rector-migrate-2.0.php -> rector-migrate-0.1.php, with the docblock
  reworded off the 1.x -> 2.0 framing.

No content was dropped; the historical entries are kept for provenance.
@imanimanyara imanimanyara changed the title Prepare the 2.0.0 release Prepare the v0.1.0 release Aug 27, 2026
@imanimanyara
imanimanyara merged commit b3e2d40 into main Aug 27, 2026
16 of 17 checks passed
@imanimanyara
imanimanyara deleted the release/v2.0.0 branch August 27, 2026 13:37
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.

2 participants