Rulealize.RuleSet.Checklist
1.0.0
dotnet add package Rulealize.RuleSet.Checklist --version 1.0.0
NuGet\Install-Package Rulealize.RuleSet.Checklist -Version 1.0.0
<PackageReference Include="Rulealize.RuleSet.Checklist" Version="1.0.0" />
<PackageVersion Include="Rulealize.RuleSet.Checklist" Version="1.0.0" />
<PackageReference Include="Rulealize.RuleSet.Checklist" />
paket add Rulealize.RuleSet.Checklist --version 1.0.0
#r "nuget: Rulealize.RuleSet.Checklist, 1.0.0"
#:package Rulealize.RuleSet.Checklist@1.0.0
#addin nuget:?package=Rulealize.RuleSet.Checklist&version=1.0.0
#tool nuget:?package=Rulealize.RuleSet.Checklist&version=1.0.0
Rulealize.RuleSet.Checklist
Named steps, each done once, and an ending when none are left — a Rulealize rule set written to be held.
| Rule set id | Rulealize.RuleSet.Checklist |
| Package | Rulealize.RuleSet.Checklist |
| Inputs | complete |
| Holds | nothing |
| Draws on | TypeSchema, State, Comparison, Logic, Binding, Definition, Sequence |
"uses": [
{ "ruleSet": "Rulealize.RuleSet.Checklist", "version": "^1.0", "as": "steps" }
]
as is not optional. An alias defaults to the identifier and may not contain a ., so an
entry that leaves it out is refused, with a message about a key you did not write.
What the steps are is not in this document
A rule set that knew about "collect the passport" is a rule set that describes one company. This one describes the shape and takes the list:
"steps": {
"ruleSet": "Rulealize.RuleSet.Checklist@1.0.0",
"data": {
"steps": ["contract", "equipment", "induction", "payroll"],
"done": ["contract"]
}
}
done keeps them in the order they were done, because a checklist that only knew whether
it was finished would throw away the one thing an audit wants.
A step nobody listed is not a step. The domain is the open steps, so complete can only
ever name one out of steps. There is nothing to validate and no error to write.
Any order, deliberately
Every open step is offered at once. A checklist with a fixed order is a different thing — that
one is a pipeline — and a holder that needs some order writes it in held, where the guard
sees the rest of its own state and this document's at once:
"held": {
"steps": {
"complete": {
"when": {
"op": "logic.or",
"any": [
{ "op": "cmp.ne", "left": "@step", "right": "equipment" },
{ "op": "cmp.eq", "left": "$invoicePaid", "right": true }
]
}
}
}
}
No equipment before the invoice is paid. That is a rule about two documents, and this one has never heard of an invoice — which is exactly why it is written where both are in scope.
What a holder gets
rec.at($steps, "steps") |
everything that has to be done |
rec.at($steps, "done") |
what has been, in order |
and held sees the candidate as @step.
An empty checklist is finished. Nothing to do and therefore terminal on the first question anybody asks it — which is the answer a holder inherits until its state document says otherwise.
Where it fits
| The steps are | and the holder |
|---|---|
| onboarding tasks | opens the account when they are done |
| a closing procedure | files the return |
| a release runbook | tags the version |
| documents a claim needs | pays it |
Trying it
Needs Rulealize.Cli:
dotnet tool install -g Rulealize.Cli.
rulealize restore src/Rulealize.RuleSet.Checklist/ruleset/checklist.json
rulealize play src/Rulealize.RuleSet.Checklist/ruleset/checklist.json --state state/example.json
contract is already done, so three are offered. Take all three and it ends done. Nothing
you complete is ever offered again.
Building the package
dotnet pack src/Rulealize.RuleSet.Checklist -c Release
A package with no lib folder, holding this one document under ruleset/.
What each property in the project file is for.
License
Apache-2.0, and it covers the document as much as everything else here.
Learn more about Target Frameworks and .NET Standard.
This package has no dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 155 | 8/30/2026 |