4.0 KiB
GitHub Copilot Instructions for HihaArvio
Authoritative Reference
CLAUDE.md is the single source of truth for this repository.
All guidelines, architecture decisions, implementation requirements, and coding standards defined in CLAUDE.md at the repository root MUST be followed without exception. CLAUDE.md takes absolute precedence over any other instruction, convention, or assumption.
Before suggesting, generating, or reviewing any code for this repository, read and internalize CLAUDE.md in its entirety.
Non-Negotiable Rules
The following rules are derived from CLAUDE.md and additional Copilot-specific code quality guidelines. All MUST be enforced in every interaction:
Language & Framework
- Target framework: .NET 9, using C# 13
- UI framework: .NET MAUI (multi-platform)
- Nullable reference types MUST be enabled across all projects
- All compiler warnings MUST be treated as errors (
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>) - Language version MUST be set to
13in all project files
Architecture (MVVM – Strict Separation)
- Models: Plain data objects only — no business logic
- ViewModels: All presentation logic — 100% testable without UI dependencies
- Views: Thin layer — data binding only, minimal code-behind
- Services: All business logic and infrastructure concerns
Dependency Injection
- All services MUST be injected via constructor — never use the service locator pattern or
newinside ViewModels - Register all services in
MauiProgram.cs - Platform-specific implementations use
#if IOS,#elif WINDOWS || MACCATALYST
Testing Requirements
- Test coverage MUST be ≥ 95 % (measured by Coverlet; threshold enforcement is a future CI/CD enhancement)
- Testing stack: xUnit + NSubstitute + FluentAssertions
- All tests MUST use deterministic, seeded randomness — never
Random.Shared - All external dependencies (sensors, database, file system) MUST be mocked
- Use test-data builders for complex objects
Security
- Estimate selection MUST use
System.Security.Cryptography.RandomNumberGenerator— neverSystem.Random - No external data transmission — all data is stored locally only
- Request the minimum required platform permissions
Commit & Code Quality
- Use semantic / conventional commit messages (e.g.
feat:,fix:,chore:,docs:,test:,refactor:) - Make atomic commits — one logical change per commit
- Run all linting and build tools; automatically fix all reported issues before committing
- Follow the
.editorconfigrules present in the repository root
Technology Stack (Current Versions)
| Component | Version |
|---|---|
| .NET SDK | 9.0.x |
| C# Language | 13 |
| Microsoft.Maui.Controls | 9.0.120 |
| Microsoft.Maui.Controls.Compatibility | 9.0.120 |
| CommunityToolkit.Mvvm | 8.4.0 |
| SQLite (sqlite-net-pcl) | 1.9.172 |
| SQLitePCLRaw.bundle_green | 2.1.11 |
| Microsoft.Extensions.Logging.Debug | 9.0.13 |
| xUnit | 2.9.3 |
| xunit.runner.visualstudio | 2.8.2 |
| Microsoft.NET.Test.Sdk | 18.3.0 |
| NSubstitute | 5.3.0 |
| FluentAssertions | 8.8.0 |
| coverlet.collector | 8.0.0 |
Key Files
| File | Purpose |
|---|---|
CLAUDE.md |
Authoritative project guide — always read first |
spec.md |
Formal RFC 2119 requirements (MUST / SHALL / REQUIRED) |
docs/plans/2025-11-18-hiha-arvio-design.md |
Validated architecture decisions |
src/HihaArvio/HihaArvio.csproj |
Main MAUI project |
tests/HihaArvio.Tests/HihaArvio.Tests.csproj |
Unit & integration tests |
.editorconfig |
Code style enforcement |
Easter Egg — Never Expose
The hidden humorous mode triggered by shaking for > 15 seconds MUST NOT have any visible UI indication and MUST NOT be mentioned in any UI element, setting, or documentation visible to users.
When in Doubt
If there is any ambiguity, consult CLAUDE.md and spec.md — in that order.
Do not invent architecture, add dependencies, or change platform targets without explicit justification grounded in those documents.