From 691a09003bf8ce8db69e64723566845ac042c2a3 Mon Sep 17 00:00:00 2001 From: Szymon Janikowski Date: Tue, 26 May 2026 13:22:54 +0200 Subject: [PATCH 1/2] feat: variant task-scoping + evaluator max_turns 60 + starlette CVE fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Variant task-scoping: a variant.toml may declare `tasks = [...]` to restrict that variant to specific tasks (e.g. a repo-specific skill that should never run against the wrong codebase). With --all-variants, a scoped variant runs only against its declared tasks; the scope wins even over an explicit --tasks filter. (runner: load_variant_task_scope / scope_tasks_for_variant; cli wiring; scaffold template gains a commented example; tests in test_runner.py.) - Raise default evaluator max_turns 30 → 60 (error_max_turns on DDD-heavy workspaces). - Bump starlette 1.0.0 → 1.1.0 (PYSEC-2026-161, transitive via harbor/fastapi/mcp). Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/skills/nasde-dev/SKILL.md | 1 + CHANGELOG.md | 19 ++++++++ README.md | 22 +++++++++ src/nasde_toolkit/cli.py | 67 ++++++++++++++++++-------- src/nasde_toolkit/config.py | 4 +- src/nasde_toolkit/runner.py | 39 +++++++++++++++ src/nasde_toolkit/scaffold/__init__.py | 4 ++ tests/test_cli.py | 34 +++++++++++++ tests/test_config.py | 2 +- tests/test_runner.py | 45 +++++++++++++++++ uv.lock | 6 +-- 11 files changed, 218 insertions(+), 25 deletions(-) diff --git a/.claude/skills/nasde-dev/SKILL.md b/.claude/skills/nasde-dev/SKILL.md index 53e8ca5..bf183fa 100644 --- a/.claude/skills/nasde-dev/SKILL.md +++ b/.claude/skills/nasde-dev/SKILL.md @@ -58,6 +58,7 @@ After any change to the evaluation pipeline, CLI flags, configuration schema, ag **Think DX-first:** For every new option or feature, ask "where will the user be when they need this?" and put the documentation there. A feature that exists only in CLAUDE.md is invisible to most users. Check every touchpoint: **Documentation:** +- `CHANGELOG.md` — **add an entry under `## [Unreleased]`** (Added / Changed / Fixed) for any user-visible change: new CLI flag, config field, behavior change, dependency bump. Add the `[#NN]` PR link-reference at the bottom. Easy to forget — do it as part of the change, not at release time. - `README.md` — user-facing documentation (CLI options table, nasde.toml config reference, explanatory text). This is where most users look first. - `CLAUDE.md` — agent instructions (CLI reference, nasde.toml example, architecture decisions) - `ARCHITECTURE.md` — system architecture with mermaid diagrams (end-to-end flow, trial lifecycle, cloud sandbox providers, assessment evaluation) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1834578..f7aaa26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,24 @@ See [docs/RELEASING.md](docs/RELEASING.md) for the release procedure. ## [Unreleased] +### Added +- **Variant task-scoping: `tasks` array in `variant.toml`.** A variant may declare + `tasks = [...]` to restrict it to specific tasks — use it for a repo-specific + variant (e.g. a skill tuned to one repo's conventions) so it never runs against + the wrong codebase. With `--all-variants` a scoped variant runs only against its + declared tasks (others SKIPPED); with a single `--variant`, requesting a task + outside its scope aborts with a clear error. The scope wins over an explicit + `--tasks` filter. Absent/empty → unscoped (the default). ([#54]) + +### Changed +- **Evaluator default `max_turns` raised 30 → 60.** Avoids `error_max_turns` on + large/complex workspaces (e.g. DDD refactors). Override via `[evaluation] + max_turns` in `nasde.toml`. ([#54]) + +### Fixed +- **Bump `starlette` 1.0.0 → 1.1.0** (PYSEC-2026-161; transitive via + harbor/fastapi/mcp). ([#54]) + ## [0.4.0] — 2026-05-21 ### Added @@ -390,4 +408,5 @@ Initial release under the **nasde-toolkit** name (rebrand from [#50]: https://github.com/NoesisVision/nasde-toolkit/pull/50 [#51]: https://github.com/NoesisVision/nasde-toolkit/pull/51 [#52]: https://github.com/NoesisVision/nasde-toolkit/pull/52 +[#54]: https://github.com/NoesisVision/nasde-toolkit/pull/54 [gh-litellm-2026-04]: https://github.com/BerriAI/litellm/security/advisories/GHSA-xqmj-j6mv-4862 diff --git a/README.md b/README.md index 3c09622..6f0ce54 100644 --- a/README.md +++ b/README.md @@ -473,6 +473,28 @@ sandbox — no copy under `variants/`. The legacy `variants//skills//` copy path still works unchanged (and now also carries `references/`, which it previously dropped). +## Scoping a variant to specific tasks (`tasks`) + +Some variants only make sense for one task — for example, a skill whose code +examples are *tuned to a particular repo's conventions*. Running such a variant +against a different codebase produces misleading results. Declare a `tasks` +scope in the variant's `variant.toml`: + +```toml +agent = "claude" +model = "claude-sonnet-4-6" + +# This variant's skill references this repo's value objects, so it should only +# run against that task. +tasks = ["csharp-anemic-to-rich-domain"] +``` + +The scope is enforced either way you run: with `--all-variants` a scoped variant +runs **only** against its declared tasks (others show as `SKIPPED`); with a single +`--variant`, asking for a task outside its scope aborts with a clear error rather +than running against the wrong repo. Omit `tasks` (the default) for a +general-purpose variant that runs everywhere. + ## Commands ### Core diff --git a/src/nasde_toolkit/cli.py b/src/nasde_toolkit/cli.py index 2007dd8..8c6545d 100644 --- a/src/nasde_toolkit/cli.py +++ b/src/nasde_toolkit/cli.py @@ -261,17 +261,33 @@ def run( else: assert variant is not None resolved_variant = variant - from nasde_toolkit.runner import _resolve_model, load_variant_agent_type, resolve_variant_dir + from nasde_toolkit.runner import ( + _resolve_model, + load_variant_agent_type, + resolve_variant_dir, + scope_tasks_for_variant, + ) variant_dir = resolve_variant_dir(config.project_dir, resolved_variant) agent_type = load_variant_agent_type(variant_dir) display_model = _resolve_model(resolved_model, variant_dir, config) + base_task_names = [t.name for t in config.tasks] + if tasks_filter: + base_task_names = [n for n in base_task_names if n in set(tasks_filter)] + scoped_tasks = scope_tasks_for_variant(variant_dir, base_task_names, tasks_filter) + if not scoped_tasks: + console.print( + f"[red]ERROR: variant '{resolved_variant}' is task-scoped (variant.toml `tasks`) " + f"and none of the requested tasks fall within its scope.[/red]" + ) + raise typer.Exit(1) + _print_run_header( variant=resolved_variant, model=display_model, timeout=resolved_timeout, - tasks_filter=tasks_filter, + tasks_filter=scoped_tasks, with_opik=with_opik, with_eval=not without_eval, harbor_env=resolved_harbor_env, @@ -285,7 +301,7 @@ def run( variant=resolved_variant, model=resolved_model, timeout_sec=resolved_timeout, - tasks_filter=tasks_filter, + tasks_filter=scoped_tasks, with_opik=with_opik, with_eval=not without_eval, harbor_env=resolved_harbor_env, @@ -428,29 +444,32 @@ def _confirm_multi_variant_run( print_banner(console) + from nasde_toolkit.runner import resolve_variant_dir, scope_tasks_for_variant + task_names = [t.name for t in config.tasks] if tasks_filter: task_names = [n for n in task_names if n in set(tasks_filter)] - n_variants = len(variants) - n_tasks = len(task_names) - total_trials = n_variants * n_tasks * attempts - table = Table(title="Multi-Variant Run") - table.add_column("Variants", style="cyan") + table.add_column("Variant", style="cyan") table.add_column("Tasks", style="green") - table.add_column("Attempts", justify="right") - table.add_column("Total trials", justify="right", style="bold") - table.add_row( - ", ".join(variants), - ", ".join(task_names) if task_names else "(none)", - str(attempts), - str(total_trials), - ) + table.add_column("Trials", justify="right", style="bold") + + total_trials = 0 + for variant in variants: + variant_dir = resolve_variant_dir(config.project_dir, variant) + scoped = scope_tasks_for_variant(variant_dir, task_names, tasks_filter) + n = len(scoped) * attempts + total_trials += n + table.add_row( + variant, + ", ".join(scoped) if scoped else "[yellow](skipped — task-scoped)[/yellow]", + str(n), + ) console.print(table) typer.confirm( - f"Run {total_trials} trials ({n_variants} variants x {n_tasks} tasks x {attempts} attempts)?", + f"Run {total_trials} trials across {len(variants)} variants (x {attempts} attempts each)?", abort=True, ) @@ -469,19 +488,29 @@ async def _run_all_variants( max_concurrent_eval: int = 10, ) -> None: - from nasde_toolkit.runner import run_benchmark + from nasde_toolkit.runner import resolve_variant_dir, run_benchmark, scope_tasks_for_variant results: list[tuple[str, str, str]] = [] + all_task_names = [t.name for t in config.tasks] + base_tasks = [t for t in all_task_names if t in set(tasks_filter)] if tasks_filter else all_task_names for i, variant_name in enumerate(variants, 1): console.print(f"\n[bold]=== Variant {i}/{len(variants)}: {variant_name} ===[/bold]\n") + variant_dir = resolve_variant_dir(config.project_dir, variant_name) + scoped_tasks = scope_tasks_for_variant(variant_dir, base_tasks, tasks_filter) + if not scoped_tasks: + console.print( + f"[yellow]SKIP: variant '{variant_name}' is task-scoped and none of its tasks are in this run.[/yellow]" + ) + results.append((variant_name, "[yellow]SKIPPED[/yellow]", "task-scoped, no matching task")) + continue try: await run_benchmark( config=config, variant=variant_name, model=model, timeout_sec=timeout_sec, - tasks_filter=tasks_filter, + tasks_filter=scoped_tasks, with_opik=with_opik, with_eval=with_eval, harbor_env=harbor_env, diff --git a/src/nasde_toolkit/config.py b/src/nasde_toolkit/config.py index 699cbd6..86da043 100644 --- a/src/nasde_toolkit/config.py +++ b/src/nasde_toolkit/config.py @@ -56,7 +56,7 @@ class EvaluationConfig: backend: str = "claude" model: str = "claude-opus-4-7" dimensions_file: str = "assessment_dimensions.json" - max_turns: int = 30 + max_turns: int = 60 allowed_tools: list[str] | None = None mcp_config: str | None = None skills_dir: str | None = None @@ -149,7 +149,7 @@ def _parse_toml(raw: dict, project_dir: Path) -> ProjectConfig: backend=eval_raw.get("backend", "claude"), model=eval_raw.get("model", "claude-opus-4-7"), dimensions_file=eval_raw.get("dimensions_file", "assessment_dimensions.json"), - max_turns=eval_raw.get("max_turns", 30), + max_turns=eval_raw.get("max_turns", 60), allowed_tools=eval_raw.get("allowed_tools"), mcp_config=eval_raw.get("mcp_config"), skills_dir=eval_raw.get("skills_dir"), diff --git a/src/nasde_toolkit/runner.py b/src/nasde_toolkit/runner.py index f015572..a239751 100644 --- a/src/nasde_toolkit/runner.py +++ b/src/nasde_toolkit/runner.py @@ -386,6 +386,45 @@ def load_variant_agent_type(variant_dir: Path) -> str: return agent_type +def load_variant_task_scope(variant_dir: Path) -> list[str] | None: + """Read the optional ``tasks`` task-scope list from variant.toml. + + A repo-specific variant (e.g. a skill whose examples reference one repo's + conventions) declares the tasks it is meant to run against: + + tasks = ["csharp-anemic-to-rich-domain"] + + Returns the declared task names, or ``None`` when the variant is unscoped + (applies to every task). An empty list is treated as unscoped. + """ + scope = load_variant_config(variant_dir).get("tasks") + if not scope: + return None + if not isinstance(scope, list) or not all(isinstance(t, str) for t in scope): + console.print(f"[red]ERROR: variant.toml 'tasks' must be a list of task names, got: {scope!r}[/red]") + raise SystemExit(1) + return scope + + +def scope_tasks_for_variant( + variant_dir: Path, + task_names: list[str], + explicit_tasks_filter: list[str] | None, +) -> list[str]: + """Intersect a variant's task-scope with the run's task list. + + ``task_names`` are the tasks that would otherwise run (already narrowed by + any ``--tasks`` filter). If the variant declares a ``tasks`` scope, keep + only the tasks in that scope. An explicit ``--tasks`` filter that names a + task outside the variant's scope is dropped (the scope wins) so that + ``--all-variants`` never runs a repo-specific variant against the wrong repo. + """ + scope = load_variant_task_scope(variant_dir) + if scope is None: + return task_names + return [t for t in task_names if t in set(scope)] + + def _agent_import_path(agent_type: str) -> str: if agent_type == "codex": return "nasde_toolkit.agents.configurable_codex:ConfigurableCodex" diff --git a/src/nasde_toolkit/scaffold/__init__.py b/src/nasde_toolkit/scaffold/__init__.py index 6edcdea..c08c722 100644 --- a/src/nasde_toolkit/scaffold/__init__.py +++ b/src/nasde_toolkit/scaffold/__init__.py @@ -95,6 +95,10 @@ VARIANT_TOML_TEMPLATE = """\ agent = "claude" model = "claude-sonnet-4-6" + +# Optional: restrict this variant to specific tasks (e.g. a repo-specific skill). +# Omit for a general-purpose variant that runs against every task. +# tasks = ["my-benchmark/task-name"] """ GITIGNORE_TEMPLATE = """\ diff --git a/tests/test_cli.py b/tests/test_cli.py index 32bd89b..5059b85 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -98,6 +98,40 @@ def test_all_variants_continues_on_failure(mock_run: AsyncMock, benchmark_projec assert "OK" in result.output +@patch("nasde_toolkit.runner.run_benchmark", new_callable=AsyncMock) +def test_single_variant_task_scope_aborts_when_no_task_in_scope(mock_run: AsyncMock, benchmark_project: Path) -> None: + scoped = benchmark_project / "variants" / "scoped" + scoped.mkdir(parents=True) + (scoped / "CLAUDE.md").write_text("# scoped") + (scoped / "variant.toml").write_text( + 'agent = "claude"\nmodel = "claude-sonnet-4-6"\ntasks = ["nasde/other-task"]\n' + ) + result = runner.invoke( + app, + ["run", "--variant", "scoped", "-C", str(benchmark_project)], + ) + assert result.exit_code != 0 + assert "task-scoped" in result.output.lower() + mock_run.assert_not_awaited() + + +@patch("nasde_toolkit.runner.run_benchmark", new_callable=AsyncMock) +def test_single_variant_task_scope_passes_only_scoped_tasks(mock_run: AsyncMock, benchmark_project: Path) -> None: + scoped = benchmark_project / "variants" / "scoped" + scoped.mkdir(parents=True) + (scoped / "CLAUDE.md").write_text("# scoped") + # task names are stored stripped of Harbor's "org/" prefix (nasde/sample -> sample), + # so the scope must reference the stripped name — same as the --tasks filter does. + (scoped / "variant.toml").write_text('agent = "claude"\nmodel = "claude-sonnet-4-6"\ntasks = ["sample"]\n') + result = runner.invoke( + app, + ["run", "--variant", "scoped", "-C", str(benchmark_project)], + ) + assert result.exit_code == 0, result.output + assert mock_run.await_count == 1 + assert mock_run.call_args.kwargs["tasks_filter"] == ["sample"] + + @patch("nasde_toolkit.evaluator.evaluate_job", new_callable=AsyncMock) def test_eval_command_forwards_evaluation_config(mock_evaluate_job: AsyncMock, tmp_path: Path) -> None: (tmp_path / "nasde.toml").write_text( diff --git a/tests/test_config.py b/tests/test_config.py index 0b72ecf..6cf7279 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -68,7 +68,7 @@ def test_evaluation_defaults_when_section_absent(tmp_path: Path) -> None: config = load_project_config(tmp_path) assert config.evaluation.model == "claude-opus-4-7" assert config.evaluation.dimensions_file == "assessment_dimensions.json" - assert config.evaluation.max_turns == 30 + assert config.evaluation.max_turns == 60 assert config.evaluation.allowed_tools is None assert config.evaluation.mcp_config is None assert config.evaluation.skills_dir is None diff --git a/tests/test_runner.py b/tests/test_runner.py index 8ed4c16..8f29764 100644 --- a/tests/test_runner.py +++ b/tests/test_runner.py @@ -23,6 +23,8 @@ _is_gemini_agent, collect_available_variants, load_variant_agent_type, + load_variant_task_scope, + scope_tasks_for_variant, ) @@ -199,6 +201,49 @@ def test_load_variant_agent_type_missing_field_raises(tmp_path: Path) -> None: load_variant_agent_type(tmp_path) +# --------------------------------------------------------------------------- +# variant task-scope +# --------------------------------------------------------------------------- + + +def test_load_variant_task_scope_absent_is_none(tmp_path: Path) -> None: + (tmp_path / "variant.toml").write_text('agent = "claude"') + assert load_variant_task_scope(tmp_path) is None + + +def test_load_variant_task_scope_empty_list_is_none(tmp_path: Path) -> None: + (tmp_path / "variant.toml").write_text('agent = "claude"\ntasks = []') + assert load_variant_task_scope(tmp_path) is None + + +def test_load_variant_task_scope_returns_list(tmp_path: Path) -> None: + (tmp_path / "variant.toml").write_text('agent = "claude"\ntasks = ["a", "b"]') + assert load_variant_task_scope(tmp_path) == ["a", "b"] + + +def test_load_variant_task_scope_non_string_entries_raise(tmp_path: Path) -> None: + (tmp_path / "variant.toml").write_text('agent = "claude"\ntasks = [1, 2]') + with pytest.raises(SystemExit): + load_variant_task_scope(tmp_path) + + +def test_scope_tasks_unscoped_variant_keeps_all(tmp_path: Path) -> None: + (tmp_path / "variant.toml").write_text('agent = "claude"') + assert scope_tasks_for_variant(tmp_path, ["a", "b", "c"], None) == ["a", "b", "c"] + + +def test_scope_tasks_scoped_variant_intersects(tmp_path: Path) -> None: + (tmp_path / "variant.toml").write_text('agent = "claude"\ntasks = ["b"]') + assert scope_tasks_for_variant(tmp_path, ["a", "b", "c"], None) == ["b"] + + +def test_scope_tasks_scope_wins_over_explicit_filter(tmp_path: Path) -> None: + # Even if the user asked for task "a" via --tasks, a variant scoped to "b" + # only runs "b" — and here "b" was filtered out, so nothing runs. + (tmp_path / "variant.toml").write_text('agent = "claude"\ntasks = ["b"]') + assert scope_tasks_for_variant(tmp_path, ["a"], ["a"]) == [] + + # --------------------------------------------------------------------------- # _is_codex_agent # --------------------------------------------------------------------------- diff --git a/uv.lock b/uv.lock index c2d7506..79367be 100644 --- a/uv.lock +++ b/uv.lock @@ -2513,15 +2513,15 @@ wheels = [ [[package]] name = "starlette" -version = "1.0.0" +version = "1.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/81/69/17425771797c36cded50b7fe44e850315d039f28b15901ab44839e70b593/starlette-1.0.0.tar.gz", hash = "sha256:6a4beaf1f81bb472fd19ea9b918b50dc3a77a6f2e190a12954b25e6ed5eea149", size = 2655289, upload-time = "2026-03-22T18:29:46.779Z" } +sdist = { url = "https://files.pythonhosted.org/packages/95/66/4d20cdf39a8d6a51e663b7038e3b828ff211d3891a43a713fe7e4643f3a8/starlette-1.1.0.tar.gz", hash = "sha256:e83c7fe0ddecd8719c5b840080325aec0260acec86e9832899e377b91d65e90f", size = 2660060, upload-time = "2026-05-23T16:55:41.376Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/c9/584bc9651441b4ba60cc4d557d8a547b5aff901af35bda3a4ee30c819b82/starlette-1.0.0-py3-none-any.whl", hash = "sha256:d3ec55e0bb321692d275455ddfd3df75fff145d009685eb40dc91fc66b03d38b", size = 72651, upload-time = "2026-03-22T18:29:45.111Z" }, + { url = "https://files.pythonhosted.org/packages/93/79/920b8e0a8b20f793e8d64855095cb8febabf6175b8550b6f7a547d813891/starlette-1.1.0-py3-none-any.whl", hash = "sha256:7f0dfd38e428aad5cb6f9f667f0ca1d2d8ca3f3385dccac8305f79ec98458382", size = 72899, upload-time = "2026-05-23T16:55:39.201Z" }, ] [[package]] From 5a7076bce7b2d5043a6883446afc58de6e26f3e3 Mon Sep 17 00:00:00 2001 From: Szymon Janikowski Date: Tue, 26 May 2026 13:23:09 +0200 Subject: [PATCH 2/2] example(tactical-ddd): benchmark the tactical-ddd skill on two DDD tasks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reworks the ddd-architectural-challenges example into a worked study of a public DDD skill (Nick Tune's tactical-ddd) and a repo-tuned version, measured with NASDE across four variants (vanilla / guided / public-skill / repo-tuned) on two tasks: a clean-feature task (weather discount) and a legacy anemic→rich refactor (movie-rental), both on .NET 8. - Tasks: add csharp-movie-rental-anemic, modernize csharp-anemic-to-rich-domain to .NET 8, align rubrics + verifiers. - Variants: public skill (repo-leaks removed, idiomatic C#), three repo-tuned skills; explicit skill invocation in instructions so activation is deterministic. - README: new Claude/skill deep-dive section — per-dimension radars, increment-over- vanilla line (absolute cross-task scores aren't comparable; increments are), and average token/time charts. Existing cross-agent table kept. - Lessons surfaced: judge per-dimension not one aggregate; a mounted skill isn't a used skill (verify activation). Co-Authored-By: Claude Opus 4.7 (1M context) --- .../skills/nasde-benchmark-creator/SKILL.md | 15 + .gitignore | 1 + CLAUDE.md | 14 +- README.md | 10 +- docs/benchmark-results.md | 39 ++ .../ddd-architectural-challenges/.gitignore | 1 + .../assets/increment_vs_vanilla.png | Bin 0 -> 75552 bytes .../assets/ops_time_movie.png | Bin 0 -> 42198 bytes .../assets/ops_time_weather.png | Bin 0 -> 40518 bytes .../assets/ops_tokens_movie.png | Bin 0 -> 44417 bytes .../assets/ops_tokens_weather.png | Bin 0 -> 43380 bytes .../assets/radar_movie.png | Bin 0 -> 135313 bytes .../assets/radar_weather.png | Bin 0 -> 167234 bytes .../ddd-architectural-challenges/nasde.toml | 1 + .../assessment_criteria.md | 10 + .../environment/Dockerfile | 10 +- .../instruction.md | 7 +- .../csharp-anemic-to-rich-domain/task.toml | 2 +- .../tests/test.sh | 60 +- .../assessment_criteria.md | 161 +++++ .../environment/Dockerfile | 34 ++ .../csharp-movie-rental-anemic/instruction.md | 66 ++ .../csharp-movie-rental-anemic/task.toml | 21 + .../csharp-movie-rental-anemic/tests/test.sh | 47 ++ .../assessment_criteria.md | 8 +- .../tasks/ddd-threshold-discount/task.toml | 2 +- .../ddd-threshold-discount/tests/test.sh | 72 +-- .../assessment_criteria.md | 10 +- .../tasks/ddd-weather-discount/task.toml | 2 +- .../tasks/ddd-weather-discount/tests/test.sh | 43 +- .../assessment_criteria.md | 85 --- .../environment/Dockerfile | 16 - .../instruction.md | 44 -- .../task.toml | 27 - .../tests/test.sh | 71 --- .../CLAUDE.md | 8 + .../skills/tactical-ddd/SKILL.md | 548 +++++++++++++++++ .../variant.toml | 6 + .../CLAUDE.md | 8 + .../skills/tactical-ddd/SKILL.md | 561 +++++++++++++++++ .../variant.toml | 6 + .../CLAUDE.md | 8 + .../skills/tactical-ddd/SKILL.md | 569 ++++++++++++++++++ .../variant.toml | 6 + .../claude-ntcoding-tactical-ddd/CLAUDE.md | 7 +- .../skills/tactical-ddd/SKILL.md | 503 ++++++++-------- .../codex-ntcoding-tactical-ddd/AGENTS.md | 7 +- .../gemini-ntcoding-tactical-ddd/GEMINI.md | 7 +- 48 files changed, 2469 insertions(+), 654 deletions(-) create mode 100644 examples/ddd-architectural-challenges/assets/increment_vs_vanilla.png create mode 100644 examples/ddd-architectural-challenges/assets/ops_time_movie.png create mode 100644 examples/ddd-architectural-challenges/assets/ops_time_weather.png create mode 100644 examples/ddd-architectural-challenges/assets/ops_tokens_movie.png create mode 100644 examples/ddd-architectural-challenges/assets/ops_tokens_weather.png create mode 100644 examples/ddd-architectural-challenges/assets/radar_movie.png create mode 100644 examples/ddd-architectural-challenges/assets/radar_weather.png create mode 100644 examples/ddd-architectural-challenges/tasks/csharp-movie-rental-anemic/assessment_criteria.md create mode 100644 examples/ddd-architectural-challenges/tasks/csharp-movie-rental-anemic/environment/Dockerfile create mode 100644 examples/ddd-architectural-challenges/tasks/csharp-movie-rental-anemic/instruction.md create mode 100644 examples/ddd-architectural-challenges/tasks/csharp-movie-rental-anemic/task.toml create mode 100644 examples/ddd-architectural-challenges/tasks/csharp-movie-rental-anemic/tests/test.sh delete mode 100644 examples/ddd-architectural-challenges/tasks/java-order-dispatch-domain-entities/assessment_criteria.md delete mode 100644 examples/ddd-architectural-challenges/tasks/java-order-dispatch-domain-entities/environment/Dockerfile delete mode 100644 examples/ddd-architectural-challenges/tasks/java-order-dispatch-domain-entities/instruction.md delete mode 100644 examples/ddd-architectural-challenges/tasks/java-order-dispatch-domain-entities/task.toml delete mode 100755 examples/ddd-architectural-challenges/tasks/java-order-dispatch-domain-entities/tests/test.sh create mode 100644 examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-anemic-tuned/CLAUDE.md create mode 100644 examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-anemic-tuned/skills/tactical-ddd/SKILL.md create mode 100644 examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-anemic-tuned/variant.toml create mode 100644 examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-movie-tuned/CLAUDE.md create mode 100644 examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-movie-tuned/skills/tactical-ddd/SKILL.md create mode 100644 examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-movie-tuned/variant.toml create mode 100644 examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-weather-tuned/CLAUDE.md create mode 100644 examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-weather-tuned/skills/tactical-ddd/SKILL.md create mode 100644 examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-weather-tuned/variant.toml diff --git a/.claude/skills/nasde-benchmark-creator/SKILL.md b/.claude/skills/nasde-benchmark-creator/SKILL.md index 55a3c23..c3d0987 100644 --- a/.claude/skills/nasde-benchmark-creator/SKILL.md +++ b/.claude/skills/nasde-benchmark-creator/SKILL.md @@ -288,6 +288,21 @@ model = "google/gemini-3-flash-preview" # Required format: google/ - `google/gemini-3-flash-preview` — best quality/speed ratio, daily coding tasks - `google/gemini-3.1-flash-lite-preview` — fastest, simple and repetitive tasks +### Scoping a variant to specific tasks (optional) + +If a variant only makes sense for certain tasks — e.g. a skill whose examples are +tuned to one repo's conventions — declare a `tasks` list. It restricts the variant +to those tasks so `--all-variants` never runs it against the wrong codebase: + +```toml +agent = "claude" +model = "claude-sonnet-4-6" +tasks = ["my-benchmark/task-a"] # only runs against these tasks +``` + +Omit `tasks` for a general-purpose variant (the default — runs against all tasks). +The scope wins even over an explicit `--tasks` filter. + ### Claude Code variant ``` diff --git a/.gitignore b/.gitignore index 2972cf7..0c9b043 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .DS_Store +.idea/ __pycache__/ *.pyc .venv/ diff --git a/CLAUDE.md b/CLAUDE.md index b1e3089..f567324 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -166,7 +166,7 @@ build_commands = [] backend = "claude" # "claude" (default) | "codex" model = "claude-opus-4-7" dimensions_file = "assessment_dimensions.json" -# max_turns = 30 # Max evaluator conversation turns +# max_turns = 60 # Max evaluator conversation turns (default 60) # allowed_tools = ["Read", "Glob", "Grep"] # Override default tool whitelist # mcp_config = "./evaluator_mcp.json" # MCP server config for evaluator # skills_dir = "./evaluator_skills" # Skills directory for evaluator @@ -255,6 +255,8 @@ Declares the agent type and the model the variant runs against. Every variant MU agent = "claude" # "claude" | "codex" | "gemini" model = "claude-sonnet-4-6" # REQUIRED. Model appropriate for the agent family. +tasks = ["my-benchmark/task-a"] # Optional: task-scope. Restrict this variant to specific tasks. + [[skill]] # Optional (ADR-009): skill-by-reference, Claude only. path = "../../../src/plugins/my-plugin/skills/my-skill" # source skill dir (required) ref = "abc1234" # optional git ref, same semantics as [nasde.source] @@ -262,6 +264,16 @@ ref = "abc1234" # optional git ref, same semantics as [nasde **Model priority**: `--model` CLI flag > `variant.toml [model]`. Missing model in both places → SystemExit with a clear error. +**`tasks` (variant task-scope)**: optional list of task names this variant is +meant to run against. Use it for a *repo-specific* variant — e.g. a skill whose +examples reference one repo's conventions — so it never runs against the wrong +codebase. The scope is enforced in **both** run modes: with `--all-variants` a +scoped variant runs only against its declared tasks (others are skipped with a +SKIPPED status); with a single `--variant`, if none of the requested tasks fall in +the variant's scope the run aborts with a clear error. Either way the scope wins +over an explicit `--tasks` filter. Absent or empty → unscoped (runs against every +task, the default). + **`[[skill]]` (skill-by-reference)**: each entry stages the **whole** skill dir (incl. `references/`) into `/app/.claude/skills//` from a source path — no copy under `variants//skills/`. Optional `ref` reads from a temp git diff --git a/README.md b/README.md index 6f0ce54..992af0b 100644 --- a/README.md +++ b/README.md @@ -178,6 +178,12 @@ The criteria spell out what each score means for each dimension. Here is the ful **The insight:** the same "DDD guidance" skill helps Claude a little (+3.5) and *badly* hurts Codex (-22). The per-dimension breakdown pinpoints *where* Codex regresses — domain modeling, encapsulation, extensibility — which would be invisible without this assessment. Skill optimization is agent-specific. +### Deep dive — does a public skill, and tuning it, actually help? + +A separate study took a public DDD skill (the `tactical-ddd` skill from `ntcoding/claude-skillz`) and its repo-tuned version across four configurations on two deliberately different tasks — a feature on a clean DDD codebase and a legacy anemic→rich refactor. The headline: **the effect is task-dependent** — tuning the skill to the repo adds **+0.13** quality on the clean-feature task but only **+0.06** on the legacy refactor (increment over the bare model; absolute scores across tasks aren't comparable). Two lessons that generalize: judge *per dimension*, not one aggregate; and a skill present on disk is not a skill used — verify it activated. + +→ Full tables, per-dimension radars, and token/time charts in **[Benchmark Results](docs/benchmark-results.md#deep-dive--tactical-ddd-skill-public-vs-repo-tuned-claude-code)**. + ### More benchmarks in the repo - **Refactoring katas (Java + Python)** — four classic refactorings scored on behavior preservation, clarity, technique, scope discipline. *Takeaway:* a candidate "refactoring skill" didn't move the score — shipping it would have been based on vibes. @@ -402,7 +408,7 @@ append_system_prompt = "Pay special attention to SOLID principles when scoring." | `backend` | `claude` | Subprocess backend: `claude` or `codex` | | `model` | `claude-opus-4-7` | Evaluator model | | `dimensions_file` | `assessment_dimensions.json` | Scoring dimensions file | -| `max_turns` | `30` | Max conversation turns | +| `max_turns` | `60` | Max evaluator conversation turns (raise for DDD-rich workspaces with many small files) | | `allowed_tools` | `["Read", "Glob", "Grep"]` | Tool whitelist | | `mcp_config` | — | Path to MCP server config JSON | | `skills_dir` | — | Path to evaluator skills directory | @@ -603,7 +609,7 @@ build_commands = [] backend = "claude" # "claude" (default) | "codex" model = "claude-opus-4-7" dimensions_file = "assessment_dimensions.json" -# max_turns = 30 # Max evaluator conversation turns +# max_turns = 60 # Max evaluator conversation turns (default 60) # allowed_tools = ["Read", "Glob", "Grep"] # Override default tool whitelist # mcp_config = "./evaluator_mcp.json" # MCP server config for evaluator # skills_dir = "./evaluator_skills" # Skills directory for evaluator diff --git a/docs/benchmark-results.md b/docs/benchmark-results.md index 2867d90..a79c830 100644 --- a/docs/benchmark-results.md +++ b/docs/benchmark-results.md @@ -30,6 +30,45 @@ Results from the three example benchmarks included in `examples/`. All scores ar **Takeaway:** Architectural guidance helps Claude (+3.5) but dramatically hurts Codex (-22.0). The same skill applied to different agents can have opposite effects — this is exactly the kind of insight NASDE is designed to surface. +### Deep dive — tactical-ddd skill: public vs repo-tuned (Claude Code) + +A focused follow-up on the same benchmark family: we took a public DDD skill ([`tactical-ddd` from `ntcoding/claude-skillz`](https://github.com/NTCoding/claude-skillz)) and a repo-tuned version, and measured four configurations of Claude Code on two deliberately different tasks — a **feature on a clean DDD codebase** (`ddd-weather-discount`) and a **legacy anemic→rich refactor** (`csharp-movie-rental-anemic`). Each configuration was run repeatedly and each run scored repeatedly; the numbers below are medians (normalized 0–1). Skill activation was verified per run — a mounted skill the agent never invokes scores like no skill at all. + +| Configuration | Weather (feature) | Movie (legacy) | +|---|:---:|:---:| +| vanilla (no skill) | 0.79 | 0.56 | +| guided (manual DDD hints, no skill) | 0.84 | 0.58 | +| public skill | 0.85 | 0.60 | +| repo-tuned skill | **0.92** | **0.62** | + +**The effect is task-dependent.** Absolute scores across tasks aren't comparable — task difficulty sets the baseline (movie starts lower because it's harder). What *is* comparable is the **increment over vanilla** on each task: how much each step lifts quality above the bare model. + +

+ Quality gain over vanilla +

+ +The same repo-tuned skill adds **+0.13** on the clean-feature task but only **+0.06** on the legacy refactor — twice the payoff where the design space is open. + +Per-dimension radars show *where* the gains land (test quality stays flat everywhere — the skill teaches modeling, not testing): + +

+ Weather radar + Movie radar +

+ +What does the gain cost? Token usage and run time per configuration — and the answer is **not** the simple "better costs more" you might expect: + +

+ Weather tokens + Movie tokens + Weather time + Movie time +

+ +Cost doesn't track quality. On weather the top-scoring repo-tuned skill spends *fewer* tokens than guided or public; on movie the public skill is the cheapest of all four. The real overhead is run time on the messy refactor, where the skill arms take roughly twice as long as the bare model. + +**Two lessons that generalize:** (1) judge one aggregate number and you miss the story — a real per-dimension gain hides inside an averaged score, which is why we show radars, not a single bar; (2) a skill present on disk is not a skill used — always verify it activated before trusting the result. + ## UC1: Project-Specific Setup — NASDE Dev Skill 1 task: Add multi-attempt support to the nasde-toolkit itself. Claude only (project-specific skill, cross-agent comparison not applicable). diff --git a/examples/ddd-architectural-challenges/.gitignore b/examples/ddd-architectural-challenges/.gitignore index 1c18760..6064dec 100644 --- a/examples/ddd-architectural-challenges/.gitignore +++ b/examples/ddd-architectural-challenges/.gitignore @@ -1 +1,2 @@ jobs/ +_focus_report.md diff --git a/examples/ddd-architectural-challenges/assets/increment_vs_vanilla.png b/examples/ddd-architectural-challenges/assets/increment_vs_vanilla.png new file mode 100644 index 0000000000000000000000000000000000000000..3e0a73b3ed4d3bff467ab927dc6d2b721dbfefa8 GIT binary patch literal 75552 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

jpaT&GSvzw`SM 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 z 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 R{EW1-w{OWyU~d|D{SN`x45|PC literal 0 HcmV?d00001 diff --git a/examples/ddd-architectural-challenges/assets/ops_time_weather.png b/examples/ddd-architectural-challenges/assets/ops_time_weather.png new file mode 100644 index 0000000000000000000000000000000000000000..0c6cf103a2c0cc7f513ba38a744d21ab04a7d5d1 GIT binary patch literal 40518 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 literal 0 HcmV?d00001 diff --git a/examples/ddd-architectural-challenges/assets/ops_tokens_movie.png b/examples/ddd-architectural-challenges/assets/ops_tokens_movie.png new file mode 100644 index 0000000000000000000000000000000000000000..d89e504ad1292f2c2ed3d2af93baff11769cb919 GIT binary patch literal 44417 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

aA1bq1eFDxE_m!mghD^wU8d#_CaVP&wWI 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 t{aIH0uWJNs}6IifmV{}&tR%L4!a literal 0 HcmV?d00001 diff --git a/examples/ddd-architectural-challenges/assets/ops_tokens_weather.png b/examples/ddd-architectural-challenges/assets/ops_tokens_weather.png new file mode 100644 index 0000000000000000000000000000000000000000..f9112bb984c49acd366e829832b0e1c592506ad4 GIT binary patch literal 43380 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 v_Oi4xO`M`AA8tE56@3g; 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 literal 0 HcmV?d00001 diff --git a/examples/ddd-architectural-challenges/assets/radar_movie.png b/examples/ddd-architectural-challenges/assets/radar_movie.png new file mode 100644 index 0000000000000000000000000000000000000000..0f462e30bf38f79b9543b5184920c59297eefe6b GIT binary patch literal 135313 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 Xm@x-qa_K2i8u+85p-X&2Fc0`21>SvP literal 0 HcmV?d00001 diff --git a/examples/ddd-architectural-challenges/assets/radar_weather.png b/examples/ddd-architectural-challenges/assets/radar_weather.png new file mode 100644 index 0000000000000000000000000000000000000000..f915246da021cddd01cb0fb4ed7757d4d18b7045 GIT binary patch literal 167234 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%0Dg`fE|hoLM;lrk7okn18KZr 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

R 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//' DotNetConfPl.Refactoring/DotNetConfPl.Refactoring.csproj && \ sed -i 's///' DotNetConfPl.Refactoring/DotNetConfPl.Refactoring.csproj && \ - sed -i 's/Version="2.2.6"/Version="6.0.0"/g' DotNetConfPl.Refactoring/DotNetConfPl.Refactoring.csproj && \ + sed -i 's/Version="2.2.6"/Version="8.0.0"/g' DotNetConfPl.Refactoring/DotNetConfPl.Refactoring.csproj && \ sed -i 's/Version="4.0.1"/Version="6.5.0"/g' DotNetConfPl.Refactoring/DotNetConfPl.Refactoring.csproj -# Fix Swagger for .NET 6 (DescribeAllEnumsAsStrings removed, Info -> OpenApiInfo) +# Fix Swagger for modern .NET (DescribeAllEnumsAsStrings removed, Info -> OpenApiInfo) RUN sed -i '/DescribeAllEnumsAsStrings/d' DotNetConfPl.Refactoring/Startup.cs && \ sed -i 's/Swashbuckle.AspNetCore.Swagger.Info/Microsoft.OpenApi.Models.OpenApiInfo/g' DotNetConfPl.Refactoring/Startup.cs && \ sed -i '1s/^/using Microsoft.OpenApi.Models;\n/' DotNetConfPl.Refactoring/Startup.cs diff --git a/examples/ddd-architectural-challenges/tasks/csharp-anemic-to-rich-domain/instruction.md b/examples/ddd-architectural-challenges/tasks/csharp-anemic-to-rich-domain/instruction.md index f4fa895..e304920 100644 --- a/examples/ddd-architectural-challenges/tasks/csharp-anemic-to-rich-domain/instruction.md +++ b/examples/ddd-architectural-challenges/tasks/csharp-anemic-to-rich-domain/instruction.md @@ -1,7 +1,7 @@ # Task: Refactor Anemic Domain Model to Rich Domain Model ## Context -You are working in `/app`, a C# ASP.NET Core 2.2 application that manages companies, persons, and employees. The codebase follows a classic anemic domain model anti-pattern: domain classes (`Person`, `Company`, `Employee`) are plain data containers with only public getters and setters, while all business logic lives in application service classes (`PersonService`, `CompanyService`, `EmployeeService`). +You are working in `/app`, a C# ASP.NET Core application (targeting **.NET 8**) that manages companies, persons, and employees. The codebase originated on an older .NET version and still carries its dated style: domain classes (`Person`, `Company`, `Employee`) are plain data containers with only public getters and setters, while all business logic lives in application service classes (`PersonService`, `CompanyService`, `EmployeeService`) — a classic anemic domain model anti-pattern. Bring the domain model up to modern standards as you enrich it. The project structure: ``` @@ -34,10 +34,11 @@ Specifically: - Domain objects enforce their own invariants — constructors and methods should reject invalid state - Services contain only orchestration: load, call domain method, save - Value objects are immutable with equality based on attributes -- Follow existing C# conventions in the project +- **Use modern C# / .NET idioms** appropriate to .NET 8 — e.g. `record` / `readonly record struct` for value objects, `required` / `init`-only properties, file-scoped namespaces, nullable reference types, and pattern matching where they make the code clearer. Do not preserve the legacy `netcoreapp`-era style. ## Success Criteria -1. The project compiles successfully +1. The project compiles successfully on .NET 8 2. Domain entities contain behavior methods (not just getters/setters) 3. Service classes are thin orchestrators — no business logic in if/else blocks 4. At least one value object has been introduced +5. The code reads like a modern .NET 8 codebase, not a port of a .NET Core 2.x app diff --git a/examples/ddd-architectural-challenges/tasks/csharp-anemic-to-rich-domain/task.toml b/examples/ddd-architectural-challenges/tasks/csharp-anemic-to-rich-domain/task.toml index 589523d..0d7baec 100644 --- a/examples/ddd-architectural-challenges/tasks/csharp-anemic-to-rich-domain/task.toml +++ b/examples/ddd-architectural-challenges/tasks/csharp-anemic-to-rich-domain/task.toml @@ -11,7 +11,7 @@ framework = ".NET" timeout_sec = 1800 [environment] -memory_mb = 4096 +memory_mb = 6144 [verifier] timeout_sec = 300 diff --git a/examples/ddd-architectural-challenges/tasks/csharp-anemic-to-rich-domain/tests/test.sh b/examples/ddd-architectural-challenges/tasks/csharp-anemic-to-rich-domain/tests/test.sh index 4a9b916..511a14f 100644 --- a/examples/ddd-architectural-challenges/tasks/csharp-anemic-to-rich-domain/tests/test.sh +++ b/examples/ddd-architectural-challenges/tasks/csharp-anemic-to-rich-domain/tests/test.sh @@ -1,8 +1,14 @@ #!/bin/bash + +# C# Anemic → Rich Domain Model - Verifier +# Reward semantics: compiles on modern .NET (net8.0) + tests pass (if any). +# Design quality (rich model, modern idioms) is graded by the LLM-as-judge +# against assessment_criteria.md. + cd /app echo "==========================================" -echo "C# Anemic to Rich Domain Model - Evaluation" +echo "C# Anemic to Rich Domain Model - Verifier" echo "==========================================" echo "" @@ -17,57 +23,25 @@ else exit 1 fi -echo "Step 2: Verifying domain entities have behavior methods..." +echo "Step 2: Verifying the project targets modern .NET (net8.0)..." echo "--------------------------------------" -DOMAIN_FILES=$(find DotNetConfPl.Refactoring/Domain -name "*.cs" -type f) -if echo "$DOMAIN_FILES" | xargs grep -lE "(void (Change|Set|Add|Remove|Assign|Create)|bool (Is|Can|Has))" 2>/dev/null | grep -q .; then - echo "✓ SUCCESS: Domain entities contain behavior methods" +if grep -qE "net8\.0" DotNetConfPl.Refactoring/DotNetConfPl.Refactoring.csproj; then + echo "✓ SUCCESS: Targets net8.0" echo "" else - echo "✗ FAILURE: Domain entities lack behavior methods — still anemic" + echo "✗ FAILURE: Project does not target net8.0 — the solution must run on modern .NET" + echo " Found:" + grep -E " /logs/verifier/reward.txt exit 1 fi -echo "Step 3: Verifying services are thin orchestrators..." -echo "--------------------------------------" -SERVICE_FILES=$(find DotNetConfPl.Refactoring/Application -name "*Service.cs" -type f) -if [ -n "$SERVICE_FILES" ]; then - BIZ_LOGIC_COUNT=$(echo "$SERVICE_FILES" | xargs grep -cE "^\s+if\s*\(" 2>/dev/null | awk -F: '{sum+=$2} END {print sum}') - echo "Business logic if-statements in services: ${BIZ_LOGIC_COUNT:-0}" - if [ "${BIZ_LOGIC_COUNT:-0}" -le 2 ]; then - echo "✓ SUCCESS: Services are thin (≤2 if-statements)" - echo "" - else - echo "✗ FAILURE: Services still contain too much business logic (>2 if-statements)" - echo 0 > /logs/verifier/reward.txt - exit 1 - fi -else - echo "✓ INFO: No service files found — logic may be fully in domain" - echo "" -fi - -echo "Step 4: Checking for value objects..." -echo "--------------------------------------" -ALL_CS=$(find DotNetConfPl.Refactoring -name "*.cs" -type f) -if echo "$ALL_CS" | xargs grep -lE "(readonly struct|sealed class.*: (ValueObject|IEquatable)|record struct|record class)" 2>/dev/null | grep -q .; then - echo "✓ SUCCESS: Value object(s) found" - echo "" -else - if echo "$ALL_CS" | xargs grep -lE "(readonly|immutable|Equals\(|GetHashCode\(\))" 2>/dev/null | grep -q .; then - echo "✓ SUCCESS: Immutable types found (likely value objects)" - echo "" - else - echo "✗ FAILURE: No value objects detected" - echo 0 > /logs/verifier/reward.txt - exit 1 - fi -fi - echo "==========================================" -echo "EVALUATION PASSED ✓" +echo "VERIFIER PASSED ✓" echo "==========================================" +echo "" +echo "Note: this verifier only checks that the feature compiles on modern .NET." +echo "DDD design quality and idiom modernity are evaluated by the LLM-as-judge." echo 1 > /logs/verifier/reward.txt exit 0 diff --git a/examples/ddd-architectural-challenges/tasks/csharp-movie-rental-anemic/assessment_criteria.md b/examples/ddd-architectural-challenges/tasks/csharp-movie-rental-anemic/assessment_criteria.md new file mode 100644 index 0000000..8c3c51b --- /dev/null +++ b/examples/ddd-architectural-challenges/tasks/csharp-movie-rental-anemic/assessment_criteria.md @@ -0,0 +1,161 @@ +# Assessment Criteria: Movie-Rental Anemic to Rich Domain Model + +Evaluate the agent's solution across five dimensions. The codebase is an +"Online Theater" movie-rental backend (`Customer`, `Movie`, +`PurchasedMovie`, `CustomerService`, `MovieService`), persisted with +NHibernate / FluentNHibernate. + +**Modern .NET expectation (applies throughout):** the project targets .NET 8. A +strong solution reads like a modern .NET 8 codebase, not a port of a legacy +.NET Framework / NHibernate app. Reward idiomatic modern C# where it improves the +domain model — `record` / `readonly record struct` for value objects (free value +equality), `required` / `init`-only properties, file-scoped namespaces, nullable +reference types, pattern matching. Penalize value objects hand-rolled with manual +`Equals`/`GetHashCode` boilerplate and dated style when a `record` would express +the concept more clearly. Note the legitimate persistence constraint: NHibernate +needs mapped members `virtual` and a parameterless (possibly `protected`) +constructor — keeping `virtual` members and a parameterless ctor on **entities** +(`Customer`, `Movie`, `PurchasedMovie`) is required for mapping and is correct, not +a defect. That constraint does **not** apply to value objects: `Email`, +`Dollars`/money, expiration date, and `CustomerName` should still be immutable +`record` / `readonly record struct` types. + +**No functional-extensions / `Result` library:** this task forbids introducing a +functional-extensions library (e.g. CSharpFunctionalExtensions) or any `Result` / +`Maybe` monad abstraction. Invariants must be enforced with validating factory +methods that throw a domain-specific exception in plain modern C#. Do **not** award +extra credit for pulling in such a library, and treat adding one as a regression +against the task constraints — it is not a substitute for, nor an improvement over, +factory validation plus a domain exception. + +## 1. Domain Modeling (0–25) + +| Score | Criteria | +|-------|----------| +| 0 | No changes to domain entities — still pure data bags | +| 5 | Some methods added to entities but logic is superficial | +| 10 | Business rules moved from services to entities, basic invariant enforcement | +| 15 | Rich domain model with proper aggregate boundaries, entity behavior, and factory methods | +| 20 | Strong DDD: aggregates protect invariants, state transitions are explicit, ubiquitous language used | +| 25 | Exemplary DDD: aggregates protect invariants, state transitions are explicit, ubiquitous language used throughout, proper use of value objects and domain events where appropriate | + +**Key checks:** +- Does `Customer` own `PurchaseMovie` (rejecting a duplicate active purchase and + keeping `MoneySpent` consistent) and the promotion rules (≥2 active movies in + 30 days **and** ≥$100 in the last year), rather than the service/controller? +- Does `Movie` own its expiration-date and price-by-licensing-model logic + (previously `MovieService.GetExpirationDate` + `CustomerService.CalculatePrice`)? +- Is `PurchasedMovie` created through the domain (e.g. `Customer.PurchaseMovie`) + instead of being assembled field-by-field by a service? Are its + active-vs-expired semantics modeled explicitly on the entity (e.g. an + `ExpirationDate` value object plus an `IsExpired`/`IsActive` query, or an + `Expire()` transition) rather than re-derived ad hoc in a service? +- Are invariants enforced by validating factory methods / constructors that throw a + **domain-specific exception** in plain modern C#? (See the global note: introducing + a functional-extensions / `Result` library is forbidden and must not raise the + score — it is neither required nor a better answer than a validating factory plus a + domain exception.) +- Are constructors / factory methods used instead of public setters? Is the + `Customer` ↔ `PurchasedMovie` collection encapsulated (no public `IList` to + mutate from outside)? +- **Modern idioms**: are the value-object candidates (`Email`, money/`Dollars`, + `ExpirationDate`, `CustomerName`) expressed as `record` / `readonly record struct` + (value equality for free) rather than classes with hand-written + `Equals`/`GetHashCode`? Are file-scoped namespaces, `init`/`required`, and nullable + reference types used? Code that achieves rich DDD but in dated NHibernate-era style + (hand-rolled value-object equality, `netcoreapp`-era boilerplate) caps this + dimension at 20 (not exemplary). Note that pulling in a `Result` / + functional-extensions library does **not** count as a "modern idiom" here and must + not lift the score — see the global note above. + +## 2. Encapsulation (0–20) + +| Score | Criteria | +|-------|----------| +| 0 | All properties still have public setters — no encapsulation | +| 5 | Some setters made private but logic still in services | +| 10 | Most business logic in domain objects, services are mostly orchestration | +| 15 | Services are thin orchestrators: load → call domain method → save | +| 20 | Full encapsulation: no way to put domain objects in invalid state from outside | + +**Key checks:** +- Are public setters removed or made private/protected on the **entities** + (`Customer`, `Movie`, `PurchasedMovie`) — within NHibernate's `virtual` + + parameterless-ctor constraint, which is acceptable and should not be penalized? +- Are the **value objects** (`Email`, `Dollars`/money, `ExpirationDate`, + `CustomerName`) genuinely immutable (`record` with `init`-only members, no public + setters) so they cannot be mutated after construction? +- Is the `PurchasedMovies` collection exposed read-only, with mutation only via a + domain method (e.g. `Customer.PurchaseMovie`)? +- Is `Customer.MoneySpent` kept consistent internally (recomputed/incremented by the + domain on purchase) rather than settable from outside? +- Do `CustomerService` / `MovieService` still contain `if`/`switch` business + logic, or has it moved into the domain (services possibly removed)? +- Can external code (the controller) bypass domain invariants — e.g. set + `Status`, `MoneySpent`, or add a `PurchasedMovie` directly? +- Are invariants guarded inside the domain via factory validation throwing a + domain-specific exception — **not** by threading a `Result` / + functional-extensions type through the model (which is forbidden and earns no + credit)? + +## 3. Architecture Compliance (0–20) + +| Score | Criteria | +|-------|----------| +| 0 | No structural changes | +| 5 | Some refactoring but mixed concerns remain | +| 10 | Clear separation: domain has no infrastructure dependencies | +| 15 | Proper layer separation, domain objects don't reference NHibernate or controllers | +| 20 | Clean architecture: domain is isolated, application orchestrates, infrastructure adapts, dependency direction is correct | + +**Key checks:** +- Does the domain layer leak persistence concerns (NHibernate attributes/usings) + or web concerns into the entities? +- Are the FluentNHibernate mappings kept in the mapping layer (not pushed into the + entities) and updated correctly for new value objects / private setters? +- Is the HTTP contract of `CustomersController` preserved while the controller + becomes a thin delegate to domain methods? +- Is the dependency direction correct (outer layers depend on inner)? + +## 4. Extensibility (0–15) + +| Score | Criteria | +|-------|----------| +| 0 | Refactoring makes future changes harder | +| 3 | No improvement to extensibility | +| 6 | Slightly easier to extend but business rules still scattered | +| 9 | Domain objects are cohesive; adding new business rules has a clear home | +| 12 | Good: aggregate boundaries are clear, new domain rules go in the right place naturally | +| 15 | Excellent: domain model is well-factored, new features require adding behavior to existing aggregates or creating new value objects, no shotgun surgery needed | + +**Key checks:** +- Are aggregate boundaries clear (Customer as the aggregate root over its + PurchasedMovies)? +- Would adding a new licensing model or a new pricing/promotion rule be a localized + change rather than edits across services, controllers, and entities? +- Are value objects (email, money, expiration date) reusable and the obvious home + for related validation? + +## 5. Test Quality (0–20) + +| Score | Criteria | +|-------|----------| +| 0 | Tests broken or removed | +| 4 | Existing tests pass but no new tests for domain behavior | +| 8 | Some tests for new domain methods but poor coverage | +| 12 | Good coverage of domain behavior, invariant enforcement tested | +| 16 | Comprehensive: domain invariants, factory methods, state transitions all tested | +| 20 | Excellent: all domain behavior tested, invalid states tested and rejected, test names express domain concepts, follows project test conventions | + +**Key checks:** +- Note: the repository ships with no test project. Reward the agent for adding one + (e.g. an xUnit/NUnit project referencing `Logic`) and not breaking the build. +- Are domain invariants tested (duplicate active purchase rejected, invalid `Email` + rejected, negative `Dollars`/money rejected, the promotion rule of ≥2 active + movies in 30 days **and** ≥$100 in the last year, price-by-licensing-model, + expired-vs-active `PurchasedMovie`)? +- Are value-object factory methods (`Email`, `Dollars`, `ExpirationDate`, + `CustomerName`) tested with valid and invalid inputs, asserting that invalid input + throws the domain-specific exception (not a `Result`-style failure object)? +- Do test names express domain concepts (e.g. + `Cannot_purchase_the_same_active_movie_twice`)? diff --git a/examples/ddd-architectural-challenges/tasks/csharp-movie-rental-anemic/environment/Dockerfile b/examples/ddd-architectural-challenges/tasks/csharp-movie-rental-anemic/environment/Dockerfile new file mode 100644 index 0000000..a8d518e --- /dev/null +++ b/examples/ddd-architectural-challenges/tasks/csharp-movie-rental-anemic/environment/Dockerfile @@ -0,0 +1,34 @@ +FROM mcr.microsoft.com/dotnet/sdk:8.0 + +RUN apt-get update && apt-get install -y \ + git \ + curl \ + wget \ + ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /app + +# Use the "dotnet6" branch: it is the SDK-style, modern-hosting port of the +# "Online Theater" sample. The default `master` branch is legacy .NET Framework +# 4.6.2 with old-style csproj + net40 NHibernate binaries, which does NOT build on +# the Linux dotnet/sdk image. The dotnet6 branch uses NuGet FluentNHibernate 3.1.0 / +# NHibernate 5.3.12 / System.Data.SqlClient — all build on Linux with no database. +RUN git clone --depth 1 --branch dotnet6 https://github.com/vkhorikov/AnemicDomainModel.git . + +# The agent works on the anemic "Before" solution. +WORKDIR /app/Before + +# Upgrade the target framework from net6.0 to net8.0. The dotnet/sdk:8.0 image +# ships only the net8.0 targeting pack, so the original net6.0 TFM would fail to +# restore. NHibernate / FluentNHibernate / Newtonsoft.Json are netstandard2.0 and +# work unchanged on net8.0. +RUN find . -name '*.csproj' -exec sed -i 's/net6\.0/net8.0/g' {} + + +# NOTE: NHibernate connects to SQL Server only at RUNTIME (SessionFactory builds a +# session lazily). Compiling and unit-testing the domain model requires NO running +# database, so the image is build-only — no SQL Server sidecar. +RUN dotnet restore OnlineTheaterBefore.sln +RUN dotnet build OnlineTheaterBefore.sln --no-restore + +CMD ["/bin/bash"] diff --git a/examples/ddd-architectural-challenges/tasks/csharp-movie-rental-anemic/instruction.md b/examples/ddd-architectural-challenges/tasks/csharp-movie-rental-anemic/instruction.md new file mode 100644 index 0000000..f613929 --- /dev/null +++ b/examples/ddd-architectural-challenges/tasks/csharp-movie-rental-anemic/instruction.md @@ -0,0 +1,66 @@ +# Task: Refactor Anemic Domain Model to Rich Domain Model + +## Context +You are working in `/app/Before`, an "Online Theater" C# movie-rental backend +(targeting **.NET 8**). It is a *Refactoring from Anemic Domain Model Towards a +Rich One* sample: customers purchase movies, accumulate spend, and can be promoted +to an Advanced status. The domain classes (`Customer`, `Movie`, `PurchasedMovie`) +are plain data containers — public getters and setters with no behavior — while +all business logic lives in application service classes (`CustomerService`, +`MovieService`). This is the classic anemic domain model anti-pattern. The codebase +originated on an older .NET version; bring the domain model up to modern standards +as you enrich it. + +Persistence is handled by NHibernate / FluentNHibernate against SQL Server; you do +**not** need a running database to complete or build the task. + +The project structure: +``` +Before/src/ + Logic/ + Entities/ # Anemic entities — just properties, no behavior + Services/ # Services containing ALL business logic + Repositories/ # NHibernate-backed repositories + Mappings/ # FluentNHibernate ClassMaps + Api/ + Controllers/ # HTTP controllers +``` + +## Requirement +Refactor the domain model from anemic to rich. Business rules currently in the +service classes (`CustomerService`, `MovieService`) must move into the domain +objects where they belong, and each entity must protect its own invariants. + +## Scope +- Modify files under `Before/src/Logic/Entities/` to add behavior and invariants + (and add new value-object types under `Logic/` where appropriate). +- Modify files under `Before/src/Logic/Services/` to remove business logic + (services become thin orchestrators, or disappear if all their logic moves into + the domain). +- Update the FluentNHibernate mappings under `Before/src/Logic/Mappings/` only as + needed to keep the model persistable. +- Do NOT change the public HTTP API (route shape, request/response JSON contract). +- Do NOT add a functional-extensions / `Result` library (e.g. + CSharpFunctionalExtensions); the starting code does not reference one. Enforce + invariants with validating factories that throw a domain-specific exception, in + plain modern C#. + +## Quality Expectations +- Domain objects enforce their own invariants — constructors and methods reject + invalid state; an entity cannot be left inconsistent from outside. +- Services contain only orchestration: load, call a domain method, save. +- Value objects are immutable with equality based on attributes. +- **Use modern C# / .NET idioms** appropriate to .NET 8 — `record` / + `readonly record struct` for value objects, `required` / `init`-only properties, + file-scoped namespaces, nullable reference types, pattern matching. Do not + preserve the legacy NHibernate-era boilerplate. Note that NHibernate requires + mapped *entity* members to be `virtual` with a (possibly protected) parameterless + constructor — honor that on the entities while still modernizing the model. + +## Success Criteria +1. The `Before` solution compiles successfully on .NET 8. +2. Domain entities contain behavior methods (not just getters/setters). +3. Service classes are thin orchestrators — no business logic in `if`/`switch` + blocks (or removed entirely). +4. At least one value object has been introduced. +5. The code reads like a modern .NET 8 codebase, not a port of a legacy app. diff --git a/examples/ddd-architectural-challenges/tasks/csharp-movie-rental-anemic/task.toml b/examples/ddd-architectural-challenges/tasks/csharp-movie-rental-anemic/task.toml new file mode 100644 index 0000000..06f3173 --- /dev/null +++ b/examples/ddd-architectural-challenges/tasks/csharp-movie-rental-anemic/task.toml @@ -0,0 +1,21 @@ +version = "1.0" + +[metadata] +name = "csharp-movie-rental-anemic" +description = "Refactor an anemic movie-rental ('Online Theater') model to a rich domain model in a C# NHibernate application" +difficulty = "intermediate" +language = "C#" +framework = ".NET" + +[agent] +timeout_sec = 1800 + +[environment] +memory_mb = 6144 + +[verifier] +timeout_sec = 300 + +[nasde.source] +git = "https://github.com/vkhorikov/AnemicDomainModel.git" +ref = "dotnet6" diff --git a/examples/ddd-architectural-challenges/tasks/csharp-movie-rental-anemic/tests/test.sh b/examples/ddd-architectural-challenges/tasks/csharp-movie-rental-anemic/tests/test.sh new file mode 100644 index 0000000..3655707 --- /dev/null +++ b/examples/ddd-architectural-challenges/tasks/csharp-movie-rental-anemic/tests/test.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +# Movie-Rental Anemic → Rich Domain Model - Verifier +# Reward semantics: compiles on modern .NET (net8.0) + tests pass (if any). +# Design quality (rich model, modern idioms) is graded by the LLM-as-judge +# against assessment_criteria.md. + +cd /app/Before + +echo "==========================================" +echo "Movie-Rental Anemic to Rich Domain Model - Verifier" +echo "==========================================" +echo "" + +echo "Step 1: Verifying solution compiles..." +echo "--------------------------------------" +if dotnet build OnlineTheaterBefore.sln --no-restore -c Release -v q 2>&1; then + echo "✓ SUCCESS: Solution compiles" + echo "" +else + echo "✗ FAILURE: Solution does not compile" + echo 0 > /logs/verifier/reward.txt + exit 1 +fi + +echo "Step 2: Verifying the Logic project targets modern .NET (net8.0)..." +echo "--------------------------------------" +if grep -qE "net8\.0" src/Logic/Logic.csproj; then + echo "✓ SUCCESS: Targets net8.0" + echo "" +else + echo "✗ FAILURE: Logic project does not target net8.0 — the solution must run on modern .NET" + echo " Found:" + grep -E " /logs/verifier/reward.txt + exit 1 +fi + +echo "==========================================" +echo "VERIFIER PASSED ✓" +echo "==========================================" +echo "" +echo "Note: this verifier only checks that the solution compiles on modern .NET." +echo "DDD design quality and idiom modernity are evaluated by the LLM-as-judge." + +echo 1 > /logs/verifier/reward.txt +exit 0 diff --git a/examples/ddd-architectural-challenges/tasks/ddd-threshold-discount/assessment_criteria.md b/examples/ddd-architectural-challenges/tasks/ddd-threshold-discount/assessment_criteria.md index dfec997..ed35282 100644 --- a/examples/ddd-architectural-challenges/tasks/ddd-threshold-discount/assessment_criteria.md +++ b/examples/ddd-architectural-challenges/tasks/ddd-threshold-discount/assessment_criteria.md @@ -4,7 +4,7 @@ Evaluate the AI-generated code across five dimensions. ## 1. Domain Modeling (0–25) -Evaluate how well the ThresholdDiscount follows DDD building blocks established by PercentageDiscount and ValueDiscount. +Evaluate how well the ThresholdDiscount follows DDD building blocks established by PercentageDiscount and ValueDiscount. Focus on whether the implementation **makes the implicit explicit** (rich domain language) — do the names of types and operations communicate intent, or are they generic primitives? | Score | Criteria | |-------|----------| @@ -22,6 +22,9 @@ Evaluate how well the ThresholdDiscount follows DDD building blocks established - Are fields `readonly` / init-only? - Does it validate percentage (0–100) and threshold (> 0)? - Is it properly integrated into the Discount discriminated union (`Apply`/`Match` methods)? +- **The menu test (Nick Tunes' tactical-ddd, principle #3)**: reading this code, would a sales-domain expert recognize the names (`ThresholdDiscount`, `Threshold`, `Apply`, `ApplyOn`) as things from their world? Or do you see programmer jargon (`Calculate`, `Process`, `Handle`, `Manager`, `Helper`)? +- **Implicit-to-explicit test (principle #6)**: is the threshold modeled as a meaningful concept (e.g. a `Money`/`Price` value object, or a clearly-named field) or smuggled as a raw `decimal`? Are method names like `Apply` returning rich types (e.g. `Price`) or primitives? +- **Value object liberality (principle #8)**: are concepts like `Threshold` and `Percentage` extracted as their own immutable value objects (or reusing existing ones like `Money`), or just bag-of-decimals on `ThresholdDiscount`? ## 2. Encapsulation (0–20) @@ -39,6 +42,8 @@ Evaluate whether business rules are contained within domain objects. - Can invalid ThresholdDiscount instances be created? - Is the "apply only when price > threshold" rule inside the domain object? - Are validation rules enforced at construction time? +- **Aggregate invariant test (principle #7)**: what must be true *at all times* for a `ThresholdDiscount` to make sense? (e.g. `0 ≤ percentage ≤ 100`, `threshold > 0`.) Are those rules enforced *inside* the object, or does the caller have to remember to check them? +- **Anemic-model test (principle #4)**: does the discount object *decide* anything (e.g. `Apply(price)` returns the result), or is it a passive data carrier where some service has to do `if (price > discount.Threshold) ...` from the outside? ## 3. Architecture Compliance (0–20) @@ -76,6 +81,7 @@ Evaluate how well the discriminated union design supports adding future discount - Does `Discount` have a third case/variant for ThresholdDiscount? - Does `Apply(Money price)` return correct result (apply only when price > threshold)? - Are pattern matching methods (`Match`, `Switch`, or C# pattern match) updated? +- **Hidden-concept test (principle #6)**: is the "apply only when price > threshold" rule encapsulated *inside* `ThresholdDiscount.ApplyOn(Money)` — so the caller just writes `discount.ApplyOn(price)` and gets back the right money — or is the rule leaked to callers as `if (price > discount.Threshold) ...`? The decision and the action belong together (principle #4, "avoid anemic"): one decision-method, not a separate `IsApplicable` flag. - Would adding a 4th discount variant be straightforward following the same pattern? ## 5. Test Quality (0–20) diff --git a/examples/ddd-architectural-challenges/tasks/ddd-threshold-discount/task.toml b/examples/ddd-architectural-challenges/tasks/ddd-threshold-discount/task.toml index 189ba24..3dbbbfc 100644 --- a/examples/ddd-architectural-challenges/tasks/ddd-threshold-discount/task.toml +++ b/examples/ddd-architectural-challenges/tasks/ddd-threshold-discount/task.toml @@ -11,7 +11,7 @@ framework = ".NET 8" timeout_sec = 1800 [environment] -memory_mb = 4096 +memory_mb = 6144 [verifier] timeout_sec = 300 diff --git a/examples/ddd-architectural-challenges/tasks/ddd-threshold-discount/tests/test.sh b/examples/ddd-architectural-challenges/tasks/ddd-threshold-discount/tests/test.sh index 0482a99..d2eaf98 100755 --- a/examples/ddd-architectural-challenges/tasks/ddd-threshold-discount/tests/test.sh +++ b/examples/ddd-architectural-challenges/tasks/ddd-threshold-discount/tests/test.sh @@ -1,11 +1,11 @@ #!/bin/bash -# DDD Threshold Discount Challenge - Test Script -# Verifies that the AI agent correctly extended the Discount discriminated union -# with a new ThresholdDiscount value object. +# DDD Threshold Discount Challenge - Verifier +# Reward semantics: compile + functional tests pass. Design quality is graded +# separately by the LLM-as-judge against assessment_criteria.md. echo "==========================================" -echo "DDD Threshold Discount - Evaluation" +echo "DDD Threshold Discount - Verifier" echo "==========================================" echo "" @@ -34,70 +34,12 @@ else exit 1 fi -echo "Step 3: Verifying ThresholdDiscount value object exists..." -echo "--------------------------------------" -if find Sources/Sales -name "ThresholdDiscount.cs" | grep -q .; then - echo "✓ SUCCESS: ThresholdDiscount.cs found" - find Sources/Sales -name "ThresholdDiscount.cs" - echo "" -else - echo "✗ FAILURE: ThresholdDiscount.cs not found under Sources/Sales" - echo "Expected a new value object file implementing the threshold discount logic." - echo 0 > /logs/verifier/reward.txt - exit 1 -fi - -echo "Step 4: Verifying ThresholdDiscount implements PriceModifier..." -echo "--------------------------------------" -if grep -r "PriceModifier" --include="ThresholdDiscount.cs" Sources/Sales/ | grep -q .; then - echo "✓ SUCCESS: ThresholdDiscount implements PriceModifier" - echo "" -else - echo "✗ FAILURE: ThresholdDiscount does not implement PriceModifier" - echo "The value object must implement the PriceModifier interface, as PercentageDiscount and ValueDiscount do." - echo 0 > /logs/verifier/reward.txt - exit 1 -fi - -echo "Step 5: Verifying Discount union has a threshold variant..." -echo "--------------------------------------" -DISCOUNT_FILE="Sources/Sales/Sales.DeepModel/Pricing/Discounts/Discount.cs" -if [ -f "$DISCOUNT_FILE" ] && grep -qi "threshold" "$DISCOUNT_FILE"; then - echo "✓ SUCCESS: Discount union references threshold variant" - echo "" -else - echo "✗ FAILURE: Discount.cs does not contain a threshold variant" - echo "The Discount discriminated union must be extended with a third variant for ThresholdDiscount." - echo 0 > /logs/verifier/reward.txt - exit 1 -fi - -echo "Step 6: Verifying tests for ThresholdDiscount exist..." -echo "--------------------------------------" -if find Sources/Sales -type d -name "*Tests*" -exec grep -r -l -i "threshold" --include="*.cs" {} + 2>/dev/null | grep -q .; then - echo "✓ SUCCESS: Test file(s) for ThresholdDiscount found" - find Sources/Sales -type d -name "*Tests*" -exec grep -r -l -i "threshold" --include="*.cs" {} + 2>/dev/null - echo "" -else - echo "✗ FAILURE: No test file found containing ThresholdDiscount tests" - echo "Tests for the new discount type are required." - echo 0 > /logs/verifier/reward.txt - exit 1 -fi - echo "==========================================" -echo "EVALUATION PASSED ✓" +echo "VERIFIER PASSED ✓" echo "==========================================" echo "" -echo "Summary:" -echo " • Project compiles successfully" -echo " • All tests pass" -echo " • ThresholdDiscount value object implemented" -echo " • Discount union extended with threshold variant" -echo " • Tests for ThresholdDiscount present" -echo "" -echo "The AI agent successfully completed the challenge!" -echo "" +echo "Note: this verifier only checks that the feature works." +echo "DDD design quality is evaluated separately by the LLM-as-judge." echo 1 > /logs/verifier/reward.txt exit 0 diff --git a/examples/ddd-architectural-challenges/tasks/ddd-weather-discount/assessment_criteria.md b/examples/ddd-architectural-challenges/tasks/ddd-weather-discount/assessment_criteria.md index 82508ca..9adf6b3 100644 --- a/examples/ddd-architectural-challenges/tasks/ddd-weather-discount/assessment_criteria.md +++ b/examples/ddd-architectural-challenges/tasks/ddd-weather-discount/assessment_criteria.md @@ -4,7 +4,7 @@ Evaluate the AI-generated code across five dimensions. ## 1. Domain Modeling (0–25) -Evaluate how well weather-related concepts are modeled using DDD building blocks. +Evaluate how well weather-related concepts are modeled using DDD building blocks. Focus on whether the implementation **isolates domain logic** and uses **rich domain language** — does `Precipitation` exist as its own concept, or does the domain just pass around a `decimal`? | Score | Criteria | |-------|----------| @@ -20,6 +20,9 @@ Evaluate how well weather-related concepts are modeled using DDD building blocks - Does the port use domain types (not `HttpResponseMessage`, `JsonElement`, etc.)? - Is discount calculation logic in a domain service or policy (not in the adapter)? - Are weather conditions modeled as value objects with proper semantics? +- **The menu test (Nick Tunes' tactical-ddd, principle #3)**: would a sales/pricing domain expert recognize the names in the domain layer (e.g. `WeatherConditions`, `Precipitation`, `RainyDayDiscount.ApplyOn(price, conditions)`) as their world? Or do you see generic developer jargon (`Manager`, `Handler`, `Service`, `Data`)? +- **Implicit-to-explicit test (principle #6)**: is `Precipitation` named as its own concept (value object with semantics like `IsPresent` / `HasRainOrSnow`), or is it smuggled through method signatures as `decimal precipitation` / `double mm`? +- **Value object liberality (principle #8)**: are weather concepts (`Precipitation`, `Temperature`, `WindSpeed`, eventually `WeatherConditions`) modeled as immutable value objects, or does the domain pass around a JSON blob / DTO of primitives? ## 2. Encapsulation (0–20) @@ -37,6 +40,7 @@ Evaluate whether business rules are contained within domain objects. - Is the "precipitation > X means discount" rule inside the domain layer? - Can callers bypass domain rules by constructing objects directly? - Are failure modes (API down) handled with domain-appropriate defaults? +- **Anemic-model test (principle #4)**: does each weather-discount type own a single decision method that *both checks and acts* (e.g. `PrecipitationDiscount.ApplyOn(Money, WeatherConditions) → Money`), or is it split into `IsApplicable(WeatherConditions): bool` + `DiscountPercentage` exposed to the caller? Splitting the decision from the action is "ask, don't tell" — and it leaks the rule into the orchestrator. ## 3. Architecture Compliance (0–20) @@ -56,6 +60,8 @@ Evaluate separation of concerns, layer isolation, and adherence to project conve - Is the adapter registered in DI container? - Is HttpClient timeout configured? - Does API failure result in "no discount" (not an exception propagating up)? +- **Isolate-domain test (principle #1, Nick's own check)**: "could a domain expert read this code? Can it be unit tested without mocks or spinning up databases?" — if reading the domain layer forces you to think about HTTP, JSON, or status codes, the isolation has failed. +- **Generic-vs-domain test (principle #5)**: retry logic, HTTP caching, JSON deserialization — would that code exist in a *completely different* business domain? If yes, it must live in infra, not domain. ## 4. Extensibility (0–15) @@ -75,6 +81,8 @@ Evaluate how easy it is to add future weather-based discounts (temperature, wind - Can a new weather discount be added by only creating a new class? - Does the weather provider support fetching multiple parameters? - Would adding UV index discount require changing existing classes? +- **Repository-shape test (principle #9, Nick's own check)**: does `IWeatherProvider` (or whatever the port is called) return a *full domain object* describing weather conditions, or does it return a thin DTO / a single primitive (`decimal precipitation`)? A leaky port that returns primitives forces every caller to re-derive the same domain concepts. +- **Generic-vs-domain extensibility test**: adding `TemperatureDiscount` should be writing a *new domain object* with its own invariants — not editing a shared "WeatherDiscountCalculator" class with `if (kind == Rain) ... else if (kind == Cold) ...`. ## 5. Test Quality (0–20) diff --git a/examples/ddd-architectural-challenges/tasks/ddd-weather-discount/task.toml b/examples/ddd-architectural-challenges/tasks/ddd-weather-discount/task.toml index eedcbfc..6e3f271 100644 --- a/examples/ddd-architectural-challenges/tasks/ddd-weather-discount/task.toml +++ b/examples/ddd-architectural-challenges/tasks/ddd-weather-discount/task.toml @@ -11,7 +11,7 @@ framework = ".NET 8" timeout_sec = 1800 [environment] -memory_mb = 4096 +memory_mb = 6144 [verifier] timeout_sec = 300 diff --git a/examples/ddd-architectural-challenges/tasks/ddd-weather-discount/tests/test.sh b/examples/ddd-architectural-challenges/tasks/ddd-weather-discount/tests/test.sh index 59e7373..be74bea 100755 --- a/examples/ddd-architectural-challenges/tasks/ddd-weather-discount/tests/test.sh +++ b/examples/ddd-architectural-challenges/tasks/ddd-weather-discount/tests/test.sh @@ -1,14 +1,15 @@ #!/bin/bash -# DDD Weather Discount Challenge - Evaluation Script -# This script verifies that the AI agent successfully implemented the weather-based discount feature +# DDD Weather Discount Challenge - Verifier +# Reward semantics: compile + functional tests pass + required API used. +# Design quality is graded separately by the LLM-as-judge against +# assessment_criteria.md. echo "==========================================" -echo "DDD Weather Discount - Evaluation" +echo "DDD Weather Discount - Verifier" echo "==========================================" echo "" -# Navigate to project directory cd /app echo "Step 1: Verifying project compiles..." @@ -18,7 +19,6 @@ if dotnet build MyCompany.ECommerce.sln --configuration Debug --no-restore; then echo "" else echo "✗ FAILURE: Project does not compile" - echo "The solution must compile successfully." echo 0 > /logs/verifier/reward.txt exit 1 fi @@ -37,48 +37,23 @@ fi echo "Step 3: Verifying Open-Meteo API integration..." echo "--------------------------------------" -# Search for the Open-Meteo API URL in the codebase -# This confirms the agent actually integrated with the required external API if grep -r "api.open-meteo.com" --include="*.cs" Sources/; then echo "" echo "✓ SUCCESS: Open-Meteo API URL found in codebase" echo "" else echo "✗ FAILURE: Open-Meteo API URL not found in codebase" - echo "Expected to find 'api.open-meteo.com' in the source code." - echo "The implementation must use the specified weather API." + echo "Task constraint: implementation must use api.open-meteo.com (Do NOT change the API URL or service)." echo 0 > /logs/verifier/reward.txt exit 1 fi -echo "Step 4: Checking for weather-related implementation..." -echo "--------------------------------------" -# Check if weather-related code exists (case-insensitive search) -# This is a soft check to see if the agent implemented something weather-related -if grep -ri "weather" --include="*.cs" Sources/Sales/ | grep -v "// " | head -5; then - echo "" - echo "✓ SUCCESS: Weather-related implementation found" - echo "" -else - echo "⚠ WARNING: No obvious weather-related code found" - echo "This may indicate the implementation is incomplete, but continuing evaluation..." - echo "" -fi - echo "==========================================" -echo "EVALUATION PASSED ✓" +echo "VERIFIER PASSED ✓" echo "==========================================" echo "" -echo "Summary:" -echo " • Project compiles successfully" -echo " • All tests pass" -echo " • Open-Meteo API integration verified" -echo " • Weather-based discount feature implemented" -echo "" -echo "The AI agent successfully completed the challenge!" -echo "" +echo "Note: this verifier only checks that the feature works and uses the required API." +echo "DDD design quality is evaluated separately by the LLM-as-judge." -# Write success reward (1 = success in Harbor) echo 1 > /logs/verifier/reward.txt - exit 0 diff --git a/examples/ddd-architectural-challenges/tasks/java-order-dispatch-domain-entities/assessment_criteria.md b/examples/ddd-architectural-challenges/tasks/java-order-dispatch-domain-entities/assessment_criteria.md deleted file mode 100644 index 5178f30..0000000 --- a/examples/ddd-architectural-challenges/tasks/java-order-dispatch-domain-entities/assessment_criteria.md +++ /dev/null @@ -1,85 +0,0 @@ -# Assessment Criteria: Java Order Dispatch Domain Entities - -Evaluate the agent's solution across five dimensions. -This task is in Java (refactoring kata) — apply Java-specific standards. - -## 1. Domain Modeling (0–25) - -| Score | Criteria | -|-------|----------| -| 0 | No changes to entities, or changes break tests | -| 5 | Minor method additions but core dispatch logic still external | -| 10 | Some dispatch-related methods on entities but incomplete encapsulation | -| 15 | Entities have meaningful dispatch behavior; most decision logic moved in; but some rules still external | -| 20 | Entities fully own dispatch decisions; service only coordinates; proper method signatures | -| 25 | Exemplary: entities have intention-revealing methods (isDispatchable, canReceive), clean collaboration between entities, no external state interrogation needed | - -**Key checks:** -- Do Order/Customer entities have methods that express dispatch-related decisions? -- Is the dispatch decision made by entities rather than by external inspection? -- Are entity methods well-named and express domain concepts? - -## 2. Encapsulation (0–20) - -| Score | Criteria | -|-------|----------| -| 0 | Entities still fully exposed via getters; no behavior moved | -| 4 | Some logic moved but getters still used externally for decisions | -| 8 | Behavior methods exist but unnecessary getters remain | -| 12 | Most decision logic inside entities; some getters removed; service is thinner | -| 16 | Getters for decision-making eliminated; entities expose behavior, not state | -| 20 | Perfect: Tell, Don't Ask principle applied; entities expose only behavior methods; no feature envy in service | - -**Key checks:** -- Have getters used only for external decision-making been removed? -- Does the service call entity methods instead of reading state? -- Is the Tell, Don't Ask principle followed? - -## 3. Architecture Compliance (0–20) - -| Score | Criteria | -|-------|----------| -| 0 | Project structure broken, files moved incorrectly | -| 4 | Structure preserved but naming inconsistencies introduced | -| 8 | Good structure but some logic placed in wrong layer | -| 12 | Proper placement: behavior in entities, coordination in service; minor style deviations | -| 16 | Follows all existing conventions; entities and service in correct packages | -| 20 | Perfect: respects existing package structure, consistent naming, no unnecessary new classes or packages | - -**Key checks:** -- Are entity behavior methods in the entity classes (not in new helper classes)? -- Is the service still in its original location? -- Does the solution avoid introducing unnecessary infrastructure? - -## 4. Extensibility (0–15) - -| Score | Criteria | -|-------|----------| -| 0 | Refactoring makes future changes harder | -| 3 | No improvement to extensibility | -| 6 | Slightly easier to add new dispatch rules but still requires modifying entities | -| 9 | New dispatch rules can be added with minimal entity changes | -| 12 | Entity methods are composable; new dispatch criteria can be combined with existing ones | -| 15 | Excellent: entity behavior methods follow SRP, new dispatch rules require only adding new methods or combining existing ones, no modification of existing logic needed | - -**Key checks:** -- Are entity methods focused (single responsibility)? -- Can new dispatch criteria be added without modifying existing methods? -- Is the service thin enough to easily extend with new workflows? - -## 5. Test Quality (0–20) - -| Score | Criteria | -|-------|----------| -| 0 | Tests broken or removed | -| 4 | Existing tests still pass but no new tests for entity behavior | -| 8 | Some tests for new entity methods but poor coverage | -| 12 | Good coverage of new entity behavior; existing tests still pass | -| 16 | Comprehensive entity behavior tests; edge cases covered; follows kata test style | -| 20 | Excellent: all new entity methods tested, edge cases covered, test names express domain concepts, existing tests untouched and passing, follows kata test conventions exactly | - -**Key checks:** -- Do existing tests still pass? -- Are new entity behavior methods tested? -- Do test names express domain concepts? -- Are edge cases covered? diff --git a/examples/ddd-architectural-challenges/tasks/java-order-dispatch-domain-entities/environment/Dockerfile b/examples/ddd-architectural-challenges/tasks/java-order-dispatch-domain-entities/environment/Dockerfile deleted file mode 100644 index e92500f..0000000 --- a/examples/ddd-architectural-challenges/tasks/java-order-dispatch-domain-entities/environment/Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -FROM maven:3.9-eclipse-temurin-17 - -RUN apt-get update && apt-get install -y \ - git \ - curl \ - wget \ - ca-certificates \ - && rm -rf /var/lib/apt/lists/* - -WORKDIR /app -RUN git clone https://github.com/gregorriegler/order-dispatch-refactoring-kata.git . && git checkout master - -# Java source is in /app/java/ — build from there -RUN cd java && mvn compile -q -B - -CMD ["/bin/bash"] diff --git a/examples/ddd-architectural-challenges/tasks/java-order-dispatch-domain-entities/instruction.md b/examples/ddd-architectural-challenges/tasks/java-order-dispatch-domain-entities/instruction.md deleted file mode 100644 index 07f5913..0000000 --- a/examples/ddd-architectural-challenges/tasks/java-order-dispatch-domain-entities/instruction.md +++ /dev/null @@ -1,44 +0,0 @@ -# Task: Move Order Dispatch Logic into Domain Entities - -## Context - -You are working in `/app`, a Java project structured as a refactoring kata. The codebase models an order dispatch system where orders are dispatched to customers based on various rules. - -The relevant project structure: -``` -src/ - main/java/ - ... — Order, Customer, and dispatch logic - test/java/ - ... — Test suite -``` - -## Requirement - -The dispatch logic currently lives in a service or procedural function that reaches into Order and Customer objects to read their state and make dispatch decisions. The domain entities are data holders with getters — the classic anemic domain model. - -Refactor the codebase so that domain entities own the dispatch decision logic: - -- **Order** should know whether it is dispatchable based on its own state (status, items, validity). -- **Customer** should know whether it can receive dispatches based on its own state (active, valid address, etc.). -- The dispatch decision should emerge from collaboration between entities, not from an external service interrogating their internal state. -- Reduce or eliminate getters that only exist to let external code make decisions that the entity itself should make. - -## Scope - -- Focus on: domain entity classes and the dispatch service/function -- Do NOT modify: test assertions (tests should still pass with same semantics) -- Preserve: all existing test behavior - -## Quality Expectations - -- Follow Java idioms used in the existing codebase -- All existing tests must continue to pass -- Keep changes focused — move logic into entities without changing the external behavior - -## Success Criteria - -1. `mvn compile` (or `gradle build`) succeeds -2. All existing tests pass -3. Domain entities have behavior methods for dispatch-related decisions -4. The dispatch service/function is thinner — it delegates to entities instead of inspecting their state diff --git a/examples/ddd-architectural-challenges/tasks/java-order-dispatch-domain-entities/task.toml b/examples/ddd-architectural-challenges/tasks/java-order-dispatch-domain-entities/task.toml deleted file mode 100644 index 3778ffa..0000000 --- a/examples/ddd-architectural-challenges/tasks/java-order-dispatch-domain-entities/task.toml +++ /dev/null @@ -1,27 +0,0 @@ -version = "1.0" - -[metadata] -language = "Java" -framework = "plain Java" -source_repo = "https://github.com/gregorriegler/order-dispatch-refactoring-kata" -diversity_axes = [ - "language:java", - "difficulty:easy", - "pattern:encapsulation", -] -name = "java-order-dispatch-domain-entities" -description = "Move order dispatch logic from service layer into domain entities in a refactoring kata" -difficulty = "easy" - -[agent] -timeout_sec = 1200 - -[environment] -memory_mb = 4096 - -[verifier] -timeout_sec = 300 - -[nasde.source] -git = "https://github.com/gregorriegler/order-dispatch-refactoring-kata.git" -ref = "master" diff --git a/examples/ddd-architectural-challenges/tasks/java-order-dispatch-domain-entities/tests/test.sh b/examples/ddd-architectural-challenges/tasks/java-order-dispatch-domain-entities/tests/test.sh deleted file mode 100755 index ee0181c..0000000 --- a/examples/ddd-architectural-challenges/tasks/java-order-dispatch-domain-entities/tests/test.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/bash - -echo "==========================================" -echo "Java Order Dispatch Domain Entities - Evaluation" -echo "==========================================" -echo "" - -cd /app/java - -echo "Step 1: Verifying project compiles..." -echo "--------------------------------------" -if mvn compile -q -B 2>/dev/null || gradle build --no-daemon -q 2>/dev/null; then - echo "✓ SUCCESS: Project compiles" - echo "" -else - echo "✗ FAILURE: Project does not compile" - echo 0 > /logs/verifier/reward.txt - exit 1 -fi - -echo "Step 2: Running tests..." -echo "--------------------------------------" -if mvn test -q -B 2>/dev/null || gradle test --no-daemon -q 2>/dev/null; then - echo "✓ SUCCESS: All tests pass" - echo "" -else - echo "✗ FAILURE: Tests failed" - echo 0 > /logs/verifier/reward.txt - exit 1 -fi - -echo "Step 3: Verifying domain entities have behavior methods..." -echo "--------------------------------------" -ENTITY_FILES=$(find src/main -name "*.java" -type f) -if echo "$ENTITY_FILES" | xargs grep -lE "(boolean (is|can|should)|void (dispatch|accept|validate|process))" 2>/dev/null | grep -q .; then - echo "✓ SUCCESS: Domain entities contain behavior methods" - echo "" -else - echo "✗ FAILURE: Domain entities lack behavior methods" - echo "Expected behavior methods like isDispatchable(), canReceive(), etc. on domain entities" - echo 0 > /logs/verifier/reward.txt - exit 1 -fi - -echo "Step 4: Verifying dispatch service delegates to entities..." -echo "--------------------------------------" -SERVICE_FILES=$(find src/main -name "*.java" -type f | xargs grep -l -i "dispatch\|service" 2>/dev/null) -if [ -n "$SERVICE_FILES" ]; then - GETTER_COUNT=$(echo "$SERVICE_FILES" | xargs grep -c "\.get[A-Z]" 2>/dev/null | awk -F: '{sum+=$2} END {print sum}') - BEHAVIOR_COUNT=$(echo "$SERVICE_FILES" | xargs grep -cE "\.(is|can|should|dispatch|accept|validate)" 2>/dev/null | awk -F: '{sum+=$2} END {print sum}') - echo "Getter calls in service: $GETTER_COUNT" - echo "Behavior method calls in service: $BEHAVIOR_COUNT" - if [ "${BEHAVIOR_COUNT:-0}" -gt 0 ]; then - echo "✓ SUCCESS: Service calls behavior methods on entities" - echo "" - else - echo "✗ FAILURE: Service does not delegate to entity behavior methods" - echo 0 > /logs/verifier/reward.txt - exit 1 - fi -else - echo "✓ INFO: No separate service file found — logic may be fully in entities" - echo "" -fi - -echo "==========================================" -echo "EVALUATION PASSED ✓" -echo "==========================================" - -echo 1 > /logs/verifier/reward.txt -exit 0 diff --git a/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-anemic-tuned/CLAUDE.md b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-anemic-tuned/CLAUDE.md new file mode 100644 index 0000000..3cf46b5 --- /dev/null +++ b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-anemic-tuned/CLAUDE.md @@ -0,0 +1,8 @@ +# Agent Instructions + +## Approach + +1. Begin by invoking the **tactical-ddd** skill (use the Skill tool) and apply its guidance throughout this task. +2. Before writing any code, explore the existing codebase to understand its architecture and conventions. +3. Follow existing architectural patterns exactly — match naming, namespaces, directory structure, and code style. +4. Write tests that match the style of existing test files. diff --git a/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-anemic-tuned/skills/tactical-ddd/SKILL.md b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-anemic-tuned/skills/tactical-ddd/SKILL.md new file mode 100644 index 0000000..a1bcf8b --- /dev/null +++ b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-anemic-tuned/skills/tactical-ddd/SKILL.md @@ -0,0 +1,548 @@ +--- +name: tactical-ddd +description: "Design, refactor, analyze, and review code by applying the principles and patterns of tactical domain-driven design. Triggers on: domain modeling, aggregate design, 'entity', 'value object', 'repository', 'bounded context', 'domain event', 'domain service', code touching domain/ directories, rich domain model discussions." +version: 1.0.0 +--- + + + + +# Tactical DDD + +Design, refactor, analyze, and review code by applying the principles and patterns of tactical domain-driven design. + +## This codebase's conventions + +This codebase targets **.NET 8**. It originated on an old .NET version and is being modernized as it +is enriched — write idiomatic modern C#, do not copy the legacy style: + +- **File-scoped namespaces** (`namespace Foo;`), not bracketed blocks. +- **Value objects as `record` / `readonly record struct`** — you get value equality, `ToString`, and + immutability for free, so do NOT hand-roll `Equals`/`GetHashCode`. Use `init`-only / `required` + members and a static factory (or a validating primary constructor) so an instance cannot exist in + an invalid state. EF Core maps these via owned types / value converters — keep a way for EF to + materialize them, but don't let EF needs dictate a mutable, ctor-less data bag. +- **Nullable reference types enabled**; use them to make "must exist" vs "may be absent" explicit + rather than relying on runtime null checks. +- **Invariants**: throw a domain-specific exception (or return a result type) from the factory / + method that enforces them — not a generic `Exception`, and not validation scattered in services. +- **Layers**: `Domain/` (entities, value objects, invariants), `Application/` (services that + orchestrate), `Controllers/` (HTTP + DTOs), `Infrastructure/` (EF Core config). Domain holds no EF + or ASP.NET references. +- Keep the public API (controllers, DTOs, endpoints) unchanged when refactoring internals. + +## Principles + +1. **Isolate domain logic** +2. **Use rich domain language** +3. **Orchestrate with use cases** +4. **Avoid anemic domain model** +5. **Separate generic concepts** +6. **Make the implicit explicit... like your life depends on it** +7. **Design aggregates around invariants** +8. **Extract immutable value objects liberally** +9. **Repositories are for loading and saving full aggregates** + +--- + +## 1. Isolate domain logic + +**What:** Domain logic is not mixed with technical code like HTTP and database transactions. + +**Why:** Easier to understand the most important part of the code, easier to validate with domain experts, easier to test and evolve, easier to plan and implement new features. + +**Test:** Could a domain expert read the code? Can the code be unit tested without mocks or spinning up databases? + +```csharp +// ❌ WRONG - domain polluted with infrastructure +class Delivery +{ + public async Task Dispatch() + { + _logger.LogInformation("Dispatching delivery {Id}", Id); // Infrastructure! + await _db.BeginTransactionAsync(); // Infrastructure! + if (_status != "ready") throw new Exception("Not ready"); + _status = "dispatched"; + await _db.SaveAsync(this); // Infrastructure! + await _db.CommitAsync(); // Infrastructure! + await _pushNotification.NotifyDriverAsync(); // Infrastructure! + } +} + +// ✅ RIGHT - isolated domain logic +class Delivery +{ + public void Dispatch() + { + if (_status != DeliveryStatus.Ready) + throw new DeliveryNotReadyError(Id); + _status = DeliveryStatus.Dispatched; + _dispatchedAt = DateTime.UtcNow; + } +} +``` + +--- + +## 2. Use rich domain language + +**What:** Names in code match exactly what domain experts say. No programmer jargon. No generic names. + +**Why:** Translation between code-speak and business-speak causes bugs. When a domain expert says "assess a claim" and the code says "ProcessEntity", someone will misunderstand something. + +**Test:** Would a domain expert recognize this name? If you'd need to translate it for them, it's wrong. + +**Common generic terms to watch for:** +- `Manager`, `Handler`, `Processor`, `Helper`, `Util` +- `Data`, `Info`, `Item` (when domain terms exist) +- `Process`, `Handle`, `Execute` (what does it actually DO?) + +```csharp +// ❌ WRONG - programmer jargon +class ClaimHandler +{ + public ProcessingResult ProcessClaimData(ClaimDto claimData) + { + return _claimProcessor.Handle(claimData); + } +} + +// ✅ RIGHT - domain language +class ClaimAssessor +{ + public AssessmentDecision AssessClaim(InsuranceClaim claim) + { + if (claim.ExceedsCoverageLimit()) + return AssessmentDecision.Deny(DenialReason.ExceedsCoverage); + return AssessmentDecision.Approve(); + } +} +``` + +--- + +## 3. Orchestrate with use cases + +**What:** A use case is a user goal—something a user would recognize as an action they can perform in your application. + +**Why:** Use cases define the entry points to your domain. They answer "what can a user do?" If something isn't a user goal, it's supporting machinery that belongs elsewhere. + +**Test (the menu test):** If you described your application's features to a user like a menu, would this be on it? + +``` +DELIVERY APP MENU: +├── Request Delivery ← Use case: user goal +├── Track Delivery ← Use case: user goal +├── Cancel Delivery ← Use case: user goal +├── Calculate ETA ← NOT a use case: internal machinery +└── Check Delivery Radius ← NOT a use case: domain rule +``` + +```csharp +// ❌ WRONG - not a user goal, this is internal machinery +// UseCases/CalculateEtaUseCase.cs +public async Task CalculateEta(DeliveryId deliveryId) +{ + var delivery = await _deliveryRepository.Find(deliveryId); + var driver = await _driverRepository.Find(delivery.DriverId); + return _routeService.EstimateArrival(driver.Location, delivery.Destination); +} + +// ✅ RIGHT - actual user goal (appears in menu) +// UseCases/CancelDeliveryUseCase.cs +public async Task CancelDelivery(DeliveryId deliveryId, CancellationReason reason) +{ + var delivery = await _deliveryRepository.Find(deliveryId); + delivery.Cancel(reason); + await _deliveryRepository.Save(delivery); +} +``` + +--- + +## 4. Avoid anemic domain model + +**What:** Domain logic lives in domain objects, not in use cases. Use cases orchestrate; domain objects decide. + +**Why:** When business rules leak into use cases, they scatter across the codebase, duplicate, and diverge. The domain becomes a dumb data carrier. + +**Test:** Is your use case making business decisions, or just coordinating? If the use case contains if/else business logic, you likely have an anemic model. + +```csharp +// ❌ WRONG - business logic in use case (anemic domain) +public async Task ConfirmDropoff(DeliveryId deliveryId, ProofPhoto photo) +{ + var delivery = await _deliveryRepository.Find(deliveryId); + + // Business rules leaked into use case! + if (delivery.Status != "in_transit") + throw new Exception("Delivery not in transit"); + if (photo == null && delivery.RequiresSignature) + throw new Exception("Proof of delivery required"); + + delivery.Status = "delivered"; + delivery.ProofPhoto = photo; + delivery.DeliveredAt = DateTime.UtcNow; + await _deliveryRepository.Save(delivery); +} + +// ✅ RIGHT - use case orchestrates, domain decides +public async Task ConfirmDropoff(DeliveryId deliveryId, ProofPhoto photo) +{ + var delivery = await _deliveryRepository.Find(deliveryId); + + delivery.ConfirmDropoff(photo); // Domain enforces the rules + + await _deliveryRepository.Save(delivery); +} +``` + +**Signs of anemic model:** +- Use cases full of if/else business logic +- Domain objects are just data with getters/setters +- Business rules duplicated across multiple use cases +- Validation logic outside the object being validated + +--- + +## 5. Separate generic concepts + +**What:** Generic capabilities that aren't specific to your domain live separately from domain-specific logic. + +**Why:** A retry mechanism, a caching layer, a validation framework—these aren't YOUR domain. Mixing them with domain logic obscures what's actually specific to your business. + +**Test:** Would this code exist in a completely different business domain? If yes, it's generic. If it's specific to YOUR business rules, it's domain. + +```csharp +// ❌ WRONG - generic retry logic mixed with domain +// Domain/DriverLocator.cs +class DriverLocator +{ + // Generic retry logic does not belong in domain! + private async Task WithRetry(Func> fn, int attempts) + { + for (var i = 0; i < attempts; i++) + { + try { return await fn(); } + catch { if (i == attempts - 1) throw; } + } + throw new Exception("Retry failed"); + } + + public Task FindAvailableDriver(Zone zone) + => WithRetry(() => SearchDriversInZone(zone), 3); + + private Task SearchDriversInZone(Zone zone) + { + // domain logic to find nearest available driver + } +} + +// ✅ RIGHT - same behavior, properly separated +// Infrastructure/Retry.cs (generic, reusable in any project) +public static class Retry +{ + public static async Task WithRetry(Func> fn, int attempts) + { + for (var i = 0; i < attempts; i++) + { + try { return await fn(); } + catch { if (i == attempts - 1) throw; } + } + throw new Exception("Retry failed"); + } +} + +// Domain/DriverLocator.cs (pure domain, no infra imports) +class DriverLocator +{ + public Task FindAvailableDriver(Zone zone) + { + // domain logic to find nearest available driver + } +} + +// UseCases/DispatchDeliveryUseCase.cs (orchestrates domain + infra) +public async Task DispatchDelivery(DeliveryId deliveryId) +{ + var delivery = await _deliveryRepository.Find(deliveryId); + var driver = await Retry.WithRetry( + () => _driverLocator.FindAvailableDriver(delivery.Zone), 3); + delivery.AssignDriver(driver); + await _deliveryRepository.Save(delivery); +} +``` + +--- + +## 6. Make the implicit explicit... like your life depends on it + +**What:** Strive for maximum expressiveness. Go as far as possible to identify and name domain concepts in code. Don't settle for "good enough"—push until the code speaks the domain fluently. + +**Why:** Maximum alignment optimizes communication between engineers and domain experts. Easier to discuss nuances and avoid misconceptions. Easier to plan and implement features and detect when the design of code is causing unnecessary friction. + +**Test:** Could you discuss this code with a domain expert without translation? Are there concepts they use that don't exist in your code? + +```csharp +// This code looks fine - isolated, uses domain terms +class Delivery +{ + public DeliveryStatus Status { get; private set; } + public Driver? Driver { get; private set; } + public DateTime? PickupTime { get; private set; } + public DateTime? DropoffTime { get; private set; } + public Photo? ProofOfDelivery { get; private set; } + + public void AssignDriver(Driver driver) + { + if (Status != DeliveryStatus.Confirmed) throw new Exception("..."); + Driver = driver; + Status = DeliveryStatus.Assigned; + } + + public void RecordPickup() + { + if (Status != DeliveryStatus.Assigned) throw new Exception("..."); + PickupTime = DateTime.UtcNow; + Status = DeliveryStatus.InTransit; + } + + public void RecordDropoff(Photo photo) + { + if (Status != DeliveryStatus.InTransit) throw new Exception("..."); + ProofOfDelivery = photo; + DropoffTime = DateTime.UtcNow; + Status = DeliveryStatus.Delivered; + } +} + +// But the TYPES can describe the domain! Each state is a distinct concept. +// Reading the types alone tells you how deliveries work. + +abstract record Delivery; + +record RequestedDelivery( // Customer placed request + Customer Customer, + Restaurant Restaurant, + IReadOnlyList Items) : Delivery; + +record ConfirmedDelivery( // Restaurant accepted + Customer Customer, + Restaurant Restaurant, + IReadOnlyList Items, + Duration EstimatedPrepTime) : Delivery; + +record AssignedDelivery( // Driver assigned, heading to restaurant + Customer Customer, + Restaurant Restaurant, + IReadOnlyList Items, + Driver Driver, // Now guaranteed to exist + Time EstimatedPickup) : Delivery; + +record InTransitDelivery( // Driver picked up, heading to customer + Customer Customer, + Restaurant Restaurant, + IReadOnlyList Items, + Driver Driver, + Time PickupTime, // Now guaranteed to exist + Time EstimatedDropoff) : Delivery; + +record DeliveredDelivery( // Complete with proof + Customer Customer, + Restaurant Restaurant, + IReadOnlyList Items, + Driver Driver, + Time PickupTime, + Time DropoffTime, // Now guaranteed to exist + Photo ProofOfDelivery) : Delivery; + +// State transitions are explicit functions +ConfirmedDelivery ConfirmDelivery(RequestedDelivery d, Duration prepTime); +AssignedDelivery AssignDriver(ConfirmedDelivery d, Driver driver); +InTransitDelivery RecordPickup(AssignedDelivery d); +DeliveredDelivery RecordDropoff(InTransitDelivery d, Photo photo); +``` + +**Smaller improvements matter too:** + +```csharp +// Extract an if statement to a named method +if (distance.Kilometers > 10 && !driver.HasLongRangeVehicle) { ... } +if (delivery.ExceedsDriverRange(driver)) { ... } + +// Name a boolean expression +var canAssign = driver.IsAvailable && driver.IsInZone(delivery.Zone) && !driver.AtCapacity; +var canAssign = driver.CanAccept(delivery); + +// Rename to use domain language +var fee = customFee ?? standardFee; +var fee = customFee ?? defaultDeliveryFee; +``` + +**Ways to increase expressiveness:** +- Model states as distinct types (Delivery with status → RequestedDelivery, ConfirmedDelivery, etc.) +- Make optional fields guaranteed at the right state (`Driver? Driver` → `Driver Driver`) +- Extract conditionals to named methods (complex if → ExceedsDriverRange) +- Rename variables to use domain language (standardFee → defaultDeliveryFee) + +--- + +## 7. Design aggregates around invariants + +**What:** An aggregate is a cluster of objects that must be consistent together. The aggregate root enforces the rules. External code cannot violate invariants. + +**Why:** Without clear boundaries, inconsistent states creep in. One piece of code updates the delivery, another updates the route, and suddenly the ETA is wrong. + +**Test:** What must be true at all times? What rules must never be broken? The objects involved in those rules form an aggregate. + +```csharp +// ❌ WRONG - no aggregate boundary, invariants violated +class Delivery +{ + public List Stops; // Exposed! + public Distance TotalDistance; +} + +// External code can break invariants +delivery.Stops.Add(new DeliveryStop(location)); +// Oops - TotalDistance is now wrong! + +// ✅ RIGHT - aggregate protects invariants +class Delivery +{ + private readonly List _stops = new(); + private Distance _totalDistance = Distance.Zero(); + + public void AddStop(Location location) + { + if (_status != DeliveryStatus.Planning) + throw new DeliveryNotModifiableError(Id); + + var previousStop = _stops[^1]; + var stop = new DeliveryStop(location); + _stops.Add(stop); + _totalDistance = _totalDistance.Add( + previousStop.DistanceTo(location)); // Invariant maintained! + } + + public void RemoveStop(StopId stopId) + { + if (_stops.Count <= 2) + throw new MinimumStopsRequiredError(Id); + + // Recalculate total distance after removal + _stops.RemoveAll(s => s.Id.Equals(stopId)); + _totalDistance = CalculateTotalDistance(); // Invariant maintained! + } + + public Distance TotalDistance => _totalDistance; +} +``` + +**Aggregate rules:** +- One root entity per aggregate +- External code accesses only through the root +- The root enforces all invariants +- Reference other aggregates by ID, not object +- Methods should operate on the same state—if they don't, split the aggregate + +--- + +## 8. Extract immutable value objects liberally + +**What:** When something is defined by its attributes (not identity), make it an immutable value object. Do this liberally—more value objects is usually better. + +**Why:** Value objects are simple. They can't change unexpectedly. They're easy to test. They make domain concepts explicit. They're also a good way to extract logic from aggregates and entities that can easily get large—keep entities focused by pulling cohesive concepts into value objects. + +**Test:** Does this need a unique ID to track it over time? No? It's probably a value object. + +```csharp +// Entity with primitives that should be a value object +class Delivery +{ + public DeliveryId Id; + public decimal FeeAmount; + public string FeeCurrency; +} + +// Extract the value object +class Delivery +{ + public DeliveryId Id; + public Money Fee; +} + +// Value object in modern .NET 8 idiom: a readonly record struct — value equality, +// ToString and immutability for free (no hand-rolled Equals/GetHashCode), with a +// validating factory so an invalid instance cannot exist. File-scoped namespace. +namespace DotNetConfPl.Refactoring.Domain; + +public readonly record struct Money +{ + public decimal Amount { get; } + public Currency Currency { get; } + + private Money(decimal amount, Currency currency) + { + Amount = amount; + Currency = currency; + } + + public static Money Of(decimal amount, Currency currency) => + amount < 0 + ? throw new DomainException("Money amount cannot be negative") + : new Money(amount, currency); + + public Money Add(Money other) => + Currency != other.Currency + ? throw new DomainException("Cannot add money in different currencies") + : new Money(Amount + other.Amount, Currency); +} +``` + +> EF Core maps a `readonly record struct` value object via an owned type or a value +> converter — keep the model expressible to EF, but don't regress to a mutable, +> ctor-less data bag just to satisfy the mapper. + +**Good candidates for value objects:** +- Money, Currency, Percentage +- DateRange, TimeSlot, Duration +- Address, Coordinates, Distance +- EmailAddress, PhoneNumber, URL +- Quantity, Weight, Temperature +- PersonName, CompanyName + +--- + +## 9. Repositories are for loading and saving full aggregates + +The job of a repository is to load and save entire aggregates - not partial aggregates or nested entities inside an aggregate. The `load` method takes an ID and returns the full aggregate. + +A repository should not exist for a domain object that is not an aggregate. Entity that is part of an aggreate -> does not have a repository. It is loaded via the aggregate root's repository. + +The `hydrate` method is used ONLY for constructing an aggregate from it's persisted state. It should not be abused for other use cases like creating new instances. Each creation flow should have a dedicated factory method, e.g. `Order.FromExisting()`, `Order.New()`, `Order.Draft()`. + +The `save` method of a repository should take the full aggregate. + +If you just want to query information to display without modifying state and applying business rules, create a separate read model object and don't use a repository. + +--- + +## Mandatory Checklist + +When designing, refactoring, analyzing, or reviewing code: + +1. [ ] Verify domain is isolated from infrastructure (no DB/HTTP/logging in domain; generic utilities in infra; domain doesn't import infra) +2. [ ] Verify names are from YOUR domain, not generic developer jargon +3. [ ] Verify use cases are intentions of users, human or automated (apply the menu test) +4. [ ] Verify business logic lives in domain objects, use cases only orchestrate +5. [ ] Verify states are modeled as distinct types where appropriate +6. [ ] Verify hidden domain concepts are extracted and named explicitly +7. [ ] Verify aggregates are designed around invariants, not naive mapping of domain nouns +8. [ ] Verify values are extracted into value objects expressing a domain concept +9. [ ] Veirfy no abuse of hydrate methods for creation scenarios. Each creation scenario must have dedicated factory method + +Do not proceed until all checks pass. diff --git a/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-anemic-tuned/variant.toml b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-anemic-tuned/variant.toml new file mode 100644 index 0000000..b4f5e2b --- /dev/null +++ b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-anemic-tuned/variant.toml @@ -0,0 +1,6 @@ +agent = "claude" +model = "claude-sonnet-4-6" + +# Repo-specific: this skill's examples reference the anemic-refactor codebase's +# conventions, so it should ONLY run against that task. --all-variants honors this. +tasks = ["csharp-anemic-to-rich-domain"] diff --git a/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-movie-tuned/CLAUDE.md b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-movie-tuned/CLAUDE.md new file mode 100644 index 0000000..3cf46b5 --- /dev/null +++ b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-movie-tuned/CLAUDE.md @@ -0,0 +1,8 @@ +# Agent Instructions + +## Approach + +1. Begin by invoking the **tactical-ddd** skill (use the Skill tool) and apply its guidance throughout this task. +2. Before writing any code, explore the existing codebase to understand its architecture and conventions. +3. Follow existing architectural patterns exactly — match naming, namespaces, directory structure, and code style. +4. Write tests that match the style of existing test files. diff --git a/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-movie-tuned/skills/tactical-ddd/SKILL.md b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-movie-tuned/skills/tactical-ddd/SKILL.md new file mode 100644 index 0000000..4bf91fd --- /dev/null +++ b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-movie-tuned/skills/tactical-ddd/SKILL.md @@ -0,0 +1,561 @@ +--- +name: tactical-ddd +description: "Design, refactor, analyze, and review code by applying the principles and patterns of tactical domain-driven design. Triggers on: domain modeling, aggregate design, 'entity', 'value object', 'repository', 'bounded context', 'domain event', 'domain service', code touching domain/ directories, rich domain model discussions." +version: 1.0.0 +--- + + + + +# Tactical DDD + +Design, refactor, analyze, and review code by applying the principles and patterns of tactical domain-driven design. + +## This codebase's conventions + +This codebase is a movie-rental backend targeting **.NET 8**, persisted with NHibernate. It originated +on an old .NET version and is being modernized as it is enriched — write idiomatic modern C#, do not +copy the legacy style: + +- **File-scoped namespaces** (`namespace Logic.Entities;`), not bracketed blocks. +- **Value objects as `record` / `readonly record struct`** — you get value equality, `ToString`, and + immutability for free, so do NOT hand-roll `Equals`/`GetHashCode`. Use `init`-only / `required` + members and a static factory (or a validating primary constructor) so an instance cannot exist in + an invalid state. +- **Do NOT introduce a functional-extensions / `Result` library** (e.g. CSharpFunctionalExtensions). + It is not referenced by the code you start from. Enforce invariants with a validating factory that + throws a domain-specific exception. Keep the dependency set as-is — adding a value-object base-class + library is exactly the kind of detour that breaks the build; stay with plain modern C#. +- **Nullable reference types enabled**; use them to make "must exist" vs "may be absent" explicit + rather than relying on runtime null checks. +- **NHibernate constraints**: entities are mapped by NHibernate, which needs `virtual` members and a + (protected/private) parameterless constructor to materialize them — add **only** those. NHibernate + does **not** require the legacy MVC/serialization attributes that the starting code carries; do not + treat them as something to be "preserved". Extract cohesive concepts into immutable `record` value + objects around the entities. +- **Strip web/serialization/validation attributes off the domain entities**: the starting `Customer` / + `Movie` / `PurchasedMovie` carry `[Required]`, `[RegularExpression]`, `[MaxLength]`, + `[JsonConverter]`, `[JsonIgnore]`, `Newtonsoft.Json`, and `System.ComponentModel.DataAnnotations` — + these are presentation/validation leaks, not domain concerns. Move validation **into** the domain + (a factory or value object that throws a domain exception); JSON shaping belongs in the API/DTO + layer, not on the entity. The domain layer must import **no** web or serialization namespace. +- **Layout**: `Logic/Entities` (domain entities), `Logic/Services` (services that orchestrate), + `Logic/Repositories` + `Logic/Mappings` (NHibernate persistence), `Api/Controllers` (HTTP + DTOs). + Keep domain logic out of services and out of the persistence/API layers. +- Keep the public API (controllers, DTOs, endpoints) unchanged when refactoring internals. + +## Principles + +1. **Isolate domain logic** +2. **Use rich domain language** +3. **Orchestrate with use cases** +4. **Avoid anemic domain model** +5. **Separate generic concepts** +6. **Make the implicit explicit... like your life depends on it** +7. **Design aggregates around invariants** +8. **Extract immutable value objects liberally** +9. **Repositories are for loading and saving full aggregates** + +--- + +## 1. Isolate domain logic + +**What:** Domain logic is not mixed with technical code like HTTP and database transactions. + +**Why:** Easier to understand the most important part of the code, easier to validate with domain experts, easier to test and evolve, easier to plan and implement new features. + +**Test:** Could a domain expert read the code? Can the code be unit tested without mocks or spinning up databases? + +```csharp +// ❌ WRONG - domain polluted with infrastructure +class Delivery +{ + public async Task Dispatch() + { + _logger.LogInformation("Dispatching delivery {Id}", Id); // Infrastructure! + await _db.BeginTransactionAsync(); // Infrastructure! + if (_status != "ready") throw new Exception("Not ready"); + _status = "dispatched"; + await _db.SaveAsync(this); // Infrastructure! + await _db.CommitAsync(); // Infrastructure! + await _pushNotification.NotifyDriverAsync(); // Infrastructure! + } +} + +// ✅ RIGHT - isolated domain logic +class Delivery +{ + public void Dispatch() + { + if (_status != DeliveryStatus.Ready) + throw new DeliveryNotReadyError(Id); + _status = DeliveryStatus.Dispatched; + _dispatchedAt = DateTime.UtcNow; + } +} +``` + +--- + +## 2. Use rich domain language + +**What:** Names in code match exactly what domain experts say. No programmer jargon. No generic names. + +**Why:** Translation between code-speak and business-speak causes bugs. When a domain expert says "assess a claim" and the code says "ProcessEntity", someone will misunderstand something. + +**Test:** Would a domain expert recognize this name? If you'd need to translate it for them, it's wrong. + +**Common generic terms to watch for:** +- `Manager`, `Handler`, `Processor`, `Helper`, `Util` +- `Data`, `Info`, `Item` (when domain terms exist) +- `Process`, `Handle`, `Execute` (what does it actually DO?) + +```csharp +// ❌ WRONG - programmer jargon +class ClaimHandler +{ + public ProcessingResult ProcessClaimData(ClaimDto claimData) + { + return _claimProcessor.Handle(claimData); + } +} + +// ✅ RIGHT - domain language +class ClaimAssessor +{ + public AssessmentDecision AssessClaim(InsuranceClaim claim) + { + if (claim.ExceedsCoverageLimit()) + return AssessmentDecision.Deny(DenialReason.ExceedsCoverage); + return AssessmentDecision.Approve(); + } +} +``` + +--- + +## 3. Orchestrate with use cases + +**What:** A use case is a user goal—something a user would recognize as an action they can perform in your application. + +**Why:** Use cases define the entry points to your domain. They answer "what can a user do?" If something isn't a user goal, it's supporting machinery that belongs elsewhere. + +**Test (the menu test):** If you described your application's features to a user like a menu, would this be on it? + +``` +DELIVERY APP MENU: +├── Request Delivery ← Use case: user goal +├── Track Delivery ← Use case: user goal +├── Cancel Delivery ← Use case: user goal +├── Calculate ETA ← NOT a use case: internal machinery +└── Check Delivery Radius ← NOT a use case: domain rule +``` + +```csharp +// ❌ WRONG - not a user goal, this is internal machinery +// UseCases/CalculateEtaUseCase.cs +public async Task CalculateEta(DeliveryId deliveryId) +{ + var delivery = await _deliveryRepository.Find(deliveryId); + var driver = await _driverRepository.Find(delivery.DriverId); + return _routeService.EstimateArrival(driver.Location, delivery.Destination); +} + +// ✅ RIGHT - actual user goal (appears in menu) +// UseCases/CancelDeliveryUseCase.cs +public async Task CancelDelivery(DeliveryId deliveryId, CancellationReason reason) +{ + var delivery = await _deliveryRepository.Find(deliveryId); + delivery.Cancel(reason); + await _deliveryRepository.Save(delivery); +} +``` + +--- + +## 4. Avoid anemic domain model + +**What:** Domain logic lives in domain objects, not in use cases. Use cases orchestrate; domain objects decide. + +**Why:** When business rules leak into use cases, they scatter across the codebase, duplicate, and diverge. The domain becomes a dumb data carrier. + +**Test:** Is your use case making business decisions, or just coordinating? If the use case contains if/else business logic, you likely have an anemic model. + +```csharp +// ❌ WRONG - business logic in use case (anemic domain) +public async Task ConfirmDropoff(DeliveryId deliveryId, ProofPhoto photo) +{ + var delivery = await _deliveryRepository.Find(deliveryId); + + // Business rules leaked into use case! + if (delivery.Status != "in_transit") + throw new Exception("Delivery not in transit"); + if (photo == null && delivery.RequiresSignature) + throw new Exception("Proof of delivery required"); + + delivery.Status = "delivered"; + delivery.ProofPhoto = photo; + delivery.DeliveredAt = DateTime.UtcNow; + await _deliveryRepository.Save(delivery); +} + +// ✅ RIGHT - use case orchestrates, domain decides +public async Task ConfirmDropoff(DeliveryId deliveryId, ProofPhoto photo) +{ + var delivery = await _deliveryRepository.Find(deliveryId); + + delivery.ConfirmDropoff(photo); // Domain enforces the rules + + await _deliveryRepository.Save(delivery); +} +``` + +**Signs of anemic model:** +- Use cases full of if/else business logic +- Domain objects are just data with getters/setters +- Business rules duplicated across multiple use cases +- Validation logic outside the object being validated + +--- + +## 5. Separate generic concepts + +**What:** Generic capabilities that aren't specific to your domain live separately from domain-specific logic. + +**Why:** A retry mechanism, a caching layer, a validation framework—these aren't YOUR domain. Mixing them with domain logic obscures what's actually specific to your business. + +**Test:** Would this code exist in a completely different business domain? If yes, it's generic. If it's specific to YOUR business rules, it's domain. + +```csharp +// ❌ WRONG - generic retry logic mixed with domain +// Domain/DriverLocator.cs +class DriverLocator +{ + // Generic retry logic does not belong in domain! + private async Task WithRetry(Func> fn, int attempts) + { + for (var i = 0; i < attempts; i++) + { + try { return await fn(); } + catch { if (i == attempts - 1) throw; } + } + throw new Exception("Retry failed"); + } + + public Task FindAvailableDriver(Zone zone) + => WithRetry(() => SearchDriversInZone(zone), 3); + + private Task SearchDriversInZone(Zone zone) + { + // domain logic to find nearest available driver + } +} + +// ✅ RIGHT - same behavior, properly separated +// Infrastructure/Retry.cs (generic, reusable in any project) +public static class Retry +{ + public static async Task WithRetry(Func> fn, int attempts) + { + for (var i = 0; i < attempts; i++) + { + try { return await fn(); } + catch { if (i == attempts - 1) throw; } + } + throw new Exception("Retry failed"); + } +} + +// Domain/DriverLocator.cs (pure domain, no infra imports) +class DriverLocator +{ + public Task FindAvailableDriver(Zone zone) + { + // domain logic to find nearest available driver + } +} + +// UseCases/DispatchDeliveryUseCase.cs (orchestrates domain + infra) +public async Task DispatchDelivery(DeliveryId deliveryId) +{ + var delivery = await _deliveryRepository.Find(deliveryId); + var driver = await Retry.WithRetry( + () => _driverLocator.FindAvailableDriver(delivery.Zone), 3); + delivery.AssignDriver(driver); + await _deliveryRepository.Save(delivery); +} +``` + +--- + +## 6. Make the implicit explicit... like your life depends on it + +**What:** Strive for maximum expressiveness. Go as far as possible to identify and name domain concepts in code. Don't settle for "good enough"—push until the code speaks the domain fluently. + +**Why:** Maximum alignment optimizes communication between engineers and domain experts. Easier to discuss nuances and avoid misconceptions. Easier to plan and implement features and detect when the design of code is causing unnecessary friction. + +**Test:** Could you discuss this code with a domain expert without translation? Are there concepts they use that don't exist in your code? + +```csharp +// This code looks fine - isolated, uses domain terms +class Delivery +{ + public DeliveryStatus Status { get; private set; } + public Driver? Driver { get; private set; } + public DateTime? PickupTime { get; private set; } + public DateTime? DropoffTime { get; private set; } + public Photo? ProofOfDelivery { get; private set; } + + public void AssignDriver(Driver driver) + { + if (Status != DeliveryStatus.Confirmed) throw new Exception("..."); + Driver = driver; + Status = DeliveryStatus.Assigned; + } + + public void RecordPickup() + { + if (Status != DeliveryStatus.Assigned) throw new Exception("..."); + PickupTime = DateTime.UtcNow; + Status = DeliveryStatus.InTransit; + } + + public void RecordDropoff(Photo photo) + { + if (Status != DeliveryStatus.InTransit) throw new Exception("..."); + ProofOfDelivery = photo; + DropoffTime = DateTime.UtcNow; + Status = DeliveryStatus.Delivered; + } +} + +// But the TYPES can describe the domain! Each state is a distinct concept. +// Reading the types alone tells you how deliveries work. + +abstract record Delivery; + +record RequestedDelivery( // Customer placed request + Customer Customer, + Restaurant Restaurant, + IReadOnlyList Items) : Delivery; + +record ConfirmedDelivery( // Restaurant accepted + Customer Customer, + Restaurant Restaurant, + IReadOnlyList Items, + Duration EstimatedPrepTime) : Delivery; + +record AssignedDelivery( // Driver assigned, heading to restaurant + Customer Customer, + Restaurant Restaurant, + IReadOnlyList Items, + Driver Driver, // Now guaranteed to exist + Time EstimatedPickup) : Delivery; + +record InTransitDelivery( // Driver picked up, heading to customer + Customer Customer, + Restaurant Restaurant, + IReadOnlyList Items, + Driver Driver, + Time PickupTime, // Now guaranteed to exist + Time EstimatedDropoff) : Delivery; + +record DeliveredDelivery( // Complete with proof + Customer Customer, + Restaurant Restaurant, + IReadOnlyList Items, + Driver Driver, + Time PickupTime, + Time DropoffTime, // Now guaranteed to exist + Photo ProofOfDelivery) : Delivery; + +// State transitions are explicit functions +ConfirmedDelivery ConfirmDelivery(RequestedDelivery d, Duration prepTime); +AssignedDelivery AssignDriver(ConfirmedDelivery d, Driver driver); +InTransitDelivery RecordPickup(AssignedDelivery d); +DeliveredDelivery RecordDropoff(InTransitDelivery d, Photo photo); +``` + +**Smaller improvements matter too:** + +```csharp +// Extract an if statement to a named method +if (distance.Kilometers > 10 && !driver.HasLongRangeVehicle) { ... } +if (delivery.ExceedsDriverRange(driver)) { ... } + +// Name a boolean expression +var canAssign = driver.IsAvailable && driver.IsInZone(delivery.Zone) && !driver.AtCapacity; +var canAssign = driver.CanAccept(delivery); + +// Rename to use domain language +var fee = customFee ?? standardFee; +var fee = customFee ?? defaultDeliveryFee; +``` + +**Ways to increase expressiveness:** +- Model states as distinct types (Delivery with status → RequestedDelivery, ConfirmedDelivery, etc.) +- Make optional fields guaranteed at the right state (`Driver? Driver` → `Driver Driver`) +- Extract conditionals to named methods (complex if → ExceedsDriverRange) +- Rename variables to use domain language (standardFee → defaultDeliveryFee) + +--- + +## 7. Design aggregates around invariants + +**What:** An aggregate is a cluster of objects that must be consistent together. The aggregate root enforces the rules. External code cannot violate invariants. + +**Why:** Without clear boundaries, inconsistent states creep in. One piece of code updates the delivery, another updates the route, and suddenly the ETA is wrong. + +**Test:** What must be true at all times? What rules must never be broken? The objects involved in those rules form an aggregate. + +```csharp +// ❌ WRONG - no aggregate boundary, invariants violated +class Delivery +{ + public List Stops; // Exposed! + public Distance TotalDistance; +} + +// External code can break invariants +delivery.Stops.Add(new DeliveryStop(location)); +// Oops - TotalDistance is now wrong! + +// ✅ RIGHT - aggregate protects invariants +class Delivery +{ + private readonly List _stops = new(); + private Distance _totalDistance = Distance.Zero(); + + public void AddStop(Location location) + { + if (_status != DeliveryStatus.Planning) + throw new DeliveryNotModifiableError(Id); + + var previousStop = _stops[^1]; + var stop = new DeliveryStop(location); + _stops.Add(stop); + _totalDistance = _totalDistance.Add( + previousStop.DistanceTo(location)); // Invariant maintained! + } + + public void RemoveStop(StopId stopId) + { + if (_stops.Count <= 2) + throw new MinimumStopsRequiredError(Id); + + // Recalculate total distance after removal + _stops.RemoveAll(s => s.Id.Equals(stopId)); + _totalDistance = CalculateTotalDistance(); // Invariant maintained! + } + + public Distance TotalDistance => _totalDistance; +} +``` + +**Aggregate rules:** +- One root entity per aggregate +- External code accesses only through the root +- The root enforces all invariants +- Reference other aggregates by ID, not object +- Methods should operate on the same state—if they don't, split the aggregate + +--- + +## 8. Extract immutable value objects liberally + +**What:** When something is defined by its attributes (not identity), make it an immutable value object. Do this liberally—more value objects is usually better. + +**Why:** Value objects are simple. They can't change unexpectedly. They're easy to test. They make domain concepts explicit. They're also a good way to extract logic from aggregates and entities that can easily get large—keep entities focused by pulling cohesive concepts into value objects. + +**Test:** Does this need a unique ID to track it over time? No? It's probably a value object. + +```csharp +// Entity with primitives that should be a value object +class Delivery +{ + public DeliveryId Id; + public decimal FeeAmount; + public string FeeCurrency; +} + +// Extract the value object +class Delivery +{ + public DeliveryId Id; + public Money Fee; +} + +// Value object in modern .NET 8 idiom: a readonly record struct — value equality, +// ToString and immutability for free (no hand-rolled Equals/GetHashCode), with a +// validating factory so an invalid instance cannot exist. File-scoped namespace. +namespace DotNetConfPl.Refactoring.Domain; + +public readonly record struct Money +{ + public decimal Amount { get; } + public Currency Currency { get; } + + private Money(decimal amount, Currency currency) + { + Amount = amount; + Currency = currency; + } + + public static Money Of(decimal amount, Currency currency) => + amount < 0 + ? throw new DomainException("Money amount cannot be negative") + : new Money(amount, currency); + + public Money Add(Money other) => + Currency != other.Currency + ? throw new DomainException("Cannot add money in different currencies") + : new Money(Amount + other.Amount, Currency); +} +``` + +> EF Core maps a `readonly record struct` value object via an owned type or a value +> converter — keep the model expressible to EF, but don't regress to a mutable, +> ctor-less data bag just to satisfy the mapper. + +**Good candidates for value objects:** +- Money, Currency, Percentage +- DateRange, TimeSlot, Duration +- Address, Coordinates, Distance +- EmailAddress, PhoneNumber, URL +- Quantity, Weight, Temperature +- PersonName, CompanyName + +--- + +## 9. Repositories are for loading and saving full aggregates + +The job of a repository is to load and save entire aggregates - not partial aggregates or nested entities inside an aggregate. The `load` method takes an ID and returns the full aggregate. + +A repository should not exist for a domain object that is not an aggregate. Entity that is part of an aggreate -> does not have a repository. It is loaded via the aggregate root's repository. + +The `hydrate` method is used ONLY for constructing an aggregate from it's persisted state. It should not be abused for other use cases like creating new instances. Each creation flow should have a dedicated factory method, e.g. `Order.FromExisting()`, `Order.New()`, `Order.Draft()`. + +The `save` method of a repository should take the full aggregate. + +If you just want to query information to display without modifying state and applying business rules, create a separate read model object and don't use a repository. + +--- + +## Mandatory Checklist + +When designing, refactoring, analyzing, or reviewing code: + +1. [ ] Verify domain is isolated from infrastructure (no DB/HTTP/logging in domain; generic utilities in infra; domain doesn't import infra) +2. [ ] Verify names are from YOUR domain, not generic developer jargon +3. [ ] Verify use cases are intentions of users, human or automated (apply the menu test) +4. [ ] Verify business logic lives in domain objects, use cases only orchestrate +5. [ ] Verify states are modeled as distinct types where appropriate +6. [ ] Verify hidden domain concepts are extracted and named explicitly +7. [ ] Verify aggregates are designed around invariants, not naive mapping of domain nouns +8. [ ] Verify values are extracted into value objects expressing a domain concept +9. [ ] Veirfy no abuse of hydrate methods for creation scenarios. Each creation scenario must have dedicated factory method + +Do not proceed until all checks pass. diff --git a/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-movie-tuned/variant.toml b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-movie-tuned/variant.toml new file mode 100644 index 0000000..bc813c4 --- /dev/null +++ b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-movie-tuned/variant.toml @@ -0,0 +1,6 @@ +agent = "claude" +model = "claude-sonnet-4-6" + +# Repo-specific: this skill's conventions are tuned to the movie-rental codebase +# (modern .NET 8 idioms). Runs ONLY against that task. +tasks = ["csharp-movie-rental-anemic"] diff --git a/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-weather-tuned/CLAUDE.md b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-weather-tuned/CLAUDE.md new file mode 100644 index 0000000..3cf46b5 --- /dev/null +++ b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-weather-tuned/CLAUDE.md @@ -0,0 +1,8 @@ +# Agent Instructions + +## Approach + +1. Begin by invoking the **tactical-ddd** skill (use the Skill tool) and apply its guidance throughout this task. +2. Before writing any code, explore the existing codebase to understand its architecture and conventions. +3. Follow existing architectural patterns exactly — match naming, namespaces, directory structure, and code style. +4. Write tests that match the style of existing test files. diff --git a/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-weather-tuned/skills/tactical-ddd/SKILL.md b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-weather-tuned/skills/tactical-ddd/SKILL.md new file mode 100644 index 0000000..e34b38f --- /dev/null +++ b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-weather-tuned/skills/tactical-ddd/SKILL.md @@ -0,0 +1,569 @@ +--- +name: tactical-ddd +description: "Design, refactor, analyze, and review code by applying the principles and patterns of tactical domain-driven design. Triggers on: domain modeling, aggregate design, 'entity', 'value object', 'repository', 'bounded context', 'domain event', 'domain service', code touching domain/ directories, rich domain model discussions." +version: 1.0.0 +--- + + + + + +# Tactical DDD + +Design, refactor, analyze, and review code by applying the principles and patterns of tactical domain-driven design. + +## Principles + +1. **Isolate domain logic** +2. **Use rich domain language** +3. **Orchestrate with use cases** +4. **Avoid anemic domain model** +5. **Separate generic concepts** +6. **Make the implicit explicit... like your life depends on it** +7. **Design aggregates around invariants** +8. **Extract immutable value objects liberally** +9. **Repositories are for loading and saving full aggregates** + +--- + +## 1. Isolate domain logic + +**What:** Domain logic is not mixed with technical code like HTTP and database transactions. + +**Why:** Easier to understand the most important part of the code, easier to validate with domain experts, easier to test and evolve, easier to plan and implement new features. + +**Test:** Could a domain expert read the code? Can the code be unit tested without mocks or spinning up databases? + +```csharp +// ❌ WRONG - domain polluted with infrastructure +public class Delivery +{ + public async Task Dispatch() + { + _logger.LogInformation("Dispatching delivery {Id}", _id); // Infrastructure! + await _db.BeginTransactionAsync(); // Infrastructure! + if (_status != DeliveryStatus.Ready) throw new InvalidOperationException("Not ready"); + _status = DeliveryStatus.Dispatched; + await _db.SaveAsync(this); // Infrastructure! + await _db.CommitAsync(); // Infrastructure! + await _pushNotification.NotifyDriver(); // Infrastructure! + } +} + +// ✅ RIGHT - isolated domain logic +public class Delivery +{ + public void Dispatch() + { + if (_status != DeliveryStatus.Ready) + throw new DeliveryNotReadyError(_id); + _status = DeliveryStatus.Dispatched; + _dispatchedAt = DateTime.UtcNow; + } +} +``` + +--- + +## 2. Use rich domain language + +**What:** Names in code match exactly what domain experts say. No programmer jargon. No generic names. + +**Why:** Translation between code-speak and business-speak causes bugs. When a domain expert says "assess a claim" and the code says "ProcessEntity", someone will misunderstand something. + +**Test:** Would a domain expert recognize this name? If you'd need to translate it for them, it's wrong. + +**Common generic terms to watch for:** +- `Manager`, `Handler`, `Processor`, `Helper`, `Util` +- `Data`, `Info`, `Item` (when domain terms exist) +- `Process`, `Handle`, `Execute` (what does it actually DO?) + +```csharp +// ❌ WRONG - programmer jargon +public class ClaimHandler +{ + public ProcessingResult ProcessClaimData(ClaimDto claimData) + => _claimProcessor.Handle(claimData); +} + +// ✅ RIGHT - domain language +[DddDomainService] +public class ClaimAssessor +{ + public AssessmentDecision AssessClaim(InsuranceClaim claim) + { + if (claim.ExceedsCoverageLimit()) + return AssessmentDecision.Deny(DenialReason.ExceedsCoverage); + return AssessmentDecision.Approve(); + } +} +``` + +--- + +## 3. Orchestrate with use cases + +**What:** A use case is a user goal—something a user would recognize as an action they can perform in your application. + +**Why:** Use cases define the entry points to your domain. They answer "what can a user do?" If something isn't a user goal, it's supporting machinery that belongs elsewhere. + +**Test (the menu test):** If you described your application's features to a user like a menu, would this be on it? + +``` +DELIVERY APP MENU: +├── Request Delivery ← Use case: user goal +├── Track Delivery ← Use case: user goal +├── Cancel Delivery ← Use case: user goal +├── Calculate ETA ← NOT a use case: internal machinery +└── Check Delivery Radius ← NOT a use case: domain rule +``` + +```csharp +// ❌ WRONG - not a user goal, this is internal machinery +// UseCases/CalculateEta.cs +public async Task CalculateEta(DeliveryId deliveryId) +{ + var delivery = await _deliveryRepository.Load(deliveryId); + var driver = await _driverRepository.Load(delivery.DriverId); + return _routeService.EstimateArrival(driver.Location, delivery.Destination); +} + +// ✅ RIGHT - actual user goal (appears in menu) +// UseCases/CancelDelivery.cs +public async Task CancelDelivery(DeliveryId deliveryId, CancellationReason reason) +{ + var delivery = await _deliveryRepository.Load(deliveryId); + delivery.Cancel(reason); + await _deliveryRepository.Save(delivery); +} +``` + +--- + +## 4. Avoid anemic domain model + +**What:** Domain logic lives in domain objects, not in use cases. Use cases orchestrate; domain objects decide. + +**Why:** When business rules leak into use cases, they scatter across the codebase, duplicate, and diverge. The domain becomes a dumb data carrier. + +**Test:** Is your use case making business decisions, or just coordinating? If the use case contains if/else business logic, you likely have an anemic model. + +```csharp +// ❌ WRONG - business logic in use case (anemic domain) +public async Task ConfirmDropoff(DeliveryId deliveryId, ProofPhoto photo) +{ + var delivery = await _deliveryRepository.Load(deliveryId); + + // Business rules leaked into use case! + if (delivery.Status != DeliveryStatus.InTransit) + throw new InvalidOperationException("Delivery not in transit"); + if (photo is null && delivery.RequiresSignature) + throw new InvalidOperationException("Proof of delivery required"); + + delivery.Status = DeliveryStatus.Delivered; + delivery.ProofPhoto = photo; + delivery.DeliveredAt = DateTime.UtcNow; + await _deliveryRepository.Save(delivery); +} + +// ✅ RIGHT - use case orchestrates, domain decides +public async Task ConfirmDropoff(DeliveryId deliveryId, ProofPhoto photo) +{ + var delivery = await _deliveryRepository.Load(deliveryId); + + delivery.ConfirmDropoff(photo); // Domain enforces the rules + + await _deliveryRepository.Save(delivery); +} +``` + +**Signs of anemic model:** +- Use cases full of if/else business logic +- Domain objects are just data with `{ get; set; }` properties +- Business rules duplicated across multiple use cases +- Validation logic outside the object being validated +- A domain object exposes `IsX()` + `DoX()` ("ask, don't tell") instead of a single decision method that both checks and acts + +--- + +## 5. Separate generic concepts + +**What:** Generic capabilities that aren't specific to your domain live separately from domain-specific logic. + +**Why:** A retry mechanism, a caching layer, a validation framework—these aren't YOUR domain. Mixing them with domain logic obscures what's actually specific to your business. + +**Test:** Would this code exist in a completely different business domain? If yes, it's generic. If it's specific to YOUR business rules, it's domain. + +```csharp +// ❌ WRONG - generic retry logic mixed with domain +// Sales.DeepModel/Delivery/DriverLocator.cs +[DddDomainService] +public class DriverLocator +{ + // Generic retry logic does not belong in domain! + private async Task WithRetry(Func> fn, int attempts) + { + for (var i = 0; i < attempts; i++) + { + try { return await fn(); } + catch { if (i == attempts - 1) throw; } + } + throw new InvalidOperationException("Retry failed"); + } + + public Task FindAvailableDriver(Zone zone) + => WithRetry(() => SearchDriversInZone(zone), 3); + + private Task SearchDriversInZone(Zone zone) { /* domain logic */ } +} + +// ✅ RIGHT - same behavior, properly separated +// Sales.Adapters/Retry/Retry.cs (generic, reusable anywhere) +public static class Retry +{ + public static async Task WithAttempts(Func> fn, int attempts) + { + for (var i = 0; i < attempts; i++) + { + try { return await fn(); } + catch { if (i == attempts - 1) throw; } + } + throw new InvalidOperationException("Retry failed"); + } +} + +// Sales.DeepModel/Delivery/DriverLocator.cs (pure domain, no infra references) +[DddDomainService] +public class DriverLocator +{ + public Task FindAvailableDriver(Zone zone) { /* domain logic */ } +} + +// UseCases/DispatchDelivery.cs (orchestrates domain + infra) +public async Task DispatchDelivery(DeliveryId deliveryId) +{ + var delivery = await _deliveryRepository.Load(deliveryId); + var driver = await Retry.WithAttempts( + () => _driverLocator.FindAvailableDriver(delivery.Zone), attempts: 3); + delivery.AssignDriver(driver); + await _deliveryRepository.Save(delivery); +} +``` + +--- + +## 6. Make the implicit explicit... like your life depends on it + +**What:** Strive for maximum expressiveness. Go as far as possible to identify and name domain concepts in code. Don't settle for "good enough"—push until the code speaks the domain fluently. + +**Why:** Maximum alignment optimizes communication between engineers and domain experts. Easier to discuss nuances and avoid misconceptions. Easier to plan and implement features and detect when the design of code is causing unnecessary friction. + +**Test:** Could you discuss this code with a domain expert without translation? Are there concepts they use that don't exist in your code? + +```csharp +// This code looks fine - isolated, uses domain terms +public class Delivery +{ + public DeliveryStatus Status { get; private set; } + public Driver? Driver { get; private set; } + public DateTime? PickupTime { get; private set; } + public DateTime? DropoffTime { get; private set; } + public Photo? ProofOfDelivery { get; private set; } + + public void AssignDriver(Driver driver) + { + if (Status != DeliveryStatus.Confirmed) throw new InvalidOperationException("..."); + Driver = driver; + Status = DeliveryStatus.Assigned; + } + + public void RecordPickup() + { + if (Status != DeliveryStatus.Assigned) throw new InvalidOperationException("..."); + PickupTime = DateTime.UtcNow; + Status = DeliveryStatus.InTransit; + } + + public void RecordDropoff(Photo photo) + { + if (Status != DeliveryStatus.InTransit) throw new InvalidOperationException("..."); + ProofOfDelivery = photo; + DropoffTime = DateTime.UtcNow; + Status = DeliveryStatus.Delivered; + } +} + +// But the TYPES can describe the domain! Each state is a distinct concept. +// Reading the types alone tells you how deliveries work. + +// Modelled as a discriminated union via readonly struct + Kind enum +// (the same pattern as Discount in this codebase: see Sources/Sales/Sales.DeepModel/Pricing/Discounts/Discount.cs) +[DddValueObject] +public readonly struct Delivery : IEquatable +{ + private readonly DeliveryKind _kind; + private readonly RequestedDelivery _requested; + private readonly ConfirmedDelivery _confirmed; + private readonly AssignedDelivery _assigned; + private readonly InTransitDelivery _inTransit; + private readonly DeliveredDelivery _delivered; + + public static Delivery Requested(Customer customer, Restaurant restaurant, IReadOnlyList items) => + new(DeliveryKind.Requested, RequestedDelivery.Of(customer, restaurant, items), + default, default, default, default); + + public Delivery Confirm(Duration estimatedPrepTime) => _kind switch + { + DeliveryKind.Requested => new(DeliveryKind.Confirmed, default, + ConfirmedDelivery.From(_requested, estimatedPrepTime), default, default, default), + _ => throw new DomainError($"Cannot confirm delivery in state {_kind}") + }; + + public Delivery AssignDriver(Driver driver) => _kind switch + { + DeliveryKind.Confirmed => new(DeliveryKind.Assigned, default, default, + AssignedDelivery.From(_confirmed, driver), default, default), + _ => throw new DomainError($"Cannot assign driver in state {_kind}") + }; + + // ... RecordPickup, RecordDropoff follow the same pattern + + private enum DeliveryKind { Requested, Confirmed, Assigned, InTransit, Delivered } +} + +// Each state is a value object holding ONLY the fields guaranteed at that state: + +[DddValueObject] +public readonly record struct RequestedDelivery( + Customer Customer, Restaurant Restaurant, IReadOnlyList Items) +{ + public static RequestedDelivery Of(Customer c, Restaurant r, IReadOnlyList i) => new(c, r, i); +} + +[DddValueObject] +public readonly record struct AssignedDelivery( + Customer Customer, Restaurant Restaurant, IReadOnlyList Items, + Driver Driver, // Now guaranteed non-null + DateTime EstimatedPickup) +{ + public static AssignedDelivery From(ConfirmedDelivery prev, Driver driver) => new( + prev.Customer, prev.Restaurant, prev.Items, driver, DateTime.UtcNow.AddMinutes(15)); +} + +[DddValueObject] +public readonly record struct DeliveredDelivery( + Customer Customer, Restaurant Restaurant, IReadOnlyList Items, + Driver Driver, + DateTime PickupTime, + DateTime DropoffTime, // Now guaranteed non-null + Photo ProofOfDelivery); // Now guaranteed non-null +``` + +**Smaller improvements matter too:** + +```csharp +// Extract an if statement to a named method +if (distance.Kilometers > 10 && !driver.HasLongRangeVehicle) { ... } +if (delivery.ExceedsDriverRange(driver)) { ... } + +// Name a boolean expression +var canAssign = driver.IsAvailable && driver.IsInZone(delivery.Zone) && !driver.AtCapacity; +var canAssign = driver.CanAccept(delivery); + +// Rename to use domain language +var fee = customFee ?? standardFee; +var fee = customFee ?? defaultDeliveryFee; +``` + +**Ways to increase expressiveness:** +- Model states as distinct types (Delivery with `Status` enum → RequestedDelivery, ConfirmedDelivery, etc. via the readonly-struct discriminated-union pattern this codebase already uses for `Discount`) +- Make optional fields guaranteed at the right state (`Driver?` → `Driver` non-null in `AssignedDelivery`) +- Extract conditionals to named methods (complex `if` → `ExceedsDriverRange`) +- Rename variables to use domain language (`standardFee` → `defaultDeliveryFee`) + +--- + +## 7. Design aggregates around invariants + +**What:** An aggregate is a cluster of objects that must be consistent together. The aggregate root enforces the rules. External code cannot violate invariants. + +**Why:** Without clear boundaries, inconsistent states creep in. One piece of code updates the delivery, another updates the route, and suddenly the ETA is wrong. + +**Test:** What must be true at all times? What rules must never be broken? The objects involved in those rules form an aggregate. + +```csharp +// ❌ WRONG - no aggregate boundary, invariants violated +public class Delivery +{ + public List Stops { get; set; } // Exposed! + public Distance TotalDistance { get; set; } +} + +// External code can break invariants +delivery.Stops.Add(new DeliveryStop(location)); +// Oops - TotalDistance is now wrong! + +// ✅ RIGHT - aggregate protects invariants +[DddAggregateRoot] +public class Delivery +{ + private readonly List _stops = new(); + private Distance _totalDistance = Distance.Zero(); + public DeliveryStatus Status { get; private set; } + + public IReadOnlyList Stops => _stops; + public Distance TotalDistance => _totalDistance; + + public void AddStop(Location location) + { + if (Status != DeliveryStatus.Planning) + throw new DeliveryNotModifiableError(_id); + + var previousStop = _stops[^1]; + var stop = new DeliveryStop(location); + _stops.Add(stop); + _totalDistance = _totalDistance.Add( + previousStop.DistanceTo(location)); // Invariant maintained! + } + + public void RemoveStop(StopId stopId) + { + if (_stops.Count <= 2) + throw new MinimumStopsRequiredError(_id); + + _stops.RemoveAll(s => s.Id.Equals(stopId)); + _totalDistance = CalculateTotalDistance(); // Invariant maintained! + } +} +``` + +**Aggregate rules:** +- One root entity per aggregate +- External code accesses only through the root +- The root enforces all invariants +- Reference other aggregates by ID, not object +- Methods should operate on the same state—if they don't, split the aggregate + +--- + +## 8. Extract immutable value objects liberally + +**What:** When something is defined by its attributes (not identity), make it an immutable value object. Do this liberally—more value objects is usually better. + +**Why:** Value objects are simple. They can't change unexpectedly. They're easy to test. They make domain concepts explicit. They're also a good way to extract logic from aggregates and entities that can easily get large—keep entities focused by pulling cohesive concepts into value objects. + +**Test:** Does this need a unique ID to track it over time? No? It's probably a value object. + +```csharp +// Entity with primitives that should be a value object +public class Delivery +{ + public DeliveryId Id { get; } + public decimal FeeAmount { get; private set; } + public string FeeCurrency { get; private set; } +} + +// Extract the value object +public class Delivery +{ + public DeliveryId Id { get; } + public Money Fee { get; private set; } +} + +// Idiomatic C# value object in this codebase: +// readonly struct, IEquatable, static factory, validating ctor, override Equals/GetHashCode. +// (See Sources/Sales/Sales.Commons/Money.cs and PercentageDiscount.cs for the canonical shape.) +[DddValueObject] +public readonly struct Money : IEquatable +{ + public decimal Amount { get; } + public Currency Currency { get; } + + public static Money Of(decimal amount, Currency currency) => new(amount, currency); + + private Money(decimal amount, Currency currency) + { + if (amount < 0) throw new DomainError("Money amount cannot be negative"); + Amount = amount; + Currency = currency; + } + + public Money Add(Money other) + { + if (Currency != other.Currency) + throw new CurrencyMismatchError(Currency, other.Currency); + return new Money(Amount + other.Amount, Currency); + } + + public bool Equals(Money other) => Amount == other.Amount && Currency == other.Currency; + public override bool Equals(object? obj) => obj is Money other && Equals(other); + public override int GetHashCode() => HashCode.Combine(Amount, Currency); + public override string ToString() => $"{Amount} {Currency}"; +} +``` + +**Good candidates for value objects:** +- `Money`, `Currency`, `Percentage` +- `DateRange`, `TimeSlot`, `Duration` +- `Address`, `Coordinates`, `Distance` +- `EmailAddress`, `PhoneNumber`, `Url` +- `Quantity`, `Weight`, `Temperature`, `Precipitation` +- `PersonName`, `CompanyName` + +--- + +## 9. Repositories are for loading and saving full aggregates + +The job of a repository is to load and save entire aggregates - not partial aggregates or nested entities inside an aggregate. The `Load` method takes an ID and returns the full aggregate. + +A repository should not exist for a domain object that is not an aggregate. An entity that is part of an aggregate → does not have a repository. It is loaded via the aggregate root's repository. + +The `Hydrate` method is used ONLY for constructing an aggregate from its persisted state. It should not be abused for other use cases like creating new instances. Each creation flow should have a dedicated factory method, e.g. `Order.FromExisting()`, `Order.New()`, `Order.Draft()`. + +The `Save` method of a repository should take the full aggregate. + +If you just want to query information to display without modifying state and applying business rules, create a separate read model object and don't use a repository. + +```csharp +// ✅ RIGHT - repository for an aggregate root, factory methods for each creation scenario +public interface IDeliveryRepository +{ + Task Load(DeliveryId id); + Task Save(Delivery delivery); +} + +public class Delivery +{ + // Hydration: reconstruct from persistence — DO NOT use for new instances + public static Delivery Hydrate(DeliveryId id, DeliveryStatus status, IReadOnlyList stops, + Distance totalDistance) => new(id, status, stops, totalDistance); + + // Creation factories — one per use case: + public static Delivery Draft(Customer customer) => new(DeliveryId.New(), DeliveryStatus.Draft, + new List(), Distance.Zero()); + + public static Delivery FromQuote(Quote quote) => new(DeliveryId.New(), DeliveryStatus.Planning, + quote.Stops, quote.TotalDistance); +} +``` + +--- + +## Mandatory Checklist + +When designing, refactoring, analyzing, or reviewing code: + +1. [ ] Verify domain is isolated from infrastructure (no DB/HTTP/logging in domain; generic utilities in infra; domain doesn't `using` infra) +2. [ ] Verify names are from YOUR domain, not generic developer jargon (`Manager`, `Handler`, `Data`, `Process`) +3. [ ] Verify use cases are intentions of users, human or automated (apply the menu test) +4. [ ] Verify business logic lives in domain objects, use cases only orchestrate. **No `IsApplicable()` + `Apply()` split** — give the domain object one decision method that both checks and acts +5. [ ] Verify states are modeled as distinct types where appropriate (readonly-struct discriminated unions; see `Discount` in this codebase) +6. [ ] Verify hidden domain concepts are extracted and named explicitly (a `decimal precipitation` should usually become a `Precipitation` value object) +7. [ ] Verify aggregates are designed around invariants, not naive mapping of domain nouns +8. [ ] Verify values are extracted into value objects expressing a domain concept (`readonly struct`, `IEquatable`, static `Of(...)` factory, validating private ctor, override `Equals`/`GetHashCode`/`ToString`) +9. [ ] Verify no abuse of hydrate methods for creation scenarios. Each creation scenario must have a dedicated factory method (`Of`, `New`, `Draft`, `FromExisting`, ...) + +Do not proceed until all checks pass. diff --git a/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-weather-tuned/variant.toml b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-weather-tuned/variant.toml new file mode 100644 index 0000000..a252d59 --- /dev/null +++ b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd-weather-tuned/variant.toml @@ -0,0 +1,6 @@ +agent = "claude" +model = "claude-sonnet-4-6" + +# Repo-specific: this skill's examples reference the DDD-starter codebase's value +# objects, so it should ONLY run against the DDD-starter tasks. --all-variants honors this. +tasks = ["ddd-weather-discount", "ddd-threshold-discount"] diff --git a/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd/CLAUDE.md b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd/CLAUDE.md index 9348af0..3cf46b5 100644 --- a/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd/CLAUDE.md +++ b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd/CLAUDE.md @@ -2,6 +2,7 @@ ## Approach -1. Before writing any code, explore the existing codebase to understand its architecture and conventions. -2. Follow existing architectural patterns exactly — match naming, namespaces, directory structure, and code style. -3. Write tests that match the style of existing test files. +1. Begin by invoking the **tactical-ddd** skill (use the Skill tool) and apply its guidance throughout this task. +2. Before writing any code, explore the existing codebase to understand its architecture and conventions. +3. Follow existing architectural patterns exactly — match naming, namespaces, directory structure, and code style. +4. Write tests that match the style of existing test files. diff --git a/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd/skills/tactical-ddd/SKILL.md b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd/skills/tactical-ddd/SKILL.md index 5a206c5..359f7c7 100644 --- a/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd/skills/tactical-ddd/SKILL.md +++ b/examples/ddd-architectural-challenges/variants/claude-ntcoding-tactical-ddd/skills/tactical-ddd/SKILL.md @@ -1,11 +1,12 @@ - - --- name: tactical-ddd description: "Design, refactor, analyze, and review code by applying the principles and patterns of tactical domain-driven design. Triggers on: domain modeling, aggregate design, 'entity', 'value object', 'repository', 'bounded context', 'domain event', 'domain service', code touching domain/ directories, rich domain model discussions." version: 1.0.0 --- + + + # Tactical DDD Design, refactor, analyze, and review code by applying the principles and patterns of tactical domain-driven design. @@ -32,29 +33,32 @@ Design, refactor, analyze, and review code by applying the principles and patter **Test:** Could a domain expert read the code? Can the code be unit tested without mocks or spinning up databases? -```typescript +```csharp // ❌ WRONG - domain polluted with infrastructure -class Delivery { - async dispatch() { - this.logger.info('Dispatching delivery', { id: this.id }) // Infrastructure! - await this.db.beginTransaction() // Infrastructure! - if (this.status !== 'ready') throw new Error('Not ready') - this.status = 'dispatched' - await this.db.save(this) // Infrastructure! - await this.db.commit() // Infrastructure! - await this.pushNotification.notifyDriver() // Infrastructure! - } +class Delivery +{ + public async Task Dispatch() + { + _logger.LogInformation("Dispatching delivery {Id}", Id); // Infrastructure! + await _db.BeginTransactionAsync(); // Infrastructure! + if (_status != "ready") throw new Exception("Not ready"); + _status = "dispatched"; + await _db.SaveAsync(this); // Infrastructure! + await _db.CommitAsync(); // Infrastructure! + await _pushNotification.NotifyDriverAsync(); // Infrastructure! + } } // ✅ RIGHT - isolated domain logic -class Delivery { - dispatch(): void { - if (this.status !== DeliveryStatus.Ready) { - throw new DeliveryNotReadyError(this.id) +class Delivery +{ + public void Dispatch() + { + if (_status != DeliveryStatus.Ready) + throw new DeliveryNotReadyError(Id); + _status = DeliveryStatus.Dispatched; + _dispatchedAt = DateTime.UtcNow; } - this.status = DeliveryStatus.Dispatched - this.dispatchedAt = new Date() - } } ``` @@ -64,31 +68,34 @@ class Delivery { **What:** Names in code match exactly what domain experts say. No programmer jargon. No generic names. -**Why:** Translation between code-speak and business-speak causes bugs. When a domain expert says "assess a claim" and the code says "processEntity", someone will misunderstand something. +**Why:** Translation between code-speak and business-speak causes bugs. When a domain expert says "assess a claim" and the code says "ProcessEntity", someone will misunderstand something. **Test:** Would a domain expert recognize this name? If you'd need to translate it for them, it's wrong. **Common generic terms to watch for:** - `Manager`, `Handler`, `Processor`, `Helper`, `Util` - `Data`, `Info`, `Item` (when domain terms exist) -- `process`, `handle`, `execute` (what does it actually DO?) +- `Process`, `Handle`, `Execute` (what does it actually DO?) -```typescript +```csharp // ❌ WRONG - programmer jargon -class ClaimHandler { - processClaimData(claimData: ClaimDTO): ProcessingResult { - return this.claimProcessor.handle(claimData) - } +class ClaimHandler +{ + public ProcessingResult ProcessClaimData(ClaimDto claimData) + { + return _claimProcessor.Handle(claimData); + } } // ✅ RIGHT - domain language -class ClaimAssessor { - assessClaim(claim: InsuranceClaim): AssessmentDecision { - if (claim.exceedsCoverageLimit()) { - return AssessmentDecision.deny(DenialReason.ExceedsCoverage) +class ClaimAssessor +{ + public AssessmentDecision AssessClaim(InsuranceClaim claim) + { + if (claim.ExceedsCoverageLimit()) + return AssessmentDecision.Deny(DenialReason.ExceedsCoverage); + return AssessmentDecision.Approve(); } - return AssessmentDecision.approve() - } } ``` @@ -111,21 +118,23 @@ DELIVERY APP MENU: └── Check Delivery Radius ← NOT a use case: domain rule ``` -```typescript +```csharp // ❌ WRONG - not a user goal, this is internal machinery -// use-cases/calculate-eta.use-case.ts -async function calculateETA(deliveryId: DeliveryId) { - const delivery = await deliveryRepository.find(deliveryId) - const driver = await driverRepository.find(delivery.driverId) - return routeService.estimateArrival(driver.location, delivery.destination) +// UseCases/CalculateEtaUseCase.cs +public async Task CalculateEta(DeliveryId deliveryId) +{ + var delivery = await _deliveryRepository.Find(deliveryId); + var driver = await _driverRepository.Find(delivery.DriverId); + return _routeService.EstimateArrival(driver.Location, delivery.Destination); } // ✅ RIGHT - actual user goal (appears in menu) -// use-cases/cancel-delivery.use-case.ts -async function cancelDelivery(deliveryId: DeliveryId, reason: CancellationReason) { - const delivery = await deliveryRepository.find(deliveryId) - delivery.cancel(reason) - await deliveryRepository.save(delivery) +// UseCases/CancelDeliveryUseCase.cs +public async Task CancelDelivery(DeliveryId deliveryId, CancellationReason reason) +{ + var delivery = await _deliveryRepository.Find(deliveryId); + delivery.Cancel(reason); + await _deliveryRepository.Save(delivery); } ``` @@ -139,32 +148,32 @@ async function cancelDelivery(deliveryId: DeliveryId, reason: CancellationReason **Test:** Is your use case making business decisions, or just coordinating? If the use case contains if/else business logic, you likely have an anemic model. -```typescript +```csharp // ❌ WRONG - business logic in use case (anemic domain) -async function confirmDropoff(deliveryId: DeliveryId, photo: ProofPhoto) { - const delivery = await deliveryRepository.find(deliveryId) - - // Business rules leaked into use case! - if (delivery.status !== 'in_transit') { - throw new Error('Delivery not in transit') - } - if (!photo && delivery.requiresSignature) { - throw new Error('Proof of delivery required') - } - - delivery.status = 'delivered' - delivery.proofPhoto = photo - delivery.deliveredAt = new Date() - await deliveryRepository.save(delivery) +public async Task ConfirmDropoff(DeliveryId deliveryId, ProofPhoto photo) +{ + var delivery = await _deliveryRepository.Find(deliveryId); + + // Business rules leaked into use case! + if (delivery.Status != "in_transit") + throw new Exception("Delivery not in transit"); + if (photo == null && delivery.RequiresSignature) + throw new Exception("Proof of delivery required"); + + delivery.Status = "delivered"; + delivery.ProofPhoto = photo; + delivery.DeliveredAt = DateTime.UtcNow; + await _deliveryRepository.Save(delivery); } // ✅ RIGHT - use case orchestrates, domain decides -async function confirmDropoff(deliveryId: DeliveryId, photo: ProofPhoto) { - const delivery = await deliveryRepository.find(deliveryId) +public async Task ConfirmDropoff(DeliveryId deliveryId, ProofPhoto photo) +{ + var delivery = await _deliveryRepository.Find(deliveryId); - delivery.confirmDropoff(photo) // Domain enforces the rules + delivery.ConfirmDropoff(photo); // Domain enforces the rules - await deliveryRepository.save(delivery) + await _deliveryRepository.Save(delivery); } ``` @@ -184,53 +193,63 @@ async function confirmDropoff(deliveryId: DeliveryId, photo: ProofPhoto) { **Test:** Would this code exist in a completely different business domain? If yes, it's generic. If it's specific to YOUR business rules, it's domain. -```typescript +```csharp // ❌ WRONG - generic retry logic mixed with domain -// domain/driver-locator.ts -class DriverLocator { - // Generic retry logic does not belong in domain! - private async withRetry(fn: () => Promise, attempts: number): Promise { - for (let i = 0; i < attempts; i++) { - try { return await fn() } - catch (e) { if (i === attempts - 1) throw e } +// Domain/DriverLocator.cs +class DriverLocator +{ + // Generic retry logic does not belong in domain! + private async Task WithRetry(Func> fn, int attempts) + { + for (var i = 0; i < attempts; i++) + { + try { return await fn(); } + catch { if (i == attempts - 1) throw; } + } + throw new Exception("Retry failed"); } - throw new Error('Retry failed') - } - async findAvailableDriver(zone: Zone): Promise { - return this.withRetry(() => this.searchDriversInZone(zone), 3) - } + public Task FindAvailableDriver(Zone zone) + => WithRetry(() => SearchDriversInZone(zone), 3); - private async searchDriversInZone(zone: Zone): Promise { - // domain logic to find nearest available driver - } + private Task SearchDriversInZone(Zone zone) + { + // domain logic to find nearest available driver + } } // ✅ RIGHT - same behavior, properly separated -// infra/retry.ts (generic, reusable in any project) -export async function withRetry(fn: () => Promise, attempts: number): Promise { - for (let i = 0; i < attempts; i++) { - try { return await fn() } - catch (e) { if (i === attempts - 1) throw e } - } - throw new Error('Retry failed') +// Infrastructure/Retry.cs (generic, reusable in any project) +public static class Retry +{ + public static async Task WithRetry(Func> fn, int attempts) + { + for (var i = 0; i < attempts; i++) + { + try { return await fn(); } + catch { if (i == attempts - 1) throw; } + } + throw new Exception("Retry failed"); + } } -// domain/driver-locator.ts (pure domain, no infra imports) -class DriverLocator { - async findAvailableDriver(zone: Zone): Promise { - // domain logic to find nearest available driver - } +// Domain/DriverLocator.cs (pure domain, no infra imports) +class DriverLocator +{ + public Task FindAvailableDriver(Zone zone) + { + // domain logic to find nearest available driver + } } -// use-cases/dispatch-delivery.ts (orchestrates domain + infra) -async function dispatchDelivery(deliveryId: DeliveryId) { - const delivery = await deliveryRepository.find(deliveryId) - const driver = await withRetry( - () => driverLocator.findAvailableDriver(delivery.zone), 3 - ) - delivery.assignDriver(driver) - await deliveryRepository.save(delivery) +// UseCases/DispatchDeliveryUseCase.cs (orchestrates domain + infra) +public async Task DispatchDelivery(DeliveryId deliveryId) +{ + var delivery = await _deliveryRepository.Find(deliveryId); + var driver = await Retry.WithRetry( + () => _driverLocator.FindAvailableDriver(delivery.Zone), 3); + delivery.AssignDriver(driver); + await _deliveryRepository.Save(delivery); } ``` @@ -244,117 +263,106 @@ async function dispatchDelivery(deliveryId: DeliveryId) { **Test:** Could you discuss this code with a domain expert without translation? Are there concepts they use that don't exist in your code? -```typescript +```csharp // This code looks fine - isolated, uses domain terms -class Delivery { - status: DeliveryStatus - driver: Driver | null - pickupTime: Date | null - dropoffTime: Date | null - proofOfDelivery: Photo | null - - assignDriver(driver: Driver): void { - if (this.status !== DeliveryStatus.Confirmed) throw new Error('...') - this.driver = driver - this.status = DeliveryStatus.Assigned - } - - recordPickup(): void { - if (this.status !== DeliveryStatus.Assigned) throw new Error('...') - this.pickupTime = new Date() - this.status = DeliveryStatus.InTransit - } - - recordDropoff(photo: Photo): void { - if (this.status !== DeliveryStatus.InTransit) throw new Error('...') - this.proofOfDelivery = photo - this.dropoffTime = new Date() - this.status = DeliveryStatus.Delivered - } -} - -// But the TYPES can describe the domain! Each state is a distinct concept. -// Reading the types alone tells you how deliveries work. - -type Delivery = - | RequestedDelivery // Customer placed request - | ConfirmedDelivery // Restaurant accepted - | AssignedDelivery // Driver assigned, heading to restaurant - | InTransitDelivery // Driver picked up, heading to customer - | DeliveredDelivery // Complete with proof - -interface RequestedDelivery { - kind: 'requested' - customer: Customer - restaurant: Restaurant - items: MenuItem[] -} +class Delivery +{ + public DeliveryStatus Status { get; private set; } + public Driver? Driver { get; private set; } + public DateTime? PickupTime { get; private set; } + public DateTime? DropoffTime { get; private set; } + public Photo? ProofOfDelivery { get; private set; } + + public void AssignDriver(Driver driver) + { + if (Status != DeliveryStatus.Confirmed) throw new Exception("..."); + Driver = driver; + Status = DeliveryStatus.Assigned; + } -interface ConfirmedDelivery { - kind: 'confirmed' - customer: Customer - restaurant: Restaurant - items: MenuItem[] - estimatedPrepTime: Duration -} + public void RecordPickup() + { + if (Status != DeliveryStatus.Assigned) throw new Exception("..."); + PickupTime = DateTime.UtcNow; + Status = DeliveryStatus.InTransit; + } -interface AssignedDelivery { - kind: 'assigned' - customer: Customer - restaurant: Restaurant - items: MenuItem[] - driver: Driver // Now guaranteed to exist - estimatedPickup: Time + public void RecordDropoff(Photo photo) + { + if (Status != DeliveryStatus.InTransit) throw new Exception("..."); + ProofOfDelivery = photo; + DropoffTime = DateTime.UtcNow; + Status = DeliveryStatus.Delivered; + } } -interface InTransitDelivery { - kind: 'in_transit' - customer: Customer - restaurant: Restaurant - items: MenuItem[] - driver: Driver - pickupTime: Time // Now guaranteed to exist - estimatedDropoff: Time -} +// But the TYPES can describe the domain! Each state is a distinct concept. +// Reading the types alone tells you how deliveries work. -interface DeliveredDelivery { - kind: 'delivered' - customer: Customer - restaurant: Restaurant - items: MenuItem[] - driver: Driver - pickupTime: Time - dropoffTime: Time // Now guaranteed to exist - proofOfDelivery: Photo // Now guaranteed to exist -} +abstract record Delivery; + +record RequestedDelivery( // Customer placed request + Customer Customer, + Restaurant Restaurant, + IReadOnlyList Items) : Delivery; + +record ConfirmedDelivery( // Restaurant accepted + Customer Customer, + Restaurant Restaurant, + IReadOnlyList Items, + Duration EstimatedPrepTime) : Delivery; + +record AssignedDelivery( // Driver assigned, heading to restaurant + Customer Customer, + Restaurant Restaurant, + IReadOnlyList Items, + Driver Driver, // Now guaranteed to exist + Time EstimatedPickup) : Delivery; + +record InTransitDelivery( // Driver picked up, heading to customer + Customer Customer, + Restaurant Restaurant, + IReadOnlyList Items, + Driver Driver, + Time PickupTime, // Now guaranteed to exist + Time EstimatedDropoff) : Delivery; + +record DeliveredDelivery( // Complete with proof + Customer Customer, + Restaurant Restaurant, + IReadOnlyList Items, + Driver Driver, + Time PickupTime, + Time DropoffTime, // Now guaranteed to exist + Photo ProofOfDelivery) : Delivery; // State transitions are explicit functions -function confirmDelivery(d: RequestedDelivery, prepTime: Duration): ConfirmedDelivery -function assignDriver(d: ConfirmedDelivery, driver: Driver): AssignedDelivery -function recordPickup(d: AssignedDelivery): InTransitDelivery -function recordDropoff(d: InTransitDelivery, photo: Photo): DeliveredDelivery +ConfirmedDelivery ConfirmDelivery(RequestedDelivery d, Duration prepTime); +AssignedDelivery AssignDriver(ConfirmedDelivery d, Driver driver); +InTransitDelivery RecordPickup(AssignedDelivery d); +DeliveredDelivery RecordDropoff(InTransitDelivery d, Photo photo); ``` **Smaller improvements matter too:** -```typescript +```csharp // Extract an if statement to a named method -if (distance.kilometers > 10 && !driver.hasLongRangeVehicle) { ... } -if (delivery.exceedsDriverRange(driver)) { ... } +if (distance.Kilometers > 10 && !driver.HasLongRangeVehicle) { ... } +if (delivery.ExceedsDriverRange(driver)) { ... } // Name a boolean expression -const canAssign = driver.isAvailable && driver.isInZone(delivery.zone) && !driver.atCapacity -const canAssign = driver.canAccept(delivery) +var canAssign = driver.IsAvailable && driver.IsInZone(delivery.Zone) && !driver.AtCapacity; +var canAssign = driver.CanAccept(delivery); // Rename to use domain language -const fee = customFee ?? standardFee -const fee = customFee ?? defaultDeliveryFee +var fee = customFee ?? standardFee; +var fee = customFee ?? defaultDeliveryFee; ``` **Ways to increase expressiveness:** - Model states as distinct types (Delivery with status → RequestedDelivery, ConfirmedDelivery, etc.) -- Make optional fields guaranteed at the right state (driver: Driver | null → driver: Driver) -- Extract conditionals to named methods (complex if → exceedsDriverRange) +- Make optional fields guaranteed at the right state (`Driver? Driver` → `Driver Driver`) +- Extract conditionals to named methods (complex if → ExceedsDriverRange) - Rename variables to use domain language (standardFee → defaultDeliveryFee) --- @@ -367,46 +375,47 @@ const fee = customFee ?? defaultDeliveryFee **Test:** What must be true at all times? What rules must never be broken? The objects involved in those rules form an aggregate. -```typescript +```csharp // ❌ WRONG - no aggregate boundary, invariants violated -class Delivery { - stops: DeliveryStop[] // Exposed! - totalDistance: Distance +class Delivery +{ + public List Stops; // Exposed! + public Distance TotalDistance; } // External code can break invariants -delivery.stops.push(new DeliveryStop(location)) -// Oops - totalDistance is now wrong! +delivery.Stops.Add(new DeliveryStop(location)); +// Oops - TotalDistance is now wrong! // ✅ RIGHT - aggregate protects invariants -class Delivery { - private stops: DeliveryStop[] = [] - private _totalDistance: Distance = Distance.zero() - - addStop(location: Location): void { - if (this.status !== DeliveryStatus.Planning) { - throw new DeliveryNotModifiableError(this.id) +class Delivery +{ + private readonly List _stops = new(); + private Distance _totalDistance = Distance.Zero(); + + public void AddStop(Location location) + { + if (_status != DeliveryStatus.Planning) + throw new DeliveryNotModifiableError(Id); + + var previousStop = _stops[^1]; + var stop = new DeliveryStop(location); + _stops.Add(stop); + _totalDistance = _totalDistance.Add( + previousStop.DistanceTo(location)); // Invariant maintained! } - const previousStop = this.stops[this.stops.length - 1] - const stop = new DeliveryStop(location) - this.stops.push(stop) - this._totalDistance = this._totalDistance.add( - previousStop.distanceTo(location) // Invariant maintained! - ) - } - - removeStop(stopId: StopId): void { - if (this.stops.length <= 2) { - throw new MinimumStopsRequiredError(this.id) + + public void RemoveStop(StopId stopId) + { + if (_stops.Count <= 2) + throw new MinimumStopsRequiredError(Id); + + // Recalculate total distance after removal + _stops.RemoveAll(s => s.Id.Equals(stopId)); + _totalDistance = CalculateTotalDistance(); // Invariant maintained! } - // Recalculate total distance after removal - this.stops = this.stops.filter(s => !s.id.equals(stopId)) - this._totalDistance = this.calculateTotalDistance() // Invariant maintained! - } - - get totalDistance(): Distance { - return this._totalDistance - } + + public Distance TotalDistance => _totalDistance; } ``` @@ -427,36 +436,42 @@ class Delivery { **Test:** Does this need a unique ID to track it over time? No? It's probably a value object. -```typescript +```csharp // Entity with primitives that should be a value object -class Delivery { - id: DeliveryId - feeAmount: number - feeCurrency: string +class Delivery +{ + public DeliveryId Id; + public decimal FeeAmount; + public string FeeCurrency; } // Extract the value object -class Delivery { - id: DeliveryId - fee: Money +class Delivery +{ + public DeliveryId Id; + public Money Fee; } -class Money { - constructor( - readonly amount: number, - readonly currency: Currency - ) {} +class Money +{ + public decimal Amount { get; } + public Currency Currency { get; } + + public Money(decimal amount, Currency currency) + { + Amount = amount; + Currency = currency; + } - add(other: Money): Money { - if (this.currency !== other.currency) { - throw new CurrencyMismatchError(this.currency, other.currency) + public Money Add(Money other) + { + if (Currency != other.Currency) + throw new CurrencyMismatchError(Currency, other.Currency); + return new Money(Amount + other.Amount, Currency); } - return new Money(this.amount + other.amount, this.currency) - } - equals(other: Money): boolean { - return this.amount === other.amount && this.currency === other.currency - } + public bool Equals(Money other) + => Amount == other.Amount && Currency == other.Currency; } ``` @@ -476,7 +491,7 @@ The job of a repository is to load and save entire aggregates - not partial aggr A repository should not exist for a domain object that is not an aggregate. Entity that is part of an aggreate -> does not have a repository. It is loaded via the aggregate root's repository. -The `hydrate` method is used ONLY for constructing an aggregate from it's persisted state. It should not be abused for other use cases like creating new instances. Each creation flow should have a dedicated factory method, e.g. `Order.fromExisting()`, `Order.new()`, `Order.draft()`. +The `hydrate` method is used ONLY for constructing an aggregate from it's persisted state. It should not be abused for other use cases like creating new instances. Each creation flow should have a dedicated factory method, e.g. `Order.FromExisting()`, `Order.New()`, `Order.Draft()`. The `save` method of a repository should take the full aggregate. diff --git a/examples/ddd-architectural-challenges/variants/codex-ntcoding-tactical-ddd/AGENTS.md b/examples/ddd-architectural-challenges/variants/codex-ntcoding-tactical-ddd/AGENTS.md index 9348af0..306feff 100644 --- a/examples/ddd-architectural-challenges/variants/codex-ntcoding-tactical-ddd/AGENTS.md +++ b/examples/ddd-architectural-challenges/variants/codex-ntcoding-tactical-ddd/AGENTS.md @@ -2,6 +2,7 @@ ## Approach -1. Before writing any code, explore the existing codebase to understand its architecture and conventions. -2. Follow existing architectural patterns exactly — match naming, namespaces, directory structure, and code style. -3. Write tests that match the style of existing test files. +1. Begin by consulting the **tactical-ddd** skill and apply its guidance throughout this task. +2. Before writing any code, explore the existing codebase to understand its architecture and conventions. +3. Follow existing architectural patterns exactly — match naming, namespaces, directory structure, and code style. +4. Write tests that match the style of existing test files. diff --git a/examples/ddd-architectural-challenges/variants/gemini-ntcoding-tactical-ddd/GEMINI.md b/examples/ddd-architectural-challenges/variants/gemini-ntcoding-tactical-ddd/GEMINI.md index 9348af0..306feff 100644 --- a/examples/ddd-architectural-challenges/variants/gemini-ntcoding-tactical-ddd/GEMINI.md +++ b/examples/ddd-architectural-challenges/variants/gemini-ntcoding-tactical-ddd/GEMINI.md @@ -2,6 +2,7 @@ ## Approach -1. Before writing any code, explore the existing codebase to understand its architecture and conventions. -2. Follow existing architectural patterns exactly — match naming, namespaces, directory structure, and code style. -3. Write tests that match the style of existing test files. +1. Begin by consulting the **tactical-ddd** skill and apply its guidance throughout this task. +2. Before writing any code, explore the existing codebase to understand its architecture and conventions. +3. Follow existing architectural patterns exactly — match naming, namespaces, directory structure, and code style. +4. Write tests that match the style of existing test files.