Repository navigation
chore(release): prepare Noir 0.0.5 and coordinated companions - #116
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1693f02e5c
ℹ️ 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".
| - `TuiApp.copyToClipboard(text)` asks the terminal to copy `text` to the | ||
| system clipboard with an OSC 52 escape sequence. It returns whether the | ||
| sequence was written, not whether the terminal honored it, and returns | ||
| `false` without writing for empty text or a headless app. Before this the |
There was a problem hiding this comment.
Describe renderer absence rather than headless mode
This release contract is false for drive mode and advanced hosts: DriverHost.create constructs TuiBinding(headless: true, renderer: renderer), so TuiApp.isHeadless is true while BuildOwner.copyToClipboard still forwards the request to the attached renderer. Consequently, a headless driven app can return the renderer result instead of always returning false; describe the condition as having no renderer (or change the implementation) rather than promising this for every headless app.
AGENTS.md reference: AGENTS.md:L3-L6
Useful? React with 👍 / 👎.
1693f02 to
c2ebb4b
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c2ebb4bf39
ℹ️ 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".
| name: noir_driver | ||
| description: A flutter_driver-style client for driving a Noir terminal app headlessly, over its drive-mode VM service surface. | ||
| version: 0.0.1-alpha.2 | ||
| version: 0.0.1-alpha.3 |
There was a problem hiding this comment.
Align the driver tag instructions with alpha.3
The commit's release summary, checks, and “Remaining for a maintainer” section still identify noir_driver as 0.0.1-alpha.2 and instruct maintainers to push noir_driver-v0.0.1-alpha.2, while this manifest now declares 0.0.1-alpha.3. Following those instructions blocks the driver release because .github/workflows/publish.yml runs tool/release.dart resolve-tag, which rejects any tag whose version differs from the manifest; update all release instructions to alpha.3 or keep the manifest at alpha.2.
AGENTS.md reference: AGENTS.md:L91-L92
Useful? React with 👍 / 👎.
Prepare Noir 0.0.5. It adds TuiApp.copyToClipboard (#115); fixes paragraph alignment, character keys, cleared text edits, highlight ranges, Select and DiffView cell painting, and the hot-reload runner's second Ctrl+C (#105, #106, #110, #112); and removes unused prerelease API (#107, #111). The changelog names every removed public member, and the architecture test pins those release contracts. Both companions leave alpha as 0.0.1 and require noir: ^0.0.5: noir_driver after the published 0.0.1-alpha.2, and noir_signals after the published 0.0.1-alpha.1. Neither library changed since those archives, and their changelog sections stay byte-for-byte as published. Noir's noir_driver dev dependency, the tag examples, the checkout guidance, and the testing page follow. publication.json now records noir_driver 0.0.1-alpha.2, which was published on 2026-10-19 when only its record step failed, and availability.ts is regenerated from it. Hosted install guidance keeps naming what pub.dev serves until protected publication confirms the new versions. The native ABI and bundled native artifacts are unchanged from 0.0.4.
c2ebb4b to
0086aa0
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0086aa0281
ℹ️ 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".
|
|
||
| <Availability of="driver" setup={false}> | ||
| `noir_driver` requires Noir 0.0.3. | ||
| `noir_driver` 0.0.1 requires Noir 0.0.5. |
There was a problem hiding this comment.
Keep driver guidance on the published version
Until 0.0.1 is actually published, this page renders the generated “Published version · 0.0.1-alpha.2” label and immediately runs dart pub add --dev noir_driver, which installs alpha.2; that release requires Noir 0.0.4, not 0.0.5. Keep the alpha.2 requirement here until the publication-record update, or explicitly present 0.0.1 as an unpublished checkout candidate, so the installation guidance does not contradict the version users receive.
AGENTS.md reference: AGENTS.md:L91-L92
Useful? React with 👍 / 👎.
| name: noir_signals | ||
| description: Reusable lifecycle hooks and Signals reactive state for Noir, the Flutter-like terminal UI framework for Dart. | ||
| version: 0.0.1-alpha.2 | ||
| version: 0.0.1 |
There was a problem hiding this comment.
Update the install docs shipped in noir_signals 0.0.1
Publishing this manifest as 0.0.1 will freeze the current package documentation into that archive, but packages/noir_signals/README.md and the shipped doc/hooks.md and doc/signals.md still tell consumers to declare 0.0.1-alpha.1 with Noir 0.0.3. The new package actually requires Noir ^0.0.5, so the stable pub.dev package page and reference docs will direct users to the obsolete release pair; update those hosted-install snippets before tagging 0.0.1.
AGENTS.md reference: AGENTS.md:L91-L92
Useful? React with 👍 / 👎.
Summary
Prepares Noir 0.0.5. Both companions leave alpha in the same release as stable 0.0.1. The tag is cut from
main, so 0.0.5 ships everything merged sincenoir-v0.0.4:TuiApp.copyToClipboard(#115), the fixes in #105, #106, #110, and #112, and the prerelease API removals in #107 and #111. The native ABI and bundled native artifacts are unchanged from 0.0.4: nothing undernative/,third_party/,hook/,lib/src/ffi/,native_manifest.json, or the OpenTUI gitlink changed since the tag.Rebased onto
mainat 0295113 (#114). The rebase had no conflicts.noir0.0.4 → 0.0.5 with a## 0.0.5changelog section:TuiApp.copyToClipboard(feat(app): expose TuiApp.copyToClipboard #115).Text/RichText, the odd-cell rounding (centered text with odd slack moves one cell right), andImageFit.fitcentering (fix(rendering): align each paragraph line inside its box #112). Also:LogicalKeyboardKey.forCharacterno longer collides;TextEditingControlleredits and movement are no-ops on a cleared selection;TextHighlightranges are validated in release builds (fix: correct logical keys, cleared text edits, and highlight ranges #106).Selectpaints whole grapheme clusters andDiffViewpads split columns by cell width (fix(widgets): paint Select clusters and pad DiffView columns by cells #105). A second Ctrl+C kills anoir:runchild that ignored the first (fix(devtools): kill the hot-reload child on a second SIGINT #110).BoxShapeandBoxDecoration.shape,Color.withOpacity,Listenable.merge,TextRange.isNormalized/textBefore/textAfter,TextEditingValue.composing,Actions.find/invoke,Focus.of/maybeOf,FocusScope.of/maybeOf,OverlayPortalController.toggle, the low-levelCursorController.updatePosition, and the undocumentedTERMINAL_TUI_DEBUG_LOGswitch (Delete unused core and foundation API #107, Delete unused widget and painting API #111). The list comes from an analyzer diff of the export namespaces ofnoir.dart,noir_low_level.dart, andnoir_ffi.dartatnoir-v0.0.4and at this branch.PersistentUtf8Text,FocusAttachment, andDocumentViewportControllerwere removed too, but no barrel exported them.noir_driver0.0.1-alpha.2 (on pub.dev,noir: ^0.0.4) → 0.0.1, requiringnoir: ^0.0.5. Its## 0.0.1section says this is the first stable release and what it requires; the library is unchanged from alpha.2. Every published section, alpha.2 down, matches the published alpha.2 archive byte-for-byte.noir_signals0.0.1-alpha.1 (on pub.dev,noir: ^0.0.3) → 0.0.1, requiringnoir: ^0.0.5. The unpublished alpha.2 candidate is gone; its section became## 0.0.1, which says this is the first stable release and what it requires. The library is unchanged from alpha.1, and the alpha.1 and alpha.0 sections match the published alpha.1 archive byte-for-byte.melos version -V noir:0.0.5 -V noir_driver:0.0.1 -V noir_signals:0.0.1 --no-changelog --no-git-commit-version --dependent-constraints --no-dependent-versions. It changed the two companionversion:lines and Noir'snoir_driverdev dependency (now^0.0.1); bothnoir: ^0.0.5constraints were already in place.lib/trees match their latest pub.dev archives byte-for-byte. Neither re-exports anoirsymbol.publication.jsonnow recordsnoir_driver0.0.1-alpha.2. Thenoir_driver-v0.0.1-alpha.2run published it on 2026-10-19 and only its record step failed. Corrected with the documentedrelease:record, which changed onlynoir_driver, thennpm run sync.availability.tsregenerated: manifests noir 0.0.5, noir_driver 0.0.1, noir_signals 0.0.1; published noir 0.0.4, noir_driver 0.0.1-alpha.2, noir_signals 0.0.1-alpha.1.noir_signals0.0.1 as the candidate requiring Noir 0.0.5. The testing page now says "noir_driver0.0.1 requires Noir 0.0.5" instead of the stale 0.0.3. The API page's companion label is "Published companion package" instead of "Published companion prerelease".noir_signals0.0.1-alpha.1 withnoir: ^0.0.3.signals_package_boundary_testrequires that guidance to resolve againstpublication.json, so it changes after publication. Its ordered-records case now covers the records this release produces, includingnoir_signals0.0.1, so the record PR cannot break it:^0.0.1-alpha.1admits 0.0.1. The unpublished-minimum case now uses^0.0.1.*-v*,resolve-tagderivesprerelease=falsefrom the parsed version, andrecordprefers the stable 0.0.1 over the companion's alphas. Only a doc comment intool/release/release.dartthat said the companions "read today" as prerelease-only was reworded.dialog_demo.dartand its example tests reference 0.0.5.package_distribution_ownership_test.dartpins the 0.0.5 Added, Fixed, and Removed contracts and keeps the 0.0.4 contracts in a "published 0.0.4" test.CONTRIBUTING.mdtag examples usenoir-v0.0.5,noir_driver-v0.0.1, andnoir_signals-v0.0.1.Checks
Local, on 0086aa0 with Dart 3.13.4 through the Melos scripts. Format also ran with CI's pinned Dart 3.10.0:
format:noir,format:driver,format:signalswith Dart 3.10.0: 0 changed files. Dart 3.13.4 flags 11 files this PR does not touch, 9 innoirand 2 innoir_driver;format:signalsis clean under both.analyze,analyze:driver,analyze:signals: no issues.test:architecture(260 passed),test:noir(2397 passed),test:driver(89 passed),test:signals(125 passed).native:verify(manifest and 6 binaries),docs:frames(frames match),release:check("Release ready: noir 0.0.5, noir_driver 0.0.1, noir_signals 0.0.1").archive:noir,archive:driver,archive:signals: 0 warnings each from the committed tree.stage:companion,stage:driver: 0 warnings, with the expected path-override hint.melos bootstrapleaves the tree clean, andpubspec.lockis unchanged.release.dart resolve-tagacceptsnoir-v0.0.5,noir_driver-v0.0.1, andnoir_signals-v0.0.1(prerelease=falsefor both companion tags) and rejectsnoir_driver-v0.0.1-alpha.3.preflightreads pub.dev:noirwould publish, and both companions are blocked until pub.dev serves Noir 0.0.5.website:sync:check,format:check,lint,typecheck,build,test:smoke(20 sync tests and the smoke test) all pass.Remaining for a maintainer
noir-v0.0.5and approve thepub.devenvironment; wait for the publish run.noir_driver-v0.0.1andnoir_signals-v0.0.1, one at a time, approving each.noir_signals0.0.1 is on pub.dev, update the hosted install guidance that still describes the published alpha.1: the signals README "Install" section,doc/hooks.mdanddoc/signals.md, and on the website the installation page's companion note, hosted snippet, and two troubleshooting rows, plus the hooks page's "requires Noir 0.0.3".