Skip to content

feat(reborn): add automation pause resume - #5131

Merged
think-in-universe merged 15 commits into
mainfrom
reborn-automation-pause-resume
Jun 23, 2026
Merged

think-in-universe merged 15 commits into
mainfrom
reborn-automation-pause-resume

Conversation

@italic-jinxin

@italic-jinxin italic-jinxin commented Jun 22, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Add Reborn automation pause/resume support across the trigger repository, host-runtime capability layer, product facade, WebUI v2 routes, and Automations UI.
  • Add scoped trigger state transitions for both libSQL and Postgres, preserving tenant/user/agent/project authorization and preventing terminal completed triggers from being mutated.
  • Wire WebUI v2 pause/resume actions into the Automations detail panel with updated status presentation.
  • Fix local-dev capability grants so builtin.trigger_pause and builtin.trigger_resume are available to first-party tool dispatch.
  • Fix Automations UI refresh behavior so scheduled automations update near their next_run_at boundary and while runs are active.
  • Rebuild the committed WebUI v2 dist bundle and add asset/test coverage to prevent stale bundle regressions.
image image

Testing

  • cargo test -p ironclaw_triggers --features libsql
  • cargo test -p ironclaw_host_runtime --test first_party_builtin_tools builtin_trigger --features test-support
  • cargo test -p ironclaw_product_workflow --test reborn_services_contract automation
  • cargo test -p ironclaw_reborn_composition automation --features test-support
  • cargo test -p ironclaw_reborn_composition bundled_local_dev_capability_policy_parses --features test-support
  • cargo test -p ironclaw_webui_v2 --features webui-v2-beta
  • cargo test -p ironclaw_webui_v2_static automations_panel_assets_are_embedded --features webui-v2-beta
  • node --test crates/ironclaw_webui_v2_static/static/js/lib/api.test.mjs
  • node --test crates/ironclaw_webui_v2_static/static/js/pages/automations/lib/automations-refresh.test.mjs
  • TZ=UTC node --test crates/ironclaw_webui_v2_static/static/js/pages/automations/lib/automations-presenters.test.mjs

Notes

  • This change is scoped to Reborn automation/triggers and WebUI v2.
  • Existing v1 routines code paths are not touched.
  • Resume currently preserves the stored next_run_at, so an overdue paused automation may fire shortly after resume.

@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 Jun 22, 2026
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5131 June 22, 2026 09:24 Destroyed
@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 Jun 22, 2026
@coderabbitai

coderabbitai Bot commented Jun 22, 2026 •

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

An error occurred during the review process. Please try again later.

📝 Walkthrough

Walkthrough

Adds caller-scoped pause/resume lifecycle to scheduled triggers. New set_scoped_trigger_state is defined on TriggerRepository and implemented across InMemory, LibSQL, and Postgres backends. First-party host runtime capabilities builtin.trigger_pause and builtin.trigger_resume are registered. Product workflow facade, composition layer, WebUI v2 POST endpoints, and frontend API client/components/hook are wired end-to-end. A new nextAutomationsRefetchDelay module drives auto-refresh timing.

Changes

Automation Pause/Resume Lifecycle

Layer / File(s) Summary
TriggerRepository contract and backend implementations
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_triggers/src/worker/tests.rs
set_scoped_trigger_state trait method enforces validate_user_settable_trigger_state (blocking Completed writes), full caller scope matching (tenant, creator_user, agent?, project?), and idempotent Ok(None) on terminal/mismatch. InMemory/LibSQL/Postgres all implement the same semantics via SQL guards. Contract suite verifies scope rejection and due-trigger eligibility gating. clear_active_fire preserves trigger state when rescheduling instead of forcing Scheduled.
First-party host runtime capabilities
crates/ironclaw_host_runtime/src/first_party_tools/trigger_management.rs, crates/ironclaw_host_runtime/src/first_party_tools/schemas.rs, crates/ironclaw_host_runtime/src/first_party_tools/mod.rs, crates/ironclaw_host_runtime/src/lib.rs, crates/ironclaw_host_runtime/tests/first_party_builtin_tools.rs
TRIGGER_PAUSE_CAPABILITY_ID / TRIGGER_RESUME_CAPABILITY_ID constants with manifests (ExternalWrite + Ask); input schemas require trigger_id, reject additional fields. Dispatch match routes both to set_trigger_state helper. set_trigger_state validates TriggerId, calls repository set_scoped_trigger_state, returns JSON with updated flag and refreshed trigger details. Integration test confirms foreign caller cannot pause owned triggers, owner pause→resume toggles state and is_enabled/is_active, resume on Completed returns updated: false.
Local-dev capability policy
crates/ironclaw_reborn_composition/src/local_dev_capability_policy.toml, crates/ironclaw_reborn_composition/src/local_dev_capability_policy.rs
Two [[grants]] entries for builtin.trigger_pause/resume with dispatch_capability + external_write, ambient mounts, network = "default". Policy-parse test asserts effect sets via assert_trigger_grant helper.
Product workflow response DTO and facade defaults
crates/ironclaw_product_workflow/src/reborn_services/types.rs, crates/ironclaw_product_workflow/src/reborn_services.rs, crates/ironclaw_product_workflow/src/lib.rs
RebornAutomationMutationResponse DTO: updated: bool + automation: Option<RebornAutomationInfo> (serialized as #[serde(skip_serializing_if)]). AutomationProductFacade and RebornServicesApi both define fail-closed default implementations (returning automation_unavailable() / service_unavailable(false)) to prevent unimplemented trait methods from silently succeeding.
RebornServices concrete implementation and contract tests
crates/ironclaw_product_workflow/tests/reborn_services_contract.rs, crates/ironclaw_product_workflow/src/reborn_services.rs
RebornServices::pause_automation / resume_automation require agent-bound caller or return 400 InvalidRequest early (fail-closed); delegate to self.automation_facade. RecordingAutomationFacade tracks calls in mutation_calls queue with action + automation_id. Tests verify scope forwarding (tenant/user/agent/project) and missing agent rejection does not reach facade.
Composition layer pause/resume and mutation tests
crates/ironclaw_reborn_composition/src/automation.rs, crates/ironclaw_reborn_composition/src/automation/tests.rs, crates/ironclaw_reborn_composition/src/automation/tests/mutation_tests.rs, crates/ironclaw_reborn_composition/src/automation/tests/resolver_tests.rs
RebornAutomationProductFacade::pause_automation / resume_automation delegate to shared set_automation_state helper. Helper parses automation_id to TriggerId (400 on invalid via parse_trigger_id), enforces backend timeout deadline, calls trigger_repository.set_scoped_trigger_state(tenant, creator_user, agent, project, trigger_id, state) with full scope, maps timeout/backend errors to service errors, returns RebornAutomationMutationResponse with refreshed automation when Some. Four tokio tests exercise lifecycle (pause→resume→check due-eligibility), wrong-scope rejection, Completed-state idempotence, and invalid-id error paths. Test mocks implement trait stubs returning backend errors.
WebUI v2 routes and descriptors
crates/ironclaw_webui_v2/src/descriptors.rs, crates/ironclaw_webui_v2/tests/webui_v2_descriptors_contract.rs
WEBUI_V2_ROUTE_PAUSE_AUTOMATION / RESUME constants; /api/webchat/v2/automations/{automation_id}/pause / /resume patterns. pause_automation_descriptor() / resume_automation_descriptor() POST routes use NoBody mutation policy, mutation rate limit, user-action audit tracing, AllowedEffectPath::ProductWorkflow. Descriptor contract test locks expected table with all policy/auth/scope/effect/streaming/cors/rate-limit fields.
WebUI v2 handlers and router wiring
crates/ironclaw_webui_v2/src/handlers.rs, crates/ironclaw_webui_v2/src/router.rs, crates/ironclaw_webui_v2/src/lib.rs, crates/ironclaw_webui_v2/tests/webui_v2_handlers_contract.rs
pause_automation(authenticated_caller, Path<automation_id>) → Json<RebornAutomationMutationResponse> / resume_automation(...) call state.services().pause_automation(caller, automation_id.into_inner()) and return JSON. Router wires both POST routes to handlers at their descriptor patterns. Handler contract test validates dispatch with stub facade and verifies response JSON includes updated flag and automation.automation_id.
Frontend API client, icons, and presenter helpers
crates/ironclaw_webui_v2_static/static/js/lib/api.js, crates/ironclaw_webui_v2_static/static/js/lib/api.test.mjs, crates/ironclaw_webui_v2_static/static/js/design-system/icons.js, crates/ironclaw_webui_v2_static/static/js/pages/automations/lib/automations-presenters.js, crates/ironclaw_webui_v2_static/static/js/pages/automations/lib/automations-presenters.test.mjs
pauseAutomation({ automationId }) / resumeAutomation(...) validate automationId (reject if missing) and POST to /api/webchat/v2/automations/{encoded}/pause / /resume. Pause/play SVG icons added to design-system paths registry. primaryStatusLabel(automation, t) / primaryStatusTone(automation) helpers select primary automation status from isBrowserActive + running/failed-run presence, falling back to state-derived label/tone. normalizeAutomation refactored to compute primary_status_label / primary_status_tone via helpers instead of inline. API tests verify POST routing and Bearer token; presenter tests verify output values and paused-with-running-run behavior (state remains paused, appears in both paused and running filter buckets).
Frontend auto-refresh timing
crates/ironclaw_webui_v2_static/static/js/pages/automations/lib/automations-refresh.js, crates/ironclaw_webui_v2_static/static/js/pages/automations/lib/automations-refresh.test.mjs
New module exports AUTOMATIONS_BASE_REFETCH_MS, RUNNING_REFETCH_MS, OVERDUE_REFETCH_MS, DUE_GRACE_MS, MIN_REFETCH_MS and nextAutomationsRefetchDelay(automations, nowMs) function. Delay logic: for each automation, derive candidate delays from has_running_run (clamp to RUNNING_REFETCH_MS) and from next-run timestamps of schedulable automations (overdue → OVERDUE_REFETCH_MS, near-due → grace-window formula). Return minimum across all candidates or null if none apply. Tests verify null case, schedule-boundary timing, overdue polling, paused-with-running-run special handling, multi-automation selection.
Frontend hook and UI components
crates/ironclaw_webui_v2_static/static/js/pages/automations/hooks/useAutomations.js, crates/ironclaw_webui_v2_static/static/js/pages/automations/automations-page.js, crates/ironclaw_webui_v2_static/static/js/pages/automations/components/automations-list.js, crates/ironclaw_webui_v2_static/static/js/pages/automations/components/automation-detail-panel.js, crates/ironclaw_webui_v2_static/src/assets.rs
useAutomations hook adds pauseMutation / resumeMutation via useMutation, onSuccess invalidates React Query cache via predicate: q => q.queryKey?.[0] === "automations", schedules refetch via setTimeout(query.refetch, nextRefreshDelay) with cleanup. Returns isMutating, actionError, and mutate handlers. AutomationDetailPanel computes canPause / canResume from automation.state, renders conditional play/pause icon button wired to onPauseAutomation / onResumeAutomation, disabled while isMutating. AutomationsList / AutomationsPage forward mutation state and handlers. StatusPill now driven by primary_status_tone / primary_status_label instead of inline derivation. Embedded-assets test asserts pause/resume API helpers, route patterns, endpoint fragments in js/lib/api.js bundle; asserts pause/resume handlers in automations modules; asserts encoded routes in dist/app.js.
E2E test coverage and harness updates
tests/reborn_trace_first_party_tool_coverage.rs, tests/support/reborn/harness.rs
reborn_trace_trigger_management_first_party_tools_parity extends scripted replay sequence with pause and resume ProviderToolCalls before remove (using same created trigger id). Capability invocation/result expectations updated from 3 to 5 (create, list, pause, resume, remove). Request/tool-result counts increased to 6. Pause/resume results assert updated: false (foreign scope). Harness permits TRIGGER_PAUSE_CAPABILITY_ID / TRIGGER_RESUME_CAPABILITY_ID in qa_smoke_tools() and trigger_management_tools() allowlists.
FEATURE_PARITY.md
FEATURE_PARITY.md
Reborn scheduled trigger loop row updated to document implemented one-shot trigger schedule semantics (TriggerSchedule::Once) and remaining follow-ups (legacy rows without thread_id, external result delivery, production readiness, retention/tombstone semantics, jitter source selection).

Sequence Diagram(s)

sequenceDiagram
    participant Browser as Browser (AutomationsPage)
    participant useAutomations as useAutomations hook
    participant ApiClient as api.js
    participant WebUIHandler as webui_v2 handler
    participant RebornServices as RebornServices facade
    participant CompositionFacade as RebornAutomationProductFacade
    participant TriggerRepo as TriggerRepository

    Browser->>useAutomations: user clicks pause button
    useAutomations->>ApiClient: pauseAutomation({ automationId })
    ApiClient->>WebUIHandler: POST /api/webchat/v2/automations/{id}/pause
    WebUIHandler->>RebornServices: pause_automation(caller, automation_id)
    RebornServices->>RebornServices: require agent_bound_caller or 400
    RebornServices->>CompositionFacade: pause_automation(agent_caller, automation_id)
    CompositionFacade->>CompositionFacade: parse_trigger_id or 400
    CompositionFacade->>TriggerRepo: set_scoped_trigger_state(tenant,user,agent,project,id,Paused)
    TriggerRepo-->>CompositionFacade: Ok(Some(record)) or Ok(None)
    CompositionFacade-->>RebornServices: RebornAutomationMutationResponse
    RebornServices-->>WebUIHandler: RebornAutomationMutationResponse
    WebUIHandler-->>ApiClient: 200 JSON
    ApiClient-->>useAutomations: response
    useAutomations->>useAutomations: invalidateAutomations() + refetch
    useAutomations-->>Browser: updated state
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Possibly related issues

Possibly related PRs

  • nearai/ironclaw#4956: Both PRs refactor automations-presenters.js status labeling and normalization helpers; this PR extracts primaryStatusLabel/primaryStatusTone as reusable presenter functions.

Suggested reviewers

  • serrrfirat
  • think-in-universe

Poem

⏸️ A trigger once stuck, now may rest with care,
▶️ And spring back to life when the caller is there—
Scope guards stand firm: wrong tenant, no luck,
Completed won't budge, no matter what's struck.
The poller ticks on; the WebUI gleams bright. 🎯

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed Title follows Conventional Commits style with feat scope (reborn) and concise summary of pause/resume functionality addition.
Description check ✅ Passed Description includes comprehensive summary, testing details, notes on scope/limitations, and security/blast radius implications covering PR objectives.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


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

@gemini-code-assist gemini-code-assist 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.

Code Review

This pull request implements the ability to pause and resume scheduled automations (triggers) across the backend repositories, API endpoints, and WebUI v2 frontend. It introduces the builtin.trigger_pause and builtin.trigger_resume capabilities, updates the SQL and in-memory repositories to safely transition trigger states, and adds pause/resume controls to the WebUI automation detail panel. Additionally, an auto-refresh mechanism is introduced to dynamically adjust polling intervals. Feedback on the changes highlights a critical issue in the auto-refresh hook (useAutomations.js), where a null refresh delay would halt periodic polling entirely; the reviewer suggests falling back to a base refetch interval of 30 seconds to ensure the UI continues to poll.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Copy link
Copy Markdown
Collaborator

@claude review

Copy link
Copy Markdown
Collaborator

BLOCK: Reviewed current head bd471cb7 for Codex.

I did not find a new blocking code issue in the pause/resume implementation after checking the trigger repository contract, libSQL/Postgres scoped state updates, host-runtime first-party capabilities, product facade/service forwarding, WebUI v2 route descriptors/handlers, and the frontend action wiring. The scoped mutation path preserves tenant/user/agent/project boundaries, refuses to mutate completed triggers, and has caller-level coverage through repository, product-service, and HTTP route tests.

I am not calling this ready for human final review because CI is not green on this head. Current status includes pending Clippy (all-features), Tests (all-features), Reborn E2E smoke jobs, CodeRabbit pending, and at least one reported failed matrix job: Test ironclaw_scripts. GitHub would not expose that job log yet because the workflow run is still in progress, so I am not attributing the failure to the PR until the logs are available.

I also checked Gemini's useAutomations.js polling concern. The fine-grained timeout does return early when nextRefreshDelay is null, but the query still has refetchInterval: 30000, so the UI does not stop polling entirely; I am not duplicating that as a blocker.

Human review focus once CI settles: verify the product decision that resume preserves the existing next_run_at and can make overdue schedules fire shortly after resume, and check the WebUI pause/resume UX against expected operator workflow. Claude review has been requested for this first pass. No approval or merge from me.

@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: 1

🤖 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_triggers/src/lib.rs`:
- Around line 1275-1298: The set_scoped_trigger_state method allows
transitioning a trigger to Paused state while an active fire is running, which
can be silently undone by clear_active_fire forcing the state back to Scheduled
if another slot exists, causing the user's pause intent to be lost. Add
validation in set_scoped_trigger_state to check if the record has an active fire
and prevent transitioning to TriggerState::Paused in that case, returning an
error to indicate the trigger cannot be paused while a fire is in-flight.
Additionally, add a caller-level regression test that verifies the invariant:
pause a trigger while an active fire is running, then call clear_active_fire,
and confirm the trigger remains in Paused state instead of reverting to
Scheduled.
🪄 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: 92b1a061-7e9f-4545-a2c4-c9066d8e06b4

📥 Commits

Reviewing files that changed from the base of the PR and between 704fcd4 and bd471cb.

⛔ Files ignored due to path filters (1)
  • crates/ironclaw_webui_v2_static/static/dist/app.js is excluded by !**/dist/**
📒 Files selected for processing (39)
  • FEATURE_PARITY.md
  • crates/ironclaw_host_runtime/src/first_party_tools/mod.rs
  • crates/ironclaw_host_runtime/src/first_party_tools/schemas.rs
  • crates/ironclaw_host_runtime/src/first_party_tools/trigger_management.rs
  • crates/ironclaw_host_runtime/src/lib.rs
  • crates/ironclaw_host_runtime/tests/first_party_builtin_tools.rs
  • crates/ironclaw_product_workflow/src/lib.rs
  • crates/ironclaw_product_workflow/src/reborn_services.rs
  • crates/ironclaw_product_workflow/src/reborn_services/types.rs
  • crates/ironclaw_product_workflow/tests/reborn_services_contract.rs
  • crates/ironclaw_reborn_composition/src/automation.rs
  • crates/ironclaw_reborn_composition/src/automation/tests.rs
  • crates/ironclaw_reborn_composition/src/automation/tests/mutation_tests.rs
  • crates/ironclaw_reborn_composition/src/automation/tests/resolver_tests.rs
  • crates/ironclaw_reborn_composition/src/local_dev_capability_policy.rs
  • crates/ironclaw_reborn_composition/src/local_dev_capability_policy.toml
  • crates/ironclaw_triggers/src/lib.rs
  • crates/ironclaw_triggers/src/libsql.rs
  • crates/ironclaw_triggers/src/postgres.rs
  • crates/ironclaw_triggers/src/worker/tests.rs
  • crates/ironclaw_triggers/tests/repository_contract.rs
  • 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/tests/webui_v2_descriptors_contract.rs
  • crates/ironclaw_webui_v2/tests/webui_v2_handlers_contract.rs
  • crates/ironclaw_webui_v2_static/src/assets.rs
  • crates/ironclaw_webui_v2_static/static/js/design-system/icons.js
  • crates/ironclaw_webui_v2_static/static/js/lib/api.js
  • crates/ironclaw_webui_v2_static/static/js/lib/api.test.mjs
  • crates/ironclaw_webui_v2_static/static/js/pages/automations/automations-page.js
  • crates/ironclaw_webui_v2_static/static/js/pages/automations/components/automation-detail-panel.js
  • crates/ironclaw_webui_v2_static/static/js/pages/automations/components/automations-list.js
  • crates/ironclaw_webui_v2_static/static/js/pages/automations/hooks/useAutomations.js
  • crates/ironclaw_webui_v2_static/static/js/pages/automations/lib/automations-presenters.js
  • crates/ironclaw_webui_v2_static/static/js/pages/automations/lib/automations-presenters.test.mjs
  • crates/ironclaw_webui_v2_static/static/js/pages/automations/lib/automations-refresh.js
  • crates/ironclaw_webui_v2_static/static/js/pages/automations/lib/automations-refresh.test.mjs

Comment thread crates/ironclaw_triggers/src/lib.rs

@think-in-universe think-in-universe left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

CI root cause from Reborn root tests (0) is actionable on this head.

@railway-app

railway-app Bot commented Jun 22, 2026 •

Copy link
Copy Markdown

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

Service Status Web Updated (UTC)
ironclaw ✅ Success (View Logs) Web Jun 23, 2026 at 12:26 pm

@italic-jinxin italic-jinxin changed the title Reborn automation pause resume feat(reborn): add automation pause resume Jun 22, 2026
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5131 June 22, 2026 10:27 Destroyed

Copy link
Copy Markdown
Collaborator

@claude review

Copy link
Copy Markdown
Collaborator

BLOCK: Reviewed current head 0e4d45eb for Codex.

I reviewed the follow-up diff from bd471cb7 to 0e4d45eb. I do not see a new blocking code issue in this head. The update addresses the previously reported active-fire pause concern by preserving the existing trigger state when clear_active_fire sees another scheduled slot, and the shared repository contract now covers pausing an active fire before clearing it so libSQL/Postgres/in-memory parity should be guarded through the caller-facing repository behavior.

The previous Reborn first-party E2E coverage blocker also appears addressed in code: builtin.trigger_pause and builtin.trigger_resume are now included in REBORN_FIRST_PARTY_E2E_COVERED_CAPABILITIES, advertised by the trigger-management harness surface, and exercised in the trigger-management trace test. The Automations polling follow-up also keeps the base React Query refetch interval on AUTOMATIONS_BASE_REFETCH_MS while leaving the near-due timer as an acceleration path, which resolves the long-horizon polling concern without adding a duplicate timer.

I am still not calling this ready for human final review because CI is not green yet on the new head. GitHub currently shows the fresh checks in progress/pending, including Reborn root tests, all-features tests/clippy, smoke jobs, CodeRabbit, and Railway preview. Human review focus after CI settles: confirm the intended semantics that pausing during an active run should let the active run finish but prevent the next scheduled fire until explicit resume, and that the trace coverage is sufficient despite pause/resume returning updated: false for the scripted nonexistent trigger id.

@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5131 June 22, 2026 11:19 Destroyed

This comment was marked as resolved.

@italic-jinxin italic-jinxin self-assigned this Jun 22, 2026
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5131 June 22, 2026 11:40 Destroyed

Copy link
Copy Markdown
Collaborator

WATCH: Reviewed current head 7e3d9771 for Codex.

This new commit is a narrow follow-up that changes all_builtin_capability_ids() to list trigger capabilities in the same order emitted by the manifest/surface path: create, list, remove, pause, resume. That directly addresses the host-runtime ordering blocker I posted for the previous head 6b1f7caf.

I did not find a new code issue in this one-line delta. I am not requesting another Claude review because this is a small targeted CI fix, not a significant new behavior or storage/security change. I am not calling the PR ready yet because the new CI run is still in progress and CodeRabbit/Railway are pending on this head. No approval or merge from me.

Copy link
Copy Markdown
Collaborator

PASS: Human final-review guidance for reviewed head 7e3d9771.

CI is now green on this head with no pending or failing checks reported. GitHub still shows mergeStateStatus=BLOCKED with reviewDecision=REVIEW_REQUIRED, which appears to be review/branch-protection blocking rather than merge conflicts (DIRTY is not reported). My earlier CI blocker on 6b1f7caf was addressed by the registry-order fix in this head, and I did not find a new blocker in that follow-up.

Human review focus:

  • Confirm the intended pause/resume semantics across libSQL/Postgres/in-memory triggers: pausing an active fire lets the current run finish, prevents later scheduled fires until resume, and does not mutate completed triggers.
  • Check the host-runtime/product/WebUI capability surface for builtin.trigger_pause and builtin.trigger_resume, including manifest/registry order and scoped first-party capability policy.
  • Exercise the WebUI automations flow for list/detail pause/resume actions and the refresh behavior: base polling should remain in place while near-due refresh acts only as an acceleration path.
  • Spot-check that the generated static bundle matches the source JS changes.

No approval or merge from me.

…t-work

# Conflicts:
#	crates/ironclaw_webui_v2/src/lib.rs
#	crates/ironclaw_webui_v2/tests/webui_v2_descriptors_contract.rs
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5131 June 23, 2026 10:25 Destroyed
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5131 June 23, 2026 11:47 Destroyed
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5131 June 23, 2026 12:21 Destroyed

This branch was successfully deployed

No deployments
ironclaw-ci-preview / ironclaw-pr-5131 — 2c89e7bb Deployed Jun 23, 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 risk: low Changes to docs, tests, or low-risk modules scope: docs Documentation size: XL 500+ changed lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add Reborn automation pause/resume support

2 participants