From 1f09f0a3d2f9e6ceb249ee4a0ecad81482c7634f Mon Sep 17 00:00:00 2001 From: James Wampler Date: Sun, 5 Jul 2026 13:11:39 -0700 Subject: [PATCH] Compress CLAUDE.md into caveman-speak to cut context tokens Original kept as CLAUDE.original.md for human reference. --- CLAUDE.md | 33 +++++++++++++++------------- CLAUDE.original.md | 55 +++++++++++++++++++++++++++------------------- 2 files changed, 50 insertions(+), 38 deletions(-) mode change 100755 => 100644 CLAUDE.original.md diff --git a/CLAUDE.md b/CLAUDE.md index 1cfdd58..4b6c49d 100755 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,10 +1,10 @@ # CLAUDE.md -Guidance for Claude Code (claude.ai/code) when working in this repo. +Guidance for Claude Code (claude.ai/code) in this repo. ## Project -MicCheck: open source. asp.net, c#, typescript, VueJS. Manages feature flags, projects, environments. +MicCheck: open source. asp.net, c#, typescript, VueJS. Manage feature flags, projects, environments. ## Planned Structure @@ -18,27 +18,30 @@ MicCheck: open source. asp.net, c#, typescript, VueJS. Manages feature flags, pr - Use latest LTS .NET + latest supported nuget packages for that version - Set `langVersion` to latest in all csproj files; enable nullable - Organize code by feature/area, not type (e.g. `features` namespace) -- New features need unit tests covering as much logic as possible (both nunit and jest) -- Any modified file: evaluate for missing test coverage and that all tests pass +- New features need unit tests covering logic as much as possible (both nunit and jest) +- Modified file: check missing test coverage, all tests pass # Coding -- Descriptive names for all classes/methods. No generic names: Provider, Manager, Helper +- Descriptive names all classes/methods. No generic: Provider, Manager, Helper - Match formatting/style from `.editorconfig` -- Wrap lines at 220 characters, leave single line if fewer -- Place interfaces that are implemented by a single class at the bottom of the class file. An interface with multiple implementations of an interface should be in a seperate file. -- Do not use tuples for return types. Prefer records or classes for multiple values -- Do not use `sealed` +- Wrap lines at 220 chars, single line if fewer +- Interfaces implemented by single class → bottom of class file. Interface w/ multiple implementations → separate file. +- No tuples for return types. Prefer records or classes for multiple values +- No `sealed` - Use `record` for data objects, `class` for objects with behavior. Avoid mutable state where possible. ## Testing +- Min 70% code coverage, target 90%. Unit tests focus end-user scenarios first. +- Don't write tests just for coverage. Call out missing coverage rather than cover stuff not valuable to end user. +- Code not cleanly unit-testable → mark `[ExcludeFromCodeCoverage]` or exclude namespace from coverage. - BDD-style unit tests, end-to-end as possible, no external resources (DB, filesystem). e.g. `WhenAUserDoesSomething_ThenAThingAppears` -- Mock external deps with Moq -- Mock EntityFramework DBContexts with an extracted interface and Moq. Do not rely on InMemory provider. -- New features need unit tests covering as much logic as possible -- Any modified file: evaluate for missing test coverage- +- Mock external deps w/ Moq +- Mock EntityFramework DBContexts via extracted interface + Moq. Don't rely on InMemory provider. +- New features need unit tests covering logic as much as possible +- Modified file: check missing test coverage - No "Mock" in mocked object names - No Arrange/Act/Assert comments -- All tests should pass before commit +- All tests pass before commit ## Claude - Plans = `.md` files in `docs/plans/`. Admin → `docs/plans/admin/`, API → `docs/plans/api/` @@ -47,4 +50,4 @@ MicCheck: open source. asp.net, c#, typescript, VueJS. Manages feature flags, pr - Plan implemented from `docs/plans/.md` → save summary as `docs/plans/_output.md` ## Stack -`.gitignore` configured for .NET/Visual Studio (C#, NuGet, MSBuild). Update if stack changes. +`.gitignore` set for .NET/Visual Studio (C#, NuGet, MSBuild). Update if stack change. \ No newline at end of file diff --git a/CLAUDE.original.md b/CLAUDE.original.md old mode 100755 new mode 100644 index 46ccce2..d3180fb --- a/CLAUDE.original.md +++ b/CLAUDE.original.md @@ -1,44 +1,53 @@ # CLAUDE.md -This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. +Guidance for Claude Code (claude.ai/code) when working in this repo. ## Project -MicCheck is an open source project written in asp.net, c#, typescript and VueJS that manages feature flags, their projects, and their environments. +MicCheck: open source. asp.net, c#, typescript, VueJS. Manages feature flags, projects, environments. ## Planned Structure -- `src/admin/` — administrative components in VueJS -- `src/api/` - api and restful endpoints in .NET +- `src/admin/` — VueJS admin components +- `src/api/` - .NET API + REST endpoints - `tests/` — test suite - `docs/` — documentation ## Best Practices -- Ensure all projects are using the latest LTS version of .NET as well as the latest supported nuget packages for that .NET version -- Ensure that langVersion is set to latest in all csproj files and nullable is enabled -- Code in all projects should be organized by feature or area instead of type. (e.g. a features namespace with all feature related code in it or in child namespaces of it) -- All new feature requests should include corresponding unit tests that cover as much of the logic as possible. -- Any file modified should be evaluated for potential test cases and missing coverage areas. +- Use latest LTS .NET + latest supported nuget packages for that version +- Set `langVersion` to latest in all csproj files; enable nullable +- Organize code by feature/area, not type (e.g. `features` namespace) +- New features need unit tests covering as much logic as possible (both nunit and jest) +- Any modified file: evaluate for missing test coverage and that all tests pass # Coding -- Use descriptive names for all classes and method created. Avoid generic names like Provider, Manager, Helper -- Coding should match formating and style rules in the .editorconfig file +- Descriptive names for all classes/methods. No generic names: Provider, Manager, Helper +- Match formatting/style from `.editorconfig` +- Wrap lines at 220 characters, leave single line if fewer +- Place interfaces that are implemented by a single class at the bottom of the class file. An interface with multiple implementations of an interface should be in a seperate file. +- Do not use tuples for return types. Prefer records or classes for multiple values +- Do not use `sealed` +- Use `record` for data objects, `class` for objects with behavior. Avoid mutable state where possible. ## Testing -- Write unit tests in a BDD style, testing as much code end-to-end as possible without without touching external resources like databases or file systems (e.g. WhenAUserDoesSomething_ThenAThingAppears) -- Mock any external dependencies using Moq. -- Do not name any mocked objects with the word Mock in them -- Do not include any Arrange / Act / Assert comments in the code - +- Require a minimum of 70% code coverage with a target of 90%. Unit tests should focus on end-user scenarios first. +- Do not write tests for just to increase code coverage. Call out lack of test coverage rather than covering something that isn't valuable to the end user. +- Code that can not be cleanly unit tested should be marked with [ExcludeFromCodeCoverage] or have it's namespace excluded from code coverage. +- BDD-style unit tests, end-to-end as possible, no external resources (DB, filesystem). e.g. `WhenAUserDoesSomething_ThenAThingAppears` +- Mock external deps with Moq +- Mock EntityFramework DBContexts with an extracted interface and Moq. Do not rely on InMemory provider. +- New features need unit tests covering as much logic as possible +- Any modified file: evaluate for missing test coverage- +- No "Mock" in mocked object names +- No Arrange/Act/Assert comments +- All tests should pass before commit ## Claude -- Create all plans as .md file located in the `docs/` folder. Admin in `docs/admin/` and API in `docs/api/` -- Divide up large plans into discrete chucks of functionality so each can be built and committed independently. -- When generating a plan from a .md file in /docs/ save the plan in the same folder with the same filename minus the .md extention, but with a _plan.md at the end -- When implementing a plan from a .md file in /docs/ save the summary of the plan in the same folder with the same filename minus the .md extention, but with a _output.md at the end - +- Plans = `.md` files in `docs/plans/`. Admin → `docs/plans/admin/`, API → `docs/plans/api/` +- Split large plans into discrete chunks — each buildable + committable independently +- Plan generated from `docs/plans/.md` → save as `docs/plans/_plan.md` +- Plan implemented from `docs/plans/.md` → save summary as `docs/plans/_output.md` ## Stack - -The `.gitignore` is configured for a .NET/Visual Studio project (C#, NuGet, MSBuild). If this changes, update this file accordingly. +`.gitignore` configured for .NET/Visual Studio (C#, NuGet, MSBuild). Update if stack changes.