Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions frontend/.claude/rules/test-unit-vs-integration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
paths:
- "src/**/*.test.{ts,tsx}"
---

# Unit vs Integration Tests

| Extension | Environment | Use For |
|-----------|-------------|---------|
| `.test.ts` | Node (no DOM) | Pure logic, utils, transforms |
| `.test.tsx` | JSDOM (browser) | Components, hooks, DOM interaction |

Wrong extension = test silently passes or fails in CI. See [full rule](../skills/testing/rules/test-unit-vs-integration.md) for details.
32 changes: 1 addition & 31 deletions frontend/.claude/skills/api-patterns/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,36 +33,6 @@ Make API calls with Connect Query and handle responses properly.

Regenerate protos: `task proto:generate` (from repo root)

## Basic Patterns

### Query

```typescript
import { useQuery } from '@connectrpc/connect-query';
import { getUser } from 'protogen/user-UserService_connectquery';

const { data, isLoading, error } = useQuery(
getUser,
{ id: userId },
{ enabled: !!userId }
);
```

### Mutation

```typescript
import { useMutation } from '@connectrpc/connect-query';
import { createUser } from 'protogen/user-UserService_connectquery';

const mutation = useMutation(createUser, {
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['getUser'] });
},
});

mutation.mutate({ name, config });
```

## Rules

See `rules/` directory for detailed guidance.
See `rules/` directory for detailed guidance on queries, mutations, cache invalidation, and error handling.
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,4 @@ function ClusterList({ organizationId }: Props) {

- [Connect Query Docs](https://connectrpc.com/docs/web/query/getting-started)
- [TanStack Query Options](https://tanstack.com/query/latest/docs/framework/react/reference/useQuery)
- See also: [use-react-query-for-server](../../state-management/rules/use-react-query-for-server.md) — when to use React Query vs Zustand
4 changes: 2 additions & 2 deletions frontend/.claude/skills/code-standards/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,12 @@ Write code that is accessible, performant, type-safe, and maintainable.

| Action | Rule |
|--------|------|
| Avoid any | `ts-no-any.md` |
| Handle unknowns | `ts-use-unknown.md` |
| Write components | `react-functional-only.md` |
| Async code | `async-await-promises.md` |
| Avoid legacy libs | `no-legacy.md` |

`any` types and top-level regex are enforced by Biome (`noExplicitAny`, `useTopLevelRegex`).

## Commands

```bash
Expand Down
4 changes: 4 additions & 0 deletions frontend/.claude/skills/code-standards/rules/no-legacy.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,3 +101,7 @@ When converting observables to React state, automatic behaviors must become expl

- MobX stores: `src/state/` (do not add new files)
- Chakra components: throughout codebase (migrate on touch)

## See Also

- [use-ui-registry](../../ui-development/rules/use-ui-registry.md) — Registry component usage and installation
75 changes: 0 additions & 75 deletions frontend/.claude/skills/code-standards/rules/ts-no-any.md

This file was deleted.

78 changes: 0 additions & 78 deletions frontend/.claude/skills/code-standards/rules/ts-use-unknown.md

This file was deleted.

Loading
Loading