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
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Rulealize.Plugin.Secret" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Rulealize.Plugin.Secret" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Rulealize.Plugin.Secret" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Rulealize.Plugin.Secret --version 1.0.0
                    
#r "nuget: Rulealize.Plugin.Secret, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Rulealize.Plugin.Secret@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Rulealize.Plugin.Secret&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Rulealize.Plugin.Secret&version=1.0.0
                    
Install as a Cake Tool

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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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