Skip to content

Switch "runnable case studies" to RunnableSoftware Systems rather than Specification systems#4304

Open
balacij wants to merge 6 commits intomainfrom
mkExRnble
Open

Switch "runnable case studies" to RunnableSoftware Systems rather than Specification systems#4304
balacij wants to merge 6 commits intomainfrom
mkExRnble

Conversation

@balacij
Copy link
Collaborator

@balacij balacij commented Jul 28, 2025

Contributes to #3260

@balacij
Copy link
Collaborator Author

balacij commented Jul 28, 2025

Recall:

data SystemKind =
    Specification
  | RunnableSoftware
  | Notebook
  | Website

whatsTheBigIdea :: System -> IdeaDict
whatsTheBigIdea si = whatKind' (_kind si)
  where
    whatKind' :: SystemKind -> IdeaDict
    whatKind' Specification = nw Doc.srs
    whatKind' RunnableSoftware = runnableSoftware
    whatKind' Notebook = nw Doc.notebook
    whatKind' Website = website

...
data System where
... 
  { _sys          :: a
  , _kind         :: SystemKind
...

The SRS and Notebook artifact generators (not the website generator!) use the whatsTheBigIdea information directly (the kind information) in their artifact generation, and we want this information to be captured in Drasil with a chunk that is somehow related to the system.

Switching the system "kind" from Specification to RunnableSoftware means changing the whatsTheBigIdea (the "what kind of system is being defined" information) of the corresponding systems to "runnable software."

Is that wrong? I don't think so. The intention of the two systems are distinct. One is just a specification (Specification) and the other is a specification and (I believe) either a concrete Choices packet (about how the code generator should work) or ([thinking out loud] somehow) a range of Choices with some prefilled options or constraints imposed on Choices. For example, the prefilled options could include ODE libraries or impose a restriction that $X$ language is not suitable.

So how do we really go about fixing this? We need to capture more, it appears. For example:

data RequirementsSpecification = ?

data SolutionSpecification = ?

data SystemKind =
    Specification RequirementsSpecification
  | RunnableSoftware RequirementsSpecification SoftwareSpecification
  | Notebook
  | Website

whatsTheBigIdea :: System -> IdeaDict
whatsTheBigIdea si = whatKind' (_kind si)
  where
    whatKind' :: SystemKind -> IdeaDict
    whatKind' Specification{} = nw Doc.srs
    whatKind' RunnableSoftware{} = runnableSoftware
    whatKind' Notebook = nw Doc.notebook
    whatKind' Website = website

At this point, the SRS artifact generator would need to inspect what kind of system it was given, assert that it was either a pure Specification or a RunnableSoftware, pull out the necessary RequirementsSpecification and use that to pull the actual "idea" it wanted (i.e., "software requirements specification").

What do we think?

@balacij
Copy link
Collaborator Author

balacij commented Jul 28, 2025

Thinking out loud a bit more regarding:

data RequirementsSpecification = ?

data SolutionSpecification = ?

RequirementsSpecification would pull in things like IMs, DDs, GDs, etc. from System, and SolutionSpecification would pull in things like configFiles (a list of file names -- these are used in GlassBR to give it some usable run data, but I'm not entirely sure of all the specifics, so this is wishy-washy), Choices, etc.

@JacquesCarette
Copy link
Owner

I agree that something along the lines of

data SystemKind =
    Specification RequirementsSpecification
  | RunnableSoftware RequirementsSpecification SoftwareSpecification
  | Notebook
  | Website

is the way to go. Each system kind has its own set of choices -- I'm sure Notebook and Website will grow to have some too!

JacquesCarette
JacquesCarette previously approved these changes Jul 29, 2025
Copy link
Owner

@JacquesCarette JacquesCarette left a comment

Choose a reason for hiding this comment

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

Definitely agree that those 5 examples should all be RunnableSoftware.

@JacquesCarette
Copy link
Owner

Stable has changed, and I don't think in a good way. Something that used to be titled "Software Requirements Specification" is now called "Runnable Software" and that's not the intent. The 'system kind' is correctly 'runnable software' but the SRS is.. a SRS! Something went awry, and the 'document kind' got confused with the 'system kind'. [In some sense, this is great, as it helps us find the differences between these.]

JacquesCarette
JacquesCarette previously approved these changes Sep 25, 2025
Copy link
Owner

@JacquesCarette JacquesCarette left a comment

Choose a reason for hiding this comment

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

This now seems good.

@JacquesCarette
Copy link
Owner

Well darn, I messed up the merge. I shouldn't use the web editor to do merges. Will fix.

@JacquesCarette
Copy link
Owner

Ok, now that the merge has been fixed, there's still the problem that the name of the SRS has changed, and it should not have.

@JacquesCarette
Copy link
Owner

Sigh - there are now 5 new conflicts. @balacij can you take a look?

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants