Here's a grab bag of feedback on developer experience after a few days use, take from this what you will:
- A documentation page on developer experience and tricks when building a non-trivial model might be useful. I think there are some non-obvious things, e.g. writing invariants that are actually tests to debug the model. Some tips about keeping state space small might be useful.
- Debugging the situation where all correctness invariants are passing, but your expectation is that they should be failing, is difficult. I wanted to see some specific traces e.g. in the HTML view, but I had no way I knew of to do that. Once the state space is large enough, the graph vizs of all states were unwieldy or just not generated.
- Potentially non-exhaustive state space eval would be pretty useful here? e.g. provide the HTML view of 5-10 traces that I can look through individually
- Debugging liveness invariants seems difficult. I was desiring two things here:
- A easy way to tell which invariants were true and false for each state (e.g. on the HTML page). (I think the graph was coloring success states green, but I could hardly see that, and found the HTML page more useful than the graph.)
- and possibly an easier way to see why an invariant was false. Especially for global conditions, e.g. one item in set A is missing from set B -- at invariant eval time, the invariant function knows why there is a failure, but I didn't have a way that I know of to annotate the state with the failure reason so that I could reason about it easily afterwards.
- The documentation is very playground-first, but I was not using the playground. It's not clear how to e.g. use the explorer locally.
- The graph visualization started to get unwieldy for me pretty quickly. The amount of state in each node was so large that it was difficult to see the state that was important. The JSON diff HTML view was super helpful here. I also found myself doing things like prefixing some fields with
z_ so that they sorted to the end in the graph view, since I didn't care about them.
- It would be nice if the documentation was in github, or otherwise globally searchable. I want to ctrl-F the entire docs, ask my LLM questions about it, etc.
- Dedicated doc on
func would be useful. e.g. apparently (I think?) an atomic func that calls a (non-atomic) func is not atomic, which isn't obvious
- I had several
fair any select an ID to act on type statements in my model, and it was kind of annoying that these statements were granularly visible in the state space / HTML. I'm not sure if I was just doing it wrong somehow, but I felt like what I really wanted was the ability to collapse "select Action A to perform + use one or more fair any statements to initialize how the action will be performed", and that would just be one state transition node. e.g. I want the transition to show Dequeue(id=5) rather than Dequeue() -> id = 5.
Thanks for making fizzbee, it has a lot of promise!
Here's a grab bag of feedback on developer experience after a few days use, take from this what you will:
z_so that they sorted to the end in the graph view, since I didn't care about them.funcwould be useful. e.g. apparently (I think?) anatomic functhat calls a (non-atomic) func is not atomic, which isn't obviousfair anyselect an ID to act on type statements in my model, and it was kind of annoying that these statements were granularly visible in the state space / HTML. I'm not sure if I was just doing it wrong somehow, but I felt like what I really wanted was the ability to collapse "select Action A to perform + use one or more fair any statements to initialize how the action will be performed", and that would just be one state transition node. e.g. I want the transition to showDequeue(id=5)rather thanDequeue()->id = 5.Thanks for making fizzbee, it has a lot of promise!