Skip to content

Commit 7364159

Browse files
authored
Merge pull request #62 from MaxLinCode/claude/add-biome
Add biome
2 parents f3c94d4 + 90d6c35 commit 7364159

119 files changed

Lines changed: 12362 additions & 13467 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.dippy

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# .dippy
2+
3+
# Let normal read / inspect commands flow
4+
allow git status
5+
allow git diff
6+
allow git log
7+
allow ls
8+
allow pwd
9+
allow cat
10+
allow sed
11+
allow grep
12+
allow rg
13+
allow find
14+
allow jq
15+
16+
# Let normal monorepo validation commands flow
17+
allow pnpm --filter * typecheck
18+
allow pnpm --filter * test
19+
allow pnpm --filter * lint
20+
allow pnpm biome *
21+
allow pnpm exec biome *
22+
allow pnpm tsc *
23+
allow pnpm vitest *
24+
allow pnpm jest *
25+
26+
# Keep obviously risky things gated
27+
deny rm -rf "Use trash or ask first before deleting recursively"
28+
deny git push --force "Force push requires review"
29+
deny git reset --hard "Hard reset requires review"
30+
deny pnpm publish "Publishing should always be confirmed"
31+
deny npm publish "Publishing should always be confirmed"
32+
deny-redirect **/.env* "Never write secrets into env files automatically"
33+
deny-redirect **/.env.local* "Never write secrets into env files automatically"

CLAUDE.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,12 @@ Build Atlas as a production-quality, Telegram-first planning assistant. The code
110110

111111
## Git Workflow Rules
112112

113+
- **Every workflow — no exceptions — must use a git worktree and a dedicated branch.**
114+
- Create a worktree before touching any files: `git worktree add ../atlas-<short-description> -b codex/<short-description>`
115+
- All edits, experiments, and commits happen inside that worktree, never in the main checkout.
116+
- This prevents dirty-worktree collisions between concurrent tasks (e.g. formatting runs vs. feature work).
113117
- Follow `docs/workflows/feature-delivery.md` for product features, fixes, and behavior changes.
114-
- For any non-trivial code change, work on a feature branch named `codex/<short-description>`.
115118
- Do not commit or push implementation work directly to `main`.
116-
- Before pushing, confirm the current branch is not `main`.
117119
- If work is accidentally committed on `main`, move it to a feature branch before pushing.
118120

119121
## Execution Rules

apps/web/eslint.config.mjs

Lines changed: 0 additions & 16 deletions
This file was deleted.

apps/web/next.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { NextConfig } from "next";
22

33
const nextConfig: NextConfig = {
4-
typedRoutes: true
4+
typedRoutes: true,
55
};
66

77
export default nextConfig;

apps/web/package.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"scripts": {
55
"dev": "next dev",
66
"build": "next build",
7-
"lint": "eslint src next.config.ts vitest.config.mts eslint.config.mjs --max-warnings=0",
7+
"lint": "biome check src next.config.ts vitest.config.mts",
88
"typecheck": "tsc --noEmit",
99
"test": "vitest run"
1010
},
@@ -17,8 +17,6 @@
1717
"react-dom": "^19.0.0"
1818
},
1919
"devDependencies": {
20-
"eslint": "^9.22.0",
21-
"eslint-config-next": "^15.5.12",
2220
"@types/node": "^22.10.2",
2321
"@types/react": "^19.0.2",
2422
"@types/react-dom": "^19.0.2",

apps/web/src/app/(admin)/inbox/page.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ export default function InboxPage() {
22
return (
33
<main style={{ padding: "2rem" }}>
44
<h1>Inbox Items</h1>
5-
<p>Inspect raw messaging payloads, normalized text, and processing status.</p>
5+
<p>
6+
Inspect raw messaging payloads, normalized text, and processing status.
7+
</p>
68
</main>
79
);
810
}

apps/web/src/app/(admin)/planner-runs/page.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ export default function PlannerRunsPage() {
22
return (
33
<main style={{ padding: "2rem" }}>
44
<h1>Planner Runs</h1>
5-
<p>Review model inputs, structured outputs, confidence, and audit trails.</p>
5+
<p>
6+
Review model inputs, structured outputs, confidence, and audit trails.
7+
</p>
68
</main>
79
);
810
}
9-

apps/web/src/app/(admin)/schedule/page.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ export default function SchedulePage() {
22
return (
33
<main style={{ padding: "2rem" }}>
44
<h1>Schedule Blocks</h1>
5-
<p>Inspect current block placement, stale items, and scheduling reasons.</p>
5+
<p>
6+
Inspect current block placement, stale items, and scheduling reasons.
7+
</p>
68
</main>
79
);
810
}
9-

apps/web/src/app/(admin)/settings/page.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ export default function SettingsPage() {
22
return (
33
<main style={{ padding: "2rem" }}>
44
<h1>User Settings</h1>
5-
<p>Manage work hours, blackout windows, focus block sizes, and reminder defaults.</p>
5+
<p>
6+
Manage work hours, blackout windows, focus block sizes, and reminder
7+
defaults.
8+
</p>
69
</main>
710
);
811
}
9-

apps/web/src/app/api/cron/reconcile-google-calendar/route.test.ts

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ import { beforeEach, describe, expect, it, vi } from "vitest";
33
import { POST } from "./route";
44

55
const { reconcileGoogleCalendarConnectionsMock } = vi.hoisted(() => ({
6-
reconcileGoogleCalendarConnectionsMock: vi.fn()
6+
reconcileGoogleCalendarConnectionsMock: vi.fn(),
77
}));
88

99
vi.mock("@/lib/server/google-calendar", () => ({
10-
reconcileGoogleCalendarConnections: reconcileGoogleCalendarConnectionsMock
10+
reconcileGoogleCalendarConnections: reconcileGoogleCalendarConnectionsMock,
1111
}));
1212

1313
describe("reconcile Google Calendar cron route", () => {
@@ -19,34 +19,36 @@ describe("reconcile Google Calendar cron route", () => {
1919
reconciledConnections: 0,
2020
syncedTasks: 0,
2121
outOfSyncTasks: 0,
22-
failedConnections: 0
22+
failedConnections: 0,
2323
});
2424
});
2525

2626
it("rejects unauthenticated cron requests", async () => {
2727
process.env.CRON_SECRET = "cron-secret";
2828

29-
const response = await POST(new Request("http://localhost/api/cron/reconcile-google-calendar"));
29+
const response = await POST(
30+
new Request("http://localhost/api/cron/reconcile-google-calendar"),
31+
);
3032

3133
expect(response.status).toBe(401);
3234
await expect(response.json()).resolves.toMatchObject({
3335
accepted: false,
34-
error: "invalid_cron_secret"
36+
error: "invalid_cron_secret",
3537
});
3638
expect(reconcileGoogleCalendarConnectionsMock).not.toHaveBeenCalled();
3739
});
3840

3941
it("fails closed when the cron secret is not configured", async () => {
4042
const response = await POST(
4143
new Request("http://localhost/api/cron/reconcile-google-calendar", {
42-
method: "POST"
43-
})
44+
method: "POST",
45+
}),
4446
);
4547

4648
expect(response.status).toBe(503);
4749
await expect(response.json()).resolves.toMatchObject({
4850
accepted: false,
49-
error: "cron_secret_not_configured"
51+
error: "cron_secret_not_configured",
5052
});
5153
});
5254

@@ -57,15 +59,15 @@ describe("reconcile Google Calendar cron route", () => {
5759
new Request("http://localhost/api/cron/reconcile-google-calendar", {
5860
method: "POST",
5961
headers: {
60-
authorization: "Bearer cron-secret"
61-
}
62-
})
62+
authorization: "Bearer cron-secret",
63+
},
64+
}),
6365
);
6466

6567
expect(response.status).toBe(200);
6668
await expect(response.json()).resolves.toMatchObject({
6769
accepted: true,
68-
reconciledConnections: 0
70+
reconciledConnections: 0,
6971
});
7072
expect(reconcileGoogleCalendarConnectionsMock).toHaveBeenCalledTimes(1);
7173
});

0 commit comments

Comments
 (0)