Since Pyblish 1.1 is becoming a more general processing framework, I’m putting together some complementary documentation about SVEC, what it means and how to align with it.
Right off the bat, I’m considering putting it’s guidelines into the form of a series of questions that you can choose to either align with or not, with points representing the amount of importance they carry. The results of the test will determine how well a package or stack of plug-ins align with SVEC.
At the moment, the test looks like this.
Test Your Stack
See which one of these are true for you in order to determine whether or not your stack of plug-ins follow the SVEC-methodology.
- No plug-in make modifications to its input (1 point)
- No plug-in depend on another plug-in (2 points)
- Selection is the only point at which data is read out-of-band (3 points)
- Conform is the only point at which data is written out-of-band (2 point)
| Points | Result |:---------|:-----------------------| | 0-2 | Not SVEC-compatible | 3-5 | Some work is required | 6-8 | SVEC-compatible
Each level grants a unique badge to be applied to the README of a package, signalling to others what they may expect.
Some of the guidelines require an explanation.
No plug-in make modifications to its input (1 point)
This is what we’ve been talking about primarily concerning the current methods of repair.
The idea is for publishing to be immutable and idempotent which simplifies management for developers and predictability for artists.
No plug-in depend on another plug-in (2 points)
Dependencies are cause for understanding A before you are able to understand or comprehend B, leading to added cognitive load. It also hampers their ability to be distributed, shared and mixed with other plug-ins. Technically, plug-ins that depend on each other also hinder concurrency.
Selection is the only point at which data is read out-of-band (3 points)
“Out-of-band” in this context means to reach out into the operating system or current host in search for information, such as querying the username of the currently logged on user or available nodes within a host.
Conform is the only point at which data is written out-of-band (2 point)
“Out-of-band” in this context refers to a shared location, such as a networked drive, whereas writing to a local disk during Extraction is still considered in-band and is ok.
The goal here is for Selection and Conform to be the only two parts that are ever in contact with anything out-of-band; Selection for incoming and Conform for outgoing. Together they form the input and output of an atomic operation.
Before we get started, I think it’s important to point out that although all guidelines are possible and recommended, they are just guidelines and meant to be broken given the grounds are solid.
Also, this is merely a single methodology and there is plenty of room for others, so if you have something in mind that you think is awesome, you are most welcome to provide a specification of your own.
Besides the above, what else is SVEC to you? Some of the guidelines needs examples as well, which sound least understandable at the moment?