Skip to content

Review the generated code again, once the Wolverine event-model fixes are in #17

Description

@jeremydmiller

Part of JasperFx/bobcat#257. Ungated as of 2026-09-08JasperFx/wolverine#4385, #4386 and #4387 are all closed, so the merged model is now the instrument this review was waiting for.

The first wave's review found the eight scaffolder defects that became bobcat#235–#242 and the three Wolverine issues above. This is the same pass again against a fixed toolchain — worth repeating rather than assuming, because every finding last time came from running what was generated, not from reading it.

Known to check

The merged model, which is now the instrument. Registering the declared model alongside the derived one went from 22 slices / 0 hotspots (nothing merged) to 16 after commands took the board's name. With wolverine#4385 the remaining five should merge, and #4386 should mean derived slices actually report the events they emit — at which point the merge can confirm or contradict the model rather than just sitting beside it. JasperFx#799 already removed the false "Derived claims Appointment; Declared claims Appointment" hotspots.

What ten agents did to one shared aggregate. Nine of ten branches touched Appointment.cs, and the merge produced three vocabularies for one concept: AppointmentStatus, AppointmentStatuses, and four raw string comparisons. That is still in the tree and is the clearest open question from the last review — whether shared vocabulary should be declarable in the model so it is emitted once instead of invented ten times.

The regeneration footgun. models/README.md still describes regenerating the whole scaffold, and the code is the agents' work now — running it would overwrite ten filled-in slices with fresh TODOs. The .feature half is safely regenerable; the .cs half is not, and the README does not say so.

The two Apply shapes. One agent's Apply(HomeCheckAppointmentProposed) deliberately does not set Id (the store assigns it from the stream, so a partially-arranged event still folds); another's Apply(FosterHandoverAppointmentProposed) sets it explicitly. Both work. Only one is right.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions