Skip to content

[LFXV2-1284] feat(claude): add Claude Code skills for setup and development workflows#62

Open
andrest50 wants to merge 2 commits intomainfrom
andrest50/claude-skills
Open

[LFXV2-1284] feat(claude): add Claude Code skills for setup and development workflows#62
andrest50 wants to merge 2 commits intomainfrom
andrest50/claude-skills

Conversation

@andrest50
Copy link
Contributor

@andrest50 andrest50 commented Mar 13, 2026

Summary

Adds three Claude Code skills to the committee service as a pilot for the broader LFX V2 platform. Skills are markdown files stored in .claude/skills/ that are automatically available as slash commands when working in the repo with Claude Code.

/setup

Guides a contributor through first-time environment setup from scratch. Covers installing prerequisites (Go, NATS server, NATS CLI, GitHub CLI), cloning the repo, installing Go dependencies and dev tools, configuring environment variables, starting NATS locally with JetStream enabled, creating the three required KV buckets (committees, committee-settings, committee-members), generating API code, and running the service. Each step verifies success before moving on, and a troubleshooting section covers the most common failure modes.

/develop

A day-to-day development reference built around the service's layered architecture. Explains the request flow from HTTP handler through internal service, port interfaces, and NATS storage. Walks through the correct build order (domain model → port interface → NATS implementation → internal service → API design → code gen → HTTP handler), how to work with the Goa design files and when to run make apigen, data model and port interface conventions, writing business logic in the internal service layer, keeping handlers thin, running tests with mocks, and the full validation suite (make fmt, make check, make test, make build). Includes two reference files with Goa and NATS patterns pulled from existing code in the repo.

/preflight

A pre-PR checklist that runs eight checks in order: working tree status and commit conventions, code formatting, license headers, linting, tests, build verification, protected file audit, and commit sign-off. Produces a clear pass/fail summary and offers to create the PR if everything passes.

Ticket

LFXV2-1284

🤖 Generated with Claude Code

Adds three Claude Code skills to help contributors get started with and
develop on the committee service, created using the skill-creator plugin.

🤖 Generated with [Claude Code](https://claude.ai/code)

Signed-off-by: Andres Tobon <andrest2455@gmail.com>
@andrest50 andrest50 requested a review from a team as a code owner March 13, 2026 20:12
Copilot AI review requested due to automatic review settings March 13, 2026 20:12
@coderabbitai
Copy link

coderabbitai bot commented Mar 13, 2026

Walkthrough

This pull request adds multiple developer-facing documents and restructures the Goa DSL: new comprehensive guides for setup, development workflow, and preflight checks; pattern references for Goa and NATS; a new .env.example; README edits; and a large DSL reorganization that moves detailed committee and committee-member type definitions from design/type.go into new files while replacing the original file with a minimal shared-attributes surface.

Changes

Cohort / File(s) Summary
Developer Guides & References
.claude/skills/develop/SKILL.md, .claude/skills/develop/references/goa-patterns.md, .claude/skills/develop/references/nats-patterns.md, .claude/skills/preflight/SKILL.md, .claude/skills/setup/SKILL.md
Added comprehensive documentation: development workflow, Goa design patterns, NATS JetStream KV storage patterns, preflight validation checklist, and local setup guide.
Goa DSL — New detailed types
cmd/committee-api/design/committee_type.go, cmd/committee-api/design/committee_member_type.go
Introduced extensive Goa DSL definitions for committee and committee-member models (many new Type declarations and numerous attribute helper functions) providing full data model surface in separate files.
Goa DSL — Removed / Simplified surface
cmd/committee-api/design/type.go
Removed large blocks of previous committee and committee-member DSL definitions and attribute helpers; replaced with a minimal shared-attributes placeholder and a reduced set of header/metadata attributes (Version, ETag, IfMatch, BearerToken, XSync, CreatedAt, UpdatedAt) while retaining common error types.
Configs & Docs
.env.example, cmd/committee-api/README.md
Added .env.example with development defaults and updated cmd/committee-api/README.md for usage and references (minor editorial updates).

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: adding Claude Code skills for setup and development workflows. It is specific, concise, and accurately reflects the primary purpose of the changeset.
Description check ✅ Passed The description is detailed and directly related to the changeset. It explains the three main skills added (/setup, /develop, /preflight), their purposes, and references the associated ticket, making it clear and relevant to the changes.
Docstring Coverage ✅ Passed Docstring coverage is 98.25% which is sufficient. The required threshold is 80.00%.

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

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch andrest50/claude-skills
📝 Coding Plan
  • Generate coding plan for human review comments

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

Copy link

@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: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.claude/skills/develop/references/nats-patterns.md:
- Around line 77-80: The docs currently show example error handling for kvStore
Update/Delete that treat any error as an unexpected error; update the examples
around the s.client.kvStore[constants.KVBucketNameCommittees].Update(...) and
the corresponding Delete(...) snippets so that when the underlying NATS error is
nats.ErrKeyWrongLastSequence (revision mismatch from optimistic concurrency) you
map it to a conflict outcome via errs.NewConflict(...) instead of
errs.NewUnexpected(...), otherwise preserve the existing unexpected-error
handling for other errors; specifically check the returned err against
nats.ErrKeyWrongLastSequence (or wrap-aware comparison) and return
errs.NewConflict("revision mismatch", err) for that case in the examples.

In @.claude/skills/preflight/SKILL.md:
- Around line 18-22: The doc runs comparisons against origin/main without
refreshing remote refs, which can produce stale results; add a fetch step before
the diff/log commands—insert a line executing git fetch origin main (or git
fetch --prune origin main) immediately before the git status/git diff --stat
origin/main...HEAD/git log --format... lines so the subsequent git diff and git
log operate on up-to-date remote history.

In @.claude/skills/setup/SKILL.md:
- Around line 106-110: The fenced code blocks containing the environment snippet
starting with "NATS_URL: nats://lfx-platform-nats.lfx.svc.cluster.local:4222"
and the list starting with "committee-members" are missing language identifiers
and trigger markdownlint MD040; update each triple-backtick fence to include a
language tag (use "text") so they read ```text ... ```; apply the same change to
the other occurrence around the "committee-members / committee-settings /
committees" block (lines noted in the review) to satisfy MD040.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: f9017227-c31c-41dd-afc5-f28e4cb99dbb

📥 Commits

Reviewing files that changed from the base of the PR and between 761df74 and 20b91cf.

📒 Files selected for processing (5)
  • .claude/skills/develop/SKILL.md
  • .claude/skills/develop/references/goa-patterns.md
  • .claude/skills/develop/references/nats-patterns.md
  • .claude/skills/preflight/SKILL.md
  • .claude/skills/setup/SKILL.md

Comment on lines +77 to +80
rev, err := s.client.kvStore[constants.KVBucketNameCommittees].Update(ctx, uid, dataBytes, revision)
if err != nil {
return errs.NewUnexpected("failed to update committee", err)
}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify current repository handling for optimistic concurrency errors in NATS storage.
rg -n -C3 'ErrKeyWrongLastSequence|Update\(|Delete\('

Repository: linuxfoundation/lfx-v2-committee-service

Length of output: 18214


🏁 Script executed:

find . -name "nats-patterns.md" -type f

Repository: linuxfoundation/lfx-v2-committee-service

Length of output: 136


🏁 Script executed:

cat -n ./.claude/skills/develop/references/nats-patterns.md | sed -n '70,100p'

Repository: linuxfoundation/lfx-v2-committee-service

Length of output: 1514


🏁 Script executed:

rg -n 'ErrKeyWrongLastSequence' --type go

Repository: linuxfoundation/lfx-v2-committee-service

Length of output: 66


🏁 Script executed:

rg -n 'jetstream\.' --type go | grep -i 'err' | head -20

Repository: linuxfoundation/lfx-v2-committee-service

Length of output: 2215


🏁 Script executed:

rg -n 'import' internal/infrastructure/nats/storage.go | head -20

Repository: linuxfoundation/lfx-v2-committee-service

Length of output: 94


🏁 Script executed:

cat -n internal/infrastructure/nats/storage.go | sed -n '1,30p'

Repository: linuxfoundation/lfx-v2-committee-service

Length of output: 1027


🏁 Script executed:

cat -n internal/infrastructure/nats/storage.go | sed -n '160,175p'

Repository: linuxfoundation/lfx-v2-committee-service

Length of output: 940


🏁 Script executed:

web_search
NATS jetstream revision mismatch error ErrKeyWrongLastSequence

Repository: linuxfoundation/lfx-v2-committee-service

Length of output: 177


🌐 Web query:

NATS jetstream ErrKeyWrongLastSequence revision mismatch error

💡 Result:

In JetStream Key-Value (KV), a key’s revision is implemented as the per-subject stream sequence for the underlying stream subject (e.g. $KV.<bucket>.<key>). When you do an optimistic concurrency write (KV “update”), the client sends the expected revision using the Nats-Expected-Last-Subject-Sequence header; if the server’s current last sequence for that subject doesn’t match, you get ErrKeyWrongLastSequence / “wrong last sequence” (JetStream API err_code=10071). [1] [2] [3]

Common causes

  • Stale revision: another writer updated the key between your Get() and Update(). [3]
  • Wrong “expected” value: you used the stream’s last sequence (global) instead of the subject’s last sequence (per key), which can also surface as “wrong last sequence”. [2]

What to do

  • If you want CAS semantics: entry = kv.Get(k)kv.Update(k, value, entry.Revision()); on ErrKeyWrongLastSequence, re-Get() and retry (or decide to abort/merge). [1] [3]
  • If you don’t need CAS: use kv.Put(k, value) (last write wins) instead of update.
  • If you’re publishing directly (not via KV helpers): ensure you set ExpectedLastSequencePerSubject / Nats-Expected-Last-Subject-Sequence to the subject’s last sequence for that key, not the stream’s last_seq. [1] [2]

Sources:
[1] NATS server 2.9.22 release notes (KV update uses Nats-Expected-Last-Subject-Sequence)
[2] nats-server issue #7361 (discussion of validating expected-last-subject-seq vs stream last_seq)
[3] Rust JetStream ErrorCode docs (“Wrong last sequence”)


🏁 Script executed:

rg -n 'go.mod|go.sum' | grep nats

Repository: linuxfoundation/lfx-v2-committee-service

Length of output: 377


🏁 Script executed:

rg -n 'ErrKey' --type go | grep -v test | head -20

Repository: linuxfoundation/lfx-v2-committee-service

Length of output: 1245


🏁 Script executed:

rg -n 'Conflict|errs.New' internal/infrastructure/nats/storage.go | head -20

Repository: linuxfoundation/lfx-v2-committee-service

Length of output: 1856


Update documentation examples to handle revision-mismatch errors during optimistic concurrency control.

The current examples in the nats-patterns.md documentation for Update() and Delete() omit error handling for revision-mismatch scenarios. When optimistic concurrency control is in use, NATS jetstream raises ErrKeyWrongLastSequence when another process modifies the entry between a Get() and an Update()/Delete(). These should map to conflict outcomes (errs.NewConflict()), not unexpected errors.

Suggested doc update
 rev, err := s.client.kvStore[constants.KVBucketNameCommittees].Update(ctx, uid, dataBytes, revision)
 if err != nil {
+    if errors.Is(err, jetstream.ErrKeyWrongLastSequence) {
+        return errs.NewConflict("committee was modified by another process")
+    }
     return errs.NewUnexpected("failed to update committee", err)
 }
@@
 err := s.client.kvStore[constants.KVBucketNameCommittees].Delete(ctx, uid, jetstream.LastRevision(revision))
 if err != nil {
+    if errors.Is(err, jetstream.ErrKeyWrongLastSequence) {
+        return errs.NewConflict("committee was modified by another process")
+    }
     return errs.NewUnexpected("failed to delete committee", err)
 }

Also applies to: lines 85-88, 93-96

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

In @.claude/skills/develop/references/nats-patterns.md around lines 77 - 80, The
docs currently show example error handling for kvStore Update/Delete that treat
any error as an unexpected error; update the examples around the
s.client.kvStore[constants.KVBucketNameCommittees].Update(...) and the
corresponding Delete(...) snippets so that when the underlying NATS error is
nats.ErrKeyWrongLastSequence (revision mismatch from optimistic concurrency) you
map it to a conflict outcome via errs.NewConflict(...) instead of
errs.NewUnexpected(...), otherwise preserve the existing unexpected-error
handling for other errors; specifically check the returned err against
nats.ErrKeyWrongLastSequence (or wrap-aware comparison) and return
errs.NewConflict("revision mismatch", err) for that case in the examples.

Comment on lines +18 to +22
```bash
git status
git diff --stat origin/main...HEAD
git log --format="%h %s%n%b" origin/main...HEAD
```
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Refresh remote refs before running origin/main...HEAD comparisons.

Line 20–22 rely on origin/main; without fetching first, preflight can validate against stale history and report incorrect results.

Suggested doc update
 ## Check 0: Working Tree Status
 
 Before running any validation, understand what has changed:
 
 ```bash
+git fetch origin main
 git status
 git diff --stat origin/main...HEAD
 git log --format="%h %s%n%b" origin/main...HEAD
</details>

<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

```suggestion

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

In @.claude/skills/preflight/SKILL.md around lines 18 - 22, The doc runs
comparisons against origin/main without refreshing remote refs, which can
produce stale results; add a fetch step before the diff/log commands—insert a
line executing git fetch origin main (or git fetch --prune origin main)
immediately before the git status/git diff --stat origin/main...HEAD/git log
--format... lines so the subsequent git diff and git log operate on up-to-date
remote history.

Comment on lines +106 to +110
```
NATS_URL: nats://lfx-platform-nats.lfx.svc.cluster.local:4222
AUTH_SOURCE: mock
JWT_AUTH_DISABLED_MOCK_LOCAL_PRINCIPAL: project_super_admin
```
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Add language identifiers to fenced code blocks.

These fences are missing a language tag, which triggers markdownlint (MD040).

Suggested doc update
-```
+```text
 NATS_URL: nats://lfx-platform-nats.lfx.svc.cluster.local:4222
 AUTH_SOURCE: mock
 JWT_AUTH_DISABLED_MOCK_LOCAL_PRINCIPAL: project_super_admin

@@
- +text
committee-members
committee-settings
committees

Also applies to: 153-157

🧰 Tools
🪛 markdownlint-cli2 (0.21.0)

[warning] 106-106: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

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

In @.claude/skills/setup/SKILL.md around lines 106 - 110, The fenced code blocks
containing the environment snippet starting with "NATS_URL:
nats://lfx-platform-nats.lfx.svc.cluster.local:4222" and the list starting with
"committee-members" are missing language identifiers and trigger markdownlint
MD040; update each triple-backtick fence to include a language tag (use "text")
so they read ```text ... ```; apply the same change to the other occurrence
around the "committee-members / committee-settings / committees" block (lines
noted in the review) to satisfy MD040.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds a pilot set of Claude Code “skills” (markdown-based slash commands) under .claude/skills/ to guide contributors through local setup, day-to-day development, and pre-PR validation for the committee service.

Changes:

  • Add /setup skill documenting local environment bootstrapping (Go/NATS, codegen, run, health checks).
  • Add /develop skill documenting the service architecture and recommended workflow (with Goa/NATS reference notes).
  • Add /preflight skill providing a step-by-step checklist before opening a PR.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
.claude/skills/setup/SKILL.md New guided local setup workflow for prerequisites, NATS KV buckets, codegen, run, and verification.
.claude/skills/develop/SKILL.md New development workflow guide aligned to the service’s layered architecture.
.claude/skills/develop/references/goa-patterns.md Goa design/codegen reference patterns for adding endpoints and types.
.claude/skills/develop/references/nats-patterns.md NATS KV storage patterns and conventions reference.
.claude/skills/preflight/SKILL.md Pre-PR checklist covering formatting, lint, license headers, tests, build, and commit conventions.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +89 to +96
The service reads its configuration from environment variables. A ready-to-use `.env` file already exists in the repo root — it's pre-configured for local development with auth disabled (so you don't need external credentials to get started).

Load the environment:
```bash
source .env
```

> **What the .env file does:** It sets the service to connect to a local NATS server and disables authentication, so you can test without needing real credentials. Never commit changes to `.env` with real secrets.
Comment on lines +105 to +113
Expected output:
```
NATS_URL: nats://lfx-platform-nats.lfx.svc.cluster.local:4222
AUTH_SOURCE: mock
JWT_AUTH_DISABLED_MOCK_LOCAL_PRINCIPAL: project_super_admin
```

> **Note:** The NATS_URL in .env points to the shared cluster — for local development, you'll override this in Step 6.

Comment on lines +101 to +110
| Layer | File Location | When to Change |
|-------|--------------|----------------|
| **API Design** | `cmd/committee-api/design/committee.go` | New endpoint or new request/response fields |
| **Data Types** | `cmd/committee-api/design/type.go` | New Goa types for request/response |
| **Domain Model** | `internal/domain/model/` | New or changed data shape stored in NATS |
| **Port Interface** | `internal/domain/port/` | New storage operation needed |
| **NATS Storage** | `internal/infrastructure/nats/` | Implementing a new port operation |
| **Internal Service** | `internal/service/` | New business logic |
| **HTTP Handler** | `cmd/committee-api/service/` | Wiring up a new endpoint |

Comment on lines +7 to +11
| Bucket | Constant | Stores |
|--------|----------|--------|
| `committees` | `constants.KVBucketNameCommittees` | Committee base data |
| `committee-settings` | `constants.KVBucketNameCommitteeSettings` | Committee settings |
| `committee-members` | `constants.KVBucketNameCommitteeMembers` | Committee member data |
Comment on lines +96 to +101
## Design Constraints

- Method names use kebab-case: `"get-committee-stats"` not `"getCommitteeStats"`
- HTTP paths use underscores for path params: `{committee_uid}`
- Always include `BearerTokenAttribute()` and `VersionAttribute()` in payloads
- Always declare all error types that might be returned
- Add .env.example with commented explanations for all environment variables
- Rename design/committee.go to design/committee_svc.go for clarity
- Split design/type.go into entity-specific files (committee_type.go,
  committee_member_type.go) keeping shared attributes and errors in type.go
- Update setup skill to cover both local and E2E (OrbStack) dev modes
- Expand develop skill with: Heimdall ruleset guidance (OpenFGA relations),
  V1 sync compatibility step, and updated file references
- Update goa-patterns.md with type file convention (<entity>_type.go)
- Expand nats-patterns.md with instructions for adding new KV buckets
  (local CLI and Helm chart)
- Add v1-sync-patterns.md reference covering lfx-v1-sync-helper update
  locations for cross-system field changes
- Update cmd/committee-api/README.md file structure section

Generated with [Claude Code](https://claude.ai/claude-code)

Signed-off-by: Andres Tobon <andrest2455@gmail.com>
Copy link

@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: 3

🧹 Nitpick comments (1)
cmd/committee-api/design/committee_member_type.go (1)

32-60: Consider consolidating redundant type definitions.

CommitteeMemberFull is currently identical to CommitteeMemberBase, and both CommitteeMemberCreateAttributes() and CommitteeMemberUpdateAttributes() are identical wrappers around CommitteeMemberBaseAttributes(). If these are placeholders for future differentiation, consider adding a brief comment explaining the intent; otherwise, they could be consolidated.

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

In `@cmd/committee-api/design/committee_member_type.go` around lines 32 - 60,
CommitteeMemberFull, CommitteeMemberCreateAttributes, and
CommitteeMemberUpdateAttributes are redundant wrappers around
CommitteeMemberBaseAttributes; either consolidate by having CommitteeMemberFull
directly use CommitteeMemberBaseAttributes (or remove the redundant wrappers and
reference CommitteeMemberBaseAttributes where used) or keep them but add a brief
comment above CommitteeMemberFull and the two functions explaining they are
intentional placeholders for future divergence; update references to use the
consolidated symbol or leave the wrappers with explanatory comments for
CommitteeMemberFull, CommitteeMemberCreateAttributes,
CommitteeMemberUpdateAttributes and CommitteeMemberBaseAttributes.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.claude/skills/develop/references/v1-sync-patterns.md:
- Around line 57-59: The fenced code block containing
"github.com/linuxfoundation/lfx-v2-committee-service vX.Y.Z" is missing a
language identifier which triggers markdownlint MD040; update that fenced block
in .claude/skills/develop/references/v1-sync-patterns.md by changing the opening
triple backticks to include a language token (e.g., use "text") so the block
starts with ```text, leaving the block contents unchanged.

In @.claude/skills/setup/SKILL.md:
- Around line 185-189: The fenced code block containing the lines
"committee-members", "committee-settings", "committees" is missing a language
identifier; update the opening fence from ``` to ```text so the block becomes a
plain-text fenced block and satisfies markdownlint MD040 (i.e., change the
fenced block that wraps those three lines to use "text" as the language
identifier).

In `@cmd/committee-api/design/committee_type.go`:
- Around line 329-335: In MemberVisibilityAttribute(), fix the typo in the
attribute description string by changing "Dertermines the visibility level of
members profiles to other members of the same committee" to "Determines the
visibility level of members' profiles to other members of the same committee"
(also add the possessive apostrophe on "members' profiles" for clarity) so the
dsl.Attribute call uses the corrected, grammatically accurate description.

---

Nitpick comments:
In `@cmd/committee-api/design/committee_member_type.go`:
- Around line 32-60: CommitteeMemberFull, CommitteeMemberCreateAttributes, and
CommitteeMemberUpdateAttributes are redundant wrappers around
CommitteeMemberBaseAttributes; either consolidate by having CommitteeMemberFull
directly use CommitteeMemberBaseAttributes (or remove the redundant wrappers and
reference CommitteeMemberBaseAttributes where used) or keep them but add a brief
comment above CommitteeMemberFull and the two functions explaining they are
intentional placeholders for future divergence; update references to use the
consolidated symbol or leave the wrappers with explanatory comments for
CommitteeMemberFull, CommitteeMemberCreateAttributes,
CommitteeMemberUpdateAttributes and CommitteeMemberBaseAttributes.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 09024396-5730-41a5-b0d2-8ceb732cacc2

📥 Commits

Reviewing files that changed from the base of the PR and between 20b91cf and ae53aa3.

📒 Files selected for processing (11)
  • .claude/skills/develop/SKILL.md
  • .claude/skills/develop/references/goa-patterns.md
  • .claude/skills/develop/references/nats-patterns.md
  • .claude/skills/develop/references/v1-sync-patterns.md
  • .claude/skills/setup/SKILL.md
  • .env.example
  • cmd/committee-api/README.md
  • cmd/committee-api/design/committee_member_type.go
  • cmd/committee-api/design/committee_svc.go
  • cmd/committee-api/design/committee_type.go
  • cmd/committee-api/design/type.go
✅ Files skipped from review due to trivial changes (2)
  • .env.example
  • .claude/skills/develop/references/goa-patterns.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • .claude/skills/develop/references/nats-patterns.md

Comment on lines +57 to +59
```
github.com/linuxfoundation/lfx-v2-committee-service vX.Y.Z
```
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Add language identifier to fenced code block.

The code block showing the Go module import path is missing a language identifier, triggering markdownlint MD040.

Suggested fix
-```
+```text
 github.com/linuxfoundation/lfx-v2-committee-service vX.Y.Z
-```
+```
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
```
github.com/linuxfoundation/lfx-v2-committee-service vX.Y.Z
```
🧰 Tools
🪛 markdownlint-cli2 (0.21.0)

[warning] 57-57: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

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

In @.claude/skills/develop/references/v1-sync-patterns.md around lines 57 - 59,
The fenced code block containing
"github.com/linuxfoundation/lfx-v2-committee-service vX.Y.Z" is missing a
language identifier which triggers markdownlint MD040; update that fenced block
in .claude/skills/develop/references/v1-sync-patterns.md by changing the opening
triple backticks to include a language token (e.g., use "text") so the block
starts with ```text, leaving the block contents unchanged.

Comment on lines +185 to +189
```
committee-members
committee-settings
committees
```
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Add language identifier to fenced code block.

The expected output block is missing a language identifier, triggering markdownlint MD040.

Suggested fix
 Expected output:
-```
+```text
 committee-members
 committee-settings
 committees
</details>

<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

```suggestion
Expected output:
🧰 Tools
🪛 markdownlint-cli2 (0.21.0)

[warning] 185-185: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

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

In @.claude/skills/setup/SKILL.md around lines 185 - 189, The fenced code block
containing the lines "committee-members", "committee-settings", "committees" is
missing a language identifier; update the opening fence from ``` to ```text so
the block becomes a plain-text fenced block and satisfies markdownlint MD040
(i.e., change the fenced block that wraps those three lines to use "text" as the
language identifier).

Comment on lines +329 to +335
func MemberVisibilityAttribute() {
dsl.Attribute("member_visibility", dsl.String, "Dertermines the visibility level of members profiles to other members of the same committee", func() {
dsl.Enum("hidden", "basic_profile")
dsl.Default("hidden")
dsl.Example("hidden")
})
}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fix typo in description.

"Dertermines" should be "Determines".

Suggested fix
 // MemberVisibilityAttribute is the DSL attribute for the member visibility setting
 func MemberVisibilityAttribute() {
-	dsl.Attribute("member_visibility", dsl.String, "Dertermines the visibility level of members profiles to other members of the same committee", func() {
+	dsl.Attribute("member_visibility", dsl.String, "Determines the visibility level of members profiles to other members of the same committee", func() {
 		dsl.Enum("hidden", "basic_profile")
 		dsl.Default("hidden")
 		dsl.Example("hidden")
 	})
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
func MemberVisibilityAttribute() {
dsl.Attribute("member_visibility", dsl.String, "Dertermines the visibility level of members profiles to other members of the same committee", func() {
dsl.Enum("hidden", "basic_profile")
dsl.Default("hidden")
dsl.Example("hidden")
})
}
func MemberVisibilityAttribute() {
dsl.Attribute("member_visibility", dsl.String, "Determines the visibility level of members profiles to other members of the same committee", func() {
dsl.Enum("hidden", "basic_profile")
dsl.Default("hidden")
dsl.Example("hidden")
})
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cmd/committee-api/design/committee_type.go` around lines 329 - 335, In
MemberVisibilityAttribute(), fix the typo in the attribute description string by
changing "Dertermines the visibility level of members profiles to other members
of the same committee" to "Determines the visibility level of members' profiles
to other members of the same committee" (also add the possessive apostrophe on
"members' profiles" for clarity) so the dsl.Attribute call uses the corrected,
grammatically accurate description.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants