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