Examples include EvalMetricSpec and FetchSpec.
I would think that all Specs would inherit from a base type named Spec, but that doesn’t seem to be the case. For instance, EvalMetricSpec inherits from MetricSpecBase, while FetchSpec inherits from FetchFilterSpec. Am correct to say it is just a naming convention?
What must go inside a Spec, or what must a Spec define, for it to be a Spec?
Is it just a structure with fields? That doesn’t seem correct - c3ShowType(FetchSpec) shows a bunch of methods.
I want to say that a Spec is just a “configuration” to be passed to a method, to specify how it is run (basically, a bundle of function arguments that are knobs for the function, not the data the function processes).
If my statement above is correct, when do we use function annotations, when do we use Specs? Can I say that function annotations are for statically “configuring” a function, while a Spec can be used for runtime configuration?
On a related topic, what is the definition of a Decl (e.g. TSDecl and ActionMetricDecl)? Is that also a naming convention, but for configuring how to transform into a Timeseries?