Skip to content

fix(reborn): allow renaming automations - #5765

Merged
think-in-universe merged 13 commits into
mainfrom
issue-5419-rename-automation
Jul 8, 2026
Merged

think-in-universe merged 13 commits into
mainfrom
issue-5419-rename-automation

Conversation

@italic-jinxin

@italic-jinxin italic-jinxin commented Jul 7, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • add scoped automation rename support across trigger storage, product workflow, WebUI v2 API, and frontend
  • add inline rename controls to the automation detail panel
  • cover automation rename with repository, service, route, component, integration, and Reborn WebUI E2E tests
iShot_2026-07-07_21 08 44

Linked Issue

Closes #5419

Validation

  • cargo fmt --all -- --check
  • git diff --check
  • cargo clippy targeted changed crates/features with -D warnings
  • cargo test targeted workflow/composition/WebUI/trigger repository suites
  • cargo test --test reborn_group_triggers triggers_group_e2e -- --nocapture
  • node --test targeted WebUI API/component tests

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.

@italic-jinxin italic-jinxin added size: XL 500+ changed lines risk: medium Business logic, config, or moderate-risk modules contributor: core 20+ merged PRs labels Jul 7, 2026
@ironloopai

ironloopai Bot commented Jul 7, 2026 •

Copy link
Copy Markdown
Contributor

🔎 IronLoop Review Status

Head: 14a2102f44f1b1a78511af7b1c75d14c0d02b109
Result: No reviewer jobs are scheduled yet.
Next: Run @ironloopai review to start reviewers.
Updated: 2026-07-08T15:53:55.804Z

Current reviewers:

Reviewer State Verdict Findings Last update
none Queued N/A No reviewer jobs scheduled yet. N/A
Reviewer summaries
Reviewer Detail
none No reviewer jobs scheduled yet.
Recent activity
Time Reviewer State Detail
N/A N/A Waiting No progress events recorded yet.
Available commands
  • @ironloopai help
  • @ironloopai agents
  • @ironloopai review
  • @ironloopai review --agent <agent-id-or-alias>
  • @ironloopai status
Run metadata

Admission: webhook accepted the request and IronLoop persisted review state before this projection.

@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5765 July 7, 2026 11:34 Destroyed
@coderabbitai

coderabbitai Bot commented Jul 7, 2026 •

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Added support for renaming automations in the Web UI.
    • Users can edit an automation name, save changes, and see updates reflected immediately and after refresh.
    • Added localized labels and validation messages for the rename flow in multiple languages.
  • Bug Fixes

    • Improved validation so automation names must be present and stay within length limits.
    • Renames now apply only to the matching automation scope and are persisted across the app.

Walkthrough

Adds a validated AutomationName type, scoped trigger rename support across in-memory/libSQL/Postgres repositories, rename_automation methods through the product-workflow facade and WebUI v2 route/handler, frontend rename UI with i18n, and reorders write-lock acquisition in the hooks libSQL backend to precede connection opening.

Changes

Rename Automation Feature

Layer / File(s) Summary
AutomationName validation type
crates/ironclaw_common/src/automation.rs, crates/ironclaw_common/src/lib.rs, FEATURE_PARITY.md
New AutomationName newtype enforces trimmed, non-empty, ≤256-byte names with AutomationNameError, serde support, and crate re-exports; docs updated.
Scoped trigger rename storage
crates/ironclaw_triggers/src/lib.rs, .../libsql.rs, .../postgres.rs, .../Cargo.toml, tests/repository_contract.rs
TriggerRepository::rename_scoped_trigger added with default and in-memory/libSQL/Postgres implementations scoped by tenant/user/agent/project; name validation delegates to AutomationName.
Composition facade rename wiring
crates/ironclaw_reborn_composition/src/automation.rs, .../tests/mutation_tests.rs, .../CLAUDE.md
AutomationProductFacade::rename_automation parses IDs, applies timeout, maps errors, and returns mutation responses; tests cover correct/wrong scope and invalid IDs.
Product workflow rename API
crates/ironclaw_product_workflow/src/reborn_services.rs, .../webui_inbound.rs, .../lib.rs, tests/reborn_services_contract.rs
New WebUiRenameAutomationRequest DTO, rename_automation on both facade traits, caller/name validation, and contract tests for missing agent, validation failures, and mutation forwarding.
WebUI v2 route and handler wiring
crates/ironclaw_webui_v2/src/descriptors.rs, .../handlers.rs, .../router.rs, .../lib.rs, .../CLAUDE.md, tests/webui_v2_descriptors_contract.rs, tests/webui_v2_handlers_contract.rs
New POST rename route/descriptor shares the automation-detail pattern with DELETE; handler wired through router and re-exports; descriptor/handler contract tests updated.
Frontend rename UI and client
.../lib/api.ts, .../hooks/useAutomations.ts, .../automation-detail-panel.tsx, .../automations-list.tsx, .../automations-page.tsx, .../design-system/icons.tsx, .../i18n/*, tests
renameAutomation API/mutation, inline edit UI with byte-length validation, edit icon, localized strings, and API/component tests; e2e/integration coverage for rename persistence.

Estimated code review effort: 4 (Complex) | ~60 minutes

Hooks libSQL Write-Lock Ordering

Layer / File(s) Summary
Write lock acquired before connect()
crates/ironclaw_hooks/src/libsql_backend/backend.rs, tests/predicate_state_libsql_contract.rs
write_lock is now taken before connect() in run_migrations, record(), and evict_older_than, bounding connection fan-out; docs and test comments updated to match.

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
Loading

Possibly related PRs

  • nearai/ironclaw#5131: Extends the same pause/resume automation mutation stack (product facades, WebUI v2 descriptors/handlers/router, automations UI) that rename now builds upon.
  • nearai/ironclaw#5133: Adds delete_automation via the same reborn_services/WebUI v2 mutation plumbing pattern extended here for rename.

Suggested reviewers: think-in-universe

🚥 Pre-merge checks | ✅ 3 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning crates/ironclaw_hooks/src/libsql_backend/backend.rs changes write-lock timing for libSQL writers, which is unrelated to the rename-automation issue. Split the libSQL backend lock-timing change into a separate PR unless it is explicitly required for automation rename and tracked in the issue.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed Uses Conventional Commits style and directly matches the rename-automation feature.
Description check ✅ Passed Includes the key template sections and concrete validation, impact, rollback, and review details, with only optional checklist items omitted.
Linked Issues check ✅ Passed The diff implements scoped automation rename end-to-end across storage, services, WebUI, frontend, and tests, satisfying #5419.

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added scope: docs Documentation risk: low Changes to docs, tests, or low-risk modules and removed risk: medium Business logic, config, or moderate-risk modules labels Jul 7, 2026

@ironloopai ironloopai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ 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

**Inline candidates:** 0

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:

  1. Push the fix to this PR branch.
  2. Re-run this reviewer with @ironloopai review --agent reviewer if you only changed this reviewer's findings.
  3. Re-run all reviewers with @ironloopai review when the fix may affect multiple areas.
  4. Use @ironloopai status to check queued/running/completed/stale/stalled state while reviewers run.

@italic-jinxin

Copy link
Copy Markdown
Contributor Author

@claude review

gemini-code-assist[bot]

This comment was marked as resolved.

@claude

This comment was marked as resolved.

@github-actions

github-actions Bot commented Jul 7, 2026 •

Copy link
Copy Markdown
Contributor

Coverage ratchet

Ratchet mode: ENFORCING

RATCHET PASS: global
  observed: 85.15% (282252 / 331458 lines)
  floor:    85.3% (tolerance 0.5pp -> effective floor 84.8%)
  denominator: 331458 lines now vs 320188 at floor capture (+11270 lines, +3.52%) — not a material change

⚠️ 3 Reborn crate(s) have 0 int-tier coverage (target: 0) — ironclaw_prompt_envelope, ironclaw_scripts, ironclaw_skill_learning

Reborn integration-tier coverage

Line coverage (Reborn crates): 85.15% — 282252 / 331458 lines

Per-crate breakdown (65 crates, lowest-covered first)
Crate Line % Covered / Total
ironclaw_prompt_envelope 0% 0 / 88
ironclaw_scripts 0% 0 / 347
ironclaw_skill_learning 0% 0 / 61
ironclaw_wasm_sandbox_core 7.37% 7 / 95
ironclaw_runtime_policy 33.2% 80 / 241
ironclaw_event_projections 43.34% 673 / 1553
ironclaw_run_state 52.36% 222 / 424
ironclaw_authorization 53.54% 461 / 861
ironclaw_triggers 59.79% 1740 / 2910
ironclaw_observability 61.54% 16 / 26
ironclaw_webui_v2 63.04% 2555 / 4053
ironclaw_mcp 63.15% 581 / 920
ironclaw_reborn_cli 63.41% 3816 / 6018
ironclaw_reborn_migration 67.01% 1172 / 1749
ironclaw_memory 67.12% 747 / 1113
ironclaw_dispatcher 67.15% 92 / 137
ironclaw_filesystem 67.44% 3815 / 5657
ironclaw_trust 72.88% 661 / 907
ironclaw_capabilities 74.08% 1658 / 2238
ironclaw_wasm_limiter 74.6% 47 / 63
ironclaw_reborn_event_store 74.61% 958 / 1284
ironclaw_extractors 74.72% 538 / 720
ironclaw_first_party_extensions 77.62% 5411 / 6971
ironclaw_llm 77.87% 19478 / 25013
ironclaw_product_context 78.57% 11 / 14
ironclaw_wasm_product_adapters 80.58% 1510 / 1874
ironclaw_process_sandbox 80.65% 671 / 832
ironclaw_reborn_openai_compat 80.95% 956 / 1181
ironclaw_memory_native 81.86% 3226 / 3941
ironclaw_wasm 82.54% 950 / 1151
ironclaw_secrets 82.7% 2791 / 3375
ironclaw_events 83.47% 1762 / 2111
ironclaw_processes 84.06% 965 / 1148
ironclaw_turns 84.24% 13099 / 15549
ironclaw_host_api 85.17% 2549 / 2993
ironclaw_product_workflow 85.72% 10643 / 12416
ironclaw_projects 85.92% 659 / 767
ironclaw_network 86.12% 670 / 778
ironclaw_threads 86.45% 4021 / 4651
ironclaw_common 86.46% 1514 / 1751
ironclaw_slack_v2_adapter 86.79% 1806 / 2081
ironclaw_auth 86.96% 2995 / 3444
ironclaw_reborn_config 86.98% 1730 / 1989
ironclaw_reborn_identity 87.03% 557 / 640
ironclaw_product_adapters 87.29% 3207 / 3674
ironclaw_skills 87.37% 4337 / 4964
ironclaw_hooks 87.84% 9916 / 11289
ironclaw_product_adapter_registry 87.96% 526 / 598
ironclaw_reborn_traces 88.23% 11707 / 13268
ironclaw_extensions 88.26% 2631 / 2981
ironclaw_reborn_composition 88.77% 69711 / 78533
ironclaw_host_runtime 88.95% 17523 / 19700
ironclaw_reborn 89.14% 15703 / 17616
ironclaw_conversations 90% 2924 / 3249
ironclaw_approvals 90.51% 1507 / 1665
ironclaw_event_streams 91.48% 1009 / 1103
ironclaw_loop_support 92.46% 14723 / 15924
ironclaw_attachments 93.06% 630 / 677
ironclaw_resources 93.07% 4622 / 4966
ironclaw_reborn_webui_ingress 93.19% 2217 / 2379
ironclaw_telegram_v2_adapter 93.87% 2452 / 2612
ironclaw_agent_loop 94.58% 8776 / 9279
ironclaw_safety 94.8% 3668 / 3869
ironclaw_first_party_extension_ports 95% 3094 / 3257
ironclaw_outbound 95.59% 3556 / 3720

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)
Module / Crate Reason Issue
crate: ironclaw_embeddings v1-only: consumed only by root ironclaw (src/app.rs, src/tools/builtin/memory.rs, src/workspace/mod.rs, src/config/{mod,embeddings}.rs); no crates/* dependents. Covered by "Tests (Legacy)". #5657
crate: ironclaw_gateway v1-only: consumed only by root ironclaw (src/channels/web/platform/static_files.rs, src/channels/web/handlers/frontend.rs); no crates/* dependents. Covered by "Tests (Legacy)". #5657
crate: ironclaw_oauth v1-only: consumed only by root ironclaw (src/auth/oauth.rs); no crates/* dependents. Crate's own doc comment confirms v1-only. Covered by "Tests (Legacy)". #5657
crate: ironclaw_tui v1-only: consumed only by root ironclaw (src/main.rs, src/channels/tui.rs); no crates/* dependents. Crate's own doc comment confirms it bridges INTO v1, not Reborn. Covered by "Tests (Legacy)". #5657

@railway-app

railway-app Bot commented Jul 7, 2026 •

Copy link
Copy Markdown

🚅 Deployed to the ironclaw-pr-5765 environment in ironclaw-ci-preview

Service Status Web Updated (UTC)
ironclaw ✅ Success (View Logs) Web Jul 8, 2026 at 4:03 pm

@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5765 July 7, 2026 12:04 Destroyed
@github-actions github-actions Bot added the scope: dependencies Dependency updates label Jul 7, 2026
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5765 July 7, 2026 12:15 Destroyed
@italic-jinxin
italic-jinxin marked this pull request as ready for review July 7, 2026 12:17
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5765 July 7, 2026 12:17 Destroyed
@italic-jinxin

Copy link
Copy Markdown
Contributor Author

@claude review

@claude

This comment was marked as resolved.

@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5765 July 7, 2026 12:35 Destroyed

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between 067eb66 and b79a486.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock, !**/Cargo.lock
📒 Files selected for processing (46)
  • FEATURE_PARITY.md
  • crates/ironclaw_common/src/automation.rs
  • crates/ironclaw_common/src/lib.rs
  • crates/ironclaw_product_workflow/src/lib.rs
  • crates/ironclaw_product_workflow/src/reborn_services.rs
  • crates/ironclaw_product_workflow/src/webui_inbound.rs
  • crates/ironclaw_product_workflow/tests/reborn_services_contract.rs
  • crates/ironclaw_reborn_composition/CLAUDE.md
  • crates/ironclaw_reborn_composition/src/automation.rs
  • crates/ironclaw_reborn_composition/src/automation/tests/mutation_tests.rs
  • crates/ironclaw_triggers/Cargo.toml
  • crates/ironclaw_triggers/src/lib.rs
  • crates/ironclaw_triggers/src/libsql.rs
  • crates/ironclaw_triggers/src/postgres.rs
  • crates/ironclaw_triggers/tests/repository_contract.rs
  • crates/ironclaw_webui_v2/CLAUDE.md
  • crates/ironclaw_webui_v2/src/descriptors.rs
  • crates/ironclaw_webui_v2/src/handlers.rs
  • crates/ironclaw_webui_v2/src/lib.rs
  • crates/ironclaw_webui_v2/src/router.rs
  • crates/ironclaw_webui_v2/static/js/design-system/icons.js
  • crates/ironclaw_webui_v2/static/js/i18n/ar.js
  • crates/ironclaw_webui_v2/static/js/i18n/de.js
  • crates/ironclaw_webui_v2/static/js/i18n/en.js
  • crates/ironclaw_webui_v2/static/js/i18n/es.js
  • crates/ironclaw_webui_v2/static/js/i18n/fr.js
  • crates/ironclaw_webui_v2/static/js/i18n/hi.js
  • crates/ironclaw_webui_v2/static/js/i18n/ja.js
  • crates/ironclaw_webui_v2/static/js/i18n/ko.js
  • crates/ironclaw_webui_v2/static/js/i18n/pt-BR.js
  • crates/ironclaw_webui_v2/static/js/i18n/uk.js
  • crates/ironclaw_webui_v2/static/js/i18n/zh-CN.js
  • crates/ironclaw_webui_v2/static/js/lib/api.js
  • crates/ironclaw_webui_v2/static/js/lib/api.test.mjs
  • crates/ironclaw_webui_v2/static/js/pages/automations/automations-page.js
  • crates/ironclaw_webui_v2/static/js/pages/automations/components/automation-detail-panel.js
  • crates/ironclaw_webui_v2/static/js/pages/automations/components/automation-detail-panel.test.mjs
  • crates/ironclaw_webui_v2/static/js/pages/automations/components/automations-list.js
  • crates/ironclaw_webui_v2/static/js/pages/automations/hooks/useAutomations.js
  • crates/ironclaw_webui_v2/tests/webui_v2_descriptors_contract.rs
  • crates/ironclaw_webui_v2/tests/webui_v2_handlers_contract.rs
  • tests/e2e/helpers.py
  • tests/e2e/mock_llm.py
  • tests/e2e/scenarios/test_reborn_webui_v2_smoke.py
  • tests/integration/group_triggers/main.rs
  • tests/integration/group_triggers/scenario_webui_automations_rename.rs

Comment thread crates/ironclaw_webui_v2/src/router.rs Outdated
@italic-jinxin italic-jinxin self-assigned this Jul 7, 2026
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5765 July 7, 2026 12:54 Destroyed
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5765 July 7, 2026 13:10 Destroyed
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5765 July 7, 2026 14:00 Destroyed
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5765 July 7, 2026 14:23 Destroyed
@italic-jinxin italic-jinxin added the human-verified Manually tested and verified label Jul 7, 2026
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5765 July 8, 2026 12:01 Destroyed

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 win

File exceeds the 3,000-line decomposition threshold; this PR adds substantially more to it.

reborn_services.rs runs 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

📥 Commits

Reviewing files that changed from the base of the PR and between 5a8123d and 6e319d7.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock, !**/Cargo.lock
📒 Files selected for processing (28)
  • crates/ironclaw_hooks/src/libsql_backend/backend.rs
  • crates/ironclaw_hooks/tests/predicate_state_libsql_contract.rs
  • crates/ironclaw_product_workflow/src/lib.rs
  • crates/ironclaw_product_workflow/src/reborn_services.rs
  • crates/ironclaw_product_workflow/tests/reborn_services_contract.rs
  • crates/ironclaw_triggers/src/libsql.rs
  • crates/ironclaw_triggers/src/postgres.rs
  • crates/ironclaw_triggers/tests/repository_contract.rs
  • crates/ironclaw_webui_v2/CLAUDE.md
  • crates/ironclaw_webui_v2/frontend/src/design-system/icons.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/i18n/en.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/es.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/fr.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/hi.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/ja.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/ko.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/pt-BR.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/uk.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/zh-CN.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/api.test.mts
  • crates/ironclaw_webui_v2/frontend/src/lib/api.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/automations-page.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/components/automation-detail-panel.test.mjs
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/components/automation-detail-panel.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/components/automations-list.ts
  • crates/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
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5765 July 8, 2026 15:53 Destroyed

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 win

Preserve code_placeholder deserialization

RebornChannelConnectAction now only accepts input_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

📥 Commits

Reviewing files that changed from the base of the PR and between 6e319d7 and 14a2102.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock, !**/Cargo.lock
📒 Files selected for processing (24)
  • FEATURE_PARITY.md
  • crates/ironclaw_hooks/src/libsql_backend/backend.rs
  • crates/ironclaw_product_workflow/src/lib.rs
  • crates/ironclaw_product_workflow/src/reborn_services.rs
  • crates/ironclaw_product_workflow/tests/reborn_services_contract.rs
  • crates/ironclaw_reborn_composition/CLAUDE.md
  • crates/ironclaw_webui_v2/frontend/src/design-system/icons.tsx
  • crates/ironclaw_webui_v2/frontend/src/i18n/ar.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/de.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/en.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/es.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/fr.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/hi.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/ja.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/ko.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/pt-BR.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/uk.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/zh-CN.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/api.test.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/automations-page.tsx
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/components/automation-detail-panel.test.ts
  • 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
  • crates/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

@think-in-universe
think-in-universe added this pull request to the merge queue Jul 8, 2026
Merged via the queue into main with commit 6ffa1a7 Jul 8, 2026
63 checks passed
@think-in-universe
think-in-universe deleted the issue-5419-rename-automation branch July 8, 2026 17:05
@ironclaw-ci ironclaw-ci Bot mentioned this pull request Jul 8, 2026
@coderabbitai coderabbitai Bot mentioned this pull request Aug 3, 2026
7 tasks done

This branch was successfully deployed

No deployments
ironclaw-ci-preview / ironclaw-pr-5765 — 14a2102f Deployed Jul 8, 2026 by railway-app[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

contributor: core 20+ merged PRs human-verified Manually tested and verified risk: low Changes to docs, tests, or low-risk modules scope: dependencies Dependency updates scope: docs Documentation size: XL 500+ changed lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[QA] No option to rename an automation

2 participants