fulcro

roklenarcic 2026-03-29T09:22:02.906909Z

Uh, why do transitions match events as a prefix in general? So in documentation it is mentioned that instead of saying route-to.* you can just make a transition of route-to and I took that to mean that :route-to would match :route-to and :route-to.* but the pattern seems to be that a transition matches events by prefix in general? I had a sm that had :level1 and :level11 transitions and when I sent event :level11 it would match the :level1 transition. Tested it out and :xyz transition matches event :xyzmfgrere. I think this is pretty unexpected behavior.

tony.kay 2026-03-29T11:42:48.960839Z

I didn’t realize. That’s a bug. According to the spec they match on tokens (dot-separated segment) not substrings.

roklenarcic 2026-03-29T11:45:58.645619Z

I mean try to double check,

roklenarcic 2026-03-29T11:46:02.421069Z

tony.kay 2026-03-29T12:02:45.922019Z

Released fix in RC8

roklenarcic 2026-03-29T19:12:10.493929Z

I am still getting hundreds of these messages in my console (the setup seems to be working otherwise). These happen even if when I reload the page with Fulcro Inspect tab open.

2026-03-29T19:03:44.371Z DEBUG [com.fulcrologic.devtools.common.connection:84] - Request to devtool timed out (no devtool open?) [(com.fulcrologic.fulcro.inspect.devtool-api/db-changed {:history/version 41, :history/based-on 40, :history/diff {:fulcro.inspect.lib.diff/updates {:com.fulcrologic.fulcro.application/active-remotes #{:remote}}, :fulcro.inspect.lib.diff/removals []}, :type com.fulcrologic.fulcro.inspect.devtool-api/db-changed, :com.fulcrologic.fulcro.application/id #uuid "53b5fec6-4169-4234-bde9-6a7bea96ce95", :com.fulcrologic.fulcro.application/label "53b5fec6-4169-4234-bde9-6a7bea96ce95"})]

roklenarcic 2026-03-29T19:12:35.074929Z

I have the tab open and working:

roklenarcic 2026-03-29T19:13:10.632939Z

but for some reason the plugin icon next to address bar seems to think otherwise

roklenarcic 2026-03-29T19:27:23.022619Z

Chrome ext 4.1.0,

com.fulcrologic/fulcro-inspect {:mvn/version "1.0.5"}

tony.kay 2026-03-29T19:39:26.069249Z

odd…can’t say I’ve seen that

roklenarcic 2026-03-29T23:34:52.830349Z

Here’s another thing I just noticed. istates block certain kind of sequences. So bear with me here. I’ve got this transition:

(transition {:event :auth/logged-in :target ::ui/Dashboard}
  (script {:expr replay-bookmark!}))
Now the way replay bookmark works is that it replays a previously stored route-to event, as you know. So the events happen like this: • script runs and fires event based on bookmark e.g. .my-company.ui/OtherDashboard • ui/Dashboard state is entered, effectively navigating • route-to event fired earlier is processed by routing statechart and state com.my-company.ui/OtherDashboard` is entered • what user sees is OtherDashboard. If user didn’t have a bookmark, they see Dashboard This works as long as this is all rstates. But if OtherDashboard is within an istate, the event seem to do nothing, it never changes the state of the istate chart to the desired state. It seems to have to do with late invocation start. I guess that when browser page is reloaded, and these bookmarking things happen, the istate chart is not started yet.

tony.kay 2026-03-30T08:43:43.258759Z

Ah, so the event is sent too soon you think?

roklenarcic 2026-03-30T08:44:57.037079Z

Let me check out a theory.

roklenarcic 2026-03-30T08:50:51.466689Z

Ah, when I use scf/send! from repl it navigates. But that is logged as external-event, but the one I do is logged as internal-event

roklenarcic 2026-03-30T08:50:54.544959Z

not sure if it matters

tony.kay 2026-03-30T08:51:08.391549Z

ok. invocations themselves ferry the pending child route through params. In terms of plain URL restore

tony.kay 2026-03-30T08:53:10.090239Z

and certainly the timing is going to be different between an internal (raise, runs on internal steps of the top-level invocation) and external (which runs from an external event queue that can’t possibly trigger until the current processing is done)

tony.kay 2026-03-30T09:02:46.445409Z

Per the spec, section 6.1 of w3c standard:

Since an invocation will be canceled when the state machine leaves the invoking state, it does not make sense to start an invocation in a state that will be exited immediately. Therefore the <invoke> element is executed upon entry into the state, but only after checking for eventless transitions and transitions driven by pending internal events. If any such enabled transition is found , it is taken and the state is exited immediately, without triggering the invocation. Thus invocations are triggered only when the state machine has reached a stable configuration, i.e., one that it will be staying in while it waits for external events.

tony.kay 2026-03-30T09:04:44.917549Z

So, the internal events done with raise will not reach an invocation that is entered in the same step

roklenarcic 2026-03-30T09:04:56.644529Z

Hm, but in my case the the thing that seems to be missing is the event triggering assignment to pending child route

roklenarcic 2026-03-30T09:05:08.523069Z

hm ok

roklenarcic 2026-03-30T09:05:34.061999Z

I’ll work around it

tony.kay 2026-03-30T09:05:36.892509Z

but the “external event queue” IS avaiable on the env, so you can submit it

tony.kay 2026-03-30T09:05:46.709949Z

if it’s on the external queue, it should work

tony.kay 2026-03-30T09:05:58.395999Z

or use scf/send!

tony.kay 2026-03-30T09:07:05.753249Z

or you can pass data to the invocation that it can read on start to “continue”… Is the “URL Routing” working through invocations for you? I haven’t had a lot of time to test this new ns, so it likely has some other rough edges

roklenarcic 2026-03-30T09:08:15.465769Z

yeah if I drop all this interception of route to events I need to fix, then entering an url routes correctly I think

tony.kay 2026-03-30T09:09:33.227169Z

ok. So, you’re trying to intercept routing somehow?

roklenarcic 2026-03-30T09:09:56.029299Z

Yeah I did the thing with saving a bookmark, but I commented that out for these tests

roklenarcic 2026-03-30T09:10:07.794189Z

No this should work fine

roklenarcic 2026-03-30T09:10:12.395329Z

thanks

tony.kay 2026-03-30T09:10:20.821819Z

I’m interested in your use-case…was it just a lack of understanding on your part, and all is well?

roklenarcic 2026-03-30T09:11:32.078269Z

I basically copied routing_demo2 from statecharts

roklenarcic 2026-03-30T09:12:12.100709Z

so the save bookmark etc… but I moved things around a bit and this thing where istate only gets initialized when SM settles tripped me up

✅ 1