6.1 KiB
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 10, C#, EF Core 10, 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 10 |
raven-launcher |
Windows standalone launcher | .NET 10, 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, neverraven.sln.docs/— the customer help manual (MkDocs). Not developer documentation. Do not edit unless asked.devdocs/modernization/anddevdocs/build/— current developer docs. Anything else indevdocs/is old historical notes: ignore unless asked.dist/— packaging assets, Inno Setup scripts, build outputs.build-release.bat— master release build.
Current work: release 8.3.0, on main
The .NET 10 port (case 4690) is merged into main in raven, raven-client,
raven-launcher and raven-test-integration (2026-10-23), not yet tagged or released.
Before release: the "next release" cases, each with its own case number and its own
commits on main (case NNNN - …); then the final build, the final gate, Cypress on the
devtestn10 droplet, the 8.3.0 tag and the rollout.
Read devdocs/modernization/NET10-PORT.md first. It holds the release checklist
(section 5), the Deferred list (including the cases chosen for this release) and the log.
Update its checklist and log in the same commit as the change they record.
Sockeye went through the same port first: 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 logand undone withgit 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, add it to "Deferred" in
NET10-PORT.mdinstead of doing it. - Dependency changes: back-end packages only, and only with John's approval (the port that updated them all is done). 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 buildsnet8.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
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/SECURITY-REVIEW.md |
Whole-codebase security review in passes: scope, threat model, route map, findings, pass log. Review only, fixes become cases |
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 |