plutonium 0.60.4 → 0.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. checksums.yaml +4 -4
  2. data/.claude/skills/plutonium/SKILL.md +19 -1
  3. data/.claude/skills/plutonium-app/SKILL.md +41 -0
  4. data/.claude/skills/plutonium-auth/SKILL.md +40 -0
  5. data/.claude/skills/plutonium-behavior/SKILL.md +47 -1
  6. data/.claude/skills/plutonium-kanban/SKILL.md +313 -0
  7. data/.claude/skills/plutonium-resource/SKILL.md +40 -0
  8. data/.claude/skills/plutonium-tenancy/SKILL.md +43 -0
  9. data/.claude/skills/plutonium-testing/SKILL.md +38 -0
  10. data/.claude/skills/plutonium-ui/SKILL.md +51 -0
  11. data/.claude/skills/plutonium-wizard/SKILL.md +469 -0
  12. data/.cliff.toml +6 -0
  13. data/.yarnrc.yml +7 -0
  14. data/Appraisals +3 -0
  15. data/CHANGELOG.md +558 -439
  16. data/CLAUDE.md +15 -7
  17. data/app/assets/plutonium.css +1 -1
  18. data/app/assets/plutonium.js +895 -193
  19. data/app/assets/plutonium.js.map +4 -4
  20. data/app/assets/plutonium.min.js +53 -53
  21. data/app/assets/plutonium.min.js.map +4 -4
  22. data/app/views/layouts/basic.html.erb +7 -0
  23. data/app/views/plutonium/_flash_toasts.html.erb +2 -46
  24. data/app/views/plutonium/_toast.html.erb +52 -0
  25. data/app/views/resource/_resource_kanban.html.erb +1 -0
  26. data/db/migrate/wizard/20260615000001_create_plutonium_wizard_sessions.rb +57 -0
  27. data/docs/.vitepress/config.ts +24 -0
  28. data/docs/guides/index.md +2 -0
  29. data/docs/guides/kanban.md +447 -0
  30. data/docs/guides/wizards.md +447 -0
  31. data/docs/public/images/guides/kanban-after-move.png +0 -0
  32. data/docs/public/images/guides/kanban-board-light.png +0 -0
  33. data/docs/public/images/guides/kanban-board.png +0 -0
  34. data/docs/public/images/guides/kanban-show-centered-modal.png +0 -0
  35. data/docs/public/images/guides/kanban-wip-toast.png +0 -0
  36. data/docs/public/images/guides/wizards-chooser.png +0 -0
  37. data/docs/public/images/guides/wizards-completed.png +0 -0
  38. data/docs/public/images/guides/wizards-index-action.png +0 -0
  39. data/docs/public/images/guides/wizards-repeater.png +0 -0
  40. data/docs/public/images/guides/wizards-review.png +0 -0
  41. data/docs/public/images/guides/wizards-step.png +0 -0
  42. data/docs/reference/behavior/policies.md +1 -1
  43. data/docs/reference/index.md +14 -0
  44. data/docs/reference/kanban/authorization.md +62 -0
  45. data/docs/reference/kanban/dsl.md +293 -0
  46. data/docs/reference/kanban/index.md +40 -0
  47. data/docs/reference/kanban/positioning.md +162 -0
  48. data/docs/reference/resource/definition.md +16 -0
  49. data/docs/reference/ui/forms.md +36 -0
  50. data/docs/reference/ui/pages.md +2 -0
  51. data/docs/reference/wizard/anchoring-resume.md +194 -0
  52. data/docs/reference/wizard/dsl.md +332 -0
  53. data/docs/reference/wizard/index.md +33 -0
  54. data/docs/reference/wizard/one-time.md +129 -0
  55. data/docs/reference/wizard/registration-launch.md +177 -0
  56. data/docs/reference/wizard/storage-config.md +151 -0
  57. data/docs/superpowers/plans/2026-06-14-form-sectioning.md +2 -2
  58. data/docs/superpowers/plans/2026-06-15-wizard-dsl.md +1619 -0
  59. data/docs/superpowers/plans/2026-06-15-wizard-dsl.md.tasks.json +68 -0
  60. data/docs/superpowers/plans/2026-06-26-kanban-dsl.md +1128 -0
  61. data/docs/superpowers/plans/2026-06-26-kanban-dsl.md.tasks.json +24 -0
  62. data/docs/superpowers/specs/2026-06-15-wizard-dsl-design.md +836 -0
  63. data/docs/superpowers/specs/2026-06-15-wizard-dsl-examples.rb +245 -0
  64. data/docs/superpowers/specs/2026-06-17-wizard-relaunch-prompt-design.md +86 -0
  65. data/docs/superpowers/specs/2026-06-18-wizard-attachments-design.md +101 -0
  66. data/docs/superpowers/specs/2026-06-18-wizard-hosting-design.md +220 -0
  67. data/docs/superpowers/specs/2026-06-26-kanban-dsl-design.md +388 -0
  68. data/gemfiles/postgres.gemfile +8 -0
  69. data/gemfiles/postgres.gemfile.lock +321 -0
  70. data/gemfiles/rails_7.gemfile +1 -0
  71. data/gemfiles/rails_7.gemfile.lock +1 -1
  72. data/gemfiles/rails_8.0.gemfile +1 -0
  73. data/gemfiles/rails_8.0.gemfile.lock +1 -1
  74. data/gemfiles/rails_8.1.gemfile +1 -0
  75. data/gemfiles/rails_8.1.gemfile.lock +14 -1
  76. data/lib/generators/pu/invites/templates/packages/invites/app/controllers/invites/user_invitations_controller.rb.tt +6 -1
  77. data/lib/plutonium/action/base.rb +9 -0
  78. data/lib/plutonium/auth/rodauth.rb +1 -2
  79. data/lib/plutonium/configuration.rb +4 -0
  80. data/lib/plutonium/core/controller.rb +20 -1
  81. data/lib/plutonium/definition/base.rb +25 -0
  82. data/lib/plutonium/definition/form_layout.rb +54 -35
  83. data/lib/plutonium/definition/index_views.rb +54 -1
  84. data/lib/plutonium/definition/wizards.rb +209 -0
  85. data/lib/plutonium/invites/concerns/invite_token.rb +9 -0
  86. data/lib/plutonium/invites/concerns/invite_user.rb +9 -0
  87. data/lib/plutonium/invites/controller.rb +4 -1
  88. data/lib/plutonium/kanban/action.rb +7 -0
  89. data/lib/plutonium/kanban/board.rb +40 -0
  90. data/lib/plutonium/kanban/broadcaster.rb +54 -0
  91. data/lib/plutonium/kanban/column.rb +69 -0
  92. data/lib/plutonium/kanban/context.rb +15 -0
  93. data/lib/plutonium/kanban/dsl.rb +71 -0
  94. data/lib/plutonium/kanban/grouping.rb +51 -0
  95. data/lib/plutonium/kanban/positioning.rb +75 -0
  96. data/lib/plutonium/kanban.rb +11 -0
  97. data/lib/plutonium/migrations.rb +40 -0
  98. data/lib/plutonium/positioning.rb +146 -0
  99. data/lib/plutonium/railtie.rb +33 -0
  100. data/lib/plutonium/resource/controller.rb +2 -0
  101. data/lib/plutonium/resource/controllers/crud_actions.rb +1 -1
  102. data/lib/plutonium/resource/controllers/kanban_actions.rb +455 -0
  103. data/lib/plutonium/resource/controllers/wizard_actions.rb +165 -0
  104. data/lib/plutonium/resource/policy.rb +8 -0
  105. data/lib/plutonium/routing/mapper_extensions.rb +44 -0
  106. data/lib/plutonium/routing/wizard_registration.rb +289 -0
  107. data/lib/plutonium/ui/display/components/attachment.rb +2 -2
  108. data/lib/plutonium/ui/display/resource.rb +17 -12
  109. data/lib/plutonium/ui/form/base.rb +19 -5
  110. data/lib/plutonium/ui/form/components/password.rb +126 -0
  111. data/lib/plutonium/ui/form/components/uppy.rb +8 -5
  112. data/lib/plutonium/ui/form/options/inferred_types.rb +20 -0
  113. data/lib/plutonium/ui/form/resource.rb +1 -1
  114. data/lib/plutonium/ui/form/wizard.rb +63 -0
  115. data/lib/plutonium/ui/grid/card.rb +16 -5
  116. data/lib/plutonium/ui/kanban/card.rb +67 -0
  117. data/lib/plutonium/ui/kanban/color_dot.rb +36 -0
  118. data/lib/plutonium/ui/kanban/column.rb +324 -0
  119. data/lib/plutonium/ui/kanban/resource.rb +212 -0
  120. data/lib/plutonium/ui/layout/resource_layout.rb +7 -1
  121. data/lib/plutonium/ui/modal/base.rb +30 -3
  122. data/lib/plutonium/ui/modal/centered.rb +5 -2
  123. data/lib/plutonium/ui/page/index.rb +1 -0
  124. data/lib/plutonium/ui/page/show.rb +23 -0
  125. data/lib/plutonium/ui/page/wizard.rb +371 -0
  126. data/lib/plutonium/ui/page/wizard_chooser.rb +97 -0
  127. data/lib/plutonium/ui/page/wizard_completed.rb +86 -0
  128. data/lib/plutonium/ui/table/base.rb +1 -1
  129. data/lib/plutonium/ui/table/components/view_switcher.rb +2 -1
  130. data/lib/plutonium/ui/wizard/review.rb +196 -0
  131. data/lib/plutonium/ui/wizard/stepper.rb +122 -0
  132. data/lib/plutonium/ui/wizard/summary_display.rb +59 -0
  133. data/lib/plutonium/version.rb +1 -1
  134. data/lib/plutonium/wizard/attachment_data.rb +42 -0
  135. data/lib/plutonium/wizard/attachments.rb +226 -0
  136. data/lib/plutonium/wizard/base.rb +216 -0
  137. data/lib/plutonium/wizard/base_controller.rb +31 -0
  138. data/lib/plutonium/wizard/configuration.rb +42 -0
  139. data/lib/plutonium/wizard/controller.rb +162 -0
  140. data/lib/plutonium/wizard/data.rb +134 -0
  141. data/lib/plutonium/wizard/driving.rb +639 -0
  142. data/lib/plutonium/wizard/dsl.rb +336 -0
  143. data/lib/plutonium/wizard/errors.rb +27 -0
  144. data/lib/plutonium/wizard/field_capture.rb +157 -0
  145. data/lib/plutonium/wizard/field_importer.rb +208 -0
  146. data/lib/plutonium/wizard/gate.rb +171 -0
  147. data/lib/plutonium/wizard/instance_key.rb +97 -0
  148. data/lib/plutonium/wizard/lazy_persisted.rb +77 -0
  149. data/lib/plutonium/wizard/resume.rb +250 -0
  150. data/lib/plutonium/wizard/review_step.rb +48 -0
  151. data/lib/plutonium/wizard/route_resolution.rb +40 -0
  152. data/lib/plutonium/wizard/runner.rb +684 -0
  153. data/lib/plutonium/wizard/session.rb +53 -0
  154. data/lib/plutonium/wizard/state.rb +35 -0
  155. data/lib/plutonium/wizard/step.rb +61 -0
  156. data/lib/plutonium/wizard/step_adapter.rb +103 -0
  157. data/lib/plutonium/wizard/store/active_record.rb +174 -0
  158. data/lib/plutonium/wizard/store/base.rb +42 -0
  159. data/lib/plutonium/wizard/store/memory.rb +44 -0
  160. data/lib/plutonium/wizard/sweep_job.rb +76 -0
  161. data/lib/plutonium/wizard.rb +86 -0
  162. data/lib/plutonium.rb +5 -0
  163. data/lib/rodauth/features/case_insensitive_login.rb +1 -1
  164. data/lib/tasks/release.rake +144 -191
  165. data/package.json +3 -3
  166. data/src/css/components.css +132 -0
  167. data/src/js/controllers/attachment_input_controller.js +15 -1
  168. data/src/js/controllers/dirty_form_guard_controller.js +155 -27
  169. data/src/js/controllers/kanban_controller.js +330 -0
  170. data/src/js/controllers/password_sentinel_controller.js +39 -0
  171. data/src/js/controllers/register_controllers.js +6 -0
  172. data/src/js/controllers/remote_modal_controller.js +10 -0
  173. data/src/js/controllers/row_click_controller.js +14 -1
  174. data/src/js/controllers/wizard_controller.js +54 -0
  175. data/src/js/turbo/turbo_confirm.js +1 -1
  176. data/yarn.lock +272 -283
  177. metadata +101 -2
data/CHANGELOG.md CHANGED
@@ -1,645 +1,726 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ ## [0.61.0] - 2026-06-30
6
+
7
+ ### Bug Fixes
8
+
9
+ - Animate the dialog scale pop via the `scale` property
10
+ - Normalize mixed-case logins to lowercase on input
11
+ - Normalize invite email to lowercase at the source
12
+ - Downcase login in signup handler's existing-account guard
13
+ - Rescue DeleteRestrictionError in CRUD destroy
14
+ - Keep modal dialogs transform-free so fixed overlays escape the panel
15
+ - Render the classic shell sidebar again
16
+ - Mount uppy Dashboard into the modal dialog so it renders above it
17
+ - Coerce ActiveStorage::Filename to String for HTML title attributes ([#66](https://github.com/radioactive-labs/plutonium-core/issues/66))
18
+ - Bump dompurify to 3.4.11 and esbuild to 0.28.1 to clear npm audit
19
+ - Clear npm Dependabot alerts (lodash 4.18.1 + dev-tree dedupe)
20
+
21
+ ### Features
22
+
23
+ - Omit empty Details tab when no fields are permitted
24
+ - Mask password/secret fields so the stored value never reaches the DOM
25
+ - Plutonium::Wizard — declarative multi-step wizard subsystem ([#62](https://github.com/radioactive-labs/plutonium-core/issues/62))
26
+ - Kanban board DSL — first-class index view with drag-to-move ([#63](https://github.com/radioactive-labs/plutonium-core/issues/63))
27
+
28
+ ### Miscellaneous Tasks
29
+
30
+ - Make releasing laptop-driven and race-free
31
+ - Review before commit — prepare stages, publish commits
32
+
33
+ ### Refactoring
34
+
35
+ - Drop the current_<name> alias from the rodauth mixin
36
+
37
+ ### Wizard
38
+
39
+ - Docs accuracy + completeness audit, plus a per-field Shrine uploader for attachments ([#64](https://github.com/radioactive-labs/plutonium-core/issues/64))
40
+
41
+ ## [0.60.5] - 2026-06-30
42
+
43
+ ### 🐛 Bug Fixes
44
+
45
+ - *(ui)* Coerce ActiveStorage::Filename to String for HTML title attributes
46
+
47
+ ### ⚙️ Miscellaneous Tasks
48
+
49
+ - Update yarn.lock and .yarnrc.yml after yarn install
50
+
1
51
  ## [0.60.4] - 2026-06-15
2
52
 
3
- ### 🚀 Features
53
+ ### Features
54
+
55
+ - Drop the section divider rule, keep the accent bar
4
56
 
5
- - *(layout)* Drop the section divider rule, keep the accent bar
6
57
  ## [0.60.3] - 2026-06-15
7
58
 
8
- ### 🚀 Features
59
+ ### Features
60
+
61
+ - Drop form_layout sections that resolve to zero fields
62
+ - Refine form_layout section header styling
9
63
 
10
- - *(layout)* Drop form_layout sections that resolve to zero fields
11
- - *(layout)* Refine form_layout section header styling
64
+ ### Refactoring
12
65
 
13
- ### 🚜 Refactor
66
+ - Move engine shell to Portal::Engine with live cascade
14
67
 
15
- - *(layout)* Move engine shell to Portal::Engine with live cascade
16
68
  ## [0.60.2] - 2026-06-15
17
69
 
18
- ### 🚀 Features
70
+ ### Features
71
+
72
+ - Resolve shell across global, engine, and controller tiers
19
73
 
20
- - *(layout)* Resolve shell across global, engine, and controller tiers
21
74
  ## [0.60.1] - 2026-06-15
22
75
 
23
- ### 🚀 Features
76
+ ### Bug Fixes
24
77
 
25
- - *(layout)* First-class railless portal support
78
+ - Skip section fields not in the permitted set instead of raising
26
79
 
27
- ### 🐛 Bug Fixes
80
+ ### Features
81
+
82
+ - First-class railless portal support
28
83
 
29
- - *(forms)* Skip section fields not in the permitted set instead of raising
30
84
  ## [0.60.0] - 2026-06-14
31
85
 
32
- ### 🚀 Features
86
+ ### Features
87
+
88
+ - Add resend-invite action to rodauth admin
89
+ - Form sectioning DSL (form_layout / section / ungrouped) ([#61](https://github.com/radioactive-labs/plutonium-core/issues/61))
33
90
 
34
- - *(generators)* Add resend-invite action to rodauth admin
35
- - *(forms)* Form sectioning DSL (form_layout / section / ungrouped) (#61)
36
91
  ## [0.59.0] - 2026-06-13
37
92
 
38
- ### 🚀 Features
93
+ ### Bug Fixes
39
94
 
40
- - *(resource)* Add built-in policy-gated CSV export
95
+ - Configure solid_errors reading connection and env lookup
96
+ - Resolve association filter class via resource_class reflection
41
97
 
42
- ### 🐛 Bug Fixes
98
+ ### Features
99
+
100
+ - Add built-in policy-gated CSV export
43
101
 
44
- - *(generators)* Configure solid_errors reading connection and env lookup
45
- - *(query)* Resolve association filter class via resource_class reflection
46
102
  ## [0.58.1] - 2026-06-10
47
103
 
48
- ### 🐛 Bug Fixes
104
+ ### Bug Fixes
105
+
106
+ - Prevent pu-rail-pinned persisting on non-rail pages
49
107
 
50
- - *(ui/layout)* Prevent pu-rail-pinned persisting on non-rail pages
51
108
  ## [0.58.0] - 2026-06-10
52
109
 
53
- ### 🐛 Bug Fixes
110
+ ### Bug Fixes
111
+
112
+ - Set url_options directly on ActionMailer::Base instead of config
113
+ - Short-circuit call with failure when validation fails
114
+ - Pre-populate extraction record so conditioned selects resolve correctly
115
+ - Use after_commit to avoid orphaned email jobs on rollback
54
116
 
55
- - *(rodauth)* Set url_options directly on ActionMailer::Base instead of config
56
- - *(interaction)* Short-circuit call with failure when validation fails
57
- - *(form)* Pre-populate extraction record so conditioned selects resolve correctly
58
- - *(invites)* Use after_commit to avoid orphaned email jobs on rollback
59
117
  ## [0.57.0] - 2026-06-09
60
118
 
61
- ### 🚀 Features
119
+ ### Bug Fixes
62
120
 
63
- - *(scopes)* Add display-only condition: to scopes
121
+ - Guard tailwind prerequisite and fix landing page command
122
+ - Guard against nil current_scoped_entity in remember_scoped_entity
123
+ - Use dynamic viewport height to prevent clipping on mobile
64
124
 
65
- ### 🐛 Bug Fixes
125
+ ### Features
66
126
 
67
- - *(generators/assets)* Guard tailwind prerequisite and fix landing page command
68
- - *(entity_scoping)* Guard against nil current_scoped_entity in remember_scoped_entity
69
- - *(ui/slideover)* Use dynamic viewport height to prevent clipping on mobile
127
+ - Add display-only condition: to scopes
70
128
 
71
- ### ⚙️ Miscellaneous Tasks
129
+ ### Miscellaneous Tasks
130
+
131
+ - Add skill sync to plutonium template and use conventional commits
72
132
 
73
- - *(templates)* Add skill sync to plutonium template and use conventional commits
74
133
  ## [0.56.3] - 2026-06-07
75
134
 
76
- ### 🐛 Bug Fixes
135
+ ### Bug Fixes
136
+
137
+ - Use dynamic viewport height so mobile rail toggle stays visible
138
+ - Link icon rail logo to home
139
+ - Default icon rail to pinned
140
+ - Let scopes bar scroll horizontally on small screens
77
141
 
78
- - *(ui/sidebar)* Use dynamic viewport height so mobile rail toggle stays visible
79
- - *(ui/sidebar)* Link icon rail logo to home
80
- - *(ui/sidebar)* Default icon rail to pinned
81
- - *(ui/table)* Let scopes bar scroll horizontally on small screens
82
142
  ## [0.56.2] - 2026-06-05
83
143
 
84
- ### 🐛 Bug Fixes
144
+ ### Bug Fixes
145
+
146
+ - Run skills sync in unbundled env
147
+ - Prevent large page numbers from overflowing buttons
85
148
 
86
- - *(generators/update)* Run skills sync in unbundled env
87
- - *(ui/pagination)* Prevent large page numbers from overflowing buttons
88
149
  ## [0.56.1] - 2026-06-05
89
150
 
90
- ### 🚀 Features
151
+ ### Bug Fixes
91
152
 
92
- - *(actions)* Add display-only condition: to actions
153
+ - Version-adapt kitchen_sinks migration
93
154
 
94
- ### 🐛 Bug Fixes
155
+ ### Documentation
95
156
 
96
- - *(dummy)* Version-adapt kitchen_sinks migration
157
+ - Recommend db:prepare, firm up README, document conditional actions
97
158
 
98
- ### 📚 Documentation
159
+ ### Features
160
+
161
+ - Add display-only condition: to actions
99
162
 
100
- - Recommend db:prepare, firm up README, document conditional actions
101
163
  ## [0.56.0] - 2026-06-05
102
164
 
103
- ### 🚀 Features
165
+ ### Bug Fixes
104
166
 
105
- - *(ui)* Auto-rendered components for boolean, enum & money fields
106
- - *(generators/lite)* Add pu:lite:tune and pu:lite:maintenance for SQLite tuning + maintenance
107
- - *(ui)* Sidebar menu items accept arbitrary link attributes
108
- - *(ui)* Restore deleted nested rows + shared, polished removed bar
109
- - *(ui)* Type-aware grid cards + overhaul KitchenSink dummy resource
167
+ - Sync skills in a fresh process; pin post-install notice to 0.49.0
168
+ - Native multi-selects render at a usable height
169
+ - Dropdown menu teleports to <body> to escape overflow clipping
170
+ - Force :resources route_type for has_many nested routes
171
+ - Record-scoped commit URL for actions with record_action: false
172
+ - Serialize JSON values via as_json (ISO 8601 datetimes)
173
+ - Add reading role to Rails Pulse connects_to config
174
+ - Bind subject during interaction param extraction
175
+ - Dirty-form-guard tracks edits via first-interaction baseline
176
+ - Give the JSON form input dark-mode styling
110
177
 
111
- ### 🐛 Bug Fixes
178
+ ### Features
112
179
 
113
- - *(generators/update)* Sync skills in a fresh process; pin post-install notice to 0.49.0
114
- - *(ui)* Native multi-selects render at a usable height
115
- - *(ui)* Dropdown menu teleports to <body> to escape overflow clipping
116
- - *(routing)* Force :resources route_type for has_many nested routes
117
- - *(ui)* Record-scoped commit URL for actions with record_action: false
118
- - *(api)* Serialize JSON values via as_json (ISO 8601 datetimes)
119
- - *(generators)* Add reading role to Rails Pulse connects_to config
120
- - *(actions)* Bind subject during interaction param extraction
121
- - *(ui)* Dirty-form-guard tracks edits via first-interaction baseline
122
- - *(ui)* Give the JSON form input dark-mode styling
180
+ - Auto-rendered components for boolean, enum & money fields
181
+ - Add pu:lite:tune and pu:lite:maintenance for SQLite tuning + maintenance
182
+ - Sidebar menu items accept arbitrary link attributes
183
+ - Restore deleted nested rows + shared, polished removed bar
184
+ - Type-aware grid cards + overhaul KitchenSink dummy resource
123
185
 
124
- ### 🧪 Testing
186
+ ### Miscellaneous Tasks
125
187
 
126
- - Fix stale generator assertions and drop committed dummy schema
127
- - *(dummy)* Add KitchenSink resource exercising every input/display type
188
+ - Sync appraisal gemfile.lock files to v0.55.0
128
189
 
129
- ### ⚙️ Miscellaneous Tasks
190
+ ### Testing
191
+
192
+ - Fix stale generator assertions and drop committed dummy schema
193
+ - Add KitchenSink resource exercising every input/display type
130
194
 
131
- - Sync appraisal gemfile.lock files to v0.55.0
132
195
  ## [0.55.0] - 2026-06-03
133
196
 
134
- ### 🚀 Features
197
+ ### Bug Fixes
135
198
 
136
- - Structured_input classless structured & repeater inputs (resources + interactions) (#60)
199
+ - Keep modal backdrop static to smooth dialog dismiss
137
200
 
138
- ### 🐛 Bug Fixes
201
+ ### Features
139
202
 
140
- - *(ui)* Keep modal backdrop static to smooth dialog dismiss
203
+ - Structured_input classless structured & repeater inputs (resources + interactions) ([#60](https://github.com/radioactive-labs/plutonium-core/issues/60))
141
204
 
142
- ### 🧪 Testing
205
+ ### Testing
206
+
207
+ - Land authenticated users on the entity-scoped org portal
208
+ - Serve the Organization resource in the org portal
143
209
 
144
- - *(dummy)* Land authenticated users on the entity-scoped org portal
145
- - *(dummy)* Serve the Organization resource in the org portal
146
210
  ## [0.54.0] - 2026-06-01
147
211
 
148
- ### 🚀 Features
212
+ ### Bug Fixes
149
213
 
150
- - *(ui)* Refine file-input height and required-marker theming
214
+ - Match Plutonium::Engine by name to survive dev reload
215
+ - Carry only an explicit return_to on resource forms
216
+ - Ignore bubbled file-input cancel in modal dialogs
217
+ - Cap icon-rail flyout to the viewport height
151
218
 
152
- ### 🐛 Bug Fixes
219
+ ### Features
153
220
 
154
- - *(engine)* Match Plutonium::Engine by name to survive dev reload
155
- - *(ui)* Carry only an explicit return_to on resource forms
156
- - *(ui)* Ignore bubbled file-input cancel in modal dialogs
157
- - *(ui)* Cap icon-rail flyout to the viewport height
221
+ - Refine file-input height and required-marker theming
158
222
 
159
- ### 🚜 Refactor
223
+ ### Miscellaneous Tasks
160
224
 
161
- - *(ui)* Render flash via self-contained component classes
225
+ - Rebuild bundled assets
162
226
 
163
- ### 🧪 Testing
227
+ ### Refactoring
164
228
 
165
- - *(ui)* Characterize nested resource and interaction form rendering
229
+ - Render flash via self-contained component classes
166
230
 
167
- ### ⚙️ Miscellaneous Tasks
231
+ ### Testing
232
+
233
+ - Characterize nested resource and interaction form rendering
168
234
 
169
- - *(assets)* Rebuild bundled assets
170
235
  ## [0.53.1] - 2026-05-31
171
236
 
172
- ### 🐛 Bug Fixes
237
+ ### Bug Fixes
238
+
239
+ - Tolerate non-Plutonium engines during route reload
173
240
 
174
- - *(routing)* Tolerate non-Plutonium engines during route reload
175
241
  ## [0.53.0] - 2026-05-31
176
242
 
177
- ### 🚀 Features
243
+ ### Bug Fixes
178
244
 
179
- - *(ui)* Add Avatar component with Navii fallback (#59)
245
+ - Correct broken cross-page anchors in guides
246
+ - Retract incorrect "never super" guidance in relation_scope
247
+ - Correct scoped-URL shape in multi-tenancy docs
248
+ - Match change_password_notify mailer template name
180
249
 
181
- ### 🐛 Bug Fixes
250
+ ### Features
182
251
 
183
- - *(docs)* Correct broken cross-page anchors in guides
184
- - *(docs)* Retract incorrect "never super" guidance in relation_scope
185
- - *(docs)* Correct scoped-URL shape in multi-tenancy docs
186
- - *(rodauth)* Match change_password_notify mailer template name
252
+ - Add Avatar component with Navii fallback ([#59](https://github.com/radioactive-labs/plutonium-core/issues/59))
187
253
 
188
- ### 🚜 Refactor
254
+ ### Refactoring
255
+
256
+ - Remove dead view helpers superseded by Phlex components
189
257
 
190
- - *(helpers)* Remove dead view helpers superseded by Phlex components
191
258
  ## [0.52.0] - 2026-05-21
192
259
 
193
- ### 🐛 Bug Fixes
260
+ ### Bug Fixes
194
261
 
195
- - *(generators)* Use inclusion validation for required booleans
196
- - *(generators/assets)* Warn on failed yarn add instead of silently continuing
197
- - *(docs)* Let StopWriting terminals scroll horizontally instead of overflowing the column
198
- - *(docs)* Drop misleading 15-min claim — hero CTA → 'Tutorial', getting-started title → 'Learn Plutonium by building'
199
- - *(generators,docs)* Tutorial walkthrough + reference audit (#57)
200
- - *(ui/form)* Scope form ids per turbo frame to prevent stream-replace collisions
201
- - *(ui/form)* Hide secure_association "+" inside secondary modal
202
- - *(js/form)* Dedupe pre_submit hidden field on repeat change events
203
- - *(ui)* Form error alert margin + include model name in New/Edit page titles
262
+ - Use inclusion validation for required booleans
263
+ - Warn on failed yarn add instead of silently continuing
264
+ - Let StopWriting terminals scroll horizontally instead of overflowing the column
265
+ - Drop misleading 15-min claim — hero CTA → 'Tutorial', getting-started title → 'Learn Plutonium by building'
266
+ - Tutorial walkthrough + reference audit ([#57](https://github.com/radioactive-labs/plutonium-core/issues/57))
267
+ - Scope form ids per turbo frame to prevent stream-replace collisions
268
+ - Hide secure_association "+" inside secondary modal
269
+ - Dedupe pre_submit hidden field on repeat change events
270
+ - Form error alert margin + include model name in New/Edit page titles
204
271
 
205
- ### ⚙️ Miscellaneous Tasks
272
+ ### Miscellaneous Tasks
273
+
274
+ - Refresh rails-8.1 gemfile.lock for v0.51.0
206
275
 
207
- - *(appraisal)* Refresh rails-8.1 gemfile.lock for v0.51.0
208
276
  ## [0.51.0] - 2026-05-14
209
277
 
210
- ### 🚀 Features
278
+ ### Bug Fixes
211
279
 
212
- - *(form)* Stack secondary modal for inline "+" on associations
213
- - *(form)* Json/jsonb input component with raw-value support
214
- - Typeahead endpoint for resource form inputs and filters (#55)
280
+ - Stabilize generator test suite against hangs
281
+ - Validate association SGIDs against full authz scope
282
+ - Keep yarn out of the parent TTY
215
283
 
216
- ### 🐛 Bug Fixes
284
+ ### Documentation
217
285
 
218
- - *(test)* Stabilize generator test suite against hangs
219
- - *(form)* Validate association SGIDs against full authz scope
220
- - *(release)* Keep yarn out of the parent TTY
286
+ - Restructure into 7 functional areas + rewrite guides as task recipes
221
287
 
222
- ### 🚜 Refactor
288
+ ### Features
223
289
 
224
- - *(definition)* Rename views DSL to index_views
225
- - *(skills)* Compact and merge 19 skills into 8
290
+ - Stack secondary modal for inline "+" on associations
291
+ - Json/jsonb input component with raw-value support
292
+ - Typeahead endpoint for resource form inputs and filters ([#55](https://github.com/radioactive-labs/plutonium-core/issues/55))
226
293
 
227
- ### 📚 Documentation
294
+ ### Miscellaneous Tasks
228
295
 
229
- - Restructure into 7 functional areas + rewrite guides as task recipes
296
+ - Bump frontend deps to clear Dependabot alerts
297
+ - Bump appraisal lockfiles to 0.50.0
298
+ - Drop dead pin_shell_to_classic hook
230
299
 
231
- ### ⚙️ Miscellaneous Tasks
300
+ ### Refactoring
301
+
302
+ - Rename views DSL to index_views
303
+ - Compact and merge 19 skills into 8
232
304
 
233
- - Bump appraisal lockfiles to 0.50.0
234
- - *(generators/update)* Drop dead pin_shell_to_classic hook
235
305
  ## [0.50.0] - 2026-05-11
236
306
 
237
- ### 🚀 Features
307
+ ### Bug Fixes
238
308
 
239
- - *(css)* Style WebKit autofill on .pu-input variants
309
+ - Suppress label and chrome for hidden fields
310
+ - Inject recurring tasks under env blocks
240
311
 
241
- ### 🐛 Bug Fixes
312
+ ### Features
313
+
314
+ - Style WebKit autofill on .pu-input variants
242
315
 
243
- - *(ui/form)* Suppress label and chrome for hidden fields
244
- - *(generators/rails_pulse)* Inject recurring tasks under env blocks
245
316
  ## [0.49.1] - 2026-05-06
246
317
 
247
- ### 🚀 Features
318
+ ### Bug Fixes
248
319
 
249
- - *(invites)* Support multiple invite models per app
320
+ - Scope parent association only to matching relations
321
+ - Preserve sidebar scroll across Turbo navigations
322
+ - Add invite_entity_attribute hook for non-:entity invite models
323
+ - Restore default layout on direct loads
324
+ - Unblock acceptance + non-importmap apps
325
+ - Force text/html on failure response
326
+ - Position calendar correctly inside modal dialogs
250
327
 
251
- ### 🐛 Bug Fixes
328
+ ### Features
329
+
330
+ - Support multiple invite models per app
252
331
 
253
- - *(policy)* Scope parent association only to matching relations
254
- - *(ui)* Preserve sidebar scroll across Turbo navigations
255
- - *(invites)* Add invite_entity_attribute hook for non-:entity invite models
256
- - *(interactive_actions)* Restore default layout on direct loads
257
- - *(invites)* Unblock acceptance + non-importmap apps
258
- - *(interactive_actions)* Force text/html on failure response
259
- - *(flatpickr)* Position calendar correctly inside modal dialogs
260
332
  ## [0.49.0] - 2026-05-04
261
333
 
262
- ### 🚀 Features
334
+ ### Bug Fixes
263
335
 
264
- - *(generators)* Add `pu:gem:actual_db_schema` and wire into app template
265
- - *(ui)* Add auto mode to color mode selector
266
- - *(ui)* Render color mode selector on rodauth layout
267
- - *(generators)* Flesh out rails_pulse initializer template
336
+ - Return clean 403 from non-HTML unauthorized handler
337
+ - Align pu:lite:rails_pulse with v0.3 schema flow
338
+ - Prefer main_app.root_path over login_redirect
268
339
 
269
- ### 🐛 Bug Fixes
340
+ ### Features
270
341
 
271
- - *(controller)* Return clean 403 from non-HTML unauthorized handler
272
- - *(generators)* Align pu:lite:rails_pulse with v0.3 schema flow
273
- - *(rodauth)* Prefer main_app.root_path over login_redirect
342
+ - Add `pu:gem:actual_db_schema` and wire into app template
343
+ - Add auto mode to color mode selector
344
+ - Render color mode selector on rodauth layout
345
+ - Flesh out rails_pulse initializer template
274
346
 
275
- ### 🚜 Refactor
347
+ ### Miscellaneous Tasks
276
348
 
277
- - *(routing)* Rename entity scope prefix from `_scope` to `_scoped`
349
+ - Rename :client_max_limit to :max_limit
350
+ - Run appraisals
278
351
 
279
- ### ⚙️ Miscellaneous Tasks
352
+ ### Refactoring
353
+
354
+ - Rename entity scope prefix from `_scope` to `_scoped`
280
355
 
281
- - *(pagy)* Rename :client_max_limit to :max_limit
282
- - Run appraisals
283
356
  ## [0.48.0] - 2026-04-16
284
357
 
285
- ### 🚀 Features
358
+ ### Bug Fixes
286
359
 
287
- - *(turbo)* Preserve scroll by emitting refresh when redirect target matches referer
360
+ - Respect `confirmation: false` on interactive actions
288
361
 
289
- ### 🐛 Bug Fixes
362
+ ### Features
363
+
364
+ - Preserve scroll by emitting refresh when redirect target matches referer
290
365
 
291
- - *(action)* Respect `confirmation: false` on interactive actions
366
+ ### Testing
292
367
 
293
- ### 🧪 Testing
368
+ - Browser coverage for Turbo refresh + scroll preservation
294
369
 
295
- - *(system)* Browser coverage for Turbo refresh + scroll preservation
296
370
  ## [0.47.0] - 2026-04-15
297
371
 
298
- ### 🚀 Features
372
+ ### Features
299
373
 
300
- - *(core)* Add `interaction:` kwarg to resource_url_for
301
- - *(testing)* Add Plutonium::Testing module, generators, skill, docs, and migrate in-repo tests
374
+ - Add `interaction:` kwarg to resource_url_for
375
+ - Add Plutonium::Testing module, generators, skill, docs, and migrate in-repo tests
302
376
 
303
- ### ⚙️ Miscellaneous Tasks
377
+ ### Miscellaneous Tasks
304
378
 
305
379
  - Update yarn
380
+
306
381
  ## [0.46.0] - 2026-04-11
307
382
 
308
- ### 🚀 Features
383
+ ### Bug Fixes
309
384
 
310
- - *(profile)* Default profile model to {UserModel}Profile
311
- - *(generators)* Sync skills during pu:core:update if plutonium skill is installed
312
- - *(generators/active_shrine)* Disable Active Storage railtie and include ActiveShrine::Model
385
+ - Resolve scoped entity class lazily to survive autoreload
386
+ - Render page title in layout, drop per-view h1s
387
+ - Use derived user association in current_membership
388
+ - Redirect to login after verification email sent
313
389
 
314
- ### 🐛 Bug Fixes
390
+ ### Documentation
315
391
 
316
- - *(engine)* Resolve scoped entity class lazily to survive autoreload
317
- - *(rodauth)* Render page title in layout, drop per-view h1s
318
- - *(generators/invites)* Use derived user association in current_membership
319
- - *(generators/rodauth)* Redirect to login after verification email sent
392
+ - Clarify generator gotchas for installation, rodauth, and unattended runs
393
+ - Comprehensive Plutonium skills overhaul
394
+ - Document nested_attributes gotchas in policy and definition
320
395
 
321
- ### 🚜 Refactor
396
+ ### Features
322
397
 
323
- - *(generators)* Add inject_into_concerns_controller to merge included blocks
398
+ - Default profile model to {UserModel}Profile
399
+ - Sync skills during pu:core:update if plutonium skill is installed
400
+ - Disable Active Storage railtie and include ActiveShrine::Model
324
401
 
325
- ### 📚 Documentation
402
+ ### Miscellaneous Tasks
326
403
 
327
- - *(skills)* Clarify generator gotchas for installation, rodauth, and unattended runs
328
- - *(skills)* Comprehensive Plutonium skills overhaul
329
- - *(skills)* Document nested_attributes gotchas in policy and definition
404
+ - Update test lockfiles
330
405
 
331
- ### ⚙️ Miscellaneous Tasks
406
+ ### Refactoring
407
+
408
+ - Add inject_into_concerns_controller to merge included blocks
332
409
 
333
- - Update test lockfiles
334
410
  ## [0.45.3] - 2026-04-07
335
411
 
336
- ### 🐛 Bug Fixes
412
+ ### Bug Fixes
413
+
414
+ - Use Pagy::OPTIONS instead of frozen DEFAULT
337
415
 
338
- - *(pagy)* Use Pagy::OPTIONS instead of frozen DEFAULT
339
416
  ## [0.45.2] - 2026-04-07
340
417
 
341
- ### 🐛 Bug Fixes
418
+ ### Bug Fixes
419
+
420
+ - Honor limit param by setting client_max_limit
342
421
 
343
- - *(pagy)* Honor limit param by setting client_max_limit
344
422
  ## [0.45.1] - 2026-04-02
345
423
 
346
- ### 🐛 Bug Fixes
424
+ ### Bug Fixes
425
+
426
+ - Use named route helpers for top-level resource URLs
347
427
 
348
- - *(routing)* Use named route helpers for top-level resource URLs
349
428
  ## [0.45.0] - 2026-04-01
350
429
 
351
- ### 🚀 Features
430
+ ### Bug Fixes
352
431
 
353
- - *(generator)* Add entity link to portal resource header
354
- - *(tokens)* Add --pu-text-danger CSS token
432
+ - Suffix scoped_entity_param_key to prevent route param collision
433
+ - Add view path and fix nested form in invitation template
355
434
 
356
- ### 🐛 Bug Fixes
435
+ ### Features
357
436
 
358
- - *(engine)* Suffix scoped_entity_param_key to prevent route param collision
359
- - *(invites)* Add view path and fix nested form in invitation template
437
+ - Add entity link to portal resource header
438
+ - Add --pu-text-danger CSS token
360
439
 
361
- ### 🚜 Refactor
440
+ ### Refactoring
441
+
442
+ - Consolidate skills and improve discoverability
362
443
 
363
- - *(skills)* Consolidate skills and improve discoverability
364
444
  ## [0.44.1] - 2026-03-30
365
445
 
366
- ### 🐛 Bug Fixes
446
+ ### Bug Fixes
447
+
448
+ - Register rescue responses before action_dispatch.configure
449
+ - Pass association SGIDs in create params to match form submission
450
+
451
+ ### Miscellaneous Tasks
367
452
 
368
- - *(railtie)* Register rescue responses before action_dispatch.configure
369
- - *(test)* Pass association SGIDs in create params to match form submission
453
+ - Bump phlexi-form to >= 0.14.2
370
454
 
371
- ### 🚜 Refactor
455
+ ### Refactoring
456
+
457
+ - Use upstream @raw_choices from phlexi-form 0.14.2
372
458
 
373
- - *(form)* Use upstream @raw_choices from phlexi-form 0.14.2
374
459
  ## [0.44.0] - 2026-03-30
375
460
 
376
- ### 🚀 Features
461
+ ### Bug Fixes
377
462
 
378
- - Support singular parent resources and entity scoping in nested URL generation
379
- - *(generators)* Add pu:saas:welcome generator for post-login onboarding
380
- - *(generators)* Extend pu:saas:setup with portal, welcome, invites, and profile
463
+ - Lazy-load sequel to avoid requiring it when Rodauth is unused
381
464
 
382
- ### 🐛 Bug Fixes
465
+ ### Features
383
466
 
384
- - *(auth)* Lazy-load sequel to avoid requiring it when Rodauth is unused
467
+ - Support singular parent resources and entity scoping in nested URL generation
468
+ - Add pu:saas:welcome generator for post-login onboarding
469
+ - Extend pu:saas:setup with portal, welcome, invites, and profile
385
470
 
386
- ### 🚜 Refactor
471
+ ### Refactoring
387
472
 
388
473
  - Upgrade pagy from v9 to v43
389
- - *(generators)* Improve SaaS generators and shared concerns
390
- - *(invites)* Improve welcome flow, idempotent routes, and skip action
391
- - *(generators)* Add non-interactive prompt, improve build tooling and association resolver
392
- - *(test)* Restructure dummy app with catalog, multi-portal architecture
393
- ## [0.43.2] - 2026-03-13
394
-
395
- ### 🐛 Bug Fixes
474
+ - Improve SaaS generators and shared concerns
475
+ - Improve welcome flow, idempotent routes, and skip action
476
+ - Add non-interactive prompt, improve build tooling and association resolver
477
+ - Restructure dummy app with catalog, multi-portal architecture
396
478
 
397
- - *(invites)* Use enum name for status and correct interaction base class
479
+ ## [0.43.2] - 2026-03-13
398
480
 
399
- ### 🚜 Refactor
481
+ ### Bug Fixes
400
482
 
401
- - *(auth)* Extract current_policy_context to base authorizable
402
- - *(invites)* Use Rodauth module include and remove dead code
483
+ - Use enum name for status and correct interaction base class
403
484
 
404
- ### ⚙️ Miscellaneous Tasks
485
+ ### Miscellaneous Tasks
405
486
 
406
- - *(tests)* Fix generator assertions and remove dead code
487
+ - Fix generator assertions and remove dead code
407
488
  - Remove trailing blank line in model_generator_base
408
489
  - Update Ruby to 3.4 and refresh dependencies
409
- ## [0.43.1] - 2026-03-09
410
490
 
411
- ### 🐛 Bug Fixes
491
+ ### Refactoring
412
492
 
413
- - *(ui)* Fix scope comparison and clean up scopes bar component
414
- - *(release)* Auto-run npm login instead of aborting on missing auth
415
- ## [0.43.0] - 2026-03-05
493
+ - Extract current_policy_context to base authorizable
494
+ - Use Rodauth module include and remove dead code
416
495
 
417
- ### 🚀 Features
496
+ ## [0.43.1] - 2026-03-09
418
497
 
419
- - *(generators)* Add TypeSpec API specification generator
420
- - *(forms)* Make submit_and_continue button configurable
421
- - *(generators)* Add package destination and namespace handling to invites
422
- - *(controller)* Auto-detect entity association by class
423
- - *(generators)* Add profile generators for user settings pages
424
- - *(auth)* Add profile_url helper method to rodauth module
498
+ ### Bug Fixes
425
499
 
426
- ### 🐛 Bug Fixes
500
+ - Fix scope comparison and clean up scopes bar component
501
+ - Auto-run npm login instead of aborting on missing auth
427
502
 
428
- - *(ui)* Support custom primary keys and optional timestamps
429
- - *(routing)* Handle singular resources and entity scoping correctly
430
- - *(generators)* Improve robustness and package support
431
- - *(resource)* Handle class reloading in associated_with scope
432
- - *(ui)* Show profile link in user menu only when profile_url defined
433
- - *(generators)* Fix invites templates and null attribute handling
503
+ ## [0.43.0] - 2026-03-05
434
504
 
435
- ### 🚜 Refactor
505
+ ### Bug Fixes
436
506
 
437
- - *(ui)* Extract breadcrumb rendering methods and add tests
507
+ - Support custom primary keys and optional timestamps
508
+ - Handle singular resources and entity scoping correctly
509
+ - Improve robustness and package support
510
+ - Handle class reloading in associated_with scope
511
+ - Show profile link in user menu only when profile_url defined
512
+ - Fix invites templates and null attribute handling
438
513
 
439
- ### 📚 Documentation
514
+ ### Documentation
440
515
 
441
516
  - Add profile guide and update skill documentation
442
517
 
443
- ### 🧪 Testing
518
+ ### Features
444
519
 
445
- - Add OrgPortal fixture for entity scoping tests
446
- - Add tests for routing, authorization, and display helpers
520
+ - Add TypeSpec API specification generator
521
+ - Make submit_and_continue button configurable
522
+ - Add package destination and namespace handling to invites
523
+ - Auto-detect entity association by class
524
+ - Add profile generators for user settings pages
525
+ - Add profile_url helper method to rodauth module
447
526
 
448
- ### ⚙️ Miscellaneous Tasks
527
+ ### Miscellaneous Tasks
449
528
 
450
529
  - Add profile_url stub to controller template and test fixtures
451
- ## [0.42.0] - 2026-02-14
452
530
 
453
- ### 🚀 Features
531
+ ### Refactoring
454
532
 
455
- - *(ui)* Add clipboard controller and fix modal scroll lock
456
- - *(interaction)* Add turbo stream support to render response
457
- - *(interaction)* Add scoping concern for entity/parent access
458
- - *(generators)* Enhance rodauth generators
459
- - *(generators)* Add API client generator for SaaS apps
533
+ - Extract breadcrumb rendering methods and add tests
460
534
 
461
- ### 🚜 Refactor
535
+ ### Testing
536
+
537
+ - Add OrgPortal fixture for entity scoping tests
538
+ - Add tests for routing, authorization, and display helpers
462
539
 
463
- - *(tests)* Consolidate generator test cleanup with git restore
540
+ ## [0.42.0] - 2026-02-14
464
541
 
465
- ### 📚 Documentation
542
+ ### Documentation
466
543
 
467
544
  - Update generator documentation and improve saas generators
468
545
 
469
- ### 🧪 Testing
546
+ ### Features
470
547
 
471
- - Add unit tests for api client and response concerns
548
+ - Add clipboard controller and fix modal scroll lock
549
+ - Add turbo stream support to render response
550
+ - Add scoping concern for entity/parent access
551
+ - Enhance rodauth generators
552
+ - Add API client generator for SaaS apps
472
553
 
473
- ### ⚙️ Miscellaneous Tasks
554
+ ### Miscellaneous Tasks
474
555
 
475
556
  - Update gemfile locks
557
+
558
+ ### Refactoring
559
+
560
+ - Consolidate generator test cleanup with git restore
561
+
562
+ ### Testing
563
+
564
+ - Add unit tests for api client and response concerns
565
+
476
566
  ## [0.41.1] - 2026-02-09
477
567
 
478
- ### 🚀 Features
568
+ ### Features
569
+
570
+ - Support JSON default values for jsonb fields
479
571
 
480
- - *(generators)* Support JSON default values for jsonb fields
481
572
  ## [0.41.0] - 2026-02-09
482
573
 
483
- ### 🚀 Features
574
+ ### Bug Fixes
484
575
 
485
- - *(generators)* Add default value support and improve SQLite compatibility
486
- - *(generators)* Add class_name option for belongs_to fields
487
- - *(generators)* Add --policy and --definition flags to conn generator
576
+ - Fix has_many association injection pattern
577
+ - Add missing scripts to package.json in assets generator
578
+ - Remove primary account support for rodauth
579
+ - Use top-level Gem::Version to avoid namespace collision
580
+ - Check resource registration before generating association add URL
488
581
 
489
- ### 🐛 Bug Fixes
582
+ ### Documentation
583
+
584
+ - Add class_name option and associations section to generator docs
490
585
 
491
- - *(generators)* Fix has_many association injection pattern
492
- - *(generators)* Add missing scripts to package.json in assets generator
493
- - *(generators)* Remove primary account support for rodauth
494
- - *(generators)* Use top-level Gem::Version to avoid namespace collision
495
- - *(ui)* Check resource registration before generating association add URL
586
+ ### Features
496
587
 
497
- ### 📚 Documentation
588
+ - Add default value support and improve SQLite compatibility
589
+ - Add class_name option for belongs_to fields
590
+ - Add --policy and --definition flags to conn generator
498
591
 
499
- - Add class_name option and associations section to generator docs
592
+ ### Testing
500
593
 
501
- ### 🧪 Testing
594
+ - Add tests for named rodauth account configuration
595
+ - Move type alias tests to core and test actual migrations
502
596
 
503
- - *(generators)* Add tests for named rodauth account configuration
504
- - *(sqlite)* Move type alias tests to core and test actual migrations
505
597
  ## [0.40.0] - 2026-02-04
506
598
 
507
- ### 🚀 Features
599
+ ### Bug Fixes
508
600
 
509
- - *(invites)* Add user invitation system for multi-tenant apps
510
- - *(generators)* Add roles and extra_attributes options to rodauth generators
511
- - *(generator)* Add --scope flag to portal generator for entity scoping
512
- - *(generator)* Add --singular flag to pu:res:conn for singular resources
513
- - *(generators)* Add pu:lite namespace for SQLite-based services
514
- - *(generators)* Add pu:saas namespace for multi-tenant SaaS setup
515
- - *(definition)* Add default_scope method for setting default query scope
601
+ - Scope load_memory to account-specific paths
602
+ - Resolve Thor invoke caching in entity generator
603
+ - Use dynamic migration versioning for Rails compatibility
604
+ - Wrap SQLite alias in defined? check for compatibility
605
+ - Add variants to product policy permitted attributes
606
+ - Improve has_one url assertion in resource_url_for test
607
+ - Normalize CamelCase package names and validate resource records
608
+ - Dedupe namespace and read model attrs with --no-model
609
+ - Use local gem path when LOCAL=1
610
+ - Guard against envs gems during template execution
611
+ - Run db:prepare after config in lite generators
612
+ - Restore ResourceController to portal generator
516
613
 
517
- ### 🐛 Bug Fixes
614
+ ### Documentation
615
+
616
+ - Add invites skill and update rodauth skill
617
+ - Add user invites guide
518
618
 
519
- - *(rodauth)* Scope load_memory to account-specific paths
520
- - *(generators)* Resolve Thor invoke caching in entity generator
521
- - *(test)* Use dynamic migration versioning for Rails compatibility
522
- - *(config)* Wrap SQLite alias in defined? check for compatibility
523
- - *(test)* Add variants to product policy permitted attributes
524
- - *(test)* Improve has_one url assertion in resource_url_for test
525
- - *(generators)* Normalize CamelCase package names and validate resource records
526
- - *(generators)* Dedupe namespace and read model attrs with --no-model
527
- - *(templates)* Use local gem path when LOCAL=1
528
- - *(generators)* Guard against envs gems during template execution
529
- - *(generators)* Run db:prepare after config in lite generators
530
- - *(generators)* Restore ResourceController to portal generator
619
+ ### Features
531
620
 
532
- ### 🚜 Refactor
621
+ - Add user invitation system for multi-tenant apps
622
+ - Add roles and extra_attributes options to rodauth generators
623
+ - Add --scope flag to portal generator for entity scoping
624
+ - Add --singular flag to pu:res:conn for singular resources
625
+ - Add pu:lite namespace for SQLite-based services
626
+ - Add pu:saas namespace for multi-tenant SaaS setup
627
+ - Add default_scope method for setting default query scope
533
628
 
534
- - *(generators)* Comment out default policy methods
629
+ ### Miscellaneous Tasks
535
630
 
536
- ### 📚 Documentation
631
+ - Update gemfile locks
632
+ - Remove old assets
537
633
 
538
- - *(skills)* Add invites skill and update rodauth skill
539
- - *(guides)* Add user invites guide
634
+ ### Refactoring
540
635
 
541
- ### 🧪 Testing
636
+ - Comment out default policy methods
542
637
 
543
- - *(generators)* Add tests for rodauth and invites generators
638
+ ### Testing
544
639
 
545
- ### ⚙️ Miscellaneous Tasks
640
+ - Add tests for rodauth and invites generators
546
641
 
547
- - Remove old assets
548
642
  ## [0.39.2] - 2026-01-27
549
643
 
550
- ### 🐛 Bug Fixes
644
+ ### Bug Fixes
551
645
 
552
646
  - Handle create and update nested routes
553
- ## [0.39.1] - 2026-01-26
554
647
 
555
- ### 🐛 Bug Fixes
648
+ ## [0.39.1] - 2026-01-26
556
649
 
557
- - *(ui)* Include ImageTag helper for AssetsHelper compatibility
558
- ## [0.39.0] - 2026-01-26
650
+ ### Bug Fixes
559
651
 
560
- ### 🚀 Features
652
+ - Include ImageTag helper for AssetsHelper compatibility
561
653
 
562
- - *(core)* Handle ActionPolicy::Unauthorized for non-HTML formats
563
- - *(interactive_actions)* Add non-HTML response handlers for successful actions
564
- - *(routing)* Add has_one nested resource support
565
- - *(routing)* [**breaking**] Refactor nested resource URL generation with named route helpers
566
- - *(policy)* Add default_relation_scope method with verification
567
- - *(nested)* Use association names for nested resource titles and breadcrumbs
654
+ ## [0.39.0] - 2026-01-26
568
655
 
569
- ### 🐛 Bug Fixes
656
+ ### Bug Fixes
570
657
 
571
658
  - Remove duplicate kv store controller and move improvements into original
572
- - *(filters)* Improve association filter class resolution
573
- - *(ui)* Improve dropdown positioning with viewport boundary
574
- - *(auth)* Dynamically detect database adapter for Rodauth (#51)
575
- - *(crud)* Use correct action attributes for form re-rendering on errors
576
- - *(form)* Distinguish empty vs not-submitted key-value store fields
577
- - *(controller)* Use existing record context for form param extraction
578
- - *(controller)* Prevent UrlGenerationError when extracting params for nested resource update
579
- - *(routing)* Correct URL generation for interactive actions on nested resources
580
- - *(ui)* Replace deprecated phlex-rails `helpers` method with `view_context`
581
- - *(routing)* Add named routes for commit actions and document route naming requirement
582
-
583
- ### 📚 Documentation
584
-
585
- - *(definition)* Document formatter option for columns and displays
659
+ - Improve association filter class resolution
660
+ - Improve dropdown positioning with viewport boundary
661
+ - Dynamically detect database adapter for Rodauth ([#51](https://github.com/radioactive-labs/plutonium-core/issues/51))
662
+ - Use correct action attributes for form re-rendering on errors
663
+ - Distinguish empty vs not-submitted key-value store fields
664
+ - Use existing record context for form param extraction
665
+ - Prevent UrlGenerationError when extracting params for nested resource update
666
+ - Correct URL generation for interactive actions on nested resources
667
+ - Replace deprecated phlex-rails `helpers` method with `view_context`
668
+ - Add named routes for commit actions and document route naming requirement
669
+
670
+ ### Documentation
671
+
672
+ - Document formatter option for columns and displays
586
673
  - Cleanup review definition
587
674
  - Add troubleshooting guide for inflection issue
588
675
  - Update nested resource routes to use nested_ prefix
589
676
 
590
- ### 🧪 Testing
677
+ ### Features
591
678
 
592
- - Refactor tests to use real module implementations instead of mocks
679
+ - Handle ActionPolicy::Unauthorized for non-HTML formats
680
+ - Add non-HTML response handlers for successful actions
681
+ - Add has_one nested resource support
682
+ - [**breaking**] Refactor nested resource URL generation with named route helpers
683
+ - Add default_relation_scope method with verification
684
+ - Use association names for nested resource titles and breadcrumbs
593
685
 
594
- ### ⚙️ Miscellaneous Tasks
686
+ ### Miscellaneous Tasks
595
687
 
596
688
  - Use chokidar to fix dev build cyclic dependency issues
597
689
  - Warn when running tests without Appraisal
598
690
  - Switch to yarn
599
691
  - Update og image
692
+
693
+ ### Testing
694
+
695
+ - Refactor tests to use real module implementations instead of mocks
696
+
600
697
  ## [0.37.0] - 2026-01-21
601
698
 
602
- ### 🚀 Features
699
+ ### Features
603
700
 
604
- - *(ui)* Add textarea auto-grow functionality
701
+ - Add textarea auto-grow functionality
605
702
 
606
- ### 🚜 Refactor
703
+ ### Refactoring
607
704
 
608
- - *(ui)* Migrate slim-select styles to design tokens
609
- ## [0.36.0] - 2026-01-21
705
+ - Migrate slim-select styles to design tokens
610
706
 
611
- ### 🚀 Features
707
+ ## [0.36.0] - 2026-01-21
612
708
 
613
- - *(generators)* Add pu:core:update to sync gem and npm versions
614
- ## [0.35.0] - 2026-01-20
709
+ ### Features
615
710
 
616
- ### 🚀 Features
711
+ - Add pu:core:update to sync gem and npm versions
617
712
 
618
- - Add demo_features package and demo_portal for testing
619
- - Implement bulk actions for resource tables
620
- - Modernize UI with design token system and component classes
621
- - Add actions dropdown for secondary and danger actions
622
- - Add form input type aliases for explicit field type declarations
623
- - Add built-in filter types with dropdown filter panel UI
624
- - *(display)* Add boolean and color components with type aliases
625
- - *(filters)* Add clear all button with filter-panel controller
713
+ ## [0.35.0] - 2026-01-20
626
714
 
627
- ### 🐛 Bug Fixes
715
+ ### Bug Fixes
628
716
 
629
717
  - Use turbo stream redirect action instead of HTTP 302 for form submissions
630
718
  - Exclude turbo_stream format from URL preservation
631
719
  - Improve table container scroll and telephone input padding
632
720
  - Pass unwrapped record into custom column blocks
633
- - *(docs)* Prevent h2 text cutoff in VitePress docs
634
-
635
- ### 🚜 Refactor
636
-
637
- - Remove ResourceController from portal generator
638
- - Rename skills with plutonium- prefix to avoid conflicts
639
- - Simplify dashboard templates with design system classes
640
- - *(ui)* Update auth pages with new design tokens
721
+ - Prevent h2 text cutoff in VitePress docs
641
722
 
642
- ### 📚 Documentation
723
+ ### Documentation
643
724
 
644
725
  - Improve interaction docs
645
726
  - Overhaul README, CONTRIBUTING, and add CLAUDE.md for development
@@ -657,156 +738,194 @@
657
738
  - Document authorization methods
658
739
  - Add skills for themeing specifically
659
740
 
660
- ### ⚙️ Miscellaneous Tasks
741
+ ### Features
742
+
743
+ - Add demo_features package and demo_portal for testing
744
+ - Implement bulk actions for resource tables
745
+ - Modernize UI with design token system and component classes
746
+ - Add actions dropdown for secondary and danger actions
747
+ - Add form input type aliases for explicit field type declarations
748
+ - Add built-in filter types with dropdown filter panel UI
749
+ - Add boolean and color components with type aliases
750
+ - Add clear all button with filter-panel controller
751
+
752
+ ### Miscellaneous Tasks
661
753
 
662
754
  - Optimize og graph title and images
663
755
  - Realign marketing material
664
756
  - Add seeds for demo models and fix foreign keys
665
757
  - Standardrb
666
- ## [0.34.1] - 2026-01-18
667
758
 
668
- ### 🐛 Bug Fixes
759
+ ### Refactoring
669
760
 
670
- - *(release)* Check npm auth early in release workflow
671
- - *(docs)* Correct generator flags to use --dest instead of --portal/--package
672
- ## [0.34.0] - 2026-01-18
761
+ - Remove ResourceController from portal generator
762
+ - Rename skills with plutonium- prefix to avoid conflicts
763
+ - Simplify dashboard templates with design system classes
764
+ - Update auth pages with new design tokens
673
765
 
674
- ### 🚀 Features
766
+ ## [0.34.1] - 2026-01-18
675
767
 
676
- - *(generators)* Configure default_url_options via RAILS_DEFAULT_URL env var
677
- - *(generators)* Add pu:skills:sync to install Claude Code skills
678
- - *(query)* Execute adhoc blocks in controller context
679
- - *(railtie)* Map ActionPolicy::Unauthorized to 403 Forbidden
680
- - *(query)* Add default scope support for resource queries
768
+ ### Bug Fixes
681
769
 
682
- ### 🐛 Bug Fixes
770
+ - Check npm auth early in release workflow
771
+ - Correct generator flags to use --dest instead of --portal/--package
772
+
773
+ ## [0.34.0] - 2026-01-18
683
774
 
684
- - *(controllers)* Handle turbo_stream format in CRUD and interactive actions
685
- - *(generators)* Support nullable syntax with type options
686
- - *(generators)* Prevent overwriting existing url_options configuration
687
- - *(generators)* Normalize reference names before comparing namespaces
688
- - *(package)* Include engine migrations in programmatic migration paths
689
- - *(release)* Handle missing version tag in next_version task
775
+ ### Bug Fixes
690
776
 
691
- ### 📚 Documentation
777
+ - Handle turbo_stream format in CRUD and interactive actions
778
+ - Support nullable syntax with type options
779
+ - Prevent overwriting existing url_options configuration
780
+ - Normalize reference names before comparing namespaces
781
+ - Include engine migrations in programmatic migration paths
782
+ - Handle missing version tag in next_version task
783
+
784
+ ### Documentation
692
785
 
693
786
  - Add Claude Code skills and improve generator documentation
694
787
  - Add definition skills and update module documentation
695
788
  - Add comprehensive Claude Code skills for resources
696
789
  - Add package and portal skills
697
790
  - Add interaction skill for business logic actions
698
- - *(skills)* Add new Claude Code skills and enhance existing ones
791
+ - Add new Claude Code skills and enhance existing ones
699
792
 
700
- ### 🎨 Styling
793
+ ### Features
701
794
 
702
- - Standardrb linting
795
+ - Configure default_url_options via RAILS_DEFAULT_URL env var
796
+ - Add pu:skills:sync to install Claude Code skills
797
+ - Execute adhoc blocks in controller context
798
+ - Map ActionPolicy::Unauthorized to 403 Forbidden
799
+ - Add default scope support for resource queries
703
800
 
704
- ### ⚙️ Miscellaneous Tasks
801
+ ### Miscellaneous Tasks
705
802
 
706
803
  - Overhaul documentation structure and test infrastructure
707
804
  - Move brakeman config to config/ and update ignore list
805
+
806
+ ### Styling
807
+
808
+ - Standardrb linting
809
+
708
810
  ## [0.33.0] - 2026-01-12
709
811
 
710
- ### ◀️ Revert
812
+ ### Revert
813
+
814
+ - Remove semantic design token system
711
815
 
712
- - *(ui)* Remove semantic design token system
713
816
  ## [0.32.0] - 2026-01-12
714
817
 
715
- ### 🐛 Bug Fixes
818
+ ### Bug Fixes
819
+
820
+ - Move fontFamily to theme root level
716
821
 
717
- - *(ui)* Move fontFamily to theme root level
718
822
  ## [0.31.0] - 2026-01-12
719
823
 
720
- ### 🚀 Features
824
+ ### Bug Fixes
721
825
 
722
- - *(ui)* Add cross-tab color mode synchronization
723
- - *(release)* Add npm package publishing support
724
- - *(ui)* Add semantic design token system for theming
826
+ - Preserve request format in redirects
827
+ - Reset policy cache before rendering create response for api calls
725
828
 
726
- ### 🐛 Bug Fixes
829
+ ### Features
727
830
 
728
- - *(core)* Preserve request format in redirects
729
- - *(api)* Reset policy cache before rendering create response for api calls
831
+ - Add cross-tab color mode synchronization
832
+ - Add npm package publishing support
833
+ - Add semantic design token system for theming
730
834
 
731
- ### ⚙️ Miscellaneous Tasks
732
-
733
- - *(release)* Build assets during prepare phase
734
- ## [0.28.0] - 2025-11-12
835
+ ### Miscellaneous Tasks
735
836
 
736
- ### 🚀 Features
837
+ - Build assets during prepare phase
737
838
 
738
- - Add sgid support and improve association serialization in API
839
+ ## [0.28.0] - 2025-11-12
739
840
 
740
- ### 🐛 Bug Fixes
841
+ ### Bug Fixes
741
842
 
742
843
  - Make controller_for inheritable and respect custom inflections
743
- ## [0.27.0] - 2025-11-05
744
844
 
745
- ### 🚀 Features
845
+ ### Features
746
846
 
747
- - Add field-level options support for input/display/column definitions
847
+ - Add sgid support and improve association serialization in API
748
848
 
749
- ### 🐛 Bug Fixes
849
+ ## [0.27.0] - 2025-11-05
850
+
851
+ ### Bug Fixes
750
852
 
751
853
  - Reload version constant in release:publish task
752
854
 
753
- ### 📚 Documentation
855
+ ### Documentation
754
856
 
755
857
  - Setup contribution guidelines using Conventional Commits
858
+
859
+ ### Features
860
+
861
+ - Add field-level options support for input/display/column definitions
862
+
756
863
  ## [0.26.9] - 2025-09-25
757
864
 
758
- ### 🚀 Features
865
+ ### Features
759
866
 
760
867
  - Disable csrf protection if authorization header is set
868
+
761
869
  ## [0.26.8] - 2025-08-11
762
870
 
763
- ### 🐛 Bug Fixes
871
+ ### Bug Fixes
872
+
873
+ - Prevent SQLite adapter error when using non-SQLite databases ([#42](https://github.com/radioactive-labs/plutonium-core/issues/42))
874
+ - Fix STI model routing logic in controller ([#43](https://github.com/radioactive-labs/plutonium-core/issues/43))
764
875
 
765
- - Prevent SQLite adapter error when using non-SQLite databases (#42)
766
- - Fix STI model routing logic in controller (#43)
767
876
  ## [0.26.6] - 2025-08-03
768
877
 
769
- ### 🚜 Refactor
878
+ ### Refactoring
879
+
880
+ - Enhance color mode selector and integrate into header layout ([#41](https://github.com/radioactive-labs/plutonium-core/issues/41))
770
881
 
771
- - Enhance color mode selector and integrate into header layout (#41)
772
882
  ## [0.26.2] - 2025-07-22
773
883
 
774
- ### 🐛 Bug Fixes
884
+ ### Bug Fixes
885
+
886
+ - Handle redirect after interaction submission ([#37](https://github.com/radioactive-labs/plutonium-core/issues/37))
887
+ - Enhance flatpickr to attach to modals correctly ([#35](https://github.com/radioactive-labs/plutonium-core/issues/35))
775
888
 
776
- - Handle redirect after interaction submission (#37)
777
- - Enhance flatpickr to attach to modals correctly (#35)
778
889
  ## [0.23.2] - 2025-05-27
779
890
 
780
- ### 🚜 Refactor
891
+ ### Refactoring
892
+
893
+ - Update EasyMDE styles ([#33](https://github.com/radioactive-labs/plutonium-core/issues/33))
781
894
 
782
- - Update EasyMDE styles (#33)
783
895
  ## [0.23.1] - 2025-05-27
784
896
 
785
- ### 🐛 Bug Fixes
897
+ ### Bug Fixes
898
+
899
+ - Hide password visibility checkbox when not needed ([#32](https://github.com/radioactive-labs/plutonium-core/issues/32))
786
900
 
787
- - Hide password visibility checkbox when not needed (#32)
788
901
  ## [0.21.1] - 2025-04-27
789
902
 
790
- ### 🚀 Features
903
+ ### Features
904
+
905
+ - Preserve whitespace in hints to allow some formatting ([#25](https://github.com/radioactive-labs/plutonium-core/issues/25))
791
906
 
792
- - Preserve whitespace in hints to allow some formatting (#25)
907
+ ### Refactoring
793
908
 
794
- ### 🚜 Refactor
909
+ - Fix join condition for `has_one` and `has_many` associations ([#23](https://github.com/radioactive-labs/plutonium-core/issues/23))
795
910
 
796
- - Fix join condition for `has_one` and `has_many` associations (#23)
797
911
  ## [0.21.0] - 2025-04-01
798
912
 
799
- ### 🚀 Features
913
+ ### Features
914
+
915
+ - Add cleaner cards for resources on the dashboard index page ([#22](https://github.com/radioactive-labs/plutonium-core/issues/22))
800
916
 
801
- - Add cleaner cards for resources on the dashboard index page (#22)
802
917
  ## [0.20.4] - 2025-03-15
803
918
 
804
- ### 🐛 Bug Fixes
919
+ ### Bug Fixes
920
+
921
+ - Fix Tailwind CSS v4 upgrade issue for existing projects ([#18](https://github.com/radioactive-labs/plutonium-core/issues/18))
805
922
 
806
- - Fix Tailwind CSS v4 upgrade issue for existing projects (#18)
807
923
  ## [0.19.13] - 2025-03-02
808
924
 
809
- ### 🚀 Features
925
+ ### Features
926
+
927
+ - Add password visibility toggle to sign up and login forms ([#17](https://github.com/radioactive-labs/plutonium-core/issues/17))
810
928
 
811
- - Add password visibility toggle to sign up and login forms (#17)
812
929
  ## [0.6.2] - 2024-02-21
930
+
931
+ <!-- generated by git-cliff -->