releasehx 0.1.1 → 0.2.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 (87) hide show
  1. checksums.yaml +4 -4
  2. data/README.adoc +366 -331
  3. data/build/docs/_config.yml +18 -1
  4. data/build/docs/_release_index.adoc +10 -0
  5. data/build/docs/config-reference.adoc +203 -16
  6. data/build/docs/config-reference.json +60 -10
  7. data/build/docs/index.adoc +316 -59
  8. data/build/docs/landing.adoc +11 -4
  9. data/build/docs/manpage.adoc +2 -2
  10. data/build/docs/release-procedure.adoc +365 -0
  11. data/build/docs/release-procedure.html +87 -0
  12. data/build/docs/releasehx.1 +17 -5
  13. data/build/docs/releases.adoc +28 -0
  14. data/build/docs/sample-config.adoc +2 -0
  15. data/build/docs/sample-config.yml +16 -9
  16. data/lib/releasehx/cli.rb +21 -9
  17. data/lib/releasehx/configuration.rb +0 -1
  18. data/lib/releasehx/generated.rb +1 -1
  19. data/lib/releasehx/mcp/assets/agent-config-guide.md +1 -1
  20. data/lib/releasehx/mcp/assets/config-def.yml +126 -8
  21. data/lib/releasehx/mcp/assets/config-reference.adoc +203 -16
  22. data/lib/releasehx/mcp/assets/config-reference.json +60 -10
  23. data/lib/releasehx/mcp/assets/sample-config.yml +16 -9
  24. data/lib/releasehx/mcp/server.rb +0 -1
  25. data/lib/releasehx/ops/enrich_ops.rb +161 -55
  26. data/lib/releasehx/ops/template_ops.rb +1 -1
  27. data/lib/releasehx/rhyml/adapter.rb +13 -9
  28. data/lib/releasehx/rhyml/mappings/github.yaml +3 -1
  29. data/lib/releasehx/rhyml/templates/bootstrap-overrides.css +15 -0
  30. data/lib/releasehx/rhyml/templates/changelog.adoc.liquid +2 -0
  31. data/lib/releasehx/rhyml/templates/changelog.html.liquid +6 -4
  32. data/lib/releasehx/rhyml/templates/changelog.md.liquid +1 -0
  33. data/lib/releasehx/rhyml/templates/embedded.css.liquid +263 -0
  34. data/lib/releasehx/rhyml/templates/entry.adoc.liquid +4 -7
  35. data/lib/releasehx/rhyml/templates/entry.html.liquid +21 -20
  36. data/lib/releasehx/rhyml/templates/entry.md.liquid +14 -21
  37. data/lib/releasehx/rhyml/templates/head-parser.liquid +6 -2
  38. data/lib/releasehx/rhyml/templates/header.liquid +13 -4
  39. data/lib/releasehx/rhyml/templates/history.html.liquid +152 -33
  40. data/lib/releasehx/rhyml/templates/metadata-entry.adoc.liquid +83 -49
  41. data/lib/releasehx/rhyml/templates/metadata-entry.html.liquid +60 -1
  42. data/lib/releasehx/rhyml/templates/metadata-entry.md.liquid +65 -113
  43. data/lib/releasehx/rhyml/templates/metadata-note.adoc.liquid +83 -49
  44. data/lib/releasehx/rhyml/templates/metadata-note.html.liquid +59 -22
  45. data/lib/releasehx/rhyml/templates/metadata-note.md.liquid +68 -23
  46. data/lib/releasehx/rhyml/templates/note.adoc.liquid +2 -40
  47. data/lib/releasehx/rhyml/templates/note.html.liquid +25 -19
  48. data/lib/releasehx/rhyml/templates/note.md.liquid +43 -29
  49. data/lib/releasehx/rhyml/templates/parts-listing.liquid +6 -6
  50. data/lib/releasehx/rhyml/templates/release-notes.adoc.liquid +2 -0
  51. data/lib/releasehx/rhyml/templates/release-notes.html.liquid +6 -4
  52. data/lib/releasehx/rhyml/templates/release-notes.md.liquid +1 -0
  53. data/lib/releasehx/rhyml/templates/release.adoc.liquid +2 -0
  54. data/lib/releasehx/rhyml/templates/release.md.liquid +8 -7
  55. data/lib/releasehx/rhyml/templates/rhyml-change.yaml.liquid +36 -35
  56. data/lib/releasehx/rhyml/templates/wrapper.html.liquid +103 -0
  57. data/lib/releasehx/sgyml/helpers.rb +0 -2
  58. data/lib/releasehx/transforms/adf_to_markdown.rb +1 -1
  59. data/lib/releasehx/version.rb +0 -2
  60. data/lib/releasehx.rb +2 -2
  61. data/specs/data/config-def.yml +126 -8
  62. metadata +50 -26
  63. data/build/docs/Gemfile.lock +0 -95
  64. data/build/docs/schemagraphy_readme.html +0 -0
  65. data/build/docs/sourcerer_readme.html +0 -46
  66. data/lib/schemagraphy/attribute_resolver.rb +0 -48
  67. data/lib/schemagraphy/cfgyml/definition.rb +0 -90
  68. data/lib/schemagraphy/cfgyml/doc_builder.rb +0 -52
  69. data/lib/schemagraphy/cfgyml/path_reference.rb +0 -24
  70. data/lib/schemagraphy/data_query/json_pointer.rb +0 -42
  71. data/lib/schemagraphy/loader.rb +0 -59
  72. data/lib/schemagraphy/regexp_utils.rb +0 -215
  73. data/lib/schemagraphy/safe_expression.rb +0 -189
  74. data/lib/schemagraphy/schema_utils.rb +0 -124
  75. data/lib/schemagraphy/tag_utils.rb +0 -32
  76. data/lib/schemagraphy/templating.rb +0 -104
  77. data/lib/schemagraphy.rb +0 -17
  78. data/lib/sourcerer/builder.rb +0 -120
  79. data/lib/sourcerer/jekyll/bootstrapper.rb +0 -78
  80. data/lib/sourcerer/jekyll/liquid/file_system.rb +0 -74
  81. data/lib/sourcerer/jekyll/liquid/filters.rb +0 -215
  82. data/lib/sourcerer/jekyll/liquid/tags.rb +0 -44
  83. data/lib/sourcerer/jekyll/monkeypatches.rb +0 -73
  84. data/lib/sourcerer/jekyll.rb +0 -26
  85. data/lib/sourcerer/plaintext_converter.rb +0 -75
  86. data/lib/sourcerer/templating.rb +0 -190
  87. data/lib/sourcerer.rb +0 -322
data/lib/releasehx/cli.rb CHANGED
@@ -688,23 +688,32 @@ module ReleaseHx
688
688
  end
689
689
 
690
690
  def create_rhyml_from_source source_path, version
691
- # Determine source type from configuration, not just file extension
692
- configured_source_type = @settings.dig('origin', 'source') || 'json'
693
-
694
- # Handle different source types based on configuration
695
- case configured_source_type
696
- when 'rhyml'
691
+ # First check if source_path is actually a file (overrides config)
692
+ if version_or_file(source_path) == :file && File.exist?(source_path)
697
693
  # Load RHYML data directly from YAML file
694
+ ReleaseHx.logger.debug "Loading RHYML from file: #{source_path}" if options[:verbose]
698
695
  rhyml_data = SchemaGraphy::Loader.load_yaml_with_tags(source_path)
699
696
  release_data = rhyml_data['releases'] ? rhyml_data['releases'].first : rhyml_data
700
697
 
701
698
  # Convert hash keys to keyword arguments for Release constructor
702
- ReleaseHx::RHYML::Release.new(
699
+ return ReleaseHx::RHYML::Release.new(
703
700
  code: release_data['code'] || version,
704
701
  date: release_data['date'],
705
702
  hash: release_data['hash'],
706
703
  memo: release_data['memo'],
707
704
  changes: release_data['changes'] || [])
705
+ end
706
+
707
+ # Determine source type from configuration
708
+ configured_source_type = @settings.dig('origin', 'source') || 'json'
709
+
710
+ # Handle different source types based on configuration
711
+ case configured_source_type
712
+ when 'rhyml'
713
+ # Config says rhyml but source_path is not a file - error
714
+ raise Thor::Error,
715
+ "ERROR: origin.source is 'rhyml' but no YAML file provided. " \
716
+ 'Specify a YAML file path as the first argument.'
708
717
  when 'json'
709
718
  # For json type, only use local files (never API calls)
710
719
  if options[:api_data]
@@ -744,12 +753,14 @@ module ReleaseHx
744
753
  @settings['modes'] ||= {}
745
754
 
746
755
  unless options[:wrap].nil?
747
- @settings['modes']['wrapped'] = options[:wrap]
756
+ @settings['modes']['html_wrap'] = options[:wrap]
748
757
  ReleaseHx.logger.info "✓ Changed HTML wrapping to: #{options[:wrap]}" if options[:verbose]
749
758
  end
750
759
 
751
760
  return if options[:frontmatter].nil?
752
761
 
762
+ @settings['modes']['markdown_frontmatter'] = options[:frontmatter]
763
+ @settings['modes']['asciidoc_frontmatter'] = options[:frontmatter]
753
764
  @settings['modes']['html_frontmatter'] = options[:frontmatter]
754
765
  ReleaseHx.logger.info "✓ Changed frontmatter inclusion to: #{options[:frontmatter]}" if options[:verbose]
755
766
  end
@@ -831,8 +842,9 @@ module ReleaseHx
831
842
 
832
843
  # Extract issues array if client config specifies root_issues_path: "issues"
833
844
  # This matches what the API client does when fetching live data
845
+ # BUT: Skip extraction if a custom mapping is provided, as it handles extraction itself
834
846
  origin_source = @settings.dig('origin', 'source')
835
- if origin_source && payload.is_a?(Hash) && payload.key?('issues')
847
+ if origin_source && payload.is_a?(Hash) && payload.key?('issues') && !options[:mapping]
836
848
  client_path = find_api_client_config(origin_source)
837
849
  if client_path
838
850
  client_def = SchemaGraphy::Loader.load_yaml_with_tags(client_path)
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'psych'
4
- require_relative '../schemagraphy/loader'
5
4
 
6
5
  module ReleaseHx
7
6
  # Manages the application's configuration by loading and merging settings
@@ -2,7 +2,7 @@
2
2
  # Auto-generated by Sourcerer::Builder
3
3
 
4
4
  module ReleaseHx
5
- ATTRIBUTES = {:globals=>{"attribute-undefined"=>"drop-line", "attribute-missing"=>"skip", "appendix-caption"=>"Appendix", "appendix-refsig"=>"Appendix", "caution-caption"=>"Caution", "chapter-refsig"=>"Chapter", "example-caption"=>"Example", "figure-caption"=>"Figure", "important-caption"=>"Important", "last-update-label"=>"Last updated", "note-caption"=>"Note", "part-refsig"=>"Part", "prewrap"=>"", "sectids"=>"", "section-refsig"=>"Section", "table-caption"=>"Table", "tip-caption"=>"Tip", "toc-placement"=>"macro", "toc-title"=>"Table of Contents", "untitled-label"=>"Untitled", "version-label"=>"Version", "warning-caption"=>"Warning", "notitle"=>"", "docfile"=>"/home/brian/Documents/work/releasehx/README.adoc", "docdir"=>"/home/brian/Documents/work/releasehx", "docfilesuffix"=>".adoc", "docname"=>"README", "embedded"=>"", "asciidoctor"=>"", "asciidoctor-version"=>"2.0.23", "safe-mode-name"=>"unsafe", "safe-mode-unsafe"=>"", "safe-mode-level"=>0, "max-include-depth"=>64, "user-home"=>"/home/brian", "doctype"=>"article", "htmlsyntax"=>"html", "backend-html5-doctype-article"=>"", "doctype-article"=>"", "backend-html5"=>"", "backend"=>"html5", "outfilesuffix"=>".html", "filetype"=>"html", "filetype-html"=>"", "basebackend-html-doctype-article"=>"", "basebackend-html"=>"", "basebackend"=>"html", "stylesdir"=>".", "iconsdir"=>"./images/icons", "localdate"=>"2026-01-01", "localyear"=>"2026", "localtime"=>"13:42:59 -0500", "localdatetime"=>"2026-01-01 13:42:59 -0500", "docdate"=>"2026-01-01", "docyear"=>"2026", "doctime"=>"13:41:27 -0500", "docdatetime"=>"2026-01-01 13:41:27 -0500", "page-layout"=>"default", "page-permalink"=>"/docs", "page-nav_order"=>"1", "doctitle"=>"ReleaseHx", "docopslab_git_www"=>"https://github.com/DocOps", "this_prod_slug"=>"releasehx", "releasehx_prod_repo"=>"https://github.com/DocOps/releasehx", "releasehx_demo_repo"=>"https://github.com/DocOps/releasehx-demo", "this_prod_repo"=>"https://github.com/DocOps/releasehx", "this_prod_vrsn_major"=>"0", "this_prod_vrsn_minor"=>"1", "this_prod_vrsn_major-minor"=>"0.1", "this_prod_vrsn_patch"=>"1", "this_prod_vrsn"=>"0.1.1", "next_prod_vrsn"=>"0.2.0", "tagline"=>"Generate formatted release histories from Jira, GitHub, GitLab, YAML, or JSON sources.", "description"=>"CLI utility and Ruby API for generating structured release notes and changelog documents from various issue-tracking platforms or YAML definitions into plaintext drafts (<strong>AsciiDoc</strong>, <strong>Markdown</strong>, <strong>YAML</strong>) and rich-text output (<strong>HTML</strong> and <strong>PDF</strong>).", "gem_config_definition_path"=>"./specs/data/config-def.yml", "app_default_config_path"=>"./.releasehx.yml", "default_markup"=>"markdown", "default_slug_type"=>"kebab", "default_tplt_lang"=>"liquid", "default_drafts_dir"=>"_drafts", "default_enrich_dir"=>"_publish", "default_output_dir"=>".", "default_payloads_dir"=>"_payloads", "default_templates_dir"=>"_templates", "default_mappings_dir"=>"_mappings", "default_api_clients_dir"=>"_apis", "default_cache_dir"=>".releasehx/cache", "default_api_cred_env"=>"RELEASEHX_API_CRED", "default_api_key_env"=>"RELEASEHX_API_KEY", "default_api_user_env"=>"RELEASEHX_API_USER", "default_api_org_env"=>"RELEASEHX_API_ORG", "markdown_extensions"=>".md, .markdown", "asciidoc_extensions"=>".adoc, .ad, .asciidoc", "yaml_extensions"=>".yml, .yaml, .rhyml", "draft_source_file_types"=>"AsciiDoc, Markdown, YAML", "draft_source_extensions"=>".md, .markdown, .adoc, .ad, .asciidoc, .yml, .yaml, .rhyml", "enrich_file_types"=>"HTML, PDF", "enrich_extensions"=>".html, .pdf", "docker_base_command"=>"docker run -it --rm --user $(id -u):$(id -g) -v $(pwd):/workdir docopslab/releasehx rhx", "this_prod_repo_branch"=>"https://github.com/DocOps/releasehx/tree/release/0.1", "docs_extn"=>"", "toc"=>"", "toclevels"=>"3", "authorcount"=>0, "toc-position"=>"content"}}
5
+ ATTRIBUTES = {:globals=>{"attribute-undefined"=>"drop-line", "attribute-missing"=>"skip", "appendix-caption"=>"Appendix", "appendix-refsig"=>"Appendix", "caution-caption"=>"Caution", "chapter-refsig"=>"Chapter", "example-caption"=>"Example", "figure-caption"=>"Figure", "important-caption"=>"Important", "last-update-label"=>"Last updated", "note-caption"=>"Note", "part-refsig"=>"Part", "prewrap"=>"", "sectids"=>"", "section-refsig"=>"Section", "table-caption"=>"Table", "tip-caption"=>"Tip", "toc-placement"=>"macro", "toc-title"=>"Table of Contents", "untitled-label"=>"Untitled", "version-label"=>"Version", "warning-caption"=>"Warning", "notitle"=>"", "docfile"=>"/home/brian/Documents/work/releasehx/README.adoc", "docdir"=>"/home/brian/Documents/work/releasehx", "docfilesuffix"=>".adoc", "docname"=>"README", "embedded"=>"", "asciidoctor"=>"", "asciidoctor-version"=>"2.0.26", "safe-mode-name"=>"unsafe", "safe-mode-unsafe"=>"", "safe-mode-level"=>0, "max-include-depth"=>64, "user-home"=>"/home/brian", "doctype"=>"article", "htmlsyntax"=>"html", "backend-html5-doctype-article"=>"", "doctype-article"=>"", "backend-html5"=>"", "backend"=>"html5", "outfilesuffix"=>".html", "filetype"=>"html", "filetype-html"=>"", "basebackend-html-doctype-article"=>"", "basebackend-html"=>"", "basebackend"=>"html", "stylesdir"=>".", "iconsdir"=>"./images/icons", "localdate"=>"2026-05-27", "localyear"=>"2026", "localtime"=>"11:16:48 -0400", "localdatetime"=>"2026-05-27 11:16:48 -0400", "docdate"=>"2026-05-27", "docyear"=>"2026", "doctime"=>"10:37:27 -0400", "docdatetime"=>"2026-05-27 10:37:27 -0400", "page-layout"=>"default", "page-permalink"=>"/docs/", "page-title"=>"ReleaseHx Docs", "page-nav_order"=>"1", "doctitle"=>"ReleaseHx", "this_proj_slug"=>"releasehx", "this_proj_name"=>"ReleaseHx", "docopslab_src_www_url"=>"https://raw.githubusercontent.com/DocOps", "docopslab_domain"=>"docopslab.org", "docopslab_www_url"=>"https://docopslab.org", "docopslab_io_www_url"=>"https://docopslab.github.io", "docopslab_ruby_version"=>"3.2.7", "docopslab_git_src_uri"=>"git@github.com:DocOps", "this_proj_src_www_url"=>"https://raw.githubusercontent.com/DocOps/releasehx", "this_proj_src_raw_url"=>"https://raw.githubusercontent.com/DocOps/releasehx/main", "this_proj_src_main_files_url"=>"https://raw.githubusercontent.com/DocOps/releasehx/blob/main", "this_proj_src_main_edit_url"=>"https://raw.githubusercontent.com/DocOps/releasehx/edit/main", "this_proj_src_git_uri"=>"git@github.com:DocOps/releasehx.git", "this_proj_ruby_version"=>"3.2.7", "extn"=>"", "releasehx_demo_repo"=>"https://raw.githubusercontent.com/DocOps/releasehx-demo", "this_prod_slug"=>"releasehx", "this_prod_vrsn_major"=>"0", "this_prod_vrsn_minor"=>"2", "this_prod_vrsn_majmin"=>"0.2", "this_prod_vrsn_patch"=>"0", "this_prod_vrsn"=>"0.2.0", "next_prod_vrsn"=>"0.3.0", "next_prod_vrsn_majmin"=>"0.3", "tagline"=>"Generate formatted release histories from Jira, GitHub, GitLab, YAML, or JSON sources.", "description"=>"CLI utility and Ruby API for generating structured release notes and changelog documents from various issue-tracking platforms or YAML definitions into plaintext drafts (<strong>AsciiDoc</strong>, <strong>Markdown</strong>, <strong>YAML</strong>) and rich-text output (<strong>HTML</strong> and <strong>PDF</strong>).", "gem_config_definition_path"=>"./specs/data/config-def.yml", "app_default_config_path"=>"./.releasehx.yml", "docker_run_command"=>"docker run -it --rm --user $(id -u):$(id -g) -v $(pwd):/workdir docopslab/releasehx rhx", "default_markup"=>"markdown", "default_slug_type"=>"kebab", "default_tplt_lang"=>"liquid", "default_drafts_dir"=>"_drafts", "default_enrich_dir"=>"_publish", "default_output_dir"=>".", "default_payloads_dir"=>"_payloads", "default_templates_dir"=>"_templates", "default_mappings_dir"=>"_mappings", "default_api_clients_dir"=>"_apis", "default_cache_dir"=>".releasehx/cache", "default_api_cred_env"=>"RELEASEHX_API_CRED", "default_api_key_env"=>"RELEASEHX_API_KEY", "default_api_user_env"=>"RELEASEHX_API_USER", "default_api_org_env"=>"RELEASEHX_API_ORG", "markdown_extensions"=>".md, .markdown", "asciidoc_extensions"=>".adoc, .ad, .asciidoc", "yaml_extensions"=>".yml, .yaml, .rhyml", "draft_source_file_types"=>"AsciiDoc, Markdown, YAML", "draft_source_extensions"=>".md, .markdown, .adoc, .ad, .asciidoc, .yml, .yaml, .rhyml", "enrich_file_types"=>"HTML, PDF", "enrich_extensions"=>".html, .pdf", "asciisourcerer_www_url"=>"https://raw.githubusercontent.com/DocOps/asciisourcerer", "schemagraphy_www_url"=>"https://raw.githubusercontent.com/DocOps/schemagraphy", "toc"=>"", "toclevels"=>"3", "authorcount"=>0, "toc-position"=>"content"}}
6
6
 
7
7
  SNIPPET_LOOKUP = {"helpscreen"=>"helpscreen.txt"}
8
8
 
@@ -137,7 +137,7 @@ Use `releasehx://config/schema` when:
137
137
  ## Potentially unintuitive principles
138
138
 
139
139
  - **“Frontmatter” is controlled in two places (toggle vs template).**
140
- If youre trying to *turn frontmatter on/off*, look under `modes.*_frontmatter`. If youre trying to *change what frontmatter contains*, look under `templates.*_frontmatter` (Markdown/AsciiDoc/HTML each have their own). Also note `modes.wrapped` affects HTML wrapping, which can look like a frontmatter problem when its really wrapping/boilerplate.
140
+ If you're trying to *turn frontmatter on/off*, look under `modes.*_frontmatter`. If you're trying to *change what frontmatter contains*, look under `templates.*_frontmatter` (Markdown/AsciiDoc/HTML each have their own). Also note `modes.html_wrap` affects HTML wrapping, which can look like a frontmatter problem when it's really wrapping/boilerplate.
141
141
 
142
142
  - **Links require both a template and an enable switch.**
143
143
  Defining URL templates under `links.web.href` / `links.git.href` does nothing by itself. You must also enable display under `history.items.show_issue_links` / `history.items.show_git_links` (or the per-section overrides under changelog/notes items, if present). If a user says “I set the link template but no links appear,” check the `history.*items*` flags.
@@ -165,6 +165,7 @@ properties:
165
165
  Must be `issue_body`, `custom_field`, or `commit_message`.
166
166
 
167
167
  Defaults to `issue_body` for GitHub and GitLab, but to `custom_field` for Jira.
168
+ dflt: issue_body
168
169
  note_custom_field:
169
170
  type: String
170
171
  desc: |
@@ -182,7 +183,8 @@ properties:
182
183
  Uses Capture group `note` in the Regular Expression to establish the entire note content.
183
184
 
184
185
  See the `conversions.head_pattern` property for details on extracting a heading (`head` in RHYML) from the `note` content.
185
- dflt: '/^((#|=)+ (Draft )?Release Note.*)|(<!-- (draft )?release note -->)\n(?<note>\w(.|\n)+)/gmi'
186
+ dflt: '/^(((#|=)+ (Draft )?Release Note.*?)|(<!-- (draft )?release note -->))\n+(?<note>(.|
187
+ )+)/gmi'
186
188
  head_pattern:
187
189
  type: RegExp
188
190
  desc: |
@@ -201,12 +203,59 @@ properties:
201
203
  The origin markup format for notes.
202
204
  May be `markdown` or `asciidoc`.
203
205
  dflt: markdown
204
- engine:
205
- type: String
206
+ engines:
206
207
  desc: |
207
- The markup converter to use for the issues.
208
- Defaults to `asciidoctor` for AsciiDoc and `redcarpet` for Markdown.
209
- Options include `asciidoctor`, `redcarpet`, `commonmarker`, `kramdown`, or `pandoc`.
208
+ Specifies the conversion engines to use when enriching to various output formats.
209
+
210
+ These settings determine which tool processes the conversion from draft formats to rich output.
211
+ Intelligent defaults are applied based on source format when engines are not explicitly configured.
212
+ properties:
213
+ html:
214
+ type: String
215
+ desc: |
216
+ Engine for converting to HTML format.
217
+
218
+ Valid engines:
219
+
220
+ [horizontal]
221
+ `asciidoctor-html5`:: Standard Asciidoctor HTML5 backend (nested div structure)
222
+ `asciidoctor-html5s`:: Semantic HTML5 backend (cleaner section-based markup)
223
+ `kramdown`:: Kramdown Markdown converter (for Markdown sources)
224
+ `pandoc`:: Universal document converter (if available)
225
+
226
+ When not specified, intelligent defaults apply:
227
+
228
+ - AsciiDoc → HTML: `asciidoctor-html5s` (semantic HTML5)
229
+ - Markdown → HTML: `kramdown`
230
+ - RHYML → HTML: Liquid templates (no engine needed)
231
+ docs: |
232
+ The html5s backend produces cleaner, more semantic HTML with `<section>` elements
233
+ instead of nested `<div class="sect1"><div class="sectionbody">` structures.
234
+
235
+ This is particularly useful when you want to apply custom CSS or when generating
236
+ HTML that will be further processed or embedded in other systems.
237
+
238
+ For backwards compatibility or when you need the traditional Asciidoctor structure,
239
+ use `asciidoctor-html5`.
240
+ pdf:
241
+ type: String
242
+ desc: |
243
+ Engine for converting to PDF format.
244
+
245
+ Valid engines:
246
+
247
+ [horizontal]
248
+ `asciidoctor-pdf`:: Asciidoctor PDF converter (default for AsciiDoc)
249
+ `asciidoctor-web-pdf`:: Web-based PDF converter using headless Chrome
250
+ `pandoc`:: Universal document converter (if available)
251
+
252
+ When not specified, intelligent defaults apply:
253
+
254
+ - AsciiDoc → PDF: `asciidoctor-pdf`
255
+ - Markdown → PDF: `pandoc` (if available)
256
+ docs: |
257
+ The default `asciidoctor-pdf` engine provides excellent typography and layout
258
+ for technical documentation with support for themes, fonts, and advanced formatting.
210
259
 
211
260
  extensions:
212
261
  desc: Default file extensions.
@@ -835,7 +884,7 @@ properties:
835
884
  desc: |
836
885
  Default settings for `rhx` command executions.
837
886
  properties:
838
- wrapped:
887
+ html_wrap:
839
888
  type: Boolean
840
889
  desc: |
841
890
  Include (or exclude) head, header, and footer elements when enriching to HTML.
@@ -860,6 +909,7 @@ properties:
860
909
  Include frontmatter in AsciiDoc drafts.
861
910
 
862
911
  Uses the `templates.asciidoc_frontmatter` template.
912
+ dflt: false
863
913
  fetch:
864
914
  type: String
865
915
  desc: |
@@ -1041,6 +1091,74 @@ properties:
1041
1091
 
1042
1092
  It may include `{{ title }}`, `{{ version }}`, `{{ date }}`, as well as any `vars`-scoped variables as you pass in.
1043
1093
  dflt: *markdown_frontmatter_tplt
1094
+ html_framework:
1095
+ type: String
1096
+ desc: |
1097
+ The HTML framework to use when enriching to HTML.
1098
+
1099
+ Valid entries:
1100
+
1101
+ [horizontal]
1102
+ `bare`:: minimal HTML structure
1103
+ `bootstrap4`:: Bootstrap 4 framework
1104
+ `bootstrap5`:: Bootstrap 5 framework
1105
+ dflt: bare
1106
+ styling:
1107
+ desc: |
1108
+ Configuration options for HTML styling and CSS framework integration.
1109
+ properties:
1110
+ mode:
1111
+ type: String
1112
+ desc: |
1113
+ The HTML styling approach to use when generating wrapped HTML output.
1114
+
1115
+ Valid options:
1116
+
1117
+ * `minimal` -- Basic semantic HTML with minimal inline styles
1118
+ * `embedded` -- Include comprehensive CSS in `<style>` block
1119
+ * `external` -- Reference external stylesheet via `<link>` tag
1120
+ * `framework` -- Use configured CSS framework only (Bootstrap, etc.)
1121
+
1122
+ When `mode: framework`, styling relies entirely on the configured CSS framework.
1123
+ When `mode: embedded`, CSS is included inline for standalone HTML files.
1124
+ When `mode: external`, a custom CSS file must be provided via `css_url`.
1125
+ dflt: framework
1126
+ theme:
1127
+ type: String
1128
+ desc: |
1129
+ The visual theme variant to apply to HTML output.
1130
+
1131
+ Built-in themes:
1132
+
1133
+ * `default` -- Standard professional appearance
1134
+ * `compact` -- Reduced spacing and condensed layout
1135
+ * `detailed` -- Enhanced metadata display with expanded information
1136
+
1137
+ Theme selection affects spacing, typography, and metadata prominence.
1138
+ dflt: default
1139
+ embed_css:
1140
+ type: Boolean
1141
+ desc: |
1142
+ Include comprehensive CSS directly in the HTML `<style>` block.
1143
+
1144
+ When enabled, generates standalone HTML files that display correctly
1145
+ without external dependencies. CSS includes framework customizations,
1146
+ responsive design rules, and print optimizations.
1147
+
1148
+ Automatically enabled when `mode: embedded`.
1149
+ dflt: false
1150
+ css_url:
1151
+ type: String
1152
+ desc: |
1153
+ URL or path to external CSS stylesheet for custom styling.
1154
+
1155
+ When `mode: external`, this stylesheet is linked via `<link rel="stylesheet">`.
1156
+ Can be a relative path, absolute URL, or CDN link.
1157
+
1158
+ Example: `assets/custom-releasehx.css` or `https://example.com/styles.css`
1159
+
1160
+ When provided, framework CSS and embedded CSS are disabled.
1161
+ dflt: null
1044
1162
  items:
1045
1163
  desc: |
1046
1164
  Settings pertaining to displayed items across Changelog and Release Notes sections.
@@ -1162,7 +1280,7 @@ properties:
1162
1280
  The label to use for the _singular_ part/component affected by the change, when only one part is permitted.
1163
1281
 
1164
1282
  This value will apply either when <<conf_ppty_rhyml_max_parts>> is set to `1` or when the change has only one part _and_ <<conf_ppty_history_labeling_singularize_labels>> is `true`.
1165
- dflt: Part
1283
+ dflt: Component
1166
1284
  parts_icon:
1167
1285
  type: String
1168
1286
  desc: |
@@ -1,7 +1,4 @@
1
- :page-layout: default
2
- :page-permalink: /config-reference/
3
- :page-nav_order: 2
4
- :page-title: Configuration Reference
1
+
5
2
 
6
3
  [[conf_ppty_DOLLARSIGN_meta,config.$meta]]
7
4
  $meta::
@@ -359,6 +356,9 @@ Defaults to `issue_body` for GitHub and GitLab, but to `custom_field` for Jira.
359
356
 
360
357
  [horizontal]
361
358
  type;; String
359
+ default;;
360
+ +
361
+ `+++issue_body+++`
362
362
  path;; `xref:conf_ppty_conversions_note[config.conversions.note]`
363
363
  --
364
364
 
@@ -395,7 +395,7 @@ type;; RegExp
395
395
  default;;
396
396
  +
397
397
  ....
398
- /^((#|=)+ (Draft )?Release Note.*)|(<!-- (draft )?release note -->)\n(?<note>\w(.|\n)+)/gmi
398
+ /^(((#|=)+ (Draft )?Release Note.*?)|(<!-- (draft )?release note -->))\n+(?<note>(.| )+)/gmi
399
399
  ....
400
400
  path;; `xref:conf_ppty_conversions_note_pattern[config.conversions.note_pattern]`
401
401
  --
@@ -438,18 +438,80 @@ default;;
438
438
  path;; `xref:conf_ppty_conversions_markup[config.conversions.markup]`
439
439
  --
440
440
 
441
- [[conf_ppty_conversions_engine,config.conversions.engine]]
442
- conversions.engine:::
441
+ [[conf_ppty_conversions_engines,config.conversions.engines]]
442
+ conversions.engines:::
443
+ +
444
+ --
445
+ Specifies the conversion engines to use when enriching to various output formats.
446
+
447
+ These settings determine which tool processes the conversion from draft formats to rich output.
448
+ Intelligent defaults are applied based on source format when engines are not explicitly configured.
449
+
450
+
451
+ [horizontal]
452
+ path;; `xref:conf_ppty_conversions_engines[config.conversions.engines]`
453
+ --
454
+
455
+ [[conf_ppty_conversions_engines_html,config.conversions.engines.html]]
456
+ conversions.engines.html::::
457
+ +
458
+ --
459
+ Engine for converting to HTML format.
460
+
461
+ Valid engines:
462
+
463
+ [horizontal]
464
+ `asciidoctor-html5`:: Standard Asciidoctor HTML5 backend (nested div structure)
465
+ `asciidoctor-html5s`:: Semantic HTML5 backend (cleaner section-based markup)
466
+ `kramdown`:: Kramdown Markdown converter (for Markdown sources)
467
+ `pandoc`:: Universal document converter (if available)
468
+
469
+ When not specified, intelligent defaults apply:
470
+
471
+ - AsciiDoc → HTML: `asciidoctor-html5s` (semantic HTML5)
472
+ - Markdown → HTML: `kramdown`
473
+ - RHYML → HTML: Liquid templates (no engine needed)
474
+
475
+ The html5s backend produces cleaner, more semantic HTML with `<section>` elements
476
+ instead of nested `<div class="sect1"><div class="sectionbody">` structures.
477
+
478
+ This is particularly useful when you want to apply custom CSS or when generating
479
+ HTML that will be further processed or embedded in other systems.
480
+
481
+ For backwards compatibility or when you need the traditional Asciidoctor structure,
482
+ use `asciidoctor-html5`.
483
+
484
+
485
+ [horizontal]
486
+ type;; String
487
+ path;; `xref:conf_ppty_conversions_engines_html[config.conversions.engines.html]`
488
+ --
489
+
490
+ [[conf_ppty_conversions_engines_pdf,config.conversions.engines.pdf]]
491
+ conversions.engines.pdf::::
443
492
  +
444
493
  --
445
- The markup converter to use for the issues.
446
- Defaults to `asciidoctor` for AsciiDoc and `redcarpet` for Markdown.
447
- Options include `asciidoctor`, `redcarpet`, `commonmarker`, `kramdown`, or `pandoc`.
494
+ Engine for converting to PDF format.
495
+
496
+ Valid engines:
497
+
498
+ [horizontal]
499
+ `asciidoctor-pdf`:: Asciidoctor PDF converter (default for AsciiDoc)
500
+ `asciidoctor-web-pdf`:: Web-based PDF converter using headless Chrome
501
+ `pandoc`:: Universal document converter (if available)
502
+
503
+ When not specified, intelligent defaults apply:
504
+
505
+ - AsciiDoc → PDF: `asciidoctor-pdf`
506
+ - Markdown → PDF: `pandoc` (if available)
507
+
508
+ The default `asciidoctor-pdf` engine provides excellent typography and layout
509
+ for technical documentation with support for themes, fonts, and advanced formatting.
448
510
 
449
511
 
450
512
  [horizontal]
451
513
  type;; String
452
- path;; `xref:conf_ppty_conversions_engine[config.conversions.engine]`
514
+ path;; `xref:conf_ppty_conversions_engines_pdf[config.conversions.engines.pdf]`
453
515
  --
454
516
 
455
517
  [[conf_ppty_extensions,config.extensions]]
@@ -2497,8 +2559,8 @@ Default settings for `rhx` command executions.
2497
2559
  path;; `xref:conf_ppty_modes[config.modes]`
2498
2560
  --
2499
2561
 
2500
- [[conf_ppty_modes_wrapped,config.modes.wrapped]]
2501
- modes.wrapped:::
2562
+ [[conf_ppty_modes_html_wrap,config.modes.html_wrap]]
2563
+ modes.html_wrap:::
2502
2564
  +
2503
2565
  --
2504
2566
  Include (or exclude) head, header, and footer elements when enriching to HTML.
@@ -2509,7 +2571,7 @@ type;; Boolean
2509
2571
  default;;
2510
2572
  +
2511
2573
  `+++false+++`
2512
- path;; `xref:conf_ppty_modes_wrapped[config.modes.wrapped]`
2574
+ path;; `xref:conf_ppty_modes_html_wrap[config.modes.html_wrap]`
2513
2575
  --
2514
2576
 
2515
2577
  [[conf_ppty_modes_html_frontmatter,config.modes.html_frontmatter]]
@@ -2557,6 +2619,9 @@ Uses the `templates.asciidoc_frontmatter` template.
2557
2619
 
2558
2620
  [horizontal]
2559
2621
  type;; Boolean
2622
+ default;;
2623
+ +
2624
+ `+++false+++`
2560
2625
  path;; `xref:conf_ppty_modes_asciidoc_frontmatter[config.modes.asciidoc_frontmatter]`
2561
2626
  --
2562
2627
 
@@ -2871,6 +2936,128 @@ date: {{ release.date }}
2871
2936
  path;; `xref:conf_ppty_history_html_frontmatter[config.history.html_frontmatter]`
2872
2937
  --
2873
2938
 
2939
+ [[conf_ppty_history_html_framework,config.history.html_framework]]
2940
+ history.html_framework:::
2941
+ +
2942
+ --
2943
+ The HTML framework to use when enriching to HTML.
2944
+
2945
+ Valid entries:
2946
+
2947
+ [horizontal]
2948
+ `bare`:: minimal HTML structure
2949
+ `bootstrap4`:: Bootstrap 4 framework
2950
+ `bootstrap5`:: Bootstrap 5 framework
2951
+
2952
+
2953
+ [horizontal]
2954
+ type;; String
2955
+ default;;
2956
+ +
2957
+ `+++bare+++`
2958
+ path;; `xref:conf_ppty_history_html_framework[config.history.html_framework]`
2959
+ --
2960
+
2961
+ [[conf_ppty_history_styling,config.history.styling]]
2962
+ history.styling:::
2963
+ +
2964
+ --
2965
+ Configuration options for HTML styling and CSS framework integration.
2966
+
2967
+
2968
+ [horizontal]
2969
+ path;; `xref:conf_ppty_history_styling[config.history.styling]`
2970
+ --
2971
+
2972
+ [[conf_ppty_history_styling_mode,config.history.styling.mode]]
2973
+ history.styling.mode::::
2974
+ +
2975
+ --
2976
+ The HTML styling approach to use when generating wrapped HTML output.
2977
+
2978
+ Valid options:
2979
+
2980
+ * `minimal` -- Basic semantic HTML with minimal inline styles
2981
+ * `embedded` -- Include comprehensive CSS in `<style>` block
2982
+ * `external` -- Reference external stylesheet via `<link>` tag
2983
+ * `framework` -- Use configured CSS framework only (Bootstrap, etc.)
2984
+
2985
+ When `mode: framework`, styling relies entirely on the configured CSS framework.
2986
+ When `mode: embedded`, CSS is included inline for standalone HTML files.
2987
+ When `mode: external`, a custom CSS file must be provided via `css_url`.
2988
+
2989
+
2990
+ [horizontal]
2991
+ type;; String
2992
+ default;;
2993
+ +
2994
+ `+++framework+++`
2995
+ path;; `xref:conf_ppty_history_styling_mode[config.history.styling.mode]`
2996
+ --
2997
+
2998
+ [[conf_ppty_history_styling_theme,config.history.styling.theme]]
2999
+ history.styling.theme::::
3000
+ +
3001
+ --
3002
+ The visual theme variant to apply to HTML output.
3003
+
3004
+ Built-in themes:
3005
+
3006
+ * `default` -- Standard professional appearance
3007
+ * `compact` -- Reduced spacing and condensed layout
3008
+ * `detailed` -- Enhanced metadata display with expanded information
3009
+
3010
+ Theme selection affects spacing, typography, and metadata prominence.
3011
+
3012
+
3013
+ [horizontal]
3014
+ type;; String
3015
+ default;;
3016
+ +
3017
+ `+++default+++`
3018
+ path;; `xref:conf_ppty_history_styling_theme[config.history.styling.theme]`
3019
+ --
3020
+
3021
+ [[conf_ppty_history_styling_embed_css,config.history.styling.embed_css]]
3022
+ history.styling.embed_css::::
3023
+ +
3024
+ --
3025
+ Include comprehensive CSS directly in the HTML `<style>` block.
3026
+
3027
+ When enabled, generates standalone HTML files that display correctly
3028
+ without external dependencies. CSS includes framework customizations,
3029
+ responsive design rules, and print optimizations.
3030
+
3031
+ Automatically enabled when `mode: embedded`.
3032
+
3033
+
3034
+ [horizontal]
3035
+ type;; Boolean
3036
+ default;;
3037
+ +
3038
+ `+++false+++`
3039
+ path;; `xref:conf_ppty_history_styling_embed_css[config.history.styling.embed_css]`
3040
+ --
3041
+
3042
+ [[conf_ppty_history_styling_css_url,config.history.styling.css_url]]
3043
+ history.styling.css_url::::
3044
+ +
3045
+ --
3046
+ URL or path to external CSS stylesheet for custom styling.
3047
+
3048
+ When `mode: external`, this stylesheet is linked via `<link rel="stylesheet">`.
3049
+ Can be a relative path, absolute URL, or CDN link.
3050
+
3051
+ Example: `assets/custom-releasehx.css` or `https://example.com/styles.css`
3052
+
3053
+ When provided, framework CSS and embedded CSS are disabled.
3054
+
3055
+
3056
+ [horizontal]
3057
+ type;; String
3058
+ path;; `xref:conf_ppty_history_styling_css_url[config.history.styling.css_url]`
3059
+ --
3060
+
2874
3061
  [[conf_ppty_history_items,config.history.items]]
2875
3062
  history.items:::
2876
3063
  +
@@ -3161,7 +3348,7 @@ This value will apply either when <<conf_ppty_rhyml_max_parts>> is set to `1` or
3161
3348
  type;; String
3162
3349
  default;;
3163
3350
  +
3164
- `+++Part+++`
3351
+ `+++Component+++`
3165
3352
  path;; `xref:conf_ppty_history_labeling_part_label[config.history.labeling.part_label]`
3166
3353
  --
3167
3354
 
@@ -4101,4 +4288,4 @@ default;;
4101
4288
  +
4102
4289
  `+++false+++`
4103
4290
  path;; `xref:conf_ppty_notes_items_show_auths_label[config.notes.items.show_auths_label]`
4104
- --
4291
+ --