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
190 changes: 190 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 13 additions & 0 deletions packages/web/astro.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { createRequire } from 'node:module';
import { dirname, join } from 'node:path';
import { defineConfig } from 'astro/config';
import starlight from '@astrojs/starlight';
import starlightBlog from 'starlight-blog';
import starlightLinksValidator from 'starlight-links-validator';

// Resolve zod to Astro's bundled version to avoid conflicts with root zod@4
Expand All @@ -20,6 +21,18 @@ export default defineConfig({
integrations: [
starlight({
plugins: [
starlightBlog({
title: 'Blog',
postCount: 5,
recentPostCount: 5,
authors: {
anders: {
name: 'Anders Hassis',
title: 'Creator of Erode',
url: 'https://github.com/parse',
},
},
}),
starlightLinksValidator({
exclude: ['/architecture/**'],
}),
Expand Down
1 change: 1 addition & 0 deletions packages/web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
"dependencies": {
"@astrojs/starlight": "^0.37.7",
"astro": "^5.18.0",
"starlight-blog": "^0.25.3",
"starlight-links-validator": "^0.19.2"
},
"devDependencies": {
Expand Down
4 changes: 3 additions & 1 deletion packages/web/src/components/nav-bar.astro
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
<div class="container nav-inner">
<a href="/" class="wordmark">erode</a>
<a href="/docs/getting-started/" class="nav-link">Docs</a>
<a href="/announcements/" class="nav-link">Announcements</a>
<a href="https://github.com/erode-app/erode" class="github-link" aria-label="GitHub repository">
<svg width="20" height="20" viewBox="0 0 16 16" fill="currentColor">
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38
Expand All @@ -28,8 +29,8 @@

.nav-inner {
display: flex;
justify-content: space-between;
align-items: center;
gap: var(--space-md);
padding-block: var(--space-md);
}

Expand All @@ -53,6 +54,7 @@
}

.github-link {
margin-inline-start: auto;
color: var(--text-tertiary);
transition: color 0.2s;
display: flex;
Expand Down
9 changes: 8 additions & 1 deletion packages/web/src/content.config.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
import { defineCollection } from 'astro:content';
import { docsLoader } from '@astrojs/starlight/loaders';
import { docsSchema } from '@astrojs/starlight/schema';
import { blogSchema } from 'starlight-blog/schema';

export const collections = {
docs: defineCollection({ schema: docsSchema() }),
docs: defineCollection({
loader: docsLoader(),
schema: docsSchema({
extend: (context) => blogSchema(context),
}),
}),
};
42 changes: 42 additions & 0 deletions packages/web/src/content/docs/announcements/erode-0.6.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
title: Catch drift before the PR
date: 2026-03-06
authors:
- anders
excerpt: >
0.6.0 adds local drift detection so you can catch architectural violations
before pushing a PR, not after someone has already reviewed the code.
---

Until now, Erode only ran in CI. You found out about drift after pushing a PR
and after someone already reviewed the code.

0.6.0 adds local detection. Three things shipped:

## `erode check`

A new command that runs the same AI pipeline as `analyze` but operates on local git diffs instead of fetching PR data from a platform API.

```bash
erode check ./model # unstaged changes
erode check ./model --staged # staged changes
erode check ./model --branch main # branch diff
```

No platform tokens needed. No PR required. Just a local git repo and an AI provider key. Wire it into git hooks with `--fail-on-violations` for automatic checking. See [CLI Commands](/docs/reference/cli-commands/) for all flags and options.

## Claude Code skill

A [custom skill](/docs/integrations/claude-code/) that runs `erode check` during Claude Code sessions. When Claude Code writes code that introduces a new import, API call, or service connection, the skill flags undeclared dependencies and surfaces them in the conversation.

The skill triggers on new integrations and before commits. It skips changes that cannot introduce dependencies (docs, tests, config). A violation is not an error. Claude Code shows what it found so you can decide: fix the code or update the model.

## npm publishing

Erode is now published as [`@erode-app/cli`](https://www.npmjs.com/package/@erode-app/cli) on npm. Run it with `npx @erode-app/cli check ./model`, no global install needed. This is what makes the Claude Code skill work. See [Getting Started](/docs/getting-started/) for setup.

## What's next

- [CLI Commands](/docs/reference/cli-commands/): all `erode check` flags and options
- [Claude Code integration](/docs/integrations/claude-code/): setup guide for the skill
- [Getting Started](/docs/getting-started/): CI setup for `erode analyze`
Loading