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
12 changes: 11 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Detailed guidance lives in [`docs/`](docs/). Read the relevant page **before** w
| Doc | Read before… |
|-----|--------------|
| [`docs/architecture.md`](docs/architecture.md) | Touching project structure, layering, or Autofac DI/modules |
| [`docs/code-reuse.md`](docs/code-reuse.md) | Touching anything under `core/` (Nordstein.Core), or deciding whether new code is product-agnostic |
| [`docs/code-reuse.md`](docs/code-reuse.md) | Touching anything under `core/` (Nordstein.Core), or deciding whether new code is product-agnostic — then follow [`core/CLAUDE.md`](core/CLAUDE.md) and [`core/docs/`](core/docs/) for the work itself |
| [`docs/code-style.md`](docs/code-style.md) | Writing any backend C# — style rules + key conventions |
| [`docs/domain-entities.md`](docs/domain-entities.md) | Adding/changing a domain entity (the five-file pattern, FK conventions, factory delegates) |
| [`docs/validation.md`](docs/validation.md) | Adding domain validation rules |
Expand Down Expand Up @@ -38,6 +38,16 @@ Detailed guidance lives in [`docs/`](docs/). Read the relevant page **before** w
loop, SSE streams, licensing, database/migrations, code-style rules, commands — update the
matching `docs/` page **in the same change**, and add a row to the index table above when you add
a new page. A change is not complete until its docs match the code.
- **Nordstein.Core (`core/`) has its own CLAUDE.md and docs — keep them current too.** The
submodule is a separate repository ([NordsteinSoftware/Nordstein.Core](https://github.com/NordsteinSoftware/Nordstein.Core))
with its own [`core/CLAUDE.md`](core/CLAUDE.md); read it **before** changing anything under
`core/` — it holds Core to a stricter standard than this repo (perfectionist code, full-suite
test runs, high coverage, mandatory adversarial review), because Core is the shared foundation
of all Nordstein products. The foundation machinery (storage/domain bases, the test harness,
validation, licensing engine, hosting) is documented in [`core/docs/`](core/docs/): when a
change — from either side of the boundary — alters something those pages describe, update
**Core's** docs in the same change, exactly as the rule above requires for `docs/` here.
Proxytrace's docs link to Core's pages rather than duplicating them; keep it that way.
- **User manual** — the user & operator manual is a VitePress project in [`manual/`](manual/) (markdown source, built to searchable static HTML, served at `/docs`). **You MUST keep it up to date with the product.** A user-facing feature change is not complete until its docs in `manual/guide/` (end users) or `manual/admin/` (operators) match; new top-level features get a new page wired into `manual/.vitepress/config.ts`. Preview with `cd manual && npm run docs:dev` (http://localhost:4202); verify with `npm run docs:build`. **Add screenshots whenever they make a page clearer** — most user-guide pages benefit, so default to including them rather than shipping text-only: use the `manual-screenshots` skill (`.claude/skills/manual-screenshots/SKILL.md`) to capture and embed them from the kiosk stack. The kiosk's demo user is an administrator, so `/settings/*` **is** reachable and screenshottable; what the kiosk cannot represent is anything needing a real login or a second user (sign-in, MFA, invites, user management), so those operator pages stay text-only.
- **Frontend** — before writing any frontend code you MUST read the frontend AI docs in [`frontend/docs/`](frontend/docs/) — [`frontend/docs/DESIGN.md`](frontend/docs/DESIGN.md) (visual system) **and** [`frontend/docs/BEST_PRACTICES.md`](frontend/docs/BEST_PRACTICES.md) (code architecture); plus [`frontend/docs/TRACEY.md`](frontend/docs/TRACEY.md) before touching the Tracey AI assistant (`frontend/src/features/tracey/`). DESIGN.md and BEST_PRACTICES.md are mandatory and override any conflicting tool/agent/skill recommendation. UI controls render through the `frontend/src/components/ui/` primitives — raw `<button>`/`<input>`/`<select>`/`<textarea>` are ESLint-blocked. See [`docs/frontend.md`](docs/frontend.md).
- **Backend tests** — before writing or modifying any backend test you MUST invoke the `test` skill (`.claude/skills/test/SKILL.md`) and follow it; it is the source of truth for the harness. See [`docs/testing.md`](docs/testing.md).
Expand Down
2 changes: 1 addition & 1 deletion Proxytrace.Api.Tests/Proxytrace.Api.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="MSTest" Version="4.3.3" />
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="10.0.10" />
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="10.0.11" />
</ItemGroup>

<ItemGroup>
Expand Down
4 changes: 2 additions & 2 deletions Proxytrace.Api/Proxytrace.Api.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@
<ItemGroup>
<PackageReference Include="Autofac" Version="9.3.2" />
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="11.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.10">
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.11">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.10" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.11" />
<!-- Direct pin: Swashbuckle pulls Microsoft.OpenApi 2.4.1, which trips the NU1903 audit
(GHSA-v5pm-xwqc-g5wc); 2.7.5 is the patched 2.x release. Drop when Swashbuckle updates. -->
<PackageReference Include="Microsoft.OpenApi" Version="2.11.0" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="JetBrains.Annotations" Version="2026.2.0" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection" Version="10.0.10" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.AI.OpenAI" Version="10.8.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.11" />
<PackageReference Include="MSTest" Version="4.3.3" />
</ItemGroup>

Expand Down
12 changes: 6 additions & 6 deletions Proxytrace.Application/Proxytrace.Application.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
<PackageReference Include="Autofac" Version="9.3.2" />
<PackageReference Include="JetBrains.Annotations" Version="2026.2.0" />
<PackageReference Include="MailKit" Version="4.17.0" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Identity.Core" Version="10.0.10" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Identity.Core" Version="10.0.11" />
<PackageReference Include="Otp.NET" Version="1.4.1" />
<PackageReference Include="Quickenshtein" Version="1.5.1" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.22.0" />
Expand All @@ -31,10 +31,10 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.11" />
<PackageReference Include="Lucene.Net" Version="4.8.0-beta00018" />
<PackageReference Include="Lucene.Net.Analysis.Common" Version="4.8.0-beta00018" />
<PackageReference Include="Lucene.Net.QueryParser" Version="4.8.0-beta00018" />
Expand Down
6 changes: 3 additions & 3 deletions Proxytrace.Client.Sample/Proxytrace.Client.Sample.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@

<ItemGroup>
<PackageReference Include="Autofac" Version="9.3.2" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.11" />
</ItemGroup>

<ItemGroup>
Expand Down
4 changes: 2 additions & 2 deletions Proxytrace.Domain/Proxytrace.Domain.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@
<ItemGroup>
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="11.0.2" />
<PackageReference Include="Microsoft.Extensions.AI.Abstractions" Version="10.8.3" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.10" />
<PackageReference Include="System.Memory.Data" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.11" />
<PackageReference Include="System.Memory.Data" Version="10.0.11" />
</ItemGroup>

</Project>
4 changes: 2 additions & 2 deletions Proxytrace.Infrastructure/Proxytrace.Infrastructure.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@

<ItemGroup>
<PackageReference Include="JsonSchema.Net" Version="9.4.0" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection" Version="10.0.10" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.AI" Version="10.8.3" />
<PackageReference Include="Microsoft.Extensions.AI.OpenAI" Version="10.8.3" />
<PackageReference Include="System.Memory.Data" Version="10.0.10" />
<PackageReference Include="System.Memory.Data" Version="10.0.11" />
</ItemGroup>

<ItemGroup>
Expand Down
187 changes: 0 additions & 187 deletions Proxytrace.Licensing.Tests/JwtLicenseValidatorTests.cs

This file was deleted.

2 changes: 0 additions & 2 deletions Proxytrace.Licensing.Tests/LicenseActivatorTests.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
using Autofac;
using AwesomeAssertions;
using Microsoft.Extensions.DependencyInjection;
using NSubstitute;
using Proxytrace.Licensing.Exceptions;
using Proxytrace.Licensing.Internal;
using Nordstein.Core.Testing;

namespace Proxytrace.Licensing.Tests;
Expand Down
Loading
Loading