Skip to content

Commit 439aab2

Browse files
hasumikinclaude
andcommitted
Complete the 0.5.0 changelog and date the release
The Unreleased section had accumulated the local-database work, StyleValue#+, and the navigation guard, but six merged changes were missing: SSR.render_component (#25), DOMTest negative assertions (#19), Testing.ensure_compiled! (#21), Response#body plus named callback errors (#23), dev-mode SSR source reload (#22), and the readonly schema introspection skip (#20). All entered, dated 2026-08-13. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 13cc15c commit 439aab2

1 file changed

Lines changed: 41 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
## [0.5.0] - Unreleased
1+
## [0.5.0] - 2026-08-13
22

33
The local database release: an ActiveRecord-like, reactive local store on
44
in-browser SQLite (picoruby-sqlite3), with the Rails server as the source
5-
of truth. Entries below accumulate as the feature lands.
5+
of truth. Plus the first round of fixes and API gaps surfaced by building
6+
a real shop on the framework.
67

78
### Added
89

@@ -26,6 +27,30 @@ of truth. Entries below accumulate as the feature lands.
2627
`Funicular.confirm_handler=` injects the dialog for tests or custom
2728
UIs; SSR never blocks. The guard must not suspend.
2829

30+
- `Funicular::SSR.render_component(component_name, props:, state:)`:
31+
render one component to static HTML with no route lookup, so a
32+
server-rendered (ERB) page can embed a Funicular component -- a shared
33+
site header, say -- instead of duplicating its markup. The component
34+
is named by string and resolved after `boot!` (host apps keep
35+
app/funicular out of Rails autoloading); a constant that is not a
36+
`Funicular::Component` subclass is rejected with ArgumentError. No
37+
hydration and no handler binding: links work, onclick does not.
38+
39+
- `Funicular::Testing::DOMTest` gains the negative assertions
40+
`assert_no_selector` / `assert_no_text` and a `selector_count` helper;
41+
"this must NOT render" was previously untestable without hand-rolled
42+
JS.eval node counting.
43+
44+
- `Funicular::Testing.ensure_compiled!`: one call in a test helper that
45+
syncs plugin assets and recompiles app.mrb when sources are newer,
46+
replacing the boilerplate every host app grew by hand. Plain
47+
controller tests that render `funicular_plugin_include_tags` no
48+
longer fail order-dependently on unsynced plugin CSS.
49+
50+
- `Funicular::HTTP::Response#body` as an alias of `#data`: components
51+
reach for the universal name first, and the resulting NoMethodError
52+
used to vanish inside the JS bridge as a silently frozen page.
53+
2954
- The SQLite local-database subsystem is now globally opt-in through
3055
`config.local_database = true` and defaults off. REST-only applications do
3156
not start SQLite, IndexedDB, Web Locks, replica write-through, or session
@@ -360,6 +385,20 @@ of truth. Entries below accumulate as the feature lands.
360385
- `Model#initialize` uses key-presence lookups instead of `||`, so a
361386
string-keyed `false` (boolean columns) no longer collapses to nil.
362387

388+
- Dev-mode SSR reloads edited component sources instead of caching them
389+
per process (the railtie enables it in development): SSR markup no
390+
longer goes stale behind the middleware's recompiled app.mrb until a
391+
server restart. Concurrent renders serialize the reload, and a file
392+
vanishing mid-edit does not break the mtime check.
393+
394+
- Event-handler and HTTP-callback exceptions name the component and
395+
handler on the console before re-raising, instead of an anonymous
396+
"Callback <id>" line -- or, for HTTP callbacks, nothing at all.
397+
398+
- `Schema.build` skips validator introspection for `readonly: true`
399+
attributes: server-managed columns no longer fail client-side
400+
validation against values the client never edits.
401+
363402
- `Schema::RegexpTranslator` unescapes Ruby's `\#` identity escape, which
364403
survives in `Regexp#source` but is rejected by the JS RegExp engine under
365404
the `u` flag (`URI::MailTo::EMAIL_REGEXP` is the common casualty: one such

0 commit comments

Comments
 (0)