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.
- checksums.yaml +4 -4
- data/.claude/skills/plutonium/SKILL.md +19 -1
- data/.claude/skills/plutonium-app/SKILL.md +41 -0
- data/.claude/skills/plutonium-auth/SKILL.md +40 -0
- data/.claude/skills/plutonium-behavior/SKILL.md +47 -1
- data/.claude/skills/plutonium-kanban/SKILL.md +313 -0
- data/.claude/skills/plutonium-resource/SKILL.md +40 -0
- data/.claude/skills/plutonium-tenancy/SKILL.md +43 -0
- data/.claude/skills/plutonium-testing/SKILL.md +38 -0
- data/.claude/skills/plutonium-ui/SKILL.md +51 -0
- data/.claude/skills/plutonium-wizard/SKILL.md +469 -0
- data/.cliff.toml +6 -0
- data/Appraisals +3 -0
- data/CHANGELOG.md +549 -439
- data/CLAUDE.md +15 -7
- data/app/assets/plutonium.css +1 -1
- data/app/assets/plutonium.js +895 -193
- data/app/assets/plutonium.js.map +4 -4
- data/app/assets/plutonium.min.js +53 -53
- data/app/assets/plutonium.min.js.map +4 -4
- data/app/views/layouts/basic.html.erb +7 -0
- data/app/views/plutonium/_flash_toasts.html.erb +2 -46
- data/app/views/plutonium/_toast.html.erb +52 -0
- data/app/views/resource/_resource_kanban.html.erb +1 -0
- data/db/migrate/wizard/20260615000001_create_plutonium_wizard_sessions.rb +57 -0
- data/docs/.vitepress/config.ts +24 -0
- data/docs/guides/index.md +2 -0
- data/docs/guides/kanban.md +447 -0
- data/docs/guides/wizards.md +447 -0
- data/docs/public/images/guides/kanban-after-move.png +0 -0
- data/docs/public/images/guides/kanban-board-light.png +0 -0
- data/docs/public/images/guides/kanban-board.png +0 -0
- data/docs/public/images/guides/kanban-show-centered-modal.png +0 -0
- data/docs/public/images/guides/kanban-wip-toast.png +0 -0
- data/docs/public/images/guides/wizards-chooser.png +0 -0
- data/docs/public/images/guides/wizards-completed.png +0 -0
- data/docs/public/images/guides/wizards-index-action.png +0 -0
- data/docs/public/images/guides/wizards-repeater.png +0 -0
- data/docs/public/images/guides/wizards-review.png +0 -0
- data/docs/public/images/guides/wizards-step.png +0 -0
- data/docs/reference/behavior/policies.md +1 -1
- data/docs/reference/index.md +14 -0
- data/docs/reference/kanban/authorization.md +62 -0
- data/docs/reference/kanban/dsl.md +293 -0
- data/docs/reference/kanban/index.md +40 -0
- data/docs/reference/kanban/positioning.md +162 -0
- data/docs/reference/resource/definition.md +16 -0
- data/docs/reference/ui/forms.md +36 -0
- data/docs/reference/ui/pages.md +2 -0
- data/docs/reference/wizard/anchoring-resume.md +194 -0
- data/docs/reference/wizard/dsl.md +332 -0
- data/docs/reference/wizard/index.md +33 -0
- data/docs/reference/wizard/one-time.md +129 -0
- data/docs/reference/wizard/registration-launch.md +177 -0
- data/docs/reference/wizard/storage-config.md +151 -0
- data/docs/superpowers/plans/2026-06-14-form-sectioning.md +2 -2
- data/docs/superpowers/plans/2026-06-15-wizard-dsl.md +1619 -0
- data/docs/superpowers/plans/2026-06-15-wizard-dsl.md.tasks.json +68 -0
- data/docs/superpowers/plans/2026-06-26-kanban-dsl.md +1128 -0
- data/docs/superpowers/plans/2026-06-26-kanban-dsl.md.tasks.json +24 -0
- data/docs/superpowers/specs/2026-06-15-wizard-dsl-design.md +836 -0
- data/docs/superpowers/specs/2026-06-15-wizard-dsl-examples.rb +245 -0
- data/docs/superpowers/specs/2026-06-17-wizard-relaunch-prompt-design.md +86 -0
- data/docs/superpowers/specs/2026-06-18-wizard-attachments-design.md +101 -0
- data/docs/superpowers/specs/2026-06-18-wizard-hosting-design.md +220 -0
- data/docs/superpowers/specs/2026-06-26-kanban-dsl-design.md +388 -0
- data/gemfiles/postgres.gemfile +8 -0
- data/gemfiles/postgres.gemfile.lock +321 -0
- data/gemfiles/rails_7.gemfile +1 -0
- data/gemfiles/rails_7.gemfile.lock +1 -1
- data/gemfiles/rails_8.0.gemfile +1 -0
- data/gemfiles/rails_8.0.gemfile.lock +1 -1
- data/gemfiles/rails_8.1.gemfile +1 -0
- data/gemfiles/rails_8.1.gemfile.lock +14 -1
- data/lib/generators/pu/invites/templates/packages/invites/app/controllers/invites/user_invitations_controller.rb.tt +6 -1
- data/lib/plutonium/action/base.rb +9 -0
- data/lib/plutonium/auth/rodauth.rb +1 -2
- data/lib/plutonium/configuration.rb +4 -0
- data/lib/plutonium/core/controller.rb +20 -1
- data/lib/plutonium/definition/base.rb +25 -0
- data/lib/plutonium/definition/form_layout.rb +54 -35
- data/lib/plutonium/definition/index_views.rb +54 -1
- data/lib/plutonium/definition/wizards.rb +209 -0
- data/lib/plutonium/invites/concerns/invite_token.rb +9 -0
- data/lib/plutonium/invites/concerns/invite_user.rb +9 -0
- data/lib/plutonium/invites/controller.rb +4 -1
- data/lib/plutonium/kanban/action.rb +7 -0
- data/lib/plutonium/kanban/board.rb +40 -0
- data/lib/plutonium/kanban/broadcaster.rb +54 -0
- data/lib/plutonium/kanban/column.rb +69 -0
- data/lib/plutonium/kanban/context.rb +15 -0
- data/lib/plutonium/kanban/dsl.rb +71 -0
- data/lib/plutonium/kanban/grouping.rb +51 -0
- data/lib/plutonium/kanban/positioning.rb +75 -0
- data/lib/plutonium/kanban.rb +11 -0
- data/lib/plutonium/migrations.rb +40 -0
- data/lib/plutonium/positioning.rb +146 -0
- data/lib/plutonium/railtie.rb +33 -0
- data/lib/plutonium/resource/controller.rb +2 -0
- data/lib/plutonium/resource/controllers/crud_actions.rb +1 -1
- data/lib/plutonium/resource/controllers/kanban_actions.rb +455 -0
- data/lib/plutonium/resource/controllers/wizard_actions.rb +165 -0
- data/lib/plutonium/resource/policy.rb +8 -0
- data/lib/plutonium/routing/mapper_extensions.rb +44 -0
- data/lib/plutonium/routing/wizard_registration.rb +289 -0
- data/lib/plutonium/ui/display/resource.rb +17 -12
- data/lib/plutonium/ui/form/base.rb +19 -5
- data/lib/plutonium/ui/form/components/password.rb +126 -0
- data/lib/plutonium/ui/form/components/uppy.rb +6 -3
- data/lib/plutonium/ui/form/options/inferred_types.rb +20 -0
- data/lib/plutonium/ui/form/resource.rb +1 -1
- data/lib/plutonium/ui/form/wizard.rb +63 -0
- data/lib/plutonium/ui/grid/card.rb +16 -5
- data/lib/plutonium/ui/kanban/card.rb +67 -0
- data/lib/plutonium/ui/kanban/color_dot.rb +36 -0
- data/lib/plutonium/ui/kanban/column.rb +324 -0
- data/lib/plutonium/ui/kanban/resource.rb +212 -0
- data/lib/plutonium/ui/layout/resource_layout.rb +7 -1
- data/lib/plutonium/ui/modal/base.rb +30 -3
- data/lib/plutonium/ui/modal/centered.rb +5 -2
- data/lib/plutonium/ui/page/index.rb +1 -0
- data/lib/plutonium/ui/page/show.rb +23 -0
- data/lib/plutonium/ui/page/wizard.rb +371 -0
- data/lib/plutonium/ui/page/wizard_chooser.rb +97 -0
- data/lib/plutonium/ui/page/wizard_completed.rb +86 -0
- data/lib/plutonium/ui/table/base.rb +1 -1
- data/lib/plutonium/ui/table/components/view_switcher.rb +2 -1
- data/lib/plutonium/ui/wizard/review.rb +196 -0
- data/lib/plutonium/ui/wizard/stepper.rb +122 -0
- data/lib/plutonium/ui/wizard/summary_display.rb +59 -0
- data/lib/plutonium/version.rb +1 -1
- data/lib/plutonium/wizard/attachment_data.rb +42 -0
- data/lib/plutonium/wizard/attachments.rb +226 -0
- data/lib/plutonium/wizard/base.rb +216 -0
- data/lib/plutonium/wizard/base_controller.rb +31 -0
- data/lib/plutonium/wizard/configuration.rb +42 -0
- data/lib/plutonium/wizard/controller.rb +162 -0
- data/lib/plutonium/wizard/data.rb +134 -0
- data/lib/plutonium/wizard/driving.rb +639 -0
- data/lib/plutonium/wizard/dsl.rb +336 -0
- data/lib/plutonium/wizard/errors.rb +27 -0
- data/lib/plutonium/wizard/field_capture.rb +157 -0
- data/lib/plutonium/wizard/field_importer.rb +208 -0
- data/lib/plutonium/wizard/gate.rb +171 -0
- data/lib/plutonium/wizard/instance_key.rb +97 -0
- data/lib/plutonium/wizard/lazy_persisted.rb +77 -0
- data/lib/plutonium/wizard/resume.rb +250 -0
- data/lib/plutonium/wizard/review_step.rb +48 -0
- data/lib/plutonium/wizard/route_resolution.rb +40 -0
- data/lib/plutonium/wizard/runner.rb +684 -0
- data/lib/plutonium/wizard/session.rb +53 -0
- data/lib/plutonium/wizard/state.rb +35 -0
- data/lib/plutonium/wizard/step.rb +61 -0
- data/lib/plutonium/wizard/step_adapter.rb +103 -0
- data/lib/plutonium/wizard/store/active_record.rb +174 -0
- data/lib/plutonium/wizard/store/base.rb +42 -0
- data/lib/plutonium/wizard/store/memory.rb +44 -0
- data/lib/plutonium/wizard/sweep_job.rb +76 -0
- data/lib/plutonium/wizard.rb +86 -0
- data/lib/plutonium.rb +5 -0
- data/lib/rodauth/features/case_insensitive_login.rb +1 -1
- data/lib/tasks/release.rake +144 -191
- data/package.json +3 -3
- data/src/css/components.css +132 -0
- data/src/js/controllers/attachment_input_controller.js +15 -1
- data/src/js/controllers/dirty_form_guard_controller.js +155 -27
- data/src/js/controllers/kanban_controller.js +330 -0
- data/src/js/controllers/password_sentinel_controller.js +39 -0
- data/src/js/controllers/register_controllers.js +6 -0
- data/src/js/controllers/remote_modal_controller.js +10 -0
- data/src/js/controllers/row_click_controller.js +14 -1
- data/src/js/controllers/wizard_controller.js +54 -0
- data/src/js/turbo/turbo_confirm.js +1 -1
- data/yarn.lock +271 -282
- metadata +100 -1
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"planPath": "docs/superpowers/plans/2026-06-15-wizard-dsl.md",
|
|
3
|
+
"tasks": [
|
|
4
|
+
{
|
|
5
|
+
"id": 7,
|
|
6
|
+
"subject": "Task 0: Namespace, errors, config.wizards, migrations registry",
|
|
7
|
+
"status": "completed",
|
|
8
|
+
"description": "Plumbing — Plutonium::Wizard namespace, NotAnchoredError/StepError, config.wizards (enabled/cleanup_after/database), Plutonium::Migrations registry + Railtie initializer (after :load_config_initializers).\n\n```json:metadata\n{\"files\": [\"lib/plutonium/wizard.rb\",\"lib/plutonium/wizard/errors.rb\",\"lib/plutonium/wizard/configuration.rb\",\"lib/plutonium/migrations.rb\",\"lib/plutonium/configuration.rb\",\"lib/plutonium/railtie.rb\"], \"verifyCommand\": \"bundle exec appraisal rails-8.1 ruby -Itest test/plutonium/wizard/configuration_test.rb test/plutonium/migrations_test.rb\", \"acceptanceCriteria\": [\"config.wizards defaults\",\"errors exist\",\"Migrations.enabled_paths gated\",\"initializer after :load_config_initializers\"], \"requiresUserVerification\": false}\n```"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"id": 8,
|
|
12
|
+
"subject": "Task 1: Migration, Session model, instance_key, State, Store (Memory + AR)",
|
|
13
|
+
"status": "completed",
|
|
14
|
+
"blockedBy": [7],
|
|
15
|
+
"description": "Persistence layer — plutonium_wizard_sessions table (spec 8.1), Session model, InstanceKey digest, State, Store port + Memory + AR.\n\n```json:metadata\n{\"files\": [\"db/migrate/wizard/20260615000001_create_plutonium_wizard_sessions.rb\",\"app/models/plutonium/wizard/session.rb\",\"lib/plutonium/wizard/instance_key.rb\",\"lib/plutonium/wizard/state.rb\",\"lib/plutonium/wizard/store/base.rb\",\"lib/plutonium/wizard/store/memory.rb\",\"lib/plutonium/wizard/store/active_record.rb\"], \"verifyCommand\": \"bundle exec appraisal rails-8.1 ruby -Itest test/plutonium/wizard/store/active_record_test.rb test/plutonium/wizard/instance_key_test.rb\", \"acceptanceCriteria\": [\"table+indexes\",\"instance_key recipe\",\"Memory+AR shared behavior\",\"write upserts+expires_at\",\"complete nulls payload\"], \"requiresUserVerification\": false}\n```"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": 9,
|
|
19
|
+
"subject": "Task 2: Wizard DSL — Base, Step, ReviewStep, typed data, anchoring, navigation, one_time",
|
|
20
|
+
"status": "completed",
|
|
21
|
+
"blockedBy": [7],
|
|
22
|
+
"description": "Author class + DSL + typed data snapshot + anchor/persisted/fail!.\n\n```json:metadata\n{\"files\": [\"lib/plutonium/wizard/step.rb\",\"lib/plutonium/wizard/review_step.rb\",\"lib/plutonium/wizard/data.rb\",\"lib/plutonium/wizard/dsl.rb\",\"lib/plutonium/wizard/base.rb\"], \"verifyCommand\": \"bundle exec appraisal rails-8.1 ruby -Itest test/plutonium/wizard/base_test.rb test/plutonium/wizard/data_test.rb\", \"acceptanceCriteria\": [\"DSL macros\",\"review terminality raises\",\"typed union data\",\"anchor raises\",\"fail! raises StepError\"], \"requiresUserVerification\": false}\n```"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": 10,
|
|
26
|
+
"subject": "Task 3: FieldImporter — using: a model (model-only; model→definition overlay)",
|
|
27
|
+
"status": "completed",
|
|
28
|
+
"blockedBy": [9],
|
|
29
|
+
"description": "using: imports attributes(+types)/inputs/validations(filter to fields+:base)/form_layout; validate/layout/context opts; inline composes.\n\n```json:metadata\n{\"files\": [\"lib/plutonium/wizard/field_importer.rb\",\"lib/plutonium/wizard/dsl.rb\"], \"verifyCommand\": \"bundle exec appraisal rails-8.1 ruby -Itest test/plutonium/wizard/field_importer_test.rb\", \"acceptanceCriteria\": [\"interaction import\",\"definition import type-from-record+overlay\",\"validation filter fields+:base\",\"validate/layout/context\",\"inline composes\"], \"requiresUserVerification\": false}\n```"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": 11,
|
|
33
|
+
"subject": "Task 4: Runner — navigation, on_submit/persist/rollback, finalize lock + completeness/prune, resume",
|
|
34
|
+
"status": "completed",
|
|
35
|
+
"blockedBy": [8, 9, 10],
|
|
36
|
+
"description": "Pure engine: visible_path, advance, back, cancel, finalize (completeness+prune+lock+execute), persisted rehydrate, failure mapping.\n\n```json:metadata\n{\"files\": [\"lib/plutonium/wizard/runner.rb\"], \"verifyCommand\": \"bundle exec appraisal rails-8.1 ruby -Itest test/plutonium/wizard/runner_test.rb\", \"acceptanceCriteria\": [\"visible_path branching\",\"advance+track GIDs\",\"back no-validate\",\"cancel rollback+clear\",\"finalize lock+completeness+prune\",\"resume rehydrate\",\"failure mapping\"], \"requiresUserVerification\": false}\n```"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": 12,
|
|
40
|
+
"subject": "Task 5: Portal-hosted controller, register_wizard routing, wizard definition DSL, authorize?",
|
|
41
|
+
"status": "completed",
|
|
42
|
+
"blockedBy": [11],
|
|
43
|
+
"description": "Single controller (GET/POST _direction+pre_submit, PRG), register_wizard routes, wizard definition macro (no bulk), instance resolution, authorize?/policy.\n\n```json:metadata\n{\"files\": [\"app/controllers/plutonium/wizard/controller.rb\",\"lib/plutonium/routing/wizard_registration.rb\",\"lib/plutonium/definition/wizards.rb\",\"lib/plutonium/routing/mapper_extensions.rb\",\"lib/plutonium/definition/base.rb\"], \"verifyCommand\": \"bundle exec appraisal rails-8.1 ruby -Itest test/integration\", \"acceptanceCriteria\": [\"register_wizard routes\",\"wizard DSL no-bulk\",\"GET/POST next/back/cancel+pre_submit\",\"PRG finalize\",\"authorize?/policy\",\"anchor/scope/token\"], \"requiresUserVerification\": false}\n```"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": 13,
|
|
47
|
+
"subject": "Task 6: UI — Page::Wizard, Stepper, review auto-summary, step form + repeater rehydration",
|
|
48
|
+
"status": "completed",
|
|
49
|
+
"blockedBy": [12],
|
|
50
|
+
"description": "Render step (reuse interaction form), stepper, review auto-summary + jump links + gated finish, repeater rehydration, modal vs full-page.\n\n```json:metadata\n{\"files\": [\"lib/plutonium/ui/page/wizard.rb\",\"lib/plutonium/ui/wizard/stepper.rb\",\"lib/plutonium/ui/wizard/review.rb\",\"lib/plutonium/ui/form/wizard_step.rb\"], \"verifyCommand\": \"bundle exec appraisal rails-8.1 ruby -Itest test/integration\", \"acceptanceCriteria\": [\"step renders+form_layout\",\"stepper states+click rules\",\"repeater rehydrate\",\"review summary+jump+gated finish\",\"modal vs full-page\"], \"requiresUserVerification\": false}\n```"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"id": 14,
|
|
54
|
+
"subject": "Task 7: One-time wizards (gate + completion) and SweepJob",
|
|
55
|
+
"status": "completed",
|
|
56
|
+
"blockedBy": [11, 12],
|
|
57
|
+
"description": "one_time completion (user/anchor), ensure_wizard_completed gate, SweepJob reaps expired in_progress/completing with cleanup.\n\n```json:metadata\n{\"files\": [\"lib/plutonium/wizard/gate.rb\",\"lib/plutonium/wizard/sweep_job.rb\"], \"verifyCommand\": \"bundle exec appraisal rails-8.1 ruby -Itest test/plutonium/wizard/sweep_job_test.rb\", \"acceptanceCriteria\": [\"one_time completion\",\"gate redirect+bounce\",\"SweepJob cleanup keeps completed/null\"], \"requiresUserVerification\": false}\n```"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"id": 15,
|
|
61
|
+
"subject": "Task 8: Documentation and plutonium-wizard skill",
|
|
62
|
+
"status": "completed",
|
|
63
|
+
"blockedBy": [13, 14],
|
|
64
|
+
"description": "Guide, reference pages, plutonium-wizard skill + umbrella map, VitePress nav. yarn docs:build passes.\n\n```json:metadata\n{\"files\": [\".claude/skills/plutonium-wizard/SKILL.md\",\"docs/guides/wizards.md\",\"docs/reference/wizard/dsl.md\",\".claude/skills/plutonium/SKILL.md\"], \"verifyCommand\": \"yarn docs:build\", \"acceptanceCriteria\": [\"guide covers flows\",\"skill+umbrella map\",\"docs:build passes\"], \"requiresUserVerification\": false}\n```"
|
|
65
|
+
}
|
|
66
|
+
],
|
|
67
|
+
"lastUpdated": "2026-06-15T01:00:00Z"
|
|
68
|
+
}
|