Skip to content

chore(dx): add AI workflow agents, prompts, and lefthook pre-commit#125

Merged
macalbert merged 10 commits intomainfrom
macalbert/add-ai-custom-workflows
Mar 18, 2026
Merged

chore(dx): add AI workflow agents, prompts, and lefthook pre-commit#125
macalbert merged 10 commits intomainfrom
macalbert/add-ai-custom-workflows

Conversation

@macalbert
Copy link
Copy Markdown
Owner

@macalbert macalbert commented Mar 5, 2026

Summary

Add a complete AI-assisted development workflow system to Envilder. Replace Copilot hooks with lefthook pre-commit, import 9 agents (including TDD subagent pattern and bug-hunter coordinator), 5 prompts, scoped instructions, and a testing-conventions skill. Document the full SDLC cycle in docs/ai-workflows.md.

Changes

Architecture & Conventions

  • Add scoped instruction files: architecture-boundaries, coding-and-testing-conventions, git-conventions, review-response
  • Add testing-conventions skill with stricter AAA rule (each marker at most once per test)
  • Update copilot-instructions.md with enforced single Act/Assert per test

Agents (9 total)

  • code-reviewer — multi-perspective subagent review (correctness, architecture, security, conventions)
  • pr-feedback — resolves PR review comments, delegates to bug-hunter for bugs
  • tdd-coach — orchestrates Red-Green-Refactor cycle via 3 worker subagents
  • tdd-red / tdd-green / tdd-refactor — TDD phase workers (not user-invocable)
  • refactor — code smell detection with SOLID-aligned improvements
  • bug-hunter — reproduces and fixes bugs via TDD delegation
  • document-maintainer — keeps docs in sync with code changes

Prompts (5 total)

  • smart-commit — conventional commit from staged diff
  • pr-sync — create/update PR via gh CLI
  • scaffold-feature — hexagonal architecture file skeleton
  • resolve-pr-comments — PR review feedback handler
  • use-semantic-versioning — SemVer bump recommendation

Hooks

  • Remove .github/hooks/ (Copilot PreToolUse hooks)
  • Add lefthook.yml with biome pre-commit hook (auto-format + auto-stage)
  • Add lefthook devDependency + prepare script

Documentation

  • Add docs/ai-workflows.md — architecture diagram, SDLC cycle, agent/prompt tables, FAQ

Testing

  • pnpm test passes (81 passed, 0 failed)
  • pnpm lint passes (Secretlint + Biome + tsc)

Summary by CodeRabbit

  • Documentation
    • Added new guide covering AI-assisted development workflows for Envilder, including architecture, development cycle, agents, prompts, and skills configuration.

@macalbert macalbert self-assigned this Mar 5, 2026
@macalbert macalbert added documentation Improvements or additions to documentation enhancement New feature or request labels Mar 5, 2026
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly enhances the development workflow by integrating AI-driven tools and establishing clear guidelines. It introduces specialized AI agents for code review and documentation, alongside new prompts and skills to standardize practices like semantic versioning and testing. Furthermore, it enforces code quality through automated pre-push and session stop hooks, ensuring consistency and maintainability across the project.

Highlights

  • New AI Agents: Introduced two new AI agents: 'Code Review' to standardize code review processes, focusing on defect finding, architecture validation, and test coverage, and 'Document Maintainer' to ensure documentation remains aligned with the actual codebase and release state.
  • New Reusable Prompt: Added a 'Use Semantic Versioning' prompt to guide the recommendation of correct SemVer bumps (patch/minor/major) for changes, including rationale and release-ready commands.
  • New Testing Skill: Implemented a 'testing-conventions' skill to enforce consistent testing practices across unit, integration, and end-to-end tests, covering naming, structure, and coverage expectations.
  • Comprehensive Instruction Files: Provided new instruction files detailing 'Envilder Architecture Boundaries', 'Coding And Testing Conventions', and 'Envilder Git Conventions' to ensure development consistency and adherence to project standards.
  • Automated Quality Gate: Established a hook-based quality gate that automatically runs formatting, linting, and testing commands before a git push or session stop, preventing non-compliant code from being committed or pushed.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • .github/agents/code-review.agent.md
    • Added a new AI agent definition for specialized code reviews, focusing on defect finding, architecture validation, and test coverage.
  • .github/agents/document-maintainer.agent.md
    • Added a new AI agent definition for documentation maintenance, ensuring alignment with the codebase and release state.
  • .github/copilot-instructions.md
    • Updated existing Copilot instructions to improve formatting and clarify details regarding project overview, AWS profile handling, and E2E test setup.
  • .github/hooks/pre-push-quality-gate.json
    • Added a new JSON configuration file to define hooks for 'PreToolUse' and 'Stop' events, triggering a quality gate script.
  • .github/hooks/scripts/pre-push-quality-gate.mjs
    • Added a new JavaScript module implementing the logic for the pre-push and session stop quality gate, running 'format:write', 'lint', and 'test' commands.
  • .github/instructions/architecture-boundaries.instructions.md
    • Added a new markdown file outlining hard requirements for Envilder's hexagonal and clean architecture boundaries.
  • .github/instructions/coding-and-testing-conventions.instructions.md
    • Added a new markdown file detailing coding and testing conventions, including style, logging, secret safety, and test structure.
  • .github/instructions/git-conventions.instructions.md
    • Added a new markdown file specifying Git conventions for branching, committing, and pushing, emphasizing non-destructive workflows and conventional commits.
  • .github/prompts/use-semantic-versioning.prompt.md
    • Added a new prompt definition to guide the recommendation of semantic versioning bumps based on changes.
  • .github/skills/testing-conventions/SKILL.md
    • Added a new skill definition for applying Envilder's testing conventions across unit, integration, and e2e tests.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 4 additional findings.

Open in Devin Review

gemini-code-assist[bot]

This comment was marked as resolved.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 5, 2026

Important

Review skipped

Review was skipped due to path filters

⛔ Files ignored due to path filters (1)
  • package.json is excluded by none and included by none

CodeRabbit blocks several paths by default. You can override this behavior by explicitly including those paths in the path filters. For example, including **/dist/** will override the default block on the dist directory, by removing the pattern from both the lists.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 18b3d8f2-a9cf-46f3-b9df-6b1e24b9bea6

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Walkthrough

Tests for AwsSsmSecretProvider were restructured to run conditionally (CI/INTEGRATION), initialize a LocalStack container in beforeAll and stop it in afterAll, increase the integration timeout to 60000ms, and inline AWS SSM command usage in test scopes. A new docs file describing AI workflows was added.

Changes

Cohort / File(s) Summary
Integration Test Restructuring
tests/envilder/infrastructure/aws/AwsSsmSecretProvider.test.ts
Added conditional execution via `describe.runIf(process.env.CI
Documentation Addition
docs/ai-workflows.md
New documentation describing AI-assisted development workflows, agents, prompts, skills, orchestration patterns, and FAQ. No code or public API changes.

Sequence Diagram(s)

sequenceDiagram
    participant Runner as Test Runner
    participant Env as Environment Check
    participant Container as LocalStack Container
    participant Client as SSM Client
    participant SSM as AWS SSM (LocalStack)

    Runner->>Env: Check CI || INTEGRATION
    alt enabled
        Runner->>Container: Start LocalStack (beforeAll)
        Container-->>Runner: Endpoint returned
        Runner->>Client: Create SSM client with endpoint
        Client-->>Runner: Client ready

        rect rgba(100,150,200,0.5)
        Note over Runner,SSM: Integration tests execute (timeout 60000ms)
        Runner->>Client: PutParameterCommand (initial value)
        Client->>SSM: Store parameter
        SSM-->>Client: Success
        Client-->>Runner: Response

        Runner->>Client: setSecret / GetParameterCommand
        Client->>SSM: Update / Retrieve parameter
        SSM-->>Client: Parameter value
        Client-->>Runner: Assertion
        end

        Runner->>Container: Stop LocalStack (afterAll)
        Container-->>Runner: Stopped
    else
        Runner->>Runner: Skip integration tests
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title directly matches the main changes: introducing AI workflow agents, prompts, and a lefthook pre-commit system for developer experience.
Description check ✅ Passed The description comprehensively covers all required template sections with substantial detail on changes, architecture, agents, prompts, hooks, documentation, and testing results.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch macalbert/add-ai-custom-workflows
📝 Coding Plan
  • Generate coding plan for human review comments

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

devin-ai-integration[bot]

This comment was marked as resolved.

@github-advanced-security
Copy link
Copy Markdown
Contributor

You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool.

What Enabling Code Scanning Means:

  • The 'Security' tab will display more code scanning analysis results (e.g., for the default branch).
  • Depending on your configuration and choice of analysis tool, future pull requests will be annotated with code scanning analysis results.
  • You will be able to see the analysis results for the pull request's branch on this overview once the scans have completed and the checks have passed.

For more information about GitHub Code Scanning, check out
the documentation.

devin-ai-integration[bot]

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
tests/envilder/infrastructure/aws/AwsSsmSecretProvider.test.ts (1)

151-153: Consider adding explicit region to SSM client configuration.

The SSM client is created with only the endpoint. While LocalStack typically accepts connections without explicit region, adding a region prevents reliance on environment defaults and avoids potential SDK warnings.

🔧 Suggested improvement
       ssmClient = new SSM({
         endpoint,
+        region: 'us-east-1',
       });
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/envilder/infrastructure/aws/AwsSsmSecretProvider.test.ts` around lines
151 - 153, SSM client is instantiated without an explicit region which can cause
SDK warnings; update the SSM constructor call that assigns ssmClient to include
a region field (e.g., region: "us-east-1" or a test-appropriate constant)
alongside endpoint so the SSM({ endpoint }) becomes SSM({ endpoint, region:
"<region>" }) in AwsSsmSecretProvider.test.ts where ssmClient is created.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@tests/envilder/infrastructure/aws/AwsSsmSecretProvider.test.ts`:
- Around line 151-153: SSM client is instantiated without an explicit region
which can cause SDK warnings; update the SSM constructor call that assigns
ssmClient to include a region field (e.g., region: "us-east-1" or a
test-appropriate constant) alongside endpoint so the SSM({ endpoint }) becomes
SSM({ endpoint, region: "<region>" }) in AwsSsmSecretProvider.test.ts where
ssmClient is created.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: fb0b07ae-1529-4ff9-a248-7b27b14efe05

📥 Commits

Reviewing files that changed from the base of the PR and between 4e1179c and 21719ad.

⛔ Files ignored due to path filters (20)
  • .github/agents/code-review.agent.md is excluded by none and included by none
  • .github/agents/document-maintainer.agent.md is excluded by none and included by none
  • .github/agents/pr-comment-resolver.agent.md is excluded by none and included by none
  • .github/copilot-instructions.md is excluded by none and included by none
  • .github/hooks/block-push-on-requested-changes.json is excluded by none and included by none
  • .github/hooks/pre-push-quality-gate.json is excluded by none and included by none
  • .github/hooks/scripts/block-push-on-requested-changes.mjs is excluded by none and included by none
  • .github/hooks/scripts/pre-push-quality-gate.mjs is excluded by none and included by none
  • .github/instructions/architecture-boundaries.instructions.md is excluded by none and included by none
  • .github/instructions/coding-and-testing-conventions.instructions.md is excluded by none and included by none
  • .github/instructions/git-conventions.instructions.md is excluded by none and included by none
  • .github/instructions/review-response.instructions.md is excluded by none and included by none
  • .github/prompts/resolve-pr-comments.prompt.md is excluded by none and included by none
  • .github/prompts/use-semantic-versioning.prompt.md is excluded by none and included by none
  • .github/skills/testing-conventions/SKILL.md is excluded by none and included by none
  • .github/workflows/codeql-analysis.yml is excluded by none and included by none
  • .markdownlint.json is excluded by none and included by none
  • github-action/dist/index.js is excluded by !**/dist/** and included by none
  • package.json is excluded by none and included by none
  • vite.config.ts is excluded by none and included by none
📒 Files selected for processing (1)
  • tests/envilder/infrastructure/aws/AwsSsmSecretProvider.test.ts

@macalbert macalbert marked this pull request as draft March 8, 2026 22:45
… agents

- Replace .github/hooks/ (Copilot PreToolUse) with lefthook pre-commit
- Add 8 agents: code-reviewer, pr-feedback, tdd-coach,
  tdd-red/green/refactor, refactor, bug-hunter
- Add 3 prompts: smart-commit, pr-sync, scaffold-feature
- Strengthen AAA testing rule (each marker at most once per test)
- Document AI workflows in docs/ai-workflows.md
@macalbert macalbert changed the title docs: add architecture guidelines and Document Maintainer agent chore(dx): add AI workflow agents, prompts, and lefthook pre-commit Mar 18, 2026
@macalbert macalbert marked this pull request as ready for review March 18, 2026 01:24
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
docs/ai-workflows.md (1)

34-48: Align SDLC legend symbols with the diagram glyphs

The flow uses ···► in Line 34, but the legend in Lines 46-47 defines ───/──►. Consider updating the legend to match the exact symbols shown in the diagram.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/ai-workflows.md` around lines 34 - 48, The legend doesn't match the
diagram glyphs: the diagram uses '···►' but the legend defines '───' for
suggestion and '──►' for delegation; update the legend to match by replacing or
adding the exact symbol used in the diagram (change '─── = suggestion (user
invokes)' to '···► = suggestion (user invokes)' and ensure '──► = real
delegation (automatic)' or add both variants if you intend to support both), and
verify the text near the top that uses '···►' matches the legend symbol names
exactly.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/ai-workflows.md`:
- Line 11: Make the documented pre-commit command consistent by choosing one
form and updating all occurrences: replace either "biome check --write" at line
11 or "biome check --write --unsafe" at lines 93-94 so every reference in the
doc uses the same command string; ensure the chosen command is reflected in any
surrounding explanatory text and examples that mention the pre-commit hook or
biome invocation.

---

Nitpick comments:
In `@docs/ai-workflows.md`:
- Around line 34-48: The legend doesn't match the diagram glyphs: the diagram
uses '···►' but the legend defines '───' for suggestion and '──►' for
delegation; update the legend to match by replacing or adding the exact symbol
used in the diagram (change '─── = suggestion (user invokes)' to '···► =
suggestion (user invokes)' and ensure '──► = real delegation (automatic)' or add
both variants if you intend to support both), and verify the text near the top
that uses '···►' matches the legend symbol names exactly.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: fae5058d-6c70-4150-8438-b430caf18f53

📥 Commits

Reviewing files that changed from the base of the PR and between 21719ad and 1b832aa.

⛔ Files ignored due to path filters (18)
  • .github/agents/bug-hunter.agent.md is excluded by none and included by none
  • .github/agents/code-reviewer.agent.md is excluded by none and included by none
  • .github/agents/pr-feedback.agent.md is excluded by none and included by none
  • .github/agents/refactor.agent.md is excluded by none and included by none
  • .github/agents/tdd-coach.agent.md is excluded by none and included by none
  • .github/agents/tdd-green.agent.md is excluded by none and included by none
  • .github/agents/tdd-red.agent.md is excluded by none and included by none
  • .github/agents/tdd-refactor.agent.md is excluded by none and included by none
  • .github/copilot-instructions.md is excluded by none and included by none
  • .github/instructions/architecture-boundaries.instructions.md is excluded by none and included by none
  • .github/instructions/coding-and-testing-conventions.instructions.md is excluded by none and included by none
  • .github/prompts/pr-sync.prompt.md is excluded by none and included by none
  • .github/prompts/scaffold-feature.prompt.md is excluded by none and included by none
  • .github/prompts/smart-commit.prompt.md is excluded by none and included by none
  • .github/skills/testing-conventions/SKILL.md is excluded by none and included by none
  • lefthook.yml is excluded by none and included by none
  • package.json is excluded by none and included by none
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml and included by none
📒 Files selected for processing (1)
  • docs/ai-workflows.md

```text
┌─────────────────────────────────────────────────────┐
│ Hooks (lefthook) │
│ pre-commit → biome check --write on staged files │
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Inconsistent pre-commit command documentation

Line 11 documents biome check --write, while Lines 93-94 document biome check --write --unsafe. Please make this consistent so contributors don’t run the wrong mode.

Also applies to: 93-94

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/ai-workflows.md` at line 11, Make the documented pre-commit command
consistent by choosing one form and updating all occurrences: replace either
"biome check --write" at line 11 or "biome check --write --unsafe" at lines
93-94 so every reference in the doc uses the same command string; ensure the
chosen command is reflected in any surrounding explanatory text and examples
that mention the pre-commit hook or biome invocation.

@macalbert macalbert merged commit 5dd39d3 into main Mar 18, 2026
6 checks passed
@macalbert macalbert deleted the macalbert/add-ai-custom-workflows branch March 18, 2026 01:28
Copy link
Copy Markdown

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 2 new potential issues.

View 6 additional findings in Devin Review.

Open in Devin Review

globals: true,
environment: 'node',
include: ['**/*.test.ts'],
exclude: ['e2e/**', 'node_modules/**'],
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 pnpm test:e2e silently runs zero tests due to vitest exclude config

The new vite.config.ts:8 adds exclude: ['e2e/**', 'node_modules/**'] to prevent e2e tests from running during pnpm test. However, the new pnpm test:e2e script (package.json:32) runs vitest run --reporter=verbose e2e/, where e2e/ is a CLI filename filter. Vitest first collects test files using include/exclude from the config, then applies the CLI filter. Since e2e/** is excluded during collection, there are no candidate files for the e2e/ filter to match, so pnpm test:e2e completes successfully with zero tests executed — a silent failure.

Fix options

Either create a separate vitest config for e2e (e.g. vitest.e2e.config.ts) and reference it via vitest run --config vitest.e2e.config.ts, or keep the e2e tests included in the main config and use a different mechanism (like the describe.runIf guard already used elsewhere) to skip them during pnpm test.

Prompt for agents
The exclude for e2e in vite.config.ts (line 8) conflicts with the test:e2e script in package.json (line 32). Vitest applies exclude before the CLI filter argument, so pnpm test:e2e finds 0 tests.

Recommended fix: Create a separate vitest config for e2e tests.

1. Create a new file vitest.e2e.config.ts with:
   import { defineConfig } from 'vitest/config';
   export default defineConfig({
     test: {
       globals: true,
       environment: 'node',
       include: ['e2e/**/*.test.ts'],
     },
   });

2. Update package.json line 32, the test:e2e script, to:
   "test:e2e": "vitest run --reporter=verbose --config vitest.e2e.config.ts"
Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

parallel: true
commands:
biome:
glob: "*.{ts,tsx,js,jsx,json}"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 Lefthook glob *.{ts,...} does not match files in subdirectories

The lefthook glob filter at lefthook.yml:5 uses "*.{ts,tsx,js,jsx,json}". Lefthook applies this glob against git-relative file paths (e.g., src/envilder/domain/Foo.ts) using doublestar.Match, where * does not match path separators. This means only root-level files (e.g., biome.json, tsconfig.json) pass the filter — staged files under src/, tests/, or any subdirectory are silently excluded from the biome pre-commit check, defeating the purpose of the hook.

Suggested change
glob: "*.{ts,tsx,js,jsx,json}"
glob: "**/*.{ts,tsx,js,jsx,json}"
Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants