JustDummies.Cli 1.1.0-beta.3

This is a prerelease version of JustDummies.Cli.
dotnet tool install --global JustDummies.Cli --version 1.1.0-beta.3
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local JustDummies.Cli --version 1.1.0-beta.3
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=JustDummies.Cli&version=1.1.0-beta.3&prerelease
                    
nuke :add-package JustDummies.Cli --version 1.1.0-beta.3
                    

dum — the JustDummies scaffolder

dum writes the dummy generator for one of your types, once, as ordinary code you own and edit. It is not a source generator and it does not run at build time: it reads your compilation, emits a file, and gets out of the way.

dotnet tool install --global JustDummies.Cli
dum generate Order

What it produces

Run from your test project — that is where the file belongs, and where the type is reachable from:

$ dum generate Order

Analyzing Shop.Domain.Order
  constructor Order(OrderReference, Customer, int, OrderStatus, IReadOnlyList<string>, DateTime)

  reference  OrderReference         Any.String().NonEmpty().As(OrderReference.Create)  factory, guard
  customer   Customer               —                                                  TODO
  quantity   int                    Any.Int32().Positive()                             guard
  status     OrderStatus            Any.Enum<OrderStatus>()
  tags       IReadOnlyList<string>  Any.ListOf(Any.String().NonEmpty())
  placedAt   DateTime               Any.DateTime()

✓ AnyOrder.cs — 5 of 6 parameters inferred, 1 TODO.
  The file will not compile until you resolve it. That is deliberate.

AnyOrder.cs is a partial class implementing IAny<Order>, with a With… method per constructor parameter. It is yours from that moment: read it, edit it, commit it. Re-running with --force overwrites it.

What the right-hand column means

It is the point of the recap, not decoration — it says what was inferred and what was guessed:

Word Meaning
(empty) straight from the base table for that type
guard a constructor guard tightened it (quantity <= 0.Positive())
factory composed through a static factory (.As(OrderReference.Create))
AnyX a generator you already scaffolded was reused
TODO nothing could be inferred; the file names what to do
unavailable the generator exists in JustDummies but not in the asset your project resolves

customer above is open because AnyCustomer does not exist yet. Scaffold it, rebuild, re-run with --force, and the line closes to new AnyCustomer(). That two-step is the intended way through a graph of aggregates.

A TODO is not a failure. The tool emits an identifier that does not exist, so your own build reports what it could not infer, at the exact line, with the type in hand. A generator that quietly drew a plausible value there would be far worse.

Reaching it as Any.Order()

new AnyOrder() always works. If you would rather the arrange block read alike throughout — Any.Int32() on one line and Any.Order() on the next — ask for an entry point, and a second file lands beside the generator:

dum generate Order --entry-point any               # Any.Order()      needs C# 14
dum generate Order --entry-point static:Dummies    # Dummies.Order()  needs nothing

AnyOrder.cs is byte-identical either way, so nothing about the generator changes. Below C# 14 the first form is refused rather than quietly swapped for the second.

Reporting to a script

A file written with open TODOs is a success, so the exit code reads the same whether every parameter resolved or a third of them did not. --format json says which — one JSON document on stdout, with summary.openParameters and a row per parameter. The exit codes are unchanged; this adds a channel.

Setting defaults once

Options that describe the project rather than the invocation go in a dum.json beside the project file — output, namespace, entryPoint, entryPointNamespace, format. The command line always wins over it, and a key it does not read is refused rather than ignored.

Options

Option Default Meaning
--project <path> the single *.csproj in the current directory project whose compilation is analyzed
--output <dir> the current directory where the file is written
--namespace <ns> the target type's namespace namespace of the emitted type
--entry-point <v> none also emit an entry point: none, static:<Name> or any
--entry-point-namespace <ns> the emitted type's namespace namespace of the entry-point file alone
--force off overwrite an existing file — both files, where there are two
--dry-run off print the file to stdout; write nothing
--format <f> human how the run reports itself: human or json

dum generate Order Customer Invoice scaffolds several; they are processed independently, and the exit code is the worst of them. Exit 0 is a file written (TODOs and all), 1 a scaffolding run that failed, 2 an instruction the tool could not read — a command line, or a dum.json.

It never references JustDummies

The tool resolves every library symbol by name against your compilation, and declares no dependency on the library. So the tool and the library version independently, and dum will not drag a JustDummies upgrade into your project — if a generator does not exist in the asset you resolve, it says so rather than emitting a call that will not compile.

Requires

The JustDummies package in the project being analyzed — without it nothing can be resolved, and dum says so. The tool itself targets .NET 8 and rolls forward, so any newer runtime you have installed will run it.

Credits

The package icon is a crash-test dummy by Magnific, from Flaticon.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last Updated
1.1.0-beta.3 124 8/24/2026
1.1.0-beta.2 128 8/22/2026
1.1.0-beta.1 70 8/13/2026
1.0.0-beta.1 595 8/10/2026