Rulealize.Plugin.Secret
1.0.0
dotnet add package Rulealize.Plugin.Secret --version 1.0.0
NuGet\Install-Package Rulealize.Plugin.Secret -Version 1.0.0
<PackageReference Include="Rulealize.Plugin.Secret" Version="1.0.0" />
<PackageVersion Include="Rulealize.Plugin.Secret" Version="1.0.0" />
<PackageReference Include="Rulealize.Plugin.Secret" />
paket add Rulealize.Plugin.Secret --version 1.0.0
#r "nuget: Rulealize.Plugin.Secret, 1.0.0"
#:package Rulealize.Plugin.Secret@1.0.0
#addin nuget:?package=Rulealize.Plugin.Secret&version=1.0.0
#tool nuget:?package=Rulealize.Plugin.Secret&version=1.0.0
Rulealize.Plugin.Secret
Choices that are made but not yet shown, for Rulealize rule sets.
| Plugin id | Rulealize.Plugin.Secret |
| Namespace | secret |
| Reserved prefix | none |
| Depends on | Rulealize.Abstraction |
| Specification | doc/specification.md |
secret.of declares a field holding one sealed value per owner; secret.seal puts one in,
secret.waiting says who has not, secret.all says when everybody has, secret.open reads
one back and secret.clear ends the round.
// Rock, paper, scissors — both sides choose, then the round resolves.
"state": { "schema": {
"hands": { "op": "secret.of", "owners": ["first", "second"],
"value": { "op": "type.enum", "values": ["rock", "paper", "scissors"] } } } },
"inputs": {
"throw": {
"params": { "who": { "domain": { "op": "secret.waiting", "of": "$hands" } },
"hand": { "domain": { "op": "seq.of", "of": ["rock", "paper", "scissors"] } } },
"actor": "@who",
"effects": [ { "op": "secret.seal", "target": "$hands", "owner": "@who", "value": "@hand" } ]
},
"resolve": {
"when": { "op": "secret.all", "of": "$hands" },
"effects": [ … , { "op": "secret.clear", "target": "$hands" } ]
}
}
What it is for
A simultaneous move. Two sides choosing at once was never a problem the transition model
had: both throw inputs are legal in the same position, and applying them in either order
arrives at the same state. What was missing is that a screen showing the first choice hands
the game to whoever moves second — so rock, paper, scissors could be written and could not be
played.
Sealing is the statement that a value must not be shown to anybody but its owner until it is opened. With that said, the order stops mattering to anything but the clock.
It marks; it does not hide
The state is a document and the document is the position, so a value written into it is there to be read by anyone holding it. What this vocabulary settles is what a screen may draw — which is where the question actually lives, because a host is what draws the screen. What it cannot settle is an opponent reading the document, and no vocabulary could: a rule set that could not be replayed from its state would not be a rule set.
Nothing stops the rules themselves from opening a seal early, either. The rules are not who this protects the value from; they are written once and read by everyone, and a guard that reads the opponent's sealed choice is a rule saying the game works that way.
Building
dotnet build. Rulealize.Abstraction restores from nuget.org like any other package, so
this repository builds on its own.
License
Apache-2.0.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. 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. |
-
net10.0
- Rulealize.Abstraction (>= 0.4.0)
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 | 127 | 9/13/2026 |