Contributing

~3 min read

Contributing

Lettuce is solo-maintained but welcomes PRs and issues. This page is the operational expectations.

Where things are

URL Use
github.com/DrBaher/lettuce source code (private during 0.x, public from 1.0)
github.com/DrBaher/lettuce/issues bugs and feature requests
https://github.com/DrBaher/notes the demo vault for https://drbaher.github.io/notes
https://lettuce.drbaher.com landing page
https://lettuce.drbaher.com/docs/ published version of these docs

Filing an issue

Useful issue title: Tag autocomplete misses nested children (specific). Bad title: Bug (no information).

Include:

  1. Lettuce version (Lettuce → About).

  2. macOS version (sw_vers).

  3. Reproduction steps.

  4. Expected vs. actual.

  5. Any relevant server stderr output, or a .lettuce/agent-edits.json excerpt around the time.

For crashes, include the macOS crash log from ~/Library/Logs/DiagnosticReports/Lettuce-*.crash.

PR flow

  1. Branch from main with a descriptive name: feat/tag-autocomplete-nested or fix/proposal-stale-merge.

  2. Make focused commits — one logical change per commit.

  3. All tests must pass: swift test.

  4. Update relevant docs in Sources/LettuceKit/Docs/.

  5. Open the PR with the same descriptive title.

The PR template prompts for: what changes, why, how to test, any user-visible impact.

Commit style

Conventional Commits-flavoured but loose:

feat(server): add `notes_by_tag` MCP tool

Returns notes carrying a tag (or any nested descendant), paginated.
Mirrors the REST `/api/v1/tags/**` endpoint and the existing `list_tags`
shape. Documented in Agent reference/04 Read tools.

Prefixes used: feat:, fix:, docs:, refactor:, test:, chore:, perf:.

Code style

What’s in scope

PRs we love:

PRs that need a design discussion first:

What’s out of scope

License

Lettuce will be open-source under the MIT License at 1.0. Until then, the code is source-available via private repo invite. Contributors retain copyright; PRs come with an implicit DCO-style sign-off.

Code of conduct

Be kind. Disagreements happen; the goal is the product, not winning.