Skip to content

chore: move CLAUDE.md into .claude/ and update every reference to it - #1393

Merged
alfredo1996 merged 2 commits into
release/1.5from
chore/claude-md-into-dot-claude
Jul 30, 2026
Merged

chore: move CLAUDE.md into .claude/ and update every reference to it#1393
alfredo1996 merged 2 commits into
release/1.5from
chore/claude-md-into-dot-claude

Conversation

@alfredo1996

@alfredo1996 alfredo1996 commented Jul 30, 2026

Copy link
Copy Markdown
Owner

The repo root held 13KB of internal agent instructions, visible to every GitHub
visitor alongside the README. .claude/ is where the rest of that machinery already
lives — hooks, skills, agents, settings — so the doc belongs with them.

Verified before moving

A wrong answer here would have silently disabled every project rule with no
error
. Claude Code loads project memory from both ./CLAUDE.md and
./.claude/CLAUDE.md; the official memory docs name the two as equivalent
project-level locations. So the TDD, package-boundary, query-safety and credential
rules keep loading.

Two references were load-bearing, not prose

Both would have broken on the move:

  • app/src/lib/__tests__/docs-accuracy.test.ts reads the doc by path and
    asserts its claims — the path-existence check, the MIGRATE_ON_START claim, and
    the tenant-guard path. It would have failed on a missing file.
  • package.json's review:local passes -c CLAUDE.md to the CodeRabbit CLI.

The rest were comments and skill/agent prose. Those now point at the new path so
nobody goes looking for a root file that no longer exists.

Also

Adds #1376 and #1377 to [Unreleased], including the two bugs that surfaced during
that work — the reassignment being invisible to the optimistic lock, and the
import's unassigned-widget count including markdown/iframe widgets.

Verification

npm run verify exit 0 — app 3466, component 1712, connection 406, cli 69. The 8
docs-accuracy tests, which are the ones that actually read the file, pass against
the new path. The 2 lint warnings are pre-existing in widget-editor-modal.tsx.

No E2E: no application code changed — a file move, a test path, a script arg, and
comments.

Summary by CodeRabbit

  • New Features

    • Added bulk connector reassignment from dashboard options.
    • Added a one-action fix for widgets left unassigned after imports.
  • Bug Fixes

    • Improved connection reassignment and dashboard saving at narrower screen widths.
    • Corrected widget counts, numeric parameter clearing, and Neo4j query and temporal-value handling.
    • Improved map rendering, markdown formatting, and heading styles.
    • Applied row limits during query execution to help prevent excessive memory use.
    • Fixed installation, environment-variable, restore, and decryption documentation issues.

The repo root held 13KB of internal agent instructions, visible to every GitHub
visitor alongside the README. `.claude/` is where the rest of that machinery
already lives — hooks, skills, agents, settings — so the doc belongs with them.

Verified before moving, because a wrong answer here would silently disable every
project rule with no error: Claude Code loads project memory from BOTH
`./CLAUDE.md` and `./.claude/CLAUDE.md` (per the official memory docs, which name
the two as equivalent). So the TDD, package-boundary, query-safety and credential
rules keep loading.

Two references were load-bearing rather than prose and would have broken:

- `app/src/lib/__tests__/docs-accuracy.test.ts` reads the doc by path and asserts
  its claims — the path-existence check, the MIGRATE_ON_START claim and the
  tenant-guard path. It would have failed on a missing file.
- `package.json`'s `review:local` passes `-c CLAUDE.md` to the CodeRabbit CLI.

The remaining mentions were comments and skill/agent prose; those now point at the
new path so nobody goes looking for a root file that no longer exists.

Also adds #1376 and #1377 to the [Unreleased] section, including the two bugs that
surfaced during that work: the reassignment being invisible to the optimistic lock,
and the import's unassigned-widget count counting markdown and iframe widgets.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@alfredo1996, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 43 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 51de36da-8910-460b-ba36-f2eb231fa20e

📥 Commits

Reviewing files that changed from the base of the PR and between 4385850 and e838e61.

📒 Files selected for processing (1)
  • package.json

Walkthrough

The PR adds .claude/CLAUDE.md as the canonical project guidance document, updates agents, hooks, skills, scripts, and tests to reference it, and expands CHANGELOG.md with unreleased fixes and features.

Changes

Claude guidance and documentation alignment

Layer / File(s) Summary
Canonical Claude guidance
.claude/CLAUDE.md
Adds development, testing, safety, migration, chart, hook, and agent workflow guidance.
Tooling and test reference alignment
.claude/agents/*, .claude/hooks/*, .claude/skills/next/SKILL.md, app/src/**/__tests__/*, package.json
Updates references and documentation checks to use .claude/CLAUDE.md.
Unreleased changelog updates
CHANGELOG.md
Records multiple fixes and additions across connections, imports, layouts, connectors, documentation, installation, and query execution.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

Suggested labels: documentation, area:devex

Suggested reviewers: alfredorubin96

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: moving CLAUDE.md into .claude/ and updating references.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/claude-md-into-dot-claude

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.

…d-into-dot-claude

# Conflicts:
#	package.json

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

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 current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.claude/CLAUDE.md:
- Line 126: Update the encryption guidance near the key-management documentation
to require the repository’s AES-256-GCM envelope encryption scheme, including
data-key wrapping, instead of stating that envelope wrapping is not used.
Preserve the documented ENCRYPTION_KEY and key-rotation requirements where
compatible, and align the wording with the canonical “AES-256-GCM envelope
scheme” guidance.
- Line 131: Update the tenant-enforcement guidance in CLAUDE.md to require
tenant filtering at the ORM or middleware level for every database query, rather
than relying primarily on per-route filters. Remove the statement that
app/src/lib/db/index.ts lacks enforcement, and retain route-level filtering only
as an additional requirement where applicable.

In `@CHANGELOG.md`:
- Line 88: Update the changelog entry to state that write cursors drain results
to completion while retaining at most MAX_ROWS+1 rows, clarifying that the limit
bounds retained memory or displayed results rather than write execution. Remove
the claim that MAX_ROWS+1 bounded only what was displayed if it conflicts with
this behavior.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 5fcec66b-0758-4212-9f47-1ab174e2b251

📥 Commits

Reviewing files that changed from the base of the PR and between 51d4708 and 4385850.

📒 Files selected for processing (10)
  • .claude/CLAUDE.md
  • .claude/agents/project-architect.md
  • .claude/hooks/check-boundaries.sh
  • .claude/hooks/check-migration-guard.sh
  • .claude/skills/next/SKILL.md
  • CHANGELOG.md
  • app/src/__tests__/test-environment-boundary.test.ts
  • app/src/lib/__tests__/docs-accuracy.test.ts
  • app/src/lib/db/__tests__/tenant-scope.test.ts
  • package.json

Comment thread CHANGELOG.md
- The login form's submit is gated on React hydration. Before hydration a click ran the browser's native form submit — a GET that put the email and plaintext password in the URL, and therefore in browser history and any access log (#1321)
- Any authenticated user could permanently wedge a connector's query scheduler by submitting a whitespace-only query: `runQuery` returned without invoking a terminal callback, so the slot never freed. After `maxConcurrent` such requests every subsequent query on that connection failed with 408/503 until the process restarted. The shared SDK helper now always settles the caller (#1301)
- Write queries buffered the entire result set into the Node heap before the row limit was applied, so `MAX_ROWS+1` bounded only what was *displayed*. One Form submit against a large table could exhaust the heap shared by every tenant on the process. Both connectors now drain writes through a cursor (#1298, #1326)
- Write queries buffered the entire result set into the Node heap before the row limit was applied, so `MAX_ROWS+1` bounded only what was _displayed_. One Form submit against a large table could exhaust the heap shared by every tenant on the process. Both connectors now drain writes through a cursor (#1298, #1326)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Correct the MAX_ROWS+1 wording.

Write cursors drain results to completion and retain only up to the row limit; this bounds memory, not write execution. The changelog should not claim that MAX_ROWS+1 bounds execution.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CHANGELOG.md` at line 88, Update the changelog entry to state that write
cursors drain results to completion while retaining at most MAX_ROWS+1 rows,
clarifying that the limit bounds retained memory or displayed results rather
than write execution. Remove the claim that MAX_ROWS+1 bounded only what was
displayed if it conflicts with this behavior.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Caution

Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.claude/CLAUDE.md:
- Line 126: Update the encryption guidance near the key-management documentation
to require the repository’s AES-256-GCM envelope encryption scheme, including
data-key wrapping, instead of stating that envelope wrapping is not used.
Preserve the documented ENCRYPTION_KEY and key-rotation requirements where
compatible, and align the wording with the canonical “AES-256-GCM envelope
scheme” guidance.
- Line 131: Update the tenant-enforcement guidance in CLAUDE.md to require
tenant filtering at the ORM or middleware level for every database query, rather
than relying primarily on per-route filters. Remove the statement that
app/src/lib/db/index.ts lacks enforcement, and retain route-level filtering only
as an additional requirement where applicable.

In `@CHANGELOG.md`:
- Line 88: Update the changelog entry to state that write cursors drain results
to completion while retaining at most MAX_ROWS+1 rows, clarifying that the limit
bounds retained memory or displayed results rather than write execution. Remove
the claim that MAX_ROWS+1 bounded only what was displayed if it conflicts with
this behavior.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 5fcec66b-0758-4212-9f47-1ab174e2b251

📥 Commits

Reviewing files that changed from the base of the PR and between 51d4708 and 4385850.

📒 Files selected for processing (10)
  • .claude/CLAUDE.md
  • .claude/agents/project-architect.md
  • .claude/hooks/check-boundaries.sh
  • .claude/hooks/check-migration-guard.sh
  • .claude/skills/next/SKILL.md
  • CHANGELOG.md
  • app/src/__tests__/test-environment-boundary.test.ts
  • app/src/lib/__tests__/docs-accuracy.test.ts
  • app/src/lib/db/__tests__/tenant-scope.test.ts
  • package.json
🛑 Comments failed to post (2)
.claude/CLAUDE.md (2)

126-126: 🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift

Document the required envelope encryption scheme.

This line explicitly rejects envelope/data-key wrapping, conflicting with the repository’s required AES-256-GCM envelope scheme. Keep the canonical guidance aligned with the mandated key-management architecture to avoid incompatible or unsafe implementations.

As per coding guidelines, “No credentials logged or stored in DB (AES-256-GCM envelope scheme in use).”

🧰 Tools
🪛 LanguageTool

[grammar] ~126-~126: Ensure spelling is correct
Context: ...text format is iv:authTag:ciphertext (base64). Key rotation is supported via `ENCRYPTI...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/CLAUDE.md at line 126, Update the encryption guidance near the
key-management documentation to require the repository’s AES-256-GCM envelope
encryption scheme, including data-key wrapping, instead of stating that envelope
wrapping is not used. Preserve the documented ENCRYPTION_KEY and key-rotation
requirements where compatible, and align the wording with the canonical
“AES-256-GCM envelope scheme” guidance.

Source: Coding guidelines


131-131: 🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift

Align tenant enforcement with the required ORM/middleware guarantee.

The document currently makes per-route filtering the primary requirement and states that ORM/middleware enforcement does not exist. That contradicts the required tenant filter at the ORM/middleware level and preserves a cross-tenant leakage gap if a route forgets its filter.

As per coding guidelines, “Every DB query MUST include tenant filter at ORM/middleware level.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/CLAUDE.md at line 131, Update the tenant-enforcement guidance in
CLAUDE.md to require tenant filtering at the ORM or middleware level for every
database query, rather than relying primarily on per-route filters. Remove the
statement that app/src/lib/db/index.ts lacks enforcement, and retain route-level
filtering only as an additional requirement where applicable.

Source: Coding guidelines

@sonarqubecloud

Copy link
Copy Markdown

@alfredo1996
alfredo1996 merged commit 0811366 into release/1.5 Jul 30, 2026
15 checks passed
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