releasehx 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. checksums.yaml +7 -0
  2. data/README.adoc +2915 -0
  3. data/bin/releasehx +7 -0
  4. data/bin/rhx +7 -0
  5. data/bin/rhx-mcp +7 -0
  6. data/bin/sourcerer +32 -0
  7. data/build/docs/CNAME +1 -0
  8. data/build/docs/Gemfile.lock +95 -0
  9. data/build/docs/_config.yml +36 -0
  10. data/build/docs/config-reference.adoc +4104 -0
  11. data/build/docs/config-reference.json +1546 -0
  12. data/build/docs/index.adoc +2915 -0
  13. data/build/docs/landing.adoc +21 -0
  14. data/build/docs/manpage.adoc +68 -0
  15. data/build/docs/releasehx.1 +281 -0
  16. data/build/docs/releasehx_readme.html +367 -0
  17. data/build/docs/sample-config.adoc +9 -0
  18. data/build/docs/sample-config.yml +251 -0
  19. data/build/docs/schemagraphy_readme.html +0 -0
  20. data/build/docs/sourcerer_readme.html +46 -0
  21. data/build/snippets/helpscreen.txt +29 -0
  22. data/lib/docopslab/mcp/asset_packager.rb +30 -0
  23. data/lib/docopslab/mcp/manifest.rb +67 -0
  24. data/lib/docopslab/mcp/resource_pack.rb +46 -0
  25. data/lib/docopslab/mcp/server.rb +92 -0
  26. data/lib/docopslab/mcp.rb +6 -0
  27. data/lib/releasehx/cli.rb +937 -0
  28. data/lib/releasehx/configuration.rb +215 -0
  29. data/lib/releasehx/generated.rb +17 -0
  30. data/lib/releasehx/helpers.rb +58 -0
  31. data/lib/releasehx/mcp/asset_packager.rb +21 -0
  32. data/lib/releasehx/mcp/assets/agent-config-guide.md +178 -0
  33. data/lib/releasehx/mcp/assets/config-def.yml +1426 -0
  34. data/lib/releasehx/mcp/assets/config-reference.adoc +4104 -0
  35. data/lib/releasehx/mcp/assets/config-reference.json +1546 -0
  36. data/lib/releasehx/mcp/assets/sample-config.yml +251 -0
  37. data/lib/releasehx/mcp/manifest.rb +18 -0
  38. data/lib/releasehx/mcp/resource_pack.rb +26 -0
  39. data/lib/releasehx/mcp/server.rb +57 -0
  40. data/lib/releasehx/mcp.rb +7 -0
  41. data/lib/releasehx/ops/check_ops.rb +136 -0
  42. data/lib/releasehx/ops/draft_ops.rb +173 -0
  43. data/lib/releasehx/ops/enrich_ops.rb +221 -0
  44. data/lib/releasehx/ops/template_ops.rb +61 -0
  45. data/lib/releasehx/ops/write_ops.rb +124 -0
  46. data/lib/releasehx/rest/clients/github.yml +46 -0
  47. data/lib/releasehx/rest/clients/gitlab.yml +31 -0
  48. data/lib/releasehx/rest/clients/jira.yml +31 -0
  49. data/lib/releasehx/rest/yaml_client.rb +418 -0
  50. data/lib/releasehx/rhyml/adapter.rb +740 -0
  51. data/lib/releasehx/rhyml/change.rb +167 -0
  52. data/lib/releasehx/rhyml/liquid.rb +13 -0
  53. data/lib/releasehx/rhyml/loaders.rb +37 -0
  54. data/lib/releasehx/rhyml/mappings/github.yaml +60 -0
  55. data/lib/releasehx/rhyml/mappings/gitlab.yaml +73 -0
  56. data/lib/releasehx/rhyml/mappings/jira.yaml +29 -0
  57. data/lib/releasehx/rhyml/mappings/verb_past_tenses.yml +98 -0
  58. data/lib/releasehx/rhyml/release.rb +144 -0
  59. data/lib/releasehx/rhyml.rb +15 -0
  60. data/lib/releasehx/sgyml/helpers.rb +45 -0
  61. data/lib/releasehx/transforms/adf_to_markdown.rb +307 -0
  62. data/lib/releasehx/version.rb +7 -0
  63. data/lib/releasehx.rb +69 -0
  64. data/lib/schemagraphy/attribute_resolver.rb +48 -0
  65. data/lib/schemagraphy/cfgyml/definition.rb +90 -0
  66. data/lib/schemagraphy/cfgyml/doc_builder.rb +52 -0
  67. data/lib/schemagraphy/cfgyml/path_reference.rb +24 -0
  68. data/lib/schemagraphy/data_query/json_pointer.rb +42 -0
  69. data/lib/schemagraphy/loader.rb +59 -0
  70. data/lib/schemagraphy/regexp_utils.rb +215 -0
  71. data/lib/schemagraphy/safe_expression.rb +189 -0
  72. data/lib/schemagraphy/schema_utils.rb +124 -0
  73. data/lib/schemagraphy/tag_utils.rb +32 -0
  74. data/lib/schemagraphy/templating.rb +104 -0
  75. data/lib/schemagraphy.rb +17 -0
  76. data/lib/sourcerer/builder.rb +120 -0
  77. data/lib/sourcerer/jekyll/bootstrapper.rb +78 -0
  78. data/lib/sourcerer/jekyll/liquid/file_system.rb +74 -0
  79. data/lib/sourcerer/jekyll/liquid/filters.rb +215 -0
  80. data/lib/sourcerer/jekyll/liquid/tags.rb +44 -0
  81. data/lib/sourcerer/jekyll/monkeypatches.rb +73 -0
  82. data/lib/sourcerer/jekyll.rb +26 -0
  83. data/lib/sourcerer/plaintext_converter.rb +75 -0
  84. data/lib/sourcerer/templating.rb +190 -0
  85. data/lib/sourcerer.rb +322 -0
  86. data/specs/data/api-client-schema.yaml +160 -0
  87. data/specs/data/config-def.yml +1426 -0
  88. data/specs/data/mcp-manifest.yml +50 -0
  89. data/specs/data/rhyml-mapping-schema.yaml +410 -0
  90. data/specs/data/rhyml-schema.yaml +152 -0
  91. metadata +376 -0
@@ -0,0 +1,50 @@
1
+ resources:
2
+ - href: releasehx://agent/guide
3
+ name: agent-guide
4
+ desc: Agent guide for ReleaseHx configuration discovery
5
+ mime: text/markdown
6
+ path: docs/agent/mcp-server/agent-config-guide.md
7
+ file: agent-config-guide.md
8
+ - href: releasehx://config/sample
9
+ name: config-sample
10
+ desc: Sample config tree with defaults and comments
11
+ mime: text/yaml
12
+ path: build/docs/sample-config.yml
13
+ file: sample-config.yml
14
+ - href: releasehx://config/schema
15
+ name: config-schema
16
+ desc: Authoritative configuration definition (CFGYML)
17
+ mime: text/yaml
18
+ path: specs/data/config-def.yml
19
+ file: config-def.yml
20
+ - href: releasehx://config/reference.json
21
+ name: config-reference-json
22
+ desc: JSON reference document for configuration settings
23
+ mime: application/json
24
+ path: build/docs/config-reference.json
25
+ file: config-reference.json
26
+ - href: releasehx://config/reference.adoc
27
+ name: config-reference-adoc
28
+ desc: AsciiDoc configuration reference
29
+ mime: text/asciidoc
30
+ path: build/docs/config-reference.adoc
31
+ file: config-reference.adoc
32
+
33
+ tools:
34
+ - name: config.reference.get
35
+ title: Config Reference Lookup
36
+ desc: Retrieve config reference details using JSON Pointer
37
+ input_schema:
38
+ type: object
39
+ properties:
40
+ pointer:
41
+ type: string
42
+ desc: JSON Pointer string for the reference JSON
43
+ required:
44
+ - pointer
45
+ annotations:
46
+ title: Config Reference Lookup
47
+ read_only_hint: true
48
+ destructive_hint: false
49
+ idempotent_hint: true
50
+ open_world_hint: false
@@ -0,0 +1,410 @@
1
+ $schema:
2
+ desc: |
3
+ This schema describes an object that maps the conversion from a given data structure to the RHYML data structure, for organizing release-history information.
4
+
5
+ Typically for converting REST API payloads from JSON to RHYML-compliant YAML.
6
+ The mapping is used to extract relevant fields from the source data structure and transform them into the appropriate RHYML format.
7
+ type: Map
8
+
9
+ $anchors:
10
+ path_ppty: &path_ppty
11
+ type: String
12
+ desc: |
13
+ The path expression to locate the sought data in the source structure.
14
+ This can be a JSONPath or JMESPath expression.
15
+ sgyml: &path_sgyml_ppty
16
+ tags:
17
+ jsonpath:
18
+ desc: Using `!jsonpath` overrides default `jmespath` for `$config.path_lang`.
19
+ jmespath:
20
+ desc: Using `!jmespath` overrides default `jsonpath` for `$config.path_lang`.
21
+ tplt_ppty: &tplt_ppty
22
+ type: Template
23
+ desc: |
24
+ The template expression to transform the data retrieved by the path expression (as the variable `path`).
25
+ This can include various template functions, such as string manipulation, formatting, etc.
26
+ sgyml: &tplt_sgyml_ppty
27
+ tags:
28
+ liquid:
29
+ desc: Using `!liquid` overrides default `erb` setting established in `$config.tplt_lang`.
30
+ erb:
31
+ desc: Using `!erb` overrides default `liquid` setting established in `$config.tplt_lang`.
32
+ properties:
33
+ $meta:
34
+ req: [changes_array_path]
35
+ acc: [_config, tick, hash, part, note, summ, tags, lead, auths]
36
+ $config:
37
+ desc: Data about how to process and interpret the other properties.
38
+ type: Map
39
+ properties:
40
+ path_lang:
41
+ type: String
42
+ desc: |
43
+ The language used for path expressions.
44
+ Can be `jsonpath` or `jmespath`).
45
+
46
+ This is how to point to specific parts of the source data structure to retrieve data for populating a target property.
47
+ default: jmespath
48
+ tplt_lang:
49
+ type: String
50
+ desc: |
51
+ The template syntax used for transforming the input string.
52
+ Can be`liquid` or `erb`.
53
+ default: liquid
54
+ desc:
55
+ type: String
56
+ desc: |
57
+ A brief description of the mapping.
58
+ vrsn:
59
+ type: Scalar
60
+ desc: |
61
+ The version of the mapping schema.
62
+
63
+ May be a sequential number or a descriptive string.
64
+ note:
65
+ type: String
66
+ desc: |
67
+ Additional notes or comments about the mapping.
68
+ This can include information about versioning/divergence.
69
+ # The following properties are the ones that will be mapped from the
70
+ # source data structure to the RHYML format.
71
+ changes_array_path:
72
+ desc: |
73
+ The path expression to locate the array of changes in the source data structure.
74
+
75
+ This is typically `$.issues` or `$.items` and must be an Array of Objects (in JSON parlance).
76
+ type: String
77
+ sgyml: *path_sgyml_ppty
78
+
79
+ note_pattern:
80
+ desc: |
81
+ Pattern for extracting release notes from the note field.
82
+
83
+ The pattern can be specified in any of these formats:
84
+
85
+ . Regexp literal with flags: `/pattern/flags` +
86
+ Example: '/## Release Notes\n(?<note>.*?)(?=\n##|\z)/ms'
87
+
88
+ . Plain pattern (flags applied via config): +
89
+ Example: '## Release Notes\n(?<note>.*?)(?=\n##|\z)'
90
+
91
+ . `%r{}` syntax:
92
+ Example: '%r{## Release Notes\n(?<note>.*?)(?=\n##|\z)}ms'
93
+
94
+ The pattern should include a named capture group 'note' or a single capture group.
95
+ Common flags:
96
+
97
+ * `m`: multiline mode (`^` and `$` match line start/end)
98
+ * `s`: dot matches newline
99
+ type: String
100
+
101
+ head_pattern:
102
+ desc: |
103
+ Pattern for extracting heading from note content.
104
+
105
+ Like note_pattern, supports multiple formats:
106
+
107
+ . `/pattern/flags` +
108
+ Example: `/^## (?<head>.*?)$/m`
109
+
110
+ . Plain pattern
111
+ Example: `^## (?<head>.*?)$`
112
+
113
+ . `%r{pattern}flags` +
114
+ Example: `%r{^## (?<head>.*?)$}m`
115
+
116
+ Should include a named capture group 'head' or a single capture group.
117
+ The `m` flag is commonly used to make `^` and `$` match line boundaries.
118
+ type: String
119
+
120
+ tick:
121
+ desc: |
122
+ The issue ticket number for the change.
123
+ This is typically a unique identifier for the change request or issue.
124
+ properties:
125
+ _meta: {req: [path]}
126
+ path:
127
+ <<: *path_ppty
128
+ docs:
129
+ examples:
130
+ - code: "$.issueId"
131
+ lang: jsonpath
132
+ - code: "iid"
133
+ lang: jmespath
134
+ tplt:
135
+ <<: *tplt_ppty
136
+ docs:
137
+ text: Rarely used on the `tick` property, which is typically a String and should remain identical to the upstream source.
138
+ examples:
139
+ - code: "{{ path | append: '' }}"
140
+ lang: liquid
141
+ desc: Ensures the path is treated as a string.
142
+ type:
143
+ desc: |
144
+ The source field for change type designation.
145
+ This usually indicates the kind of change being made (bug fix, new feature, etc) and is typically a parameter called `type`.
146
+ The `path` property does not yield a simple string
147
+ properties:
148
+ _meta: {req: [path]}
149
+ path:
150
+ <<: *path_ppty
151
+ docs:
152
+ examples:
153
+ - code: "$.type"
154
+ lang: jsonpath
155
+ - code: "type"
156
+ lang: jmespath
157
+ tplt:
158
+ <<: *tplt_ppty
159
+ docs:
160
+ examples:
161
+ - code: "{{ path | default: 'task' }}"
162
+ lang: liquid
163
+ desc: Provides a default value if no type is found.
164
+ - code: "path.nil? ? 'task' : path.first"
165
+ lang: erb
166
+ desc: Provides a default value if no type is found.
167
+
168
+ hash:
169
+ desc: |
170
+ The Git commit SHA256 "`hash`" String associated with the merge commit, or whichever commit adds this change to the product in the Git repository.
171
+ properties:
172
+ _meta: {req: [path]}
173
+ path:
174
+ <<: *path_ppty
175
+ docs:
176
+ examples:
177
+ - code: "$.commit.sha"
178
+ lang: jsonpath
179
+ - code: "hash"
180
+ lang: jmespath
181
+ - code: "$.head_commit.id"
182
+ lang: jsonpath
183
+ tplt:
184
+ <<: *tplt_ppty
185
+ desc: |
186
+ The template expression to transform the hash value retrieved by the path expression.
187
+ This is usually a direct string representation of the hash.
188
+
189
+ While technically these hash Strings can be shortened and still be valid, they are better off _stored_ complete and truncated upon display.
190
+ docs:
191
+ examples:
192
+ - code: "{{ path | default: 'unknown' }}"
193
+ lang: liquid
194
+ desc: Provides a default value if no hash is found.
195
+ - code: "path.nil? ? 'unknown' : path.first"
196
+ lang: erb
197
+ desc: Provides a default value if no hash is found.
198
+ - code: "{{ path | slice: 0, 7 }}"
199
+ lang: liquid
200
+ desc: Shortens the hash to the first 7 characters, commonly used in Git but not recommended for the RHYML `hash` properties.
201
+ part:
202
+ desc: |
203
+ The component, interface, or feature of the product affected by the change.
204
+ This is typically derived from a label or tag in the source data structure.
205
+ properties:
206
+ _meta: {req: [path]}
207
+ path:
208
+ <<: *path_ppty
209
+ docs:
210
+ examples:
211
+ - code: "$.labels[?starts_with(@, 'component:')]"
212
+ lang: jsonpath
213
+ - code: "labels[?contains(@, 'component:')]"
214
+ lang: jmespath
215
+ tplt:
216
+ <<: *tplt_ppty
217
+ docs:
218
+ examples:
219
+ - code: "{{ path | first | split: ':' | last | strip }}"
220
+ lang: liquid
221
+ desc: Extracts the last part of the label after splitting by colon.
222
+ - code: "path.first.split(':').last.strip"
223
+ lang: erb
224
+ desc: Extracts the last part of the label after splitting by colon.
225
+ parts:
226
+ desc: |
227
+ When more than one component, interface, or feature of the product is affected by the change, and you wish all such "`parts`" to be noted.
228
+
229
+ This is typically derived from a label or tag in the source data structure.
230
+ properties:
231
+ _meta: {req: [path]}
232
+ path:
233
+ <<: *path_ppty
234
+ docs:
235
+ examples:
236
+ - code: "$.labels[?starts_with(@, 'component:')]"
237
+ lang: jsonpath
238
+ - code: "labels[?contains(@, 'component:')]"
239
+ lang: jmespath
240
+ tplt:
241
+ <<: *tplt_ppty
242
+ docs:
243
+ examples:
244
+ - code: "{{ path | map: 'split', ':' | map: 'last' | map: 'strip' }}"
245
+ lang: liquid
246
+ note:
247
+ desc: |
248
+ The body or content of the change request or issue.
249
+ This is typically a description or detailed information about the change.
250
+
251
+ Presence of content here designates inclusion in the "`Release Notes`" section/document in typical cases.
252
+
253
+ The `note` property captures the entire note body, which is usually further filtered/transformed based on configuration settings.
254
+ properties:
255
+ _meta: {req: [path]}
256
+ path:
257
+ <<: *path_ppty
258
+ type: String
259
+ templating:
260
+ default: liquid
261
+ delay: false
262
+ docs:
263
+ examples:
264
+ - code: "$.body"
265
+ lang: jsonpath
266
+ - code: "description"
267
+ lang: jmespath
268
+ - code: '!liquid $.fields.{{ }}'
269
+ tplt:
270
+ <<: *tplt_ppty
271
+ docs:
272
+ text: |
273
+ Most formatting is done using configuration settings or template output.
274
+ If the intended note content is a subset or converted form of the body captured by the note `path`, you most likely want to handle that in the config or template.
275
+ summ:
276
+ desc: |
277
+ Usually the issue title, this property maps a summary string from the source to the corresponding element in RHYML.
278
+ properties:
279
+ _meta: {req: [path]}
280
+ path:
281
+ <<: *path_ppty
282
+ docs:
283
+ examples:
284
+ - code: "$.title"
285
+ lang: jsonpath
286
+ - code: "summary"
287
+ lang: jmespath
288
+ tplt:
289
+ <<: *tplt_ppty
290
+ docs:
291
+ examples:
292
+ - code: "{{ path | default: 'No Title' | truncate: 50, '' }}"
293
+ lang: liquid
294
+ desc: Provides a default value if the title is not present.
295
+ - code: "path.nil? || path.empty? ? 'No Title' : path.first[0...50]"
296
+ lang: erb
297
+ desc: Provides a default value if the title is not present.
298
+
299
+ tags:
300
+ desc: |
301
+ An array of tags associated with the change.
302
+ These are typically derived from "`labels`" or "`tags`" in the source data structure.
303
+
304
+ This tags property must be an Array of Scalars in RHYML.
305
+ But each tag in the RHYML model may be constructed uniquely, in cases where not all tags are the same.
306
+
307
+ Any property of this object named like `_<tagname>` will be treated as defining the source and mapping the value of that tag.
308
+
309
+ For any implementation of RHYML, tags will be mapped to their corresponding value names in the source, but the tag values themselves must be retrieved and mapped to strings the RHYML definition can reference.
310
+ The final RHYML `tags` property will only include tags registered in the config.
311
+ properties:
312
+ _meta:
313
+ req: [path]
314
+ arb: true
315
+ path:
316
+ <<: *path_ppty
317
+ docs:
318
+ examples:
319
+ - code: "$.labels"
320
+ lang: jsonpath
321
+ - code: "tags"
322
+ lang: jmespath
323
+ tplt:
324
+ <<: *tplt_ppty
325
+ docs:
326
+ examples:
327
+ - code: "path.map(&:downcase).uniq"
328
+ lang: erb
329
+ desc: Converts all tags to lowercase and removes duplicates.
330
+ <_tagname>:
331
+ key:
332
+ regexp: /^_([\w-]{2,25})$/
333
+ properties:
334
+ _meta:
335
+ req: [path]
336
+ path:
337
+ <<: *path_ppty
338
+ desc: |
339
+ The path expression to locate the specific tag in the source data structure.
340
+ This is most often used when the RHYML tag maps to something other than an item in a `labels` Array.
341
+
342
+ Any tag defined this way is added to the `tags` Array when retrieved.
343
+ tplt:
344
+ <<: *tplt_ppty
345
+ desc: |
346
+ The template expression to transform the tag value retrieved by the path expression.
347
+ docs:
348
+ examples:
349
+ - code: |
350
+ if path && !path.empty?
351
+ path.first.name
352
+ else
353
+ nil
354
+ end
355
+ desc: Conditionally expresses a tag name based on the value of the custom checkbox in the source data.
356
+ lang: erb
357
+ lead:
358
+ desc: |
359
+ The lead or primary assignee for the change request or issue.
360
+ This is typically derived from the assignee or owner of the change.
361
+
362
+ The `lead` property is used to identify the main point of contact for the change.
363
+ It may or may not be expressed in public-facing release histories.
364
+ properties:
365
+ _meta: {req: [path]}
366
+ path:
367
+ <<: *path_ppty
368
+ docs:
369
+ examples:
370
+ - code: "$.assignee"
371
+ lang: jsonpath
372
+ - code: "$.assignees[0]"
373
+ lang: jsonpath
374
+ - code: "assignees[0]"
375
+ lang: jmespath
376
+ desc: |
377
+ The path expression to locate the lead or primary assignee in the source data structure.
378
+ tplt:
379
+ <<: *tplt_ppty
380
+ docs:
381
+ examples:
382
+ - code: "{{ path.login | default: 'Unassigned' }}"
383
+ lang: liquid
384
+ desc: Provides a default value if no assignee is found.
385
+ - code: "path.nil? ? 'Unassigned' : path.first.login"
386
+ lang: erb
387
+ desc: Provides a default value if no assignee is found.
388
+ auths:
389
+ desc: |
390
+ An array of authors or contributors associated with the change request or issue.
391
+ This is typically derived from the authors, owners, reviewers, or contributors of the change and is not typically made public.
392
+ properties:
393
+ _meta: {req: [path]}
394
+ path:
395
+ <<: *path_ppty
396
+ docs:
397
+ examples:
398
+ - code: "$.assignees"
399
+ lang: jsonpath
400
+ - code: "authors"
401
+ lang: jmespath
402
+ - code: |
403
+ [assignee.displayName, creator.displayName, reporter.displayName]
404
+ lang: jmespath
405
+ desc: Makes an array out of the assignee.displayName, creator.displayName, and reporter.displayName.
406
+ desc: |
407
+ The path expression to locate the authors or contributors in the source data structure.
408
+
409
+
410
+
@@ -0,0 +1,152 @@
1
+ $schema:
2
+ type: Map
3
+ desc: |
4
+ The schema for documenting the changes in an individual revision release in RHYML.
5
+
6
+ This object is typically hosted as serialized Array of tabular data under a `releases`
7
+ properties:
8
+ $meta:
9
+ req: [code,changes]
10
+ code:
11
+ desc: The revision (version) number or other identifier of the release.
12
+ type: String
13
+ date:
14
+ desc: The release date.
15
+ type: Date
16
+ hash:
17
+ desc: The Git commit hash (SHA256 ID) for the release.
18
+ type: String
19
+ memo:
20
+ desc: |
21
+ A brief summary of the release.
22
+ May include markup formatting.
23
+ type: String
24
+ $config:
25
+ desc: |
26
+ Settings specific to this document.
27
+ type: Map
28
+ properties:
29
+ markup:
30
+ desc: |
31
+ The markup format for the `note` and `memo` properties of RHYML objects.
32
+
33
+ Change to `asciidoc` to convert upstream Markdown to AsciiDoc.
34
+
35
+ This setting defaults to the value of the `config.rhyml.markup` setting, which defaults to `markdown`.
36
+ type: String
37
+ dflt: markdown
38
+ changes:
39
+ desc: A list of changes completed in this release.
40
+ type: ArrayTable
41
+ aliases: ['work']
42
+ recordset:
43
+
44
+ properties:
45
+ chid:
46
+ desc:
47
+ The change identifier.
48
+ This is a contiguous String (no spaces) that MUST be among all changes in its own release and is recommended to be universally unique (across all releases).
49
+
50
+ By default, when RHYML is automatically generated, this property is constructed from the `tick` String and the first portion of the `summ` String, truncated and slugified.
51
+
52
+ You can override this in the `config.templates.chid` property.
53
+ type: Slug
54
+
55
+ tick:
56
+ desc: The issue ticket number for the change.
57
+ type: Line
58
+
59
+ hash:
60
+ desc: The commit hash for the change.
61
+ type: Line
62
+
63
+ type:
64
+ desc: |
65
+ The type of change.
66
+
67
+ Must be registered in the `types` block of the config.
68
+ type: String
69
+ context:
70
+ has_one: './config-def.yml#/properties/types'
71
+
72
+ part:
73
+ desc: |
74
+ The component, interface, feature, or aspect of the product affected by the change.
75
+
76
+ Must be registered in the `parts` block of the config.
77
+
78
+ If `part` is specified, `parts` cannot be specified.
79
+ type: String
80
+
81
+ parts:
82
+ desc: |
83
+ When more than one component, interface, feature, or aspect of the product is affected by the change, and you wish all such "`parts`" to be noted.
84
+
85
+ All items must be listed in the `parts` block of the config.
86
+
87
+ If `parts` is specified, `part` cannot be specified.
88
+ type: Array
89
+
90
+ summ:
91
+ desc: |
92
+ A brief summary of the change.
93
+ Typically used as the Changelog entry.
94
+ type: String
95
+
96
+ head:
97
+ desc: |
98
+ The headline for a release note, if the value of the `summ` property is not preferred.
99
+ In standard templates, the headline placeholder looks for a `head` property but falls back to `summ`.
100
+
101
+ note:
102
+ desc: |
103
+ A note about the change.
104
+
105
+ May include markup formatting.
106
+ type: String
107
+
108
+ tags:
109
+ desc: |
110
+ An array of tags associated with the change.
111
+
112
+ Must be registered in the `tags` block of the config.
113
+ type: Array
114
+ items:
115
+ type: Slug
116
+ has_one: './config-def.yml#/properties/tags'
117
+
118
+ links:
119
+ desc: |
120
+ A list of documentation or marketing links for the change.
121
+
122
+ The `xref` and `href` properties are mutually exclusive; `href` will supersede.
123
+ type: ArrayTable
124
+ properties:
125
+ text:
126
+ desc: The display text for the link.
127
+ type: String
128
+ xref:
129
+ desc: The local cross-reference for the linked document.
130
+ type: String
131
+ href:
132
+ desc: The URL for the linked document.
133
+ type: String
134
+
135
+ lead:
136
+ desc: |
137
+ The primary contributor to the change.
138
+ Associated with a username in the Issues system.
139
+ type: Slug
140
+
141
+ auths:
142
+ desc: |
143
+ An array of contributors to the change.
144
+ Associated with a username in the Issues system.
145
+ type: ArrayTable
146
+ properties:
147
+ user:
148
+ desc: The username of the contributor.
149
+ type: Slug
150
+ memo:
151
+ desc: A role label or note about the contributor's involvement.
152
+ type: String