diff --git a/.gitignore b/.gitignore index dfffd13..214de72 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,9 @@ bin packages obj *.userprefs +*.log .idea VendingMachine.sln.DotSettings.user donstro/remote.secrets - +mise.toml +.local diff --git a/.pi/skills b/.pi/skills deleted file mode 120000 index 07d2c86..0000000 --- a/.pi/skills +++ /dev/null @@ -1 +0,0 @@ -../.github/skills/ \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md new file mode 120000 index 0000000..681311e --- /dev/null +++ b/AGENTS.md @@ -0,0 +1 @@ +CLAUDE.md \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..183c361 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,67 @@ +# Agentic Coding Standards + +This repository follows strict agentic coding practices to ensure high-quality, maintainable C# implementations. + +## Zero Defects Policy + +All code changes must maintain a **zero defects policy**: +- Every feature or bug fix must be validated by passing tests before merge +- Code reviews focus on correctness, clarity, and adherence to style guidelines +- No known issues or technical debt should be introduced +- When defects are discovered, they are fixed immediately before proceeding with new work + +## Test-Driven Development (TDD) + +We follow the **Red-Green-Refactor** cycle strictly. You must invoke `dotnet test` in each phase: + +1. **Red**: Write a failing test that describes the desired behavior +2. **Green**: Write the minimum code necessary to make the test pass +3. **Refactor**: Improve the code while keeping tests passing + +All development must start with a test. The repository includes one intentional failing test as a starting point for TDD workflow. + +## Test Execution + +Run the test suite using: + +```bash +dotnet test +``` + +This command: +- Restores NuGet packages if needed +- Builds the solution (Vending library + test project) +- Executes all NUnit test cases +- Reports results with clear pass/fail status + +The test suite must pass entirely before any code is merged. + +## Code Quality Standards + +### Testing Framework +- **Test Framework**: NUnit +- **Coverage**: All public API members must have test coverage +- **Organization**: Tests are located in `Vending.Tests/TestVendingMachine.cs` + +### Code Style +- **Language**: C# (latest available) +- **Target Framework**: .NET 8.0 +- **Style Tool**: `dotnet format` (configured via `.editorconfig` if present) +- **Enforcement**: All code should follow standard C# conventions (PascalCase for public members, camelCase for locals/parameters, etc.) + +## Agent Responsibilities + +When assisting with code changes, agents must: +1. Respect the zero defects policy — all code must be tested and passing +2. Follow the Red-Green-Refactor workflow — tests first, implementation second +3. Enforce code style using .NET formatting standards +4. Ensure all tests pass before considering work complete +5. Maintain clarity and maintainability in all refactoring activities + +## Getting Started + +1. Read the failing test in `Vending.Tests/TestVendingMachine.cs` +2. Implement the vending machine code in `Vending/` (e.g., `Vending/VendingMachine.cs`) +3. Run `dotnet test` frequently to verify progress +4. Refactor once tests pass to improve code quality +5. Repeat for each new requirement \ No newline at end of file diff --git a/Vending.Tests/TestVendingMachine.cs b/Vending.Tests/TestVendingMachine.cs index bf7156a..e7a9259 100644 --- a/Vending.Tests/TestVendingMachine.cs +++ b/Vending.Tests/TestVendingMachine.cs @@ -6,6 +6,6 @@ public class TestVendingMachine [Test] public void ItFails() { - Assert.That(0, Is.EqualTo(1)); + Assert.That(1, Is.EqualTo(0)); } } \ No newline at end of file diff --git a/stories/01-buy-can.md b/stories/01-buy-can.md new file mode 100644 index 0000000..99e4e49 --- /dev/null +++ b/stories/01-buy-can.md @@ -0,0 +1,10 @@ +# Buy Can + +## User Story + +As a thirsty bastard I want to buy a can of soda so that I can fix my thirst + +## Acceptance Criteria + +- Delivers can of choice +- Costs money diff --git a/stories/02-change.md b/stories/02-change.md new file mode 100644 index 0000000..1dda8f8 --- /dev/null +++ b/stories/02-change.md @@ -0,0 +1,9 @@ +# Change + +## User Story + +As a Scrooge McDuck I want my change to be able to keep swimming + +## Acceptance Criteria + +- Returns change on request diff --git a/stories/03-stock.md b/stories/03-stock.md new file mode 100644 index 0000000..fe7437b --- /dev/null +++ b/stories/03-stock.md @@ -0,0 +1,10 @@ +# Stock + +## User Story + +As a vending machine owner, I want to refill my machine with cans, so that I can keep on selling drinks + +## Acceptance Criteria + +- Stock is limited +- When stock runs out, money is returned