chore(release): 1.7.0 - #107
Conversation
Full GPL CSL styles and locales (#103), Phase 05 M0-M3 (stable IDs, review routes and abilities, opt-in citation and block write routes: #104, #106), the save-markup language fix, reference-manager .bib fixes, the Playground demo page (#102), and the runtime matrix on the release package with formatter-parity and write-route checks (#105). Version bumped in the plugin header, block.json, readme.txt Stable tag, the POT header, and the package manifests. CHANGELOG [Unreleased] is dated as 1.7.0; readme.txt gains a user-facing changelog entry, an Upgrade Notice, and an FAQ note on the opt-in write routes. README highlights and STATE/ROADMAP move to the 1.7.0 baseline. Tested up to stays 7.1: WordPress latest is 7.1.2, which CI's runtime matrix exercises, including formatter parity across all nine styles. package-release.sh now also prunes .git directories from vendor/. When Composer falls back from dist to a git clone (as it did in this sandbox), the ZIP otherwise carried 4 MB of git metadata. Release checklist gates run locally: lint:js, lint:css, lint:i18n, npm audit (0), composer audit (none), Jest 873 passed / 2 skipped, PHPUnit 318 OK (the 4 vendor deprecations already on main), build, package:release (552,718-byte ZIP). citeproc-php v2.7.1 is current. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KbVuMPN7YTcV27vwsG3LZ2
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #107 +/- ##
============================================
+ Coverage 87.39% 87.50% +0.10%
- Complexity 0 22 +22
============================================
Files 54 55 +1
Lines 6021 6089 +68
Branches 597 597
============================================
+ Hits 5262 5328 +66
- Misses 278 280 +2
Partials 481 481 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
CiteProc::render() calls init() every time, which builds a new Context, reads and parses the locale file, and rebuilds the style's object tree: about 3 ms, against well under 1 ms to render an entry. With one render per entry (the fix that stopped an "et al." entry from dropping the next entry's "and"), 50 entries took about 90 ms, against about 8 ms in 1.6.0 with its short stand-in styles. Bibliography_Builder_Reusable_CiteProc parses once, records every property of every object in the parsed style tree, and before each later render restores them, resets the Context's per-render lists, and zeroes Layout's static cited-item counter. Each entry renders against the state a fresh parse would give it: 50 entries now take about 25 ms. The nine style goldens still match byte for byte. A new test formats the corpus in reverse order, putting the "et al." and APA 21+ entries ahead of the short author lists, and requires every entry to match its golden line; with the restore disabled, both the goldens and the new test fail. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KbVuMPN7YTcV27vwsG3LZ2
|
@codex review Please review this release PR, and especially commit 0f01fb8. That commit adds Generated by Claude Code |
|
Codex Review: Didn't find any major issues. More of your lovely PRs please. Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
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". |
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Remove or replace #[\Override] to restore compatibility with PHP 7.4.
Review effort: Lite
Findings: 1
What changed in this PR
Prepares the Borges 1.7.0 release and optimizes CSL formatting by reusing parsed citeproc state.
Changes:
- Adds reusable formatter logic and reverse-order golden coverage.
- Updates release metadata, changelog, documentation, and planning baselines.
- Removes vendored
.gitdirectories from release packages.
Blocking finding: #[\Override] is incompatible with the declared PHP 7.4 minimum and causes a parse error; it must be removed or replaced.
| File | Description |
|---|---|
tests/phpunit/CslStyleGoldenTest.php |
Adds formatter state-isolation coverage. |
scripts/package-release.sh |
Prunes vendored Git metadata. |
readme.txt |
Updates release metadata and documentation. |
README.md |
Updates release highlights and metrics. |
package.json |
Bumps the package version. |
package-lock.json |
Synchronizes package versions. |
languages/borges-bibliography-builder.pot |
Updates translation metadata. |
includes/class-bibliography-builder-reusable-citeproc.php |
Implements reusable citeproc state restoration. |
docs/current-metrics.md |
Updates project metrics. |
CHANGELOG.md |
Adds the 1.7.0 release entry. |
block.json |
Bumps the block version. |
bibliography-builder.php |
Bumps plugin metadata and integrates the formatter. |
.planning/STATE.md |
Updates project release state. |
.planning/ROADMAP.md |
Updates the release baseline. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
PHP 7.4 reads an attribute on its own line as a comment (php -l on 7.4 passes, and so does the PHP 7.4 runtime smoke), but Copilot flagged it as a 7.4 parse error, and compatibility scanners can do the same. It does nothing at runtime, so drop it, and turn off Psalm's MissingOverrideAttribute, which cannot apply to a plugin that supports PHP 7.4. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KbVuMPN7YTcV27vwsG3LZ2

Summary
What changed?
This is the 1.7.0 release prep. It covers everything in
[Unreleased]:.bibfixes;Changes in this PR:
Cause: citeproc-php's
render()callsinit()every time, re-reading the locale file and rebuilding the whole style tree. The plugin renders each entry separately (so an "et al." entry can't drop the next entry's "and"), so it paid that cost once per entry.Fix:
Bibliography_Builder_Reusable_CiteProc(includes/class-bibliography-builder-reusable-citeproc.php) parses the style once. It records every property of the parsed style tree, and before each later render it:Layout's static counter.Each entry renders exactly as it would after a fresh parse. 50 entries now take about 25 ms.
Proof: the nine style goldens still match byte for byte. A new test formats the corpus in reverse order, putting the "et al." and APA 21+ entries first, and requires every entry to match its golden. With the restore disabled, both the goldens and the new test fail.
block.json, thereadme.txtStable tag, the POT header,package.json, andpackage-lock.jsonall move to 1.7.0.[Unreleased]is dated1.7.0 - 2026-09-26, with a line for the formatter speed-up.readme.txt:scripts/package-release.shnow also prunes.gitdirectories fromvendor/. In this sandbox Composer couldn't download the dist archive, so it cloned citeproc-php from git instead, and the ZIP picked up 4 MB of git metadata. CI's dist downloads don't hit this, but a release ZIP should never carry.git.Tested up to stays at 7.1. WordPress latest is 7.1.2 (checked in the current
wordpress:php8.3-apacheimage), and CI's runtime matrix exercises it, including formatter parity across all nine styles on every PHP version.The
readme.txt, README, and metrics ZIP-size figures still quote v1.6.0's release asset. As after 1.6.0, they get updated from the published v1.7.0 asset.Why? Requested ("cut it", then "fix the formatter first").
Validation
npm run lint:jspassesnpm run lint:csspassesnpm run lint:i18npassesnpm run testpasses (873 passed, 2 skipped)npm run buildsucceedsnpm audit --omit=dev --omit=optional: 0;composer audit --no-dev: none;composer test:php: 327 OK (the 4 vendor deprecations already onmain);composer lint:php, Psalm, andverify-metrics.shpass;npm run package:release: a ~550 KB ZIP with no.git, Composer metadata, or package-manager files.Checklist
After merge, push the tag:
git tag v1.7.0 <merge sha> && git push origin v1.7.0.release.ymlthen builds and publishes the GitHub Release and dispatcheswp-deploy.yml.🤖 Generated with Claude Code
https://claude.ai/code/session_01KbVuMPN7YTcV27vwsG3LZ2