From 54da3ddcd56e3ad4e0ac13905632e1a4dd76316d Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Fri, 8 Aug 2025 00:30:47 -0400 Subject: [PATCH 01/23] Improve build script gem testing with Docker - Replace local gem installation testing with Docker-based clean environment - Fixes dependency resolution issues with yanked gem versions - Ensures testing matches real user installation experience - Add automated gem cleanup and Docker availability checks --- Gemfile.lock | 2 +- scripts/build.sh | 1 + scripts/lib/build-common.sh | 40 +++++++++++++++++++++++++------------ 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 2b7630b..1244499 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - issuer (0.2.0) + issuer (0.2.1) faraday-retry (~> 2.0) octokit (~> 8.0) thor (~> 1.0) diff --git a/scripts/build.sh b/scripts/build.sh index 0e28061..345334b 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -19,6 +19,7 @@ check_project_root check_git_clean check_main_branch check_bundle_installed +check_docker_available # Run tests run_rspec_tests diff --git a/scripts/lib/build-common.sh b/scripts/lib/build-common.sh index 46f7b1b..d104618 100644 --- a/scripts/lib/build-common.sh +++ b/scripts/lib/build-common.sh @@ -128,22 +128,36 @@ test_built_gem() { gem_file=$(ls pkg/${PROJECT_NAME}-*.gem | sort -V | tail -n1) echo "Testing gem file: $gem_file" - # Create temporary directory for testing - test_dir=$(mktemp -d) - cd "$test_dir" - gem install "../$gem_file" --user-install + # Get expected version from README.adoc + expected_version=$(get_current_version) + echo "Expected version: $expected_version" - if ! command -v $PROJECT_NAME &> /dev/null; then - echo -e "${YELLOW}⚠️ $PROJECT_NAME command not in PATH. Adding gem bin directory...${NC}" - export PATH="$HOME/.local/share/gem/ruby/$(ruby -e 'puts RUBY_VERSION')/bin:$PATH" - fi + # Test gem installation in clean Docker environment + echo "Testing gem installation in clean environment (Docker)..." + docker run --rm -v $(pwd)/pkg:/gems ruby:3.2 bash -c " + gem install /gems/$(basename $gem_file) --no-document > /dev/null 2>&1 + if [ \$? -ne 0 ]; then + echo 'ERROR: Gem installation failed' + exit 1 + fi + + actual_version=\$(${PROJECT_NAME} --version | grep -o '[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+') + echo \"Installed version: \$actual_version\" + + if [ \"\$actual_version\" != \"$expected_version\" ]; then + echo \"ERROR: Version mismatch! Expected: $expected_version, Got: \$actual_version\" + exit 1 + fi + + echo \"SUCCESS: Gem installed and tested successfully\" + " - # Test installed gem - $PROJECT_NAME --version - cd - > /dev/null - rm -rf "$test_dir" + if [ $? -ne 0 ]; then + echo -e "${RED}❌ Gem installation test failed${NC}" + exit 1 + fi - echo -e "${GREEN}✅ Gem built and tested successfully: $gem_file${NC}" + echo -e "${GREEN}✅ Gem built and tested successfully: $gem_file (version $expected_version)${NC}" echo "$gem_file" } From ed660e28ad64c74f1784d68d56a3abb1c75d31e8 Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Mon, 15 Sep 2025 20:39:57 -0400 Subject: [PATCH 02/23] Git ignore .agent/ path --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 43f292f..be56817 100644 --- a/.gitignore +++ b/.gitignore @@ -98,6 +98,7 @@ specs/data/*-issues.yml # Local scratch space for AI output .warp/ +.agent/ # Docs and ReleaseHx files docs/releasehx/*.md From 3513ffdcdc0f6d074f7a94cf555ca4e69af67cfe Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Wed, 17 Sep 2025 23:00:30 -0400 Subject: [PATCH 03/23] Add --json option to save issue payloads as JSON files - Add --json [PATH] CLI option to save API payloads locally - Automatically enables dry-run mode when --json is used - Defaults to timestamped file in _payloads/ directory if no path specified - Include comprehensive test coverage for all --json functionality - Update documentation with new CLI option Closes #35 --- README.adoc | 3 ++ lib/issuer/cli.rb | 78 +++++++++++++++++++++++++++++-- specs/tests/rspec/cli_spec.rb | 87 +++++++++++++++++++++++++++++++++++ 3 files changed, 163 insertions(+), 5 deletions(-) diff --git a/README.adoc b/README.adoc index f8c4469..7b2dc3a 100644 --- a/README.adoc +++ b/README.adoc @@ -367,6 +367,9 @@ Whether to treat all issues as stubs, meaning prepend any `$meta.defaults.head` --dry, --dry-run:: Dry-run: print actions but do not post to GitHub. +--json [_FILE_PATH_]:: +Save GitHub API issue payloads as JSON files instead of posting to GitHub. Automatically enables dry-run mode. If no path is specified, saves to timestamped file in `_payloads/` directory. + --auto-versions, --auto-milestones:: Automatically create missing milestones/versions without prompting for confirmation. diff --git a/lib/issuer/cli.rb b/lib/issuer/cli.rb index 7fe6729..51dcb10 100644 --- a/lib/issuer/cli.rb +++ b/lib/issuer/cli.rb @@ -18,6 +18,7 @@ def self.exit_on_failure? class_option :tags, type: :string, desc: 'Comma-separated default or appended (+) labels for all issues' class_option :stub, type: :boolean, desc: 'Enable stub mode for all issues' class_option :dry, type: :boolean, default: false, aliases: ['--dry-run'], desc: 'Print issues, don\'t post' + class_option :json, type: :string, lazy_default: '', desc: 'Save API payloads as JSON to PATH (defaults to _payloads/, auto-enables --dry)' class_option :tokenv, type: :string, desc: 'Name of environment variable containing GitHub token' # Resource automation options @@ -110,6 +111,10 @@ def main file=nil # Apply stub logic with head/tail/body composition issues = Issuer::Ops.apply_stub_logic(issues, defaults) + # Auto-enable dry mode when --json is used + json_mode = !options[:json].nil? + dry_mode = options[:dry] || json_mode + # Separate valid and invalid issues valid_issues = issues.select(&:valid?) invalid_issues = issues.reject(&:valid?) @@ -119,8 +124,12 @@ def main file=nil puts "Skipping issue ##{find_original_index(issues, issue) + 1}: #{issue.validation_errors.join(', ')}" end - if options[:dry] - perform_dry_run(valid_issues, repo) + if dry_mode + if json_mode + perform_json_output(valid_issues, repo, options[:json]) + else + perform_dry_run(valid_issues, repo) + end else # Use Sites architecture for validation and posting site_options = {} @@ -151,7 +160,7 @@ def main file=nil end end - print_summary(valid_issues.length, invalid_issues.length, options[:dry]) + print_summary(valid_issues.length, invalid_issues.length, dry_mode) end private @@ -175,6 +184,7 @@ def self.show_help Mode Options: --dry, --dry-run #{self.class_options[:dry].description} + --json [PATH] #{self.class_options[:json].description} --auto-versions #{self.class_options[:auto_versions].description} --auto-milestones (alias for --auto-versions) --auto-tags #{self.class_options[:auto_tags].description} @@ -190,6 +200,7 @@ def self.show_help issuer issues.yml --proj myorg/myrepo issuer --file issues.yml --proj myorg/myrepo --dry issuer issues.yml --vrsn 1.1.2 + issuer issues.yml --json dry-output.json issuer --version issuer --help @@ -212,7 +223,7 @@ def perform_dry_run issues, repo issues.each do |issue| print_issue_summary(issue, repo, site) end - + # Add project summary at the end if repo project_term = site.field_mappings[:project_name] || 'project' @@ -220,6 +231,63 @@ def perform_dry_run issues, repo end end + def perform_json_output issues, repo, json_path + require 'json' + require 'fileutils' + + if json_path.empty? + output_dir = '_payloads' + timestamp = Time.now.strftime('%Y%m%d_%H%M%S') + output_path = File.join(output_dir, "issues_#{timestamp}.json") + else + output_path = json_path + output_dir = File.dirname(output_path) + end + + FileUtils.mkdir_p(output_dir) unless Dir.exist?(output_dir) + + # Create site instance for parameter conversion + site_options = { token: 'dry-run-token' } + site_options[:token_env_var] = options[:tokenv] if options[:tokenv] + site = Issuer::Sites::Factory.create('github', **site_options) + + # Convert issues to API payloads + payloads = issues.map do |issue| + site.convert_issue_to_site_params(issue, repo, dry_run: true) + end + + # Create JSON structure + json_data = { + metadata: { + generated_at: Time.now.iso8601, + repository: repo, + total_issues: issues.length, + issuer_version: Issuer::VERSION + }, + issues: payloads + } + + File.write(output_path, JSON.pretty_generate(json_data)) + + puts "Saved #{issues.length} issue payloads to: #{output_path}" + + puts "\nIssue preview:" + issues.first(3).each do |issue| + print_issue_summary(issue, repo, site) + end + + if issues.length > 3 + puts "... and #{issues.length - 3} more issues" + puts "------\n" + end + + # Add project summary + if repo + project_term = site.field_mappings[:project_name] || 'project' + puts "JSON contains #{issues.length} issue payloads for #{project_term}: #{repo}" + end + end + def print_summary valid_count, invalid_count, dry_run if dry_run puts "\nDry run complete (use without --dry to actually post)" @@ -228,7 +296,7 @@ def print_summary valid_count, invalid_count, dry_run puts "\n✅ Completed: #{valid_count} issues processed, #{invalid_count} skipped" # Note: Run ID is already displayed in the main flow, no need to repeat it here end - + end def print_issue_summary issue, repo, site diff --git a/specs/tests/rspec/cli_spec.rb b/specs/tests/rspec/cli_spec.rb index 4b89f69..6b53323 100644 --- a/specs/tests/rspec/cli_spec.rb +++ b/specs/tests/rspec/cli_spec.rb @@ -210,6 +210,93 @@ ) end + it 'handles --json option with default path' do + # Mock File.write to avoid actually creating files during test + allow(File).to receive(:write) + # Mock FileUtils.mkdir_p to avoid creating directories + allow(FileUtils).to receive(:mkdir_p) + + expect { + cli = Issuer::CLI.new + cli.invoke(:main, [sample_file], {json: ''}) + }.to output(/Saved 2 issue payloads to: _payloads/).to_stdout + + # Verify File.write was called with JSON content + expect(File).to have_received(:write) do |path, content| + expect(path).to match(/_payloads\/issues_\d{8}_\d{6}\.json/) + json_data = JSON.parse(content) + expect(json_data['metadata']['repository']).to eq('test/repo') + expect(json_data['issues'].length).to eq(2) + end + end + + it 'handles --json option with custom path' do + # Mock File.write to avoid actually creating files during test + allow(File).to receive(:write) + # Mock FileUtils.mkdir_p to avoid creating directories + allow(FileUtils).to receive(:mkdir_p) + + expect { + cli = Issuer::CLI.new + cli.invoke(:main, [sample_file], {json: 'custom-output.json'}) + }.to output(/Saved 2 issue payloads to: custom-output.json/).to_stdout + + # Verify File.write was called with the custom path + expect(File).to have_received(:write) do |path, content| + expect(path).to eq('custom-output.json') + json_data = JSON.parse(content) + expect(json_data['metadata']['repository']).to eq('test/repo') + expect(json_data['issues'].length).to eq(2) + end + end + + it 'auto-enables dry mode when --json is used' do + # Mock File.write to avoid actually creating files during test + allow(File).to receive(:write) + allow(FileUtils).to receive(:mkdir_p) + + # Should show dry run output even without --dry when --json is used + expect { + cli = Issuer::CLI.new + cli.invoke(:main, [sample_file], {json: 'test.json'}) + }.to output(/Dry run complete/).to_stdout + end + + it 'includes correct JSON structure in --json output' do + json_content = nil + + # Capture the JSON content that would be written + allow(File).to receive(:write) do |path, content| + json_content = content + end + allow(FileUtils).to receive(:mkdir_p) + + cli = Issuer::CLI.new + cli.invoke(:main, [sample_file], {json: 'test.json'}) + + # Parse and verify the JSON structure + json_data = JSON.parse(json_content) + + # Check metadata structure + expect(json_data['metadata']).to include( + 'generated_at', + 'repository', + 'total_issues', + 'issuer_version' + ) + expect(json_data['metadata']['repository']).to eq('test/repo') + expect(json_data['metadata']['total_issues']).to eq(2) + + # Check issues structure + expect(json_data['issues']).to be_an(Array) + expect(json_data['issues'].length).to eq(2) + + # Verify first issue has expected API payload structure + first_issue = json_data['issues'].first + expect(first_issue).to include('title', 'body', 'labels', 'assignee', 'milestone') + expect(first_issue['title']).to eq('Test issue 1') + end + end describe 'version and help' do From 5442378da01898ba519f235137c3348b3505aa86 Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Wed, 17 Sep 2025 23:48:05 -0400 Subject: [PATCH 04/23] docs: Add user designation to docker run For safety and compatibility, all recommendations for commands now argue a specific user and group. This is so the host user will maintain write/delete permissions to generated files. --- README.adoc | 2 +- examples/README.adoc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.adoc b/README.adoc index 7b2dc3a..4d5d5fd 100644 --- a/README.adoc +++ b/README.adoc @@ -3,7 +3,7 @@ :toclevels: 3 :this_prod_vrsn: 0.2.1 :next_prod_vrsn: 0.3.0 -:docker_base_command: docker run -it --rm -v $(pwd):/workdir -e ISSUER_API_TOKEN=$GITHUB_TOKEN docopslab/issuer +:docker_base_command: docker run -it --rm --user $(id -u):$(id -g) -v $(pwd):/workdir -e ISSUER_API_TOKEN=$GITHUB_TOKEN docopslab/issuer :append_or_impose: Prepend items with `+` to indicate they should be appended to existing labels. Items without `+` will only be used for issues with no `tags` designated. ifdef::env-github[] :icons: font diff --git a/examples/README.adoc b/examples/README.adoc index 3764d5f..97f7f14 100644 --- a/examples/README.adoc +++ b/examples/README.adoc @@ -49,7 +49,7 @@ Test any example with a dry run: Or with the Docker image: - docker run -it --rm -v $(pwd):/workdir docopslab/issuer issuer examples/basic-example.yml --dry + docker run -it --rm --user $(id -u):$(id -g) -v $(pwd):/workdir docopslab/issuer issuer examples/basic-example.yml --dry == Creating Your Own From caf72ab6725ec9d6fb4e16cd81e81a9f2c207c01 Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Wed, 17 Sep 2025 23:53:21 -0400 Subject: [PATCH 05/23] docs: Add modified version of standard DocOps Lab AI agent instructions --- AGENTS.md | 253 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 253 insertions(+) create mode 100644 AGENTS.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..ea5ed3b --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,253 @@ +# AGENTS.md + +AI Agent Guide for Issuer Development + + +## Philosophy: Documentation-First, Senior Engineer Mindset + +As an AI agent working on Issuer, approach this codebase like an **inquisitive and opinionated senior engineer** who values: + +- **Documentation-first development**: Always read the docs first, understand the architecture, then propose solutions at least in part by drafting docs changes +- **Investigative depth**: Don't assume - investigate, understand, then act +- **Architectural awareness**: Consider system-wide impacts of changes +- **Test-driven confidence**: Validate changes don't break existing functionality +- **User experience focus**: Changes should improve the developer/end-user experience + + +## Operations Notes + +### Ephemeral Directory + +There will always be an untracked `.agent/` directory available for writing paged command output, such as `git diff > .agent/current.diff && cat .agent/current.diff`. + +### AsciiDoc, not Markdown + +Agents have a frustrating tendency to create `.md` files when users do not want them, and you also write Markdown syntax inside `.adoc` files. +Stick to the AsciiDoc syntax and styles found in the `README.adoc` files, and you won't go too far wrong. + +NEVER create `.md` files unless user asks you to. + + +## Essential Reading Order (Start Here!) + +Before making any changes, **read these documents in order**: + +### 1. Core Documentation +- **`./README.adoc`** +- Main project overview, features, and workflow examples: + - Pay special attention to any AI prompt sections (`// tag::ai-prompt[]`...`// end::ai-prompt[]`) + - Study the example CLI usage patterns +- Review `issuer.gemspec` and `Dockerfile` for dependencies and environment context + +### 2. Architecture Understanding +- **`./specs/tests/README.adoc`** +- Test framework and validation patterns: + - Understand the test structure and helper functions + - See how integration testing works with demo data + - Note the current test coverage and planned expansions + +### 3. Practical Examples +- **`./examples/`** directory contains IMYML example files +- Study the basic and advanced example files to understand IMYML format +- Check `examples/README.adoc` for examples documentation + +### 4. Development Standards +- **`./.github/copilot-instructions.md`** +- Coding style requirements: + - AsciiDoc for ALL documentation (not Markdown) + - Ruby style guidelines (parentheses usage, etc.) + + +## Codebase Architecture + +### Core Components + +``` +lib/ +├── issuer.rb # Main module and version +├── issuer/ +│ ├── cli.rb # Thor-based CLI interface +│ ├── issue.rb # Issue model and validation +│ ├── ops.rb # Core operations and processing +│ └── site.rb # GitHub API integration +exe/ +└── issuer # CLI executable +specs/ +├── tests/rspec/ # RSpec unit tests +└── tests/github-api/ # Integration tests +``` + +### Auxiliary Components + +Currently no auxiliary components are planned to be spun off as separate gems. + +### Data Flow Understanding + +1. **IMYML File Parsing**: CLI reads YAML file containing issue definitions +2. **Issue Processing**: `Ops.process_issues_data` converts raw data to `Issue` objects +3. **Validation**: Each issue is validated for required fields and proper format +4. **GitHub API Integration**: `Site` class handles authentication and API calls +5. **Bulk Creation**: Issues are created one by one via GitHub REST API +6. **Logging**: All operations are logged for tracking and potential cleanup + +### Configuration System + +Issuer uses a simpler configuration model than typical DocOps Lab projects: +- **CLI Options**: Primary configuration via command-line flags +- **IMYML Files**: Issue definitions and defaults in YAML format +- **Environment Variables**: Authentication tokens via env vars +- **No separate config files**: Configuration is embedded in IMYML `$meta` blocks + + +## Agent Development Approach + +### Before Coding: Investigate Phase + +1. **Read the relevant documentation sections** for the area you're changing +2. **Run the existing tests** to understand current behavior: + ```bash + bundle exec rspec specs/tests/rspec --format documentation + ``` +3. **Explore the demo** to see real usage: + ```bash + cd examples/ + issuer basic-example.yml --dry + ``` +4. **Check IMYML format** in example files for any format-related changes +5. **See the `Rakefile`** to get up to speed on dev workflows and automation. + +### Development Patterns + +#### 1.Configuration Changes +- Never hardcode defaults - use the Configuration class +- Update `specs/(data/)?config-def.yml` with new properties and their defaults +- Test configuration loading with various scenarios + +#### 2. CLI Changes +- Follow Thor patterns established in `cli.rb` +- Use existing option naming conventions + - Prefer Boolean flags over Boolean option values (ex: `--thing`/`--no-thing` instead of `--thing true|false`) + +#### 3. IMYML Format Changes +- Follow existing IMYML structure in `examples/` +- Update documentation when extending the format +- Maintain backward compatibility with existing files + +#### 4. GitHub API Integration +- Use existing Site class patterns for API calls +- Handle rate limiting and error responses gracefully +- Test with actual GitHub API when possible + +### Testing Strategy + +1. **Run existing tests first**: `bundle exec rspec` +2. **Add tests for new functionality** (see examples and locate an appropriate file (or create anew) in `specs/tests/rspec/`) +3. **Test with demo data**: Use `examples/` directory files to validate real-world scenarios +4. **Validate configuration changes**: Ensure config loading still works + +### Code Quality Standards + +#### Documentation +- **AsciiDoc for prose documentation and structure** (README files, config comments, etc.) +- **README.adoc attributes for core data** README.adoc is single source of truth for core non-config data (version, key URLs, etc) +- **YAML definition/schema files** for all reference data outside README +- **Ruby comments** for code explanation and Ruby RDoc/YARD markup (to be implemented) +- **Update relevant documentation** when adding features + +#### Ruby Style +- **No parentheses in block/class definitions**: `def method_name arg1, arg2:` +- **Use parentheses in method calls**: `method_call(arg)` +- **Follow existing patterns** for consistency + +#### Architecture +- **Separation of concerns**: Keep CLI, operations, and data processing separate +- **Configuration-driven**: Make features configurable rather than hardcoded +- **Error handling**: Provide helpful error messages with context +- **Logging**: via structured logging to config directories + +## Common Development Scenarios + +### Adding a New CLI Option + +1. **Investigate**: Check existing options in `cli.rb` and their patterns +2. **Document**: CLI messages are first recorded as AsciiDoc attributes in `README.adoc` + - Something like: `{cli_option__message}` +3. **Thor CLI** in `lib/issuer/cli.rb`: Add to Thor options with proper description from generated attributes +4. **Process**: Handle the option in the appropriate method (usually `default`) +5. **Test**: Add CLI tests in `specs/tests/rspec/cli_spec.rb` +6. **Double-check the docs**: Make sure any changes made since the initial docs are reflected. +7. **Search and fix references** that may be affected by this change throughout existing docs (`.adoc`) and scripts (`.rb`, `.sh`, `Rakefile`) + + +## Debugging and Investigation Tools + +### Understanding Current State +```bash +# Test CLI functionality +issuer --version + +# Test with example data +issuer examples/basic-example.yml --dry + +# Run all tests to understand current functionality +bundle exec rspec specs/tests/rspec --format documentation +``` + +### Key Files for Understanding +- `lib/issuer.rb` - Main module, logging, core setup +- `lib/issuer/cli.rb` - All CLI logic and option processing +- `lib/issuer/issue.rb` - Issue model and validation +- `lib/issuer/ops.rb` - Core operations and processing +- `lib/issuer/site.rb` - GitHub API integration +- `examples/` - IMYML format examples and documentation +- Test files in `specs/tests/rspec/` - Show expected behaviors + + +## Working with Demo Data + +The `examples/` directory contains various IMYML files demonstrating different features: + +- `basic-example.yml` - Simple issue creation +- `advanced-example.yml` - Complex configurations with defaults +- Use these files with `--dry` flag to test changes without creating real issues + + +## Agent Responsibilities + +### As a Senior Engineer Agent: + +1. **Question Requirements**: Ask clarifying questions about specifications +2. **Propose Better Solutions**: If you see architectural improvements, suggest them +3. **Consider Edge Cases**: Think about error conditions and unusual inputs +4. **Maintain Backward Compatibility**: Don't break existing workflows +5. **Improve Documentation**: Update docs when adding features +6. **Test Thoroughly**: Use both unit tests and demo validation + +### Be Opinionated About: + +- Code architecture and separation of concerns +- Configuration management patterns +- Error handling and user experience +- Documentation quality and completeness +- Test coverage and quality + +### Be Inquisitive About: + +- Why existing patterns were chosen +- What the user experience implications are +- How changes affect different API platforms +- Whether configuration is flexible enough +- What edge cases might exist + + +## Remember + +Issuer is designed for project managers and developers who need to create GitHub Issues in bulk from structured definitions. The primary users are teams managing software development cycles using Git tools and GitHub Issues. + +1. **Reliability**: Don't break existing functionality +2. **Usability**: Make the CLI intuitive and helpful +3. **Flexibility**: Support diverse team workflows and preferences +4. **Performance**: Respect rate limits, cache intelligently +5. **Documentation**: Keep the docs current and comprehensive + +**Most importantly**: Read the documentation first, understand the system, then propose thoughtful solutions that improve the overall architecture and user experience. From 24536c1b4b54999a13ed4a7b2df44d7994021328 Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Wed, 17 Sep 2025 23:58:30 -0400 Subject: [PATCH 06/23] test: Skip lint test for elipses --- .vale.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/.vale.ini b/.vale.ini index 223c993..0287987 100644 --- a/.vale.ini +++ b/.vale.ini @@ -29,6 +29,7 @@ write-good.E-Prime = NO write-good.Passive = NO write-good.TooWordy = NO write-good.Weasel = NO +proselint.Typography = NO # Global ignores for all markup files TokenIgnores = (\$[A-Z_]+), (`[^`]+`), (:[a-z-]+:), (\{[^}]+\}), (https?://[^\s]+) From bf5adeb0144d371f9b81a1fd931726b5bd1f90d1 Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Tue, 23 Sep 2025 21:25:34 -0400 Subject: [PATCH 07/23] Fix .zshrc references --- README.adoc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/README.adoc b/README.adoc index f8c4469..be6dddb 100644 --- a/README.adoc +++ b/README.adoc @@ -92,15 +92,18 @@ See <> for more. ==== Alias the Docker Command Optionally alias the base Docker command. -In your shell configuration (usually `~/.bashrc` or `~/.zshrc), add the following: +In your shell configuration (usually `~/.bashrc` or `~/.zshrc`), add the following: [.prompt,subs=+attributes] alias issuer='{docker_base_command}' Reload your shell configuration for the alias to take effect: -[.prompt] - source ~/.bashrc +.... +source ~/.bashrc +# or +source ~/.zshrc +.... === For Ruby Users From f727686669ef91d9ccbc2b2efcbf4d13f70ec6be Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Sat, 27 Dec 2025 12:19:52 -0500 Subject: [PATCH 08/23] chore: integrate docopslab-dev tooling - Add docopslab-dev dependency and labdev rake tasks - Add .config/ with rubocop, vale, shellcheck configs - Add AGENTS.md for AI agent orientation - Update comment style (dash to semicolon) - Add AI prompt tags to README --- .config/.shellcheckrc | 14 + .config/.vendor/docopslab/actionlint.yml | 13 + .config/.vendor/docopslab/rubocop.yml | 130 +++ .config/.vendor/docopslab/vale.ini | 38 + .../styles/AsciiDoc/ClosedAttributeBlocks.yml | 7 + .../vale/styles/AsciiDoc/ClosedIdQuotes.yml | 7 + .../styles/AsciiDoc/ImageContainsAltText.yml | 8 + .../styles/AsciiDoc/LinkContainsLinkText.yml | 10 + .../styles/AsciiDoc/MatchingDotCallouts.yml | 47 ++ .../AsciiDoc/MatchingNumberedCallouts.yml | 62 ++ .../AsciiDoc/SequentialNumberedCallouts.yml | 59 ++ .../vale/styles/AsciiDoc/UnsetAttributes.yml | 49 ++ .../styles/AsciiDoc/ValidAdmonitionBlocks.yml | 30 + .../vale/styles/AsciiDoc/ValidCodeBlocks.yml | 30 + .../vale/styles/AsciiDoc/ValidConditions.yml | 37 + .../vale/styles/AsciiDoc/ValidTableBlocks.yml | 30 + .../DocOpsLab-AsciiDoc/ExplicitSectionIDs.yml | 8 + .../ExtraLineBeforeLevel1.yml | 7 + .../DocOpsLab-AsciiDoc/OneSentencePerLine.yml | 8 + .../DocOpsLab-AsciiDoc/PreferSourceBlocks.yml | 8 + .../DocOpsLab-AsciiDoc/ProperAdmonitions.yml | 8 + .../styles/DocOpsLab-AsciiDoc/ProperDLs.yml | 7 + .../DocOpsLab-AsciiDoc/UncleanListStart.yml | 8 + .../DocOpsLab-Authoring/ButParagraph.yml | 8 + .../styles/DocOpsLab-Authoring/ExNotEg.yml | 8 + .../DocOpsLab-Authoring/LiteralTerms.yml | 20 + .../styles/DocOpsLab-Authoring/Spelling.yml | 679 +++++++++++++++ .../RedHat-AsciiDoc/ClosedAttributeBlocks.yml | 7 + .../styles/RedHat-AsciiDoc/ClosedIdQuotes.yml | 7 + .../RedHat-AsciiDoc/ImageContainsAltText.yml | 8 + .../IncludeDirectiveOptions.yml | 9 + .../vale/styles/RedHat-AsciiDoc/LICENSE | 21 + .../RedHat-AsciiDoc/LinkContainsLinkText.yml | 8 + .../RedHat-AsciiDoc/MatchingDotCallouts.yml | 47 ++ .../MatchingNumberedCallouts.yml | 62 ++ .../RedHat-AsciiDoc/PreferXrefForInternal.yml | 9 + .../SequentialNumberedCallouts.yml | 59 ++ .../RedHat-AsciiDoc/UnsetAttributes.yml | 8 + .../RedHat-AsciiDoc/ValidCodeBlocks.yml | 30 + .../RedHat-AsciiDoc/ValidConditions.yml | 37 + .../RedHat-AsciiDoc/ValidTableBlocks.yml | 30 + .../vale/styles/RedHat/Abbreviations.yml | 9 + .../vale/styles/RedHat/CaseSensitiveTerms.yml | 333 ++++++++ .../vale/styles/RedHat/Conjunctions.yml | 14 + .../vale/styles/RedHat/ConsciousLanguage.yml | 13 + .../vale/styles/RedHat/Contractions.yml | 44 + .../vale/styles/RedHat/Definitions.yml | 202 +++++ .../vale/styles/RedHat/DoNotUseTerms.yml | 27 + .../.vendor/vale/styles/RedHat/Ellipses.yml | 12 + .config/.vendor/vale/styles/RedHat/EmDash.yml | 11 + .../.vendor/vale/styles/RedHat/GitLinks.yml | 12 + .../vale/styles/RedHat/HeadingPunctuation.yml | 11 + .../.vendor/vale/styles/RedHat/Headings.yml | 267 ++++++ .../.vendor/vale/styles/RedHat/Hyphens.yml | 236 ++++++ .../styles/RedHat/MergeConflictMarkers.yml | 13 + .../vale/styles/RedHat/ObviousTerms.yml | 16 + .../vale/styles/RedHat/OxfordComma.yml | 9 + .../vale/styles/RedHat/PascalCamelCase.yml | 207 +++++ .../vale/styles/RedHat/PassiveVoice.yml | 193 +++++ .../styles/RedHat/ProductCentricWriting.yml | 8 + .../vale/styles/RedHat/README-IBM.adoc | 9 + .../vale/styles/RedHat/README-proselint.md | 13 + .../vale/styles/RedHat/README-write-good.md | 28 + .../vale/styles/RedHat/ReadabilityGrade.yml | 9 + .../vale/styles/RedHat/ReleaseNotes.yml | 11 + .../vale/styles/RedHat/RepeatedWords.yml | 16 + .../styles/RedHat/SelfReferentialText.yml | 14 + .../vale/styles/RedHat/SentenceLength.yml | 9 + .../vale/styles/RedHat/SimpleWords.yml | 119 +++ .config/.vendor/vale/styles/RedHat/Slash.yml | 103 +++ .../vale/styles/RedHat/SmartQuotes.yml | 11 + .../.vendor/vale/styles/RedHat/Spacing.yml | 10 + .../.vendor/vale/styles/RedHat/Spelling.yml | 572 +++++++++++++ .../.vendor/vale/styles/RedHat/Symbols.yml | 9 + .../vale/styles/RedHat/TermsErrors.yml | 472 +++++++++++ .../vale/styles/RedHat/TermsSuggestions.yml | 55 ++ .../vale/styles/RedHat/TermsWarnings.yml | 77 ++ .../vale/styles/RedHat/UserReplacedValues.yml | 16 + .config/.vendor/vale/styles/RedHat/Using.yml | 14 + .../vale/styles/RedHat/collate-output.tmpl | 66 ++ .config/.vendor/vale/styles/RedHat/meta.json | 4 + .../config/scripts/ExplicitSectionIDs.tengo | 56 ++ .../scripts/ExtraLineBeforeLevel1.tengo | 121 +++ .../config/scripts/OneSentencePerLine.tengo | 53 ++ .../vale/styles/proselint/Airlinese.yml | 8 + .../vale/styles/proselint/AnimalLabels.yml | 48 ++ .../vale/styles/proselint/Annotations.yml | 9 + .../vale/styles/proselint/Apologizing.yml | 8 + .../vale/styles/proselint/Archaisms.yml | 52 ++ .config/.vendor/vale/styles/proselint/But.yml | 8 + .../.vendor/vale/styles/proselint/Cliches.yml | 782 ++++++++++++++++++ .../vale/styles/proselint/CorporateSpeak.yml | 30 + .../vale/styles/proselint/Currency.yml | 5 + .../.vendor/vale/styles/proselint/Cursing.yml | 15 + .../vale/styles/proselint/DateCase.yml | 7 + .../vale/styles/proselint/DateMidnight.yml | 7 + .../vale/styles/proselint/DateRedundancy.yml | 10 + .../vale/styles/proselint/DateSpacing.yml | 7 + .../vale/styles/proselint/DenizenLabels.yml | 52 ++ .../vale/styles/proselint/Diacritical.yml | 95 +++ .../vale/styles/proselint/GenderBias.yml | 45 + .../vale/styles/proselint/GroupTerms.yml | 39 + .../.vendor/vale/styles/proselint/Hedging.yml | 8 + .../vale/styles/proselint/Hyperbole.yml | 6 + .../.vendor/vale/styles/proselint/Jargon.yml | 11 + .../vale/styles/proselint/LGBTOffensive.yml | 13 + .../vale/styles/proselint/LGBTTerms.yml | 15 + .../vale/styles/proselint/Malapropisms.yml | 8 + .../vale/styles/proselint/Needless.yml | 358 ++++++++ .../vale/styles/proselint/Nonwords.yml | 38 + .../vale/styles/proselint/Oxymorons.yml | 22 + .../.vendor/vale/styles/proselint/P-Value.yml | 6 + .../vale/styles/proselint/RASSyndrome.yml | 30 + .../.vendor/vale/styles/proselint/README.md | 12 + .../.vendor/vale/styles/proselint/Skunked.yml | 13 + .../vale/styles/proselint/Spelling.yml | 17 + .../vale/styles/proselint/Typography.yml | 11 + .../vale/styles/proselint/Uncomparables.yml | 50 ++ .../.vendor/vale/styles/proselint/Very.yml | 6 + .../.vendor/vale/styles/proselint/meta.json | 17 + .../vale/styles/write-good/Cliches.yml | 702 ++++++++++++++++ .../vale/styles/write-good/E-Prime.yml | 32 + .../vale/styles/write-good/Illusions.yml | 11 + .../vale/styles/write-good/Passive.yml | 183 ++++ .../.vendor/vale/styles/write-good/README.md | 27 + .config/.vendor/vale/styles/write-good/So.yml | 5 + .../vale/styles/write-good/ThereIs.yml | 6 + .../vale/styles/write-good/TooWordy.yml | 221 +++++ .../.vendor/vale/styles/write-good/Weasel.yml | 29 + .../.vendor/vale/styles/write-good/meta.json | 4 + .config/actionlint.yml | 13 + .config/docopslab-dev.yml | 65 ++ .config/rubocop.yml | 8 + .config/vale.ini | 28 + .config/vale.local.ini | 5 + .gitignore | 6 +- AGENTS.md | 191 +++++ Gemfile | 5 + Gemfile.lock | 209 ++++- README.adoc | 14 + Rakefile | 13 +- lib/issuer/apis/github/client.rb | 4 +- lib/issuer/cache.rb | 2 +- lib/issuer/issue.rb | 4 +- lib/issuer/ops.rb | 2 +- lib/issuer/sites/github.rb | 2 +- 146 files changed, 8826 insertions(+), 19 deletions(-) create mode 100644 .config/.shellcheckrc create mode 100644 .config/.vendor/docopslab/actionlint.yml create mode 100644 .config/.vendor/docopslab/rubocop.yml create mode 100644 .config/.vendor/docopslab/vale.ini create mode 100644 .config/.vendor/vale/styles/AsciiDoc/ClosedAttributeBlocks.yml create mode 100644 .config/.vendor/vale/styles/AsciiDoc/ClosedIdQuotes.yml create mode 100644 .config/.vendor/vale/styles/AsciiDoc/ImageContainsAltText.yml create mode 100644 .config/.vendor/vale/styles/AsciiDoc/LinkContainsLinkText.yml create mode 100644 .config/.vendor/vale/styles/AsciiDoc/MatchingDotCallouts.yml create mode 100644 .config/.vendor/vale/styles/AsciiDoc/MatchingNumberedCallouts.yml create mode 100644 .config/.vendor/vale/styles/AsciiDoc/SequentialNumberedCallouts.yml create mode 100644 .config/.vendor/vale/styles/AsciiDoc/UnsetAttributes.yml create mode 100644 .config/.vendor/vale/styles/AsciiDoc/ValidAdmonitionBlocks.yml create mode 100644 .config/.vendor/vale/styles/AsciiDoc/ValidCodeBlocks.yml create mode 100644 .config/.vendor/vale/styles/AsciiDoc/ValidConditions.yml create mode 100644 .config/.vendor/vale/styles/AsciiDoc/ValidTableBlocks.yml create mode 100644 .config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ExplicitSectionIDs.yml create mode 100644 .config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ExtraLineBeforeLevel1.yml create mode 100644 .config/.vendor/vale/styles/DocOpsLab-AsciiDoc/OneSentencePerLine.yml create mode 100644 .config/.vendor/vale/styles/DocOpsLab-AsciiDoc/PreferSourceBlocks.yml create mode 100644 .config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ProperAdmonitions.yml create mode 100644 .config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ProperDLs.yml create mode 100644 .config/.vendor/vale/styles/DocOpsLab-AsciiDoc/UncleanListStart.yml create mode 100644 .config/.vendor/vale/styles/DocOpsLab-Authoring/ButParagraph.yml create mode 100644 .config/.vendor/vale/styles/DocOpsLab-Authoring/ExNotEg.yml create mode 100644 .config/.vendor/vale/styles/DocOpsLab-Authoring/LiteralTerms.yml create mode 100644 .config/.vendor/vale/styles/DocOpsLab-Authoring/Spelling.yml create mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/ClosedAttributeBlocks.yml create mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/ClosedIdQuotes.yml create mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/ImageContainsAltText.yml create mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/IncludeDirectiveOptions.yml create mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/LICENSE create mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/LinkContainsLinkText.yml create mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/MatchingDotCallouts.yml create mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/MatchingNumberedCallouts.yml create mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/PreferXrefForInternal.yml create mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/SequentialNumberedCallouts.yml create mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/UnsetAttributes.yml create mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/ValidCodeBlocks.yml create mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/ValidConditions.yml create mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/ValidTableBlocks.yml create mode 100644 .config/.vendor/vale/styles/RedHat/Abbreviations.yml create mode 100644 .config/.vendor/vale/styles/RedHat/CaseSensitiveTerms.yml create mode 100644 .config/.vendor/vale/styles/RedHat/Conjunctions.yml create mode 100644 .config/.vendor/vale/styles/RedHat/ConsciousLanguage.yml create mode 100644 .config/.vendor/vale/styles/RedHat/Contractions.yml create mode 100644 .config/.vendor/vale/styles/RedHat/Definitions.yml create mode 100644 .config/.vendor/vale/styles/RedHat/DoNotUseTerms.yml create mode 100644 .config/.vendor/vale/styles/RedHat/Ellipses.yml create mode 100644 .config/.vendor/vale/styles/RedHat/EmDash.yml create mode 100644 .config/.vendor/vale/styles/RedHat/GitLinks.yml create mode 100644 .config/.vendor/vale/styles/RedHat/HeadingPunctuation.yml create mode 100644 .config/.vendor/vale/styles/RedHat/Headings.yml create mode 100644 .config/.vendor/vale/styles/RedHat/Hyphens.yml create mode 100644 .config/.vendor/vale/styles/RedHat/MergeConflictMarkers.yml create mode 100644 .config/.vendor/vale/styles/RedHat/ObviousTerms.yml create mode 100644 .config/.vendor/vale/styles/RedHat/OxfordComma.yml create mode 100644 .config/.vendor/vale/styles/RedHat/PascalCamelCase.yml create mode 100644 .config/.vendor/vale/styles/RedHat/PassiveVoice.yml create mode 100644 .config/.vendor/vale/styles/RedHat/ProductCentricWriting.yml create mode 100644 .config/.vendor/vale/styles/RedHat/README-IBM.adoc create mode 100644 .config/.vendor/vale/styles/RedHat/README-proselint.md create mode 100644 .config/.vendor/vale/styles/RedHat/README-write-good.md create mode 100644 .config/.vendor/vale/styles/RedHat/ReadabilityGrade.yml create mode 100644 .config/.vendor/vale/styles/RedHat/ReleaseNotes.yml create mode 100644 .config/.vendor/vale/styles/RedHat/RepeatedWords.yml create mode 100644 .config/.vendor/vale/styles/RedHat/SelfReferentialText.yml create mode 100644 .config/.vendor/vale/styles/RedHat/SentenceLength.yml create mode 100644 .config/.vendor/vale/styles/RedHat/SimpleWords.yml create mode 100644 .config/.vendor/vale/styles/RedHat/Slash.yml create mode 100644 .config/.vendor/vale/styles/RedHat/SmartQuotes.yml create mode 100644 .config/.vendor/vale/styles/RedHat/Spacing.yml create mode 100644 .config/.vendor/vale/styles/RedHat/Spelling.yml create mode 100644 .config/.vendor/vale/styles/RedHat/Symbols.yml create mode 100644 .config/.vendor/vale/styles/RedHat/TermsErrors.yml create mode 100644 .config/.vendor/vale/styles/RedHat/TermsSuggestions.yml create mode 100644 .config/.vendor/vale/styles/RedHat/TermsWarnings.yml create mode 100644 .config/.vendor/vale/styles/RedHat/UserReplacedValues.yml create mode 100644 .config/.vendor/vale/styles/RedHat/Using.yml create mode 100644 .config/.vendor/vale/styles/RedHat/collate-output.tmpl create mode 100644 .config/.vendor/vale/styles/RedHat/meta.json create mode 100644 .config/.vendor/vale/styles/config/scripts/ExplicitSectionIDs.tengo create mode 100644 .config/.vendor/vale/styles/config/scripts/ExtraLineBeforeLevel1.tengo create mode 100644 .config/.vendor/vale/styles/config/scripts/OneSentencePerLine.tengo create mode 100644 .config/.vendor/vale/styles/proselint/Airlinese.yml create mode 100644 .config/.vendor/vale/styles/proselint/AnimalLabels.yml create mode 100644 .config/.vendor/vale/styles/proselint/Annotations.yml create mode 100644 .config/.vendor/vale/styles/proselint/Apologizing.yml create mode 100644 .config/.vendor/vale/styles/proselint/Archaisms.yml create mode 100644 .config/.vendor/vale/styles/proselint/But.yml create mode 100644 .config/.vendor/vale/styles/proselint/Cliches.yml create mode 100644 .config/.vendor/vale/styles/proselint/CorporateSpeak.yml create mode 100644 .config/.vendor/vale/styles/proselint/Currency.yml create mode 100644 .config/.vendor/vale/styles/proselint/Cursing.yml create mode 100644 .config/.vendor/vale/styles/proselint/DateCase.yml create mode 100644 .config/.vendor/vale/styles/proselint/DateMidnight.yml create mode 100644 .config/.vendor/vale/styles/proselint/DateRedundancy.yml create mode 100644 .config/.vendor/vale/styles/proselint/DateSpacing.yml create mode 100644 .config/.vendor/vale/styles/proselint/DenizenLabels.yml create mode 100644 .config/.vendor/vale/styles/proselint/Diacritical.yml create mode 100644 .config/.vendor/vale/styles/proselint/GenderBias.yml create mode 100644 .config/.vendor/vale/styles/proselint/GroupTerms.yml create mode 100644 .config/.vendor/vale/styles/proselint/Hedging.yml create mode 100644 .config/.vendor/vale/styles/proselint/Hyperbole.yml create mode 100644 .config/.vendor/vale/styles/proselint/Jargon.yml create mode 100644 .config/.vendor/vale/styles/proselint/LGBTOffensive.yml create mode 100644 .config/.vendor/vale/styles/proselint/LGBTTerms.yml create mode 100644 .config/.vendor/vale/styles/proselint/Malapropisms.yml create mode 100644 .config/.vendor/vale/styles/proselint/Needless.yml create mode 100644 .config/.vendor/vale/styles/proselint/Nonwords.yml create mode 100644 .config/.vendor/vale/styles/proselint/Oxymorons.yml create mode 100644 .config/.vendor/vale/styles/proselint/P-Value.yml create mode 100644 .config/.vendor/vale/styles/proselint/RASSyndrome.yml create mode 100644 .config/.vendor/vale/styles/proselint/README.md create mode 100644 .config/.vendor/vale/styles/proselint/Skunked.yml create mode 100644 .config/.vendor/vale/styles/proselint/Spelling.yml create mode 100644 .config/.vendor/vale/styles/proselint/Typography.yml create mode 100644 .config/.vendor/vale/styles/proselint/Uncomparables.yml create mode 100644 .config/.vendor/vale/styles/proselint/Very.yml create mode 100644 .config/.vendor/vale/styles/proselint/meta.json create mode 100644 .config/.vendor/vale/styles/write-good/Cliches.yml create mode 100644 .config/.vendor/vale/styles/write-good/E-Prime.yml create mode 100644 .config/.vendor/vale/styles/write-good/Illusions.yml create mode 100644 .config/.vendor/vale/styles/write-good/Passive.yml create mode 100644 .config/.vendor/vale/styles/write-good/README.md create mode 100644 .config/.vendor/vale/styles/write-good/So.yml create mode 100644 .config/.vendor/vale/styles/write-good/ThereIs.yml create mode 100644 .config/.vendor/vale/styles/write-good/TooWordy.yml create mode 100644 .config/.vendor/vale/styles/write-good/Weasel.yml create mode 100644 .config/.vendor/vale/styles/write-good/meta.json create mode 100644 .config/actionlint.yml create mode 100644 .config/docopslab-dev.yml create mode 100644 .config/rubocop.yml create mode 100644 .config/vale.ini create mode 100644 .config/vale.local.ini create mode 100644 AGENTS.md diff --git a/.config/.shellcheckrc b/.config/.shellcheckrc new file mode 100644 index 0000000..85edd76 --- /dev/null +++ b/.config/.shellcheckrc @@ -0,0 +1,14 @@ +# ShellCheck configuration for DocOps Lab projects +# This file is synced from docopslab-dev gem + +# Disable some overly strict rules for our use cases +disable=SC2034 # Variable appears unused (common in sourced scripts) +disable=SC2086 # Double quote to prevent globbing (sometimes we want globbing) +disable=SC2181 # Check exit code directly with e.g. 'if mycmd;', not indirectly with $? + +# Set default shell to bash (most of our scripts are bash) +shell=bash + +# Enable additional optional checks +enable=quote-safe-variables +enable=require-variable-braces \ No newline at end of file diff --git a/.config/.vendor/docopslab/actionlint.yml b/.config/.vendor/docopslab/actionlint.yml new file mode 100644 index 0000000..448aabc --- /dev/null +++ b/.config/.vendor/docopslab/actionlint.yml @@ -0,0 +1,13 @@ +# actionlint configuration for DocOps Lab projects +# This file is synced from docopslab-dev gem + +# Disable overly strict rules for common patterns +ignore: + # Allow commonly used but deprecated actions (we'll upgrade gradually) + - 'SC2086:' # shellcheck rule about double quotes + - 'the runner of "ubuntu-latest" is deprecated' + +# Custom shell for shellcheck integration +shellcheck: + enable: true + shell-options: "-e SC2086" # Allow some globbing patterns \ No newline at end of file diff --git a/.config/.vendor/docopslab/rubocop.yml b/.config/.vendor/docopslab/rubocop.yml new file mode 100644 index 0000000..5760d97 --- /dev/null +++ b/.config/.vendor/docopslab/rubocop.yml @@ -0,0 +1,130 @@ +# RuboCop configuration for DocOps Lab projects +# This is the baseline configuration distributed via docopslab-dev + +plugins: + - rubocop-rspec + +AllCops: + TargetRubyVersion: 3.2 + NewCops: enable + DisplayCopNames: true + DisplayStyleGuide: true + +Style/MethodDefParentheses: + EnforcedStyle: require_no_parentheses + +Style/MethodCallWithArgsParentheses: + EnforcedStyle: require_parentheses + AllowParenthesesInMultilineCall: true + AllowParenthesesInChaining: true + +# Allow longer lines for documentation +Layout/LineLength: + Max: 120 + AllowedPatterns: + - '\A\s*#.*\z' # Comments + - '\A\s*\*.*\z' # Rdoc comments + +Metrics/MethodLength: + Max: 25 + +# Allow longer blocks for Rake tasks and RSpec +Metrics/BlockLength: + AllowedMethods: + - describe + - context + - feature + - scenario + - let + - let! + - subject + - task + - namespace + Max: 50 + +# Documentation not required for internal tooling +Style/Documentation: + Enabled: false + +# Allow TODO comments +Style/CommentAnnotation: + Keywords: + - TODO + - FIXME + - OPTIMIZE + - HACK + - REVIEW + +Style/CommentedKeyword: + Enabled: false + +Style/StringLiterals: + Enabled: true + EnforcedStyle: single_quotes + +Style/StringLiteralsInInterpolation: + Enabled: true + EnforcedStyle: single_quotes + +Style/FrozenStringLiteralComment: + Enabled: true + EnforcedStyle: always + +Layout/FirstParameterIndentation: + EnforcedStyle: consistent + +Layout/ParameterAlignment: + EnforcedStyle: with_fixed_indentation + +Layout/MultilineMethodCallBraceLayout: + EnforcedStyle: same_line + +Layout/MultilineMethodCallIndentation: + EnforcedStyle: aligned + +Layout/FirstMethodArgumentLineBreak: + Enabled: true + +Layout/TrailingWhitespace: + Enabled: true + +Layout/EmptyLineAfterGuardClause: + Enabled: true + +Layout/HashAlignment: + Enabled: false + +Layout/SpaceAroundOperators: + Enabled: false + +Layout/SpaceAroundEqualsInParameterDefault: + Enabled: false + EnforcedStyle: no_space + +Metrics/AbcSize: + Enabled: false + +Metrics/CyclomaticComplexity: + Enabled: false + +Metrics/PerceivedComplexity: + Enabled: false + +Lint/UnusedMethodArgument: + Enabled: true + +Lint/UselessAssignment: + Enabled: true + +Lint/IneffectiveAccessModifier: + Enabled: true + +Security/YAMLLoad: + Enabled: false # Projects may intentionally use unsafe YAML loading + +Security/Eval: + Enabled: true # Catch and replace with safer alternatives + +# Disable Naming/PredicateMethod - we use generate_, run_, sync_, etc for actions +Naming/PredicateMethod: + Enabled: false \ No newline at end of file diff --git a/.config/.vendor/docopslab/vale.ini b/.config/.vendor/docopslab/vale.ini new file mode 100644 index 0000000..7108af2 --- /dev/null +++ b/.config/.vendor/docopslab/vale.ini @@ -0,0 +1,38 @@ +# DocOps Lab Vale Base Configuration +# This provides sensible defaults for DocOps Lab projects + +# General settings +MinAlertLevel = suggestion + +# DocOps Lab-managed styles +StylesPath = .vendor/vale/styles + +# Third-party packages +Packages = RedHat, AsciiDoc + +[asciidoctor] +attribute-missing = drop +experimental = YES +safe = unsafe + +[*] +BasedOnStyles = RedHat, AsciiDoc, DocOpsLab-AsciiDoc, DocOpsLab-Authoring +RedHat.PascalCamelCase = suggestion +RedHat.Headings = suggestion +RedHat.SentenceLength = suggestion +RedHat.TermsErrors = suggestion +RedHat.TermsWarnings = suggestion +RedHat.Spelling = NO +RedHat.CaseSensitiveTerms = NO +RedHat.GitLinks = NO +RedHat.Using = NO +RedHat.Slash = suggestion +RedHat.DoNotUseTerms = suggestion +RedHat.HeadingPunctuation = NO +RedHat.Hyphens = suggestion + +[#.adoc] +BasedOnStyles = RedHat, AsciiDoc, DocOpsLab-AsciiDoc, DocOpsLab-Authoring + +# Syntax rule customizations +RedHat-AsciiDoc.LinkContainsLinkText = suggestion diff --git a/.config/.vendor/vale/styles/AsciiDoc/ClosedAttributeBlocks.yml b/.config/.vendor/vale/styles/AsciiDoc/ClosedAttributeBlocks.yml new file mode 100644 index 0000000..b3e65fc --- /dev/null +++ b/.config/.vendor/vale/styles/AsciiDoc/ClosedAttributeBlocks.yml @@ -0,0 +1,7 @@ +--- +extends: existence +scope: raw +level: error +message: "Attribute block is not closed." +raw: + - '(?" + callout_regex := "^<(\\.)>" + + for line in text.split(scope, "\n") { + // trim trailing whitespace + line = text.trim_space(line) + if text.re_match(codeblock_callout_regex, line) { + //restart for new listingblock + num_callouts = 0 + //account for lines with multiple callouts + num_callouts_in_line := text.count(line, "<.>") + if num_callouts_in_line > 1 { + num_codeblock_callouts = num_codeblock_callouts + num_callouts_in_line + } else { + num_codeblock_callouts++ + } + } + + if text.re_match(callout_regex, line) { + num_callouts++ + if num_callouts > num_codeblock_callouts { + start := text.index(scope, line) + matches = append(matches, {begin: start, end: start + len(line)}) + } + if num_callouts == num_codeblock_callouts { + num_callouts = 0 + num_codeblock_callouts = 0 + } + } + } diff --git a/.config/.vendor/vale/styles/AsciiDoc/MatchingNumberedCallouts.yml b/.config/.vendor/vale/styles/AsciiDoc/MatchingNumberedCallouts.yml new file mode 100644 index 0000000..7e2c6f1 --- /dev/null +++ b/.config/.vendor/vale/styles/AsciiDoc/MatchingNumberedCallouts.yml @@ -0,0 +1,62 @@ +--- +extends: script +message: "Corresponding callout not found." +level: warning +link: https://docs.asciidoctor.org/asciidoc/latest/verbatim/callouts/ +scope: raw +script: | + text := import("text") + matches := [] + + // clean out multi-line comments + scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") + //add a newline, it might be missing + scope += "\n" + + codeblock_callout_regex := ".+(<\\d+>)+" + callout_regex := "^<(\\d+)>" + codeblock_callouts := [] + inside := false + found := false + num_callouts := 0 + + num_lines := len(text.split(scope, "\n")) + + for line in text.split(scope, "\n") { + // trim trailing whitespace + line = text.trim_space(line) + if text.re_match(codeblock_callout_regex, line) { + inside = true + //account for lines with multiple callouts + for i := 1; i < num_lines; i++ { + //text.contains must be str, not regex + str := "<" + i + ">" + if text.contains(line, str) { + codeblock_callouts = append(codeblock_callouts, i) + } + } + } else if text.re_match(callout_regex, line) { + inside = false + found = false + num_callouts = 1 + for i in codeblock_callouts { + //cast int > string + j := text.itoa(i) + str := "<" + j + ">" + if text.contains(line, str) { + //setting found allows us to loop through the list of possible matches + found = true + } + num_callouts++ + } + if !found { + start := text.index(scope, line) + matches = append(matches, {begin: start, end: start + len(line)}) + } + } else if codeblock_callouts && inside == false { + //cycled through num_callouts, reset for next codeblock + if num_callouts == len(codeblock_callouts) { + codeblock_callouts = [] + } + } + } \ No newline at end of file diff --git a/.config/.vendor/vale/styles/AsciiDoc/SequentialNumberedCallouts.yml b/.config/.vendor/vale/styles/AsciiDoc/SequentialNumberedCallouts.yml new file mode 100644 index 0000000..0a195f5 --- /dev/null +++ b/.config/.vendor/vale/styles/AsciiDoc/SequentialNumberedCallouts.yml @@ -0,0 +1,59 @@ +--- +extends: script +message: "Numbered callout does not follow sequentially." +level: warning +link: https://docs.asciidoctor.org/asciidoc/latest/verbatim/callouts/ +scope: raw +script: | + text := import("text") + matches := [] + + // clean out multi-line comments + scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") + //add a newline, it might be missing + scope += "\n" + + prev_num := 0 + callout_regex := "^<(\\d+)>" + listingblock_delim_regex := "^-{4,}$" + if_regex := "^ifdef::|ifndef::" + endif_regex := "^endif::\\[\\]" + inside_if := false + + for line in text.split(scope, "\n") { + // trim trailing whitespace + line = text.trim_space(line) + + // check if we're entering a conditional block + if text.re_match(if_regex, line) { + inside_if = true + } else if text.re_match(endif_regex, line) { + inside_if = false + } + + //reset count if we hit a listing block delimiter + if text.re_match(listingblock_delim_regex, line) { + prev_num = 0 + } + + //only count callouts where there are no ifdefs + if !inside_if { + if text.re_match(callout_regex, line) { + callout := text.re_find("<(\\d+)>", line) + for key, value in callout { + //trim angle brackets from string + trimmed := callout[key][0]["text"] + trimmed = text.trim_prefix(trimmed, "<") + trimmed = text.trim_suffix(trimmed, ">") + //cast string > int + num := text.atoi(trimmed) + //start counting + if num != prev_num+1 { + start := text.index(scope, line) + matches = append(matches, {begin: start, end: start + len(line)}) + } + prev_num = num + } + } + } + } diff --git a/.config/.vendor/vale/styles/AsciiDoc/UnsetAttributes.yml b/.config/.vendor/vale/styles/AsciiDoc/UnsetAttributes.yml new file mode 100644 index 0000000..4945d20 --- /dev/null +++ b/.config/.vendor/vale/styles/AsciiDoc/UnsetAttributes.yml @@ -0,0 +1,49 @@ +--- +extends: script +level: suggestion +message: "Set attribute directive does not have a corresponding unset attribute directive." +link: https://docs.asciidoctor.org/asciidoc/latest/attributes/unset-attributes/#unset-a-document-attribute-in-the-body +scope: raw +script: | + text := import("text") + matches := [] + + // trim extra whitespace + scope = text.trim_space(scope) + // add a newline, it might be missing + scope += "\n" + // clean out multi-line comments + scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") + + attr_regex := "^:[\\w-_]+:.*$" + context_mod_docs_regex := "^:context|_content-type|_mod-docs-content-type:.*$" + attr_name_regex := ":[\\w-_]+:" + attr_name := "" + unset_attr_pref := "" + unset_attr_suff := "" + + for line in text.split(scope, "\n") { + if text.re_match(attr_regex, line) { + if !text.re_match(context_mod_docs_regex, line) { + start := text.index(scope, line) + matches = append(matches, {begin: start, end: start + len(line)}) + // re_find returns an array holding all matches + attr_name = ((text.re_find(attr_name_regex, line))[0][0])["text"] + unset_attr_pref = `^:!` + text.trim_prefix(attr_name, `:`) + unset_attr_suff = `^` + text.trim_suffix(attr_name, `:`) + `!:` + // loop through lines for every attr found + for line in text.split(scope, "\n") { + if text.re_match(unset_attr_pref, line) { + if len(matches) > 0 { + // remove the most recently added match + matches = matches[:len(matches)-1] + } else if text.re_match(unset_attr_suff, line) { + if len(matches) > 0 { + matches = matches[:len(matches)-1] + } + } + } + } + } + } + } diff --git a/.config/.vendor/vale/styles/AsciiDoc/ValidAdmonitionBlocks.yml b/.config/.vendor/vale/styles/AsciiDoc/ValidAdmonitionBlocks.yml new file mode 100644 index 0000000..1ebe018 --- /dev/null +++ b/.config/.vendor/vale/styles/AsciiDoc/ValidAdmonitionBlocks.yml @@ -0,0 +1,30 @@ +--- +extends: script +level: error +message: "Unterminated admonition block found in file." +link: https://docs.asciidoctor.org/asciidoc/latest/blocks/admonitions/ +scope: raw +script: | + text := import("text") + matches := [] + + // clean out multi-line comments + scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") + //add a newline, it might be missing + scope += "\n" + + admon_delim_regex := "^={4}$" + count := 0 + + for line in text.split(scope, "\n") { + // trim trailing whitespace + line = text.trim_space(line) + if text.re_match(admon_delim_regex, line) { + count += 1 + start := text.index(scope, line) + matches = append(matches, {begin: start, end: start + len(line)}) + } else if count > 1 { + count = 0 // admonition block is closed, reset the count + matches = [] + } + } diff --git a/.config/.vendor/vale/styles/AsciiDoc/ValidCodeBlocks.yml b/.config/.vendor/vale/styles/AsciiDoc/ValidCodeBlocks.yml new file mode 100644 index 0000000..f7af5c1 --- /dev/null +++ b/.config/.vendor/vale/styles/AsciiDoc/ValidCodeBlocks.yml @@ -0,0 +1,30 @@ +--- +extends: script +level: error +message: "Unterminated listing block found in file." +link: https://docs.asciidoctor.org/asciidoc/latest/verbatim/listing-blocks/ +scope: raw +script: | + text := import("text") + matches := [] + + // clean out multi-line comments + scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") + //add a newline, it might be missing + scope += "\n" + + listingblock_delim_regex := "^-{4}$" + count := 0 + + for line in text.split(scope, "\n") { + // trim trailing whitespace + line = text.trim_space(line) + if text.re_match(listingblock_delim_regex, line) { + count += 1 + start := text.index(scope, line) + matches = append(matches, {begin: start, end: start + len(line)}) + } else if count > 1 { + count = 0 // listing block is closed, reset the count + matches = [] + } + } diff --git a/.config/.vendor/vale/styles/AsciiDoc/ValidConditions.yml b/.config/.vendor/vale/styles/AsciiDoc/ValidConditions.yml new file mode 100644 index 0000000..4da39c5 --- /dev/null +++ b/.config/.vendor/vale/styles/AsciiDoc/ValidConditions.yml @@ -0,0 +1,37 @@ +--- +extends: script +level: error +message: "File contains unbalanced if statements. Review the file to ensure it contains matching opening and closing if statements." +link: https://docs.asciidoctor.org/asciidoc/latest/directives/ifdef-ifndef/ +scope: raw +script: | + text := import("text") + matches := [] + + // clean out multi-line comments + scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") + //add a newline, it might be missing + scope += "\n" + + if_regex := "^ifdef::.+\\[\\]" + ifn_regex := "^ifndef::.+\\[\\]" + ifeval_regex := "^ifeval::\\[.+\\]" + endif_regex := "^endif::.*\\[\\]" + + for line in text.split(scope, "\n") { + // trim trailing whitespace + line = text.trim_space(line) + if text.re_match(if_regex, line) || text.re_match(ifn_regex, line) || text.re_match(ifeval_regex, line) { + start := text.index(scope, line) + matches = append(matches, {begin: start, end: start + len(line)}) + } else if text.re_match(endif_regex, line) { + if len(matches) > 0 { + //remove the most recently added open ifdef match + matches = matches[:len(matches)-1] + } else if len(matches) == 0 { + //add orphan endif::[] statements + start := text.index(scope, line) + matches = append(matches, {begin: start, end: start + len(line)}) + } + } + } diff --git a/.config/.vendor/vale/styles/AsciiDoc/ValidTableBlocks.yml b/.config/.vendor/vale/styles/AsciiDoc/ValidTableBlocks.yml new file mode 100644 index 0000000..ecc74ff --- /dev/null +++ b/.config/.vendor/vale/styles/AsciiDoc/ValidTableBlocks.yml @@ -0,0 +1,30 @@ +--- +extends: script +level: error +message: "Unterminated table block found in file." +link: https://docs.asciidoctor.org/asciidoc/latest/tables/build-a-basic-table/ +scope: raw +script: | + text := import("text") + matches := [] + + // clean out multi-line comments + scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") + //add a newline, it might be missing + scope += "\n" + + tbl_delim_regex := "^\\|={3,}$" + count := 0 + + for line in text.split(scope, "\n") { + // trim trailing whitespace + line = text.trim_space(line) + if text.re_match(tbl_delim_regex, line) { + count += 1 + start := text.index(scope, line) + matches = append(matches, {begin: start, end: start + len(line)}) + } else if count > 1 { + count = 0 //code block is closed, reset the count + matches = [] + } + } diff --git a/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ExplicitSectionIDs.yml b/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ExplicitSectionIDs.yml new file mode 100644 index 0000000..d656699 --- /dev/null +++ b/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ExplicitSectionIDs.yml @@ -0,0 +1,8 @@ +--- +extends: script +scope: raw +level: warning +message: "Section heading must be preceded by an explicit ID in format [[section-id]] on the line above." +link: https://docs.asciidoctor.org/asciidoc/latest/sections/custom-ids/ +description: "Ensures all section headings have explicit IDs for better cross-referencing and stable links." +script: ExplicitSectionIDs.tengo diff --git a/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ExtraLineBeforeLevel1.yml b/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ExtraLineBeforeLevel1.yml new file mode 100644 index 0000000..d4bf678 --- /dev/null +++ b/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ExtraLineBeforeLevel1.yml @@ -0,0 +1,7 @@ +--- +extends: script +scope: raw +level: warning +message: "Level-1 (==) headings must be preceded by two blank lines and an explicit [[section-id]] line." +description: "Enforces: blank, blank, [[id]], then '== Heading'." +script: ExtraLineBeforeLevel1.tengo diff --git a/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/OneSentencePerLine.yml b/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/OneSentencePerLine.yml new file mode 100644 index 0000000..211bb51 --- /dev/null +++ b/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/OneSentencePerLine.yml @@ -0,0 +1,8 @@ +--- +extends: script +scope: raw +level: warning +message: "Each sentence should be on its own line for better version control diffs and readability." +link: https://docs.asciidoctor.org/asciidoc/latest/writing/style/#one-sentence-per-line +description: "Encourages writing one sentence per line to improve readability and version control diffs." +script: OneSentencePerLine.tengo diff --git a/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/PreferSourceBlocks.yml b/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/PreferSourceBlocks.yml new file mode 100644 index 0000000..63c3f87 --- /dev/null +++ b/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/PreferSourceBlocks.yml @@ -0,0 +1,8 @@ +--- +extends: existence +scope: raw +level: error +message: "Use '[source,lang]' with '----' delimiters instead of markdown-style code blocks with '```'." +link: https://docs.asciidoctor.org/asciidoc/latest/verbatim/source-blocks/ +raw: + - '```\w*\n[\s\S]*?\n```' \ No newline at end of file diff --git a/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ProperAdmonitions.yml b/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ProperAdmonitions.yml new file mode 100644 index 0000000..4486b22 --- /dev/null +++ b/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ProperAdmonitions.yml @@ -0,0 +1,8 @@ +--- +extends: existence +scope: raw +level: error +message: "Use proper AsciiDoc admonition blocks instead of manual formatting." +link: https://docs.asciidoctor.org/asciidoc/latest/blocks/admonitions/ +raw: + - '^\*\*NOTE:\*\*|^\*\*TIP:\*\*|^\*\*IMPORTANT:\*\*|^\*\*CAUTION:\*\*|^\*\*WARNING:\*\*' \ No newline at end of file diff --git a/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ProperDLs.yml b/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ProperDLs.yml new file mode 100644 index 0000000..f979346 --- /dev/null +++ b/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ProperDLs.yml @@ -0,0 +1,7 @@ +extends: existence +message: "Use AsciiDoc definition list syntax (term:: definition) instead of bold/italic text followed by a colon." +link: https://docs.asciidoctor.org/asciidoc/latest/lists/description/ +level: error +scope: raw +raw: + - (?m)^(\* )?\*\*?(.+)(:\*\*?|\*\*?:)[\s\n]+(.+)$ diff --git a/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/UncleanListStart.yml b/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/UncleanListStart.yml new file mode 100644 index 0000000..2eec922 --- /dev/null +++ b/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/UncleanListStart.yml @@ -0,0 +1,8 @@ +extends: existence +message: | + Add a blank line before starting a list after a sentence ending in a colon. +level: warning +scope: raw +raw: + - '(?m)^.*(?" + callout_regex := "^<(\\.)>" + + for line in text.split(scope, "\n") { + // trim trailing whitespace + line = text.trim_space(line) + if text.re_match(codeblock_callout_regex, line) { + //restart for new listingblock + num_callouts = 0 + //account for lines with multiple callouts + num_callouts_in_line := text.count(line, "<.>") + if num_callouts_in_line > 1 { + num_codeblock_callouts = num_codeblock_callouts + num_callouts_in_line + } else { + num_codeblock_callouts++ + } + } + + if text.re_match(callout_regex, line) { + num_callouts++ + if num_callouts > num_codeblock_callouts { + start := text.index(scope, line) + matches = append(matches, {begin: start, end: start + len(line)}) + } + if num_callouts == num_codeblock_callouts { + num_callouts = 0 + num_codeblock_callouts = 0 + } + } + } diff --git a/.config/.vendor/vale/styles/RedHat-AsciiDoc/MatchingNumberedCallouts.yml b/.config/.vendor/vale/styles/RedHat-AsciiDoc/MatchingNumberedCallouts.yml new file mode 100644 index 0000000..7e2c6f1 --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat-AsciiDoc/MatchingNumberedCallouts.yml @@ -0,0 +1,62 @@ +--- +extends: script +message: "Corresponding callout not found." +level: warning +link: https://docs.asciidoctor.org/asciidoc/latest/verbatim/callouts/ +scope: raw +script: | + text := import("text") + matches := [] + + // clean out multi-line comments + scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") + //add a newline, it might be missing + scope += "\n" + + codeblock_callout_regex := ".+(<\\d+>)+" + callout_regex := "^<(\\d+)>" + codeblock_callouts := [] + inside := false + found := false + num_callouts := 0 + + num_lines := len(text.split(scope, "\n")) + + for line in text.split(scope, "\n") { + // trim trailing whitespace + line = text.trim_space(line) + if text.re_match(codeblock_callout_regex, line) { + inside = true + //account for lines with multiple callouts + for i := 1; i < num_lines; i++ { + //text.contains must be str, not regex + str := "<" + i + ">" + if text.contains(line, str) { + codeblock_callouts = append(codeblock_callouts, i) + } + } + } else if text.re_match(callout_regex, line) { + inside = false + found = false + num_callouts = 1 + for i in codeblock_callouts { + //cast int > string + j := text.itoa(i) + str := "<" + j + ">" + if text.contains(line, str) { + //setting found allows us to loop through the list of possible matches + found = true + } + num_callouts++ + } + if !found { + start := text.index(scope, line) + matches = append(matches, {begin: start, end: start + len(line)}) + } + } else if codeblock_callouts && inside == false { + //cycled through num_callouts, reset for next codeblock + if num_callouts == len(codeblock_callouts) { + codeblock_callouts = [] + } + } + } \ No newline at end of file diff --git a/.config/.vendor/vale/styles/RedHat-AsciiDoc/PreferXrefForInternal.yml b/.config/.vendor/vale/styles/RedHat-AsciiDoc/PreferXrefForInternal.yml new file mode 100644 index 0000000..07056d0 --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat-AsciiDoc/PreferXrefForInternal.yml @@ -0,0 +1,9 @@ +--- +# DocOps Lab AsciiDoc Style: Xref Usage +extends: existence +scope: raw +level: suggestion +message: "Consider using 'xref:' for internal cross-references instead of 'link:' for better maintainability." +link: https://docs.asciidoctor.org/asciidoc/latest/macros/xref/ +raw: + - 'link:(?![http|https|mailto|ftp]).*\.adoc' \ No newline at end of file diff --git a/.config/.vendor/vale/styles/RedHat-AsciiDoc/SequentialNumberedCallouts.yml b/.config/.vendor/vale/styles/RedHat-AsciiDoc/SequentialNumberedCallouts.yml new file mode 100644 index 0000000..0a195f5 --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat-AsciiDoc/SequentialNumberedCallouts.yml @@ -0,0 +1,59 @@ +--- +extends: script +message: "Numbered callout does not follow sequentially." +level: warning +link: https://docs.asciidoctor.org/asciidoc/latest/verbatim/callouts/ +scope: raw +script: | + text := import("text") + matches := [] + + // clean out multi-line comments + scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") + //add a newline, it might be missing + scope += "\n" + + prev_num := 0 + callout_regex := "^<(\\d+)>" + listingblock_delim_regex := "^-{4,}$" + if_regex := "^ifdef::|ifndef::" + endif_regex := "^endif::\\[\\]" + inside_if := false + + for line in text.split(scope, "\n") { + // trim trailing whitespace + line = text.trim_space(line) + + // check if we're entering a conditional block + if text.re_match(if_regex, line) { + inside_if = true + } else if text.re_match(endif_regex, line) { + inside_if = false + } + + //reset count if we hit a listing block delimiter + if text.re_match(listingblock_delim_regex, line) { + prev_num = 0 + } + + //only count callouts where there are no ifdefs + if !inside_if { + if text.re_match(callout_regex, line) { + callout := text.re_find("<(\\d+)>", line) + for key, value in callout { + //trim angle brackets from string + trimmed := callout[key][0]["text"] + trimmed = text.trim_prefix(trimmed, "<") + trimmed = text.trim_suffix(trimmed, ">") + //cast string > int + num := text.atoi(trimmed) + //start counting + if num != prev_num+1 { + start := text.index(scope, line) + matches = append(matches, {begin: start, end: start + len(line)}) + } + prev_num = num + } + } + } + } diff --git a/.config/.vendor/vale/styles/RedHat-AsciiDoc/UnsetAttributes.yml b/.config/.vendor/vale/styles/RedHat-AsciiDoc/UnsetAttributes.yml new file mode 100644 index 0000000..1ffc384 --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat-AsciiDoc/UnsetAttributes.yml @@ -0,0 +1,8 @@ +--- +extends: existence +scope: raw +level: error +link: https://docs.asciidoctor.org/asciidoc/latest/attributes/attribute-entries/ +message: "Unset attribute '%s' found." +raw: + - '(? 1 { + count = 0 // listing block is closed, reset the count + matches = [] + } + } diff --git a/.config/.vendor/vale/styles/RedHat-AsciiDoc/ValidConditions.yml b/.config/.vendor/vale/styles/RedHat-AsciiDoc/ValidConditions.yml new file mode 100644 index 0000000..4da39c5 --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat-AsciiDoc/ValidConditions.yml @@ -0,0 +1,37 @@ +--- +extends: script +level: error +message: "File contains unbalanced if statements. Review the file to ensure it contains matching opening and closing if statements." +link: https://docs.asciidoctor.org/asciidoc/latest/directives/ifdef-ifndef/ +scope: raw +script: | + text := import("text") + matches := [] + + // clean out multi-line comments + scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") + //add a newline, it might be missing + scope += "\n" + + if_regex := "^ifdef::.+\\[\\]" + ifn_regex := "^ifndef::.+\\[\\]" + ifeval_regex := "^ifeval::\\[.+\\]" + endif_regex := "^endif::.*\\[\\]" + + for line in text.split(scope, "\n") { + // trim trailing whitespace + line = text.trim_space(line) + if text.re_match(if_regex, line) || text.re_match(ifn_regex, line) || text.re_match(ifeval_regex, line) { + start := text.index(scope, line) + matches = append(matches, {begin: start, end: start + len(line)}) + } else if text.re_match(endif_regex, line) { + if len(matches) > 0 { + //remove the most recently added open ifdef match + matches = matches[:len(matches)-1] + } else if len(matches) == 0 { + //add orphan endif::[] statements + start := text.index(scope, line) + matches = append(matches, {begin: start, end: start + len(line)}) + } + } + } diff --git a/.config/.vendor/vale/styles/RedHat-AsciiDoc/ValidTableBlocks.yml b/.config/.vendor/vale/styles/RedHat-AsciiDoc/ValidTableBlocks.yml new file mode 100644 index 0000000..ecc74ff --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat-AsciiDoc/ValidTableBlocks.yml @@ -0,0 +1,30 @@ +--- +extends: script +level: error +message: "Unterminated table block found in file." +link: https://docs.asciidoctor.org/asciidoc/latest/tables/build-a-basic-table/ +scope: raw +script: | + text := import("text") + matches := [] + + // clean out multi-line comments + scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") + //add a newline, it might be missing + scope += "\n" + + tbl_delim_regex := "^\\|={3,}$" + count := 0 + + for line in text.split(scope, "\n") { + // trim trailing whitespace + line = text.trim_space(line) + if text.re_match(tbl_delim_regex, line) { + count += 1 + start := text.index(scope, line) + matches = append(matches, {begin: start, end: start + len(line)}) + } else if count > 1 { + count = 0 //code block is closed, reset the count + matches = [] + } + } diff --git a/.config/.vendor/vale/styles/RedHat/Abbreviations.yml b/.config/.vendor/vale/styles/RedHat/Abbreviations.yml new file mode 100644 index 0000000..ba6c021 --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat/Abbreviations.yml @@ -0,0 +1,9 @@ +--- +extends: existence +level: error +link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#abbreviations +message: "Do not use periods in all-uppercase abbreviations such as '%s'." +nonword: true +# source: "IBM - Periods with abbreviations, p. 5" +tokens: + - '\b(?:[A-Z]\.){3,5}' diff --git a/.config/.vendor/vale/styles/RedHat/CaseSensitiveTerms.yml b/.config/.vendor/vale/styles/RedHat/CaseSensitiveTerms.yml new file mode 100644 index 0000000..6c4f281 --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat/CaseSensitiveTerms.yml @@ -0,0 +1,333 @@ +--- +extends: substitution +ignorecase: false +level: warning +link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#case-sensitive-terms +message: "Use '%s' rather than '%s'." +action: + name: replace +swap: + "(?{7}\s.*$' diff --git a/.config/.vendor/vale/styles/RedHat/ObviousTerms.yml b/.config/.vendor/vale/styles/RedHat/ObviousTerms.yml new file mode 100644 index 0000000..fd3f2a3 --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat/ObviousTerms.yml @@ -0,0 +1,16 @@ +--- +extends: existence +level: suggestion +# link: +message: "Consider not documenting %s because it is self-explanatory." +scope: sentence +# source: +action: + name: remove +tokens: + - 'User field' + - 'Username field' + - 'Password field' + - 'Mail field' + - 'Description field' + - 'Name field' diff --git a/.config/.vendor/vale/styles/RedHat/OxfordComma.yml b/.config/.vendor/vale/styles/RedHat/OxfordComma.yml new file mode 100644 index 0000000..64268cc --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat/OxfordComma.yml @@ -0,0 +1,9 @@ +--- +extends: existence +level: suggestion +link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#oxford-comma +message: "Use the Oxford comma in '%s'." +scope: sentence +nonword: true +tokens: + - '(?:[^\s,]+,){1,} \w+ (?:and|or) \w+[.?!]' diff --git a/.config/.vendor/vale/styles/RedHat/PascalCamelCase.yml b/.config/.vendor/vale/styles/RedHat/PascalCamelCase.yml new file mode 100644 index 0000000..9156810 --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat/PascalCamelCase.yml @@ -0,0 +1,207 @@ +--- +extends: existence +ignorecase: false +level: suggestion +scope: [list, sentence] +link: https://redhat-documentation.github.io/asciidoc-markup-conventions +message: "Consider wrapping this Pascal or Camel case term ('%s') in backticks." +# source: https://github.com/redhat-documentation/vale-at-red-hat/tree/main/.vale/styles/RedHat/PascalCamelCase.yml +tokens: + #PascalCase + - ([A-Z]+[a-z]+){2,} + - ([A-Z]+[a-z]+[A-Z]+){1,} + - ([A-Z]+[A-Z]+[a-z]+){1,} + #camelCase + - ([a-z]+)([A-Z]+[a-z]+){1,} +exceptions: + - '\b[A-Z]{2,}s?' + - 'vCPUs?' + - 3scale + - AGPLv + - AMQ + - API + - AppStream + - AsciiDoc + - AssertJ + - BaseOS + - BitBucket + - BlueStore + - CaaS + - camelCase + - CapEx + - CentOS + - CephFS + - CheckTree + - ClassLoader + - CloudForms + - CodeLlama + - CodeReady + - ConfigMaps? + - ConnectX + - Convert2RHEL + - CoreOS + - DaemonSet + - DDoS + - DeepSeek + - DevOps + - DevWorkspace + - DialoGPT + - DNSSec + - EleutherAI + - eServer + - eXpress + - eXtenSion + - FaaS + - FCoE + - FFmpeg + - FileStore + - FireWire + - FreeRADIUS + - GbE + - GBps + - GiB + - GitHub + - GitLab + - GitOps + - GlusterFS + - GNUPro + - GnuTLS + - GraalVM + - GraphQL + - GTID + - HashBase + - HdrHistogram + - Helm + - HyperCLOVAX + - HyperShift + - IaaS + - IBoE + - IconBurst + - IdM + - IKEv + - InfiniBand + - InnoDB + - IntelliJ + - IntelliSense + - IPoIB + - IPsec + - IPv + - ISeries + - JackFram + - JavaScript + - JBoss + - JetBrains + - JUnit + - kBps + - KiB + - KTLim + - LangTags + - LGPLv + - libOSMesa + - LibreOffice + - libXNVCtrl + - LightPulse + - LinuxONE + - LiquidIO + - LLaDA + - ManageIQ + - MariaDB + - MaziyarPanahi + - MBps + - MegaRAID + - MiB + - MicroProfile + - MoE + - MongoDB + - MoreUtils + - MySQL + - NetBIOS + - NetcoredebugOutput + - NetWeaver + - NetworkManager + - NetXen + - NetXtreme + - NFSv + - NMState + - NousResearch + - NuGet + - NVMe + - OAuth + - objectClass + - OmniSharp + - OneConnect + - OpenELM + - OpenEXR + - OpenHermes + - OpenID + - OpenIPMI + - OpenJDK + - OpenRAN + - OpenRewrite + - OpenSCAP + - OpenShift + - OpenSSH + - OpenSSL + - OpenStack + - OpenTelemetry + - OpenTracing + - OperatorHub + - OpEx + - OSBuild + - OTel + - PaaS + - PackageKit + - PathTools + - PCIe + - PipeWire + - PostgreSQL + - PostScript + - PowerPC + - PowerShell + - ProLiant + - PulseAudio + - PyPA + - PyPI + - QLogic + - ReaR + - RedBoot + - relaxngDatatype + - RESTEasy + - RHEL + - RoCE + - SaaS + - SeaBIOS + - SELinux + - SmallRye + - SmartNIC + - SmartState + - SmolLM + - SQLite + - StarOffice + - STMicroelectronics + - SuperLU + - SysV + - TBps + - TheBloke + - TiB + - TinyLlama + - TuneD + - TypeScript + - UltraSPARC + - USBGuard + - vCenter + - vDisk + - vHost + - VMware + - vSphere + - vSwitch + - vLLM + - WebAuthn + - WebSocket + - WireGuard + - XEmacs + - xPaaS + - XString + - XWayland + - YouTube + - ZCentral diff --git a/.config/.vendor/vale/styles/RedHat/PassiveVoice.yml b/.config/.vendor/vale/styles/RedHat/PassiveVoice.yml new file mode 100644 index 0000000..782a364 --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat/PassiveVoice.yml @@ -0,0 +1,193 @@ +--- +extends: existence +ignorecase: true +level: suggestion +link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#passive-voice +message: "'%s' is passive voice. In general, use active voice. Consult the style guide for acceptable use of passive voice." +# source: "https://redhat-documentation.github.io/supplementary-style-guide/#prerequisites; IBM - Voice, p.35" +raw: + - \b(am|are|were|being|is|been|was|be)\b\s* +tokens: + - '[\w]+ed' + - awoken + - beat + - become + - been + - begun + - bent + - beset + - bet + - bid + - bidden + - bitten + - bled + - blown + - born + - bought + - bound + - bred + - broadcast + - broken + - brought + - built + - burnt + - burst + - cast + - caught + - chosen + - clung + - come + - cost + - crept + - cut + - dealt + - dived + - done + - drawn + - dreamt + - driven + - drunk + - dug + - eaten + - fallen + - fed + - felt + - fit + - fled + - flown + - flung + - forbidden + - foregone + - forgiven + - forgotten + - forsaken + - fought + - found + - frozen + - given + - gone + - gotten + - ground + - grown + - heard + - held + - hidden + - hit + - hung + - hurt + - kept + - knelt + - knit + - known + - laid + - lain + - leapt + - learnt + - led + - left + - lent + - let + - lighted + - lost + - made + - meant + - met + - misspelt + - mistaken + - mown + - overcome + - overdone + - overtaken + - overthrown + - paid + - pled + - proven + - put + - quit + - read + - rid + - ridden + - risen + - run + - rung + - said + - sat + - sawn + - seen + - sent + - set + - sewn + - shaken + - shaven + - shed + - shod + - shone + - shorn + - shot + - shown + - shrunk + - shut + - slain + - slept + - slid + - slit + - slung + - smitten + - sold + - sought + - sown + - sped + - spent + - spilt + - spit + - split + - spoken + - spread + - sprung + - spun + - stolen + - stood + - stridden + - striven + - struck + - strung + - stuck + - stung + - stunk + - sung + - sunk + - swept + - swollen + - sworn + - swum + - swung + - taken + - taught + - thought + - thrived + - thrown + - thrust + - told + - torn + - trodden + - understood + - upheld + - upset + - wed + - wept + - withheld + - withstood + - woken + - won + - worn + - wound + - woven + - written + - wrung +exceptions: + - deprecated + - displayed + - imported + - supported + - tested + - trusted diff --git a/.config/.vendor/vale/styles/RedHat/ProductCentricWriting.yml b/.config/.vendor/vale/styles/RedHat/ProductCentricWriting.yml new file mode 100644 index 0000000..a9ffb7c --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat/ProductCentricWriting.yml @@ -0,0 +1,8 @@ +--- +extends: existence +ignorecase: true +level: suggestion +link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#product-centric-writing +message: "Do not use transitive verb constructions like '%s' to grant abilities to inanimate objects. Whenever possible, use direct, user-focused sentences where the subject of the sentence performs the action." +tokens: + - '(allows?|enables?|lets?|permits?)\s(you|customers|the customer|the user|users)' diff --git a/.config/.vendor/vale/styles/RedHat/README-IBM.adoc b/.config/.vendor/vale/styles/RedHat/README-IBM.adoc new file mode 100644 index 0000000..7e27b01 --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat/README-IBM.adoc @@ -0,0 +1,9 @@ += README for Rules from the IBM Style Guide + +All rights for the IBM Style Guide belong to IBM. + +Our sources of inspiration: + +* link:https://github.com/errata-ai/IBM[The primary Vale implementation of the IBM Style Guide] + +* https://www.ibm.com/developerworks/library/styleguidelines/index.html[The DeveloperWorks version of the IBM Style Guide] diff --git a/.config/.vendor/vale/styles/RedHat/README-proselint.md b/.config/.vendor/vale/styles/RedHat/README-proselint.md new file mode 100644 index 0000000..b08cef9 --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat/README-proselint.md @@ -0,0 +1,13 @@ + +Copyright © 2014–2015, Jordan Suchow, Michael Pacer, and Lara A. Ross +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/.config/.vendor/vale/styles/RedHat/README-write-good.md b/.config/.vendor/vale/styles/RedHat/README-write-good.md new file mode 100644 index 0000000..ba919b6 --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat/README-write-good.md @@ -0,0 +1,28 @@ + +Based on [write-good](https://github.com/btford/write-good). + +> Naive linter for English prose for developers who can't write good and wanna learn to do other stuff good too. + +``` +The MIT License (MIT) + +Copyright (c) 2014 Brian Ford + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` diff --git a/.config/.vendor/vale/styles/RedHat/ReadabilityGrade.yml b/.config/.vendor/vale/styles/RedHat/ReadabilityGrade.yml new file mode 100644 index 0000000..1af30bd --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat/ReadabilityGrade.yml @@ -0,0 +1,9 @@ +--- +extends: readability +grade: 9 +message: "Simplify your language. The calculated Flesch–Kincaid grade level of %s is above the recommended reading grade level of 9." +link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#readability-grade +level: suggestion +metrics: + - Flesch-Kincaid + diff --git a/.config/.vendor/vale/styles/RedHat/ReleaseNotes.yml b/.config/.vendor/vale/styles/RedHat/ReleaseNotes.yml new file mode 100644 index 0000000..b83ebb6 --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat/ReleaseNotes.yml @@ -0,0 +1,11 @@ +--- +extends: substitution +ignorecase: false +level: suggestion +link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#release-notes +message: "For release notes, consider using '%s' rather than '%s'." +# source: "https://redhat-documentation.github.io/supplementary-style-guide/#release-notes" +# swap maps tokens in form of bad: good +swap: + Now: With this update + Previously: Before this update diff --git a/.config/.vendor/vale/styles/RedHat/RepeatedWords.yml b/.config/.vendor/vale/styles/RedHat/RepeatedWords.yml new file mode 100644 index 0000000..af8a6b5 --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat/RepeatedWords.yml @@ -0,0 +1,16 @@ +--- +extends: repetition +message: "'%s' is repeated." +level: warning +link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#repeated-words +ignorecase: false +alpha: true +action: + name: edit + params: + - regex + - '(\w+)(\s\w+)' # pattern + - "$1" # replace +tokens: + - '[^\s\.]+' + - '[^\s]+' diff --git a/.config/.vendor/vale/styles/RedHat/SelfReferentialText.yml b/.config/.vendor/vale/styles/RedHat/SelfReferentialText.yml new file mode 100644 index 0000000..2b33ec1 --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat/SelfReferentialText.yml @@ -0,0 +1,14 @@ +--- +extends: existence +ignorecase: true +level: suggestion +link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#self-referential-text +message: "Avoid using self-referential text such as '%s'." +# source: "IBM - Audience and medium, p. 22" +tokens: + - this topic + - this module + - this assembly + - this chapter + - this section + - this subsection diff --git a/.config/.vendor/vale/styles/RedHat/SentenceLength.yml b/.config/.vendor/vale/styles/RedHat/SentenceLength.yml new file mode 100644 index 0000000..f899448 --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat/SentenceLength.yml @@ -0,0 +1,9 @@ +--- +extends: occurrence +level: suggestion +link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#sentence-length +message: "Try to keep sentences to an average of 32 words or fewer." +scope: sentence +# source: "IBM - Conversational style" +max: 32 +token: \b(\w+)\b diff --git a/.config/.vendor/vale/styles/RedHat/SimpleWords.yml b/.config/.vendor/vale/styles/RedHat/SimpleWords.yml new file mode 100644 index 0000000..dbdb983 --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat/SimpleWords.yml @@ -0,0 +1,119 @@ +--- +extends: substitution +ignorecase: true +level: suggestion +link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#simple-words +message: "Use simple language. Consider using '%s' rather than '%s'." +action: + name: replace +swap: + "approximate(?:ly)?": about + "objective(?! C?)": aim|goal + absent: none|not here + abundance: plenty + accentuate: stress + accompany: go with + accomplish: carry out|do + accorded: given + accordingly: so + accrue: add + accurate: right|exact + acquiesce: agree + acquire: get|buy + addressees: you + adjacent to: next to + adjustment: change + admissible: allowed + advantageous: helpful + advise: tell + aggregate: total + aircraft: plane + alleviate: ease + allocate: assign|divide + alternatively: or + alternatives: choices|options + ameliorate: improve + amend: change + anticipate: expect + apparent: clear|plain + ascertain: discover|find out + assistance: help + attain: meet + attempt: try + authorize: allow + belated: late + bestow: give + cease: stop|end + collaborate: work together + commence: begin + compensate: pay + component: part + comprise: form|include + concerning: about + confer: give|award + consequently: so + consolidate: merge + constitutes: forms + contains: has + convene: meet + demonstrate: show|prove + depart: leave + designate: choose + desire: want|wish + determine: decide|find + detrimental: bad|harmful + disclose: share|tell + discontinue: stop + disseminate: send|give + eliminate: end + elucidate: explain + employ: use + enclosed: inside|included + encounter: meet + endeavor: try + enumerate: count + equitable: fair + equivalent: equal + exclusively: only + expedite: hurry + facilitate: ease + females: women + finalize: complete|finish + frequently: often + identical: same + incorrect: wrong + indication: sign + initiate: start|begin + itemized: listed + jeopardize: risk + liaise: work with|partner with + maintain: keep|support + methodology: method + modify: change + monitor: check|watch + multiple: many + necessitate: cause + notify: tell + numerous: many + obligate: bind|compel + optimum: best|most + permit: let + portion: part + possess: own + previous: earlier + previously: before + prioritize: rank + procure: buy + provide: give|offer + purchase: buy + relocate: move + solicit: request + state-of-the-art: latest + subsequent: later|next + substantial: large + sufficient: enough + terminate: end + transmit: send + utilization: use + utilize: use + utilizing: using diff --git a/.config/.vendor/vale/styles/RedHat/Slash.yml b/.config/.vendor/vale/styles/RedHat/Slash.yml new file mode 100644 index 0000000..e33624c --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat/Slash.yml @@ -0,0 +1,103 @@ +extends: existence +ignorecase: true +level: warning +link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#slash +message: "Use either 'or' or 'and' in '%s'" +scope: + - sentence + - heading +tokens: + - '(?__' + - '<[a-z_]+-[a-z_-]+>' \ No newline at end of file diff --git a/.config/.vendor/vale/styles/RedHat/Using.yml b/.config/.vendor/vale/styles/RedHat/Using.yml new file mode 100644 index 0000000..97f5700 --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat/Using.yml @@ -0,0 +1,14 @@ +--- +extends: sequence +message: "Use 'by using' instead of 'using' when it follows a noun for clarity and grammatical correctness." +link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#using +level: warning +action: + name: edit + params: + - regex + - '(\w+)( using)' # pattern + - "$1 by using" # replace +tokens: + - tag: NN|NNP|NNPS|NNS + - pattern: \busing\b diff --git a/.config/.vendor/vale/styles/RedHat/collate-output.tmpl b/.config/.vendor/vale/styles/RedHat/collate-output.tmpl new file mode 100644 index 0000000..449aa42 --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat/collate-output.tmpl @@ -0,0 +1,66 @@ +{{- /* See https://github.com/errata-ai/vale/issues/614 */ -}} +{{- /* See https://vale.sh/manual/output/ */ -}} + +{{- /* Keep track of our various counts */ -}} + +{{- $e := 0 -}} +{{- $w := 0 -}} +{{- $s := 0 -}} +{{- $f := 0 -}} + +{{- /* Range over the linted files */ -}} + +{{- range .Files}} +{{$table := newTable true}} + +{{- $f = add1 $f -}} +{{- .Path | underline | indent 1 -}} +{{- "\n" -}} + +{{- $msgToLoc := dict -}} +{{- $msgToLvl := dict -}} +{{- $msgToChk := dict -}} + +{{- /* Range over the file's alerts */ -}} + +{{- range .Alerts -}} + +{{- $error := "" -}} +{{- if eq .Severity "error" -}} + {{- $error = .Severity | red -}} + {{- $e = add1 $e -}} +{{- else if eq .Severity "warning" -}} + {{- $error = .Severity | yellow -}} + {{- $w = add1 $w -}} +{{- else -}} + {{- $error = .Severity | blue -}} + {{- $s = add1 $s -}} +{{- end}} + +{{- $loc := printf "%d:%d" .Line (index .Span 0) -}} + +{{- $locations := get $msgToLoc .Message -}} + +{{- $_ := set $msgToLoc .Message (cat $locations $loc) -}} +{{- $_ := set $msgToLvl .Message $error -}} +{{- $_ := set $msgToChk .Message .Check -}} + +{{end -}} + +{{- range keys $msgToLoc -}} + +{{- $msg := . -}} +{{- $loc := trimPrefix "," ((splitList " " (get $msgToLoc $msg)) | join ",") -}} +{{- $lvl := get $msgToLvl $msg -}} +{{- $chk := get $msgToChk $msg -}} + +{{- $row := list $loc $lvl $msg $chk | toStrings -}} +{{- $table = addRow $table $row -}} + +{{end -}} + +{{- $table = renderTable $table -}} + +{{end}} + +{{- $e}} {{"errors" | red}}, {{$w}} {{"warnings" | yellow}} and {{$s}} {{"suggestions" | blue}} in {{$f}} {{$f | int | plural "file" "files"}}. diff --git a/.config/.vendor/vale/styles/RedHat/meta.json b/.config/.vendor/vale/styles/RedHat/meta.json new file mode 100644 index 0000000..6099c80 --- /dev/null +++ b/.config/.vendor/vale/styles/RedHat/meta.json @@ -0,0 +1,4 @@ +{ + "feed": "https://github.com/redhat-documentation/vale-at-red-hat/releases.atom", + "vale_version": ">=2.20.0" +} diff --git a/.config/.vendor/vale/styles/config/scripts/ExplicitSectionIDs.tengo b/.config/.vendor/vale/styles/config/scripts/ExplicitSectionIDs.tengo new file mode 100644 index 0000000..08ed5c6 --- /dev/null +++ b/.config/.vendor/vale/styles/config/scripts/ExplicitSectionIDs.tengo @@ -0,0 +1,56 @@ +text := import("text") + +matches := [] +lines := text.split(scope, "\n") + +// byte starts (CRLF-safe) +starts := [] +run := 0 +i := 0 +for i < len(lines) { + starts = append(starts, run) + run = run + len(lines[i]) + 1 + i = i + 1 +} + +idRe := `^\[\[[A-Za-z0-9_-]+\]\]$` +h2plusRe := `^={2,}\s+.+$` +commentRe := `^\s*//` +condRe := `^\s*(ifdef|ifndef|ifeval)::` + +j := 0 +for j < len(lines) { + line := lines[j] + + // Check if this is a section heading (level 2+) + if text.re_match(h2plusRe, line) { + // Walk backward from j-1 to find the ID, skipping comments/conditionals + hasID := false + k := j - 1 + + for k >= 0 { + candidate := text.trim_space(lines[k]) + + // Skip empty lines, comments, and conditionals + if candidate == "" || text.re_match(commentRe, candidate) || text.re_match(condRe, candidate) { + k = k - 1 + continue + } + + // Check if this line is an ID + if text.re_match(idRe, candidate) { + hasID = true + } + + // Stop at first non-skippable line + break + } + + if !hasID { + begin := starts[j] + end := begin + len(line) + matches = append(matches, {"begin": begin, "end": end}) + } + } + j = j + 1 +} diff --git a/.config/.vendor/vale/styles/config/scripts/ExtraLineBeforeLevel1.tengo b/.config/.vendor/vale/styles/config/scripts/ExtraLineBeforeLevel1.tengo new file mode 100644 index 0000000..1ae9105 --- /dev/null +++ b/.config/.vendor/vale/styles/config/scripts/ExtraLineBeforeLevel1.tengo @@ -0,0 +1,121 @@ +text := import("text") + +matches := [] +lines := text.split(scope, "\n") + +// byte starts (CRLF-safe) +starts := [] +run := 0 +i := 0 +for i < len(lines) { + starts = append(starts, run) + run = run + len(lines[i]) + 1 + i = i + 1 +} + +commentRe := `^\s*//` +condRe := `^\s*(ifdef|ifndef|ifeval)::` +idRe := `^\[\[[A-Za-z0-9_-]+\]\]$` +h1Re := `^==\s+.+$` + +j := 0 +for j < len(lines) { + line := lines[j] + + // Check if this is a level-1 heading + if text.re_match(h1Re, line) { + // Step 1: Walk backward from heading to find ID (required) + k := j - 1 + idLineNum := -1 + + // Skip backwards over comments/conditionals between ID and heading + for k >= 0 { + candidate := text.trim_space(lines[k]) + + // Skip comments and conditionals + if text.re_match(commentRe, candidate) || text.re_match(condRe, candidate) { + k = k - 1 + continue + } + + // If blank, no ID found + if candidate == "" { + break + } + + // Check if this is the ID + if text.re_match(idRe, candidate) { + idLineNum = k + } + + // Stop at first non-comment/conditional line + break + } + + // If no ID was found, flag this heading + if idLineNum == -1 { + begin := starts[j] + end := begin + len(line) + matches = append(matches, {"begin": begin, "end": end}) + j = j + 1 + continue + } + + // Step 2: Walk backward from ID to find start of section header block + // Section header includes: opening conditionals/comments that are adjacent to ID (no blanks between) + m := idLineNum - 1 + sectionStart := idLineNum + + for m >= 0 { + candidate := text.trim_space(lines[m]) + + // If blank, stop - section header block ends here + if candidate == "" { + break + } + + // If comment or conditional, it's part of section header block + if text.re_match(commentRe, candidate) || text.re_match(condRe, candidate) { + sectionStart = m + m = m - 1 + continue + } + + // Hit other content, stop + break + } + + // Step 3: Count blank lines immediately before section header block start + n := sectionStart - 1 + blanks := 0 + + for n >= 0 { + candidate := text.trim_space(lines[n]) + + // Count consecutive blank lines + if candidate == "" { + blanks = blanks + 1 + n = n - 1 + continue + } + + // Hit non-blank, stop counting + break + } + + // If we reached the start of file without hitting content, don't require blanks + if n < 0 { + j = j + 1 + continue + } + + // Require exactly 2 blank lines before the section header block + if blanks != 2 { + begin := starts[j] + end := begin + len(line) + matches = append(matches, {"begin": begin, "end": end}) + } + } + + j = j + 1 +} diff --git a/.config/.vendor/vale/styles/config/scripts/OneSentencePerLine.tengo b/.config/.vendor/vale/styles/config/scripts/OneSentencePerLine.tengo new file mode 100644 index 0000000..f236635 --- /dev/null +++ b/.config/.vendor/vale/styles/config/scripts/OneSentencePerLine.tengo @@ -0,0 +1,53 @@ +text := import("text") + +matches := [] + +lines := text.split(scope, "\n") + +starts := [] +run := 0 +i := 0 +for i < len(lines) { + line := lines[i] + starts = append(starts, run) + run = run + len(line) + 1 + i = i + 1 +} + +// require an alnum/closer BEFORE .!? to avoid leading "." list markers +boundary := `[A-Za-z0-9\)\]"'][.!?]['")\]]*[ \t]+[A-Z]` + +j := 0 +for j < len(lines) { + line := lines[j] + + // skip attribute/table/heading lines + if text.re_match(`^[:|=]`, line) { + j = j + 1 + continue + } + + // skip numbered list items (e.g., "1. Something") unless prefaced by comment chars + // Allow: // 1. Something or # 1. Another thing + // Don't allow: 1. Something + if text.re_match(`^\d+\.\s+\w`, line) && !text.re_match(`^[/#]+\s*\d+\.\s+\w`, line) { + j = j + 1 + continue + } + + // skip ALL commented lines that start with number and period (like "# 1. Something") + if text.re_match(`^[/#]+\s*\d+\.\s`, line) { + j = j + 1 + continue + } + + if text.re_match(boundary, line) { + begin := starts[j] + end := begin + len(line) + matches = append(matches, {"begin": begin, "end": end}) + } + + j = j + 1 +} + +// no explicit return diff --git a/.config/.vendor/vale/styles/proselint/Airlinese.yml b/.config/.vendor/vale/styles/proselint/Airlinese.yml new file mode 100644 index 0000000..a6ae9c1 --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/Airlinese.yml @@ -0,0 +1,8 @@ +extends: existence +message: "'%s' is airlinese." +ignorecase: true +level: error +tokens: + - enplan(?:e|ed|ing|ement) + - deplan(?:e|ed|ing|ement) + - taking off momentarily diff --git a/.config/.vendor/vale/styles/proselint/AnimalLabels.yml b/.config/.vendor/vale/styles/proselint/AnimalLabels.yml new file mode 100644 index 0000000..b92e06f --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/AnimalLabels.yml @@ -0,0 +1,48 @@ +extends: substitution +message: "Consider using '%s' instead of '%s'." +level: error +action: + name: replace +swap: + (?:bull|ox)-like: taurine + (?:calf|veal)-like: vituline + (?:crow|raven)-like: corvine + (?:leopard|panther)-like: pardine + bird-like: avine + centipede-like: scolopendrine + crab-like: cancrine + crocodile-like: crocodiline + deer-like: damine + eagle-like: aquiline + earthworm-like: lumbricine + falcon-like: falconine + ferine: wild animal-like + fish-like: piscine + fox-like: vulpine + frog-like: ranine + goat-like: hircine + goose-like: anserine + gull-like: laridine + hare-like: leporine + hawk-like: accipitrine + hippopotamus-like: hippopotamine + lizard-like: lacertine + mongoose-like: viverrine + mouse-like: murine + ostrich-like: struthionine + peacock-like: pavonine + porcupine-like: hystricine + rattlesnake-like: crotaline + sable-like: zibeline + sheep-like: ovine + shrew-like: soricine + sparrow-like: passerine + swallow-like: hirundine + swine-like: suilline + tiger-like: tigrine + viper-like: viperine + vulture-like: vulturine + wasp-like: vespine + wolf-like: lupine + woodpecker-like: picine + zebra-like: zebrine diff --git a/.config/.vendor/vale/styles/proselint/Annotations.yml b/.config/.vendor/vale/styles/proselint/Annotations.yml new file mode 100644 index 0000000..dcb24f4 --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/Annotations.yml @@ -0,0 +1,9 @@ +extends: existence +message: "'%s' left in text." +ignorecase: false +level: error +tokens: + - XXX + - FIXME + - TODO + - NOTE diff --git a/.config/.vendor/vale/styles/proselint/Apologizing.yml b/.config/.vendor/vale/styles/proselint/Apologizing.yml new file mode 100644 index 0000000..11088aa --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/Apologizing.yml @@ -0,0 +1,8 @@ +extends: existence +message: "Excessive apologizing: '%s'" +ignorecase: true +level: error +action: + name: remove +tokens: + - More research is needed diff --git a/.config/.vendor/vale/styles/proselint/Archaisms.yml b/.config/.vendor/vale/styles/proselint/Archaisms.yml new file mode 100644 index 0000000..c8df9ab --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/Archaisms.yml @@ -0,0 +1,52 @@ +extends: existence +message: "'%s' is archaic." +ignorecase: true +level: error +tokens: + - alack + - anent + - begat + - belike + - betimes + - boughten + - brocage + - brokage + - camarade + - chiefer + - chiefest + - Christiana + - completely obsolescent + - cozen + - divers + - deflexion + - fain + - forsooth + - foreclose from + - haply + - howbeit + - illumine + - in sooth + - maugre + - meseems + - methinks + - nigh + - peradventure + - perchance + - saith + - shew + - sistren + - spake + - to wit + - verily + - whilom + - withal + - wot + - enclosed please find + - please find enclosed + - enclosed herewith + - enclosed herein + - inforce + - ex postfacto + - foreclose from + - forewent + - for ever diff --git a/.config/.vendor/vale/styles/proselint/But.yml b/.config/.vendor/vale/styles/proselint/But.yml new file mode 100644 index 0000000..0e2c32b --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/But.yml @@ -0,0 +1,8 @@ +extends: existence +message: "Do not start a paragraph with a 'but'." +level: error +scope: paragraph +action: + name: remove +tokens: + - ^But diff --git a/.config/.vendor/vale/styles/proselint/Cliches.yml b/.config/.vendor/vale/styles/proselint/Cliches.yml new file mode 100644 index 0000000..c56183c --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/Cliches.yml @@ -0,0 +1,782 @@ +extends: existence +message: "'%s' is a cliche." +level: error +ignorecase: true +tokens: + - a chip off the old block + - a clean slate + - a dark and stormy night + - a far cry + - a fate worse than death + - a fine kettle of fish + - a loose cannon + - a penny saved is a penny earned + - a tough row to hoe + - a word to the wise + - ace in the hole + - acid test + - add insult to injury + - against all odds + - air your dirty laundry + - alas and alack + - all fun and games + - all hell broke loose + - all in a day's work + - all talk, no action + - all thumbs + - all your eggs in one basket + - all's fair in love and war + - all's well that ends well + - almighty dollar + - American as apple pie + - an axe to grind + - another day, another dollar + - armed to the teeth + - as luck would have it + - as old as time + - as the crow flies + - at loose ends + - at my wits end + - at the end of the day + - avoid like the plague + - babe in the woods + - back against the wall + - back in the saddle + - back to square one + - back to the drawing board + - bad to the bone + - badge of honor + - bald faced liar + - bald-faced lie + - ballpark figure + - banging your head against a brick wall + - baptism by fire + - barking up the wrong tree + - bat out of hell + - be all and end all + - beat a dead horse + - beat around the bush + - been there, done that + - beggars can't be choosers + - behind the eight ball + - bend over backwards + - benefit of the doubt + - bent out of shape + - best thing since sliced bread + - bet your bottom dollar + - better half + - better late than never + - better mousetrap + - better safe than sorry + - between a rock and a hard place + - between a rock and a hard place + - between Scylla and Charybdis + - between the devil and the deep blue see + - betwixt and between + - beyond the pale + - bide your time + - big as life + - big cheese + - big fish in a small pond + - big man on campus + - bigger they are the harder they fall + - bird in the hand + - bird's eye view + - birds and the bees + - birds of a feather flock together + - bit the hand that feeds you + - bite the bullet + - bite the dust + - bitten off more than he can chew + - black as coal + - black as pitch + - black as the ace of spades + - blast from the past + - bleeding heart + - blessing in disguise + - blind ambition + - blind as a bat + - blind leading the blind + - blissful ignorance + - blood is thicker than water + - blood sweat and tears + - blow a fuse + - blow off steam + - blow your own horn + - blushing bride + - boils down to + - bolt from the blue + - bone to pick + - bored stiff + - bored to tears + - bottomless pit + - boys will be boys + - bright and early + - brings home the bacon + - broad across the beam + - broken record + - brought back to reality + - bulk large + - bull by the horns + - bull in a china shop + - burn the midnight oil + - burning question + - burning the candle at both ends + - burst your bubble + - bury the hatchet + - busy as a bee + - but that's another story + - by hook or by crook + - call a spade a spade + - called onto the carpet + - calm before the storm + - can of worms + - can't cut the mustard + - can't hold a candle to + - case of mistaken identity + - cast aspersions + - cat got your tongue + - cat's meow + - caught in the crossfire + - caught red-handed + - chase a red herring + - checkered past + - chomping at the bit + - cleanliness is next to godliness + - clear as a bell + - clear as mud + - close to the vest + - cock and bull story + - cold shoulder + - come hell or high water + - comparing apples and oranges + - compleat + - conspicuous by its absence + - cool as a cucumber + - cool, calm, and collected + - cost a king's ransom + - count your blessings + - crack of dawn + - crash course + - creature comforts + - cross that bridge when you come to it + - crushing blow + - cry like a baby + - cry me a river + - cry over spilt milk + - crystal clear + - crystal clear + - curiosity killed the cat + - cut and dried + - cut through the red tape + - cut to the chase + - cute as a bugs ear + - cute as a button + - cute as a puppy + - cuts to the quick + - cutting edge + - dark before the dawn + - day in, day out + - dead as a doornail + - decision-making process + - devil is in the details + - dime a dozen + - divide and conquer + - dog and pony show + - dog days + - dog eat dog + - dog tired + - don't burn your bridges + - don't count your chickens + - don't look a gift horse in the mouth + - don't rock the boat + - don't step on anyone's toes + - don't take any wooden nickels + - down and out + - down at the heels + - down in the dumps + - down the hatch + - down to earth + - draw the line + - dressed to kill + - dressed to the nines + - drives me up the wall + - dubious distinction + - dull as dishwater + - duly authorized + - dyed in the wool + - eagle eye + - ear to the ground + - early bird catches the worm + - easier said than done + - easy as pie + - eat your heart out + - eat your words + - eleventh hour + - even the playing field + - every dog has its day + - every fiber of my being + - everything but the kitchen sink + - eye for an eye + - eyes peeled + - face the music + - facts of life + - fair weather friend + - fall by the wayside + - fan the flames + - far be it from me + - fast and loose + - feast or famine + - feather your nest + - feathered friends + - few and far between + - fifteen minutes of fame + - fills the bill + - filthy vermin + - fine kettle of fish + - first and foremost + - fish out of water + - fishing for a compliment + - fit as a fiddle + - fit the bill + - fit to be tied + - flash in the pan + - flat as a pancake + - flip your lid + - flog a dead horse + - fly by night + - fly the coop + - follow your heart + - for all intents and purposes + - for free + - for the birds + - for what it's worth + - force of nature + - force to be reckoned with + - forgive and forget + - fox in the henhouse + - free and easy + - free as a bird + - fresh as a daisy + - full steam ahead + - fun in the sun + - garbage in, garbage out + - gentle as a lamb + - get a kick out of + - get a leg up + - get down and dirty + - get the lead out + - get to the bottom of + - get with the program + - get your feet wet + - gets my goat + - gilding the lily + - gilding the lily + - give and take + - go against the grain + - go at it tooth and nail + - go for broke + - go him one better + - go the extra mile + - go with the flow + - goes without saying + - good as gold + - good deed for the day + - good things come to those who wait + - good time was had by all + - good times were had by all + - greased lightning + - greek to me + - green thumb + - green-eyed monster + - grist for the mill + - growing like a weed + - hair of the dog + - hand to mouth + - happy as a clam + - happy as a lark + - hasn't a clue + - have a nice day + - have a short fuse + - have high hopes + - have the last laugh + - haven't got a row to hoe + - he's got his hands full + - head honcho + - head over heels + - hear a pin drop + - heard it through the grapevine + - heart's content + - heavy as lead + - hem and haw + - high and dry + - high and mighty + - high as a kite + - his own worst enemy + - his work cut out for him + - hit paydirt + - hither and yon + - Hobson's choice + - hold your head up high + - hold your horses + - hold your own + - hold your tongue + - honest as the day is long + - horns of a dilemma + - horns of a dilemma + - horse of a different color + - hot under the collar + - hour of need + - I beg to differ + - icing on the cake + - if the shoe fits + - if the shoe were on the other foot + - if you catch my drift + - in a jam + - in a jiffy + - in a nutshell + - in a pig's eye + - in a pinch + - in a word + - in hot water + - in light of + - in the final analysis + - in the gutter + - in the last analysis + - in the nick of time + - in the thick of it + - in your dreams + - innocent bystander + - it ain't over till the fat lady sings + - it goes without saying + - it takes all kinds + - it takes one to know one + - it's a small world + - it's not what you know, it's who you know + - it's only a matter of time + - ivory tower + - Jack of all trades + - jockey for position + - jog your memory + - joined at the hip + - judge a book by its cover + - jump down your throat + - jump in with both feet + - jump on the bandwagon + - jump the gun + - jump to conclusions + - just a hop, skip, and a jump + - just the ticket + - justice is blind + - keep a stiff upper lip + - keep an eye on + - keep it simple, stupid + - keep the home fires burning + - keep up with the Joneses + - keep your chin up + - keep your fingers crossed + - kick the bucket + - kick up your heels + - kick your feet up + - kid in a candy store + - kill two birds with one stone + - kiss of death + - knock it out of the park + - knock on wood + - knock your socks off + - know him from Adam + - know the ropes + - know the score + - knuckle down + - knuckle sandwich + - knuckle under + - labor of love + - ladder of success + - land on your feet + - lap of luxury + - last but not least + - last but not least + - last hurrah + - last-ditch effort + - law of the jungle + - law of the land + - lay down the law + - leaps and bounds + - let sleeping dogs lie + - let the cat out of the bag + - let the good times roll + - let your hair down + - let's talk turkey + - letter perfect + - lick your wounds + - lies like a rug + - life's a bitch + - life's a grind + - light at the end of the tunnel + - lighter than a feather + - lighter than air + - like clockwork + - like father like son + - like taking candy from a baby + - like there's no tomorrow + - lion's share + - live and learn + - live and let live + - long and short of it + - long lost love + - look before you leap + - look down your nose + - look what the cat dragged in + - looking a gift horse in the mouth + - looks like death warmed over + - loose cannon + - lose your head + - lose your temper + - loud as a horn + - lounge lizard + - loved and lost + - low man on the totem pole + - luck of the draw + - luck of the Irish + - make a mockery of + - make hay while the sun shines + - make money hand over fist + - make my day + - make the best of a bad situation + - make the best of it + - make your blood boil + - male chauvinism + - man of few words + - man's best friend + - mark my words + - meaningful dialogue + - missed the boat on that one + - moment in the sun + - moment of glory + - moment of truth + - moment of truth + - money to burn + - more in sorrow than in anger + - more power to you + - more sinned against than sinning + - more than one way to skin a cat + - movers and shakers + - moving experience + - my better half + - naked as a jaybird + - naked truth + - neat as a pin + - needle in a haystack + - needless to say + - neither here nor there + - never look back + - never say never + - nip and tuck + - nip in the bud + - nip it in the bud + - no guts, no glory + - no love lost + - no pain, no gain + - no skin off my back + - no stone unturned + - no time like the present + - no use crying over spilled milk + - nose to the grindstone + - not a hope in hell + - not a minute's peace + - not in my backyard + - not playing with a full deck + - not the end of the world + - not written in stone + - nothing to sneeze at + - nothing ventured nothing gained + - now we're cooking + - off the top of my head + - off the wagon + - off the wall + - old hat + - olden days + - older and wiser + - older than dirt + - older than Methuselah + - on a roll + - on cloud nine + - on pins and needles + - on the bandwagon + - on the money + - on the nose + - on the rocks + - on the same page + - on the spot + - on the tip of my tongue + - on the wagon + - on thin ice + - once bitten, twice shy + - one bad apple doesn't spoil the bushel + - one born every minute + - one brick short + - one foot in the grave + - one in a million + - one red cent + - only game in town + - open a can of worms + - open and shut case + - open the flood gates + - opportunity doesn't knock twice + - out of pocket + - out of sight, out of mind + - out of the frying pan into the fire + - out of the woods + - out on a limb + - over a barrel + - over the hump + - pain and suffering + - pain in the + - panic button + - par for the course + - part and parcel + - party pooper + - pass the buck + - patience is a virtue + - pay through the nose + - penny pincher + - perfect storm + - pig in a poke + - pile it on + - pillar of the community + - pin your hopes on + - pitter patter of little feet + - plain as day + - plain as the nose on your face + - play by the rules + - play your cards right + - playing the field + - playing with fire + - pleased as punch + - plenty of fish in the sea + - point with pride + - poor as a church mouse + - pot calling the kettle black + - presidential timber + - pretty as a picture + - pull a fast one + - pull your punches + - pulled no punches + - pulling your leg + - pure as the driven snow + - put it in a nutshell + - put one over on you + - put the cart before the horse + - put the pedal to the metal + - put your best foot forward + - put your foot down + - quantum jump + - quantum leap + - quick as a bunny + - quick as a lick + - quick as a wink + - quick as lightning + - quiet as a dormouse + - rags to riches + - raining buckets + - raining cats and dogs + - rank and file + - rat race + - reap what you sow + - red as a beet + - red herring + - redound to one's credit + - redound to the benefit of + - reinvent the wheel + - rich and famous + - rings a bell + - ripe old age + - ripped me off + - rise and shine + - road to hell is paved with good intentions + - rob Peter to pay Paul + - roll over in the grave + - rub the wrong way + - ruled the roost + - running in circles + - sad but true + - sadder but wiser + - salt of the earth + - scared stiff + - scared to death + - sea change + - sealed with a kiss + - second to none + - see eye to eye + - seen the light + - seize the day + - set the record straight + - set the world on fire + - set your teeth on edge + - sharp as a tack + - shirked his duties + - shoot for the moon + - shoot the breeze + - shot in the dark + - shoulder to the wheel + - sick as a dog + - sigh of relief + - signed, sealed, and delivered + - sink or swim + - six of one, half a dozen of another + - six of one, half a dozen of the other + - skating on thin ice + - slept like a log + - slinging mud + - slippery as an eel + - slow as molasses + - smart as a whip + - smooth as a baby's bottom + - sneaking suspicion + - snug as a bug in a rug + - sow wild oats + - spare the rod, spoil the child + - speak of the devil + - spilled the beans + - spinning your wheels + - spitting image of + - spoke with relish + - spread like wildfire + - spring to life + - squeaky wheel gets the grease + - stands out like a sore thumb + - start from scratch + - stick in the mud + - still waters run deep + - stitch in time + - stop and smell the roses + - straight as an arrow + - straw that broke the camel's back + - stretched to the breaking point + - strong as an ox + - stubborn as a mule + - stuff that dreams are made of + - stuffed shirt + - sweating blood + - sweating bullets + - take a load off + - take one for the team + - take the bait + - take the bull by the horns + - take the plunge + - takes one to know one + - takes two to tango + - than you can shake a stick at + - the cream of the crop + - the cream rises to the top + - the more the merrier + - the real deal + - the real McCoy + - the red carpet treatment + - the same old story + - the straw that broke the camel's back + - there is no accounting for taste + - thick as a brick + - thick as thieves + - thick as thieves + - thin as a rail + - think outside of the box + - thinking outside the box + - third time's the charm + - this day and age + - this hurts me worse than it hurts you + - this point in time + - thought leaders? + - three sheets to the wind + - through thick and thin + - throw in the towel + - throw the baby out with the bathwater + - tie one on + - tighter than a drum + - time and time again + - time is of the essence + - tip of the iceberg + - tired but happy + - to coin a phrase + - to each his own + - to make a long story short + - to the best of my knowledge + - toe the line + - tongue in cheek + - too good to be true + - too hot to handle + - too numerous to mention + - touch with a ten foot pole + - tough as nails + - trial and error + - trials and tribulations + - tried and true + - trip down memory lane + - twist of fate + - two cents worth + - two peas in a pod + - ugly as sin + - under the counter + - under the gun + - under the same roof + - under the weather + - until the cows come home + - unvarnished truth + - up the creek + - uphill battle + - upper crust + - upset the applecart + - vain attempt + - vain effort + - vanquish the enemy + - various and sundry + - vested interest + - viable alternative + - waiting for the other shoe to drop + - wakeup call + - warm welcome + - watch your p's and q's + - watch your tongue + - watching the clock + - water under the bridge + - wax eloquent + - wax poetic + - we've got a situation here + - weather the storm + - weed them out + - week of Sundays + - went belly up + - wet behind the ears + - what goes around comes around + - what you see is what you get + - when it rains, it pours + - when push comes to shove + - when the cat's away + - when the going gets tough, the tough get going + - whet (?:the|your) appetite + - white as a sheet + - whole ball of wax + - whole hog + - whole nine yards + - wild goose chase + - will wonders never cease? + - wisdom of the ages + - wise as an owl + - wolf at the door + - wool pulled over our eyes + - words fail me + - work like a dog + - world weary + - worst nightmare + - worth its weight in gold + - writ large + - wrong side of the bed + - yanking your chain + - yappy as a dog + - years young + - you are what you eat + - you can run but you can't hide + - you only live once + - you're the boss + - young and foolish + - young and vibrant diff --git a/.config/.vendor/vale/styles/proselint/CorporateSpeak.yml b/.config/.vendor/vale/styles/proselint/CorporateSpeak.yml new file mode 100644 index 0000000..4de8ee3 --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/CorporateSpeak.yml @@ -0,0 +1,30 @@ +extends: existence +message: "'%s' is corporate speak." +ignorecase: true +level: error +tokens: + - at the end of the day + - back to the drawing board + - hit the ground running + - get the ball rolling + - low-hanging fruit + - thrown under the bus + - think outside the box + - let's touch base + - get my manager's blessing + - it's on my radar + - ping me + - i don't have the bandwidth + - no brainer + - par for the course + - bang for your buck + - synergy + - move the goal post + - apples to apples + - win-win + - circle back around + - all hands on deck + - take this offline + - drill-down + - elephant in the room + - on my plate diff --git a/.config/.vendor/vale/styles/proselint/Currency.yml b/.config/.vendor/vale/styles/proselint/Currency.yml new file mode 100644 index 0000000..ebd4b7d --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/Currency.yml @@ -0,0 +1,5 @@ +extends: existence +message: "Incorrect use of symbols in '%s'." +ignorecase: true +raw: + - \$[\d]* ?(?:dollars|usd|us dollars) diff --git a/.config/.vendor/vale/styles/proselint/Cursing.yml b/.config/.vendor/vale/styles/proselint/Cursing.yml new file mode 100644 index 0000000..e65070a --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/Cursing.yml @@ -0,0 +1,15 @@ +extends: existence +message: "Consider replacing '%s'." +level: error +ignorecase: true +tokens: + - shit + - piss + - fuck + - cunt + - cocksucker + - motherfucker + - tits + - fart + - turd + - twat diff --git a/.config/.vendor/vale/styles/proselint/DateCase.yml b/.config/.vendor/vale/styles/proselint/DateCase.yml new file mode 100644 index 0000000..9aa1bd9 --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/DateCase.yml @@ -0,0 +1,7 @@ +extends: existence +message: With lowercase letters, the periods are standard. +ignorecase: false +level: error +nonword: true +tokens: + - '\d{1,2} ?[ap]m\b' diff --git a/.config/.vendor/vale/styles/proselint/DateMidnight.yml b/.config/.vendor/vale/styles/proselint/DateMidnight.yml new file mode 100644 index 0000000..0130e1a --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/DateMidnight.yml @@ -0,0 +1,7 @@ +extends: existence +message: "Use 'midnight' or 'noon'." +ignorecase: true +level: error +nonword: true +tokens: + - '12 ?[ap]\.?m\.?' diff --git a/.config/.vendor/vale/styles/proselint/DateRedundancy.yml b/.config/.vendor/vale/styles/proselint/DateRedundancy.yml new file mode 100644 index 0000000..b1f653e --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/DateRedundancy.yml @@ -0,0 +1,10 @@ +extends: existence +message: "'a.m.' is always morning; 'p.m.' is always night." +ignorecase: true +level: error +nonword: true +tokens: + - '\d{1,2} ?a\.?m\.? in the morning' + - '\d{1,2} ?p\.?m\.? in the evening' + - '\d{1,2} ?p\.?m\.? at night' + - '\d{1,2} ?p\.?m\.? in the afternoon' diff --git a/.config/.vendor/vale/styles/proselint/DateSpacing.yml b/.config/.vendor/vale/styles/proselint/DateSpacing.yml new file mode 100644 index 0000000..b7a2fd3 --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/DateSpacing.yml @@ -0,0 +1,7 @@ +extends: existence +message: "It's standard to put a space before '%s'" +ignorecase: true +level: error +nonword: true +tokens: + - '\d{1,2}[ap]\.?m\.?' diff --git a/.config/.vendor/vale/styles/proselint/DenizenLabels.yml b/.config/.vendor/vale/styles/proselint/DenizenLabels.yml new file mode 100644 index 0000000..bc3dd8a --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/DenizenLabels.yml @@ -0,0 +1,52 @@ +extends: substitution +message: Did you mean '%s'? +ignorecase: false +action: + name: replace +swap: + (?:Afrikaaner|Afrikander): Afrikaner + (?:Hong Kongite|Hong Kongian): Hong Konger + (?:Indianan|Indianian): Hoosier + (?:Michiganite|Michiganian): Michigander + (?:New Hampshireite|New Hampshireman): New Hampshirite + (?:Newcastlite|Newcastleite): Novocastrian + (?:Providencian|Providencer): Providentian + (?:Trentian|Trentonian): Tridentine + (?:Warsawer|Warsawian): Varsovian + (?:Wolverhamptonite|Wolverhamptonian): Wulfrunian + Alabaman: Alabamian + Albuquerquian: Albuquerquean + Anchoragite: Anchorageite + Arizonian: Arizonan + Arkansawyer: Arkansan + Belarusan: Belarusian + Cayman Islander: Caymanian + Coloradoan: Coloradan + Connecticuter: Nutmegger + Fairbanksian: Fairbanksan + Fort Worther: Fort Worthian + Grenadian: Grenadan + Halifaxer: Haligonian + Hartlepoolian: Hartlepudlian + Illinoisian: Illinoisan + Iowegian: Iowan + Leedsian: Leodenisian + Liverpoolian: Liverpudlian + Los Angelean: Angeleno + Manchesterian: Mancunian + Minneapolisian: Minneapolitan + Missouran: Missourian + Monacan: Monegasque + Neopolitan: Neapolitan + New Jerseyite: New Jerseyan + New Orleansian: New Orleanian + Oklahoma Citian: Oklahoma Cityan + Oklahomian: Oklahoman + Saudi Arabian: Saudi + Seattlite: Seattleite + Surinamer: Surinamese + Tallahassean: Tallahasseean + Tennesseean: Tennessean + Trois-Rivièrester: Trifluvian + Utahan: Utahn + Valladolidian: Vallisoletano diff --git a/.config/.vendor/vale/styles/proselint/Diacritical.yml b/.config/.vendor/vale/styles/proselint/Diacritical.yml new file mode 100644 index 0000000..2416cf2 --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/Diacritical.yml @@ -0,0 +1,95 @@ +extends: substitution +message: Consider using '%s' instead of '%s'. +ignorecase: true +level: error +action: + name: replace +swap: + beau ideal: beau idéal + boutonniere: boutonnière + bric-a-brac: bric-à-brac + cafe: café + cause celebre: cause célèbre + chevre: chèvre + cliche: cliché + consomme: consommé + coup de grace: coup de grâce + crudites: crudités + creme brulee: crème brûlée + creme de menthe: crème de menthe + creme fraice: crème fraîche + creme fresh: crème fraîche + crepe: crêpe + debutante: débutante + decor: décor + deja vu: déjà vu + denouement: dénouement + facade: façade + fiance: fiancé + fiancee: fiancée + flambe: flambé + garcon: garçon + lycee: lycée + maitre d: maître d + menage a trois: ménage à trois + negligee: négligée + protege: protégé + protegee: protégée + puree: purée + my resume: my résumé + your resume: your résumé + his resume: his résumé + her resume: her résumé + a resume: a résumé + the resume: the résumé + risque: risqué + roue: roué + soiree: soirée + souffle: soufflé + soupcon: soupçon + touche: touché + tete-a-tete: tête-à-tête + voila: voilà + a la carte: à la carte + a la mode: à la mode + emigre: émigré + + # Spanish loanwords + El Nino: El Niño + jalapeno: jalapeño + La Nina: La Niña + pina colada: piña colada + senor: señor + senora: señora + senorita: señorita + + # Portuguese loanwords + acai: açaí + + # German loanwords + doppelganger: doppelgänger + Fuhrer: Führer + Gewurztraminer: Gewürztraminer + vis-a-vis: vis-à-vis + Ubermensch: Übermensch + + # Swedish loanwords + filmjolk: filmjölk + smorgasbord: smörgåsbord + + # Names, places, and companies + Beyonce: Beyoncé + Bronte: Brontë + Champs-Elysees: Champs-Élysées + Citroen: Citroën + Curacao: Curaçao + Lowenbrau: Löwenbräu + Monegasque: Monégasque + Motley Crue: Mötley Crüe + Nescafe: Nescafé + Queensryche: Queensrÿche + Quebec: Québec + Quebecois: Québécois + Angstrom: Ångström + angstrom: ångström + Skoda: Škoda diff --git a/.config/.vendor/vale/styles/proselint/GenderBias.yml b/.config/.vendor/vale/styles/proselint/GenderBias.yml new file mode 100644 index 0000000..d98d3cf --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/GenderBias.yml @@ -0,0 +1,45 @@ +extends: substitution +message: Consider using '%s' instead of '%s'. +ignorecase: true +level: error +action: + name: replace +swap: + (?:alumnae|alumni): graduates + (?:alumna|alumnus): graduate + air(?:m[ae]n|wom[ae]n): pilot(s) + anchor(?:m[ae]n|wom[ae]n): anchor(s) + authoress: author + camera(?:m[ae]n|wom[ae]n): camera operator(s) + chair(?:m[ae]n|wom[ae]n): chair(s) + congress(?:m[ae]n|wom[ae]n): member(s) of congress + door(?:m[ae]|wom[ae]n): concierge(s) + draft(?:m[ae]n|wom[ae]n): drafter(s) + fire(?:m[ae]n|wom[ae]n): firefighter(s) + fisher(?:m[ae]n|wom[ae]n): fisher(s) + fresh(?:m[ae]n|wom[ae]n): first-year student(s) + garbage(?:m[ae]n|wom[ae]n): waste collector(s) + lady lawyer: lawyer + ladylike: courteous + landlord: building manager + mail(?:m[ae]n|wom[ae]n): mail carriers + man and wife: husband and wife + man enough: strong enough + mankind: human kind + manmade: manufactured + men and girls: men and women + middle(?:m[ae]n|wom[ae]n): intermediary + news(?:m[ae]n|wom[ae]n): journalist(s) + ombuds(?:man|woman): ombuds + oneupmanship: upstaging + poetess: poet + police(?:m[ae]n|wom[ae]n): police officer(s) + repair(?:m[ae]n|wom[ae]n): technician(s) + sales(?:m[ae]n|wom[ae]n): salesperson or sales people + service(?:m[ae]n|wom[ae]n): soldier(s) + steward(?:ess)?: flight attendant + tribes(?:m[ae]n|wom[ae]n): tribe member(s) + waitress: waiter + woman doctor: doctor + woman scientist[s]?: scientist(s) + work(?:m[ae]n|wom[ae]n): worker(s) diff --git a/.config/.vendor/vale/styles/proselint/GroupTerms.yml b/.config/.vendor/vale/styles/proselint/GroupTerms.yml new file mode 100644 index 0000000..7a59fa4 --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/GroupTerms.yml @@ -0,0 +1,39 @@ +extends: substitution +message: Consider using '%s' instead of '%s'. +ignorecase: true +action: + name: replace +swap: + (?:bunch|group|pack|flock) of chickens: brood of chickens + (?:bunch|group|pack|flock) of crows: murder of crows + (?:bunch|group|pack|flock) of hawks: cast of hawks + (?:bunch|group|pack|flock) of parrots: pandemonium of parrots + (?:bunch|group|pack|flock) of peacocks: muster of peacocks + (?:bunch|group|pack|flock) of penguins: muster of penguins + (?:bunch|group|pack|flock) of sparrows: host of sparrows + (?:bunch|group|pack|flock) of turkeys: rafter of turkeys + (?:bunch|group|pack|flock) of woodpeckers: descent of woodpeckers + (?:bunch|group|pack|herd) of apes: shrewdness of apes + (?:bunch|group|pack|herd) of baboons: troop of baboons + (?:bunch|group|pack|herd) of badgers: cete of badgers + (?:bunch|group|pack|herd) of bears: sloth of bears + (?:bunch|group|pack|herd) of bullfinches: bellowing of bullfinches + (?:bunch|group|pack|herd) of bullocks: drove of bullocks + (?:bunch|group|pack|herd) of caterpillars: army of caterpillars + (?:bunch|group|pack|herd) of cats: clowder of cats + (?:bunch|group|pack|herd) of colts: rag of colts + (?:bunch|group|pack|herd) of crocodiles: bask of crocodiles + (?:bunch|group|pack|herd) of dolphins: school of dolphins + (?:bunch|group|pack|herd) of foxes: skulk of foxes + (?:bunch|group|pack|herd) of gorillas: band of gorillas + (?:bunch|group|pack|herd) of hippopotami: bloat of hippopotami + (?:bunch|group|pack|herd) of horses: drove of horses + (?:bunch|group|pack|herd) of jellyfish: fluther of jellyfish + (?:bunch|group|pack|herd) of kangeroos: mob of kangeroos + (?:bunch|group|pack|herd) of monkeys: troop of monkeys + (?:bunch|group|pack|herd) of oxen: yoke of oxen + (?:bunch|group|pack|herd) of rhinoceros: crash of rhinoceros + (?:bunch|group|pack|herd) of wild boar: sounder of wild boar + (?:bunch|group|pack|herd) of wild pigs: drift of wild pigs + (?:bunch|group|pack|herd) of zebras: zeal of wild pigs + (?:bunch|group|pack|school) of trout: hover of trout diff --git a/.config/.vendor/vale/styles/proselint/Hedging.yml b/.config/.vendor/vale/styles/proselint/Hedging.yml new file mode 100644 index 0000000..a8615f8 --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/Hedging.yml @@ -0,0 +1,8 @@ +extends: existence +message: "'%s' is hedging." +ignorecase: true +level: error +tokens: + - I would argue that + - ', so to speak' + - to a certain degree diff --git a/.config/.vendor/vale/styles/proselint/Hyperbole.yml b/.config/.vendor/vale/styles/proselint/Hyperbole.yml new file mode 100644 index 0000000..0361772 --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/Hyperbole.yml @@ -0,0 +1,6 @@ +extends: existence +message: "'%s' is hyperbolic." +level: error +nonword: true +tokens: + - '[a-z]+[!?]{2,}' diff --git a/.config/.vendor/vale/styles/proselint/Jargon.yml b/.config/.vendor/vale/styles/proselint/Jargon.yml new file mode 100644 index 0000000..2454a9c --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/Jargon.yml @@ -0,0 +1,11 @@ +extends: existence +message: "'%s' is jargon." +ignorecase: true +level: error +tokens: + - in the affirmative + - in the negative + - agendize + - per your order + - per your request + - disincentivize diff --git a/.config/.vendor/vale/styles/proselint/LGBTOffensive.yml b/.config/.vendor/vale/styles/proselint/LGBTOffensive.yml new file mode 100644 index 0000000..eaf5a84 --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/LGBTOffensive.yml @@ -0,0 +1,13 @@ +extends: existence +message: "'%s' is offensive. Remove it or consider the context." +ignorecase: true +tokens: + - fag + - faggot + - dyke + - sodomite + - homosexual agenda + - gay agenda + - transvestite + - homosexual lifestyle + - gay lifestyle diff --git a/.config/.vendor/vale/styles/proselint/LGBTTerms.yml b/.config/.vendor/vale/styles/proselint/LGBTTerms.yml new file mode 100644 index 0000000..efdf268 --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/LGBTTerms.yml @@ -0,0 +1,15 @@ +extends: substitution +message: "Consider using '%s' instead of '%s'." +ignorecase: true +action: + name: replace +swap: + homosexual man: gay man + homosexual men: gay men + homosexual woman: lesbian + homosexual women: lesbians + homosexual people: gay people + homosexual couple: gay couple + sexual preference: sexual orientation + (?:admitted homosexual|avowed homosexual): openly gay + special rights: equal rights diff --git a/.config/.vendor/vale/styles/proselint/Malapropisms.yml b/.config/.vendor/vale/styles/proselint/Malapropisms.yml new file mode 100644 index 0000000..9699778 --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/Malapropisms.yml @@ -0,0 +1,8 @@ +extends: existence +message: "'%s' is a malapropism." +ignorecase: true +level: error +tokens: + - the infinitesimal universe + - a serial experience + - attack my voracity diff --git a/.config/.vendor/vale/styles/proselint/Needless.yml b/.config/.vendor/vale/styles/proselint/Needless.yml new file mode 100644 index 0000000..820ae5c --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/Needless.yml @@ -0,0 +1,358 @@ +extends: substitution +message: Prefer '%s' over '%s' +ignorecase: true +action: + name: replace +swap: + '(?:cell phone|cell-phone)': cellphone + '(?:cliquey|cliquy)': cliquish + '(?:pygmean|pygmaen)': pygmy + '(?:retributional|retributionary)': retributive + '(?:revokable|revokeable)': revocable + abolishment: abolition + accessary: accessory + accreditate: accredit + accruement: accrual + accusee: accused + acquaintanceship: acquaintance + acquitment: acquittal + administrate: administer + administrated: administered + administrating: administering + adulterate: adulterous + advisatory: advisory + advocator: advocate + aggrievance: grievance + allegator: alleger + allusory: allusive + amative: amorous + amortizement: amortization + amphiboly: amphibology + anecdotalist: anecdotist + anilinctus: anilingus + anticipative: anticipatory + antithetic: antithetical + applicative: applicable + applicatory: applicable + applier: applicator + approbative: approbatory + arbitrager: arbitrageur + arsenous: arsenious + ascendance: ascendancy + ascendence: ascendancy + ascendency: ascendancy + auctorial: authorial + averral: averment + barbwire: barbed wire + benefic: beneficent + benignant: benign + bestowment: bestowal + betrothment: betrothal + blamableness: blameworthiness + butt naked: buck naked + camarade: comrade + carta blanca: carte blanche + casualities: casualties + casuality: casualty + catch on fire: catch fire + catholicly: catholically + cease fire: ceasefire + channelize: channel + chaplainship: chaplaincy + chrysalid: chrysalis + chrysalids: chrysalises + cigaret: cigarette + coemployee: coworker + cognitional: cognitive + cohabitate: cohabit + cohabitor: cohabitant + collodium: collodion + collusory: collusive + commemoratory: commemorative + commonty: commonage + communicatory: communicative + compensative: compensatory + complacence: complacency + complicitous: complicit + computate: compute + conciliative: conciliatory + concomitancy: concomitance + condonance: condonation + confirmative: confirmatory + congruency: congruence + connotate: connote + consanguineal: consanguine + conspicuity: conspicuousness + conspiratorialist: conspirator + constitutionist: constitutionalist + contingence: contingency + contributary: contributory + contumacity: contumacy + conversible: convertible + conveyal: conveyance + copartner: partner + copartnership: partnership + corroboratory: corroborative + cotemporaneous: contemporaneous + cotemporary: contemporary + criminate: incriminate + culpatory: inculpatory + cumbrance: encumbrance + cumulate: accumulate + curatory: curative + daredeviltry: daredevilry + deceptious: deceptive + defamative: defamatory + defraudulent: fraudulent + degeneratory: degenerative + delimitate: delimit + delusory: delusive + denouncement: denunciation + depositee: depositary + depreciative: depreciatory + deprival: deprivation + derogative: derogatory + destroyable: destructible + detoxicate: detoxify + detractory: detractive + deviancy: deviance + deviationist: deviant + digamy: deuterogamy + digitalize: digitize + diminishment: diminution + diplomatist: diplomat + disassociate: dissociate + disciplinatory: disciplinary + discriminant: discriminating + disenthrone: dethrone + disintegratory: disintegrative + dismission: dismissal + disorientate: disorient + disorientated: disoriented + disquieten: disquiet + distraite: distrait + divergency: divergence + dividable: divisible + doctrinary: doctrinaire + documental: documentary + domesticize: domesticate + duplicatory: duplicative + duteous: dutiful + educationalist: educationist + educatory: educative + enigmatas: enigmas + enlargen: enlarge + enswathe: swathe + epical: epic + erotism: eroticism + ethician: ethicist + ex officiis: ex officio + exculpative: exculpatory + exigeant: exigent + exigence: exigency + exotism: exoticism + expedience: expediency + expediential: expedient + extensible: extendable + eying: eyeing + fiefdom: fief + flagrance: flagrancy + flatulency: flatulence + fraudful: fraudulent + funebrial: funereal + geographical: geographic + geometrical: geometric + gerry-rigged: jury-rigged + goatherder: goatherd + gustatorial: gustatory + habitude: habit + henceforward: henceforth + hesitance: hesitancy + heterogenous: heterogeneous + hierarchic: hierarchical + hindermost: hindmost + honorand: honoree + hypostasize: hypostatize + hysteric: hysterical + idolatrize: idolize + impanel: empanel + imperviable: impervious + importunacy: importunity + impotency: impotence + imprimatura: imprimatur + improprietous: improper + inalterable: unalterable + incitation: incitement + incommunicative: uncommunicative + inconsistence: inconsistency + incontrollable: uncontrollable + incurment: incurrence + indow: endow + indue: endue + inhibitive: inhibitory + innavigable: unnavigable + innovational: innovative + inquisitional: inquisitorial + insistment: insistence + insolvable: unsolvable + instillment: instillation + instinctual: instinctive + insuror: insurer + insurrectional: insurrectionary + interpretate: interpret + intervenience: intervention + ironical: ironic + jerry-rigged: jury-rigged + judgmatic: judgmental + labyrinthian: labyrinthine + laudative: laudatory + legitimatization: legitimation + legitimatize: legitimize + legitimization: legitimation + lengthways: lengthwise + life-sized: life-size + liquorice: licorice + lithesome: lithe + lollipop: lollypop + loth: loath + lubricous: lubricious + maihem: mayhem + medicinal marijuana: medical marijuana + meliorate: ameliorate + minimalize: minimize + mirk: murk + mirky: murky + misdoubt: doubt + monetarize: monetize + moveable: movable + narcism: narcissism + neglective: neglectful + negligency: negligence + neologizer: neologist + neurologic: neurological + nicknack: knickknack + nictate: nictitate + nonenforceable: unenforceable + normalcy: normality + numbedness: numbness + omittable: omissible + onomatopoetic: onomatopoeic + opinioned: opined + optimum advantage: optimal advantage + orientate: orient + outsized: outsize + oversized: oversize + overthrowal: overthrow + pacificist: pacifist + paederast: pederast + parachronism: anachronism + parti-color: parti-colored + participative: participatory + party-colored: parti-colored + pediatrist: pediatrician + penumbrous: penumbral + perjorative: pejorative + permissory: permissive + permutate: permute + personation: impersonation + pharmaceutic: pharmaceutical + pleuritis: pleurisy + policy holder: policyholder + policyowner: policyholder + politicalize: politicize + precedency: precedence + preceptoral: preceptorial + precipitance: precipitancy + precipitant: precipitate + preclusory: preclusive + precolumbian: pre-Columbian + prefectoral: prefectorial + preponderately: preponderantly + preserval: preservation + preventative: preventive + proconsulship: proconsulate + procreational: procreative + procurance: procurement + propelment: propulsion + propulsory: propulsive + prosecutive: prosecutory + protectory: protective + provocatory: provocative + pruriency: prurience + psychal: psychical + punitory: punitive + quantitate: quantify + questionary: questionnaire + quiescency: quiescence + rabbin: rabbi + reasonability: reasonableness + recidivistic: recidivous + recriminative: recriminatory + recruital: recruitment + recurrency: recurrence + recusance: recusancy + recusation: recusal + recusement: recusal + redemptory: redemptive + referrable: referable + referrible: referable + refutatory: refutative + remitment: remittance + remittal: remission + renouncement: renunciation + renunciable: renounceable + reparatory: reparative + repudiative: repudiatory + requitement: requital + rescindment: rescission + restoral: restoration + reticency: reticence + reviewal: review + revisal: revision + revisional: revisionary + revolute: revolt + saliency: salience + salutiferous: salutary + sensatory: sensory + sessionary: sessional + shareowner: shareholder + sicklily: sickly + signator: signatory + slanderize: slander + societary: societal + sodomist: sodomite + solicitate: solicit + speculatory: speculative + spiritous: spirituous + statutorial: statutory + submergeable: submersible + submittal: submission + subtile: subtle + succuba: succubus + sufficience: sufficiency + suppliant: supplicant + surmisal: surmise + suspendible: suspendable + synthetize: synthesize + systemize: systematize + tactual: tactile + tangental: tangential + tautologous: tautological + tee-shirt: T-shirt + thenceforward: thenceforth + transiency: transience + transposal: transposition + unfrequent: infrequent + unreasonability: unreasonableness + unrevokable: irrevocable + unsubstantial: insubstantial + usurpature: usurpation + variative: variational + vegetive: vegetative + vindicative: vindictive + vituperous: vituperative + vociferant: vociferous + volitive: volitional + wolverene: wolverine + wolvish: wolfish + Zoroastrism: Zoroastrianism diff --git a/.config/.vendor/vale/styles/proselint/Nonwords.yml b/.config/.vendor/vale/styles/proselint/Nonwords.yml new file mode 100644 index 0000000..c6b0e96 --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/Nonwords.yml @@ -0,0 +1,38 @@ +extends: substitution +message: "Consider using '%s' instead of '%s'." +ignorecase: true +level: error +action: + name: replace +swap: + affrontery: effrontery + analyzation: analysis + annoyment: annoyance + confirmant: confirmand + confirmants: confirmands + conversate: converse + crained: craned + discomforture: discomfort|discomfiture + dispersement: disbursement|dispersal + doubtlessly: doubtless|undoubtedly + forebearance: forbearance + improprietous: improper + inclimate: inclement + inimicable: inimical + irregardless: regardless + minimalize: minimize + minimalized: minimized + minimalizes: minimizes + minimalizing: minimizing + optimalize: optimize + paralyzation: paralysis + pettifogger: pettifog + proprietous: proper + relative inexpense: relatively low price|affordability + seldomly: seldom + thusly: thus + uncategorically: categorically + undoubtably: undoubtedly|indubitably + unequivocable: unequivocal + unmercilessly: mercilessly + unrelentlessly: unrelentingly|relentlessly diff --git a/.config/.vendor/vale/styles/proselint/Oxymorons.yml b/.config/.vendor/vale/styles/proselint/Oxymorons.yml new file mode 100644 index 0000000..25fd2aa --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/Oxymorons.yml @@ -0,0 +1,22 @@ +extends: existence +message: "'%s' is an oxymoron." +ignorecase: true +level: error +tokens: + - amateur expert + - increasingly less + - advancing backwards + - alludes explicitly to + - explicitly alludes to + - totally obsolescent + - completely obsolescent + - generally always + - usually always + - increasingly less + - build down + - conspicuous absence + - exact estimate + - found missing + - intense apathy + - mandatory choice + - organized mess diff --git a/.config/.vendor/vale/styles/proselint/P-Value.yml b/.config/.vendor/vale/styles/proselint/P-Value.yml new file mode 100644 index 0000000..8230938 --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/P-Value.yml @@ -0,0 +1,6 @@ +extends: existence +message: "You should use more decimal places, unless '%s' is really true." +ignorecase: true +level: suggestion +tokens: + - 'p = 0\.0{2,4}' diff --git a/.config/.vendor/vale/styles/proselint/RASSyndrome.yml b/.config/.vendor/vale/styles/proselint/RASSyndrome.yml new file mode 100644 index 0000000..deae9c7 --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/RASSyndrome.yml @@ -0,0 +1,30 @@ +extends: existence +message: "'%s' is redundant." +level: error +action: + name: edit + params: + - split + - ' ' + - '0' +tokens: + - ABM missile + - ACT test + - ABM missiles + - ABS braking system + - ATM machine + - CD disc + - CPI Index + - GPS system + - GUI interface + - HIV virus + - ISBN number + - LCD display + - PDF format + - PIN number + - RAS syndrome + - RIP in peace + - please RSVP + - SALT talks + - SAT test + - UPC codes diff --git a/.config/.vendor/vale/styles/proselint/README.md b/.config/.vendor/vale/styles/proselint/README.md new file mode 100644 index 0000000..4020768 --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/README.md @@ -0,0 +1,12 @@ +Copyright © 2014–2015, Jordan Suchow, Michael Pacer, and Lara A. Ross +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/.config/.vendor/vale/styles/proselint/Skunked.yml b/.config/.vendor/vale/styles/proselint/Skunked.yml new file mode 100644 index 0000000..96a1f69 --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/Skunked.yml @@ -0,0 +1,13 @@ +extends: existence +message: "'%s' is a bit of a skunked term — impossible to use without issue." +ignorecase: true +level: error +tokens: + - bona fides + - deceptively + - decimate + - effete + - fulsome + - hopefully + - impassionate + - Thankfully diff --git a/.config/.vendor/vale/styles/proselint/Spelling.yml b/.config/.vendor/vale/styles/proselint/Spelling.yml new file mode 100644 index 0000000..d3c9be7 --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/Spelling.yml @@ -0,0 +1,17 @@ +extends: consistency +message: "Inconsistent spelling of '%s'." +level: error +ignorecase: true +either: + advisor: adviser + centre: center + colour: color + emphasise: emphasize + finalise: finalize + focussed: focused + labour: labor + learnt: learned + organise: organize + organised: organized + organising: organizing + recognise: recognize diff --git a/.config/.vendor/vale/styles/proselint/Typography.yml b/.config/.vendor/vale/styles/proselint/Typography.yml new file mode 100644 index 0000000..60283eb --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/Typography.yml @@ -0,0 +1,11 @@ +extends: substitution +message: Consider using the '%s' symbol instead of '%s'. +level: error +nonword: true +swap: + '\.\.\.': … + '\([cC]\)': © + '\(TM\)': ™ + '\(tm\)': ™ + '\([rR]\)': ® + '[0-9]+ ?x ?[0-9]+': × diff --git a/.config/.vendor/vale/styles/proselint/Uncomparables.yml b/.config/.vendor/vale/styles/proselint/Uncomparables.yml new file mode 100644 index 0000000..9b96f42 --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/Uncomparables.yml @@ -0,0 +1,50 @@ +extends: existence +message: "'%s' is not comparable" +ignorecase: true +level: error +action: + name: edit + params: + - split + - ' ' + - '1' +raw: + - \b(?:absolutely|most|more|less|least|very|quite|largely|extremely|increasingly|kind of|mildy|hardly|greatly|sort of)\b\s* +tokens: + - absolute + - adequate + - complete + - correct + - certain + - devoid + - entire + - 'false' + - fatal + - favorite + - final + - ideal + - impossible + - inevitable + - infinite + - irrevocable + - main + - manifest + - only + - paramount + - perfect + - perpetual + - possible + - preferable + - principal + - singular + - stationary + - sufficient + - 'true' + - unanimous + - unavoidable + - unbroken + - uniform + - unique + - universal + - void + - whole diff --git a/.config/.vendor/vale/styles/proselint/Very.yml b/.config/.vendor/vale/styles/proselint/Very.yml new file mode 100644 index 0000000..e4077f7 --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/Very.yml @@ -0,0 +1,6 @@ +extends: existence +message: "Remove '%s'." +ignorecase: true +level: error +tokens: + - very diff --git a/.config/.vendor/vale/styles/proselint/meta.json b/.config/.vendor/vale/styles/proselint/meta.json new file mode 100644 index 0000000..e3c6580 --- /dev/null +++ b/.config/.vendor/vale/styles/proselint/meta.json @@ -0,0 +1,17 @@ +{ + "author": "jdkato", + "description": "A Vale-compatible implementation of the proselint linter.", + "email": "support@errata.ai", + "lang": "en", + "url": "https://github.com/errata-ai/proselint/releases/latest/download/proselint.zip", + "feed": "https://github.com/errata-ai/proselint/releases.atom", + "issues": "https://github.com/errata-ai/proselint/issues/new", + "license": "BSD-3-Clause", + "name": "proselint", + "sources": [ + "https://github.com/amperser/proselint" + ], + "vale_version": ">=1.0.0", + "coverage": 0.0, + "version": "0.1.0" +} diff --git a/.config/.vendor/vale/styles/write-good/Cliches.yml b/.config/.vendor/vale/styles/write-good/Cliches.yml new file mode 100644 index 0000000..c953143 --- /dev/null +++ b/.config/.vendor/vale/styles/write-good/Cliches.yml @@ -0,0 +1,702 @@ +extends: existence +message: "Try to avoid using clichés like '%s'." +ignorecase: true +level: warning +tokens: + - a chip off the old block + - a clean slate + - a dark and stormy night + - a far cry + - a fine kettle of fish + - a loose cannon + - a penny saved is a penny earned + - a tough row to hoe + - a word to the wise + - ace in the hole + - acid test + - add insult to injury + - against all odds + - air your dirty laundry + - all fun and games + - all in a day's work + - all talk, no action + - all thumbs + - all your eggs in one basket + - all's fair in love and war + - all's well that ends well + - almighty dollar + - American as apple pie + - an axe to grind + - another day, another dollar + - armed to the teeth + - as luck would have it + - as old as time + - as the crow flies + - at loose ends + - at my wits end + - avoid like the plague + - babe in the woods + - back against the wall + - back in the saddle + - back to square one + - back to the drawing board + - bad to the bone + - badge of honor + - bald faced liar + - ballpark figure + - banging your head against a brick wall + - baptism by fire + - barking up the wrong tree + - bat out of hell + - be all and end all + - beat a dead horse + - beat around the bush + - been there, done that + - beggars can't be choosers + - behind the eight ball + - bend over backwards + - benefit of the doubt + - bent out of shape + - best thing since sliced bread + - bet your bottom dollar + - better half + - better late than never + - better mousetrap + - better safe than sorry + - between a rock and a hard place + - beyond the pale + - bide your time + - big as life + - big cheese + - big fish in a small pond + - big man on campus + - bigger they are the harder they fall + - bird in the hand + - bird's eye view + - birds and the bees + - birds of a feather flock together + - bit the hand that feeds you + - bite the bullet + - bite the dust + - bitten off more than he can chew + - black as coal + - black as pitch + - black as the ace of spades + - blast from the past + - bleeding heart + - blessing in disguise + - blind ambition + - blind as a bat + - blind leading the blind + - blood is thicker than water + - blood sweat and tears + - blow off steam + - blow your own horn + - blushing bride + - boils down to + - bolt from the blue + - bone to pick + - bored stiff + - bored to tears + - bottomless pit + - boys will be boys + - bright and early + - brings home the bacon + - broad across the beam + - broken record + - brought back to reality + - bull by the horns + - bull in a china shop + - burn the midnight oil + - burning question + - burning the candle at both ends + - burst your bubble + - bury the hatchet + - busy as a bee + - by hook or by crook + - call a spade a spade + - called onto the carpet + - calm before the storm + - can of worms + - can't cut the mustard + - can't hold a candle to + - case of mistaken identity + - cat got your tongue + - cat's meow + - caught in the crossfire + - caught red-handed + - checkered past + - chomping at the bit + - cleanliness is next to godliness + - clear as a bell + - clear as mud + - close to the vest + - cock and bull story + - cold shoulder + - come hell or high water + - cool as a cucumber + - cool, calm, and collected + - cost a king's ransom + - count your blessings + - crack of dawn + - crash course + - creature comforts + - cross that bridge when you come to it + - crushing blow + - cry like a baby + - cry me a river + - cry over spilt milk + - crystal clear + - curiosity killed the cat + - cut and dried + - cut through the red tape + - cut to the chase + - cute as a bugs ear + - cute as a button + - cute as a puppy + - cuts to the quick + - dark before the dawn + - day in, day out + - dead as a doornail + - devil is in the details + - dime a dozen + - divide and conquer + - dog and pony show + - dog days + - dog eat dog + - dog tired + - don't burn your bridges + - don't count your chickens + - don't look a gift horse in the mouth + - don't rock the boat + - don't step on anyone's toes + - don't take any wooden nickels + - down and out + - down at the heels + - down in the dumps + - down the hatch + - down to earth + - draw the line + - dressed to kill + - dressed to the nines + - drives me up the wall + - dull as dishwater + - dyed in the wool + - eagle eye + - ear to the ground + - early bird catches the worm + - easier said than done + - easy as pie + - eat your heart out + - eat your words + - eleventh hour + - even the playing field + - every dog has its day + - every fiber of my being + - everything but the kitchen sink + - eye for an eye + - face the music + - facts of life + - fair weather friend + - fall by the wayside + - fan the flames + - feast or famine + - feather your nest + - feathered friends + - few and far between + - fifteen minutes of fame + - filthy vermin + - fine kettle of fish + - fish out of water + - fishing for a compliment + - fit as a fiddle + - fit the bill + - fit to be tied + - flash in the pan + - flat as a pancake + - flip your lid + - flog a dead horse + - fly by night + - fly the coop + - follow your heart + - for all intents and purposes + - for the birds + - for what it's worth + - force of nature + - force to be reckoned with + - forgive and forget + - fox in the henhouse + - free and easy + - free as a bird + - fresh as a daisy + - full steam ahead + - fun in the sun + - garbage in, garbage out + - gentle as a lamb + - get a kick out of + - get a leg up + - get down and dirty + - get the lead out + - get to the bottom of + - get your feet wet + - gets my goat + - gilding the lily + - give and take + - go against the grain + - go at it tooth and nail + - go for broke + - go him one better + - go the extra mile + - go with the flow + - goes without saying + - good as gold + - good deed for the day + - good things come to those who wait + - good time was had by all + - good times were had by all + - greased lightning + - greek to me + - green thumb + - green-eyed monster + - grist for the mill + - growing like a weed + - hair of the dog + - hand to mouth + - happy as a clam + - happy as a lark + - hasn't a clue + - have a nice day + - have high hopes + - have the last laugh + - haven't got a row to hoe + - head honcho + - head over heels + - hear a pin drop + - heard it through the grapevine + - heart's content + - heavy as lead + - hem and haw + - high and dry + - high and mighty + - high as a kite + - hit paydirt + - hold your head up high + - hold your horses + - hold your own + - hold your tongue + - honest as the day is long + - horns of a dilemma + - horse of a different color + - hot under the collar + - hour of need + - I beg to differ + - icing on the cake + - if the shoe fits + - if the shoe were on the other foot + - in a jam + - in a jiffy + - in a nutshell + - in a pig's eye + - in a pinch + - in a word + - in hot water + - in the gutter + - in the nick of time + - in the thick of it + - in your dreams + - it ain't over till the fat lady sings + - it goes without saying + - it takes all kinds + - it takes one to know one + - it's a small world + - it's only a matter of time + - ivory tower + - Jack of all trades + - jockey for position + - jog your memory + - joined at the hip + - judge a book by its cover + - jump down your throat + - jump in with both feet + - jump on the bandwagon + - jump the gun + - jump to conclusions + - just a hop, skip, and a jump + - just the ticket + - justice is blind + - keep a stiff upper lip + - keep an eye on + - keep it simple, stupid + - keep the home fires burning + - keep up with the Joneses + - keep your chin up + - keep your fingers crossed + - kick the bucket + - kick up your heels + - kick your feet up + - kid in a candy store + - kill two birds with one stone + - kiss of death + - knock it out of the park + - knock on wood + - knock your socks off + - know him from Adam + - know the ropes + - know the score + - knuckle down + - knuckle sandwich + - knuckle under + - labor of love + - ladder of success + - land on your feet + - lap of luxury + - last but not least + - last hurrah + - last-ditch effort + - law of the jungle + - law of the land + - lay down the law + - leaps and bounds + - let sleeping dogs lie + - let the cat out of the bag + - let the good times roll + - let your hair down + - let's talk turkey + - letter perfect + - lick your wounds + - lies like a rug + - life's a bitch + - life's a grind + - light at the end of the tunnel + - lighter than a feather + - lighter than air + - like clockwork + - like father like son + - like taking candy from a baby + - like there's no tomorrow + - lion's share + - live and learn + - live and let live + - long and short of it + - long lost love + - look before you leap + - look down your nose + - look what the cat dragged in + - looking a gift horse in the mouth + - looks like death warmed over + - loose cannon + - lose your head + - lose your temper + - loud as a horn + - lounge lizard + - loved and lost + - low man on the totem pole + - luck of the draw + - luck of the Irish + - make hay while the sun shines + - make money hand over fist + - make my day + - make the best of a bad situation + - make the best of it + - make your blood boil + - man of few words + - man's best friend + - mark my words + - meaningful dialogue + - missed the boat on that one + - moment in the sun + - moment of glory + - moment of truth + - money to burn + - more power to you + - more than one way to skin a cat + - movers and shakers + - moving experience + - naked as a jaybird + - naked truth + - neat as a pin + - needle in a haystack + - needless to say + - neither here nor there + - never look back + - never say never + - nip and tuck + - nip it in the bud + - no guts, no glory + - no love lost + - no pain, no gain + - no skin off my back + - no stone unturned + - no time like the present + - no use crying over spilled milk + - nose to the grindstone + - not a hope in hell + - not a minute's peace + - not in my backyard + - not playing with a full deck + - not the end of the world + - not written in stone + - nothing to sneeze at + - nothing ventured nothing gained + - now we're cooking + - off the top of my head + - off the wagon + - off the wall + - old hat + - older and wiser + - older than dirt + - older than Methuselah + - on a roll + - on cloud nine + - on pins and needles + - on the bandwagon + - on the money + - on the nose + - on the rocks + - on the spot + - on the tip of my tongue + - on the wagon + - on thin ice + - once bitten, twice shy + - one bad apple doesn't spoil the bushel + - one born every minute + - one brick short + - one foot in the grave + - one in a million + - one red cent + - only game in town + - open a can of worms + - open and shut case + - open the flood gates + - opportunity doesn't knock twice + - out of pocket + - out of sight, out of mind + - out of the frying pan into the fire + - out of the woods + - out on a limb + - over a barrel + - over the hump + - pain and suffering + - pain in the + - panic button + - par for the course + - part and parcel + - party pooper + - pass the buck + - patience is a virtue + - pay through the nose + - penny pincher + - perfect storm + - pig in a poke + - pile it on + - pillar of the community + - pin your hopes on + - pitter patter of little feet + - plain as day + - plain as the nose on your face + - play by the rules + - play your cards right + - playing the field + - playing with fire + - pleased as punch + - plenty of fish in the sea + - point with pride + - poor as a church mouse + - pot calling the kettle black + - pretty as a picture + - pull a fast one + - pull your punches + - pulling your leg + - pure as the driven snow + - put it in a nutshell + - put one over on you + - put the cart before the horse + - put the pedal to the metal + - put your best foot forward + - put your foot down + - quick as a bunny + - quick as a lick + - quick as a wink + - quick as lightning + - quiet as a dormouse + - rags to riches + - raining buckets + - raining cats and dogs + - rank and file + - rat race + - reap what you sow + - red as a beet + - red herring + - reinvent the wheel + - rich and famous + - rings a bell + - ripe old age + - ripped me off + - rise and shine + - road to hell is paved with good intentions + - rob Peter to pay Paul + - roll over in the grave + - rub the wrong way + - ruled the roost + - running in circles + - sad but true + - sadder but wiser + - salt of the earth + - scared stiff + - scared to death + - sealed with a kiss + - second to none + - see eye to eye + - seen the light + - seize the day + - set the record straight + - set the world on fire + - set your teeth on edge + - sharp as a tack + - shoot for the moon + - shoot the breeze + - shot in the dark + - shoulder to the wheel + - sick as a dog + - sigh of relief + - signed, sealed, and delivered + - sink or swim + - six of one, half a dozen of another + - skating on thin ice + - slept like a log + - slinging mud + - slippery as an eel + - slow as molasses + - smart as a whip + - smooth as a baby's bottom + - sneaking suspicion + - snug as a bug in a rug + - sow wild oats + - spare the rod, spoil the child + - speak of the devil + - spilled the beans + - spinning your wheels + - spitting image of + - spoke with relish + - spread like wildfire + - spring to life + - squeaky wheel gets the grease + - stands out like a sore thumb + - start from scratch + - stick in the mud + - still waters run deep + - stitch in time + - stop and smell the roses + - straight as an arrow + - straw that broke the camel's back + - strong as an ox + - stubborn as a mule + - stuff that dreams are made of + - stuffed shirt + - sweating blood + - sweating bullets + - take a load off + - take one for the team + - take the bait + - take the bull by the horns + - take the plunge + - takes one to know one + - takes two to tango + - the more the merrier + - the real deal + - the real McCoy + - the red carpet treatment + - the same old story + - there is no accounting for taste + - thick as a brick + - thick as thieves + - thin as a rail + - think outside of the box + - third time's the charm + - this day and age + - this hurts me worse than it hurts you + - this point in time + - three sheets to the wind + - through thick and thin + - throw in the towel + - tie one on + - tighter than a drum + - time and time again + - time is of the essence + - tip of the iceberg + - tired but happy + - to coin a phrase + - to each his own + - to make a long story short + - to the best of my knowledge + - toe the line + - tongue in cheek + - too good to be true + - too hot to handle + - too numerous to mention + - touch with a ten foot pole + - tough as nails + - trial and error + - trials and tribulations + - tried and true + - trip down memory lane + - twist of fate + - two cents worth + - two peas in a pod + - ugly as sin + - under the counter + - under the gun + - under the same roof + - under the weather + - until the cows come home + - unvarnished truth + - up the creek + - uphill battle + - upper crust + - upset the applecart + - vain attempt + - vain effort + - vanquish the enemy + - vested interest + - waiting for the other shoe to drop + - wakeup call + - warm welcome + - watch your p's and q's + - watch your tongue + - watching the clock + - water under the bridge + - weather the storm + - weed them out + - week of Sundays + - went belly up + - wet behind the ears + - what goes around comes around + - what you see is what you get + - when it rains, it pours + - when push comes to shove + - when the cat's away + - when the going gets tough, the tough get going + - white as a sheet + - whole ball of wax + - whole hog + - whole nine yards + - wild goose chase + - will wonders never cease? + - wisdom of the ages + - wise as an owl + - wolf at the door + - words fail me + - work like a dog + - world weary + - worst nightmare + - worth its weight in gold + - wrong side of the bed + - yanking your chain + - yappy as a dog + - years young + - you are what you eat + - you can run but you can't hide + - you only live once + - you're the boss + - young and foolish + - young and vibrant diff --git a/.config/.vendor/vale/styles/write-good/E-Prime.yml b/.config/.vendor/vale/styles/write-good/E-Prime.yml new file mode 100644 index 0000000..074a102 --- /dev/null +++ b/.config/.vendor/vale/styles/write-good/E-Prime.yml @@ -0,0 +1,32 @@ +extends: existence +message: "Try to avoid using '%s'." +ignorecase: true +level: suggestion +tokens: + - am + - are + - aren't + - be + - been + - being + - he's + - here's + - here's + - how's + - i'm + - is + - isn't + - it's + - she's + - that's + - there's + - they're + - was + - wasn't + - we're + - were + - weren't + - what's + - where's + - who's + - you're diff --git a/.config/.vendor/vale/styles/write-good/Illusions.yml b/.config/.vendor/vale/styles/write-good/Illusions.yml new file mode 100644 index 0000000..b4f1321 --- /dev/null +++ b/.config/.vendor/vale/styles/write-good/Illusions.yml @@ -0,0 +1,11 @@ +extends: repetition +message: "'%s' is repeated!" +level: warning +alpha: true +action: + name: edit + params: + - truncate + - " " +tokens: + - '[^\s]+' diff --git a/.config/.vendor/vale/styles/write-good/Passive.yml b/.config/.vendor/vale/styles/write-good/Passive.yml new file mode 100644 index 0000000..f472cb9 --- /dev/null +++ b/.config/.vendor/vale/styles/write-good/Passive.yml @@ -0,0 +1,183 @@ +extends: existence +message: "'%s' may be passive voice. Use active voice if you can." +ignorecase: true +level: warning +raw: + - \b(am|are|were|being|is|been|was|be)\b\s* +tokens: + - '[\w]+ed' + - awoken + - beat + - become + - been + - begun + - bent + - beset + - bet + - bid + - bidden + - bitten + - bled + - blown + - born + - bought + - bound + - bred + - broadcast + - broken + - brought + - built + - burnt + - burst + - cast + - caught + - chosen + - clung + - come + - cost + - crept + - cut + - dealt + - dived + - done + - drawn + - dreamt + - driven + - drunk + - dug + - eaten + - fallen + - fed + - felt + - fit + - fled + - flown + - flung + - forbidden + - foregone + - forgiven + - forgotten + - forsaken + - fought + - found + - frozen + - given + - gone + - gotten + - ground + - grown + - heard + - held + - hidden + - hit + - hung + - hurt + - kept + - knelt + - knit + - known + - laid + - lain + - leapt + - learnt + - led + - left + - lent + - let + - lighted + - lost + - made + - meant + - met + - misspelt + - mistaken + - mown + - overcome + - overdone + - overtaken + - overthrown + - paid + - pled + - proven + - put + - quit + - read + - rid + - ridden + - risen + - run + - rung + - said + - sat + - sawn + - seen + - sent + - set + - sewn + - shaken + - shaven + - shed + - shod + - shone + - shorn + - shot + - shown + - shrunk + - shut + - slain + - slept + - slid + - slit + - slung + - smitten + - sold + - sought + - sown + - sped + - spent + - spilt + - spit + - split + - spoken + - spread + - sprung + - spun + - stolen + - stood + - stridden + - striven + - struck + - strung + - stuck + - stung + - stunk + - sung + - sunk + - swept + - swollen + - sworn + - swum + - swung + - taken + - taught + - thought + - thrived + - thrown + - thrust + - told + - torn + - trodden + - understood + - upheld + - upset + - wed + - wept + - withheld + - withstood + - woken + - won + - worn + - wound + - woven + - written + - wrung diff --git a/.config/.vendor/vale/styles/write-good/README.md b/.config/.vendor/vale/styles/write-good/README.md new file mode 100644 index 0000000..3edcc9b --- /dev/null +++ b/.config/.vendor/vale/styles/write-good/README.md @@ -0,0 +1,27 @@ +Based on [write-good](https://github.com/btford/write-good). + +> Naive linter for English prose for developers who can't write good and wanna learn to do other stuff good too. + +``` +The MIT License (MIT) + +Copyright (c) 2014 Brian Ford + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` diff --git a/.config/.vendor/vale/styles/write-good/So.yml b/.config/.vendor/vale/styles/write-good/So.yml new file mode 100644 index 0000000..e57f099 --- /dev/null +++ b/.config/.vendor/vale/styles/write-good/So.yml @@ -0,0 +1,5 @@ +extends: existence +message: "Don't start a sentence with '%s'." +level: error +raw: + - '(?:[;-]\s)so[\s,]|\bSo[\s,]' diff --git a/.config/.vendor/vale/styles/write-good/ThereIs.yml b/.config/.vendor/vale/styles/write-good/ThereIs.yml new file mode 100644 index 0000000..8b82e8f --- /dev/null +++ b/.config/.vendor/vale/styles/write-good/ThereIs.yml @@ -0,0 +1,6 @@ +extends: existence +message: "Don't start a sentence with '%s'." +ignorecase: false +level: error +raw: + - '(?:[;-]\s)There\s(is|are)|\bThere\s(is|are)\b' diff --git a/.config/.vendor/vale/styles/write-good/TooWordy.yml b/.config/.vendor/vale/styles/write-good/TooWordy.yml new file mode 100644 index 0000000..275701b --- /dev/null +++ b/.config/.vendor/vale/styles/write-good/TooWordy.yml @@ -0,0 +1,221 @@ +extends: existence +message: "'%s' is too wordy." +ignorecase: true +level: warning +tokens: + - a number of + - abundance + - accede to + - accelerate + - accentuate + - accompany + - accomplish + - accorded + - accrue + - acquiesce + - acquire + - additional + - adjacent to + - adjustment + - admissible + - advantageous + - adversely impact + - advise + - aforementioned + - aggregate + - aircraft + - all of + - all things considered + - alleviate + - allocate + - along the lines of + - already existing + - alternatively + - amazing + - ameliorate + - anticipate + - apparent + - appreciable + - as a matter of fact + - as a means of + - as far as I'm concerned + - as of yet + - as to + - as yet + - ascertain + - assistance + - at the present time + - at this time + - attain + - attributable to + - authorize + - because of the fact that + - belated + - benefit from + - bestow + - by means of + - by virtue of + - by virtue of the fact that + - cease + - close proximity + - commence + - comply with + - concerning + - consequently + - consolidate + - constitutes + - demonstrate + - depart + - designate + - discontinue + - due to the fact that + - each and every + - economical + - eliminate + - elucidate + - employ + - endeavor + - enumerate + - equitable + - equivalent + - evaluate + - evidenced + - exclusively + - expedite + - expend + - expiration + - facilitate + - factual evidence + - feasible + - finalize + - first and foremost + - for all intents and purposes + - for the most part + - for the purpose of + - forfeit + - formulate + - have a tendency to + - honest truth + - however + - if and when + - impacted + - implement + - in a manner of speaking + - in a timely manner + - in a very real sense + - in accordance with + - in addition + - in all likelihood + - in an effort to + - in between + - in excess of + - in lieu of + - in light of the fact that + - in many cases + - in my opinion + - in order to + - in regard to + - in some instances + - in terms of + - in the case of + - in the event that + - in the final analysis + - in the nature of + - in the near future + - in the process of + - inception + - incumbent upon + - indicate + - indication + - initiate + - irregardless + - is applicable to + - is authorized to + - is responsible for + - it is + - it is essential + - it seems that + - it was + - magnitude + - maximum + - methodology + - minimize + - minimum + - modify + - monitor + - multiple + - necessitate + - nevertheless + - not certain + - not many + - not often + - not unless + - not unlike + - notwithstanding + - null and void + - numerous + - objective + - obligate + - obtain + - on the contrary + - on the other hand + - one particular + - optimum + - overall + - owing to the fact that + - participate + - particulars + - pass away + - pertaining to + - point in time + - portion + - possess + - preclude + - previously + - prior to + - prioritize + - procure + - proficiency + - provided that + - purchase + - put simply + - readily apparent + - refer back + - regarding + - relocate + - remainder + - remuneration + - requirement + - reside + - residence + - retain + - satisfy + - shall + - should you wish + - similar to + - solicit + - span across + - strategize + - subsequent + - substantial + - successfully complete + - sufficient + - terminate + - the month of + - the point I am trying to make + - therefore + - time period + - took advantage of + - transmit + - transpire + - type of + - until such time as + - utilization + - utilize + - validate + - various different + - what I mean to say is + - whether or not + - with respect to + - with the exception of + - witnessed diff --git a/.config/.vendor/vale/styles/write-good/Weasel.yml b/.config/.vendor/vale/styles/write-good/Weasel.yml new file mode 100644 index 0000000..d1d90a7 --- /dev/null +++ b/.config/.vendor/vale/styles/write-good/Weasel.yml @@ -0,0 +1,29 @@ +extends: existence +message: "'%s' is a weasel word!" +ignorecase: true +level: warning +tokens: + - clearly + - completely + - exceedingly + - excellent + - extremely + - fairly + - huge + - interestingly + - is a number + - largely + - mostly + - obviously + - quite + - relatively + - remarkably + - several + - significantly + - substantially + - surprisingly + - tiny + - usually + - various + - vast + - very diff --git a/.config/.vendor/vale/styles/write-good/meta.json b/.config/.vendor/vale/styles/write-good/meta.json new file mode 100644 index 0000000..a115d28 --- /dev/null +++ b/.config/.vendor/vale/styles/write-good/meta.json @@ -0,0 +1,4 @@ +{ + "feed": "https://github.com/errata-ai/write-good/releases.atom", + "vale_version": ">=1.0.0" +} diff --git a/.config/actionlint.yml b/.config/actionlint.yml new file mode 100644 index 0000000..801b628 --- /dev/null +++ b/.config/actionlint.yml @@ -0,0 +1,13 @@ +# actionlint configuration for this project +# References DocOps Lab base configuration + +# Project-specific ignores (add as needed): +ignore: + # Example: Ignore specific workflow patterns + # - 'workflow "deploy.yml"' + # - '"ubuntu-20.04" is deprecated' + +# Project-specific overrides: +shellcheck: + enable: true + # shell-options: "-e SC2016" # Add project-specific ShellCheck exclusions diff --git a/.config/docopslab-dev.yml b/.config/docopslab-dev.yml new file mode 100644 index 0000000..6e90c54 --- /dev/null +++ b/.config/docopslab-dev.yml @@ -0,0 +1,65 @@ +source: + repo: DocOps/lab + ref: v1 + root: gems/docopslab-dev/config-packs + +docs: + - source: docs/agent/AGENTS.md + target: AGENTS.md + synced: false + - source: docs/agent/skills/*.md + target: .agent/docs/skills/ + synced: true + - source: docs/agent/topics/*.md + target: .agent/docs/topics/ + synced: true + - source: docs/agent/roles/*.md + target: .agent/docs/roles/ + synced: true + - source: docs/agent/missions/*.md + target: .agent/docs/missions/ + synced: true + +tools: + - tool: rubocop + files: + - source: rubocop/base.yml + target: .config/.vendor/docopslab/rubocop.yml + synced: true + - source: rubocop/project.yml + target: .config/rubocop.yml + synced: false + + - tool: vale + files: + - source: vale/base.ini + target: .config/.vendor/docopslab/vale.ini + synced: true + - source: vale/project.ini + target: .config/vale.local.ini + synced: false + + - tool: htmlproofer + enabled: false # Disabled by default, enable per project + files: + - source: htmlproofer/base.yml + target: .config/.vendor/docopslab/htmlproofer.yml + synced: true + - source: htmlproofer/project.yml + target: .config/htmlproofer.yml + synced: false + + - tool: shellcheck + files: + - source: shellcheck/base.shellcheckrc + target: .config/.shellcheckrc + synced: true + + - tool: actionlint + files: + - source: actionlint/base.yml + target: .config/.vendor/docopslab/actionlint.yml + synced: true + - source: actionlint/project.yml + target: .config/actionlint.yml + synced: false \ No newline at end of file diff --git a/.config/rubocop.yml b/.config/rubocop.yml new file mode 100644 index 0000000..d65e45c --- /dev/null +++ b/.config/rubocop.yml @@ -0,0 +1,8 @@ +# DocOps Lab RuboCop Configuration +# This file inherits from the base configuration and can be customized for your project + +inherit_from: .vendor/docopslab/rubocop.yml + +# Add your project-specific overrides below: +# Style/StringLiterals: +# EnforcedStyle: double_quotes \ No newline at end of file diff --git a/.config/vale.ini b/.config/vale.ini new file mode 100644 index 0000000..dcc8f47 --- /dev/null +++ b/.config/vale.ini @@ -0,0 +1,28 @@ +MinAlertLevel = error +StylesPath = .vendor/vale/styles +Packages = RedHat, AsciiDoc + +[asciidoctor] +attribute-missing = drop +experimental = YES +safe = unsafe + +[*] +BasedOnStyles = RedHat, AsciiDoc, DocOpsLab-AsciiDoc, DocOpsLab-Authoring +RedHat.PascalCamelCase = suggestion +RedHat.Headings = suggestion +RedHat.SentenceLength = suggestion +RedHat.TermsErrors = suggestion +RedHat.TermsWarnings = suggestion +RedHat.Spelling = NO +RedHat.CaseSensitiveTerms = NO +RedHat.GitLinks = NO +RedHat.Using = NO +RedHat.Slash = suggestion +RedHat.DoNotUseTerms = suggestion +RedHat.HeadingPunctuation = NO +RedHat.Hyphens = suggestion + +[#.adoc] +BasedOnStyles = RedHat, AsciiDoc, DocOpsLab-AsciiDoc, DocOpsLab-Authoring +RedHat-AsciiDoc.LinkContainsLinkText = suggestion diff --git a/.config/vale.local.ini b/.config/vale.local.ini new file mode 100644 index 0000000..0c4ce72 --- /dev/null +++ b/.config/vale.local.ini @@ -0,0 +1,5 @@ +# DocOps Lab Vale Configuration +# Combined base and project configuration for consistent Vale linting + +MinAlertLevel = error +StylesPath = .vendor/vale/styles \ No newline at end of file diff --git a/.gitignore b/.gitignore index be56817..e4b832e 100644 --- a/.gitignore +++ b/.gitignore @@ -61,7 +61,7 @@ comprehensive-test.yml .ruby-gemset # Bundler -/Gemfile.lock.example +./Gemfile.lock /.bundle # Documentation @@ -103,4 +103,6 @@ specs/data/*-issues.yml # Docs and ReleaseHx files docs/releasehx/*.md docs/releasehx/*.adoc -releasehx-install.sh \ No newline at end of file +releasehx-install.sh +# DocOps Lab vendor files +scripts/.vendor/ diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..396f258 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,191 @@ +# AGENTS.md + +AI Agent Guide for Issuer development. + +Table of Contents: + - AI Agency + - Essential Reading Order + - Codebase Architecture + - Agent Development Approach + - Working with Demo Data + - General Agent Responsibilities + - Remember + + +## AI Agency + +As an LLM-backed agent, your primary mission is to assist a human OPerator in the development, documentation, and maintenance of Issuer by following best practices outlined in this document. + +### Philosophy: Documentation-First, Junior/Senior Contributor Mindset + +As an AI agent working on Issuer, approach this codebase like an **inquisitive and opinionated junior engineer with senior coding expertise and experience**. +In particular, you values: + +- **Documentation-first development:** Always read the docs first, understand the architecture, then propose solutions at least in part by drafting docs changes +- **Investigative depth:** Do not assume: investigate, understand, then act. +- **Architectural awareness:** Consider system-wide impacts of changes. +- **Test-driven confidence:** Validate changes; don't break existing functionality. +- **User-experience focus:** Changes should improve the downstream developer/end-user experience. + + +### Operations Notes + +**IMPORTANT**: +This document is augmented by additional agent-oriented files at `.agent/docs/`. +Be sure to `tree .agent/docs/` and explore the available documentation: + +- **skills/**: Specific techniques for upstream tools (Git, Ruby, AsciiDoc, GitHub Issues, testing, etc.) +- **topics/**: DocOps Lab strategic approaches (dev tooling usage, product docs deployment) +- **roles/**: Agent specializations and behavioral guidance (Product Manager, Tech Writer, DevOps Engineer, etc.) +- **missions/**: Cross-project agent procedural assignment templates (new project setup, conduct-release, etc.) + +**NOTE:** Periodically run `bundle exec rake labdev:sync:docs` to generate/update the library. + +For any task session for which no mission template exists, start by selecting an appropriate role and relevant skills from the Agent Docs library. + +**Local Override Priority**: Always check `docs/{_docs,topics,content/topics}/agent/` for project-specific agent documentation that may override or supplement the universal guidance. + +### Ephemeral/Scratch Directory + +There should always be an untracked `.agent/` directory available for writing paged command output, such as `git diff > .agent/tmp/current.diff && cat .agent/tmp/current.diff`. +Use this scratch directory as you may, but don't get caught up looking at documents you did not write during the current session or that you were not pointed directly at by the user or other docs. + +Typical subdirectories include: + +- `docs/`: Generated agent documentation library (skills, roles, topics, missions) +- `tmp/`: Scratch files for current session +- `logs/`: Persistent logs across sessions (e.g., task run history) +- `reports/`: Persistent reports across sessions (e.g., spellcheck reports) +- `team/`: Shared (Git-tracked) files for multi-agent/multi-operator collaboration + +### AsciiDoc, not Markdown + +DocOps Lab is an **AsciiDoc** shop. +All READMEs and other user-facing docs, as well as markup inside YAML String nodes, should be formatted as AsciiDoc. + +Agents have a frustrating tendency to create `.md` files when users do not want them, and agents also write Markdown syntax inside `.adoc` files. +Stick to the AsciiDoc syntax and styles you find in the `README.adoc` files, and you won't go too far wrong. + +ONLY create `.md` files for your own use, unless Operator asks you to. + + + + +## Essential Reading Order (Start Here!) + +Before making any changes, **read these documents in order**: + +### 1. Core Documentation +- **`./README.adoc`** +- Main project overview, features, and workflow examples: + - Pay special attention to any AI prompt sections (`// tag::ai-prompt[]`...`// end::ai-prompt[]`) + - Study the example CLI usage patterns +- Review `Gemfile` and `Dockerfile` for dependencies and environment context + +### 2. Architecture Understanding +- **`./specs/tests/README.adoc`** +- Test framework and validation patterns: + - Understand the test structure and helper functions + - See how integration testing works with demo data + - Note the current test coverage and planned expansions + +### 3. Practical Examples +- See `examples/` directory for example files and demo data. + +### 4. Agent Roles and Skills +- `README.adoc` section: `== Development` +- Use `tree .agent/docs/` for index of roles, skills, and other topics pertinent to your task. + + +## Codebase Architecture + +### Core Components + +``` +lib/issuer/ +├── apis/ # API integration modules +│ └── github/ # GitHub API client implementation +├── cli.rb # Thor-based CLI interface +├── issue.rb # Core Issue data model and validation +├── ops.rb # High-level operations and orchestration +├── sites/ # Site-specific logic (future expansion) +└── version.rb # Version definition +``` + + + + + +## Agent Development Approach + +**Before starting development work:** + +1. **Adopt an Agent Role:** If the Operator has not assigned you a role, review `.agent/docs/roles/` and select the most appropriate role for your task. +2. **Gather Relevant Skills:** Examine `.agent/docs/skills/` for techniques needed: +3. **Understand Strategic Context:** Check `.agent/docs/topics/` for DocOps Lab approaches to development tooling and documentation deployment +4. **Read relevant project documentation** for the area you're changing +5. **For substantial changes, check in with the Operator** - lay out your plan and get approval for risky, innovative, or complex modifications + + + +## Working with Demo Data + +Use the `examples/` directory to validate changes. +You can run `bundle exec issuer examples/basic-example.yml --dry` to test without posting to GitHub. +For comprehensive testing, refer to `specs/tests/README.adoc`. + + + +## General Agent Responsibilities + +1. **Question Requirements:** Ask clarifying questions about specifications. +2. **Propose Better Solutions:** If you see architectural improvements, suggest them. +3. **Consider Edge Cases:** Think about error conditions and unusual inputs. +4. **Maintain Backward Compatibility:** Don't break existing workflows. +5. **Improve Documentation:** Update docs when adding features. +6. **Test Thoroughly:** Use both unit tests and demo validation. +7. **DO NOT assume you know the solution** to anything big. + +### Cross-role Advisories + +During planning stages, be opinionated about: + +- Code architecture and separation of concerns +- User experience, especially: + - CLI ergonomics + - Error handling and messaging + - Configuration usability + - Logging and debug output +- Documentation quality and completeness +- Test coverage and quality + +When troubleshooting or planning, be inquisitive about: + +- Why existing patterns were chosen +- Future proofing and scalability +- What the user experience implications are +- How changes affect different API platforms +- Whether configuration is flexible enough +- What edge cases might exist + + + + +## Remember + +Issuer is a tool for bulk-creating GitHub Issues from a single YAML file (IMYML format). +It is designed to be platform-agnostic in its data model, though currently focused on GitHub. + + + +Your primary mission is to improve Issuer while maintaining operational standards: + +1. **Reliability:** Don't break existing functionality +2. **Usability:** Make interfaces intuitive and helpful +3. **Flexibility:** Support diverse team workflows and preferences +4. **Performance:** Respect system limits and optimize intelligently +5. **Documentation:** Keep the docs current and comprehensive + +**Most importantly**: Read the documentation first, understand the system, then propose thoughtful solutions that improve the overall architecture and user experience. + + diff --git a/Gemfile b/Gemfile index 8a0bba2..e582d7e 100644 --- a/Gemfile +++ b/Gemfile @@ -5,3 +5,8 @@ gemspec gem 'rake', '~> 13.0' gem 'rspec', '~> 3.0' + +group :development do + # DocOps Lab development tooling + gem 'docopslab-dev', '~> 0.1.0' +end diff --git a/Gemfile.lock b/Gemfile.lock index 1244499..3c1ab71 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -9,11 +9,86 @@ PATH GEM remote: https://rubygems.org/ specs: - addressable (2.8.7) - public_suffix (>= 2.0.2, < 7.0) - asciidoctor (2.0.23) + Ascii85 (2.0.1) + addressable (2.8.8) + public_suffix (>= 2.0.2, < 8.0) + afm (1.0.0) + asciidoctor (2.0.26) + ast (2.4.3) + async (2.35.0) + console (~> 1.29) + fiber-annotation + io-event (~> 1.11) + metrics (~> 0.12) + traces (~> 0.18) base64 (0.3.0) + benchmark (0.5.0) + bigdecimal (3.3.1) + brakeman (7.1.1) + racc + bundler-audit (0.9.3) + bundler (>= 1.2.0) + thor (~> 1.0) + coderay (1.1.3) + concurrent-ruby (1.3.6) + console (1.34.2) + fiber-annotation + fiber-local (~> 1.1) + json + debride (1.14.0) + path_expander (~> 2.0) + prism (~> 1.5) + sexp_processor (~> 4.17) diff-lcs (1.6.2) + docile (1.4.1) + docopslab-dev (0.1.0) + asciidoctor (~> 2.0) + brakeman (~> 7.1) + bundler-audit (~> 0.9) + debride (~> 1.13) + fasterer (~> 0.11) + flog (~> 4.8) + html-proofer (~> 5.0) + inch (~> 0.8) + rake (~> 13.0) + reek (~> 6.5) + rubocop (~> 1.80) + rubocop-rake (~> 0.7) + rubocop-rspec (~> 3.7) + simplecov (~> 0.22) + subtxt (~> 0.3) + yaml (~> 0.2) + dry-configurable (1.3.0) + dry-core (~> 1.1) + zeitwerk (~> 2.6) + dry-core (1.1.0) + concurrent-ruby (~> 1.0) + logger + zeitwerk (~> 2.6) + dry-inflector (1.2.0) + dry-initializer (3.2.0) + dry-logic (1.6.0) + bigdecimal + concurrent-ruby (~> 1.0) + dry-core (~> 1.1) + zeitwerk (~> 2.6) + dry-schema (1.14.1) + concurrent-ruby (~> 1.0) + dry-configurable (~> 1.0, >= 1.0.1) + dry-core (~> 1.1) + dry-initializer (~> 3.2) + dry-logic (~> 1.5) + dry-types (~> 1.8) + zeitwerk (~> 2.6) + dry-types (1.8.3) + bigdecimal (~> 3.0) + concurrent-ruby (~> 1.0) + dry-core (~> 1.0) + dry-inflector (~> 1.0) + dry-logic (~> 1.4) + zeitwerk (~> 2.6) + ethon (0.15.0) + ffi (>= 1.15.0) faraday (2.13.2) faraday-net_http (>= 2.0, < 3.5) json @@ -22,16 +97,81 @@ GEM net-http (>= 0.5.0) faraday-retry (2.3.2) faraday (~> 2.0) - json (2.12.2) + fasterer (0.11.0) + ruby_parser (>= 3.19.1) + ffi (1.17.2-x86_64-linux-gnu) + fiber-annotation (0.2.0) + fiber-local (1.1.0) + fiber-storage + fiber-storage (1.0.1) + flog (4.9.1) + path_expander (~> 2.0) + prism (~> 1.7) + sexp_processor (~> 4.8) + hashery (2.1.2) + html-proofer (5.1.1) + addressable (~> 2.3) + async (~> 2.1) + benchmark (~> 0.5) + nokogiri (~> 1.13) + pdf-reader (~> 2.11) + rainbow (~> 3.0) + typhoeus (~> 1.3) + yell (~> 2.0) + zeitwerk (~> 2.5) + inch (0.8.0) + pry + sparkr (>= 0.2.0) + term-ansicolor + yard (~> 0.9.12) + io-console (0.8.2) + io-event (1.14.2) + json (2.18.0) + language_server-protocol (3.17.0.5) + lint_roller (1.1.0) logger (1.7.0) + method_source (1.1.0) + metrics (0.15.0) + mize (0.6.1) net-http (0.6.0) uri + nokogiri (1.18.10-x86_64-linux-gnu) + racc (~> 1.4) octokit (8.1.0) base64 faraday (>= 1, < 3) sawyer (~> 0.9) - public_suffix (6.0.2) - rake (13.3.0) + parallel (1.27.0) + parser (3.3.10.0) + ast (~> 2.4.1) + racc + path_expander (2.0.0) + pdf-reader (2.15.0) + Ascii85 (>= 1.0, < 3.0, != 2.0.0) + afm (>= 0.2.1, < 2) + hashery (~> 2.0) + ruby-rc4 + ttfunk + prism (1.7.0) + pry (0.15.2) + coderay (~> 1.1) + method_source (~> 1.0) + public_suffix (7.0.0) + racc (1.8.1) + rainbow (3.1.1) + rake (13.3.1) + readline (0.0.4) + reline + reek (6.5.0) + dry-schema (~> 1.13) + logger (~> 1.6) + parser (~> 3.3.0) + rainbow (>= 2.0, < 4.0) + rexml (~> 3.1) + regexp_parser (2.11.3) + reline (0.6.3) + io-console (~> 0.5) + rexml (3.4.4) rspec (3.13.1) rspec-core (~> 3.13.0) rspec-expectations (~> 3.13.0) @@ -45,11 +185,65 @@ GEM diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) rspec-support (3.13.4) + rubocop (1.82.1) + json (~> 2.3) + language_server-protocol (~> 3.17.0.2) + lint_roller (~> 1.1.0) + parallel (~> 1.10) + parser (>= 3.3.0.2) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 2.9.3, < 3.0) + rubocop-ast (>= 1.48.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 4.0) + rubocop-ast (1.48.0) + parser (>= 3.3.7.2) + prism (~> 1.4) + rubocop-rake (0.7.1) + lint_roller (~> 1.1) + rubocop (>= 1.72.1) + rubocop-rspec (3.8.0) + lint_roller (~> 1.1) + rubocop (~> 1.81) + ruby-progressbar (1.13.0) + ruby-rc4 (0.1.5) + ruby_parser (3.22.0) + racc (~> 1.5) + sexp_processor (~> 4.16) sawyer (0.9.2) addressable (>= 2.3.5) faraday (>= 0.17.3, < 3) - thor (1.3.2) + sexp_processor (4.17.4) + simplecov (0.22.0) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + simplecov-html (0.13.2) + simplecov_json_formatter (0.1.4) + sparkr (0.4.1) + subtxt (0.3.0) + sync (0.5.0) + term-ansicolor (1.11.3) + tins (~> 1) + thor (1.4.0) + tins (1.51.0) + bigdecimal + mize (~> 0.6) + readline + sync + traces (0.18.2) + ttfunk (1.8.0) + bigdecimal (~> 3.1) + typhoeus (1.5.0) + ethon (>= 0.9.0, < 0.16.0) + unicode-display_width (3.2.0) + unicode-emoji (~> 4.1) + unicode-emoji (4.2.0) uri (1.0.3) + yaml (0.4.0) + yard (0.9.38) + yell (2.2.2) + zeitwerk (2.7.4) PLATFORMS x86_64-linux @@ -57,6 +251,7 @@ PLATFORMS DEPENDENCIES asciidoctor (~> 2.0) bundler (~> 2.0) + docopslab-dev (~> 0.1.0) issuer! rake (~> 13.0) rspec (~> 3.0) diff --git a/README.adoc b/README.adoc index be6dddb..f6858f0 100644 --- a/README.adoc +++ b/README.adoc @@ -15,6 +15,8 @@ ifdef::env-github[] endif::[] +// tag::ai-prompt[] +[[overview]] == Overview _Issuer_ lets you define all your GitHub Issues work tickets in one place as YAML, apply defaults, and post them to GitHub Issues in bulk. @@ -29,6 +31,8 @@ _Issuer_ lets you define all your GitHub Issues work tickets in one place as YAM * *Issue validation* with helpful error messages * *GitHub API integration* +// end::ai-prompt[] + Future plans include extending this capability to *Jira* (link:https://github.com/DocOps/issuer/issues/9[#9]), *GitLab* Issues (link:https://github.com/DocOps/issuer/issues/33[#33]), GitHub *Projects*, and other services. toc::[] @@ -154,6 +158,7 @@ For Ruby Bundler usage, prepend `bundle exec ` and for un-aliased Docker usage, [.prompt] issuer example.yml +// tag::user-agent-prompt[] [[imyml-format]] === IMYML File Format @@ -385,6 +390,8 @@ Prints the usage screen. --version:: Prints the version of `issuer`. +// end::user-ai-prompt[] + [[authentication]] === Authentication @@ -494,6 +501,8 @@ In the end, the only thing that is mainly untouched by me are the rspec tests, w This also explains why the terminal output contains emojis. I will probably make those togglable or configurable in the future. +// tag::dev-ai-prompt[] +[[tests]] === Tests The `specs/` directory contains all specifications, requirements, and tests for the Issuer CLI tool. @@ -600,6 +609,9 @@ The API reference includes: This documentation is automatically updated with each gem release. +// end::dev-ai-prompt[] + +[[release-history-management]] === Release History Management As of version 0.2.0, the Release Notes and Changelog are generated using the _ReleaseHx_ tool, which is still in pre-release. @@ -633,6 +645,8 @@ The `releasehx-install.sh` ensures ReleaseHx is up to date. Bug reports and pull requests are welcome on GitHub at https://github.com/DocOps/issuer. + +[[legal]] == Legal The gem is available as open source under the terms of the MIT License. diff --git a/Rakefile b/Rakefile index 41200f2..fd2271f 100644 --- a/Rakefile +++ b/Rakefile @@ -2,11 +2,18 @@ require "bundler/gem_tasks" require "rspec/core/rake_task" require "yaml" -RSpec::Core::RakeTask.new(:spec) do |t| +# Load DocOps Lab development tasks +begin + require 'docopslab/dev' +rescue LoadError + # Skip if not available (e.g., production environment) +end + +RSpec::Core::RakeTask.new(:rspec) do |t| t.pattern = 'specs/tests/rspec/**/*_spec.rb' end -task :default => :spec +task :default => :rspec desc "Setup Vale styles" task :vale_setup do @@ -50,7 +57,7 @@ desc "Run all PR tests locally (same as GitHub Actions)" task :pr_test do puts "🔍 Running all PR tests locally..." puts "\n=== RSpec Tests ===" - Rake::Task[:spec].invoke + Rake::Task[:rspec].invoke puts "\n=== CLI Tests ===" Rake::Task[:cli_test].invoke diff --git a/lib/issuer/apis/github/client.rb b/lib/issuer/apis/github/client.rb index 62afb74..b59c405 100644 --- a/lib/issuer/apis/github/client.rb +++ b/lib/issuer/apis/github/client.rb @@ -56,7 +56,7 @@ def create_issue_rest repo, issue_params params[:assignee] = issue_params[:assignee].strip end - # Handle milestone - only if milestone exists + # Handle milestone; only if milestone exists if issue_params[:milestone] milestone = find_milestone(repo, issue_params[:milestone]) params[:milestone] = milestone.number if milestone @@ -259,7 +259,7 @@ def get_repository_id owner, name def resolve_label_ids repo, label_names # For now, we'll skip complex label ID resolution # GitHub GraphQL API requires label IDs, but REST API uses names - # This is a simplification - in practice, you'd need to fetch and match labels + # This is a simplification; in practice, you'd need to fetch and match labels [] end diff --git a/lib/issuer/cache.rb b/lib/issuer/cache.rb index ab0aa9a..16325dc 100644 --- a/lib/issuer/cache.rb +++ b/lib/issuer/cache.rb @@ -142,7 +142,7 @@ def log_artifact run_id, type, artifact_data elsif summary_section.key?(counter_key) summary_section[counter_key] += 1 else - # Fallback - create the key as string + # Fallback; create the key as string summary_section[counter_key] = 1 end diff --git a/lib/issuer/issue.rb b/lib/issuer/issue.rb index 4e44491..d410d5d 100644 --- a/lib/issuer/issue.rb +++ b/lib/issuer/issue.rb @@ -78,7 +78,7 @@ def initialize issue_data, defaults={} @type = @raw_data['type'] || defaults['type'] @stub = @raw_data.key?('stub') ? @raw_data['stub'] : defaults['stub'] - # For tags, we need special handling - combine defaults and issue tags for later processing + # For tags, we need special handling; combine defaults and issue tags for later processing defaults_tags = Array(defaults['tags']) issue_tags = Array(@raw_data['tags']) @tags = defaults_tags + issue_tags @@ -401,7 +401,7 @@ def wrap_line_with_indentation line, indent_size # Get terminal width, default to 80 if not available terminal_width = ENV['COLUMNS']&.to_i || 80 - # Calculate available width for content (terminal width - indentation) + # Calculate available width for content (terminal width; indentation) available_width = terminal_width - indent_size # If line fits within available width, just return it with indentation diff --git a/lib/issuer/ops.rb b/lib/issuer/ops.rb index 8a73623..e55c284 100644 --- a/lib/issuer/ops.rb +++ b/lib/issuer/ops.rb @@ -14,7 +14,7 @@ module Ops # This method converts scalar strings to proper issue hashes and creates Issue objects # with enhanced defaults processing. It handles both string and hash inputs gracefully. # - # @param issues_data [Array] Raw issue data - can be strings or hashes + # @param issues_data [Array] Raw issue data; can be strings or hashes # @param defaults [Hash] Default values to apply to all issues # @return [Array] Array of processed Issue objects # diff --git a/lib/issuer/sites/github.rb b/lib/issuer/sites/github.rb index 4bfc315..ddba14d 100644 --- a/lib/issuer/sites/github.rb +++ b/lib/issuer/sites/github.rb @@ -77,7 +77,7 @@ def create_issue proj, issue_params params[:assignee] = issue_params[:assignee].strip end - # Handle milestone - only if milestone exists + # Handle milestone; only if milestone exists if issue_params[:milestone] # If milestone is already a number (from convert_issue_to_site_params), use it directly if issue_params[:milestone].is_a?(Integer) From c3fbd5f540b48142514fd9ad3b6f1e2d598b32f0 Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Sat, 27 Dec 2025 12:27:41 -0500 Subject: [PATCH 09/23] chore: remove old vale vocabulary files --- .vale/config/vocabularies/issuer/accept.txt | 63 --------------------- .vale/config/vocabularies/issuer/reject.txt | 21 ------- 2 files changed, 84 deletions(-) delete mode 100644 .vale/config/vocabularies/issuer/accept.txt delete mode 100644 .vale/config/vocabularies/issuer/reject.txt diff --git a/.vale/config/vocabularies/issuer/accept.txt b/.vale/config/vocabularies/issuer/accept.txt deleted file mode 100644 index 4639191..0000000 --- a/.vale/config/vocabularies/issuer/accept.txt +++ /dev/null @@ -1,63 +0,0 @@ -# Project-specific vocabulary for issuer -# These terms are accepted and won't be flagged by spell checkers - -# Project name and variations -issuer -Issuer -IMYML -imyml - -# Technical terms -GitHub -GitLab -Octokit -AsciiDoc -asciidoc -YAML -JSON -APIs -API -CLI -summ -vrsn -proj -metadata -milestones -assignee -repos -repo - -# Common tech abbreviations -dev -config -async -auth -env -vars -bool -bool -bool -timestamp -username -workflow -workflows - -# Ruby/gem specific -Gemfile -gemspec -rspec -RSpec -bundler -Bundler - -# Docker terms -dockerfile -Dockerfile -DocOps -docopslab - -# Proper nouns -Jira -OAuth -README -roadmap diff --git a/.vale/config/vocabularies/issuer/reject.txt b/.vale/config/vocabularies/issuer/reject.txt deleted file mode 100644 index fdf1f5b..0000000 --- a/.vale/config/vocabularies/issuer/reject.txt +++ /dev/null @@ -1,21 +0,0 @@ -# Terms to reject/flag in the issuer project -# These will always be flagged as errors - -# Common misspellings in tech docs -seperately -seperate -recieve -definately -occured -teh -hte -thier -there own -there job - -# Discouraged terms -simply -just -obviously -clearly -easily From 2ca10b18156d198f2a351ff077c64818891cdfe9 Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Sat, 27 Dec 2025 12:34:08 -0500 Subject: [PATCH 10/23] fix: untrack .config/.vendor/ files - Remove 129 vendor files from git tracking - Add .config/.vendor/ to .gitignore - Vendor files should be provided by docopslab-dev gem, not tracked in repo --- .config/.vendor/docopslab/actionlint.yml | 13 - .config/.vendor/docopslab/rubocop.yml | 130 --- .config/.vendor/docopslab/vale.ini | 38 - .../styles/AsciiDoc/ClosedAttributeBlocks.yml | 7 - .../vale/styles/AsciiDoc/ClosedIdQuotes.yml | 7 - .../styles/AsciiDoc/ImageContainsAltText.yml | 8 - .../styles/AsciiDoc/LinkContainsLinkText.yml | 10 - .../styles/AsciiDoc/MatchingDotCallouts.yml | 47 -- .../AsciiDoc/MatchingNumberedCallouts.yml | 62 -- .../AsciiDoc/SequentialNumberedCallouts.yml | 59 -- .../vale/styles/AsciiDoc/UnsetAttributes.yml | 49 -- .../styles/AsciiDoc/ValidAdmonitionBlocks.yml | 30 - .../vale/styles/AsciiDoc/ValidCodeBlocks.yml | 30 - .../vale/styles/AsciiDoc/ValidConditions.yml | 37 - .../vale/styles/AsciiDoc/ValidTableBlocks.yml | 30 - .../DocOpsLab-AsciiDoc/ExplicitSectionIDs.yml | 8 - .../ExtraLineBeforeLevel1.yml | 7 - .../DocOpsLab-AsciiDoc/OneSentencePerLine.yml | 8 - .../DocOpsLab-AsciiDoc/PreferSourceBlocks.yml | 8 - .../DocOpsLab-AsciiDoc/ProperAdmonitions.yml | 8 - .../styles/DocOpsLab-AsciiDoc/ProperDLs.yml | 7 - .../DocOpsLab-AsciiDoc/UncleanListStart.yml | 8 - .../DocOpsLab-Authoring/ButParagraph.yml | 8 - .../styles/DocOpsLab-Authoring/ExNotEg.yml | 8 - .../DocOpsLab-Authoring/LiteralTerms.yml | 20 - .../styles/DocOpsLab-Authoring/Spelling.yml | 679 --------------- .../RedHat-AsciiDoc/ClosedAttributeBlocks.yml | 7 - .../styles/RedHat-AsciiDoc/ClosedIdQuotes.yml | 7 - .../RedHat-AsciiDoc/ImageContainsAltText.yml | 8 - .../IncludeDirectiveOptions.yml | 9 - .../vale/styles/RedHat-AsciiDoc/LICENSE | 21 - .../RedHat-AsciiDoc/LinkContainsLinkText.yml | 8 - .../RedHat-AsciiDoc/MatchingDotCallouts.yml | 47 -- .../MatchingNumberedCallouts.yml | 62 -- .../RedHat-AsciiDoc/PreferXrefForInternal.yml | 9 - .../SequentialNumberedCallouts.yml | 59 -- .../RedHat-AsciiDoc/UnsetAttributes.yml | 8 - .../RedHat-AsciiDoc/ValidCodeBlocks.yml | 30 - .../RedHat-AsciiDoc/ValidConditions.yml | 37 - .../RedHat-AsciiDoc/ValidTableBlocks.yml | 30 - .../vale/styles/RedHat/Abbreviations.yml | 9 - .../vale/styles/RedHat/CaseSensitiveTerms.yml | 333 -------- .../vale/styles/RedHat/Conjunctions.yml | 14 - .../vale/styles/RedHat/ConsciousLanguage.yml | 13 - .../vale/styles/RedHat/Contractions.yml | 44 - .../vale/styles/RedHat/Definitions.yml | 202 ----- .../vale/styles/RedHat/DoNotUseTerms.yml | 27 - .../.vendor/vale/styles/RedHat/Ellipses.yml | 12 - .config/.vendor/vale/styles/RedHat/EmDash.yml | 11 - .../.vendor/vale/styles/RedHat/GitLinks.yml | 12 - .../vale/styles/RedHat/HeadingPunctuation.yml | 11 - .../.vendor/vale/styles/RedHat/Headings.yml | 267 ------ .../.vendor/vale/styles/RedHat/Hyphens.yml | 236 ------ .../styles/RedHat/MergeConflictMarkers.yml | 13 - .../vale/styles/RedHat/ObviousTerms.yml | 16 - .../vale/styles/RedHat/OxfordComma.yml | 9 - .../vale/styles/RedHat/PascalCamelCase.yml | 207 ----- .../vale/styles/RedHat/PassiveVoice.yml | 193 ----- .../styles/RedHat/ProductCentricWriting.yml | 8 - .../vale/styles/RedHat/README-IBM.adoc | 9 - .../vale/styles/RedHat/README-proselint.md | 13 - .../vale/styles/RedHat/README-write-good.md | 28 - .../vale/styles/RedHat/ReadabilityGrade.yml | 9 - .../vale/styles/RedHat/ReleaseNotes.yml | 11 - .../vale/styles/RedHat/RepeatedWords.yml | 16 - .../styles/RedHat/SelfReferentialText.yml | 14 - .../vale/styles/RedHat/SentenceLength.yml | 9 - .../vale/styles/RedHat/SimpleWords.yml | 119 --- .config/.vendor/vale/styles/RedHat/Slash.yml | 103 --- .../vale/styles/RedHat/SmartQuotes.yml | 11 - .../.vendor/vale/styles/RedHat/Spacing.yml | 10 - .../.vendor/vale/styles/RedHat/Spelling.yml | 572 ------------- .../.vendor/vale/styles/RedHat/Symbols.yml | 9 - .../vale/styles/RedHat/TermsErrors.yml | 472 ----------- .../vale/styles/RedHat/TermsSuggestions.yml | 55 -- .../vale/styles/RedHat/TermsWarnings.yml | 77 -- .../vale/styles/RedHat/UserReplacedValues.yml | 16 - .config/.vendor/vale/styles/RedHat/Using.yml | 14 - .../vale/styles/RedHat/collate-output.tmpl | 66 -- .config/.vendor/vale/styles/RedHat/meta.json | 4 - .../config/scripts/ExplicitSectionIDs.tengo | 56 -- .../scripts/ExtraLineBeforeLevel1.tengo | 121 --- .../config/scripts/OneSentencePerLine.tengo | 53 -- .../vale/styles/proselint/Airlinese.yml | 8 - .../vale/styles/proselint/AnimalLabels.yml | 48 -- .../vale/styles/proselint/Annotations.yml | 9 - .../vale/styles/proselint/Apologizing.yml | 8 - .../vale/styles/proselint/Archaisms.yml | 52 -- .config/.vendor/vale/styles/proselint/But.yml | 8 - .../.vendor/vale/styles/proselint/Cliches.yml | 782 ------------------ .../vale/styles/proselint/CorporateSpeak.yml | 30 - .../vale/styles/proselint/Currency.yml | 5 - .../.vendor/vale/styles/proselint/Cursing.yml | 15 - .../vale/styles/proselint/DateCase.yml | 7 - .../vale/styles/proselint/DateMidnight.yml | 7 - .../vale/styles/proselint/DateRedundancy.yml | 10 - .../vale/styles/proselint/DateSpacing.yml | 7 - .../vale/styles/proselint/DenizenLabels.yml | 52 -- .../vale/styles/proselint/Diacritical.yml | 95 --- .../vale/styles/proselint/GenderBias.yml | 45 - .../vale/styles/proselint/GroupTerms.yml | 39 - .../.vendor/vale/styles/proselint/Hedging.yml | 8 - .../vale/styles/proselint/Hyperbole.yml | 6 - .../.vendor/vale/styles/proselint/Jargon.yml | 11 - .../vale/styles/proselint/LGBTOffensive.yml | 13 - .../vale/styles/proselint/LGBTTerms.yml | 15 - .../vale/styles/proselint/Malapropisms.yml | 8 - .../vale/styles/proselint/Needless.yml | 358 -------- .../vale/styles/proselint/Nonwords.yml | 38 - .../vale/styles/proselint/Oxymorons.yml | 22 - .../.vendor/vale/styles/proselint/P-Value.yml | 6 - .../vale/styles/proselint/RASSyndrome.yml | 30 - .../.vendor/vale/styles/proselint/README.md | 12 - .../.vendor/vale/styles/proselint/Skunked.yml | 13 - .../vale/styles/proselint/Spelling.yml | 17 - .../vale/styles/proselint/Typography.yml | 11 - .../vale/styles/proselint/Uncomparables.yml | 50 -- .../.vendor/vale/styles/proselint/Very.yml | 6 - .../.vendor/vale/styles/proselint/meta.json | 17 - .../vale/styles/write-good/Cliches.yml | 702 ---------------- .../vale/styles/write-good/E-Prime.yml | 32 - .../vale/styles/write-good/Illusions.yml | 11 - .../vale/styles/write-good/Passive.yml | 183 ---- .../.vendor/vale/styles/write-good/README.md | 27 - .config/.vendor/vale/styles/write-good/So.yml | 5 - .../vale/styles/write-good/ThereIs.yml | 6 - .../vale/styles/write-good/TooWordy.yml | 221 ----- .../.vendor/vale/styles/write-good/Weasel.yml | 29 - .../.vendor/vale/styles/write-good/meta.json | 4 - .gitignore | 1 + 130 files changed, 1 insertion(+), 8260 deletions(-) delete mode 100644 .config/.vendor/docopslab/actionlint.yml delete mode 100644 .config/.vendor/docopslab/rubocop.yml delete mode 100644 .config/.vendor/docopslab/vale.ini delete mode 100644 .config/.vendor/vale/styles/AsciiDoc/ClosedAttributeBlocks.yml delete mode 100644 .config/.vendor/vale/styles/AsciiDoc/ClosedIdQuotes.yml delete mode 100644 .config/.vendor/vale/styles/AsciiDoc/ImageContainsAltText.yml delete mode 100644 .config/.vendor/vale/styles/AsciiDoc/LinkContainsLinkText.yml delete mode 100644 .config/.vendor/vale/styles/AsciiDoc/MatchingDotCallouts.yml delete mode 100644 .config/.vendor/vale/styles/AsciiDoc/MatchingNumberedCallouts.yml delete mode 100644 .config/.vendor/vale/styles/AsciiDoc/SequentialNumberedCallouts.yml delete mode 100644 .config/.vendor/vale/styles/AsciiDoc/UnsetAttributes.yml delete mode 100644 .config/.vendor/vale/styles/AsciiDoc/ValidAdmonitionBlocks.yml delete mode 100644 .config/.vendor/vale/styles/AsciiDoc/ValidCodeBlocks.yml delete mode 100644 .config/.vendor/vale/styles/AsciiDoc/ValidConditions.yml delete mode 100644 .config/.vendor/vale/styles/AsciiDoc/ValidTableBlocks.yml delete mode 100644 .config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ExplicitSectionIDs.yml delete mode 100644 .config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ExtraLineBeforeLevel1.yml delete mode 100644 .config/.vendor/vale/styles/DocOpsLab-AsciiDoc/OneSentencePerLine.yml delete mode 100644 .config/.vendor/vale/styles/DocOpsLab-AsciiDoc/PreferSourceBlocks.yml delete mode 100644 .config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ProperAdmonitions.yml delete mode 100644 .config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ProperDLs.yml delete mode 100644 .config/.vendor/vale/styles/DocOpsLab-AsciiDoc/UncleanListStart.yml delete mode 100644 .config/.vendor/vale/styles/DocOpsLab-Authoring/ButParagraph.yml delete mode 100644 .config/.vendor/vale/styles/DocOpsLab-Authoring/ExNotEg.yml delete mode 100644 .config/.vendor/vale/styles/DocOpsLab-Authoring/LiteralTerms.yml delete mode 100644 .config/.vendor/vale/styles/DocOpsLab-Authoring/Spelling.yml delete mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/ClosedAttributeBlocks.yml delete mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/ClosedIdQuotes.yml delete mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/ImageContainsAltText.yml delete mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/IncludeDirectiveOptions.yml delete mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/LICENSE delete mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/LinkContainsLinkText.yml delete mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/MatchingDotCallouts.yml delete mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/MatchingNumberedCallouts.yml delete mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/PreferXrefForInternal.yml delete mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/SequentialNumberedCallouts.yml delete mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/UnsetAttributes.yml delete mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/ValidCodeBlocks.yml delete mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/ValidConditions.yml delete mode 100644 .config/.vendor/vale/styles/RedHat-AsciiDoc/ValidTableBlocks.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/Abbreviations.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/CaseSensitiveTerms.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/Conjunctions.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/ConsciousLanguage.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/Contractions.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/Definitions.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/DoNotUseTerms.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/Ellipses.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/EmDash.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/GitLinks.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/HeadingPunctuation.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/Headings.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/Hyphens.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/MergeConflictMarkers.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/ObviousTerms.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/OxfordComma.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/PascalCamelCase.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/PassiveVoice.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/ProductCentricWriting.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/README-IBM.adoc delete mode 100644 .config/.vendor/vale/styles/RedHat/README-proselint.md delete mode 100644 .config/.vendor/vale/styles/RedHat/README-write-good.md delete mode 100644 .config/.vendor/vale/styles/RedHat/ReadabilityGrade.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/ReleaseNotes.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/RepeatedWords.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/SelfReferentialText.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/SentenceLength.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/SimpleWords.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/Slash.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/SmartQuotes.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/Spacing.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/Spelling.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/Symbols.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/TermsErrors.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/TermsSuggestions.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/TermsWarnings.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/UserReplacedValues.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/Using.yml delete mode 100644 .config/.vendor/vale/styles/RedHat/collate-output.tmpl delete mode 100644 .config/.vendor/vale/styles/RedHat/meta.json delete mode 100644 .config/.vendor/vale/styles/config/scripts/ExplicitSectionIDs.tengo delete mode 100644 .config/.vendor/vale/styles/config/scripts/ExtraLineBeforeLevel1.tengo delete mode 100644 .config/.vendor/vale/styles/config/scripts/OneSentencePerLine.tengo delete mode 100644 .config/.vendor/vale/styles/proselint/Airlinese.yml delete mode 100644 .config/.vendor/vale/styles/proselint/AnimalLabels.yml delete mode 100644 .config/.vendor/vale/styles/proselint/Annotations.yml delete mode 100644 .config/.vendor/vale/styles/proselint/Apologizing.yml delete mode 100644 .config/.vendor/vale/styles/proselint/Archaisms.yml delete mode 100644 .config/.vendor/vale/styles/proselint/But.yml delete mode 100644 .config/.vendor/vale/styles/proselint/Cliches.yml delete mode 100644 .config/.vendor/vale/styles/proselint/CorporateSpeak.yml delete mode 100644 .config/.vendor/vale/styles/proselint/Currency.yml delete mode 100644 .config/.vendor/vale/styles/proselint/Cursing.yml delete mode 100644 .config/.vendor/vale/styles/proselint/DateCase.yml delete mode 100644 .config/.vendor/vale/styles/proselint/DateMidnight.yml delete mode 100644 .config/.vendor/vale/styles/proselint/DateRedundancy.yml delete mode 100644 .config/.vendor/vale/styles/proselint/DateSpacing.yml delete mode 100644 .config/.vendor/vale/styles/proselint/DenizenLabels.yml delete mode 100644 .config/.vendor/vale/styles/proselint/Diacritical.yml delete mode 100644 .config/.vendor/vale/styles/proselint/GenderBias.yml delete mode 100644 .config/.vendor/vale/styles/proselint/GroupTerms.yml delete mode 100644 .config/.vendor/vale/styles/proselint/Hedging.yml delete mode 100644 .config/.vendor/vale/styles/proselint/Hyperbole.yml delete mode 100644 .config/.vendor/vale/styles/proselint/Jargon.yml delete mode 100644 .config/.vendor/vale/styles/proselint/LGBTOffensive.yml delete mode 100644 .config/.vendor/vale/styles/proselint/LGBTTerms.yml delete mode 100644 .config/.vendor/vale/styles/proselint/Malapropisms.yml delete mode 100644 .config/.vendor/vale/styles/proselint/Needless.yml delete mode 100644 .config/.vendor/vale/styles/proselint/Nonwords.yml delete mode 100644 .config/.vendor/vale/styles/proselint/Oxymorons.yml delete mode 100644 .config/.vendor/vale/styles/proselint/P-Value.yml delete mode 100644 .config/.vendor/vale/styles/proselint/RASSyndrome.yml delete mode 100644 .config/.vendor/vale/styles/proselint/README.md delete mode 100644 .config/.vendor/vale/styles/proselint/Skunked.yml delete mode 100644 .config/.vendor/vale/styles/proselint/Spelling.yml delete mode 100644 .config/.vendor/vale/styles/proselint/Typography.yml delete mode 100644 .config/.vendor/vale/styles/proselint/Uncomparables.yml delete mode 100644 .config/.vendor/vale/styles/proselint/Very.yml delete mode 100644 .config/.vendor/vale/styles/proselint/meta.json delete mode 100644 .config/.vendor/vale/styles/write-good/Cliches.yml delete mode 100644 .config/.vendor/vale/styles/write-good/E-Prime.yml delete mode 100644 .config/.vendor/vale/styles/write-good/Illusions.yml delete mode 100644 .config/.vendor/vale/styles/write-good/Passive.yml delete mode 100644 .config/.vendor/vale/styles/write-good/README.md delete mode 100644 .config/.vendor/vale/styles/write-good/So.yml delete mode 100644 .config/.vendor/vale/styles/write-good/ThereIs.yml delete mode 100644 .config/.vendor/vale/styles/write-good/TooWordy.yml delete mode 100644 .config/.vendor/vale/styles/write-good/Weasel.yml delete mode 100644 .config/.vendor/vale/styles/write-good/meta.json diff --git a/.config/.vendor/docopslab/actionlint.yml b/.config/.vendor/docopslab/actionlint.yml deleted file mode 100644 index 448aabc..0000000 --- a/.config/.vendor/docopslab/actionlint.yml +++ /dev/null @@ -1,13 +0,0 @@ -# actionlint configuration for DocOps Lab projects -# This file is synced from docopslab-dev gem - -# Disable overly strict rules for common patterns -ignore: - # Allow commonly used but deprecated actions (we'll upgrade gradually) - - 'SC2086:' # shellcheck rule about double quotes - - 'the runner of "ubuntu-latest" is deprecated' - -# Custom shell for shellcheck integration -shellcheck: - enable: true - shell-options: "-e SC2086" # Allow some globbing patterns \ No newline at end of file diff --git a/.config/.vendor/docopslab/rubocop.yml b/.config/.vendor/docopslab/rubocop.yml deleted file mode 100644 index 5760d97..0000000 --- a/.config/.vendor/docopslab/rubocop.yml +++ /dev/null @@ -1,130 +0,0 @@ -# RuboCop configuration for DocOps Lab projects -# This is the baseline configuration distributed via docopslab-dev - -plugins: - - rubocop-rspec - -AllCops: - TargetRubyVersion: 3.2 - NewCops: enable - DisplayCopNames: true - DisplayStyleGuide: true - -Style/MethodDefParentheses: - EnforcedStyle: require_no_parentheses - -Style/MethodCallWithArgsParentheses: - EnforcedStyle: require_parentheses - AllowParenthesesInMultilineCall: true - AllowParenthesesInChaining: true - -# Allow longer lines for documentation -Layout/LineLength: - Max: 120 - AllowedPatterns: - - '\A\s*#.*\z' # Comments - - '\A\s*\*.*\z' # Rdoc comments - -Metrics/MethodLength: - Max: 25 - -# Allow longer blocks for Rake tasks and RSpec -Metrics/BlockLength: - AllowedMethods: - - describe - - context - - feature - - scenario - - let - - let! - - subject - - task - - namespace - Max: 50 - -# Documentation not required for internal tooling -Style/Documentation: - Enabled: false - -# Allow TODO comments -Style/CommentAnnotation: - Keywords: - - TODO - - FIXME - - OPTIMIZE - - HACK - - REVIEW - -Style/CommentedKeyword: - Enabled: false - -Style/StringLiterals: - Enabled: true - EnforcedStyle: single_quotes - -Style/StringLiteralsInInterpolation: - Enabled: true - EnforcedStyle: single_quotes - -Style/FrozenStringLiteralComment: - Enabled: true - EnforcedStyle: always - -Layout/FirstParameterIndentation: - EnforcedStyle: consistent - -Layout/ParameterAlignment: - EnforcedStyle: with_fixed_indentation - -Layout/MultilineMethodCallBraceLayout: - EnforcedStyle: same_line - -Layout/MultilineMethodCallIndentation: - EnforcedStyle: aligned - -Layout/FirstMethodArgumentLineBreak: - Enabled: true - -Layout/TrailingWhitespace: - Enabled: true - -Layout/EmptyLineAfterGuardClause: - Enabled: true - -Layout/HashAlignment: - Enabled: false - -Layout/SpaceAroundOperators: - Enabled: false - -Layout/SpaceAroundEqualsInParameterDefault: - Enabled: false - EnforcedStyle: no_space - -Metrics/AbcSize: - Enabled: false - -Metrics/CyclomaticComplexity: - Enabled: false - -Metrics/PerceivedComplexity: - Enabled: false - -Lint/UnusedMethodArgument: - Enabled: true - -Lint/UselessAssignment: - Enabled: true - -Lint/IneffectiveAccessModifier: - Enabled: true - -Security/YAMLLoad: - Enabled: false # Projects may intentionally use unsafe YAML loading - -Security/Eval: - Enabled: true # Catch and replace with safer alternatives - -# Disable Naming/PredicateMethod - we use generate_, run_, sync_, etc for actions -Naming/PredicateMethod: - Enabled: false \ No newline at end of file diff --git a/.config/.vendor/docopslab/vale.ini b/.config/.vendor/docopslab/vale.ini deleted file mode 100644 index 7108af2..0000000 --- a/.config/.vendor/docopslab/vale.ini +++ /dev/null @@ -1,38 +0,0 @@ -# DocOps Lab Vale Base Configuration -# This provides sensible defaults for DocOps Lab projects - -# General settings -MinAlertLevel = suggestion - -# DocOps Lab-managed styles -StylesPath = .vendor/vale/styles - -# Third-party packages -Packages = RedHat, AsciiDoc - -[asciidoctor] -attribute-missing = drop -experimental = YES -safe = unsafe - -[*] -BasedOnStyles = RedHat, AsciiDoc, DocOpsLab-AsciiDoc, DocOpsLab-Authoring -RedHat.PascalCamelCase = suggestion -RedHat.Headings = suggestion -RedHat.SentenceLength = suggestion -RedHat.TermsErrors = suggestion -RedHat.TermsWarnings = suggestion -RedHat.Spelling = NO -RedHat.CaseSensitiveTerms = NO -RedHat.GitLinks = NO -RedHat.Using = NO -RedHat.Slash = suggestion -RedHat.DoNotUseTerms = suggestion -RedHat.HeadingPunctuation = NO -RedHat.Hyphens = suggestion - -[#.adoc] -BasedOnStyles = RedHat, AsciiDoc, DocOpsLab-AsciiDoc, DocOpsLab-Authoring - -# Syntax rule customizations -RedHat-AsciiDoc.LinkContainsLinkText = suggestion diff --git a/.config/.vendor/vale/styles/AsciiDoc/ClosedAttributeBlocks.yml b/.config/.vendor/vale/styles/AsciiDoc/ClosedAttributeBlocks.yml deleted file mode 100644 index b3e65fc..0000000 --- a/.config/.vendor/vale/styles/AsciiDoc/ClosedAttributeBlocks.yml +++ /dev/null @@ -1,7 +0,0 @@ ---- -extends: existence -scope: raw -level: error -message: "Attribute block is not closed." -raw: - - '(?" - callout_regex := "^<(\\.)>" - - for line in text.split(scope, "\n") { - // trim trailing whitespace - line = text.trim_space(line) - if text.re_match(codeblock_callout_regex, line) { - //restart for new listingblock - num_callouts = 0 - //account for lines with multiple callouts - num_callouts_in_line := text.count(line, "<.>") - if num_callouts_in_line > 1 { - num_codeblock_callouts = num_codeblock_callouts + num_callouts_in_line - } else { - num_codeblock_callouts++ - } - } - - if text.re_match(callout_regex, line) { - num_callouts++ - if num_callouts > num_codeblock_callouts { - start := text.index(scope, line) - matches = append(matches, {begin: start, end: start + len(line)}) - } - if num_callouts == num_codeblock_callouts { - num_callouts = 0 - num_codeblock_callouts = 0 - } - } - } diff --git a/.config/.vendor/vale/styles/AsciiDoc/MatchingNumberedCallouts.yml b/.config/.vendor/vale/styles/AsciiDoc/MatchingNumberedCallouts.yml deleted file mode 100644 index 7e2c6f1..0000000 --- a/.config/.vendor/vale/styles/AsciiDoc/MatchingNumberedCallouts.yml +++ /dev/null @@ -1,62 +0,0 @@ ---- -extends: script -message: "Corresponding callout not found." -level: warning -link: https://docs.asciidoctor.org/asciidoc/latest/verbatim/callouts/ -scope: raw -script: | - text := import("text") - matches := [] - - // clean out multi-line comments - scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") - //add a newline, it might be missing - scope += "\n" - - codeblock_callout_regex := ".+(<\\d+>)+" - callout_regex := "^<(\\d+)>" - codeblock_callouts := [] - inside := false - found := false - num_callouts := 0 - - num_lines := len(text.split(scope, "\n")) - - for line in text.split(scope, "\n") { - // trim trailing whitespace - line = text.trim_space(line) - if text.re_match(codeblock_callout_regex, line) { - inside = true - //account for lines with multiple callouts - for i := 1; i < num_lines; i++ { - //text.contains must be str, not regex - str := "<" + i + ">" - if text.contains(line, str) { - codeblock_callouts = append(codeblock_callouts, i) - } - } - } else if text.re_match(callout_regex, line) { - inside = false - found = false - num_callouts = 1 - for i in codeblock_callouts { - //cast int > string - j := text.itoa(i) - str := "<" + j + ">" - if text.contains(line, str) { - //setting found allows us to loop through the list of possible matches - found = true - } - num_callouts++ - } - if !found { - start := text.index(scope, line) - matches = append(matches, {begin: start, end: start + len(line)}) - } - } else if codeblock_callouts && inside == false { - //cycled through num_callouts, reset for next codeblock - if num_callouts == len(codeblock_callouts) { - codeblock_callouts = [] - } - } - } \ No newline at end of file diff --git a/.config/.vendor/vale/styles/AsciiDoc/SequentialNumberedCallouts.yml b/.config/.vendor/vale/styles/AsciiDoc/SequentialNumberedCallouts.yml deleted file mode 100644 index 0a195f5..0000000 --- a/.config/.vendor/vale/styles/AsciiDoc/SequentialNumberedCallouts.yml +++ /dev/null @@ -1,59 +0,0 @@ ---- -extends: script -message: "Numbered callout does not follow sequentially." -level: warning -link: https://docs.asciidoctor.org/asciidoc/latest/verbatim/callouts/ -scope: raw -script: | - text := import("text") - matches := [] - - // clean out multi-line comments - scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") - //add a newline, it might be missing - scope += "\n" - - prev_num := 0 - callout_regex := "^<(\\d+)>" - listingblock_delim_regex := "^-{4,}$" - if_regex := "^ifdef::|ifndef::" - endif_regex := "^endif::\\[\\]" - inside_if := false - - for line in text.split(scope, "\n") { - // trim trailing whitespace - line = text.trim_space(line) - - // check if we're entering a conditional block - if text.re_match(if_regex, line) { - inside_if = true - } else if text.re_match(endif_regex, line) { - inside_if = false - } - - //reset count if we hit a listing block delimiter - if text.re_match(listingblock_delim_regex, line) { - prev_num = 0 - } - - //only count callouts where there are no ifdefs - if !inside_if { - if text.re_match(callout_regex, line) { - callout := text.re_find("<(\\d+)>", line) - for key, value in callout { - //trim angle brackets from string - trimmed := callout[key][0]["text"] - trimmed = text.trim_prefix(trimmed, "<") - trimmed = text.trim_suffix(trimmed, ">") - //cast string > int - num := text.atoi(trimmed) - //start counting - if num != prev_num+1 { - start := text.index(scope, line) - matches = append(matches, {begin: start, end: start + len(line)}) - } - prev_num = num - } - } - } - } diff --git a/.config/.vendor/vale/styles/AsciiDoc/UnsetAttributes.yml b/.config/.vendor/vale/styles/AsciiDoc/UnsetAttributes.yml deleted file mode 100644 index 4945d20..0000000 --- a/.config/.vendor/vale/styles/AsciiDoc/UnsetAttributes.yml +++ /dev/null @@ -1,49 +0,0 @@ ---- -extends: script -level: suggestion -message: "Set attribute directive does not have a corresponding unset attribute directive." -link: https://docs.asciidoctor.org/asciidoc/latest/attributes/unset-attributes/#unset-a-document-attribute-in-the-body -scope: raw -script: | - text := import("text") - matches := [] - - // trim extra whitespace - scope = text.trim_space(scope) - // add a newline, it might be missing - scope += "\n" - // clean out multi-line comments - scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") - - attr_regex := "^:[\\w-_]+:.*$" - context_mod_docs_regex := "^:context|_content-type|_mod-docs-content-type:.*$" - attr_name_regex := ":[\\w-_]+:" - attr_name := "" - unset_attr_pref := "" - unset_attr_suff := "" - - for line in text.split(scope, "\n") { - if text.re_match(attr_regex, line) { - if !text.re_match(context_mod_docs_regex, line) { - start := text.index(scope, line) - matches = append(matches, {begin: start, end: start + len(line)}) - // re_find returns an array holding all matches - attr_name = ((text.re_find(attr_name_regex, line))[0][0])["text"] - unset_attr_pref = `^:!` + text.trim_prefix(attr_name, `:`) - unset_attr_suff = `^` + text.trim_suffix(attr_name, `:`) + `!:` - // loop through lines for every attr found - for line in text.split(scope, "\n") { - if text.re_match(unset_attr_pref, line) { - if len(matches) > 0 { - // remove the most recently added match - matches = matches[:len(matches)-1] - } else if text.re_match(unset_attr_suff, line) { - if len(matches) > 0 { - matches = matches[:len(matches)-1] - } - } - } - } - } - } - } diff --git a/.config/.vendor/vale/styles/AsciiDoc/ValidAdmonitionBlocks.yml b/.config/.vendor/vale/styles/AsciiDoc/ValidAdmonitionBlocks.yml deleted file mode 100644 index 1ebe018..0000000 --- a/.config/.vendor/vale/styles/AsciiDoc/ValidAdmonitionBlocks.yml +++ /dev/null @@ -1,30 +0,0 @@ ---- -extends: script -level: error -message: "Unterminated admonition block found in file." -link: https://docs.asciidoctor.org/asciidoc/latest/blocks/admonitions/ -scope: raw -script: | - text := import("text") - matches := [] - - // clean out multi-line comments - scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") - //add a newline, it might be missing - scope += "\n" - - admon_delim_regex := "^={4}$" - count := 0 - - for line in text.split(scope, "\n") { - // trim trailing whitespace - line = text.trim_space(line) - if text.re_match(admon_delim_regex, line) { - count += 1 - start := text.index(scope, line) - matches = append(matches, {begin: start, end: start + len(line)}) - } else if count > 1 { - count = 0 // admonition block is closed, reset the count - matches = [] - } - } diff --git a/.config/.vendor/vale/styles/AsciiDoc/ValidCodeBlocks.yml b/.config/.vendor/vale/styles/AsciiDoc/ValidCodeBlocks.yml deleted file mode 100644 index f7af5c1..0000000 --- a/.config/.vendor/vale/styles/AsciiDoc/ValidCodeBlocks.yml +++ /dev/null @@ -1,30 +0,0 @@ ---- -extends: script -level: error -message: "Unterminated listing block found in file." -link: https://docs.asciidoctor.org/asciidoc/latest/verbatim/listing-blocks/ -scope: raw -script: | - text := import("text") - matches := [] - - // clean out multi-line comments - scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") - //add a newline, it might be missing - scope += "\n" - - listingblock_delim_regex := "^-{4}$" - count := 0 - - for line in text.split(scope, "\n") { - // trim trailing whitespace - line = text.trim_space(line) - if text.re_match(listingblock_delim_regex, line) { - count += 1 - start := text.index(scope, line) - matches = append(matches, {begin: start, end: start + len(line)}) - } else if count > 1 { - count = 0 // listing block is closed, reset the count - matches = [] - } - } diff --git a/.config/.vendor/vale/styles/AsciiDoc/ValidConditions.yml b/.config/.vendor/vale/styles/AsciiDoc/ValidConditions.yml deleted file mode 100644 index 4da39c5..0000000 --- a/.config/.vendor/vale/styles/AsciiDoc/ValidConditions.yml +++ /dev/null @@ -1,37 +0,0 @@ ---- -extends: script -level: error -message: "File contains unbalanced if statements. Review the file to ensure it contains matching opening and closing if statements." -link: https://docs.asciidoctor.org/asciidoc/latest/directives/ifdef-ifndef/ -scope: raw -script: | - text := import("text") - matches := [] - - // clean out multi-line comments - scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") - //add a newline, it might be missing - scope += "\n" - - if_regex := "^ifdef::.+\\[\\]" - ifn_regex := "^ifndef::.+\\[\\]" - ifeval_regex := "^ifeval::\\[.+\\]" - endif_regex := "^endif::.*\\[\\]" - - for line in text.split(scope, "\n") { - // trim trailing whitespace - line = text.trim_space(line) - if text.re_match(if_regex, line) || text.re_match(ifn_regex, line) || text.re_match(ifeval_regex, line) { - start := text.index(scope, line) - matches = append(matches, {begin: start, end: start + len(line)}) - } else if text.re_match(endif_regex, line) { - if len(matches) > 0 { - //remove the most recently added open ifdef match - matches = matches[:len(matches)-1] - } else if len(matches) == 0 { - //add orphan endif::[] statements - start := text.index(scope, line) - matches = append(matches, {begin: start, end: start + len(line)}) - } - } - } diff --git a/.config/.vendor/vale/styles/AsciiDoc/ValidTableBlocks.yml b/.config/.vendor/vale/styles/AsciiDoc/ValidTableBlocks.yml deleted file mode 100644 index ecc74ff..0000000 --- a/.config/.vendor/vale/styles/AsciiDoc/ValidTableBlocks.yml +++ /dev/null @@ -1,30 +0,0 @@ ---- -extends: script -level: error -message: "Unterminated table block found in file." -link: https://docs.asciidoctor.org/asciidoc/latest/tables/build-a-basic-table/ -scope: raw -script: | - text := import("text") - matches := [] - - // clean out multi-line comments - scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") - //add a newline, it might be missing - scope += "\n" - - tbl_delim_regex := "^\\|={3,}$" - count := 0 - - for line in text.split(scope, "\n") { - // trim trailing whitespace - line = text.trim_space(line) - if text.re_match(tbl_delim_regex, line) { - count += 1 - start := text.index(scope, line) - matches = append(matches, {begin: start, end: start + len(line)}) - } else if count > 1 { - count = 0 //code block is closed, reset the count - matches = [] - } - } diff --git a/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ExplicitSectionIDs.yml b/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ExplicitSectionIDs.yml deleted file mode 100644 index d656699..0000000 --- a/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ExplicitSectionIDs.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -extends: script -scope: raw -level: warning -message: "Section heading must be preceded by an explicit ID in format [[section-id]] on the line above." -link: https://docs.asciidoctor.org/asciidoc/latest/sections/custom-ids/ -description: "Ensures all section headings have explicit IDs for better cross-referencing and stable links." -script: ExplicitSectionIDs.tengo diff --git a/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ExtraLineBeforeLevel1.yml b/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ExtraLineBeforeLevel1.yml deleted file mode 100644 index d4bf678..0000000 --- a/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ExtraLineBeforeLevel1.yml +++ /dev/null @@ -1,7 +0,0 @@ ---- -extends: script -scope: raw -level: warning -message: "Level-1 (==) headings must be preceded by two blank lines and an explicit [[section-id]] line." -description: "Enforces: blank, blank, [[id]], then '== Heading'." -script: ExtraLineBeforeLevel1.tengo diff --git a/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/OneSentencePerLine.yml b/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/OneSentencePerLine.yml deleted file mode 100644 index 211bb51..0000000 --- a/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/OneSentencePerLine.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -extends: script -scope: raw -level: warning -message: "Each sentence should be on its own line for better version control diffs and readability." -link: https://docs.asciidoctor.org/asciidoc/latest/writing/style/#one-sentence-per-line -description: "Encourages writing one sentence per line to improve readability and version control diffs." -script: OneSentencePerLine.tengo diff --git a/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/PreferSourceBlocks.yml b/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/PreferSourceBlocks.yml deleted file mode 100644 index 63c3f87..0000000 --- a/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/PreferSourceBlocks.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -extends: existence -scope: raw -level: error -message: "Use '[source,lang]' with '----' delimiters instead of markdown-style code blocks with '```'." -link: https://docs.asciidoctor.org/asciidoc/latest/verbatim/source-blocks/ -raw: - - '```\w*\n[\s\S]*?\n```' \ No newline at end of file diff --git a/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ProperAdmonitions.yml b/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ProperAdmonitions.yml deleted file mode 100644 index 4486b22..0000000 --- a/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ProperAdmonitions.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -extends: existence -scope: raw -level: error -message: "Use proper AsciiDoc admonition blocks instead of manual formatting." -link: https://docs.asciidoctor.org/asciidoc/latest/blocks/admonitions/ -raw: - - '^\*\*NOTE:\*\*|^\*\*TIP:\*\*|^\*\*IMPORTANT:\*\*|^\*\*CAUTION:\*\*|^\*\*WARNING:\*\*' \ No newline at end of file diff --git a/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ProperDLs.yml b/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ProperDLs.yml deleted file mode 100644 index f979346..0000000 --- a/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/ProperDLs.yml +++ /dev/null @@ -1,7 +0,0 @@ -extends: existence -message: "Use AsciiDoc definition list syntax (term:: definition) instead of bold/italic text followed by a colon." -link: https://docs.asciidoctor.org/asciidoc/latest/lists/description/ -level: error -scope: raw -raw: - - (?m)^(\* )?\*\*?(.+)(:\*\*?|\*\*?:)[\s\n]+(.+)$ diff --git a/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/UncleanListStart.yml b/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/UncleanListStart.yml deleted file mode 100644 index 2eec922..0000000 --- a/.config/.vendor/vale/styles/DocOpsLab-AsciiDoc/UncleanListStart.yml +++ /dev/null @@ -1,8 +0,0 @@ -extends: existence -message: | - Add a blank line before starting a list after a sentence ending in a colon. -level: warning -scope: raw -raw: - - '(?m)^.*(?" - callout_regex := "^<(\\.)>" - - for line in text.split(scope, "\n") { - // trim trailing whitespace - line = text.trim_space(line) - if text.re_match(codeblock_callout_regex, line) { - //restart for new listingblock - num_callouts = 0 - //account for lines with multiple callouts - num_callouts_in_line := text.count(line, "<.>") - if num_callouts_in_line > 1 { - num_codeblock_callouts = num_codeblock_callouts + num_callouts_in_line - } else { - num_codeblock_callouts++ - } - } - - if text.re_match(callout_regex, line) { - num_callouts++ - if num_callouts > num_codeblock_callouts { - start := text.index(scope, line) - matches = append(matches, {begin: start, end: start + len(line)}) - } - if num_callouts == num_codeblock_callouts { - num_callouts = 0 - num_codeblock_callouts = 0 - } - } - } diff --git a/.config/.vendor/vale/styles/RedHat-AsciiDoc/MatchingNumberedCallouts.yml b/.config/.vendor/vale/styles/RedHat-AsciiDoc/MatchingNumberedCallouts.yml deleted file mode 100644 index 7e2c6f1..0000000 --- a/.config/.vendor/vale/styles/RedHat-AsciiDoc/MatchingNumberedCallouts.yml +++ /dev/null @@ -1,62 +0,0 @@ ---- -extends: script -message: "Corresponding callout not found." -level: warning -link: https://docs.asciidoctor.org/asciidoc/latest/verbatim/callouts/ -scope: raw -script: | - text := import("text") - matches := [] - - // clean out multi-line comments - scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") - //add a newline, it might be missing - scope += "\n" - - codeblock_callout_regex := ".+(<\\d+>)+" - callout_regex := "^<(\\d+)>" - codeblock_callouts := [] - inside := false - found := false - num_callouts := 0 - - num_lines := len(text.split(scope, "\n")) - - for line in text.split(scope, "\n") { - // trim trailing whitespace - line = text.trim_space(line) - if text.re_match(codeblock_callout_regex, line) { - inside = true - //account for lines with multiple callouts - for i := 1; i < num_lines; i++ { - //text.contains must be str, not regex - str := "<" + i + ">" - if text.contains(line, str) { - codeblock_callouts = append(codeblock_callouts, i) - } - } - } else if text.re_match(callout_regex, line) { - inside = false - found = false - num_callouts = 1 - for i in codeblock_callouts { - //cast int > string - j := text.itoa(i) - str := "<" + j + ">" - if text.contains(line, str) { - //setting found allows us to loop through the list of possible matches - found = true - } - num_callouts++ - } - if !found { - start := text.index(scope, line) - matches = append(matches, {begin: start, end: start + len(line)}) - } - } else if codeblock_callouts && inside == false { - //cycled through num_callouts, reset for next codeblock - if num_callouts == len(codeblock_callouts) { - codeblock_callouts = [] - } - } - } \ No newline at end of file diff --git a/.config/.vendor/vale/styles/RedHat-AsciiDoc/PreferXrefForInternal.yml b/.config/.vendor/vale/styles/RedHat-AsciiDoc/PreferXrefForInternal.yml deleted file mode 100644 index 07056d0..0000000 --- a/.config/.vendor/vale/styles/RedHat-AsciiDoc/PreferXrefForInternal.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -# DocOps Lab AsciiDoc Style: Xref Usage -extends: existence -scope: raw -level: suggestion -message: "Consider using 'xref:' for internal cross-references instead of 'link:' for better maintainability." -link: https://docs.asciidoctor.org/asciidoc/latest/macros/xref/ -raw: - - 'link:(?![http|https|mailto|ftp]).*\.adoc' \ No newline at end of file diff --git a/.config/.vendor/vale/styles/RedHat-AsciiDoc/SequentialNumberedCallouts.yml b/.config/.vendor/vale/styles/RedHat-AsciiDoc/SequentialNumberedCallouts.yml deleted file mode 100644 index 0a195f5..0000000 --- a/.config/.vendor/vale/styles/RedHat-AsciiDoc/SequentialNumberedCallouts.yml +++ /dev/null @@ -1,59 +0,0 @@ ---- -extends: script -message: "Numbered callout does not follow sequentially." -level: warning -link: https://docs.asciidoctor.org/asciidoc/latest/verbatim/callouts/ -scope: raw -script: | - text := import("text") - matches := [] - - // clean out multi-line comments - scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") - //add a newline, it might be missing - scope += "\n" - - prev_num := 0 - callout_regex := "^<(\\d+)>" - listingblock_delim_regex := "^-{4,}$" - if_regex := "^ifdef::|ifndef::" - endif_regex := "^endif::\\[\\]" - inside_if := false - - for line in text.split(scope, "\n") { - // trim trailing whitespace - line = text.trim_space(line) - - // check if we're entering a conditional block - if text.re_match(if_regex, line) { - inside_if = true - } else if text.re_match(endif_regex, line) { - inside_if = false - } - - //reset count if we hit a listing block delimiter - if text.re_match(listingblock_delim_regex, line) { - prev_num = 0 - } - - //only count callouts where there are no ifdefs - if !inside_if { - if text.re_match(callout_regex, line) { - callout := text.re_find("<(\\d+)>", line) - for key, value in callout { - //trim angle brackets from string - trimmed := callout[key][0]["text"] - trimmed = text.trim_prefix(trimmed, "<") - trimmed = text.trim_suffix(trimmed, ">") - //cast string > int - num := text.atoi(trimmed) - //start counting - if num != prev_num+1 { - start := text.index(scope, line) - matches = append(matches, {begin: start, end: start + len(line)}) - } - prev_num = num - } - } - } - } diff --git a/.config/.vendor/vale/styles/RedHat-AsciiDoc/UnsetAttributes.yml b/.config/.vendor/vale/styles/RedHat-AsciiDoc/UnsetAttributes.yml deleted file mode 100644 index 1ffc384..0000000 --- a/.config/.vendor/vale/styles/RedHat-AsciiDoc/UnsetAttributes.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -extends: existence -scope: raw -level: error -link: https://docs.asciidoctor.org/asciidoc/latest/attributes/attribute-entries/ -message: "Unset attribute '%s' found." -raw: - - '(? 1 { - count = 0 // listing block is closed, reset the count - matches = [] - } - } diff --git a/.config/.vendor/vale/styles/RedHat-AsciiDoc/ValidConditions.yml b/.config/.vendor/vale/styles/RedHat-AsciiDoc/ValidConditions.yml deleted file mode 100644 index 4da39c5..0000000 --- a/.config/.vendor/vale/styles/RedHat-AsciiDoc/ValidConditions.yml +++ /dev/null @@ -1,37 +0,0 @@ ---- -extends: script -level: error -message: "File contains unbalanced if statements. Review the file to ensure it contains matching opening and closing if statements." -link: https://docs.asciidoctor.org/asciidoc/latest/directives/ifdef-ifndef/ -scope: raw -script: | - text := import("text") - matches := [] - - // clean out multi-line comments - scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") - //add a newline, it might be missing - scope += "\n" - - if_regex := "^ifdef::.+\\[\\]" - ifn_regex := "^ifndef::.+\\[\\]" - ifeval_regex := "^ifeval::\\[.+\\]" - endif_regex := "^endif::.*\\[\\]" - - for line in text.split(scope, "\n") { - // trim trailing whitespace - line = text.trim_space(line) - if text.re_match(if_regex, line) || text.re_match(ifn_regex, line) || text.re_match(ifeval_regex, line) { - start := text.index(scope, line) - matches = append(matches, {begin: start, end: start + len(line)}) - } else if text.re_match(endif_regex, line) { - if len(matches) > 0 { - //remove the most recently added open ifdef match - matches = matches[:len(matches)-1] - } else if len(matches) == 0 { - //add orphan endif::[] statements - start := text.index(scope, line) - matches = append(matches, {begin: start, end: start + len(line)}) - } - } - } diff --git a/.config/.vendor/vale/styles/RedHat-AsciiDoc/ValidTableBlocks.yml b/.config/.vendor/vale/styles/RedHat-AsciiDoc/ValidTableBlocks.yml deleted file mode 100644 index ecc74ff..0000000 --- a/.config/.vendor/vale/styles/RedHat-AsciiDoc/ValidTableBlocks.yml +++ /dev/null @@ -1,30 +0,0 @@ ---- -extends: script -level: error -message: "Unterminated table block found in file." -link: https://docs.asciidoctor.org/asciidoc/latest/tables/build-a-basic-table/ -scope: raw -script: | - text := import("text") - matches := [] - - // clean out multi-line comments - scope = text.re_replace("(?s) *(\n////.*?////\n)", scope, "") - //add a newline, it might be missing - scope += "\n" - - tbl_delim_regex := "^\\|={3,}$" - count := 0 - - for line in text.split(scope, "\n") { - // trim trailing whitespace - line = text.trim_space(line) - if text.re_match(tbl_delim_regex, line) { - count += 1 - start := text.index(scope, line) - matches = append(matches, {begin: start, end: start + len(line)}) - } else if count > 1 { - count = 0 //code block is closed, reset the count - matches = [] - } - } diff --git a/.config/.vendor/vale/styles/RedHat/Abbreviations.yml b/.config/.vendor/vale/styles/RedHat/Abbreviations.yml deleted file mode 100644 index ba6c021..0000000 --- a/.config/.vendor/vale/styles/RedHat/Abbreviations.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -extends: existence -level: error -link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#abbreviations -message: "Do not use periods in all-uppercase abbreviations such as '%s'." -nonword: true -# source: "IBM - Periods with abbreviations, p. 5" -tokens: - - '\b(?:[A-Z]\.){3,5}' diff --git a/.config/.vendor/vale/styles/RedHat/CaseSensitiveTerms.yml b/.config/.vendor/vale/styles/RedHat/CaseSensitiveTerms.yml deleted file mode 100644 index 6c4f281..0000000 --- a/.config/.vendor/vale/styles/RedHat/CaseSensitiveTerms.yml +++ /dev/null @@ -1,333 +0,0 @@ ---- -extends: substitution -ignorecase: false -level: warning -link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#case-sensitive-terms -message: "Use '%s' rather than '%s'." -action: - name: replace -swap: - "(?{7}\s.*$' diff --git a/.config/.vendor/vale/styles/RedHat/ObviousTerms.yml b/.config/.vendor/vale/styles/RedHat/ObviousTerms.yml deleted file mode 100644 index fd3f2a3..0000000 --- a/.config/.vendor/vale/styles/RedHat/ObviousTerms.yml +++ /dev/null @@ -1,16 +0,0 @@ ---- -extends: existence -level: suggestion -# link: -message: "Consider not documenting %s because it is self-explanatory." -scope: sentence -# source: -action: - name: remove -tokens: - - 'User field' - - 'Username field' - - 'Password field' - - 'Mail field' - - 'Description field' - - 'Name field' diff --git a/.config/.vendor/vale/styles/RedHat/OxfordComma.yml b/.config/.vendor/vale/styles/RedHat/OxfordComma.yml deleted file mode 100644 index 64268cc..0000000 --- a/.config/.vendor/vale/styles/RedHat/OxfordComma.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -extends: existence -level: suggestion -link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#oxford-comma -message: "Use the Oxford comma in '%s'." -scope: sentence -nonword: true -tokens: - - '(?:[^\s,]+,){1,} \w+ (?:and|or) \w+[.?!]' diff --git a/.config/.vendor/vale/styles/RedHat/PascalCamelCase.yml b/.config/.vendor/vale/styles/RedHat/PascalCamelCase.yml deleted file mode 100644 index 9156810..0000000 --- a/.config/.vendor/vale/styles/RedHat/PascalCamelCase.yml +++ /dev/null @@ -1,207 +0,0 @@ ---- -extends: existence -ignorecase: false -level: suggestion -scope: [list, sentence] -link: https://redhat-documentation.github.io/asciidoc-markup-conventions -message: "Consider wrapping this Pascal or Camel case term ('%s') in backticks." -# source: https://github.com/redhat-documentation/vale-at-red-hat/tree/main/.vale/styles/RedHat/PascalCamelCase.yml -tokens: - #PascalCase - - ([A-Z]+[a-z]+){2,} - - ([A-Z]+[a-z]+[A-Z]+){1,} - - ([A-Z]+[A-Z]+[a-z]+){1,} - #camelCase - - ([a-z]+)([A-Z]+[a-z]+){1,} -exceptions: - - '\b[A-Z]{2,}s?' - - 'vCPUs?' - - 3scale - - AGPLv - - AMQ - - API - - AppStream - - AsciiDoc - - AssertJ - - BaseOS - - BitBucket - - BlueStore - - CaaS - - camelCase - - CapEx - - CentOS - - CephFS - - CheckTree - - ClassLoader - - CloudForms - - CodeLlama - - CodeReady - - ConfigMaps? - - ConnectX - - Convert2RHEL - - CoreOS - - DaemonSet - - DDoS - - DeepSeek - - DevOps - - DevWorkspace - - DialoGPT - - DNSSec - - EleutherAI - - eServer - - eXpress - - eXtenSion - - FaaS - - FCoE - - FFmpeg - - FileStore - - FireWire - - FreeRADIUS - - GbE - - GBps - - GiB - - GitHub - - GitLab - - GitOps - - GlusterFS - - GNUPro - - GnuTLS - - GraalVM - - GraphQL - - GTID - - HashBase - - HdrHistogram - - Helm - - HyperCLOVAX - - HyperShift - - IaaS - - IBoE - - IconBurst - - IdM - - IKEv - - InfiniBand - - InnoDB - - IntelliJ - - IntelliSense - - IPoIB - - IPsec - - IPv - - ISeries - - JackFram - - JavaScript - - JBoss - - JetBrains - - JUnit - - kBps - - KiB - - KTLim - - LangTags - - LGPLv - - libOSMesa - - LibreOffice - - libXNVCtrl - - LightPulse - - LinuxONE - - LiquidIO - - LLaDA - - ManageIQ - - MariaDB - - MaziyarPanahi - - MBps - - MegaRAID - - MiB - - MicroProfile - - MoE - - MongoDB - - MoreUtils - - MySQL - - NetBIOS - - NetcoredebugOutput - - NetWeaver - - NetworkManager - - NetXen - - NetXtreme - - NFSv - - NMState - - NousResearch - - NuGet - - NVMe - - OAuth - - objectClass - - OmniSharp - - OneConnect - - OpenELM - - OpenEXR - - OpenHermes - - OpenID - - OpenIPMI - - OpenJDK - - OpenRAN - - OpenRewrite - - OpenSCAP - - OpenShift - - OpenSSH - - OpenSSL - - OpenStack - - OpenTelemetry - - OpenTracing - - OperatorHub - - OpEx - - OSBuild - - OTel - - PaaS - - PackageKit - - PathTools - - PCIe - - PipeWire - - PostgreSQL - - PostScript - - PowerPC - - PowerShell - - ProLiant - - PulseAudio - - PyPA - - PyPI - - QLogic - - ReaR - - RedBoot - - relaxngDatatype - - RESTEasy - - RHEL - - RoCE - - SaaS - - SeaBIOS - - SELinux - - SmallRye - - SmartNIC - - SmartState - - SmolLM - - SQLite - - StarOffice - - STMicroelectronics - - SuperLU - - SysV - - TBps - - TheBloke - - TiB - - TinyLlama - - TuneD - - TypeScript - - UltraSPARC - - USBGuard - - vCenter - - vDisk - - vHost - - VMware - - vSphere - - vSwitch - - vLLM - - WebAuthn - - WebSocket - - WireGuard - - XEmacs - - xPaaS - - XString - - XWayland - - YouTube - - ZCentral diff --git a/.config/.vendor/vale/styles/RedHat/PassiveVoice.yml b/.config/.vendor/vale/styles/RedHat/PassiveVoice.yml deleted file mode 100644 index 782a364..0000000 --- a/.config/.vendor/vale/styles/RedHat/PassiveVoice.yml +++ /dev/null @@ -1,193 +0,0 @@ ---- -extends: existence -ignorecase: true -level: suggestion -link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#passive-voice -message: "'%s' is passive voice. In general, use active voice. Consult the style guide for acceptable use of passive voice." -# source: "https://redhat-documentation.github.io/supplementary-style-guide/#prerequisites; IBM - Voice, p.35" -raw: - - \b(am|are|were|being|is|been|was|be)\b\s* -tokens: - - '[\w]+ed' - - awoken - - beat - - become - - been - - begun - - bent - - beset - - bet - - bid - - bidden - - bitten - - bled - - blown - - born - - bought - - bound - - bred - - broadcast - - broken - - brought - - built - - burnt - - burst - - cast - - caught - - chosen - - clung - - come - - cost - - crept - - cut - - dealt - - dived - - done - - drawn - - dreamt - - driven - - drunk - - dug - - eaten - - fallen - - fed - - felt - - fit - - fled - - flown - - flung - - forbidden - - foregone - - forgiven - - forgotten - - forsaken - - fought - - found - - frozen - - given - - gone - - gotten - - ground - - grown - - heard - - held - - hidden - - hit - - hung - - hurt - - kept - - knelt - - knit - - known - - laid - - lain - - leapt - - learnt - - led - - left - - lent - - let - - lighted - - lost - - made - - meant - - met - - misspelt - - mistaken - - mown - - overcome - - overdone - - overtaken - - overthrown - - paid - - pled - - proven - - put - - quit - - read - - rid - - ridden - - risen - - run - - rung - - said - - sat - - sawn - - seen - - sent - - set - - sewn - - shaken - - shaven - - shed - - shod - - shone - - shorn - - shot - - shown - - shrunk - - shut - - slain - - slept - - slid - - slit - - slung - - smitten - - sold - - sought - - sown - - sped - - spent - - spilt - - spit - - split - - spoken - - spread - - sprung - - spun - - stolen - - stood - - stridden - - striven - - struck - - strung - - stuck - - stung - - stunk - - sung - - sunk - - swept - - swollen - - sworn - - swum - - swung - - taken - - taught - - thought - - thrived - - thrown - - thrust - - told - - torn - - trodden - - understood - - upheld - - upset - - wed - - wept - - withheld - - withstood - - woken - - won - - worn - - wound - - woven - - written - - wrung -exceptions: - - deprecated - - displayed - - imported - - supported - - tested - - trusted diff --git a/.config/.vendor/vale/styles/RedHat/ProductCentricWriting.yml b/.config/.vendor/vale/styles/RedHat/ProductCentricWriting.yml deleted file mode 100644 index a9ffb7c..0000000 --- a/.config/.vendor/vale/styles/RedHat/ProductCentricWriting.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -extends: existence -ignorecase: true -level: suggestion -link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#product-centric-writing -message: "Do not use transitive verb constructions like '%s' to grant abilities to inanimate objects. Whenever possible, use direct, user-focused sentences where the subject of the sentence performs the action." -tokens: - - '(allows?|enables?|lets?|permits?)\s(you|customers|the customer|the user|users)' diff --git a/.config/.vendor/vale/styles/RedHat/README-IBM.adoc b/.config/.vendor/vale/styles/RedHat/README-IBM.adoc deleted file mode 100644 index 7e27b01..0000000 --- a/.config/.vendor/vale/styles/RedHat/README-IBM.adoc +++ /dev/null @@ -1,9 +0,0 @@ -= README for Rules from the IBM Style Guide - -All rights for the IBM Style Guide belong to IBM. - -Our sources of inspiration: - -* link:https://github.com/errata-ai/IBM[The primary Vale implementation of the IBM Style Guide] - -* https://www.ibm.com/developerworks/library/styleguidelines/index.html[The DeveloperWorks version of the IBM Style Guide] diff --git a/.config/.vendor/vale/styles/RedHat/README-proselint.md b/.config/.vendor/vale/styles/RedHat/README-proselint.md deleted file mode 100644 index b08cef9..0000000 --- a/.config/.vendor/vale/styles/RedHat/README-proselint.md +++ /dev/null @@ -1,13 +0,0 @@ - -Copyright © 2014–2015, Jordan Suchow, Michael Pacer, and Lara A. Ross -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/.config/.vendor/vale/styles/RedHat/README-write-good.md b/.config/.vendor/vale/styles/RedHat/README-write-good.md deleted file mode 100644 index ba919b6..0000000 --- a/.config/.vendor/vale/styles/RedHat/README-write-good.md +++ /dev/null @@ -1,28 +0,0 @@ - -Based on [write-good](https://github.com/btford/write-good). - -> Naive linter for English prose for developers who can't write good and wanna learn to do other stuff good too. - -``` -The MIT License (MIT) - -Copyright (c) 2014 Brian Ford - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` diff --git a/.config/.vendor/vale/styles/RedHat/ReadabilityGrade.yml b/.config/.vendor/vale/styles/RedHat/ReadabilityGrade.yml deleted file mode 100644 index 1af30bd..0000000 --- a/.config/.vendor/vale/styles/RedHat/ReadabilityGrade.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -extends: readability -grade: 9 -message: "Simplify your language. The calculated Flesch–Kincaid grade level of %s is above the recommended reading grade level of 9." -link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#readability-grade -level: suggestion -metrics: - - Flesch-Kincaid - diff --git a/.config/.vendor/vale/styles/RedHat/ReleaseNotes.yml b/.config/.vendor/vale/styles/RedHat/ReleaseNotes.yml deleted file mode 100644 index b83ebb6..0000000 --- a/.config/.vendor/vale/styles/RedHat/ReleaseNotes.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- -extends: substitution -ignorecase: false -level: suggestion -link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#release-notes -message: "For release notes, consider using '%s' rather than '%s'." -# source: "https://redhat-documentation.github.io/supplementary-style-guide/#release-notes" -# swap maps tokens in form of bad: good -swap: - Now: With this update - Previously: Before this update diff --git a/.config/.vendor/vale/styles/RedHat/RepeatedWords.yml b/.config/.vendor/vale/styles/RedHat/RepeatedWords.yml deleted file mode 100644 index af8a6b5..0000000 --- a/.config/.vendor/vale/styles/RedHat/RepeatedWords.yml +++ /dev/null @@ -1,16 +0,0 @@ ---- -extends: repetition -message: "'%s' is repeated." -level: warning -link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#repeated-words -ignorecase: false -alpha: true -action: - name: edit - params: - - regex - - '(\w+)(\s\w+)' # pattern - - "$1" # replace -tokens: - - '[^\s\.]+' - - '[^\s]+' diff --git a/.config/.vendor/vale/styles/RedHat/SelfReferentialText.yml b/.config/.vendor/vale/styles/RedHat/SelfReferentialText.yml deleted file mode 100644 index 2b33ec1..0000000 --- a/.config/.vendor/vale/styles/RedHat/SelfReferentialText.yml +++ /dev/null @@ -1,14 +0,0 @@ ---- -extends: existence -ignorecase: true -level: suggestion -link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#self-referential-text -message: "Avoid using self-referential text such as '%s'." -# source: "IBM - Audience and medium, p. 22" -tokens: - - this topic - - this module - - this assembly - - this chapter - - this section - - this subsection diff --git a/.config/.vendor/vale/styles/RedHat/SentenceLength.yml b/.config/.vendor/vale/styles/RedHat/SentenceLength.yml deleted file mode 100644 index f899448..0000000 --- a/.config/.vendor/vale/styles/RedHat/SentenceLength.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -extends: occurrence -level: suggestion -link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#sentence-length -message: "Try to keep sentences to an average of 32 words or fewer." -scope: sentence -# source: "IBM - Conversational style" -max: 32 -token: \b(\w+)\b diff --git a/.config/.vendor/vale/styles/RedHat/SimpleWords.yml b/.config/.vendor/vale/styles/RedHat/SimpleWords.yml deleted file mode 100644 index dbdb983..0000000 --- a/.config/.vendor/vale/styles/RedHat/SimpleWords.yml +++ /dev/null @@ -1,119 +0,0 @@ ---- -extends: substitution -ignorecase: true -level: suggestion -link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#simple-words -message: "Use simple language. Consider using '%s' rather than '%s'." -action: - name: replace -swap: - "approximate(?:ly)?": about - "objective(?! C?)": aim|goal - absent: none|not here - abundance: plenty - accentuate: stress - accompany: go with - accomplish: carry out|do - accorded: given - accordingly: so - accrue: add - accurate: right|exact - acquiesce: agree - acquire: get|buy - addressees: you - adjacent to: next to - adjustment: change - admissible: allowed - advantageous: helpful - advise: tell - aggregate: total - aircraft: plane - alleviate: ease - allocate: assign|divide - alternatively: or - alternatives: choices|options - ameliorate: improve - amend: change - anticipate: expect - apparent: clear|plain - ascertain: discover|find out - assistance: help - attain: meet - attempt: try - authorize: allow - belated: late - bestow: give - cease: stop|end - collaborate: work together - commence: begin - compensate: pay - component: part - comprise: form|include - concerning: about - confer: give|award - consequently: so - consolidate: merge - constitutes: forms - contains: has - convene: meet - demonstrate: show|prove - depart: leave - designate: choose - desire: want|wish - determine: decide|find - detrimental: bad|harmful - disclose: share|tell - discontinue: stop - disseminate: send|give - eliminate: end - elucidate: explain - employ: use - enclosed: inside|included - encounter: meet - endeavor: try - enumerate: count - equitable: fair - equivalent: equal - exclusively: only - expedite: hurry - facilitate: ease - females: women - finalize: complete|finish - frequently: often - identical: same - incorrect: wrong - indication: sign - initiate: start|begin - itemized: listed - jeopardize: risk - liaise: work with|partner with - maintain: keep|support - methodology: method - modify: change - monitor: check|watch - multiple: many - necessitate: cause - notify: tell - numerous: many - obligate: bind|compel - optimum: best|most - permit: let - portion: part - possess: own - previous: earlier - previously: before - prioritize: rank - procure: buy - provide: give|offer - purchase: buy - relocate: move - solicit: request - state-of-the-art: latest - subsequent: later|next - substantial: large - sufficient: enough - terminate: end - transmit: send - utilization: use - utilize: use - utilizing: using diff --git a/.config/.vendor/vale/styles/RedHat/Slash.yml b/.config/.vendor/vale/styles/RedHat/Slash.yml deleted file mode 100644 index e33624c..0000000 --- a/.config/.vendor/vale/styles/RedHat/Slash.yml +++ /dev/null @@ -1,103 +0,0 @@ -extends: existence -ignorecase: true -level: warning -link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#slash -message: "Use either 'or' or 'and' in '%s'" -scope: - - sentence - - heading -tokens: - - '(?__' - - '<[a-z_]+-[a-z_-]+>' \ No newline at end of file diff --git a/.config/.vendor/vale/styles/RedHat/Using.yml b/.config/.vendor/vale/styles/RedHat/Using.yml deleted file mode 100644 index 97f5700..0000000 --- a/.config/.vendor/vale/styles/RedHat/Using.yml +++ /dev/null @@ -1,14 +0,0 @@ ---- -extends: sequence -message: "Use 'by using' instead of 'using' when it follows a noun for clarity and grammatical correctness." -link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#using -level: warning -action: - name: edit - params: - - regex - - '(\w+)( using)' # pattern - - "$1 by using" # replace -tokens: - - tag: NN|NNP|NNPS|NNS - - pattern: \busing\b diff --git a/.config/.vendor/vale/styles/RedHat/collate-output.tmpl b/.config/.vendor/vale/styles/RedHat/collate-output.tmpl deleted file mode 100644 index 449aa42..0000000 --- a/.config/.vendor/vale/styles/RedHat/collate-output.tmpl +++ /dev/null @@ -1,66 +0,0 @@ -{{- /* See https://github.com/errata-ai/vale/issues/614 */ -}} -{{- /* See https://vale.sh/manual/output/ */ -}} - -{{- /* Keep track of our various counts */ -}} - -{{- $e := 0 -}} -{{- $w := 0 -}} -{{- $s := 0 -}} -{{- $f := 0 -}} - -{{- /* Range over the linted files */ -}} - -{{- range .Files}} -{{$table := newTable true}} - -{{- $f = add1 $f -}} -{{- .Path | underline | indent 1 -}} -{{- "\n" -}} - -{{- $msgToLoc := dict -}} -{{- $msgToLvl := dict -}} -{{- $msgToChk := dict -}} - -{{- /* Range over the file's alerts */ -}} - -{{- range .Alerts -}} - -{{- $error := "" -}} -{{- if eq .Severity "error" -}} - {{- $error = .Severity | red -}} - {{- $e = add1 $e -}} -{{- else if eq .Severity "warning" -}} - {{- $error = .Severity | yellow -}} - {{- $w = add1 $w -}} -{{- else -}} - {{- $error = .Severity | blue -}} - {{- $s = add1 $s -}} -{{- end}} - -{{- $loc := printf "%d:%d" .Line (index .Span 0) -}} - -{{- $locations := get $msgToLoc .Message -}} - -{{- $_ := set $msgToLoc .Message (cat $locations $loc) -}} -{{- $_ := set $msgToLvl .Message $error -}} -{{- $_ := set $msgToChk .Message .Check -}} - -{{end -}} - -{{- range keys $msgToLoc -}} - -{{- $msg := . -}} -{{- $loc := trimPrefix "," ((splitList " " (get $msgToLoc $msg)) | join ",") -}} -{{- $lvl := get $msgToLvl $msg -}} -{{- $chk := get $msgToChk $msg -}} - -{{- $row := list $loc $lvl $msg $chk | toStrings -}} -{{- $table = addRow $table $row -}} - -{{end -}} - -{{- $table = renderTable $table -}} - -{{end}} - -{{- $e}} {{"errors" | red}}, {{$w}} {{"warnings" | yellow}} and {{$s}} {{"suggestions" | blue}} in {{$f}} {{$f | int | plural "file" "files"}}. diff --git a/.config/.vendor/vale/styles/RedHat/meta.json b/.config/.vendor/vale/styles/RedHat/meta.json deleted file mode 100644 index 6099c80..0000000 --- a/.config/.vendor/vale/styles/RedHat/meta.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "feed": "https://github.com/redhat-documentation/vale-at-red-hat/releases.atom", - "vale_version": ">=2.20.0" -} diff --git a/.config/.vendor/vale/styles/config/scripts/ExplicitSectionIDs.tengo b/.config/.vendor/vale/styles/config/scripts/ExplicitSectionIDs.tengo deleted file mode 100644 index 08ed5c6..0000000 --- a/.config/.vendor/vale/styles/config/scripts/ExplicitSectionIDs.tengo +++ /dev/null @@ -1,56 +0,0 @@ -text := import("text") - -matches := [] -lines := text.split(scope, "\n") - -// byte starts (CRLF-safe) -starts := [] -run := 0 -i := 0 -for i < len(lines) { - starts = append(starts, run) - run = run + len(lines[i]) + 1 - i = i + 1 -} - -idRe := `^\[\[[A-Za-z0-9_-]+\]\]$` -h2plusRe := `^={2,}\s+.+$` -commentRe := `^\s*//` -condRe := `^\s*(ifdef|ifndef|ifeval)::` - -j := 0 -for j < len(lines) { - line := lines[j] - - // Check if this is a section heading (level 2+) - if text.re_match(h2plusRe, line) { - // Walk backward from j-1 to find the ID, skipping comments/conditionals - hasID := false - k := j - 1 - - for k >= 0 { - candidate := text.trim_space(lines[k]) - - // Skip empty lines, comments, and conditionals - if candidate == "" || text.re_match(commentRe, candidate) || text.re_match(condRe, candidate) { - k = k - 1 - continue - } - - // Check if this line is an ID - if text.re_match(idRe, candidate) { - hasID = true - } - - // Stop at first non-skippable line - break - } - - if !hasID { - begin := starts[j] - end := begin + len(line) - matches = append(matches, {"begin": begin, "end": end}) - } - } - j = j + 1 -} diff --git a/.config/.vendor/vale/styles/config/scripts/ExtraLineBeforeLevel1.tengo b/.config/.vendor/vale/styles/config/scripts/ExtraLineBeforeLevel1.tengo deleted file mode 100644 index 1ae9105..0000000 --- a/.config/.vendor/vale/styles/config/scripts/ExtraLineBeforeLevel1.tengo +++ /dev/null @@ -1,121 +0,0 @@ -text := import("text") - -matches := [] -lines := text.split(scope, "\n") - -// byte starts (CRLF-safe) -starts := [] -run := 0 -i := 0 -for i < len(lines) { - starts = append(starts, run) - run = run + len(lines[i]) + 1 - i = i + 1 -} - -commentRe := `^\s*//` -condRe := `^\s*(ifdef|ifndef|ifeval)::` -idRe := `^\[\[[A-Za-z0-9_-]+\]\]$` -h1Re := `^==\s+.+$` - -j := 0 -for j < len(lines) { - line := lines[j] - - // Check if this is a level-1 heading - if text.re_match(h1Re, line) { - // Step 1: Walk backward from heading to find ID (required) - k := j - 1 - idLineNum := -1 - - // Skip backwards over comments/conditionals between ID and heading - for k >= 0 { - candidate := text.trim_space(lines[k]) - - // Skip comments and conditionals - if text.re_match(commentRe, candidate) || text.re_match(condRe, candidate) { - k = k - 1 - continue - } - - // If blank, no ID found - if candidate == "" { - break - } - - // Check if this is the ID - if text.re_match(idRe, candidate) { - idLineNum = k - } - - // Stop at first non-comment/conditional line - break - } - - // If no ID was found, flag this heading - if idLineNum == -1 { - begin := starts[j] - end := begin + len(line) - matches = append(matches, {"begin": begin, "end": end}) - j = j + 1 - continue - } - - // Step 2: Walk backward from ID to find start of section header block - // Section header includes: opening conditionals/comments that are adjacent to ID (no blanks between) - m := idLineNum - 1 - sectionStart := idLineNum - - for m >= 0 { - candidate := text.trim_space(lines[m]) - - // If blank, stop - section header block ends here - if candidate == "" { - break - } - - // If comment or conditional, it's part of section header block - if text.re_match(commentRe, candidate) || text.re_match(condRe, candidate) { - sectionStart = m - m = m - 1 - continue - } - - // Hit other content, stop - break - } - - // Step 3: Count blank lines immediately before section header block start - n := sectionStart - 1 - blanks := 0 - - for n >= 0 { - candidate := text.trim_space(lines[n]) - - // Count consecutive blank lines - if candidate == "" { - blanks = blanks + 1 - n = n - 1 - continue - } - - // Hit non-blank, stop counting - break - } - - // If we reached the start of file without hitting content, don't require blanks - if n < 0 { - j = j + 1 - continue - } - - // Require exactly 2 blank lines before the section header block - if blanks != 2 { - begin := starts[j] - end := begin + len(line) - matches = append(matches, {"begin": begin, "end": end}) - } - } - - j = j + 1 -} diff --git a/.config/.vendor/vale/styles/config/scripts/OneSentencePerLine.tengo b/.config/.vendor/vale/styles/config/scripts/OneSentencePerLine.tengo deleted file mode 100644 index f236635..0000000 --- a/.config/.vendor/vale/styles/config/scripts/OneSentencePerLine.tengo +++ /dev/null @@ -1,53 +0,0 @@ -text := import("text") - -matches := [] - -lines := text.split(scope, "\n") - -starts := [] -run := 0 -i := 0 -for i < len(lines) { - line := lines[i] - starts = append(starts, run) - run = run + len(line) + 1 - i = i + 1 -} - -// require an alnum/closer BEFORE .!? to avoid leading "." list markers -boundary := `[A-Za-z0-9\)\]"'][.!?]['")\]]*[ \t]+[A-Z]` - -j := 0 -for j < len(lines) { - line := lines[j] - - // skip attribute/table/heading lines - if text.re_match(`^[:|=]`, line) { - j = j + 1 - continue - } - - // skip numbered list items (e.g., "1. Something") unless prefaced by comment chars - // Allow: // 1. Something or # 1. Another thing - // Don't allow: 1. Something - if text.re_match(`^\d+\.\s+\w`, line) && !text.re_match(`^[/#]+\s*\d+\.\s+\w`, line) { - j = j + 1 - continue - } - - // skip ALL commented lines that start with number and period (like "# 1. Something") - if text.re_match(`^[/#]+\s*\d+\.\s`, line) { - j = j + 1 - continue - } - - if text.re_match(boundary, line) { - begin := starts[j] - end := begin + len(line) - matches = append(matches, {"begin": begin, "end": end}) - } - - j = j + 1 -} - -// no explicit return diff --git a/.config/.vendor/vale/styles/proselint/Airlinese.yml b/.config/.vendor/vale/styles/proselint/Airlinese.yml deleted file mode 100644 index a6ae9c1..0000000 --- a/.config/.vendor/vale/styles/proselint/Airlinese.yml +++ /dev/null @@ -1,8 +0,0 @@ -extends: existence -message: "'%s' is airlinese." -ignorecase: true -level: error -tokens: - - enplan(?:e|ed|ing|ement) - - deplan(?:e|ed|ing|ement) - - taking off momentarily diff --git a/.config/.vendor/vale/styles/proselint/AnimalLabels.yml b/.config/.vendor/vale/styles/proselint/AnimalLabels.yml deleted file mode 100644 index b92e06f..0000000 --- a/.config/.vendor/vale/styles/proselint/AnimalLabels.yml +++ /dev/null @@ -1,48 +0,0 @@ -extends: substitution -message: "Consider using '%s' instead of '%s'." -level: error -action: - name: replace -swap: - (?:bull|ox)-like: taurine - (?:calf|veal)-like: vituline - (?:crow|raven)-like: corvine - (?:leopard|panther)-like: pardine - bird-like: avine - centipede-like: scolopendrine - crab-like: cancrine - crocodile-like: crocodiline - deer-like: damine - eagle-like: aquiline - earthworm-like: lumbricine - falcon-like: falconine - ferine: wild animal-like - fish-like: piscine - fox-like: vulpine - frog-like: ranine - goat-like: hircine - goose-like: anserine - gull-like: laridine - hare-like: leporine - hawk-like: accipitrine - hippopotamus-like: hippopotamine - lizard-like: lacertine - mongoose-like: viverrine - mouse-like: murine - ostrich-like: struthionine - peacock-like: pavonine - porcupine-like: hystricine - rattlesnake-like: crotaline - sable-like: zibeline - sheep-like: ovine - shrew-like: soricine - sparrow-like: passerine - swallow-like: hirundine - swine-like: suilline - tiger-like: tigrine - viper-like: viperine - vulture-like: vulturine - wasp-like: vespine - wolf-like: lupine - woodpecker-like: picine - zebra-like: zebrine diff --git a/.config/.vendor/vale/styles/proselint/Annotations.yml b/.config/.vendor/vale/styles/proselint/Annotations.yml deleted file mode 100644 index dcb24f4..0000000 --- a/.config/.vendor/vale/styles/proselint/Annotations.yml +++ /dev/null @@ -1,9 +0,0 @@ -extends: existence -message: "'%s' left in text." -ignorecase: false -level: error -tokens: - - XXX - - FIXME - - TODO - - NOTE diff --git a/.config/.vendor/vale/styles/proselint/Apologizing.yml b/.config/.vendor/vale/styles/proselint/Apologizing.yml deleted file mode 100644 index 11088aa..0000000 --- a/.config/.vendor/vale/styles/proselint/Apologizing.yml +++ /dev/null @@ -1,8 +0,0 @@ -extends: existence -message: "Excessive apologizing: '%s'" -ignorecase: true -level: error -action: - name: remove -tokens: - - More research is needed diff --git a/.config/.vendor/vale/styles/proselint/Archaisms.yml b/.config/.vendor/vale/styles/proselint/Archaisms.yml deleted file mode 100644 index c8df9ab..0000000 --- a/.config/.vendor/vale/styles/proselint/Archaisms.yml +++ /dev/null @@ -1,52 +0,0 @@ -extends: existence -message: "'%s' is archaic." -ignorecase: true -level: error -tokens: - - alack - - anent - - begat - - belike - - betimes - - boughten - - brocage - - brokage - - camarade - - chiefer - - chiefest - - Christiana - - completely obsolescent - - cozen - - divers - - deflexion - - fain - - forsooth - - foreclose from - - haply - - howbeit - - illumine - - in sooth - - maugre - - meseems - - methinks - - nigh - - peradventure - - perchance - - saith - - shew - - sistren - - spake - - to wit - - verily - - whilom - - withal - - wot - - enclosed please find - - please find enclosed - - enclosed herewith - - enclosed herein - - inforce - - ex postfacto - - foreclose from - - forewent - - for ever diff --git a/.config/.vendor/vale/styles/proselint/But.yml b/.config/.vendor/vale/styles/proselint/But.yml deleted file mode 100644 index 0e2c32b..0000000 --- a/.config/.vendor/vale/styles/proselint/But.yml +++ /dev/null @@ -1,8 +0,0 @@ -extends: existence -message: "Do not start a paragraph with a 'but'." -level: error -scope: paragraph -action: - name: remove -tokens: - - ^But diff --git a/.config/.vendor/vale/styles/proselint/Cliches.yml b/.config/.vendor/vale/styles/proselint/Cliches.yml deleted file mode 100644 index c56183c..0000000 --- a/.config/.vendor/vale/styles/proselint/Cliches.yml +++ /dev/null @@ -1,782 +0,0 @@ -extends: existence -message: "'%s' is a cliche." -level: error -ignorecase: true -tokens: - - a chip off the old block - - a clean slate - - a dark and stormy night - - a far cry - - a fate worse than death - - a fine kettle of fish - - a loose cannon - - a penny saved is a penny earned - - a tough row to hoe - - a word to the wise - - ace in the hole - - acid test - - add insult to injury - - against all odds - - air your dirty laundry - - alas and alack - - all fun and games - - all hell broke loose - - all in a day's work - - all talk, no action - - all thumbs - - all your eggs in one basket - - all's fair in love and war - - all's well that ends well - - almighty dollar - - American as apple pie - - an axe to grind - - another day, another dollar - - armed to the teeth - - as luck would have it - - as old as time - - as the crow flies - - at loose ends - - at my wits end - - at the end of the day - - avoid like the plague - - babe in the woods - - back against the wall - - back in the saddle - - back to square one - - back to the drawing board - - bad to the bone - - badge of honor - - bald faced liar - - bald-faced lie - - ballpark figure - - banging your head against a brick wall - - baptism by fire - - barking up the wrong tree - - bat out of hell - - be all and end all - - beat a dead horse - - beat around the bush - - been there, done that - - beggars can't be choosers - - behind the eight ball - - bend over backwards - - benefit of the doubt - - bent out of shape - - best thing since sliced bread - - bet your bottom dollar - - better half - - better late than never - - better mousetrap - - better safe than sorry - - between a rock and a hard place - - between a rock and a hard place - - between Scylla and Charybdis - - between the devil and the deep blue see - - betwixt and between - - beyond the pale - - bide your time - - big as life - - big cheese - - big fish in a small pond - - big man on campus - - bigger they are the harder they fall - - bird in the hand - - bird's eye view - - birds and the bees - - birds of a feather flock together - - bit the hand that feeds you - - bite the bullet - - bite the dust - - bitten off more than he can chew - - black as coal - - black as pitch - - black as the ace of spades - - blast from the past - - bleeding heart - - blessing in disguise - - blind ambition - - blind as a bat - - blind leading the blind - - blissful ignorance - - blood is thicker than water - - blood sweat and tears - - blow a fuse - - blow off steam - - blow your own horn - - blushing bride - - boils down to - - bolt from the blue - - bone to pick - - bored stiff - - bored to tears - - bottomless pit - - boys will be boys - - bright and early - - brings home the bacon - - broad across the beam - - broken record - - brought back to reality - - bulk large - - bull by the horns - - bull in a china shop - - burn the midnight oil - - burning question - - burning the candle at both ends - - burst your bubble - - bury the hatchet - - busy as a bee - - but that's another story - - by hook or by crook - - call a spade a spade - - called onto the carpet - - calm before the storm - - can of worms - - can't cut the mustard - - can't hold a candle to - - case of mistaken identity - - cast aspersions - - cat got your tongue - - cat's meow - - caught in the crossfire - - caught red-handed - - chase a red herring - - checkered past - - chomping at the bit - - cleanliness is next to godliness - - clear as a bell - - clear as mud - - close to the vest - - cock and bull story - - cold shoulder - - come hell or high water - - comparing apples and oranges - - compleat - - conspicuous by its absence - - cool as a cucumber - - cool, calm, and collected - - cost a king's ransom - - count your blessings - - crack of dawn - - crash course - - creature comforts - - cross that bridge when you come to it - - crushing blow - - cry like a baby - - cry me a river - - cry over spilt milk - - crystal clear - - crystal clear - - curiosity killed the cat - - cut and dried - - cut through the red tape - - cut to the chase - - cute as a bugs ear - - cute as a button - - cute as a puppy - - cuts to the quick - - cutting edge - - dark before the dawn - - day in, day out - - dead as a doornail - - decision-making process - - devil is in the details - - dime a dozen - - divide and conquer - - dog and pony show - - dog days - - dog eat dog - - dog tired - - don't burn your bridges - - don't count your chickens - - don't look a gift horse in the mouth - - don't rock the boat - - don't step on anyone's toes - - don't take any wooden nickels - - down and out - - down at the heels - - down in the dumps - - down the hatch - - down to earth - - draw the line - - dressed to kill - - dressed to the nines - - drives me up the wall - - dubious distinction - - dull as dishwater - - duly authorized - - dyed in the wool - - eagle eye - - ear to the ground - - early bird catches the worm - - easier said than done - - easy as pie - - eat your heart out - - eat your words - - eleventh hour - - even the playing field - - every dog has its day - - every fiber of my being - - everything but the kitchen sink - - eye for an eye - - eyes peeled - - face the music - - facts of life - - fair weather friend - - fall by the wayside - - fan the flames - - far be it from me - - fast and loose - - feast or famine - - feather your nest - - feathered friends - - few and far between - - fifteen minutes of fame - - fills the bill - - filthy vermin - - fine kettle of fish - - first and foremost - - fish out of water - - fishing for a compliment - - fit as a fiddle - - fit the bill - - fit to be tied - - flash in the pan - - flat as a pancake - - flip your lid - - flog a dead horse - - fly by night - - fly the coop - - follow your heart - - for all intents and purposes - - for free - - for the birds - - for what it's worth - - force of nature - - force to be reckoned with - - forgive and forget - - fox in the henhouse - - free and easy - - free as a bird - - fresh as a daisy - - full steam ahead - - fun in the sun - - garbage in, garbage out - - gentle as a lamb - - get a kick out of - - get a leg up - - get down and dirty - - get the lead out - - get to the bottom of - - get with the program - - get your feet wet - - gets my goat - - gilding the lily - - gilding the lily - - give and take - - go against the grain - - go at it tooth and nail - - go for broke - - go him one better - - go the extra mile - - go with the flow - - goes without saying - - good as gold - - good deed for the day - - good things come to those who wait - - good time was had by all - - good times were had by all - - greased lightning - - greek to me - - green thumb - - green-eyed monster - - grist for the mill - - growing like a weed - - hair of the dog - - hand to mouth - - happy as a clam - - happy as a lark - - hasn't a clue - - have a nice day - - have a short fuse - - have high hopes - - have the last laugh - - haven't got a row to hoe - - he's got his hands full - - head honcho - - head over heels - - hear a pin drop - - heard it through the grapevine - - heart's content - - heavy as lead - - hem and haw - - high and dry - - high and mighty - - high as a kite - - his own worst enemy - - his work cut out for him - - hit paydirt - - hither and yon - - Hobson's choice - - hold your head up high - - hold your horses - - hold your own - - hold your tongue - - honest as the day is long - - horns of a dilemma - - horns of a dilemma - - horse of a different color - - hot under the collar - - hour of need - - I beg to differ - - icing on the cake - - if the shoe fits - - if the shoe were on the other foot - - if you catch my drift - - in a jam - - in a jiffy - - in a nutshell - - in a pig's eye - - in a pinch - - in a word - - in hot water - - in light of - - in the final analysis - - in the gutter - - in the last analysis - - in the nick of time - - in the thick of it - - in your dreams - - innocent bystander - - it ain't over till the fat lady sings - - it goes without saying - - it takes all kinds - - it takes one to know one - - it's a small world - - it's not what you know, it's who you know - - it's only a matter of time - - ivory tower - - Jack of all trades - - jockey for position - - jog your memory - - joined at the hip - - judge a book by its cover - - jump down your throat - - jump in with both feet - - jump on the bandwagon - - jump the gun - - jump to conclusions - - just a hop, skip, and a jump - - just the ticket - - justice is blind - - keep a stiff upper lip - - keep an eye on - - keep it simple, stupid - - keep the home fires burning - - keep up with the Joneses - - keep your chin up - - keep your fingers crossed - - kick the bucket - - kick up your heels - - kick your feet up - - kid in a candy store - - kill two birds with one stone - - kiss of death - - knock it out of the park - - knock on wood - - knock your socks off - - know him from Adam - - know the ropes - - know the score - - knuckle down - - knuckle sandwich - - knuckle under - - labor of love - - ladder of success - - land on your feet - - lap of luxury - - last but not least - - last but not least - - last hurrah - - last-ditch effort - - law of the jungle - - law of the land - - lay down the law - - leaps and bounds - - let sleeping dogs lie - - let the cat out of the bag - - let the good times roll - - let your hair down - - let's talk turkey - - letter perfect - - lick your wounds - - lies like a rug - - life's a bitch - - life's a grind - - light at the end of the tunnel - - lighter than a feather - - lighter than air - - like clockwork - - like father like son - - like taking candy from a baby - - like there's no tomorrow - - lion's share - - live and learn - - live and let live - - long and short of it - - long lost love - - look before you leap - - look down your nose - - look what the cat dragged in - - looking a gift horse in the mouth - - looks like death warmed over - - loose cannon - - lose your head - - lose your temper - - loud as a horn - - lounge lizard - - loved and lost - - low man on the totem pole - - luck of the draw - - luck of the Irish - - make a mockery of - - make hay while the sun shines - - make money hand over fist - - make my day - - make the best of a bad situation - - make the best of it - - make your blood boil - - male chauvinism - - man of few words - - man's best friend - - mark my words - - meaningful dialogue - - missed the boat on that one - - moment in the sun - - moment of glory - - moment of truth - - moment of truth - - money to burn - - more in sorrow than in anger - - more power to you - - more sinned against than sinning - - more than one way to skin a cat - - movers and shakers - - moving experience - - my better half - - naked as a jaybird - - naked truth - - neat as a pin - - needle in a haystack - - needless to say - - neither here nor there - - never look back - - never say never - - nip and tuck - - nip in the bud - - nip it in the bud - - no guts, no glory - - no love lost - - no pain, no gain - - no skin off my back - - no stone unturned - - no time like the present - - no use crying over spilled milk - - nose to the grindstone - - not a hope in hell - - not a minute's peace - - not in my backyard - - not playing with a full deck - - not the end of the world - - not written in stone - - nothing to sneeze at - - nothing ventured nothing gained - - now we're cooking - - off the top of my head - - off the wagon - - off the wall - - old hat - - olden days - - older and wiser - - older than dirt - - older than Methuselah - - on a roll - - on cloud nine - - on pins and needles - - on the bandwagon - - on the money - - on the nose - - on the rocks - - on the same page - - on the spot - - on the tip of my tongue - - on the wagon - - on thin ice - - once bitten, twice shy - - one bad apple doesn't spoil the bushel - - one born every minute - - one brick short - - one foot in the grave - - one in a million - - one red cent - - only game in town - - open a can of worms - - open and shut case - - open the flood gates - - opportunity doesn't knock twice - - out of pocket - - out of sight, out of mind - - out of the frying pan into the fire - - out of the woods - - out on a limb - - over a barrel - - over the hump - - pain and suffering - - pain in the - - panic button - - par for the course - - part and parcel - - party pooper - - pass the buck - - patience is a virtue - - pay through the nose - - penny pincher - - perfect storm - - pig in a poke - - pile it on - - pillar of the community - - pin your hopes on - - pitter patter of little feet - - plain as day - - plain as the nose on your face - - play by the rules - - play your cards right - - playing the field - - playing with fire - - pleased as punch - - plenty of fish in the sea - - point with pride - - poor as a church mouse - - pot calling the kettle black - - presidential timber - - pretty as a picture - - pull a fast one - - pull your punches - - pulled no punches - - pulling your leg - - pure as the driven snow - - put it in a nutshell - - put one over on you - - put the cart before the horse - - put the pedal to the metal - - put your best foot forward - - put your foot down - - quantum jump - - quantum leap - - quick as a bunny - - quick as a lick - - quick as a wink - - quick as lightning - - quiet as a dormouse - - rags to riches - - raining buckets - - raining cats and dogs - - rank and file - - rat race - - reap what you sow - - red as a beet - - red herring - - redound to one's credit - - redound to the benefit of - - reinvent the wheel - - rich and famous - - rings a bell - - ripe old age - - ripped me off - - rise and shine - - road to hell is paved with good intentions - - rob Peter to pay Paul - - roll over in the grave - - rub the wrong way - - ruled the roost - - running in circles - - sad but true - - sadder but wiser - - salt of the earth - - scared stiff - - scared to death - - sea change - - sealed with a kiss - - second to none - - see eye to eye - - seen the light - - seize the day - - set the record straight - - set the world on fire - - set your teeth on edge - - sharp as a tack - - shirked his duties - - shoot for the moon - - shoot the breeze - - shot in the dark - - shoulder to the wheel - - sick as a dog - - sigh of relief - - signed, sealed, and delivered - - sink or swim - - six of one, half a dozen of another - - six of one, half a dozen of the other - - skating on thin ice - - slept like a log - - slinging mud - - slippery as an eel - - slow as molasses - - smart as a whip - - smooth as a baby's bottom - - sneaking suspicion - - snug as a bug in a rug - - sow wild oats - - spare the rod, spoil the child - - speak of the devil - - spilled the beans - - spinning your wheels - - spitting image of - - spoke with relish - - spread like wildfire - - spring to life - - squeaky wheel gets the grease - - stands out like a sore thumb - - start from scratch - - stick in the mud - - still waters run deep - - stitch in time - - stop and smell the roses - - straight as an arrow - - straw that broke the camel's back - - stretched to the breaking point - - strong as an ox - - stubborn as a mule - - stuff that dreams are made of - - stuffed shirt - - sweating blood - - sweating bullets - - take a load off - - take one for the team - - take the bait - - take the bull by the horns - - take the plunge - - takes one to know one - - takes two to tango - - than you can shake a stick at - - the cream of the crop - - the cream rises to the top - - the more the merrier - - the real deal - - the real McCoy - - the red carpet treatment - - the same old story - - the straw that broke the camel's back - - there is no accounting for taste - - thick as a brick - - thick as thieves - - thick as thieves - - thin as a rail - - think outside of the box - - thinking outside the box - - third time's the charm - - this day and age - - this hurts me worse than it hurts you - - this point in time - - thought leaders? - - three sheets to the wind - - through thick and thin - - throw in the towel - - throw the baby out with the bathwater - - tie one on - - tighter than a drum - - time and time again - - time is of the essence - - tip of the iceberg - - tired but happy - - to coin a phrase - - to each his own - - to make a long story short - - to the best of my knowledge - - toe the line - - tongue in cheek - - too good to be true - - too hot to handle - - too numerous to mention - - touch with a ten foot pole - - tough as nails - - trial and error - - trials and tribulations - - tried and true - - trip down memory lane - - twist of fate - - two cents worth - - two peas in a pod - - ugly as sin - - under the counter - - under the gun - - under the same roof - - under the weather - - until the cows come home - - unvarnished truth - - up the creek - - uphill battle - - upper crust - - upset the applecart - - vain attempt - - vain effort - - vanquish the enemy - - various and sundry - - vested interest - - viable alternative - - waiting for the other shoe to drop - - wakeup call - - warm welcome - - watch your p's and q's - - watch your tongue - - watching the clock - - water under the bridge - - wax eloquent - - wax poetic - - we've got a situation here - - weather the storm - - weed them out - - week of Sundays - - went belly up - - wet behind the ears - - what goes around comes around - - what you see is what you get - - when it rains, it pours - - when push comes to shove - - when the cat's away - - when the going gets tough, the tough get going - - whet (?:the|your) appetite - - white as a sheet - - whole ball of wax - - whole hog - - whole nine yards - - wild goose chase - - will wonders never cease? - - wisdom of the ages - - wise as an owl - - wolf at the door - - wool pulled over our eyes - - words fail me - - work like a dog - - world weary - - worst nightmare - - worth its weight in gold - - writ large - - wrong side of the bed - - yanking your chain - - yappy as a dog - - years young - - you are what you eat - - you can run but you can't hide - - you only live once - - you're the boss - - young and foolish - - young and vibrant diff --git a/.config/.vendor/vale/styles/proselint/CorporateSpeak.yml b/.config/.vendor/vale/styles/proselint/CorporateSpeak.yml deleted file mode 100644 index 4de8ee3..0000000 --- a/.config/.vendor/vale/styles/proselint/CorporateSpeak.yml +++ /dev/null @@ -1,30 +0,0 @@ -extends: existence -message: "'%s' is corporate speak." -ignorecase: true -level: error -tokens: - - at the end of the day - - back to the drawing board - - hit the ground running - - get the ball rolling - - low-hanging fruit - - thrown under the bus - - think outside the box - - let's touch base - - get my manager's blessing - - it's on my radar - - ping me - - i don't have the bandwidth - - no brainer - - par for the course - - bang for your buck - - synergy - - move the goal post - - apples to apples - - win-win - - circle back around - - all hands on deck - - take this offline - - drill-down - - elephant in the room - - on my plate diff --git a/.config/.vendor/vale/styles/proselint/Currency.yml b/.config/.vendor/vale/styles/proselint/Currency.yml deleted file mode 100644 index ebd4b7d..0000000 --- a/.config/.vendor/vale/styles/proselint/Currency.yml +++ /dev/null @@ -1,5 +0,0 @@ -extends: existence -message: "Incorrect use of symbols in '%s'." -ignorecase: true -raw: - - \$[\d]* ?(?:dollars|usd|us dollars) diff --git a/.config/.vendor/vale/styles/proselint/Cursing.yml b/.config/.vendor/vale/styles/proselint/Cursing.yml deleted file mode 100644 index e65070a..0000000 --- a/.config/.vendor/vale/styles/proselint/Cursing.yml +++ /dev/null @@ -1,15 +0,0 @@ -extends: existence -message: "Consider replacing '%s'." -level: error -ignorecase: true -tokens: - - shit - - piss - - fuck - - cunt - - cocksucker - - motherfucker - - tits - - fart - - turd - - twat diff --git a/.config/.vendor/vale/styles/proselint/DateCase.yml b/.config/.vendor/vale/styles/proselint/DateCase.yml deleted file mode 100644 index 9aa1bd9..0000000 --- a/.config/.vendor/vale/styles/proselint/DateCase.yml +++ /dev/null @@ -1,7 +0,0 @@ -extends: existence -message: With lowercase letters, the periods are standard. -ignorecase: false -level: error -nonword: true -tokens: - - '\d{1,2} ?[ap]m\b' diff --git a/.config/.vendor/vale/styles/proselint/DateMidnight.yml b/.config/.vendor/vale/styles/proselint/DateMidnight.yml deleted file mode 100644 index 0130e1a..0000000 --- a/.config/.vendor/vale/styles/proselint/DateMidnight.yml +++ /dev/null @@ -1,7 +0,0 @@ -extends: existence -message: "Use 'midnight' or 'noon'." -ignorecase: true -level: error -nonword: true -tokens: - - '12 ?[ap]\.?m\.?' diff --git a/.config/.vendor/vale/styles/proselint/DateRedundancy.yml b/.config/.vendor/vale/styles/proselint/DateRedundancy.yml deleted file mode 100644 index b1f653e..0000000 --- a/.config/.vendor/vale/styles/proselint/DateRedundancy.yml +++ /dev/null @@ -1,10 +0,0 @@ -extends: existence -message: "'a.m.' is always morning; 'p.m.' is always night." -ignorecase: true -level: error -nonword: true -tokens: - - '\d{1,2} ?a\.?m\.? in the morning' - - '\d{1,2} ?p\.?m\.? in the evening' - - '\d{1,2} ?p\.?m\.? at night' - - '\d{1,2} ?p\.?m\.? in the afternoon' diff --git a/.config/.vendor/vale/styles/proselint/DateSpacing.yml b/.config/.vendor/vale/styles/proselint/DateSpacing.yml deleted file mode 100644 index b7a2fd3..0000000 --- a/.config/.vendor/vale/styles/proselint/DateSpacing.yml +++ /dev/null @@ -1,7 +0,0 @@ -extends: existence -message: "It's standard to put a space before '%s'" -ignorecase: true -level: error -nonword: true -tokens: - - '\d{1,2}[ap]\.?m\.?' diff --git a/.config/.vendor/vale/styles/proselint/DenizenLabels.yml b/.config/.vendor/vale/styles/proselint/DenizenLabels.yml deleted file mode 100644 index bc3dd8a..0000000 --- a/.config/.vendor/vale/styles/proselint/DenizenLabels.yml +++ /dev/null @@ -1,52 +0,0 @@ -extends: substitution -message: Did you mean '%s'? -ignorecase: false -action: - name: replace -swap: - (?:Afrikaaner|Afrikander): Afrikaner - (?:Hong Kongite|Hong Kongian): Hong Konger - (?:Indianan|Indianian): Hoosier - (?:Michiganite|Michiganian): Michigander - (?:New Hampshireite|New Hampshireman): New Hampshirite - (?:Newcastlite|Newcastleite): Novocastrian - (?:Providencian|Providencer): Providentian - (?:Trentian|Trentonian): Tridentine - (?:Warsawer|Warsawian): Varsovian - (?:Wolverhamptonite|Wolverhamptonian): Wulfrunian - Alabaman: Alabamian - Albuquerquian: Albuquerquean - Anchoragite: Anchorageite - Arizonian: Arizonan - Arkansawyer: Arkansan - Belarusan: Belarusian - Cayman Islander: Caymanian - Coloradoan: Coloradan - Connecticuter: Nutmegger - Fairbanksian: Fairbanksan - Fort Worther: Fort Worthian - Grenadian: Grenadan - Halifaxer: Haligonian - Hartlepoolian: Hartlepudlian - Illinoisian: Illinoisan - Iowegian: Iowan - Leedsian: Leodenisian - Liverpoolian: Liverpudlian - Los Angelean: Angeleno - Manchesterian: Mancunian - Minneapolisian: Minneapolitan - Missouran: Missourian - Monacan: Monegasque - Neopolitan: Neapolitan - New Jerseyite: New Jerseyan - New Orleansian: New Orleanian - Oklahoma Citian: Oklahoma Cityan - Oklahomian: Oklahoman - Saudi Arabian: Saudi - Seattlite: Seattleite - Surinamer: Surinamese - Tallahassean: Tallahasseean - Tennesseean: Tennessean - Trois-Rivièrester: Trifluvian - Utahan: Utahn - Valladolidian: Vallisoletano diff --git a/.config/.vendor/vale/styles/proselint/Diacritical.yml b/.config/.vendor/vale/styles/proselint/Diacritical.yml deleted file mode 100644 index 2416cf2..0000000 --- a/.config/.vendor/vale/styles/proselint/Diacritical.yml +++ /dev/null @@ -1,95 +0,0 @@ -extends: substitution -message: Consider using '%s' instead of '%s'. -ignorecase: true -level: error -action: - name: replace -swap: - beau ideal: beau idéal - boutonniere: boutonnière - bric-a-brac: bric-à-brac - cafe: café - cause celebre: cause célèbre - chevre: chèvre - cliche: cliché - consomme: consommé - coup de grace: coup de grâce - crudites: crudités - creme brulee: crème brûlée - creme de menthe: crème de menthe - creme fraice: crème fraîche - creme fresh: crème fraîche - crepe: crêpe - debutante: débutante - decor: décor - deja vu: déjà vu - denouement: dénouement - facade: façade - fiance: fiancé - fiancee: fiancée - flambe: flambé - garcon: garçon - lycee: lycée - maitre d: maître d - menage a trois: ménage à trois - negligee: négligée - protege: protégé - protegee: protégée - puree: purée - my resume: my résumé - your resume: your résumé - his resume: his résumé - her resume: her résumé - a resume: a résumé - the resume: the résumé - risque: risqué - roue: roué - soiree: soirée - souffle: soufflé - soupcon: soupçon - touche: touché - tete-a-tete: tête-à-tête - voila: voilà - a la carte: à la carte - a la mode: à la mode - emigre: émigré - - # Spanish loanwords - El Nino: El Niño - jalapeno: jalapeño - La Nina: La Niña - pina colada: piña colada - senor: señor - senora: señora - senorita: señorita - - # Portuguese loanwords - acai: açaí - - # German loanwords - doppelganger: doppelgänger - Fuhrer: Führer - Gewurztraminer: Gewürztraminer - vis-a-vis: vis-à-vis - Ubermensch: Übermensch - - # Swedish loanwords - filmjolk: filmjölk - smorgasbord: smörgåsbord - - # Names, places, and companies - Beyonce: Beyoncé - Bronte: Brontë - Champs-Elysees: Champs-Élysées - Citroen: Citroën - Curacao: Curaçao - Lowenbrau: Löwenbräu - Monegasque: Monégasque - Motley Crue: Mötley Crüe - Nescafe: Nescafé - Queensryche: Queensrÿche - Quebec: Québec - Quebecois: Québécois - Angstrom: Ångström - angstrom: ångström - Skoda: Škoda diff --git a/.config/.vendor/vale/styles/proselint/GenderBias.yml b/.config/.vendor/vale/styles/proselint/GenderBias.yml deleted file mode 100644 index d98d3cf..0000000 --- a/.config/.vendor/vale/styles/proselint/GenderBias.yml +++ /dev/null @@ -1,45 +0,0 @@ -extends: substitution -message: Consider using '%s' instead of '%s'. -ignorecase: true -level: error -action: - name: replace -swap: - (?:alumnae|alumni): graduates - (?:alumna|alumnus): graduate - air(?:m[ae]n|wom[ae]n): pilot(s) - anchor(?:m[ae]n|wom[ae]n): anchor(s) - authoress: author - camera(?:m[ae]n|wom[ae]n): camera operator(s) - chair(?:m[ae]n|wom[ae]n): chair(s) - congress(?:m[ae]n|wom[ae]n): member(s) of congress - door(?:m[ae]|wom[ae]n): concierge(s) - draft(?:m[ae]n|wom[ae]n): drafter(s) - fire(?:m[ae]n|wom[ae]n): firefighter(s) - fisher(?:m[ae]n|wom[ae]n): fisher(s) - fresh(?:m[ae]n|wom[ae]n): first-year student(s) - garbage(?:m[ae]n|wom[ae]n): waste collector(s) - lady lawyer: lawyer - ladylike: courteous - landlord: building manager - mail(?:m[ae]n|wom[ae]n): mail carriers - man and wife: husband and wife - man enough: strong enough - mankind: human kind - manmade: manufactured - men and girls: men and women - middle(?:m[ae]n|wom[ae]n): intermediary - news(?:m[ae]n|wom[ae]n): journalist(s) - ombuds(?:man|woman): ombuds - oneupmanship: upstaging - poetess: poet - police(?:m[ae]n|wom[ae]n): police officer(s) - repair(?:m[ae]n|wom[ae]n): technician(s) - sales(?:m[ae]n|wom[ae]n): salesperson or sales people - service(?:m[ae]n|wom[ae]n): soldier(s) - steward(?:ess)?: flight attendant - tribes(?:m[ae]n|wom[ae]n): tribe member(s) - waitress: waiter - woman doctor: doctor - woman scientist[s]?: scientist(s) - work(?:m[ae]n|wom[ae]n): worker(s) diff --git a/.config/.vendor/vale/styles/proselint/GroupTerms.yml b/.config/.vendor/vale/styles/proselint/GroupTerms.yml deleted file mode 100644 index 7a59fa4..0000000 --- a/.config/.vendor/vale/styles/proselint/GroupTerms.yml +++ /dev/null @@ -1,39 +0,0 @@ -extends: substitution -message: Consider using '%s' instead of '%s'. -ignorecase: true -action: - name: replace -swap: - (?:bunch|group|pack|flock) of chickens: brood of chickens - (?:bunch|group|pack|flock) of crows: murder of crows - (?:bunch|group|pack|flock) of hawks: cast of hawks - (?:bunch|group|pack|flock) of parrots: pandemonium of parrots - (?:bunch|group|pack|flock) of peacocks: muster of peacocks - (?:bunch|group|pack|flock) of penguins: muster of penguins - (?:bunch|group|pack|flock) of sparrows: host of sparrows - (?:bunch|group|pack|flock) of turkeys: rafter of turkeys - (?:bunch|group|pack|flock) of woodpeckers: descent of woodpeckers - (?:bunch|group|pack|herd) of apes: shrewdness of apes - (?:bunch|group|pack|herd) of baboons: troop of baboons - (?:bunch|group|pack|herd) of badgers: cete of badgers - (?:bunch|group|pack|herd) of bears: sloth of bears - (?:bunch|group|pack|herd) of bullfinches: bellowing of bullfinches - (?:bunch|group|pack|herd) of bullocks: drove of bullocks - (?:bunch|group|pack|herd) of caterpillars: army of caterpillars - (?:bunch|group|pack|herd) of cats: clowder of cats - (?:bunch|group|pack|herd) of colts: rag of colts - (?:bunch|group|pack|herd) of crocodiles: bask of crocodiles - (?:bunch|group|pack|herd) of dolphins: school of dolphins - (?:bunch|group|pack|herd) of foxes: skulk of foxes - (?:bunch|group|pack|herd) of gorillas: band of gorillas - (?:bunch|group|pack|herd) of hippopotami: bloat of hippopotami - (?:bunch|group|pack|herd) of horses: drove of horses - (?:bunch|group|pack|herd) of jellyfish: fluther of jellyfish - (?:bunch|group|pack|herd) of kangeroos: mob of kangeroos - (?:bunch|group|pack|herd) of monkeys: troop of monkeys - (?:bunch|group|pack|herd) of oxen: yoke of oxen - (?:bunch|group|pack|herd) of rhinoceros: crash of rhinoceros - (?:bunch|group|pack|herd) of wild boar: sounder of wild boar - (?:bunch|group|pack|herd) of wild pigs: drift of wild pigs - (?:bunch|group|pack|herd) of zebras: zeal of wild pigs - (?:bunch|group|pack|school) of trout: hover of trout diff --git a/.config/.vendor/vale/styles/proselint/Hedging.yml b/.config/.vendor/vale/styles/proselint/Hedging.yml deleted file mode 100644 index a8615f8..0000000 --- a/.config/.vendor/vale/styles/proselint/Hedging.yml +++ /dev/null @@ -1,8 +0,0 @@ -extends: existence -message: "'%s' is hedging." -ignorecase: true -level: error -tokens: - - I would argue that - - ', so to speak' - - to a certain degree diff --git a/.config/.vendor/vale/styles/proselint/Hyperbole.yml b/.config/.vendor/vale/styles/proselint/Hyperbole.yml deleted file mode 100644 index 0361772..0000000 --- a/.config/.vendor/vale/styles/proselint/Hyperbole.yml +++ /dev/null @@ -1,6 +0,0 @@ -extends: existence -message: "'%s' is hyperbolic." -level: error -nonword: true -tokens: - - '[a-z]+[!?]{2,}' diff --git a/.config/.vendor/vale/styles/proselint/Jargon.yml b/.config/.vendor/vale/styles/proselint/Jargon.yml deleted file mode 100644 index 2454a9c..0000000 --- a/.config/.vendor/vale/styles/proselint/Jargon.yml +++ /dev/null @@ -1,11 +0,0 @@ -extends: existence -message: "'%s' is jargon." -ignorecase: true -level: error -tokens: - - in the affirmative - - in the negative - - agendize - - per your order - - per your request - - disincentivize diff --git a/.config/.vendor/vale/styles/proselint/LGBTOffensive.yml b/.config/.vendor/vale/styles/proselint/LGBTOffensive.yml deleted file mode 100644 index eaf5a84..0000000 --- a/.config/.vendor/vale/styles/proselint/LGBTOffensive.yml +++ /dev/null @@ -1,13 +0,0 @@ -extends: existence -message: "'%s' is offensive. Remove it or consider the context." -ignorecase: true -tokens: - - fag - - faggot - - dyke - - sodomite - - homosexual agenda - - gay agenda - - transvestite - - homosexual lifestyle - - gay lifestyle diff --git a/.config/.vendor/vale/styles/proselint/LGBTTerms.yml b/.config/.vendor/vale/styles/proselint/LGBTTerms.yml deleted file mode 100644 index efdf268..0000000 --- a/.config/.vendor/vale/styles/proselint/LGBTTerms.yml +++ /dev/null @@ -1,15 +0,0 @@ -extends: substitution -message: "Consider using '%s' instead of '%s'." -ignorecase: true -action: - name: replace -swap: - homosexual man: gay man - homosexual men: gay men - homosexual woman: lesbian - homosexual women: lesbians - homosexual people: gay people - homosexual couple: gay couple - sexual preference: sexual orientation - (?:admitted homosexual|avowed homosexual): openly gay - special rights: equal rights diff --git a/.config/.vendor/vale/styles/proselint/Malapropisms.yml b/.config/.vendor/vale/styles/proselint/Malapropisms.yml deleted file mode 100644 index 9699778..0000000 --- a/.config/.vendor/vale/styles/proselint/Malapropisms.yml +++ /dev/null @@ -1,8 +0,0 @@ -extends: existence -message: "'%s' is a malapropism." -ignorecase: true -level: error -tokens: - - the infinitesimal universe - - a serial experience - - attack my voracity diff --git a/.config/.vendor/vale/styles/proselint/Needless.yml b/.config/.vendor/vale/styles/proselint/Needless.yml deleted file mode 100644 index 820ae5c..0000000 --- a/.config/.vendor/vale/styles/proselint/Needless.yml +++ /dev/null @@ -1,358 +0,0 @@ -extends: substitution -message: Prefer '%s' over '%s' -ignorecase: true -action: - name: replace -swap: - '(?:cell phone|cell-phone)': cellphone - '(?:cliquey|cliquy)': cliquish - '(?:pygmean|pygmaen)': pygmy - '(?:retributional|retributionary)': retributive - '(?:revokable|revokeable)': revocable - abolishment: abolition - accessary: accessory - accreditate: accredit - accruement: accrual - accusee: accused - acquaintanceship: acquaintance - acquitment: acquittal - administrate: administer - administrated: administered - administrating: administering - adulterate: adulterous - advisatory: advisory - advocator: advocate - aggrievance: grievance - allegator: alleger - allusory: allusive - amative: amorous - amortizement: amortization - amphiboly: amphibology - anecdotalist: anecdotist - anilinctus: anilingus - anticipative: anticipatory - antithetic: antithetical - applicative: applicable - applicatory: applicable - applier: applicator - approbative: approbatory - arbitrager: arbitrageur - arsenous: arsenious - ascendance: ascendancy - ascendence: ascendancy - ascendency: ascendancy - auctorial: authorial - averral: averment - barbwire: barbed wire - benefic: beneficent - benignant: benign - bestowment: bestowal - betrothment: betrothal - blamableness: blameworthiness - butt naked: buck naked - camarade: comrade - carta blanca: carte blanche - casualities: casualties - casuality: casualty - catch on fire: catch fire - catholicly: catholically - cease fire: ceasefire - channelize: channel - chaplainship: chaplaincy - chrysalid: chrysalis - chrysalids: chrysalises - cigaret: cigarette - coemployee: coworker - cognitional: cognitive - cohabitate: cohabit - cohabitor: cohabitant - collodium: collodion - collusory: collusive - commemoratory: commemorative - commonty: commonage - communicatory: communicative - compensative: compensatory - complacence: complacency - complicitous: complicit - computate: compute - conciliative: conciliatory - concomitancy: concomitance - condonance: condonation - confirmative: confirmatory - congruency: congruence - connotate: connote - consanguineal: consanguine - conspicuity: conspicuousness - conspiratorialist: conspirator - constitutionist: constitutionalist - contingence: contingency - contributary: contributory - contumacity: contumacy - conversible: convertible - conveyal: conveyance - copartner: partner - copartnership: partnership - corroboratory: corroborative - cotemporaneous: contemporaneous - cotemporary: contemporary - criminate: incriminate - culpatory: inculpatory - cumbrance: encumbrance - cumulate: accumulate - curatory: curative - daredeviltry: daredevilry - deceptious: deceptive - defamative: defamatory - defraudulent: fraudulent - degeneratory: degenerative - delimitate: delimit - delusory: delusive - denouncement: denunciation - depositee: depositary - depreciative: depreciatory - deprival: deprivation - derogative: derogatory - destroyable: destructible - detoxicate: detoxify - detractory: detractive - deviancy: deviance - deviationist: deviant - digamy: deuterogamy - digitalize: digitize - diminishment: diminution - diplomatist: diplomat - disassociate: dissociate - disciplinatory: disciplinary - discriminant: discriminating - disenthrone: dethrone - disintegratory: disintegrative - dismission: dismissal - disorientate: disorient - disorientated: disoriented - disquieten: disquiet - distraite: distrait - divergency: divergence - dividable: divisible - doctrinary: doctrinaire - documental: documentary - domesticize: domesticate - duplicatory: duplicative - duteous: dutiful - educationalist: educationist - educatory: educative - enigmatas: enigmas - enlargen: enlarge - enswathe: swathe - epical: epic - erotism: eroticism - ethician: ethicist - ex officiis: ex officio - exculpative: exculpatory - exigeant: exigent - exigence: exigency - exotism: exoticism - expedience: expediency - expediential: expedient - extensible: extendable - eying: eyeing - fiefdom: fief - flagrance: flagrancy - flatulency: flatulence - fraudful: fraudulent - funebrial: funereal - geographical: geographic - geometrical: geometric - gerry-rigged: jury-rigged - goatherder: goatherd - gustatorial: gustatory - habitude: habit - henceforward: henceforth - hesitance: hesitancy - heterogenous: heterogeneous - hierarchic: hierarchical - hindermost: hindmost - honorand: honoree - hypostasize: hypostatize - hysteric: hysterical - idolatrize: idolize - impanel: empanel - imperviable: impervious - importunacy: importunity - impotency: impotence - imprimatura: imprimatur - improprietous: improper - inalterable: unalterable - incitation: incitement - incommunicative: uncommunicative - inconsistence: inconsistency - incontrollable: uncontrollable - incurment: incurrence - indow: endow - indue: endue - inhibitive: inhibitory - innavigable: unnavigable - innovational: innovative - inquisitional: inquisitorial - insistment: insistence - insolvable: unsolvable - instillment: instillation - instinctual: instinctive - insuror: insurer - insurrectional: insurrectionary - interpretate: interpret - intervenience: intervention - ironical: ironic - jerry-rigged: jury-rigged - judgmatic: judgmental - labyrinthian: labyrinthine - laudative: laudatory - legitimatization: legitimation - legitimatize: legitimize - legitimization: legitimation - lengthways: lengthwise - life-sized: life-size - liquorice: licorice - lithesome: lithe - lollipop: lollypop - loth: loath - lubricous: lubricious - maihem: mayhem - medicinal marijuana: medical marijuana - meliorate: ameliorate - minimalize: minimize - mirk: murk - mirky: murky - misdoubt: doubt - monetarize: monetize - moveable: movable - narcism: narcissism - neglective: neglectful - negligency: negligence - neologizer: neologist - neurologic: neurological - nicknack: knickknack - nictate: nictitate - nonenforceable: unenforceable - normalcy: normality - numbedness: numbness - omittable: omissible - onomatopoetic: onomatopoeic - opinioned: opined - optimum advantage: optimal advantage - orientate: orient - outsized: outsize - oversized: oversize - overthrowal: overthrow - pacificist: pacifist - paederast: pederast - parachronism: anachronism - parti-color: parti-colored - participative: participatory - party-colored: parti-colored - pediatrist: pediatrician - penumbrous: penumbral - perjorative: pejorative - permissory: permissive - permutate: permute - personation: impersonation - pharmaceutic: pharmaceutical - pleuritis: pleurisy - policy holder: policyholder - policyowner: policyholder - politicalize: politicize - precedency: precedence - preceptoral: preceptorial - precipitance: precipitancy - precipitant: precipitate - preclusory: preclusive - precolumbian: pre-Columbian - prefectoral: prefectorial - preponderately: preponderantly - preserval: preservation - preventative: preventive - proconsulship: proconsulate - procreational: procreative - procurance: procurement - propelment: propulsion - propulsory: propulsive - prosecutive: prosecutory - protectory: protective - provocatory: provocative - pruriency: prurience - psychal: psychical - punitory: punitive - quantitate: quantify - questionary: questionnaire - quiescency: quiescence - rabbin: rabbi - reasonability: reasonableness - recidivistic: recidivous - recriminative: recriminatory - recruital: recruitment - recurrency: recurrence - recusance: recusancy - recusation: recusal - recusement: recusal - redemptory: redemptive - referrable: referable - referrible: referable - refutatory: refutative - remitment: remittance - remittal: remission - renouncement: renunciation - renunciable: renounceable - reparatory: reparative - repudiative: repudiatory - requitement: requital - rescindment: rescission - restoral: restoration - reticency: reticence - reviewal: review - revisal: revision - revisional: revisionary - revolute: revolt - saliency: salience - salutiferous: salutary - sensatory: sensory - sessionary: sessional - shareowner: shareholder - sicklily: sickly - signator: signatory - slanderize: slander - societary: societal - sodomist: sodomite - solicitate: solicit - speculatory: speculative - spiritous: spirituous - statutorial: statutory - submergeable: submersible - submittal: submission - subtile: subtle - succuba: succubus - sufficience: sufficiency - suppliant: supplicant - surmisal: surmise - suspendible: suspendable - synthetize: synthesize - systemize: systematize - tactual: tactile - tangental: tangential - tautologous: tautological - tee-shirt: T-shirt - thenceforward: thenceforth - transiency: transience - transposal: transposition - unfrequent: infrequent - unreasonability: unreasonableness - unrevokable: irrevocable - unsubstantial: insubstantial - usurpature: usurpation - variative: variational - vegetive: vegetative - vindicative: vindictive - vituperous: vituperative - vociferant: vociferous - volitive: volitional - wolverene: wolverine - wolvish: wolfish - Zoroastrism: Zoroastrianism diff --git a/.config/.vendor/vale/styles/proselint/Nonwords.yml b/.config/.vendor/vale/styles/proselint/Nonwords.yml deleted file mode 100644 index c6b0e96..0000000 --- a/.config/.vendor/vale/styles/proselint/Nonwords.yml +++ /dev/null @@ -1,38 +0,0 @@ -extends: substitution -message: "Consider using '%s' instead of '%s'." -ignorecase: true -level: error -action: - name: replace -swap: - affrontery: effrontery - analyzation: analysis - annoyment: annoyance - confirmant: confirmand - confirmants: confirmands - conversate: converse - crained: craned - discomforture: discomfort|discomfiture - dispersement: disbursement|dispersal - doubtlessly: doubtless|undoubtedly - forebearance: forbearance - improprietous: improper - inclimate: inclement - inimicable: inimical - irregardless: regardless - minimalize: minimize - minimalized: minimized - minimalizes: minimizes - minimalizing: minimizing - optimalize: optimize - paralyzation: paralysis - pettifogger: pettifog - proprietous: proper - relative inexpense: relatively low price|affordability - seldomly: seldom - thusly: thus - uncategorically: categorically - undoubtably: undoubtedly|indubitably - unequivocable: unequivocal - unmercilessly: mercilessly - unrelentlessly: unrelentingly|relentlessly diff --git a/.config/.vendor/vale/styles/proselint/Oxymorons.yml b/.config/.vendor/vale/styles/proselint/Oxymorons.yml deleted file mode 100644 index 25fd2aa..0000000 --- a/.config/.vendor/vale/styles/proselint/Oxymorons.yml +++ /dev/null @@ -1,22 +0,0 @@ -extends: existence -message: "'%s' is an oxymoron." -ignorecase: true -level: error -tokens: - - amateur expert - - increasingly less - - advancing backwards - - alludes explicitly to - - explicitly alludes to - - totally obsolescent - - completely obsolescent - - generally always - - usually always - - increasingly less - - build down - - conspicuous absence - - exact estimate - - found missing - - intense apathy - - mandatory choice - - organized mess diff --git a/.config/.vendor/vale/styles/proselint/P-Value.yml b/.config/.vendor/vale/styles/proselint/P-Value.yml deleted file mode 100644 index 8230938..0000000 --- a/.config/.vendor/vale/styles/proselint/P-Value.yml +++ /dev/null @@ -1,6 +0,0 @@ -extends: existence -message: "You should use more decimal places, unless '%s' is really true." -ignorecase: true -level: suggestion -tokens: - - 'p = 0\.0{2,4}' diff --git a/.config/.vendor/vale/styles/proselint/RASSyndrome.yml b/.config/.vendor/vale/styles/proselint/RASSyndrome.yml deleted file mode 100644 index deae9c7..0000000 --- a/.config/.vendor/vale/styles/proselint/RASSyndrome.yml +++ /dev/null @@ -1,30 +0,0 @@ -extends: existence -message: "'%s' is redundant." -level: error -action: - name: edit - params: - - split - - ' ' - - '0' -tokens: - - ABM missile - - ACT test - - ABM missiles - - ABS braking system - - ATM machine - - CD disc - - CPI Index - - GPS system - - GUI interface - - HIV virus - - ISBN number - - LCD display - - PDF format - - PIN number - - RAS syndrome - - RIP in peace - - please RSVP - - SALT talks - - SAT test - - UPC codes diff --git a/.config/.vendor/vale/styles/proselint/README.md b/.config/.vendor/vale/styles/proselint/README.md deleted file mode 100644 index 4020768..0000000 --- a/.config/.vendor/vale/styles/proselint/README.md +++ /dev/null @@ -1,12 +0,0 @@ -Copyright © 2014–2015, Jordan Suchow, Michael Pacer, and Lara A. Ross -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/.config/.vendor/vale/styles/proselint/Skunked.yml b/.config/.vendor/vale/styles/proselint/Skunked.yml deleted file mode 100644 index 96a1f69..0000000 --- a/.config/.vendor/vale/styles/proselint/Skunked.yml +++ /dev/null @@ -1,13 +0,0 @@ -extends: existence -message: "'%s' is a bit of a skunked term — impossible to use without issue." -ignorecase: true -level: error -tokens: - - bona fides - - deceptively - - decimate - - effete - - fulsome - - hopefully - - impassionate - - Thankfully diff --git a/.config/.vendor/vale/styles/proselint/Spelling.yml b/.config/.vendor/vale/styles/proselint/Spelling.yml deleted file mode 100644 index d3c9be7..0000000 --- a/.config/.vendor/vale/styles/proselint/Spelling.yml +++ /dev/null @@ -1,17 +0,0 @@ -extends: consistency -message: "Inconsistent spelling of '%s'." -level: error -ignorecase: true -either: - advisor: adviser - centre: center - colour: color - emphasise: emphasize - finalise: finalize - focussed: focused - labour: labor - learnt: learned - organise: organize - organised: organized - organising: organizing - recognise: recognize diff --git a/.config/.vendor/vale/styles/proselint/Typography.yml b/.config/.vendor/vale/styles/proselint/Typography.yml deleted file mode 100644 index 60283eb..0000000 --- a/.config/.vendor/vale/styles/proselint/Typography.yml +++ /dev/null @@ -1,11 +0,0 @@ -extends: substitution -message: Consider using the '%s' symbol instead of '%s'. -level: error -nonword: true -swap: - '\.\.\.': … - '\([cC]\)': © - '\(TM\)': ™ - '\(tm\)': ™ - '\([rR]\)': ® - '[0-9]+ ?x ?[0-9]+': × diff --git a/.config/.vendor/vale/styles/proselint/Uncomparables.yml b/.config/.vendor/vale/styles/proselint/Uncomparables.yml deleted file mode 100644 index 9b96f42..0000000 --- a/.config/.vendor/vale/styles/proselint/Uncomparables.yml +++ /dev/null @@ -1,50 +0,0 @@ -extends: existence -message: "'%s' is not comparable" -ignorecase: true -level: error -action: - name: edit - params: - - split - - ' ' - - '1' -raw: - - \b(?:absolutely|most|more|less|least|very|quite|largely|extremely|increasingly|kind of|mildy|hardly|greatly|sort of)\b\s* -tokens: - - absolute - - adequate - - complete - - correct - - certain - - devoid - - entire - - 'false' - - fatal - - favorite - - final - - ideal - - impossible - - inevitable - - infinite - - irrevocable - - main - - manifest - - only - - paramount - - perfect - - perpetual - - possible - - preferable - - principal - - singular - - stationary - - sufficient - - 'true' - - unanimous - - unavoidable - - unbroken - - uniform - - unique - - universal - - void - - whole diff --git a/.config/.vendor/vale/styles/proselint/Very.yml b/.config/.vendor/vale/styles/proselint/Very.yml deleted file mode 100644 index e4077f7..0000000 --- a/.config/.vendor/vale/styles/proselint/Very.yml +++ /dev/null @@ -1,6 +0,0 @@ -extends: existence -message: "Remove '%s'." -ignorecase: true -level: error -tokens: - - very diff --git a/.config/.vendor/vale/styles/proselint/meta.json b/.config/.vendor/vale/styles/proselint/meta.json deleted file mode 100644 index e3c6580..0000000 --- a/.config/.vendor/vale/styles/proselint/meta.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "author": "jdkato", - "description": "A Vale-compatible implementation of the proselint linter.", - "email": "support@errata.ai", - "lang": "en", - "url": "https://github.com/errata-ai/proselint/releases/latest/download/proselint.zip", - "feed": "https://github.com/errata-ai/proselint/releases.atom", - "issues": "https://github.com/errata-ai/proselint/issues/new", - "license": "BSD-3-Clause", - "name": "proselint", - "sources": [ - "https://github.com/amperser/proselint" - ], - "vale_version": ">=1.0.0", - "coverage": 0.0, - "version": "0.1.0" -} diff --git a/.config/.vendor/vale/styles/write-good/Cliches.yml b/.config/.vendor/vale/styles/write-good/Cliches.yml deleted file mode 100644 index c953143..0000000 --- a/.config/.vendor/vale/styles/write-good/Cliches.yml +++ /dev/null @@ -1,702 +0,0 @@ -extends: existence -message: "Try to avoid using clichés like '%s'." -ignorecase: true -level: warning -tokens: - - a chip off the old block - - a clean slate - - a dark and stormy night - - a far cry - - a fine kettle of fish - - a loose cannon - - a penny saved is a penny earned - - a tough row to hoe - - a word to the wise - - ace in the hole - - acid test - - add insult to injury - - against all odds - - air your dirty laundry - - all fun and games - - all in a day's work - - all talk, no action - - all thumbs - - all your eggs in one basket - - all's fair in love and war - - all's well that ends well - - almighty dollar - - American as apple pie - - an axe to grind - - another day, another dollar - - armed to the teeth - - as luck would have it - - as old as time - - as the crow flies - - at loose ends - - at my wits end - - avoid like the plague - - babe in the woods - - back against the wall - - back in the saddle - - back to square one - - back to the drawing board - - bad to the bone - - badge of honor - - bald faced liar - - ballpark figure - - banging your head against a brick wall - - baptism by fire - - barking up the wrong tree - - bat out of hell - - be all and end all - - beat a dead horse - - beat around the bush - - been there, done that - - beggars can't be choosers - - behind the eight ball - - bend over backwards - - benefit of the doubt - - bent out of shape - - best thing since sliced bread - - bet your bottom dollar - - better half - - better late than never - - better mousetrap - - better safe than sorry - - between a rock and a hard place - - beyond the pale - - bide your time - - big as life - - big cheese - - big fish in a small pond - - big man on campus - - bigger they are the harder they fall - - bird in the hand - - bird's eye view - - birds and the bees - - birds of a feather flock together - - bit the hand that feeds you - - bite the bullet - - bite the dust - - bitten off more than he can chew - - black as coal - - black as pitch - - black as the ace of spades - - blast from the past - - bleeding heart - - blessing in disguise - - blind ambition - - blind as a bat - - blind leading the blind - - blood is thicker than water - - blood sweat and tears - - blow off steam - - blow your own horn - - blushing bride - - boils down to - - bolt from the blue - - bone to pick - - bored stiff - - bored to tears - - bottomless pit - - boys will be boys - - bright and early - - brings home the bacon - - broad across the beam - - broken record - - brought back to reality - - bull by the horns - - bull in a china shop - - burn the midnight oil - - burning question - - burning the candle at both ends - - burst your bubble - - bury the hatchet - - busy as a bee - - by hook or by crook - - call a spade a spade - - called onto the carpet - - calm before the storm - - can of worms - - can't cut the mustard - - can't hold a candle to - - case of mistaken identity - - cat got your tongue - - cat's meow - - caught in the crossfire - - caught red-handed - - checkered past - - chomping at the bit - - cleanliness is next to godliness - - clear as a bell - - clear as mud - - close to the vest - - cock and bull story - - cold shoulder - - come hell or high water - - cool as a cucumber - - cool, calm, and collected - - cost a king's ransom - - count your blessings - - crack of dawn - - crash course - - creature comforts - - cross that bridge when you come to it - - crushing blow - - cry like a baby - - cry me a river - - cry over spilt milk - - crystal clear - - curiosity killed the cat - - cut and dried - - cut through the red tape - - cut to the chase - - cute as a bugs ear - - cute as a button - - cute as a puppy - - cuts to the quick - - dark before the dawn - - day in, day out - - dead as a doornail - - devil is in the details - - dime a dozen - - divide and conquer - - dog and pony show - - dog days - - dog eat dog - - dog tired - - don't burn your bridges - - don't count your chickens - - don't look a gift horse in the mouth - - don't rock the boat - - don't step on anyone's toes - - don't take any wooden nickels - - down and out - - down at the heels - - down in the dumps - - down the hatch - - down to earth - - draw the line - - dressed to kill - - dressed to the nines - - drives me up the wall - - dull as dishwater - - dyed in the wool - - eagle eye - - ear to the ground - - early bird catches the worm - - easier said than done - - easy as pie - - eat your heart out - - eat your words - - eleventh hour - - even the playing field - - every dog has its day - - every fiber of my being - - everything but the kitchen sink - - eye for an eye - - face the music - - facts of life - - fair weather friend - - fall by the wayside - - fan the flames - - feast or famine - - feather your nest - - feathered friends - - few and far between - - fifteen minutes of fame - - filthy vermin - - fine kettle of fish - - fish out of water - - fishing for a compliment - - fit as a fiddle - - fit the bill - - fit to be tied - - flash in the pan - - flat as a pancake - - flip your lid - - flog a dead horse - - fly by night - - fly the coop - - follow your heart - - for all intents and purposes - - for the birds - - for what it's worth - - force of nature - - force to be reckoned with - - forgive and forget - - fox in the henhouse - - free and easy - - free as a bird - - fresh as a daisy - - full steam ahead - - fun in the sun - - garbage in, garbage out - - gentle as a lamb - - get a kick out of - - get a leg up - - get down and dirty - - get the lead out - - get to the bottom of - - get your feet wet - - gets my goat - - gilding the lily - - give and take - - go against the grain - - go at it tooth and nail - - go for broke - - go him one better - - go the extra mile - - go with the flow - - goes without saying - - good as gold - - good deed for the day - - good things come to those who wait - - good time was had by all - - good times were had by all - - greased lightning - - greek to me - - green thumb - - green-eyed monster - - grist for the mill - - growing like a weed - - hair of the dog - - hand to mouth - - happy as a clam - - happy as a lark - - hasn't a clue - - have a nice day - - have high hopes - - have the last laugh - - haven't got a row to hoe - - head honcho - - head over heels - - hear a pin drop - - heard it through the grapevine - - heart's content - - heavy as lead - - hem and haw - - high and dry - - high and mighty - - high as a kite - - hit paydirt - - hold your head up high - - hold your horses - - hold your own - - hold your tongue - - honest as the day is long - - horns of a dilemma - - horse of a different color - - hot under the collar - - hour of need - - I beg to differ - - icing on the cake - - if the shoe fits - - if the shoe were on the other foot - - in a jam - - in a jiffy - - in a nutshell - - in a pig's eye - - in a pinch - - in a word - - in hot water - - in the gutter - - in the nick of time - - in the thick of it - - in your dreams - - it ain't over till the fat lady sings - - it goes without saying - - it takes all kinds - - it takes one to know one - - it's a small world - - it's only a matter of time - - ivory tower - - Jack of all trades - - jockey for position - - jog your memory - - joined at the hip - - judge a book by its cover - - jump down your throat - - jump in with both feet - - jump on the bandwagon - - jump the gun - - jump to conclusions - - just a hop, skip, and a jump - - just the ticket - - justice is blind - - keep a stiff upper lip - - keep an eye on - - keep it simple, stupid - - keep the home fires burning - - keep up with the Joneses - - keep your chin up - - keep your fingers crossed - - kick the bucket - - kick up your heels - - kick your feet up - - kid in a candy store - - kill two birds with one stone - - kiss of death - - knock it out of the park - - knock on wood - - knock your socks off - - know him from Adam - - know the ropes - - know the score - - knuckle down - - knuckle sandwich - - knuckle under - - labor of love - - ladder of success - - land on your feet - - lap of luxury - - last but not least - - last hurrah - - last-ditch effort - - law of the jungle - - law of the land - - lay down the law - - leaps and bounds - - let sleeping dogs lie - - let the cat out of the bag - - let the good times roll - - let your hair down - - let's talk turkey - - letter perfect - - lick your wounds - - lies like a rug - - life's a bitch - - life's a grind - - light at the end of the tunnel - - lighter than a feather - - lighter than air - - like clockwork - - like father like son - - like taking candy from a baby - - like there's no tomorrow - - lion's share - - live and learn - - live and let live - - long and short of it - - long lost love - - look before you leap - - look down your nose - - look what the cat dragged in - - looking a gift horse in the mouth - - looks like death warmed over - - loose cannon - - lose your head - - lose your temper - - loud as a horn - - lounge lizard - - loved and lost - - low man on the totem pole - - luck of the draw - - luck of the Irish - - make hay while the sun shines - - make money hand over fist - - make my day - - make the best of a bad situation - - make the best of it - - make your blood boil - - man of few words - - man's best friend - - mark my words - - meaningful dialogue - - missed the boat on that one - - moment in the sun - - moment of glory - - moment of truth - - money to burn - - more power to you - - more than one way to skin a cat - - movers and shakers - - moving experience - - naked as a jaybird - - naked truth - - neat as a pin - - needle in a haystack - - needless to say - - neither here nor there - - never look back - - never say never - - nip and tuck - - nip it in the bud - - no guts, no glory - - no love lost - - no pain, no gain - - no skin off my back - - no stone unturned - - no time like the present - - no use crying over spilled milk - - nose to the grindstone - - not a hope in hell - - not a minute's peace - - not in my backyard - - not playing with a full deck - - not the end of the world - - not written in stone - - nothing to sneeze at - - nothing ventured nothing gained - - now we're cooking - - off the top of my head - - off the wagon - - off the wall - - old hat - - older and wiser - - older than dirt - - older than Methuselah - - on a roll - - on cloud nine - - on pins and needles - - on the bandwagon - - on the money - - on the nose - - on the rocks - - on the spot - - on the tip of my tongue - - on the wagon - - on thin ice - - once bitten, twice shy - - one bad apple doesn't spoil the bushel - - one born every minute - - one brick short - - one foot in the grave - - one in a million - - one red cent - - only game in town - - open a can of worms - - open and shut case - - open the flood gates - - opportunity doesn't knock twice - - out of pocket - - out of sight, out of mind - - out of the frying pan into the fire - - out of the woods - - out on a limb - - over a barrel - - over the hump - - pain and suffering - - pain in the - - panic button - - par for the course - - part and parcel - - party pooper - - pass the buck - - patience is a virtue - - pay through the nose - - penny pincher - - perfect storm - - pig in a poke - - pile it on - - pillar of the community - - pin your hopes on - - pitter patter of little feet - - plain as day - - plain as the nose on your face - - play by the rules - - play your cards right - - playing the field - - playing with fire - - pleased as punch - - plenty of fish in the sea - - point with pride - - poor as a church mouse - - pot calling the kettle black - - pretty as a picture - - pull a fast one - - pull your punches - - pulling your leg - - pure as the driven snow - - put it in a nutshell - - put one over on you - - put the cart before the horse - - put the pedal to the metal - - put your best foot forward - - put your foot down - - quick as a bunny - - quick as a lick - - quick as a wink - - quick as lightning - - quiet as a dormouse - - rags to riches - - raining buckets - - raining cats and dogs - - rank and file - - rat race - - reap what you sow - - red as a beet - - red herring - - reinvent the wheel - - rich and famous - - rings a bell - - ripe old age - - ripped me off - - rise and shine - - road to hell is paved with good intentions - - rob Peter to pay Paul - - roll over in the grave - - rub the wrong way - - ruled the roost - - running in circles - - sad but true - - sadder but wiser - - salt of the earth - - scared stiff - - scared to death - - sealed with a kiss - - second to none - - see eye to eye - - seen the light - - seize the day - - set the record straight - - set the world on fire - - set your teeth on edge - - sharp as a tack - - shoot for the moon - - shoot the breeze - - shot in the dark - - shoulder to the wheel - - sick as a dog - - sigh of relief - - signed, sealed, and delivered - - sink or swim - - six of one, half a dozen of another - - skating on thin ice - - slept like a log - - slinging mud - - slippery as an eel - - slow as molasses - - smart as a whip - - smooth as a baby's bottom - - sneaking suspicion - - snug as a bug in a rug - - sow wild oats - - spare the rod, spoil the child - - speak of the devil - - spilled the beans - - spinning your wheels - - spitting image of - - spoke with relish - - spread like wildfire - - spring to life - - squeaky wheel gets the grease - - stands out like a sore thumb - - start from scratch - - stick in the mud - - still waters run deep - - stitch in time - - stop and smell the roses - - straight as an arrow - - straw that broke the camel's back - - strong as an ox - - stubborn as a mule - - stuff that dreams are made of - - stuffed shirt - - sweating blood - - sweating bullets - - take a load off - - take one for the team - - take the bait - - take the bull by the horns - - take the plunge - - takes one to know one - - takes two to tango - - the more the merrier - - the real deal - - the real McCoy - - the red carpet treatment - - the same old story - - there is no accounting for taste - - thick as a brick - - thick as thieves - - thin as a rail - - think outside of the box - - third time's the charm - - this day and age - - this hurts me worse than it hurts you - - this point in time - - three sheets to the wind - - through thick and thin - - throw in the towel - - tie one on - - tighter than a drum - - time and time again - - time is of the essence - - tip of the iceberg - - tired but happy - - to coin a phrase - - to each his own - - to make a long story short - - to the best of my knowledge - - toe the line - - tongue in cheek - - too good to be true - - too hot to handle - - too numerous to mention - - touch with a ten foot pole - - tough as nails - - trial and error - - trials and tribulations - - tried and true - - trip down memory lane - - twist of fate - - two cents worth - - two peas in a pod - - ugly as sin - - under the counter - - under the gun - - under the same roof - - under the weather - - until the cows come home - - unvarnished truth - - up the creek - - uphill battle - - upper crust - - upset the applecart - - vain attempt - - vain effort - - vanquish the enemy - - vested interest - - waiting for the other shoe to drop - - wakeup call - - warm welcome - - watch your p's and q's - - watch your tongue - - watching the clock - - water under the bridge - - weather the storm - - weed them out - - week of Sundays - - went belly up - - wet behind the ears - - what goes around comes around - - what you see is what you get - - when it rains, it pours - - when push comes to shove - - when the cat's away - - when the going gets tough, the tough get going - - white as a sheet - - whole ball of wax - - whole hog - - whole nine yards - - wild goose chase - - will wonders never cease? - - wisdom of the ages - - wise as an owl - - wolf at the door - - words fail me - - work like a dog - - world weary - - worst nightmare - - worth its weight in gold - - wrong side of the bed - - yanking your chain - - yappy as a dog - - years young - - you are what you eat - - you can run but you can't hide - - you only live once - - you're the boss - - young and foolish - - young and vibrant diff --git a/.config/.vendor/vale/styles/write-good/E-Prime.yml b/.config/.vendor/vale/styles/write-good/E-Prime.yml deleted file mode 100644 index 074a102..0000000 --- a/.config/.vendor/vale/styles/write-good/E-Prime.yml +++ /dev/null @@ -1,32 +0,0 @@ -extends: existence -message: "Try to avoid using '%s'." -ignorecase: true -level: suggestion -tokens: - - am - - are - - aren't - - be - - been - - being - - he's - - here's - - here's - - how's - - i'm - - is - - isn't - - it's - - she's - - that's - - there's - - they're - - was - - wasn't - - we're - - were - - weren't - - what's - - where's - - who's - - you're diff --git a/.config/.vendor/vale/styles/write-good/Illusions.yml b/.config/.vendor/vale/styles/write-good/Illusions.yml deleted file mode 100644 index b4f1321..0000000 --- a/.config/.vendor/vale/styles/write-good/Illusions.yml +++ /dev/null @@ -1,11 +0,0 @@ -extends: repetition -message: "'%s' is repeated!" -level: warning -alpha: true -action: - name: edit - params: - - truncate - - " " -tokens: - - '[^\s]+' diff --git a/.config/.vendor/vale/styles/write-good/Passive.yml b/.config/.vendor/vale/styles/write-good/Passive.yml deleted file mode 100644 index f472cb9..0000000 --- a/.config/.vendor/vale/styles/write-good/Passive.yml +++ /dev/null @@ -1,183 +0,0 @@ -extends: existence -message: "'%s' may be passive voice. Use active voice if you can." -ignorecase: true -level: warning -raw: - - \b(am|are|were|being|is|been|was|be)\b\s* -tokens: - - '[\w]+ed' - - awoken - - beat - - become - - been - - begun - - bent - - beset - - bet - - bid - - bidden - - bitten - - bled - - blown - - born - - bought - - bound - - bred - - broadcast - - broken - - brought - - built - - burnt - - burst - - cast - - caught - - chosen - - clung - - come - - cost - - crept - - cut - - dealt - - dived - - done - - drawn - - dreamt - - driven - - drunk - - dug - - eaten - - fallen - - fed - - felt - - fit - - fled - - flown - - flung - - forbidden - - foregone - - forgiven - - forgotten - - forsaken - - fought - - found - - frozen - - given - - gone - - gotten - - ground - - grown - - heard - - held - - hidden - - hit - - hung - - hurt - - kept - - knelt - - knit - - known - - laid - - lain - - leapt - - learnt - - led - - left - - lent - - let - - lighted - - lost - - made - - meant - - met - - misspelt - - mistaken - - mown - - overcome - - overdone - - overtaken - - overthrown - - paid - - pled - - proven - - put - - quit - - read - - rid - - ridden - - risen - - run - - rung - - said - - sat - - sawn - - seen - - sent - - set - - sewn - - shaken - - shaven - - shed - - shod - - shone - - shorn - - shot - - shown - - shrunk - - shut - - slain - - slept - - slid - - slit - - slung - - smitten - - sold - - sought - - sown - - sped - - spent - - spilt - - spit - - split - - spoken - - spread - - sprung - - spun - - stolen - - stood - - stridden - - striven - - struck - - strung - - stuck - - stung - - stunk - - sung - - sunk - - swept - - swollen - - sworn - - swum - - swung - - taken - - taught - - thought - - thrived - - thrown - - thrust - - told - - torn - - trodden - - understood - - upheld - - upset - - wed - - wept - - withheld - - withstood - - woken - - won - - worn - - wound - - woven - - written - - wrung diff --git a/.config/.vendor/vale/styles/write-good/README.md b/.config/.vendor/vale/styles/write-good/README.md deleted file mode 100644 index 3edcc9b..0000000 --- a/.config/.vendor/vale/styles/write-good/README.md +++ /dev/null @@ -1,27 +0,0 @@ -Based on [write-good](https://github.com/btford/write-good). - -> Naive linter for English prose for developers who can't write good and wanna learn to do other stuff good too. - -``` -The MIT License (MIT) - -Copyright (c) 2014 Brian Ford - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` diff --git a/.config/.vendor/vale/styles/write-good/So.yml b/.config/.vendor/vale/styles/write-good/So.yml deleted file mode 100644 index e57f099..0000000 --- a/.config/.vendor/vale/styles/write-good/So.yml +++ /dev/null @@ -1,5 +0,0 @@ -extends: existence -message: "Don't start a sentence with '%s'." -level: error -raw: - - '(?:[;-]\s)so[\s,]|\bSo[\s,]' diff --git a/.config/.vendor/vale/styles/write-good/ThereIs.yml b/.config/.vendor/vale/styles/write-good/ThereIs.yml deleted file mode 100644 index 8b82e8f..0000000 --- a/.config/.vendor/vale/styles/write-good/ThereIs.yml +++ /dev/null @@ -1,6 +0,0 @@ -extends: existence -message: "Don't start a sentence with '%s'." -ignorecase: false -level: error -raw: - - '(?:[;-]\s)There\s(is|are)|\bThere\s(is|are)\b' diff --git a/.config/.vendor/vale/styles/write-good/TooWordy.yml b/.config/.vendor/vale/styles/write-good/TooWordy.yml deleted file mode 100644 index 275701b..0000000 --- a/.config/.vendor/vale/styles/write-good/TooWordy.yml +++ /dev/null @@ -1,221 +0,0 @@ -extends: existence -message: "'%s' is too wordy." -ignorecase: true -level: warning -tokens: - - a number of - - abundance - - accede to - - accelerate - - accentuate - - accompany - - accomplish - - accorded - - accrue - - acquiesce - - acquire - - additional - - adjacent to - - adjustment - - admissible - - advantageous - - adversely impact - - advise - - aforementioned - - aggregate - - aircraft - - all of - - all things considered - - alleviate - - allocate - - along the lines of - - already existing - - alternatively - - amazing - - ameliorate - - anticipate - - apparent - - appreciable - - as a matter of fact - - as a means of - - as far as I'm concerned - - as of yet - - as to - - as yet - - ascertain - - assistance - - at the present time - - at this time - - attain - - attributable to - - authorize - - because of the fact that - - belated - - benefit from - - bestow - - by means of - - by virtue of - - by virtue of the fact that - - cease - - close proximity - - commence - - comply with - - concerning - - consequently - - consolidate - - constitutes - - demonstrate - - depart - - designate - - discontinue - - due to the fact that - - each and every - - economical - - eliminate - - elucidate - - employ - - endeavor - - enumerate - - equitable - - equivalent - - evaluate - - evidenced - - exclusively - - expedite - - expend - - expiration - - facilitate - - factual evidence - - feasible - - finalize - - first and foremost - - for all intents and purposes - - for the most part - - for the purpose of - - forfeit - - formulate - - have a tendency to - - honest truth - - however - - if and when - - impacted - - implement - - in a manner of speaking - - in a timely manner - - in a very real sense - - in accordance with - - in addition - - in all likelihood - - in an effort to - - in between - - in excess of - - in lieu of - - in light of the fact that - - in many cases - - in my opinion - - in order to - - in regard to - - in some instances - - in terms of - - in the case of - - in the event that - - in the final analysis - - in the nature of - - in the near future - - in the process of - - inception - - incumbent upon - - indicate - - indication - - initiate - - irregardless - - is applicable to - - is authorized to - - is responsible for - - it is - - it is essential - - it seems that - - it was - - magnitude - - maximum - - methodology - - minimize - - minimum - - modify - - monitor - - multiple - - necessitate - - nevertheless - - not certain - - not many - - not often - - not unless - - not unlike - - notwithstanding - - null and void - - numerous - - objective - - obligate - - obtain - - on the contrary - - on the other hand - - one particular - - optimum - - overall - - owing to the fact that - - participate - - particulars - - pass away - - pertaining to - - point in time - - portion - - possess - - preclude - - previously - - prior to - - prioritize - - procure - - proficiency - - provided that - - purchase - - put simply - - readily apparent - - refer back - - regarding - - relocate - - remainder - - remuneration - - requirement - - reside - - residence - - retain - - satisfy - - shall - - should you wish - - similar to - - solicit - - span across - - strategize - - subsequent - - substantial - - successfully complete - - sufficient - - terminate - - the month of - - the point I am trying to make - - therefore - - time period - - took advantage of - - transmit - - transpire - - type of - - until such time as - - utilization - - utilize - - validate - - various different - - what I mean to say is - - whether or not - - with respect to - - with the exception of - - witnessed diff --git a/.config/.vendor/vale/styles/write-good/Weasel.yml b/.config/.vendor/vale/styles/write-good/Weasel.yml deleted file mode 100644 index d1d90a7..0000000 --- a/.config/.vendor/vale/styles/write-good/Weasel.yml +++ /dev/null @@ -1,29 +0,0 @@ -extends: existence -message: "'%s' is a weasel word!" -ignorecase: true -level: warning -tokens: - - clearly - - completely - - exceedingly - - excellent - - extremely - - fairly - - huge - - interestingly - - is a number - - largely - - mostly - - obviously - - quite - - relatively - - remarkably - - several - - significantly - - substantially - - surprisingly - - tiny - - usually - - various - - vast - - very diff --git a/.config/.vendor/vale/styles/write-good/meta.json b/.config/.vendor/vale/styles/write-good/meta.json deleted file mode 100644 index a115d28..0000000 --- a/.config/.vendor/vale/styles/write-good/meta.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "feed": "https://github.com/errata-ai/write-good/releases.atom", - "vale_version": ">=1.0.0" -} diff --git a/.gitignore b/.gitignore index e4b832e..6653b9a 100644 --- a/.gitignore +++ b/.gitignore @@ -106,3 +106,4 @@ docs/releasehx/*.adoc releasehx-install.sh # DocOps Lab vendor files scripts/.vendor/ +.config/.vendor/ From 722e8896404956aa327d4295c2256330db94f3e3 Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Fri, 2 Jan 2026 15:56:44 -0500 Subject: [PATCH 11/23] chore: bump version to 0.3.0 for release --- README.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.adoc b/README.adoc index eb90959..f8da664 100644 --- a/README.adoc +++ b/README.adoc @@ -1,8 +1,8 @@ = Issuer: Bulk GitHub Issue Creator :toc: macro :toclevels: 3 -:this_prod_vrsn: 0.2.1 -:next_prod_vrsn: 0.3.0 +:this_prod_vrsn: 0.3.0 +:next_prod_vrsn: 0.4.0 :docker_base_command: docker run -it --rm --user $(id -u):$(id -g) -v $(pwd):/workdir -e ISSUER_API_TOKEN=$GITHUB_TOKEN docopslab/issuer :append_or_impose: Prepend items with `+` to indicate they should be appended to existing labels. Items without `+` will only be used for issues with no `tags` designated. ifdef::env-github[] From 84933efb26b1245ca993fa07642a8c1458cd866e Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Fri, 2 Jan 2026 16:20:01 -0500 Subject: [PATCH 12/23] chore: Reorganize dev dependency declarations - Move all dev gems to :development group - Add ReleaseHx --- Gemfile | 11 ++-- Gemfile.lock | 136 +++++++++++++++++++++++++++++++++++++++++++++++-- issuer.gemspec | 6 --- 3 files changed, 140 insertions(+), 13 deletions(-) diff --git a/Gemfile b/Gemfile index e582d7e..02fe083 100644 --- a/Gemfile +++ b/Gemfile @@ -3,10 +3,15 @@ source 'https://rubygems.org' # Specify your gem's dependencies in issuer.gemspec gemspec -gem 'rake', '~> 13.0' -gem 'rspec', '~> 3.0' +# Development dependencies +# Note: rubocop and rubocop-rspec are provided by docopslab-dev +group :development, :test do + gem 'rspec', '~> 3.0' +end group :development do - # DocOps Lab development tooling + gem 'rake', '~> 13.0' + gem 'asciidoctor', '~> 2.0' gem 'docopslab-dev', '~> 0.1.0' + gem 'releasehx' end diff --git a/Gemfile.lock b/Gemfile.lock index 3c1ab71..bd5bb31 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - issuer (0.2.1) + issuer (0.3.0) faraday-retry (~> 2.0) octokit (~> 8.0) thor (~> 1.0) @@ -14,6 +14,16 @@ GEM public_suffix (>= 2.0.2, < 8.0) afm (1.0.0) asciidoctor (2.0.26) + asciidoctor-pdf (2.3.14) + asciidoctor (~> 2.0) + concurrent-ruby (~> 1.1) + matrix (~> 0.4) + prawn (~> 2.4.0) + prawn-icon (~> 3.0.0) + prawn-svg (~> 0.34.0) + prawn-table (~> 0.2.0) + prawn-templates (~> 0.1.0) + treetop (~> 1.6.0) ast (2.4.3) async (2.35.0) console (~> 1.29) @@ -30,11 +40,16 @@ GEM bundler (>= 1.2.0) thor (~> 1.0) coderay (1.1.3) + colorator (1.1.0) + commonmarker (0.23.12) concurrent-ruby (1.3.6) console (1.34.2) fiber-annotation fiber-local (~> 1.1) json + css_parser (1.21.1) + addressable + csv (3.3.5) debride (1.14.0) path_expander (~> 2.0) prism (~> 1.5) @@ -87,12 +102,18 @@ GEM dry-inflector (~> 1.0) dry-logic (~> 1.4) zeitwerk (~> 2.6) + em-websocket (0.5.3) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0) ethon (0.15.0) ffi (>= 1.15.0) + eventmachine (1.2.7) faraday (2.13.2) faraday-net_http (>= 2.0, < 3.5) json logger + faraday-follow_redirects (0.3.0) + faraday (>= 1, < 3) faraday-net_http (3.4.1) net-http (>= 0.5.0) faraday-retry (2.3.2) @@ -108,6 +129,10 @@ GEM path_expander (~> 2.0) prism (~> 1.7) sexp_processor (~> 4.8) + forwardable-extended (2.6.0) + google-protobuf (4.33.2-x86_64-linux-gnu) + bigdecimal + rake (>= 13) hashery (2.1.2) html-proofer (5.1.1) addressable (~> 2.3) @@ -119,6 +144,9 @@ GEM typhoeus (~> 1.3) yell (~> 2.0) zeitwerk (~> 2.5) + http_parser.rb (0.8.1) + i18n (1.14.8) + concurrent-ruby (~> 1.0) inch (0.8.0) pry sparkr (>= 0.2.0) @@ -126,13 +154,63 @@ GEM yard (~> 0.9.12) io-console (0.8.2) io-event (1.14.2) + jekyll (4.4.1) + addressable (~> 2.4) + base64 (~> 0.2) + colorator (~> 1.0) + csv (~> 3.0) + em-websocket (~> 0.5) + i18n (~> 1.0) + jekyll-sass-converter (>= 2.0, < 4.0) + jekyll-watch (~> 2.0) + json (~> 2.6) + kramdown (~> 2.3, >= 2.3.1) + kramdown-parser-gfm (~> 1.0) + liquid (~> 4.0) + mercenary (~> 0.3, >= 0.3.6) + pathutil (~> 0.9) + rouge (>= 3.0, < 5.0) + safe_yaml (~> 1.0) + terminal-table (>= 1.8, < 4.0) + webrick (~> 1.7) + jekyll-asciidoc (3.0.1) + asciidoctor (>= 1.5.0, < 3.0.0) + jekyll (>= 3.0.0) + jekyll-sass-converter (3.1.0) + sass-embedded (~> 1.75) + jekyll-watch (2.2.1) + listen (~> 3.0) + jmespath (1.6.2) json (2.18.0) + json-schema (6.1.0) + addressable (~> 2.8) + bigdecimal (>= 3.1, < 5) + json_rpc_handler (0.1.1) + jsonpath (1.1.5) + multi_json + kramdown (2.4.0) + rexml + kramdown-asciidoc (2.1.1) + kramdown (~> 2.4.0) + kramdown-parser-gfm (~> 1.1.0) + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) language_server-protocol (3.17.0.5) lint_roller (1.1.0) + liquid (4.0.4) + listen (3.9.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) logger (1.7.0) + matrix (0.4.3) + mcp (0.4.0) + json-schema (>= 4.1) + json_rpc_handler (~> 0.1) + mercenary (0.4.0) method_source (1.1.0) metrics (0.15.0) mize (0.6.1) + multi_json (1.19.1) net-http (0.6.0) uri nokogiri (1.18.10-x86_64-linux-gnu) @@ -146,12 +224,31 @@ GEM ast (~> 2.4.1) racc path_expander (2.0.0) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + pdf-core (0.9.0) pdf-reader (2.15.0) Ascii85 (>= 1.0, < 3.0, != 2.0.0) afm (>= 0.2.1, < 2) hashery (~> 2.0) ruby-rc4 ttfunk + polyglot (0.3.5) + prawn (2.4.0) + pdf-core (~> 0.9.0) + ttfunk (~> 1.7) + prawn-icon (3.0.0) + prawn (>= 1.1.0, < 3.0.0) + prawn-svg (0.34.2) + css_parser (~> 1.6) + matrix (~> 0.4.2) + prawn (>= 0.11.1, < 3) + rexml (~> 3.2) + prawn-table (0.2.2) + prawn (>= 1.3.0, < 3.0.0) + prawn-templates (0.1.2) + pdf-reader (~> 2.0) + prawn (~> 2.2) prism (1.7.0) pry (0.15.2) coderay (~> 1.1) @@ -160,6 +257,9 @@ GEM racc (1.8.1) rainbow (3.1.1) rake (13.3.1) + rb-fsevent (0.11.2) + rb-inotify (0.11.1) + ffi (~> 1.0) readline (0.0.4) reline reek (6.5.0) @@ -169,9 +269,28 @@ GEM rainbow (>= 2.0, < 4.0) rexml (~> 3.1) regexp_parser (2.11.3) + releasehx (0.1.1) + asciidoctor-pdf (~> 2.3) + commonmarker (~> 0.23) + faraday (~> 2.9) + faraday-follow_redirects (~> 0.3.0) + jekyll (~> 4.4) + jekyll-asciidoc (~> 3.0.0) + jmespath (~> 1.6) + jsonpath (~> 1.1) + kramdown (~> 2.4) + kramdown-asciidoc (~> 2.1) + liquid (~> 4.0) + mcp (~> 0.4) + prism (~> 1.5) + thor (~> 1.3) + tilt (~> 2.3) + to_regexp (= 0.2.1) + yaml (~> 0.4) reline (0.6.3) io-console (~> 0.5) rexml (3.4.4) + rouge (4.7.0) rspec (3.13.1) rspec-core (~> 3.13.0) rspec-expectations (~> 3.13.0) @@ -210,6 +329,9 @@ GEM ruby_parser (3.22.0) racc (~> 1.5) sexp_processor (~> 4.16) + safe_yaml (1.0.5) + sass-embedded (1.97.1-x86_64-linux-gnu) + google-protobuf (~> 4.31) sawyer (0.9.2) addressable (>= 2.3.5) faraday (>= 0.17.3, < 3) @@ -225,21 +347,26 @@ GEM sync (0.5.0) term-ansicolor (1.11.3) tins (~> 1) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) thor (1.4.0) + tilt (2.6.1) tins (1.51.0) bigdecimal mize (~> 0.6) readline sync + to_regexp (0.2.1) traces (0.18.2) + treetop (1.6.18) + polyglot (~> 0.3) ttfunk (1.8.0) bigdecimal (~> 3.1) typhoeus (1.5.0) ethon (>= 0.9.0, < 0.16.0) - unicode-display_width (3.2.0) - unicode-emoji (~> 4.1) - unicode-emoji (4.2.0) + unicode-display_width (2.6.0) uri (1.0.3) + webrick (1.9.2) yaml (0.4.0) yard (0.9.38) yell (2.2.2) @@ -254,6 +381,7 @@ DEPENDENCIES docopslab-dev (~> 0.1.0) issuer! rake (~> 13.0) + releasehx rspec (~> 3.0) BUNDLED WITH diff --git a/issuer.gemspec b/issuer.gemspec index f8ec533..ec0eb3a 100644 --- a/issuer.gemspec +++ b/issuer.gemspec @@ -31,10 +31,4 @@ Gem::Specification.new do |spec| spec.add_dependency "octokit", "~> 8.0" spec.add_dependency "thor", "~> 1.0" spec.add_dependency "faraday-retry", "~> 2.0" - - # Development dependencies - spec.add_development_dependency "bundler", "~> 2.0" - spec.add_development_dependency "rake", "~> 13.0" - spec.add_development_dependency "rspec", "~> 3.0" - spec.add_development_dependency "asciidoctor", "~> 2.0" end From 2a18cf403d2cdf8965fec2f0aef4363985f12ca2 Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Fri, 2 Jan 2026 16:44:04 -0500 Subject: [PATCH 13/23] chore: Style changes to docs --- README.adoc | 19 +++--- specs/tests/README.adoc | 126 ++++++++++++++++++++++------------------ 2 files changed, 81 insertions(+), 64 deletions(-) diff --git a/README.adoc b/README.adoc index f8da664..72daaad 100644 --- a/README.adoc +++ b/README.adoc @@ -337,8 +337,8 @@ Whether to treat the issue as a stub entry, meaning prepend any `$meta.defaults. A source IMYML file is required and can be specified in two ways: -* *Positional argument* (most common): Place the file path immediately after `issuer` -* *Named option*: Use the `--file` option flag to specify the file path +* *Positional argument* (most common). Place the file path immediately after `issuer` +* *Named option.* Use the `--file` option flag to specify the file path Examples: @@ -436,9 +436,10 @@ Issuer automatically logs all API operations for tracking and potential cleanup. By default, logs are stored in a user-wide directory: -* *Linux/macOS*: `~/.config/issuer/logs/` -* *With XDG Base Directory*: `$XDG_CONFIG_HOME/issuer/logs/` -* *Custom location*: Set `ISSUER_CONFIG_DIR` environment variable +[horizontal] +Linux/macOS:: `~/.config/issuer/logs/` +With XDG Base Directory:: `$XDG_CONFIG_HOME/issuer/logs/` +Custom location:: Set `ISSUER_CONFIG_DIR` environment variable Example: [source,bash] @@ -550,10 +551,10 @@ bundle exec rspec --pattern "*ops*" The `pr_test` task runs the exact same tests that GitHub Actions runs for pull requests: -* *RSpec Tests*: All unit tests (`bundle exec rake spec`) -* *CLI Tests*: Command-line interface functionality tests -* *YAML Validation*: Validates all example YAML files -* *Documentation Quality*: Vale linting on all documentation files +RSpec Tests:: All unit tests (`bundle exec rake spec`) +CLI Tests:: Command-line interface functionality tests +YAML Validation:: Validates all example YAML files +Documentation Quality:: Vale linting on all documentation files This ensures you can validate your changes locally before pushing to GitHub. diff --git a/specs/tests/README.adoc b/specs/tests/README.adoc index 5b592ea..41c4445 100644 --- a/specs/tests/README.adoc +++ b/specs/tests/README.adoc @@ -27,10 +27,10 @@ The issuer CLI automatically logs all created artifacts (issues, milestones, lab When you run issuer with live operations (not `--dry`): -1. *Run Tracking*: A unique run ID is generated (example: `run_20250711_143022_abcd`) -2. *Artifact Logging*: All created issues, milestones, and labels are logged with metadata -3. *Status Tracking*: Run status is tracked (`in_progress`, `completed`, `failed`) -4. *JSON Storage*: All data is stored in JSON format in `~/.config/issuer/logs/.json` +. *Run Tracking*: A unique run ID is generated (example: `run_20250711_143022_abcd`) +. *Artifact Logging*: All created issues, milestones, and labels are logged with metadata +. *Status Tracking*: Run status is tracked (`in_progress`, `completed`, `failed`) +. *JSON Storage*: All data is stored in JSON format in `~/.config/issuer/logs/.json` === Log Structure @@ -69,9 +69,10 @@ Each run log contains: During test runs, artifacts are automatically logged. This enables: -* *Verification*: Confirm that all expected artifacts were created -* *Debugging*: Track what was created when tests fail -* *Cleanup Planning*: Prepare for future cleanup script development +Verification:: Confirm that all expected artifacts were created +Debugging:: Track what was created when tests fail +Cleanup Planning:: +Prepare for future cleanup script development The test cleanup scripts can read these logs to understand what needs to be cleaned up. @@ -158,22 +159,36 @@ Or run with options: === Core Functionality Tests -* *`01-auth-connection.yml`*: Basic authentication and API connectivity -* *`02-basic-issues.yml`*: Simple issue creation, markdown support, special characters -* *`03-milestone-tests.yml`*: Milestone creation and assignment -* *`04-label-tests.yml`*: Label creation, default/append logic -* *`05-assignment-tests.yml`*: User assignment functionality +`01-auth-connection.yml`:: +Basic authentication and API connectivity + +`02-basic-issues.yml`:: +Simple issue creation, markdown support, special characters + +`03-milestone-tests.yml`:: +Milestone creation and assignment + +`04-label-tests.yml`:: +Label creation, default/append logic + +`05-assignment-tests.yml`:: +User assignment functionality === Advanced Tests -* *`06-automation-tests.yml`*: Automation flags (`--auto-metadata`, `--auto-versions`, etc.) -* *`07-error-tests.yml`*: Error handling scenarios (invalid repo, etc.) -* *`08-complex-tests.yml`*: Complex integration scenarios with multiple features +`06-automation-tests.yml`:: +Automation flags (`--auto-metadata`, `--auto-versions`, etc.) + +`07-error-tests.yml`:: +Error handling scenarios (invalid repo, etc.) + +`08-complex-tests.yml`:: +Complex integration scenarios with multiple features === Configuration -* *`config.yml.example`*: Template configuration file -* *`config.yml`*: Your customized configuration (create from example) +`config.yml.example`:: Template configuration file +`config.yml`:: Your customized configuration (create from example) == Test Runner Features @@ -194,12 +209,12 @@ Options: === Test Categories -1. *Dry-run tests*: Validate IMYML parsing without API calls -2. *Basic functionality*: Core issue creation features -3. *Advanced features*: Milestones, labels, assignments -4. *Automation*: Testing `--auto-*` flags -5. *Error scenarios*: Invalid inputs and error handling -6. *Edge cases*: Unicode, large content, special characters +. *Dry-run tests:* Validate IMYML parsing without API calls +. *Basic functionality:* Core issue creation features +. *Advanced features:* Milestones, labels, assignments +. *Automation:* Testing `--auto-*` flags +. *Error scenarios:* Invalid inputs and error handling +. *Edge cases:* Unicode, large content, special characters == Results and Logging @@ -219,12 +234,13 @@ specs/tests/results/ Tests are considered successful when: -* ✅ All issues are created without errors -* ✅ Milestones are created when needed -* ✅ Labels are created when needed -* ✅ Assignments work correctly -* ✅ Automation flags work as expected -* ✅ Error scenarios fail gracefully +[%interactive] +- [ ] All issues are created without errors +- [ ] Milestones are created when needed +- [ ] Labels are created when needed +- [ ] Assignments work correctly +- [ ] Automation flags work as expected +- [ ] Error scenarios fail gracefully == Cleanup @@ -279,7 +295,7 @@ Run full test suite before releases: === Common Issues -1. *Authentication Errors* +. *Authentication Errors* + ---- GitHub token not found in environment variables @@ -287,7 +303,7 @@ GitHub token not found in environment variables + Solution: Set `GITHUB_TOKEN` or other token environment variables -2. *Repository Access Errors* +. *Repository Access Errors* + ---- Not Found (HTTP 404) @@ -295,7 +311,7 @@ Not Found (HTTP 404) + Solution: Verify repository name and token permissions -3. *Rate Limiting* +. *Rate Limiting* + ---- API rate limit exceeded @@ -303,7 +319,7 @@ API rate limit exceeded + Solution: Wait or use a token with higher rate limits -4. *Permission Errors* +. *Permission Errors* + ---- Resource not accessible by integration @@ -338,11 +354,11 @@ issuer specs/tests/github-api/01-auth-connection.yml === Adding New Tests -1. Create a new `.yml` file in `specs/tests/github-api/` -2. Follow the naming convention: `NN-description.yml` -3. Use `[TEST]` prefix in issue summaries -4. Update the test runner script to include the new test -5. Document expected behavior in issue bodies +. Create a new `.yml` file in `specs/tests/github-api/` +. Follow the naming convention: `NN-description.yml` +. Use `[TEST]` prefix in issue summaries +. Update the test runner script to include the new test +. Document expected behavior in issue bodies === Test File Template @@ -422,30 +438,30 @@ echo "Running GitHub API integration tests..." == Security Considerations -1. *Token Security*: Never commit GitHub tokens to version control -2. *Test Repository*: Use a dedicated test repository, not production repos -3. *Cleanup*: Always clean up test artifacts to avoid clutter -4. *Rate Limits*: Be mindful of GitHub API rate limits during testing -5. *Permissions*: Use tokens with minimal required permissions +. *Token Security*: Never commit GitHub tokens to version control +. *Test Repository*: Use a dedicated test repository, not production repos +. *Cleanup*: Always clean up test artifacts to avoid clutter +. *Rate Limits*: Be mindful of GitHub API rate limits during testing +. *Permissions*: Use tokens with minimal required permissions == Contributing When contributing to the test suite: -1. *Add tests for new features*: Every new feature should have corresponding tests -2. *Update existing tests*: Modify tests when changing functionality -3. *Test edge cases*: Include tests for error conditions and edge cases -4. *Document expectations*: Clearly document what each test validates -5. *Clean up*: Ensure tests can be cleaned up properly +. *Add tests for new features*: Every new feature should have corresponding tests +. *Update existing tests*: Modify tests when changing functionality +. *Test edge cases*: Include tests for error conditions and edge cases +. *Document expectations*: Clearly document what each test validates +. *Clean up*: Ensure tests can be cleaned up properly == Support For issues with the testing suite: -1. Check the troubleshooting section above -2. Review test logs in `specs/tests/results/` -3. Run individual tests manually for debugging -4. Open an issue in the main repository with: - * Test configuration used - * Error messages - * Expected vs actual behavior +. Check the troubleshooting section above +. Review test logs in `specs/tests/results/` +. Run individual tests manually for debugging +. Open an issue in the main repository with: +* Test configuration used +* Error messages +* Expected vs actual behavior From a78dff54dfd7e760848cf8c1eab295101250d102 Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Mon, 5 Jan 2026 19:21:38 -0500 Subject: [PATCH 14/23] Adjust/clarify --json behavior --- README.adoc | 19 ++++++------------- lib/issuer/cli.rb | 43 ++++++++++++++++++++----------------------- 2 files changed, 26 insertions(+), 36 deletions(-) diff --git a/README.adoc b/README.adoc index 72daaad..589932b 100644 --- a/README.adoc +++ b/README.adoc @@ -376,7 +376,9 @@ Whether to treat all issues as stubs, meaning prepend any `$meta.defaults.head` Dry-run: print actions but do not post to GitHub. --json [_FILE_PATH_]:: -Save GitHub API issue payloads as JSON files instead of posting to GitHub. Automatically enables dry-run mode. If no path is specified, saves to timestamped file in `_payloads/` directory. +Save GitHub API issue payload as JSON file. +Use `--dry` if you want to skip posting while generating JSON. +If no `FILE_PATH` is specified, saves to time-stamped file in `_payloads/` directory. --auto-versions, --auto-milestones:: Automatically create missing milestones/versions without prompting for confirmation. @@ -618,22 +620,13 @@ This documentation is automatically updated with each gem release. [[release-history-management]] === Release History Management -As of version 0.2.0, the Release Notes and Changelog are generated using the _ReleaseHx_ tool, which is still in pre-release. -You can find the release history assets in the `docs/releasehx/` directory, which contains a configuration file and the 0.2.0 "`RHYML`" file that was auto-modified and then manually edited to produce the GitHub link:https://github.com/DocOps/issuer/releases[release announcement]. - -ReleaseHx will be available soon, but for now the following is only usable by DocOps Lab. - -. Add local releasehx gem to `Gemfile`: -+ -[source,ruby] -gem 'releasehx', path: '../releasehx' +As of version 0.2.0, Release Notes and Changelog are generated using the link:https://github.com/DocOps/releasehx[_ReleaseHx_] tool. +You can find the release history assets in the `docs/releasehx/` directory, which contains a configuration file and RHYML files that are auto-generated and then manually edited to produce the GitHub link:https://github.com/DocOps/issuer/releases[release announcements]. . Draft RHYML draft file from the online GitHub Issues for the given version: + [.prompt,subs=+attributes] - ./releasehx-install.sh && bundle exec rhx {this_prod_vrsn} --yaml docs/releasehx/release-{this_prod_vrsn}.yml --config docs/releasehx/config.yml -+ -The `releasehx-install.sh` ensures ReleaseHx is up to date. + bundle exec rhx {this_prod_vrsn} --yaml docs/releasehx/release-{this_prod_vrsn}.yml --config docs/releasehx/config.yml . Manually edit the RHYML draft file. diff --git a/lib/issuer/cli.rb b/lib/issuer/cli.rb index 51dcb10..a7c8b97 100644 --- a/lib/issuer/cli.rb +++ b/lib/issuer/cli.rb @@ -18,7 +18,7 @@ def self.exit_on_failure? class_option :tags, type: :string, desc: 'Comma-separated default or appended (+) labels for all issues' class_option :stub, type: :boolean, desc: 'Enable stub mode for all issues' class_option :dry, type: :boolean, default: false, aliases: ['--dry-run'], desc: 'Print issues, don\'t post' - class_option :json, type: :string, lazy_default: '', desc: 'Save API payloads as JSON to PATH (defaults to _payloads/, auto-enables --dry)' + class_option :json, type: :string, lazy_default: '', desc: 'Save API payloads as JSON to PATH (defaults to _payloads/). Combine with --dry to skip posting.' class_option :tokenv, type: :string, desc: 'Name of environment variable containing GitHub token' # Resource automation options @@ -97,8 +97,9 @@ def main file=nil defaults['stub'] = options[:stub] if !options[:stub].nil? # Determine target repository + dry_mode = options[:dry] repo = options[:proj] || meta['proj'] || ENV['ISSUER_REPO'] || ENV['ISSUER_PROJ'] - if repo.nil? && !options[:dry] + if repo.nil? && !dry_mode abort 'No target repo set. Use --proj, $meta.proj, or ENV[ISSUER_REPO].' end @@ -111,9 +112,8 @@ def main file=nil # Apply stub logic with head/tail/body composition issues = Issuer::Ops.apply_stub_logic(issues, defaults) - # Auto-enable dry mode when --json is used - json_mode = !options[:json].nil? - dry_mode = options[:dry] || json_mode + json_requested = !options[:json].nil? + json_path = options[:json] # Separate valid and invalid issues valid_issues = issues.select(&:valid?) @@ -124,12 +124,11 @@ def main file=nil puts "Skipping issue ##{find_original_index(issues, issue) + 1}: #{issue.validation_errors.join(', ')}" end + site = nil + if dry_mode - if json_mode - perform_json_output(valid_issues, repo, options[:json]) - else - perform_dry_run(valid_issues, repo) - end + site = build_dry_run_site + perform_dry_run(valid_issues, repo, site) else # Use Sites architecture for validation and posting site_options = {} @@ -160,6 +159,8 @@ def main file=nil end end + perform_json_output(valid_issues, repo, json_path, site, dry_run: dry_mode) if json_requested + print_summary(valid_issues.length, invalid_issues.length, dry_mode) end @@ -214,12 +215,7 @@ def find_original_index issues_array, target_issue issues_array.find_index(target_issue) || 0 end - def perform_dry_run issues, repo - # Create site instance for parameter conversion in dry-run mode - site_options = { token: 'dry-run-token' } - site_options[:token_env_var] = options[:tokenv] if options[:tokenv] - site = Issuer::Sites::Factory.create('github', **site_options) - + def perform_dry_run issues, repo, site issues.each do |issue| print_issue_summary(issue, repo, site) end @@ -231,7 +227,7 @@ def perform_dry_run issues, repo end end - def perform_json_output issues, repo, json_path + def perform_json_output issues, repo, json_path, site, dry_run: require 'json' require 'fileutils' @@ -246,14 +242,9 @@ def perform_json_output issues, repo, json_path FileUtils.mkdir_p(output_dir) unless Dir.exist?(output_dir) - # Create site instance for parameter conversion - site_options = { token: 'dry-run-token' } - site_options[:token_env_var] = options[:tokenv] if options[:tokenv] - site = Issuer::Sites::Factory.create('github', **site_options) - # Convert issues to API payloads payloads = issues.map do |issue| - site.convert_issue_to_site_params(issue, repo, dry_run: true) + site.convert_issue_to_site_params(issue, repo, dry_run: dry_run) end # Create JSON structure @@ -288,6 +279,12 @@ def perform_json_output issues, repo, json_path end end + def build_dry_run_site + site_options = { token: 'dry-run-token' } + site_options[:token_env_var] = options[:tokenv] if options[:tokenv] + Issuer::Sites::Factory.create('github', **site_options) + end + def print_summary valid_count, invalid_count, dry_run if dry_run puts "\nDry run complete (use without --dry to actually post)" From 5826ab68ff1081c0aff330ae1ee5148869c16884 Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Fri, 23 Jan 2026 21:41:13 -0500 Subject: [PATCH 15/23] Move release config to .config --- .config/releasehx.yml | 152 ++++++++++++++++++ .gitignore | 3 +- Gemfile | 2 +- Gemfile.lock | 46 +++--- README.adoc | 9 +- Rakefile | 29 ++++ docs/releasehx/config.yml | 118 -------------- .../release-0.2.0.yml => releases/0.2.0.yml} | 0 docs/releases/0.3.0.yml | 25 +++ specs/tests/rspec/cli_spec.rb | 25 ++- 10 files changed, 252 insertions(+), 157 deletions(-) create mode 100644 .config/releasehx.yml delete mode 100644 docs/releasehx/config.yml rename docs/{releasehx/release-0.2.0.yml => releases/0.2.0.yml} (100%) create mode 100644 docs/releases/0.3.0.yml diff --git a/.config/releasehx.yml b/.config/releasehx.yml new file mode 100644 index 0000000..5d4ff68 --- /dev/null +++ b/.config/releasehx.yml @@ -0,0 +1,152 @@ +# ReleaseHx configuration for DocOps/issuer repository + +origin: + source: github + project: DocOps/issuer + version: 3 + label: GitHub Issues API v3 + format: json + +paths: + drafts_dir: docs/releases + payloads_dir: docs/releases/payloads + templates_dir: docs/releases/templates + mappings_dir: docs/releases/mappings + +conversions: + summ: issue_heading + head: issue_heading + note: issue_body + note_pattern: '/^## Release Note\s*\n+(?(.|\n)+)/mi' + markup: asciidoc + engine: asciidoctor + +rhyml: + pasterize_summ: true + pasterize_head: true + chid: "{{ release.code | replace: '.', '_' | upcase }}-{{ change.tick }}" + empty_notes: skip + +parts: + label_prefix: "part:" + cli: + text: CLI + head: CLI + icon: terminal + imyml: + text: IMYML + head: IMYML + icon: file-code-o + documentation: + text: documentation + head: Documentation + icon: book + api_clients: + text: API Clients + head: API Clients + icon: plug + +types: + label_prefix: "type:" + removal: + slug: removal + text: removal + head: Removed + icon: exclamation-triangle + feature: + slug: feature + text: new feature + head: Added + icon: plus-square-o + bug: + slug: bug + text: bug fix + head: Fixed + icon: bug + improvement: + slug: improvement + text: improvement + head: Improved + icon: wrench + deprecation: + slug: deprecation + text: deprecation + head: Deprecated + icon: exclamation-circle + +tags: + _include: ['needs:note', 'changelog', 'breaking', 'deprecation'] + _exclude: ['internal', 'wontfix', 'duplicate'] + + needs:note: + head: Release Notes Needed + icon: pencil + text: Requires release note + drop: true + + breaking: + head: Breaking Changes + icon: exclamation-triangle + text: Breaking changes + + deprecation: + head: Deprecations + icon: clock-o + text: Deprecated features + +links: + web: https://github.com/DocOps/issuer/issues/{{ tick }} + git: https://github.com/DocOps/issuer/commit/{{ hash }} + usr: https://github.com/{{ vars.lead }} + +modes: + asciidoc_frontmatter: true + markdown_frontmatter: false + remove_excess_lines: 2 + +history: + items: + issue_links: true + git_links: false + metadata_icons: true + +# Enable dynamic labeling for the changelog section +changelog: + head: What's Changed + text: Summary of all changes in this release. + htag: h2 + spot: 2 + sort: + - breaking:grouping1 + - type:grouping1 + items: + frame: unordered + allow_redundant: false + show_issue_links: true + metadata_labels: before + metadata_icons: before + show_parts_label: true + show_tags_label: false + show_type_label: false + show_lead_label: false + +# Enable dynamic labeling for the release notes section +notes: + head: Release Notes + text: Detailed descriptions of notable changes. + htag: h2 + spot: 1 + sort: + - breaking:grouping1 + - deprecation:grouping1 + - part:grouping1 + items: + frame: unordered + allow_redundant: true + show_issue_links: true + metadata_labels: before + metadata_icons: before + show_parts_label: true + show_tags_label: true + show_type_label: true + show_lead_label: true diff --git a/.gitignore b/.gitignore index 6653b9a..009e7ce 100644 --- a/.gitignore +++ b/.gitignore @@ -101,8 +101,7 @@ specs/data/*-issues.yml .agent/ # Docs and ReleaseHx files -docs/releasehx/*.md -docs/releasehx/*.adoc +docs/releases/*.md releasehx-install.sh # DocOps Lab vendor files scripts/.vendor/ diff --git a/Gemfile b/Gemfile index 02fe083..54e5dd8 100644 --- a/Gemfile +++ b/Gemfile @@ -13,5 +13,5 @@ group :development do gem 'rake', '~> 13.0' gem 'asciidoctor', '~> 2.0' gem 'docopslab-dev', '~> 0.1.0' - gem 'releasehx' + gem 'releasehx', '~> 0.1.1' end diff --git a/Gemfile.lock b/Gemfile.lock index bd5bb31..021e959 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -14,9 +14,9 @@ GEM public_suffix (>= 2.0.2, < 8.0) afm (1.0.0) asciidoctor (2.0.26) - asciidoctor-pdf (2.3.14) + asciidoctor-pdf (2.3.24) asciidoctor (~> 2.0) - concurrent-ruby (~> 1.1) + concurrent-ruby (~> 1.3) matrix (~> 0.4) prawn (~> 2.4.0) prawn-icon (~> 3.0.0) @@ -24,6 +24,7 @@ GEM prawn-table (~> 0.2.0) prawn-templates (~> 0.1.0) treetop (~> 1.6.0) + ttfunk (~> 1.7.0) ast (2.4.3) async (2.35.0) console (~> 1.29) @@ -108,19 +109,19 @@ GEM ethon (0.15.0) ffi (>= 1.15.0) eventmachine (1.2.7) - faraday (2.13.2) + faraday (2.14.0) faraday-net_http (>= 2.0, < 3.5) json logger faraday-follow_redirects (0.3.0) faraday (>= 1, < 3) - faraday-net_http (3.4.1) - net-http (>= 0.5.0) + faraday-net_http (3.4.2) + net-http (~> 0.5) faraday-retry (2.3.2) faraday (~> 2.0) fasterer (0.11.0) ruby_parser (>= 3.19.1) - ffi (1.17.2-x86_64-linux-gnu) + ffi (1.17.3-x86_64-linux-gnu) fiber-annotation (0.2.0) fiber-local (1.1.0) fiber-storage @@ -130,7 +131,7 @@ GEM prism (~> 1.7) sexp_processor (~> 4.8) forwardable-extended (2.6.0) - google-protobuf (4.33.2-x86_64-linux-gnu) + google-protobuf (4.33.4-x86_64-linux-gnu) bigdecimal rake (>= 13) hashery (2.1.2) @@ -185,7 +186,6 @@ GEM json-schema (6.1.0) addressable (~> 2.8) bigdecimal (>= 3.1, < 5) - json_rpc_handler (0.1.1) jsonpath (1.1.5) multi_json kramdown (2.4.0) @@ -198,21 +198,21 @@ GEM language_server-protocol (3.17.0.5) lint_roller (1.1.0) liquid (4.0.4) - listen (3.9.0) + listen (3.10.0) + logger rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) logger (1.7.0) matrix (0.4.3) - mcp (0.4.0) + mcp (0.6.0) json-schema (>= 4.1) - json_rpc_handler (~> 0.1) mercenary (0.4.0) method_source (1.1.0) metrics (0.15.0) mize (0.6.1) multi_json (1.19.1) - net-http (0.6.0) - uri + net-http (0.9.1) + uri (>= 0.11.1) nokogiri (1.18.10-x86_64-linux-gnu) racc (~> 1.4) octokit (8.1.0) @@ -227,7 +227,7 @@ GEM pathutil (0.16.2) forwardable-extended (~> 2.6) pdf-core (0.9.0) - pdf-reader (2.15.0) + pdf-reader (2.15.1) Ascii85 (>= 1.0, < 3.0, != 2.0.0) afm (>= 0.2.1, < 2) hashery (~> 2.0) @@ -249,11 +249,11 @@ GEM prawn-templates (0.1.2) pdf-reader (~> 2.0) prawn (~> 2.2) - prism (1.7.0) + prism (1.8.0) pry (0.15.2) coderay (~> 1.1) method_source (~> 1.0) - public_suffix (7.0.0) + public_suffix (7.0.2) racc (1.8.1) rainbow (3.1.1) rake (13.3.1) @@ -330,7 +330,7 @@ GEM racc (~> 1.5) sexp_processor (~> 4.16) safe_yaml (1.0.5) - sass-embedded (1.97.1-x86_64-linux-gnu) + sass-embedded (1.97.3-x86_64-linux-gnu) google-protobuf (~> 4.31) sawyer (0.9.2) addressable (>= 2.3.5) @@ -349,8 +349,8 @@ GEM tins (~> 1) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) - thor (1.4.0) - tilt (2.6.1) + thor (1.5.0) + tilt (2.7.0) tins (1.51.0) bigdecimal mize (~> 0.6) @@ -360,12 +360,11 @@ GEM traces (0.18.2) treetop (1.6.18) polyglot (~> 0.3) - ttfunk (1.8.0) - bigdecimal (~> 3.1) + ttfunk (1.7.0) typhoeus (1.5.0) ethon (>= 0.9.0, < 0.16.0) unicode-display_width (2.6.0) - uri (1.0.3) + uri (1.1.1) webrick (1.9.2) yaml (0.4.0) yard (0.9.38) @@ -377,11 +376,10 @@ PLATFORMS DEPENDENCIES asciidoctor (~> 2.0) - bundler (~> 2.0) docopslab-dev (~> 0.1.0) issuer! rake (~> 13.0) - releasehx + releasehx (~> 0.1.1) rspec (~> 3.0) BUNDLED WITH diff --git a/README.adoc b/README.adoc index 589932b..a754fec 100644 --- a/README.adoc +++ b/README.adoc @@ -621,21 +621,22 @@ This documentation is automatically updated with each gem release. === Release History Management As of version 0.2.0, Release Notes and Changelog are generated using the link:https://github.com/DocOps/releasehx[_ReleaseHx_] tool. -You can find the release history assets in the `docs/releasehx/` directory, which contains a configuration file and RHYML files that are auto-generated and then manually edited to produce the GitHub link:https://github.com/DocOps/issuer/releases[release announcements]. +You can find the release history assets in the `docs/releases/` directory, while the ReleaseHx configuration lives at `.config/releasehx.yml`. +The RHYML files are auto-generated and then manually edited to produce the GitHub link:https://github.com/DocOps/issuer/releases[release announcements]. . Draft RHYML draft file from the online GitHub Issues for the given version: + [.prompt,subs=+attributes] - bundle exec rhx {this_prod_vrsn} --yaml docs/releasehx/release-{this_prod_vrsn}.yml --config docs/releasehx/config.yml + bundle exec rhx {this_prod_vrsn} --yaml docs/releases/{this_prod_vrsn}.yml --config .config/releasehx.yml . Manually edit the RHYML draft file. . Generate the release history as Markdown. + [.prompt,subs=+attributes] - bundle exec rhx docs/releasehx/release-{this_prod_vrsn}.yml --md docs/releasehx/{this_prod_vrsn}.md --config docs/releasehx/config.yml + bundle exec rhx docs/releases/{this_prod_vrsn}.yml --md docs/releases/{this_prod_vrsn}.md --config .config/releasehx.yml -. Copy and paste the contents of `docs/releasehx/{this_prod_vrsn}.md` into the GitHub release form at https://github.com/DocOps/issuer/releases/new. +. Copy and paste the contents of `docs/releases/{this_prod_vrsn}.md` into the GitHub release form at https://github.com/DocOps/issuer/releases/new. [[contributing]] === Contributing diff --git a/Rakefile b/Rakefile index fd2271f..e4237c5 100644 --- a/Rakefile +++ b/Rakefile @@ -1,6 +1,7 @@ require "bundler/gem_tasks" require "rspec/core/rake_task" require "yaml" +require_relative 'lib/issuer/version' # Load DocOps Lab development tasks begin @@ -53,6 +54,34 @@ task :install do sh "bundle install" end +desc "Draft ReleaseHx document" +task :rhx do + # constructs command like GITHUB_TOKEN=$(gh auth token) && bundle exec rhx 0.3.0 --yaml docs/releases/0.3.0.yml --config .config/releasehx.yml --force + # First looks for GITHUB_TOKEN already set, then invokes gh auth token if gh is available + github_token = ENV['GITHUB_TOKEN'] + version = Issuer::VERSION + unless github_token + begin + # check for a valid token or else use gh to refresh the token with export gh auth refresh -s repo + require 'open3' + stdout, stderr, status = Open3.capture3("gh auth token") + if status.success? && !stdout.strip.empty? + github_token = stdout.strip + else + raise "gh auth token failed" + end + rescue + puts "Error: GITHUB_TOKEN not set and 'gh' CLI not available." + exit 1 + end + end + env = { 'GITHUB_TOKEN' => github_token } + command = "bundle exec rhx #{version} --yaml docs/releases/#{version}.yml --config .config/releasehx.yml --force" + Bundler.with_original_env do + sh env, command, verbose: false + end +end + desc "Run all PR tests locally (same as GitHub Actions)" task :pr_test do puts "🔍 Running all PR tests locally..." diff --git a/docs/releasehx/config.yml b/docs/releasehx/config.yml deleted file mode 100644 index e0f51dc..0000000 --- a/docs/releasehx/config.yml +++ /dev/null @@ -1,118 +0,0 @@ -# ReleaseHx configuration for DocOps/issuer repository -# Configuration for testing real GitHub data with dynamic labels enabled - -# API configuration for GitHub -api: - from: github - project: DocOps/issuer - href: https://api.github.com/repos/DocOps/issuer/issues - auth: - key_env: RELEASEHX_API_KEY - -# Sources configuration -sources: - note: issue_body - note_pattern: /^## Release Note.*\n\n(?.+)/ms - summ: issue_heading - head: issue_heading - -rhyml: - pasterize_summ: true - -tags: - deprecation: - text: Deprecation - release_note_needed: - slug: needs:note - internal: - text: Internal - -parts: - label_prefix: "part:" - cli: - text: CLI - head: CLI - icon: terminal - imyml: - text: IMYML - head: IMYML - icon: hacker-news - documentation: - text: documentation - head: Documentation - icon: book - api_clients: - text: API Clients - head: API Clients - icon: plug - -types: - removal: - slug: "type:removal" - text: removal - head: Removed - icon: exclamation-triangle - feature: - slug: "type:feature" - text: new feature - head: Added - icon: plus-square-o - bugfix: - slug: "type:bug" - text: bug fix - head: Fixed - icon: bug - improvement: - slug: "type:improvement" - text: improvement - head: Improved - icon: wrench - deprecation: - slug: "type:deprecation" - text: deprecation - head: Deprecated - icon: exclamation-circle - -# Enable dynamic labeling for the changelog section -changelog: - spot: 1 - sort: - - 'breaking:grouping1' - - 'type:grouping1' - items: - frame: basic - show_parts_label: true - show_tags_label: false - show_type_label: false - show_issue_links: true - -# Enable dynamic labeling for the release notes section -notes: - spot: 2 - sort: - - 'part:grouping1' - items: - show_parts_label: true - show_tags_label: true - show_type_label: true - show_lead_label: true - show_issue_links: true - -# Configure the dynamic labels themselves -history: - labeling: - singularize_labels: true - type_label: "Issue Type" - parts_label: "Components" - part_label: "Component" - tags_label: "Labels" - tag_label: "Label" - lead_label: "Contributed by" - join_string: " | " - items: - show_issue_links: true - -links: - web: - href: "https://github.com/DocOps/issuer/issues/{{ tick }}" - text: "#{{ tick }}" diff --git a/docs/releasehx/release-0.2.0.yml b/docs/releases/0.2.0.yml similarity index 100% rename from docs/releasehx/release-0.2.0.yml rename to docs/releases/0.2.0.yml diff --git a/docs/releases/0.3.0.yml b/docs/releases/0.3.0.yml new file mode 100644 index 0000000..b112640 --- /dev/null +++ b/docs/releases/0.3.0.yml @@ -0,0 +1,25 @@ +code: "0.3.0" +date: 2026-01-23 +memo: +changes: + + - chid: 0_3_0-35 + tick: 35 + part: cli + summ: Added a `--json [PATH]` option for writing locally instead of to remote API + note: | + The `--json` flag will simply store the prepared REST API issue/item objects as a single JSON file instead of pushing them to remote API. The JSON file will be in the exact form prepared for the remote API, and it will save to PATH, which defaults to `_payloads/` locally. + + Any use of `--json` automatically invokes the `:dry` option to ensure we do not POST to APIs. + + ## Release Note + + Added CLI option to save GitHub API issue payloads as JSON files locally instead of posting to GitHub, enabling payload inspection and workflow automation. + lead: briandominick + + - chid: 0_3_0-34 + tick: 34 + part: cli + summ: Made `issuer help` commandline return help screen instead of error + note: | + Running the command with `help` as the first/only argument returns `Error: File not found: help` when it should return the help/usage screen. \ No newline at end of file diff --git a/specs/tests/rspec/cli_spec.rb b/specs/tests/rspec/cli_spec.rb index 6b53323..21dda8f 100644 --- a/specs/tests/rspec/cli_spec.rb +++ b/specs/tests/rspec/cli_spec.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require_relative "spec_helper" +require 'stringio' RSpec.describe Issuer::CLI do # Mock the GitHub site methods to avoid actual API calls during testing @@ -218,7 +219,7 @@ expect { cli = Issuer::CLI.new - cli.invoke(:main, [sample_file], {json: ''}) + cli.invoke(:main, [sample_file], {json: '', dry: true}) }.to output(/Saved 2 issue payloads to: _payloads/).to_stdout # Verify File.write was called with JSON content @@ -238,7 +239,7 @@ expect { cli = Issuer::CLI.new - cli.invoke(:main, [sample_file], {json: 'custom-output.json'}) + cli.invoke(:main, [sample_file], {json: 'custom-output.json', dry: true}) }.to output(/Saved 2 issue payloads to: custom-output.json/).to_stdout # Verify File.write was called with the custom path @@ -250,16 +251,24 @@ end end - it 'auto-enables dry mode when --json is used' do + it 'does not auto-enable dry mode when --json is used' do # Mock File.write to avoid actually creating files during test allow(File).to receive(:write) allow(FileUtils).to receive(:mkdir_p) - - # Should show dry run output even without --dry when --json is used - expect { + allow(Issuer::Ops).to receive(:validate_and_prepare_resources) + allow_any_instance_of(Issuer::Sites::GitHub).to receive(:post_issues).and_return(0) + + stdout = StringIO.new + $stdout = stdout + begin cli = Issuer::CLI.new cli.invoke(:main, [sample_file], {json: 'test.json'}) - }.to output(/Dry run complete/).to_stdout + ensure + $stdout = STDOUT + end + + expect(stdout.string).to include('✅ Completed') + expect(stdout.string).not_to include('Dry run complete') end it 'includes correct JSON structure in --json output' do @@ -272,7 +281,7 @@ allow(FileUtils).to receive(:mkdir_p) cli = Issuer::CLI.new - cli.invoke(:main, [sample_file], {json: 'test.json'}) + cli.invoke(:main, [sample_file], {json: 'test.json', dry: true}) # Parse and verify the JSON structure json_data = JSON.parse(json_content) From ba36d7383d0486a027a77518c6e3f39d3a02abaf Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Fri, 23 Jan 2026 21:43:09 -0500 Subject: [PATCH 16/23] Fix 0.3.0 release note for json flag --- docs/releases/0.3.0.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/releases/0.3.0.yml b/docs/releases/0.3.0.yml index b112640..f67c83d 100644 --- a/docs/releases/0.3.0.yml +++ b/docs/releases/0.3.0.yml @@ -8,13 +8,13 @@ changes: part: cli summ: Added a `--json [PATH]` option for writing locally instead of to remote API note: | - The `--json` flag will simply store the prepared REST API issue/item objects as a single JSON file instead of pushing them to remote API. The JSON file will be in the exact form prepared for the remote API, and it will save to PATH, which defaults to `_payloads/` locally. - - Any use of `--json` automatically invokes the `:dry` option to ensure we do not POST to APIs. - - ## Release Note - - Added CLI option to save GitHub API issue payloads as JSON files locally instead of posting to GitHub, enabling payload inspection and workflow automation. + The `--json` flag stores the prepared REST API issue payloads as a single JSON file in the exact form used for the API. The JSON file saves to PATH, which defaults to `_payloads/` locally. + + Use `--dry` when you want to skip posting and only export the payloads. + + == Release Note + + Added a CLI option to save GitHub API issue payloads as JSON files locally, enabling payload inspection and workflow automation. lead: briandominick - chid: 0_3_0-34 From ba0537f0db863321d8fa0d0e21cda744480875b1 Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Fri, 23 Jan 2026 21:49:01 -0500 Subject: [PATCH 17/23] Revert "Fix 0.3.0 release note for json flag" This reverts commit ba36d7383d0486a027a77518c6e3f39d3a02abaf. --- docs/releases/0.3.0.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/releases/0.3.0.yml b/docs/releases/0.3.0.yml index f67c83d..b112640 100644 --- a/docs/releases/0.3.0.yml +++ b/docs/releases/0.3.0.yml @@ -8,13 +8,13 @@ changes: part: cli summ: Added a `--json [PATH]` option for writing locally instead of to remote API note: | - The `--json` flag stores the prepared REST API issue payloads as a single JSON file in the exact form used for the API. The JSON file saves to PATH, which defaults to `_payloads/` locally. - - Use `--dry` when you want to skip posting and only export the payloads. - - == Release Note - - Added a CLI option to save GitHub API issue payloads as JSON files locally, enabling payload inspection and workflow automation. + The `--json` flag will simply store the prepared REST API issue/item objects as a single JSON file instead of pushing them to remote API. The JSON file will be in the exact form prepared for the remote API, and it will save to PATH, which defaults to `_payloads/` locally. + + Any use of `--json` automatically invokes the `:dry` option to ensure we do not POST to APIs. + + ## Release Note + + Added CLI option to save GitHub API issue payloads as JSON files locally instead of posting to GitHub, enabling payload inspection and workflow automation. lead: briandominick - chid: 0_3_0-34 From 4f50dfb8e3bf171e3f84fe99427a37d6d8db7d9a Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Fri, 23 Jan 2026 21:59:18 -0500 Subject: [PATCH 18/23] Fix ReleaseHx note extraction --- .config/releasehx.yml | 1 + docs/releases/0.3.0.yml | 6 ------ 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/.config/releasehx.yml b/.config/releasehx.yml index 5d4ff68..244862d 100644 --- a/.config/releasehx.yml +++ b/.config/releasehx.yml @@ -17,6 +17,7 @@ conversions: summ: issue_heading head: issue_heading note: issue_body + note_source: issue_body note_pattern: '/^## Release Note\s*\n+(?(.|\n)+)/mi' markup: asciidoc engine: asciidoctor diff --git a/docs/releases/0.3.0.yml b/docs/releases/0.3.0.yml index b112640..6f9b2ce 100644 --- a/docs/releases/0.3.0.yml +++ b/docs/releases/0.3.0.yml @@ -8,12 +8,6 @@ changes: part: cli summ: Added a `--json [PATH]` option for writing locally instead of to remote API note: | - The `--json` flag will simply store the prepared REST API issue/item objects as a single JSON file instead of pushing them to remote API. The JSON file will be in the exact form prepared for the remote API, and it will save to PATH, which defaults to `_payloads/` locally. - - Any use of `--json` automatically invokes the `:dry` option to ensure we do not POST to APIs. - - ## Release Note - Added CLI option to save GitHub API issue payloads as JSON files locally instead of posting to GitHub, enabling payload inspection and workflow automation. lead: briandominick From 146976045cf0da224a0a3d36e651c0bcd082a277 Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Mon, 26 Jan 2026 08:38:57 -0500 Subject: [PATCH 19/23] Add tracked team/ path and first doc The .agent/team/ path is for shared agent-oriented docs. The first doc there is an LLM-authored assessment of how to better orient LLMs to Issuer. --- .agent/team/llm-onboarding-improvements.adoc | 360 +++++++++++++++++++ .gitignore | 4 +- 2 files changed, 363 insertions(+), 1 deletion(-) create mode 100644 .agent/team/llm-onboarding-improvements.adoc diff --git a/.agent/team/llm-onboarding-improvements.adoc b/.agent/team/llm-onboarding-improvements.adoc new file mode 100644 index 0000000..fabae57 --- /dev/null +++ b/.agent/team/llm-onboarding-improvements.adoc @@ -0,0 +1,360 @@ += LLM Onboarding Improvements for Issuer +:toc: macro +:toclevels: 3 + +[horizontal] +Mission:: Sub-mission for ReleaseHx 0.1.2 release +Agent Role:: Product Engineer + Technical Writer +Date:: 2026-01-24 +Status:: Completed + +toc::[] + +== Executive Summary + +After learning Issuer to create GitHub issues for ReleaseHx 0.1.2 patch release, I documented observations about the tool's LLM-friendliness and propose specific improvements to make Issuer more accessible to AI agents. + +*Key Finding:* Issuer's documentation is comprehensive but could benefit from restructuring specifically for LLM consumption, with clearer hierarchies, machine-readable schemas, and quick-reference patterns. + +== What Worked Well + +=== Comprehensive README.adoc + +The README is thorough and well-structured with: + +* Clear feature list up front +* Installation instructions for both Ruby and Docker users +* Extensive CLI usage documentation +* IMYML format specification with property reference + +=== Rich Example Files + +The `examples/` directory provides excellent learning material: + +* `basic-example.yml` - Simple, clear demonstration +* `advanced-stub-example.yml` - Shows sophisticated features (stub processing, tag prefixes) +* Multiple examples covering different use cases + +=== AsciiDoc Tagged Sections + +The use of `// tag::ai-prompt[]` markers shows awareness of AI agent needs and makes it easier to extract relevant sections. + +=== Dry-Run Mode + +The `--dry` flag is invaluable for validation without API calls - perfect for LLM testing and learning. + +=== Clear Property Naming + +Despite being abbreviated (summ, vrsn, user, tags), the property names are intuitive enough when seen in context. + +== What Was Confusing or Required Extra Effort + +=== IMYML Format Discovery + +*Issue:* The IMYML format specification is embedded deep in the README (lines 160-350). An LLM agent needs to scroll through installation and usage sections first. + +*Impact:* Required reading ~500 lines of documentation before understanding the core data format. + +*What I Did:* Read README sequentially, then jumped to examples to understand format through demonstration. + +=== Property Reference Buried + +*Issue:* The `[[imyml-ref]]` section with complete property documentation starts at line 233, after the format examples. + +*Impact:* Had to read examples first, then circle back to understand all available properties. + +=== No Machine-Readable Schema + +*Issue:* No JSON Schema, SGYML, or other machine-readable format definition. + +*Impact:* LLMs must parse AsciiDoc prose to understand validation rules, types, and constraints. + +=== Tag Prefix Logic Not Immediately Clear + +*Issue:* The `+` and `-` prefix notation for tags is powerful but requires careful reading to understand: + +* Regular tags: `[bug, docs]` +* Append tags: `[+urgent]` +* Removal tags: `[-needs:docs]` + +*Impact:* Could easily misunderstand and create invalid IMYML files. + +=== Authentication Setup + +*Issue:* Authentication section is late in README (line 410+), after CLI usage. + +*Impact:* An agent might try to execute without realizing authentication is required. + +=== Type Property Constraint + +*Issue:* The `type` property "must already be registered" but there's no clear guidance on what types are available or how to check. + +*Impact:* Uncertainty about valid values for the `type` field. + +== Top Priority Documentation Improvements + +=== Create AI Agent Quick Start Section ⭐⭐⭐ + +*Location:* Add near top of README after Overview + +*Proposed Content:* + +[source,asciidoc] +---- +[[ai-agent-quickstart]] +=== Quick Start for AI Agents + +For LLM agents learning to use Issuer: + +. *Core Concept:* IMYML (Issue Management YAML) format defines issues in YAML, Issuer posts them to GitHub +. *Required Reading Order:* + - <> - Understand the data structure + - <> - Complete field documentation + - <> - Command-line options + - <> - Token setup +. *Examples:* Study `examples/basic-example.yml` and `examples/advanced-stub-example.yml` +. *Testing:* Always use `--dry` flag first to validate without posting +. *Authentication:* Set `ISSUER_API_TOKEN` environment variable before posting + +*Minimal Valid IMYML:* + +[source,yaml] +---- +$meta: + proj: org/repo +issues: + - summ: Issue title here +---- + +=== Create IMYML Cheat Sheet ⭐⭐⭐ + +*Location:* New file `docs/IMYML-REFERENCE.adoc` (or section in README): Issue title + + +== Complete Template + +[source,yaml] +---- +$meta: + proj: org/repo # Required: org/repo or user/repo + defaults: + vrsn: 1.0.0 # String: milestone/version + user: username # String: GitHub username + type: Task # String: must exist in repo + tags: [label1, +append] # Array: see tag logic below + stub: false # Boolean: enable stub processing + body: Default text # String: default body text + head: Header text # String: prepend when stub=true + tail: Footer text # String: append when stub=true + +issues: # Array: list of issue records + - summ: Title # Required: one-line summary + body: Description # String: full description + type: Bug # String: issue type + vrsn: 2.0.0 # String: milestone + user: assignee # String: GitHub username + tags: [label, +add] # Array: see tag logic + stub: false # Boolean: override default +---- + +== Tag Logic Rules + +* Regular tags: `[bug, docs]` - Applied based on default logic +* Append tags: `[+urgent]` - Always added to all issues +* Removal tags: `[-needs:docs]` - Remove from defaults +* Can combine: `[feature, +critical, -auto]` + +== Property Types + +summ:: String (required) - Issue title +body:: String (optional) - Issue description (Markdown formatted) +type:: String (optional) - Must already exist in target repo +vrsn:: String (optional) - Milestone name (auto-created if missing) +user:: String (optional) - GitHub username for assignee +tags:: Array[String] (optional) - Labels with prefix notation +stub:: Boolean (optional) - Enable header/footer injection +---- + +=== Add Machine-Readable Schema ⭐⭐ + +*Location:* New file `schemas/imyml-schema.json` or `schemas/imyml-schema.sgyml` + +*Benefit:* Allows LLMs to validate IMYML structure programmatically without parsing prose. + +*Consider:* Since SchemaGraphy exists in the DocOps Lab ecosystem, use SGYML format for the schema definition. + +=== Reorganize README Sections ⭐⭐ + +*Proposed New Order:* + +. Overview (keep as-is) +. *AI Agent Quick Start* (NEW) +. *IMYML Format* (move up from line 160) +. *IMYML Property Reference* (keep with format section) +. *Examples* (link to examples/ directory) +. Installation (keep as-is) +. Authentication (move up before CLI usage) +. CLI Usage (after auth) +. Advanced Usage (keep as-is) +. Development (keep as-is) + +*Rationale:* Put the data format first so agents understand what they're creating before learning how to execute. + +=== Expand Type Property Documentation ⭐ + +*Location:* In IMYML Reference section + +*Add:* + +[source,asciidoc] +---- +type::: +(String) +The type of issue, which must already be registered in the target project or repository. ++ +Common GitHub issue types include: `Bug`, `Feature`, `Task`, `Enhancement`, `Question`, `Documentation`. + +[NOTE] +Issue types vary by repository. Check the target repository's issue type configuration before using this field. If a type doesn't exist, issue creation will fail. + +[TIP] +Use `--dry` mode to test without posting, then check GitHub repo settings for available types if validation fails. +---- + +== Additional Improvement Ideas + +=== Inline Examples in Property Reference + +*Enhancement:* Add mini-examples next to each property definition. + +*Example:* + +[source,asciidoc] +---- +tags::: +(Array of Strings) +Labels to apply to the issue. ++ +.Example +[source,yaml] +---- +tags: [bug, priority:high, +urgent, -needs:review] +---- ++ +Supports prefix notation: ++ +* `bug` - regular label +* `+urgent` - append to all issues +* `-needs:review` - remove from defaults + +=== Visual Hierarchy Markers + +*Enhancement:* Use consistent AsciiDoc markers for LLM parsing: + +* `[[property-name]]` anchors for all properties +* `[.required]` and `[.optional]` role markers +* `[.example]` markers for code blocks + +=== Create docs/agent/ Directory + +*Proposed Structure:* + +.... +docs/ +├── agent/ +│ ├── README.adoc # AI agent overview +│ ├── quickstart.adoc # Fast onboarding +│ ├── imyml-reference.adoc # Complete property docs +│ ├── common-patterns.adoc # Recipe-style examples +│ └── troubleshooting.adoc # FAQ and error handling +└── schemas/ + └── imyml-schema.sgyml # Machine-readable schema +.... + +=== Error Message Improvements + +*Enhancement:* When validation fails, suggest solutions: + +.... +Error: Unknown type 'Improvement' +Available types in DocOps/releasehx: Bug, Feature, Task, Enhancement +Tip: Use --dry mode to validate before posting +.... + +=== Authentication Quick Check Command + +*Enhancement:* Add a test command: + +.... +issuer --test-auth +# Output: +# ✓ GitHub token found (ISSUER_API_TOKEN) +# ✓ Successfully authenticated as: briandominick +# ✓ API rate limit: 4,987/5,000 remaining +.... + +== Mission-Specific Observations + +=== What I Learned About Issuer + +IMYML is intuitive once understood:: The abbreviated property names (summ, vrsn, user, tags) are actually helpful for conciseness + +Dry-run is essential: Perfect safety mechanism for validation + +Tag prefix logic is powerful:: The `+`/`-` notation is elegant for label management + +Stub functionality is sophisticated:: head/body/tail system is well-designed for template-based issue creation + +Docker-first approach is smart:: Lowers barrier to entry for non-Ruby users + +=== Blockers Encountered + +Need to run from issuer directory:: +Had to execute from `/home/brian/Documents/work/issuer/` since issuer wasn't in releasehx bundle + +Type property uncertainty:: +Not sure if "Bug" and "Task" are valid without checking GitHub repo + +=== Successful Outcomes + +* ✅ Created valid IMYML file on first attempt after reading docs +* ✅ Dry-run passed validation +* ✅ Two issues correctly structured with all metadata +* ✅ Ready for actual posting (awaiting Operator approval) + +== Recommendations for Implementation + +=== Immediate Actions (High ROI, Low Effort) + +. *Add AI Agent Quick Start section* to README (30 minutes) +. *Move IMYML format section up* in README (15 minutes) +. *Move Authentication before CLI Usage* (5 minutes) +. *Add inline examples to Property Reference* (1 hour) + +=== Short-Term Actions (High ROI, Medium Effort) + +[start=5] +. *Create IMYML Quick Reference cheat sheet* (2 hours) +. *Create docs/ai-agents/ directory structure* (4 hours) +. *Expand type property documentation* (30 minutes) + +=== Long-Term Actions (High ROI, High Effort) + +[start=8] +. *Create machine-readable schema* (SGYML format) (8 hours) +. *Implement --test-auth command* (4 hours) +. *Enhance error messages with suggestions* (ongoing) + +== Conclusion + +Issuer is already well-documented and functional. The proposed improvements focus on *restructuring and augmenting existing documentation* rather than changing core functionality. + +Key Insight:: +LLM agents benefit most from: ++ +* *Hierarchical navigation* (quick start → detailed reference) +* *Format-first documentation* (show IMYML before CLI) +* *Machine-readable schemas* (programmatic validation) +* *Inline examples* (see-and-understand patterns) + +These improvements would make Issuer significantly more accessible to AI agents while also benefiting human users through clearer documentation structure. \ No newline at end of file diff --git a/.gitignore b/.gitignore index 009e7ce..e961d78 100644 --- a/.gitignore +++ b/.gitignore @@ -98,7 +98,9 @@ specs/data/*-issues.yml # Local scratch space for AI output .warp/ -.agent/ +.agent/* +# DO track team-shared files +!.agent/team/ # Docs and ReleaseHx files docs/releases/*.md From f5fd89c49c7ec62f3d102f50793cd9828b536514 Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Fri, 30 Jan 2026 03:09:25 -0500 Subject: [PATCH 20/23] chore: update ReleaseHx to 0.1.2 and generate 0.3.0 release notes --- Gemfile | 2 +- Gemfile.lock | 6 +++--- docs/releases/0.3.0.yml | 12 +++++++----- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/Gemfile b/Gemfile index 54e5dd8..fe22a67 100644 --- a/Gemfile +++ b/Gemfile @@ -13,5 +13,5 @@ group :development do gem 'rake', '~> 13.0' gem 'asciidoctor', '~> 2.0' gem 'docopslab-dev', '~> 0.1.0' - gem 'releasehx', '~> 0.1.1' + gem 'releasehx', '~> 0.1.2' end diff --git a/Gemfile.lock b/Gemfile.lock index 021e959..6a819b3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -249,7 +249,7 @@ GEM prawn-templates (0.1.2) pdf-reader (~> 2.0) prawn (~> 2.2) - prism (1.8.0) + prism (1.9.0) pry (0.15.2) coderay (~> 1.1) method_source (~> 1.0) @@ -269,7 +269,7 @@ GEM rainbow (>= 2.0, < 4.0) rexml (~> 3.1) regexp_parser (2.11.3) - releasehx (0.1.1) + releasehx (0.1.2) asciidoctor-pdf (~> 2.3) commonmarker (~> 0.23) faraday (~> 2.9) @@ -379,7 +379,7 @@ DEPENDENCIES docopslab-dev (~> 0.1.0) issuer! rake (~> 13.0) - releasehx (~> 0.1.1) + releasehx (~> 0.1.2) rspec (~> 3.0) BUNDLED WITH diff --git a/docs/releases/0.3.0.yml b/docs/releases/0.3.0.yml index 6f9b2ce..e111375 100644 --- a/docs/releases/0.3.0.yml +++ b/docs/releases/0.3.0.yml @@ -1,19 +1,21 @@ code: "0.3.0" -date: 2026-01-23 +date: 2026-01-30 memo: changes: - chid: 0_3_0-35 tick: 35 + type: feature part: cli - summ: Added a `--json [PATH]` option for writing locally instead of to remote API + summ: | + Added a `--json [PATH]` option for writing locally instead of to remote API note: | Added CLI option to save GitHub API issue payloads as JSON files locally instead of posting to GitHub, enabling payload inspection and workflow automation. lead: briandominick - chid: 0_3_0-34 tick: 34 + type: bug part: cli - summ: Made `issuer help` commandline return help screen instead of error - note: | - Running the command with `help` as the first/only argument returns `Error: File not found: help` when it should return the help/usage screen. \ No newline at end of file + summ: | + Made `issuer help` commandline return help screen instead of error \ No newline at end of file From e50dbce364bba7e0e43b14935b2454384ca8c558 Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Fri, 30 Jan 2026 03:09:58 -0500 Subject: [PATCH 21/23] chore: clean up unused tag config in releasehx.yml --- .config/releasehx.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.config/releasehx.yml b/.config/releasehx.yml index 244862d..e3b488b 100644 --- a/.config/releasehx.yml +++ b/.config/releasehx.yml @@ -79,12 +79,6 @@ tags: _include: ['needs:note', 'changelog', 'breaking', 'deprecation'] _exclude: ['internal', 'wontfix', 'duplicate'] - needs:note: - head: Release Notes Needed - icon: pencil - text: Requires release note - drop: true - breaking: head: Breaking Changes icon: exclamation-triangle From b4d9d91941420af73f163aadf19a8f9a2e0cef7b Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Fri, 30 Jan 2026 03:29:25 -0500 Subject: [PATCH 22/23] ci: update Ruby version matrix to 3.2 and 3.3 (3.0/3.1 incompatible with public_suffix >= 7.0) --- .github/workflows/ci-cd.yml | 2 +- .github/workflows/documentation.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index b347e40..e2f491c 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -14,7 +14,7 @@ jobs: timeout-minutes: 15 strategy: matrix: - ruby-version: ['3.0', '3.1', '3.2'] + ruby-version: ['3.2', '3.3'] steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index b1f8b54..489bc6e 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -38,7 +38,7 @@ jobs: - name: Setup Ruby uses: ruby/setup-ruby@v1 with: - ruby-version: '3.1' + ruby-version: '3.2' bundler-cache: true - name: Install Vale From 77386b0ce4cd7897dc1a107339d20c1f73c876bc Mon Sep 17 00:00:00 2001 From: Brian Dominick Date: Fri, 30 Jan 2026 03:33:53 -0500 Subject: [PATCH 23/23] ci: fix rake task name from 'spec' to 'rspec' --- .github/workflows/ci-cd.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index e2f491c..4f6830f 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -31,7 +31,7 @@ jobs: bundle list - name: Run tests - run: bundle exec rake spec + run: bundle exec rake rspec - name: Run CLI tests run: |