Design decision 14 - Semantic Versioning public API for wet-boew, GCWeb and GCWeb Jekyll

Summary

The following is an updated and improved version of the Design Decision #3 about WET versioning API. It provides more details about what is versioned for the wet-boew product, GCWeb product and GCWeb Jekyll product.

The Semantic Versioning 2.0 is followed and applied.

This is a work in progress completed at ~85%

Todo:

Versioned product

Below are the items of our product that we are monitoring and illustrating changes via our version number.

WET-BOEW

Dimension to measure:

Always a patch:

Identified as minor

Excluded:

Audience: Web author of the wet-boew product in a static server side environment.

GCWeb

Dimension to measure:

Always a patch:

Identified as minor

Excluded:

Templates:

Where:

Audience: Web author creating pages with the GCWeb product in a static server side environment.

GCWeb Jekyll

Dimension to measure:

Audience: Web author that create pages with the GCWeb Jekyll theme.

Feature removal (Deprecation and backward compatibility)

Deprecated feature/code will last or remain functional for at least one (1) year from when it was formally deprecated. It might not render exactly the same but an equivalent version would remain functional. After that period, its removal would be identified by a major version as specified by the semantic versioning API.

For example, site that was using GCWeb (before v5.0) with the pre-2019 mega menu + breadcrumbs and haven’t changed their HTML markup was compatible with GCWeb until version v11.0.0 which was released on May 2022.

Documentation of deprecated component/feature

Scope: Components and features that has been deprecated from the component perspective but need to remain there for backward compatibility.

Its documentation are removed from a component perspective. That documentation would remain available from a product perspective moved outside the component. However, the backward compatibility code and generic/common deprecated working example will remain inside the component folder for quality control until the formal removal of the deprecated feature through a major version of the product is completed.

Formal removal

For feature/component that have been stale for at least one year from when it was deprecated from a product release.

The following steps must have been completed, documented and published.

Dimension

An aspect of the component on which measures its compatibility impact for authors, implementers and users. Their measurement set the baseline to identify the impact of a subsequent changes applied according to semantic versioning 2.0.0. Each product have their own list of applicable dimension which are defined in the previous section and each component could refine what is in scope/out of scope, refine its measures and redefine what is observable.

Layout (ex. Wireframe)

Defined by how the semantic or inner component are organized among others within a component. Multiple layout can be supported for the same component. A layout can contain sub-layout which its own set of configuration.

Example with WET-BOEW and GCWeb:

Example of observable:

Style (ex. CSS):

Define the visual aesthetic of a component.

Example with WET-BOEW and GCWeb:

Example of observable:

Semantic (ex. HTML):

Provide a meaning of the dynamic data (schema) and static data contained, managed and visible through the component.

Example with WET-BOEW and GCWeb:

Example of observable:

Logic

Define the component logic programmed in JavaScript which can be leveraged for an integration with a third party software. Function in scope are the one which are public or available through a global object which are out of scope of the framework internal. Callback in scope are the one used by public function or set through global variable that are outside the scope of the framework internal. Events in scope are the ones where a third party software we can bind/trigger through the DOM or via jQuery events handler.

Example with WET-BOEW and GCWeb:

Example of observable:

Pattern recognition

Evaluate from an user perspective if a change are going to require them some effort to keep it operable and understandable as it was prior the change.

Example with WET-BOEW and GCWeb:

Essential component behaviour

Behaviour and interaction, that if removed, could change the meaning of the component and/or impact implementer/author to apply an adaptation to their existing content build with that component.

Example with WET-BOEW and GCWeb:

Example of observable:

Basic HTML mode behaviour

Description of any special behaviour that are testable of the component which can, should and must be followed when the page is navigated in basic HTML mode.

This dimension are testable only and allow to test the integrity of the component and any change made on this dimension are not going to impact the component versioning API.

When described basic HTML behaviour must be followed, then it must be duplicated in the measured dimension “Essential component behaviour” to ensure that any change to it are captured according to this public versioning API.

The versioning API aspect of this dimension are monitored through the other measured dimension such a change made to: Style, Semantic, Essential component behaviour, Logic.

Accessibility guidance

List of rules which much be applied and followed in order to ensure the component is used in

Example of observable:

Guidance of use

Define how a component should be use, when and where to ensure it is used/presented uniformly through the organization. Excluding any guidance required to ensure the component are used in an accessible way. This dimension is out of scope for WET-BOEW, GCWeb and GCWeb-jekyll.

Example with WET-BOEW and GCWeb:

Example of observable:

Context of use:

Define where the component can be used in the page code or in a special context.

Example with WET-BOEW and GCWeb:

Example of observable:

Configuration (ex. Customization description):

Configuration that transform or adapt the plain component to better meet the user need. Providing a configuration should be optional and when it is required it must provide/define default value.

Example with WET-BOEW and GCWeb:

(This include the configuration technical name used in a JSON configuration file or in HTML attribute or as a CSS flag in order to configure the component.)

Example of observable:

Static data (ex. i18n text string):

Stateless text used by the component except when changing the language. i18n means internalization. Often those static string can only be defined during the implementation phase and not during the authoring phase. If those need to be updated during the authoring phase, we will most likely have a corresponding configuration or/and schema to achieve the expected result. This also define the string that can be added by author but with a clear design intention to have it immutable for a specific language.

Example with WET-BOEW and GCWeb:

(The key identifying a i18n text string is monitored and not the i18n text value as is. Except if it is added as a text node in the HTML markup of the component which belong to semantic component composition.)

Example of observable:

Schema (ex. Shape graph; data layer):

Stateful text or data to deliver information or user experience by using the component. This is a mapping defining how to interpret data that can be provided by the author through the HTML code or via another data source like a JSON file/API call.

Example with WET-BOEW and GCWeb:

Example of observable:

Technical accessibility consideration

This is an informational measured dimension to facilitate the code maintainability.

This dimension measure are quickly describing, with a reference to any research if possible, why this component are designed in a specific way to meet and/or enhance accessibility conformance. It is intended that any WAI-ARIA advance feature used by the component logic, semantic or recommended by the accessibility guidance must be noted under this dimension along with a quick rational of why it is/should be used.

The versioning API aspect of this dimension are monitored through the other measured dimension such a change made to: Style, Semantic, Logic, Accessibility guidance.

Other notable technical consideration

This is an informational measured dimension to facilitate the code maintainability.

This dimension measure are quickly describing, with a reference to any research if possible, why this component are designed in a specific technical notable way excluding the accessibility consideration aspect.

Any accessibility related technical consideration must be measured and recorded under the dimension “Technical accessibility consideration” and not duplicated here.

The versioning API aspect of this dimension are monitored through the other measured dimension such a change made to: Style, Semantic, Logic, Accessibility guidance.

Component essential dependencies (ex. List of major versioned component):

Example with WET-BOEW and GCWeb:

Example of observable:

Packaged files essentials and directly linked from pages

Measured as if an implementer deploy and rewrite the distributed packages, would he need to update some of their published web pages to support that new deployment.

Example with WET-BOEW and GCWeb:

Example of observable:

Out of scope (Always a patch)

The following items which are changes that is happening in the same repository but don’t impact the component definion itseft or in a negligable way which are not perceptible from the working example according to a quick impact check based on the versioning API.

Terms used in documenting the component

The following are term used to document how this public versioning API are measured and impact a specific component.

Informal: Variation and implementation are informal and any change to them are out of scope to define the version of a component Formal: Change set and iteration are formal and any change to them might have impact on defining the version of a component.

Variation

A variation is a named configuration based on change set which define a measured component. It’s intended audience are for implementer and author that are going to use the component. A variation is not formally versioned. It may contains some history notes and it must indicate on which iteration it was based on. A variation can include multiple implementation to help implementer and author to implement the variation in their site or page.

Implementation

An implementation is an instruction set, code sample, code diff, screen capture, examples… that guide the implementer and the author to leverage a variation in their site or page. Each implementation must indicate on which iteration is was based on. An implementation is not formally versioned. The same implementation can be use in multiple variations as appropriate.

Iteration

An iteration is a change description that has occurred in the component. It specify how that iteration is detectable and distinctive from the predecessor iteration. It describe the API dimension along with a changes description that occurred. An iteration must contain an observed date or a creation date to define when it was captured and documented. The iteration tree is a detailed version of the change history of the component from its public versioning API view.

Change set

A change set is a measured component from its various public API versioning dimension. It is based on an iteration. The change set is formally what is used to determine the version of the component. The removal of a change set will result in a major change for the component and the addition of a subsequent change set will result in a minor change for the component. If the base iteration of a change set is updated, the change described by the iteration would impact the version of the component. Only the change set is considered and monitored. Unless specified, the public versioning API dimension are strictly limited the description and measure attached with the change set. Anything that are omitted or not identified must be considered out of scope. A change set can be seen as a branching pointer into the component iteration tree.

A change set will contains minimally the folowing information:

Type of change set

Change set must define a type which is also representing its current status.

There is four (4) type of change set: