Introduce impact notes attached to change notes

No styles yet
This commit is contained in:
Jeremy Ruston
2025-11-02 12:09:03 +00:00
parent 19177964c8
commit a07ecb6156
10 changed files with 229 additions and 56 deletions
@@ -0,0 +1,8 @@
title: $:/changenotes/5.4.0/#8702/impacts/darkmode-info-tiddler
changenote: $:/changenotes/5.4.0/#8702
created: 20250901000000000
modified: 20250901000000000
tags: $:/tags/ImpactNote
description: `$:/info/darkmode` has been superseded by `$:/info/browser/darkmode`
impact-type: deprecation
@@ -0,0 +1,9 @@
title: $:/changenotes/5.4.0/#8702/impacts/palette-pluginisation
changenote: $:/changenotes/5.4.0/#8702
created: 20250901000000000
modified: 20250901000000000
tags: $:/tags/ImpactNote
description: Existing colour palettes have been moved to a new "palettes-legacy" plugin
impact-type: pluginisation
Add the plugin to your wiki in order to continue using the legacy palettes.
@@ -0,0 +1,27 @@
title: $:/changenotes/5.4.0/#8702
description: Colour handling improvements
release: 5.4.0
tags: $:/tags/ChangeNote
change-type: enhancement
change-category: hackability
links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/8702
github-contributors: Jermolene
This PR brings several new features for end users:
* Automatically switching between a dark and light palette as the operating system setting changes (and to do so without making the wiki dirty)
* Customisation options for palettes. For example, users might choose a base hue, with the colours of the palette automatically adapting to it
* A generalisation of the dark vs. light mechanism to allow an arbitrary number of distinct schemes that are dynamically selected. For example, a palette that has a different scheme for night, morning, day and evening that automatically change with the time of day
There are also new capabilities for palette authors:
* Inheritance for palettes, making it easy to create chains of variants of a base palette
* Self contained palettes that can contain both dark and light variants (or variants for any other custom scheme)
To make all of these new features possible, this PR also includes some useful new general purpose mechanisms and features:
* Background actions that are triggered whenever there is a change to the results of a specified filter
* Several new filter operators for manipulating colour values. The underlying functionality comes from the [[color.js|https://colorjs.io/]] library
* New media query tracking mechanism that can track the results of any CSS media query (not just dark mode), storing the results in a shadow `$:/info/...` tiddler
* New `changecount` filter operator
* New `:apply` filter run prefix (to be replaced by the `:let` filter run prefix in [[#8972|https://github.com/TiddlyWiki/TiddlyWiki5/pull/8972]]))
@@ -0,0 +1,9 @@
title: $:/changenotes/5.4.0/#9183/impacts/core-server-pluginisation
changenote: $:/changenotes/5.4.0/#9183
created: 20250901000000000
modified: 20250901000000000
tags: $:/tags/ImpactNote
description: Server components of the core have been moved into a new `$:/core-server` plugin
impact-type: pluginisation
It is not necessary for wikis to explicitly include the `$:/core-server` plugin.
@@ -2,7 +2,7 @@ title: $:/changenotes/5.4.0/#9183
description: Offload server-only components to a plugin
release: 5.4.0
tags: $:/tags/ChangeNote
change-type: pluginisation
change-type: performance
change-category: internal
links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9183 https://github.com/TiddlyWiki/TiddlyWiki5/pull/9288
github-contributors: Jermolene Leilei332
@@ -0,0 +1,55 @@
title: Release Notes and Changes Internals
! Release Notes
Release notes describe the changes in a release, and the impact of those changes.
Release note fields:
* `caption` - the plain version number (eg `5.4.0`)
* `created` - in DateFormat
* `modified` - in DateFormat
* `released` - in DateFormat -- only present if the release has been published
* `tags` - must include `ReleaseNotes`
* `title` - the title of the release note (eg `Release 5.4.0`)
* `description` - a brief description of the release
* `text` - see below
The text of the release note should consist of the definition of a variable `release-introduction` followed by the invocation of the `releasenote` procedure. For example:
```
\define release-introduction()
Release v5.4.0 includes major improvements in a number of areas. See the [[project plan|https://github.com/orgs/TiddlyWiki/projects/4]] for more details.
\end release-introduction
<<releasenote 5.4.0>>
```
! Change Notes
Change notes describe a discrete change within a release. Change note fields:
* `title` - by convention titles are formed `$:/changenotes/<version>/<unique identifier>`. The unique identifier is typically the primary GitHub PR or issue like `#1234` or a GitHub commit ID such as `98f850609d29bc36ded83f90c0d5be231649254b`
* `tags` - must include `$:/tags/ChangeNote`
* `change-type` - the type of change as a single string; see [[here|Release Notes and Changes]] for valid values
* `change-category` - the category of the change; see [[here|Release Notes and Changes]] for valid values
* `text` - full description of the change
* `description` - brief description of the change
* `release` - the release with which this change note is associated (eg `5.4.0`)
* `links` - a list of the ~GitHub links associated with this change
* `github-contributors` - a list of the ~GitHub handles of the developers responsible for the PR/commits
! Impact Notes
Impact notes describe the impact of a particular change. There can be multiple impact notes for a given change.
Impact note fields:
* `title` - by convention, the title of the associated change note with `/deprecations/` and a unique ID appended `$:/changenotes/5.4.0/#8702/deprecations/darkmode-info-tiddler`
* `changenote` - the title of the associated change note
* `created` - in DateFormat
* `modified` - in DateFormat
* `tags` - must include `$:/tags/ImpactNote`
* `description` - a brief description of the impact
* `impact-type` - the type of impact; see [[here|Release Notes and Changes]] for valid values
* `text` - description of the impact if required
@@ -1,18 +1,25 @@
title: Release Notes and Changes
See [[Release Notes and Changes Internals]] for a detailed breakdown of the tiddlers that make up a release note.
! Release Notes
Release notes describe the changes in a release, and the impact of those changes. They comprise the following information:
* the version number (eg `5.4.0`)
* the release date if the release has been published
* a brief description of the release
! Change Notes
* `title` by convention titles are formed `$:/changenotes/<version>/<unique identifier>`. The unique identifier is typically a GitHub PR or issue like `#1234` or a GitHub commit ID such as `98f850609d29bc36ded83f90c0d5be231649254b`
* `tags` must include `$:/tags/ChangeNote`, see below for other valid tags
* `change-type` the type of change as a single string; see below for values
* `change-category` the category of the change; see below for vqalues
Change notes describe a discrete change within a release. Change note comprise the following information:
Other valid tags for change notes:
* `$:/tags/ChangeNote/Deprecation`
* `$:/tags/ChangeNote/Breaking`
* the associated release
* the change-type from the list below
* the change-category from the list below
* a description of the change
* a list of the ~GitHub links associated with this change
* a list of the ~GitHub handles of the developers responsible for the PR/commits
Valid change note types are as follows:
@@ -21,7 +28,7 @@ Valid change note types are as follows:
* ''enhancement''
* ''deprecation''
* ''security''
* ''pluginisation''
* ''performance''
Valid change categories are as follows:
@@ -36,3 +43,17 @@ Valid change categories are as follows:
* ''nodejs''
* ''performance''
* ''developer''
! Impact Notes
Impact notes describe the impact of a particular change. There can be multiple impact notes for a given change. They comprise the following information:
* the associated change note
* a description of the impact
* the impact type from the list below
Valid impact types are as follows:
* ''deprecation'' - there are features or functionality that should no longer be used in new code
* ''compatibility-break'' - changes are included that break backwards compatibility
* ''pluginisation'' - functionality has been moved from the core to a plugin
@@ -11,15 +11,21 @@ categories/hackability/caption: Hackability
categories/nodejs/caption: Node.js
categories/performance/caption: Performance
categories/developer/caption: Developer
change-types/bugfix/caption: BUGFIX
change-types/bugfix/caption: Bugfix
change-types/bugfix/colour: #ffe246
change-types/feature/caption: FEATURE
change-types/feature/caption: Feature
change-types/feature/colour: #91ba66
change-types/enhancement/caption: ENHANCEMENT
change-types/enhancement/caption: Enhancement
change-types/enhancement/colour: #cba5ff
change-types/deprecation/caption: DEPRECATION
change-types/deprecation/caption: Deprecation
change-types/deprecation/colour: #ff9d6c
change-types/security/caption: SECURITY
change-types/security/caption: Security
change-types/security/colour: #ff6666
change-types/pluginisation/caption: PLUGINISATION
change-types/pluginisation/colour: #aaaaaa
change-types/performance/caption: Performance
change-types/performance/colour: #aaaaaa
impact-types/deprecation/caption: Deprecation
impact-types/deprecation/colour: #882222
impact-types/compatibility-break/caption: Compatibility Break
impact-types/compatibility-break/colour: #228822
impact-types/pluginisation/caption: Pluginisation
impact-types/pluginisation/colour: #222288
@@ -37,44 +37,67 @@ for their winning design for the banner for this release (here is the
\procedure change-list()
\whitespace trim
<$list filter="[enlist{$:/tw5.com/releases/info/category-order}]" variable="category">
<%if [tag[$:/tags/ChangeNote]] :filter[{!!release}match<release>] :filter[{!!change-category}match<category>] %>
<h2>
<$text text={{{ [[$:/tw5.com/releases/info/categories/]addsuffix<category>addsuffix[/caption]get[text]] }}} />
</h2>
<ul>
<$list filter="[tag[$:/tags/ChangeNote]] :filter[{!!release}match<release>] :filter[{!!change-category}match<category>]" variable="change">
<li>
<$link
to="Release Notes and Changes"
class="doc-link-badge"
target="_blank"
rel="noopener noreferrer"
style.backgroundColor={{{ [<change>get[change-type]addprefix[$:/tw5.com/releases/info/change-types/]addsuffix[/colour]get[text]] }}}
>
<$text text={{{ [<change>get[change-type]addprefix[$:/tw5.com/releases/info/change-types/]addsuffix[/caption]get[text]] }}}/>
</$link>
<$text text=" "/>
<$list filter="[<change>get[links]enlist-input[]]" variable="link">
<a
href=<<link>>
class="doc-github-link"
target="_blank"
rel="noopener noreferrer"
<div class="doc-release-note">
<$list filter="[enlist{$:/tw5.com/releases/info/category-order}]" variable="category">
<%if [tag[$:/tags/ChangeNote]] :filter[{!!release}match<release>] :filter[{!!change-category}match<category>] %>
<div class="doc-release-note-heading">
<h2 class="doc-change-note-category">
<$text text={{{ [[$:/tw5.com/releases/info/categories/]addsuffix<category>addsuffix[/caption]get[text]] }}} />
</h2>
</div>
<$list filter="[tag[$:/tags/ChangeNote]] :filter[{!!release}match<release>] :filter[{!!change-category}match<category>sort[description]]" variable="change">
<div class="doc-change-note-item">
<div class="doc-change-note-type">
<$link
to="Release Notes and Changes"
class="doc-link-badge"
style.backgroundColor={{{ [<change>get[change-type]addprefix[$:/tw5.com/releases/info/change-types/]addsuffix[/colour]get[text]] }}}
>
{{$:/core/images/github}}
</a>
<$text text=" "/>
</$list>
<$transclude $tiddler=<<change>> $field="description" $mode="inline"/>
<div class="doc-changenote-body">
<$transclude $tiddler=<<change>> $mode="block"/>
<$text text={{{ [<change>get[change-type]addprefix[$:/tw5.com/releases/info/change-types/]addsuffix[/caption]get[text]] }}}/>
</$link>
</div>
</li>
<div class="doc-change-note-body">
<$transclude $tiddler=<<change>> $field="description" $mode="inline"/>
<div class="">
<$list filter="[tag[$:/tags/ImpactNote]] :filter[{!!changenote}match<change>] +[sort[description]]" variable="impact">
<div class="doc-change-note-impactnote">
<$text text={{{ [<impact>get[impact-type]] }}}/>
<$text text=" - "/>
<$transclude $tiddler=<<impact>> $field="description" $mode="inline"/>
</div>
</$list>
</div>
<div class="doc-change-note-github-links">
<$list filter="[<change>get[links]enlist-input[]]" variable="link">
<a
href=<<link>>
class="doc-github-link"
target="_blank"
rel="noopener noreferrer"
>
{{$:/core/images/github}}
</a>
</$list>
</div>
<div class="doc-change-note-description">
<$transclude $tiddler=<<change>> $mode="block"/>
</div>
</div>
<div class="doc-change-note-impacts">
<div class="">
<$list filter="[tag[$:/tags/ImpactNote]] :filter[{!!changenote}match<change>] +[get[impact-type]unique[]sort[]]" variable="impact-type">
<span class="doc-change-note-impacts-summary-item" style.borderColor={{{ [<impact-type>addprefix[$:/tw5.com/releases/info/impact-types/]addsuffix[/colour]get[text]] }}}>
<$text text=<<impact-type>>/>
</span>
<$text text=" "/>
</$list>
</div>
</div>
</div>
</$list>
</ul>
<%endif%>
</$list>
<%endif%>
</$list>
</div>
\end change-list
\procedure acknowledgements()
@@ -82,10 +105,8 @@ for their winning design for the banner for this release (here is the
<$list filter="[enlist<release-github-contributors>sort[]]" variable="username">
<li>
<a href={{{ [[https://github.com/]addsuffix<username>] }}} class="tc-tiddlylink-external" target="_blank" rel="noopener noreferrer">
<img src={{{ [[https://github.com/]addsuffix<username>addsuffix[.png?size=64]] }}} width="64" height="64"/>
<span class="doc-github-contributor-username">
@<$text text=<<username>>/>
</span>
<span class="doc-github-contributor-avatar"><img src={{{ [[https://github.com/]addsuffix<username>addsuffix[.png?size=64]] }}} width="64" height="64"/></span>
<span class="doc-github-contributor-username">@<$text text=<<username>>/></span>
</a>
</li>
</$list>
@@ -1,3 +1,20 @@
title: $:/tw5.com/releases/styles
tags: $:/tags/Stylesheet
type: text/vnd.tiddlywiki
.doc-release-note {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-columns: fit-content(20ch) 1fr fit-content(40ch);
gap: 1.5rem;
margin: 2rem 0;
}
/* Headings span all three columns */
.doc-release-note-heading {
grid-column: 1 / -1;
}
.doc-change-note-item {
display: contents;
}