Repository navigation
fix(reborn): allow renaming automations - #5765
Conversation
🔎 IronLoop Review StatusHead: Current reviewers:
Reviewer summaries
Recent activity
Available commands
Run metadataAdmission: webhook accepted the request and IronLoop persisted review state before this projection. |
📝 WalkthroughSummary by CodeRabbit
WalkthroughAdds a validated ChangesRename Automation Feature
Estimated code review effort: 4 (Complex) | ~60 minutes Hooks libSQL Write-Lock Ordering
Sequence Diagram(s)sequenceDiagram
participant User
participant AutomationDetailPanel
participant useAutomations
participant WebUiV2Router
participant RebornServices
participant AutomationProductFacade
participant TriggerRepository
User->>AutomationDetailPanel: edit name, submit
AutomationDetailPanel->>useAutomations: renameAutomation({automationId, name})
useAutomations->>WebUiV2Router: POST /automations/{id} {name}
WebUiV2Router->>RebornServices: rename_automation(caller, id, request)
RebornServices->>RebornServices: parse_automation_name(request)
RebornServices->>AutomationProductFacade: rename_automation(caller, id, AutomationName)
AutomationProductFacade->>TriggerRepository: rename_scoped_trigger(scope, name)
TriggerRepository-->>AutomationProductFacade: updated record or None
AutomationProductFacade-->>RebornServices: mutation response
RebornServices-->>WebUiV2Router: JSON response
WebUiV2Router-->>useAutomations: updated automation
useAutomations-->>AutomationDetailPanel: refresh UI
Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 3 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (3 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
✅ IronLoop Review: reviewer
Verdict: ✅ Approved
Findings: 0 blocking / 0 notes
Next: No reviewer action needed.
Head: 298add4c7a5aacc5cbd15885dd45828b1e18d236
Run details
Status: Current
Needs human: no
Needs validation: no
Summary
No blocking issues found. The automation rename path is wired through WebUI descriptors/router/handler, product workflow validation, scoped composition facade, and all trigger repository backends with focused contract and E2E coverage added.
Findings
None.
Developer follow-up
After fixing this feedback:
- Push the fix to this PR branch.
- Re-run this reviewer with
@ironloopai review --agent reviewerif you only changed this reviewer's findings. - Re-run all reviewers with
@ironloopai reviewwhen the fix may affect multiple areas. - Use
@ironloopai statusto check queued/running/completed/stale/stalled state while reviewers run.
|
@claude review |
This comment was marked as resolved.
This comment was marked as resolved.
Coverage ratchetReborn integration-tier coverageLine coverage (Reborn crates): 85.15% — 282252 / 331458 lines Per-crate breakdown (65 crates, lowest-covered first)
This table itself is informational and never gates the PR on its own — not the percentage, not the per-crate holes, not the 0-coverage callout. A separate coverage ratchet (dry-run until enforce=true; see tests/integration/coverage-floor.toml) can fail the build on specific configured floors. Exemptions (4 entry/entries excluded from the accounting above)
|
|
🚅 Deployed to the ironclaw-pr-5765 environment in ironclaw-ci-preview
|
|
@claude review |
This comment was marked as resolved.
This comment was marked as resolved.
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@crates/ironclaw_webui_v2/src/router.rs`:
- Around line 19-36: The route constant name is now misleading because the same
pattern is used for both rename and delete handlers in the router setup. Update
the identifier in the routing definitions from
WEBUI_V2_PATTERN_RENAME_AUTOMATION to a neutral shared name that reflects both
verbs, and propagate the rename through any descriptor or pattern references so
the multi-verb route is clearly identified alongside other shared patterns like
WEBUI_V2_PATTERN_PROJECT_DETAIL and WEBUI_V2_PATTERN_SKILL_DETAIL.
In
`@crates/ironclaw_webui_v2/static/js/pages/automations/components/automation-detail-panel.js`:
- Around line 132-145: The rename input in automation-detail-panel uses a
character-based native limit that conflicts with the byte-based validation in
handleRenameSubmit. Remove the misleading maxLength cap from the Input in the
automation rename flow and rely on the existing byteLength-based validation plus
the error state/message so users see consistent behavior across multi-byte
names.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 0e3a4154-f395-44e4-b599-25f30def94a8
⛔ Files ignored due to path filters (1)
Cargo.lockis excluded by!**/*.lock,!**/Cargo.lock
📒 Files selected for processing (46)
FEATURE_PARITY.mdcrates/ironclaw_common/src/automation.rscrates/ironclaw_common/src/lib.rscrates/ironclaw_product_workflow/src/lib.rscrates/ironclaw_product_workflow/src/reborn_services.rscrates/ironclaw_product_workflow/src/webui_inbound.rscrates/ironclaw_product_workflow/tests/reborn_services_contract.rscrates/ironclaw_reborn_composition/CLAUDE.mdcrates/ironclaw_reborn_composition/src/automation.rscrates/ironclaw_reborn_composition/src/automation/tests/mutation_tests.rscrates/ironclaw_triggers/Cargo.tomlcrates/ironclaw_triggers/src/lib.rscrates/ironclaw_triggers/src/libsql.rscrates/ironclaw_triggers/src/postgres.rscrates/ironclaw_triggers/tests/repository_contract.rscrates/ironclaw_webui_v2/CLAUDE.mdcrates/ironclaw_webui_v2/src/descriptors.rscrates/ironclaw_webui_v2/src/handlers.rscrates/ironclaw_webui_v2/src/lib.rscrates/ironclaw_webui_v2/src/router.rscrates/ironclaw_webui_v2/static/js/design-system/icons.jscrates/ironclaw_webui_v2/static/js/i18n/ar.jscrates/ironclaw_webui_v2/static/js/i18n/de.jscrates/ironclaw_webui_v2/static/js/i18n/en.jscrates/ironclaw_webui_v2/static/js/i18n/es.jscrates/ironclaw_webui_v2/static/js/i18n/fr.jscrates/ironclaw_webui_v2/static/js/i18n/hi.jscrates/ironclaw_webui_v2/static/js/i18n/ja.jscrates/ironclaw_webui_v2/static/js/i18n/ko.jscrates/ironclaw_webui_v2/static/js/i18n/pt-BR.jscrates/ironclaw_webui_v2/static/js/i18n/uk.jscrates/ironclaw_webui_v2/static/js/i18n/zh-CN.jscrates/ironclaw_webui_v2/static/js/lib/api.jscrates/ironclaw_webui_v2/static/js/lib/api.test.mjscrates/ironclaw_webui_v2/static/js/pages/automations/automations-page.jscrates/ironclaw_webui_v2/static/js/pages/automations/components/automation-detail-panel.jscrates/ironclaw_webui_v2/static/js/pages/automations/components/automation-detail-panel.test.mjscrates/ironclaw_webui_v2/static/js/pages/automations/components/automations-list.jscrates/ironclaw_webui_v2/static/js/pages/automations/hooks/useAutomations.jscrates/ironclaw_webui_v2/tests/webui_v2_descriptors_contract.rscrates/ironclaw_webui_v2/tests/webui_v2_handlers_contract.rstests/e2e/helpers.pytests/e2e/mock_llm.pytests/e2e/scenarios/test_reborn_webui_v2_smoke.pytests/integration/group_triggers/main.rstests/integration/group_triggers/scenario_webui_automations_rename.rs
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
crates/ironclaw_product_workflow/src/reborn_services.rs (1)
2624-2651: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winFile exceeds the 3,000-line decomposition threshold; this PR adds substantially more to it.
reborn_services.rsruns past 6,500 lines in this diff. As per coding guidelines, "files over 3,000 lines need a tracking issue for decomposition, and PRs adding more than 200 lines need inline justification." The rename_automation addition itself is small, but combined with the admin-management block landing in the same file, no tracking-issue reference or inline justification comment is visible for the continued growth of this file.Also applies to: 4451-4469, 6514-6537
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@crates/ironclaw_product_workflow/src/reborn_services.rs` around lines 2624 - 2651, The growth of RebornServices in reborn_services.rs exceeds the decomposition threshold, and this change lacks a tracking-issue reference or inline justification for adding more code to the file. Update the related additions around RebornServices and the nearby service blocks to include the required tracking issue/decomposition justification, especially for the rename_automation and admin-management changes. Keep the rationale visible near the affected sections so future reviewers can trace why the file is still expanding.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@crates/ironclaw_product_workflow/src/reborn_services.rs`:
- Around line 2624-2651: The growth of RebornServices in reborn_services.rs
exceeds the decomposition threshold, and this change lacks a tracking-issue
reference or inline justification for adding more code to the file. Update the
related additions around RebornServices and the nearby service blocks to include
the required tracking issue/decomposition justification, especially for the
rename_automation and admin-management changes. Keep the rationale visible near
the affected sections so future reviewers can trace why the file is still
expanding.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: c9f864a2-b16a-4e64-916e-6de7dcdef0e2
⛔ Files ignored due to path filters (1)
Cargo.lockis excluded by!**/*.lock,!**/Cargo.lock
📒 Files selected for processing (28)
crates/ironclaw_hooks/src/libsql_backend/backend.rscrates/ironclaw_hooks/tests/predicate_state_libsql_contract.rscrates/ironclaw_product_workflow/src/lib.rscrates/ironclaw_product_workflow/src/reborn_services.rscrates/ironclaw_product_workflow/tests/reborn_services_contract.rscrates/ironclaw_triggers/src/libsql.rscrates/ironclaw_triggers/src/postgres.rscrates/ironclaw_triggers/tests/repository_contract.rscrates/ironclaw_webui_v2/CLAUDE.mdcrates/ironclaw_webui_v2/frontend/src/design-system/icons.tscrates/ironclaw_webui_v2/frontend/src/i18n/ar.tscrates/ironclaw_webui_v2/frontend/src/i18n/de.tscrates/ironclaw_webui_v2/frontend/src/i18n/en.tscrates/ironclaw_webui_v2/frontend/src/i18n/es.tscrates/ironclaw_webui_v2/frontend/src/i18n/fr.tscrates/ironclaw_webui_v2/frontend/src/i18n/hi.tscrates/ironclaw_webui_v2/frontend/src/i18n/ja.tscrates/ironclaw_webui_v2/frontend/src/i18n/ko.tscrates/ironclaw_webui_v2/frontend/src/i18n/pt-BR.tscrates/ironclaw_webui_v2/frontend/src/i18n/uk.tscrates/ironclaw_webui_v2/frontend/src/i18n/zh-CN.tscrates/ironclaw_webui_v2/frontend/src/lib/api.test.mtscrates/ironclaw_webui_v2/frontend/src/lib/api.tscrates/ironclaw_webui_v2/frontend/src/pages/automations/automations-page.tscrates/ironclaw_webui_v2/frontend/src/pages/automations/components/automation-detail-panel.test.mjscrates/ironclaw_webui_v2/frontend/src/pages/automations/components/automation-detail-panel.tscrates/ironclaw_webui_v2/frontend/src/pages/automations/components/automations-list.tscrates/ironclaw_webui_v2/frontend/src/pages/automations/hooks/useAutomations.ts
💤 Files with no reviewable changes (23)
- crates/ironclaw_webui_v2/frontend/src/i18n/pt-BR.ts
- crates/ironclaw_webui_v2/frontend/src/i18n/es.ts
- crates/ironclaw_webui_v2/frontend/src/design-system/icons.ts
- crates/ironclaw_webui_v2/frontend/src/i18n/fr.ts
- crates/ironclaw_webui_v2/frontend/src/i18n/ar.ts
- crates/ironclaw_webui_v2/frontend/src/i18n/de.ts
- crates/ironclaw_webui_v2/frontend/src/pages/automations/automations-page.ts
- crates/ironclaw_webui_v2/frontend/src/i18n/uk.ts
- crates/ironclaw_webui_v2/frontend/src/i18n/en.ts
- crates/ironclaw_webui_v2/frontend/src/i18n/zh-CN.ts
- crates/ironclaw_webui_v2/frontend/src/pages/automations/components/automations-list.ts
- crates/ironclaw_webui_v2/frontend/src/lib/api.ts
- crates/ironclaw_webui_v2/CLAUDE.md
- crates/ironclaw_webui_v2/frontend/src/i18n/ko.ts
- crates/ironclaw_webui_v2/frontend/src/i18n/ja.ts
- crates/ironclaw_webui_v2/frontend/src/i18n/hi.ts
- crates/ironclaw_triggers/src/libsql.rs
- crates/ironclaw_triggers/src/postgres.rs
- crates/ironclaw_webui_v2/frontend/src/pages/automations/hooks/useAutomations.ts
- crates/ironclaw_webui_v2/frontend/src/pages/automations/components/automation-detail-panel.ts
- crates/ironclaw_webui_v2/frontend/src/pages/automations/components/automation-detail-panel.test.mjs
- crates/ironclaw_webui_v2/frontend/src/lib/api.test.mts
- crates/ironclaw_triggers/tests/repository_contract.rs
# Conflicts: # crates/ironclaw_hooks/src/libsql_backend/backend.rs # crates/ironclaw_webui_v2/frontend/src/design-system/icons.ts # crates/ironclaw_webui_v2/frontend/src/lib/api.test.mts # crates/ironclaw_webui_v2/frontend/src/pages/automations/automations-page.tsx # crates/ironclaw_webui_v2/frontend/src/pages/automations/components/automation-detail-panel.tsx # crates/ironclaw_webui_v2/frontend/src/pages/automations/components/automations-list.tsx
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
crates/ironclaw_product_workflow/tests/reborn_services_contract.rs (1)
5267-5279: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winPreserve
code_placeholderdeserialization
RebornChannelConnectActionnow only acceptsinput_placeholder; add#[serde(alias = "code_placeholder")]on that field and keep a legacy JSON round-trip test so older payloads still deserialize.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@crates/ironclaw_product_workflow/tests/reborn_services_contract.rs` around lines 5267 - 5279, `RebornChannelConnectAction` currently only serializes `input_placeholder`, but older payloads still use `code_placeholder`; update the struct field on `RebornChannelConnectAction` to accept the legacy name via a serde alias so deserialization remains backward-compatible. Keep or add a round-trip test in `channel_connect_action_serializes_neutral_input_placeholder` (or a nearby test) that deserializes a payload using `code_placeholder` to verify the legacy JSON still works.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@crates/ironclaw_product_workflow/tests/reborn_services_contract.rs`:
- Around line 5267-5279: `RebornChannelConnectAction` currently only serializes
`input_placeholder`, but older payloads still use `code_placeholder`; update the
struct field on `RebornChannelConnectAction` to accept the legacy name via a
serde alias so deserialization remains backward-compatible. Keep or add a
round-trip test in `channel_connect_action_serializes_neutral_input_placeholder`
(or a nearby test) that deserializes a payload using `code_placeholder` to
verify the legacy JSON still works.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 594ab946-f815-4c85-ab7b-d14200877e2e
⛔ Files ignored due to path filters (1)
Cargo.lockis excluded by!**/*.lock,!**/Cargo.lock
📒 Files selected for processing (24)
FEATURE_PARITY.mdcrates/ironclaw_hooks/src/libsql_backend/backend.rscrates/ironclaw_product_workflow/src/lib.rscrates/ironclaw_product_workflow/src/reborn_services.rscrates/ironclaw_product_workflow/tests/reborn_services_contract.rscrates/ironclaw_reborn_composition/CLAUDE.mdcrates/ironclaw_webui_v2/frontend/src/design-system/icons.tsxcrates/ironclaw_webui_v2/frontend/src/i18n/ar.tscrates/ironclaw_webui_v2/frontend/src/i18n/de.tscrates/ironclaw_webui_v2/frontend/src/i18n/en.tscrates/ironclaw_webui_v2/frontend/src/i18n/es.tscrates/ironclaw_webui_v2/frontend/src/i18n/fr.tscrates/ironclaw_webui_v2/frontend/src/i18n/hi.tscrates/ironclaw_webui_v2/frontend/src/i18n/ja.tscrates/ironclaw_webui_v2/frontend/src/i18n/ko.tscrates/ironclaw_webui_v2/frontend/src/i18n/pt-BR.tscrates/ironclaw_webui_v2/frontend/src/i18n/uk.tscrates/ironclaw_webui_v2/frontend/src/i18n/zh-CN.tscrates/ironclaw_webui_v2/frontend/src/lib/api.test.tscrates/ironclaw_webui_v2/frontend/src/pages/automations/automations-page.tsxcrates/ironclaw_webui_v2/frontend/src/pages/automations/components/automation-detail-panel.test.tscrates/ironclaw_webui_v2/frontend/src/pages/automations/components/automation-detail-panel.tsxcrates/ironclaw_webui_v2/frontend/src/pages/automations/components/automations-list.tsxcrates/ironclaw_webui_v2/frontend/src/pages/automations/hooks/useAutomations.ts
💤 Files with no reviewable changes (19)
- crates/ironclaw_webui_v2/frontend/src/design-system/icons.tsx
- crates/ironclaw_webui_v2/frontend/src/i18n/es.ts
- crates/ironclaw_webui_v2/frontend/src/pages/automations/automations-page.tsx
- crates/ironclaw_webui_v2/frontend/src/i18n/uk.ts
- crates/ironclaw_webui_v2/frontend/src/i18n/fr.ts
- crates/ironclaw_webui_v2/frontend/src/i18n/ko.ts
- crates/ironclaw_webui_v2/frontend/src/i18n/ar.ts
- crates/ironclaw_webui_v2/frontend/src/pages/automations/components/automations-list.tsx
- crates/ironclaw_webui_v2/frontend/src/i18n/ja.ts
- crates/ironclaw_webui_v2/frontend/src/i18n/pt-BR.ts
- crates/ironclaw_webui_v2/frontend/src/i18n/de.ts
- crates/ironclaw_webui_v2/frontend/src/i18n/en.ts
- crates/ironclaw_product_workflow/src/lib.rs
- crates/ironclaw_webui_v2/frontend/src/i18n/hi.ts
- crates/ironclaw_webui_v2/frontend/src/pages/automations/hooks/useAutomations.ts
- crates/ironclaw_webui_v2/frontend/src/lib/api.test.ts
- crates/ironclaw_webui_v2/frontend/src/pages/automations/components/automation-detail-panel.tsx
- crates/ironclaw_webui_v2/frontend/src/pages/automations/components/automation-detail-panel.test.ts
- crates/ironclaw_webui_v2/frontend/src/i18n/zh-CN.ts
Summary
Linked Issue
Closes #5419
Validation
Security Impact
Authenticated caller-scoped mutation only. Rename requires matching tenant/user/agent/project scope and does not expose trigger existence across scopes.
Database Impact
No schema changes. Updates the existing trigger_records.name column for matching scoped rows.
Blast Radius
Reborn WebUI v2 automations, Reborn automation facade, and trigger repository mutation paths.
Rollback Plan
Revert the commit. Existing automation rows remain valid; the rename route/UI disappear.
Review track
Cross-layer WebUI/API/persistence review.