# AyaNova v8 — instructions for Claude Code Loaded in every session started in this repo, and imported by the CLAUDE.md files in `raven-client` and `raven-test-integration`. Keep it short: detail lives in `devdocs/`. Statements marked **[unverified]** came from older notes and have not been checked against the code. Check one before relying on it, then fix the statement or remove the marker. ## What this is AyaNova v8: commercial service management software (ayanova.com), sold since 1998, built and maintained by one developer, John. It is a production product. Hosted subscription customers and self-hosted customers on Windows and Linux run this code, and deployed clients call its API routes. ## Repositories Separate Git repos under `C:\data\code\`, hosted on a self-hosted Gitea. The build scripts hardcode these paths: do not move or rename the folders. | Folder | What | Stack | |---|---|---| | `raven` | **This repo, the master.** Back-end server, customer manual, build and installer scripts | ASP.NET Core 8, C#, EF Core 8, Npgsql, PostgreSQL | | `raven-client` | Front end, in `ayanova/` | Vue 2.6, Vuetify 2.6, Vuex, Vue Router, plain JavaScript, Node 12.22.9 | | `raven-test-integration` | API integration tests against a running server | xUnit, .NET 8 | | `raven-launcher` | Windows standalone launcher | .NET 8, self-contained, trimmed | | `ravenqbi` | QuickBooks Desktop integration | .NET Framework 4.8 WinForms, x86, Visual Studio only | | `raven-test` | Cypress E2E suite in `e2e/` (Cypress 9.7.0, targets remote devtest servers); also JMeter (`load/`) and Locust (`loadlocust/`) load tests | Node, Cypress | | `sockeye` | Internal licensing server, a near-copy of this codebase, **already ported to .NET 10** (tag `8.1.0`, baseline tag `net6-baseline`) | same as `raven` | ## Layout of this repo - `server/AyaNova/` — the application, `AyaNova.csproj`. Publish this csproj directly, never `raven.sln`. - `docs/` — the **customer** help manual (MkDocs). Not developer documentation. Do not edit unless asked. - `devdocs/modernization/` and `devdocs/build/` — current developer docs. Anything else in `devdocs/` is old historical notes: ignore unless asked. - `dist/` — packaging assets, Inno Setup scripts, build outputs. - `build-release.bat` — master release build. ## Current work: .NET 10 port, branch `net10-port` Move the server from .NET 8 to .NET 10 and every back-end package to its current release. Front end: minimal or no change. **Before any port work, read `devdocs/modernization/NET10-PORT.md`.** It holds the plan, the checklist and the decisions still open. Update its checklist and log in the same commit as the change they record. Sockeye went through the same port first. When a port question comes up, look at how Sockeye solved it: `git -C ..\sockeye log --oneline net6-baseline..8.1.0`. The rest of the modernization plan: `devdocs/modernization/ROADMAP.md`. ## Working rules - No change to production code without John's explicit approval. Propose a plan first for anything beyond a one-line fix. - One concern per commit, so a regression can be found with `git log` and undone with `git revert`. The version bump is always the first commit on a release branch. - Do not mix refactoring, bug fixes and features. If you spot something worth refactoring during the port, add it to "Deferred" in `NET10-PORT.md` instead of doing it. - Dependency changes: back-end packages only, and only on `net10-port`. No front-end dependency changes (Node is pinned at 12.22.9 because of `fibers`). - Do not add `[ApiController]` to controllers that lack it. It changes model binding and error responses on routes deployed clients call. - No new features. - Git: keep it simple and explicit. Do not push, tag, merge or rewrite history unless asked. Tags are annotated and pushed by name. - Nothing is accepted blindly: show the diff and say why. - Secrets and customer data never go in a repo. Fixtures that contain customer data live outside the repo and are found through an environment variable. ## Environment - Windows 11, PowerShell, VS Code. Visual Studio only for `ravenqbi`. - .NET SDK 10.0.402 (installed with winget) and 10.0.103 (from Visual Studio 2026); no `global.json`, so builds use the newest. No 8 SDK (the 10 SDK still builds `net8.0`). Runtimes 8.0.24, 10.0.3 and 10.0.13 (also 6.0.36). - Local server: `http://localhost:7575`, API base `/api/v8/`. - Compile-time constant `SUBSCRIPTION_BUILD` (`-p:SUBSCRIPTION_BUILD=true`) distinguishes the hosted build; use `#if SUBSCRIPTION_BUILD`. ## Commands ```powershell dotnet build server\AyaNova\AyaNova.csproj dotnet run --project server\AyaNova # integration tests: the server must be running first cd ..\raven-test-integration; dotnet test raven-integration.csproj # hosted (subscription) Linux build, as build-release.bat does it dotnet publish server\AyaNova\AyaNova.csproj -c Release -r linux-x64 --no-self-contained -p:SUBSCRIPTION_BUILD=true # full release: docs, client, all five packages, installers .\build-release.bat ``` ## Reference (read when relevant, not every session) | File | Covers | |---|---| | `devdocs/modernization/NET10-PORT.md` | The current port: plan, checklist, open questions, log | | `devdocs/modernization/ROADMAP.md` | Modernization steps and their status | | `devdocs/modernization/PROJECT-OVERVIEW.md` | Products, deployment targets, business context | | `devdocs/modernization/CODEBASE-REFERENCE.md` | Stack, structure, configuration, API conventions | | `devdocs/modernization/TESTING.md` | Test suites and their state | | `devdocs/build/BUILD.md` | Release build, packaging, version numbers | | `devdocs/build/DEV-VM-SETUP.md` | Deprecated build VM plan; its tool list still serves for setting up a build machine. Releases are built on the workstation |