Give this node a control’s frequency, the size of the population of instances you are sampling from, and a policy table you declare. It returns the sample size from the table row for that frequency, says whether the population falls inside the range the table expects for that frequency, and derives an integer start offset from the population hash you declare, then spreads the selected indices evenly across the whole population.
Applies a table you declare. It ships no table, and is not guidance from any audit firm or standard-setter. The sample size is only as defensible as the table.
The same question comes up on every audit or control-testing cycle: how many instances of a monthly control do we test, and how about a weekly or a daily one? Sample sizes are a matter of policy, so this node does not carry them. You pass a table with one row per frequency, and the node applies the row for the frequency you name.
A population outside the expected range, such as 40 instances of a control declared monthly, is flagged POPULATION_OUTSIDE_EXPECTED_RANGE. The node still plans the sample from the declared row and never silently corrects the population or the frequency, because the mismatch is itself a finding for the reviewer.
Selection is systematic sampling over a population hash you commit to before the call, using integer arithmetic only, so every position in the population can be selected for some hash. There is no random number generator and no clock, so a verifier can replay the exact selection.
Refusal codes (compliance_flags ["INPUT_REFUSED"]): CONTROL_FREQUENCY_MISSING, POPULATION_SIZE_INVALID, PERIOD_DAYS_INVALID, POPULATION_HASH_MISSING, POLICY_TABLE_MISSING, POLICY_TABLE_ROW_INVALID, FREQUENCY_ROW_MISSING, FREQUENCY_ROW_DUPLICATED, SAMPLE_SIZE_EXCEEDS_POPULATION, SAMPLE_SIZE_EXCEEDS_LIMIT (above 100000). A frequency or hash that is not a string is refused with the matching MISSING code. A refusal returns no sample size and no indices.
Every table in the conformance fixtures is synthetic and illustrative, labelled as such in the fixture names. None of those values is a recommended sample size.
Selection over a caller-declared population hash follows the same method as the attribute sampling plan node (ART-458); the code is a copy, not an import. This page and the node are CC BY 4.0.
Copy this paragraph into Claude, OpenClaw, or any MCP-aware agent to run this exact tool, with this sample, and verify the artifact.
Run the AINumbers MCP tool `plan_control_frequency_sample`. Task: Apply a table you declare: from a control frequency, a declared population and your policy table, returns the sample size and a deterministic selection of indices across the whole population, and flags a population outside the range declared for that frequency.
Call it with arguments: {"policy_parameters":{"control_frequency":"annual","population_size":1,"population_hash":"pop-hash-annual-0001","period_days":365,"policy_table":[{"frequency":"annual","min_population":1,"max_population":1,"sample_size":1},{"frequency":"quarterly","min_population":4,"max_population":4,"sample_size":2},{"frequency":"monthly","min_population":12,"max_population":12,"sample_size":2},{"frequency":"weekly","min_population":52,"max_population":52,"sample_size":5},{"frequency":"daily","min_population":250,"max_population":260,"sample_size":25},{"frequency":"multiple_per_day","min_population":1000,"max_population":100000,"sample_size":60}]}}
Verify before trusting: call `verify_execution_hash` on mcp.ainumbers.co (https://mcp.ainumbers.co/mcp) with the parameter `claimed_hash` set to the returned `execution_hash`, passing the full artifact the run returned (the object containing `policy_parameters` + `output_payload` + `execution_hash`; equivalently `policy_parameters` + `output_payload` with `claimed_hash`), not the bare hash string.
Return the ledger link https://ledger.ainumbers.co/ so a human can re-verify without contacting us.
PII rule: All inputs are processed locally in your browser. No data is transmitted. Do not enter real personal data — use synthetic or anonymised inputs only.
Over MCP, the run happens on the AINumbers worker. No AINumbers server stores your inputs.
Open the tool with the sample prefilled: https://ainumbers.co/chaingraph/838-control-frequency-sample.html#p=v1.H4sIAAAAAAAA_wFrApT9eyJjb250cm9sX2ZyZXF1ZW5jeSI6ImFubnVhbCIsInBvcHVsYXRpb25fc2l6ZSI6MSwicG9wdWxhdGlvbl9oYXNoIjoicG9wLWhhc2gtYW5udWFsLTAwMDEiLCJwZXJpb2RfZGF5cyI6MzY1LCJwb2xpY3lfdGFibGUiOlt7ImZyZXF1ZW5jeSI6ImFubnVhbCIsIm1pbl9wb3B1bGF0aW9uIjoxLCJtYXhfcG9wdWxhdGlvbiI6MSwic2FtcGxlX3NpemUiOjF9LHsiZnJlcXVlbmN5IjoicXVhcnRlcmx5IiwibWluX3BvcHVsYXRpb24iOjQsIm1heF9wb3B1bGF0aW9uIjo0LCJzYW1wbGVfc2l6ZSI6Mn0seyJmcmVxdWVuY3kiOiJtb250aGx5IiwibWluX3BvcHVsYXRpb24iOjEyLCJtYXhfcG9wdWxhdGlvbiI6MTIsInNhbXBsZV9zaXplIjoyfSx7ImZyZXF1ZW5jeSI6IndlZWtseSIsIm1pbl9wb3B1bGF0aW9uIjo1MiwibWF4X3BvcHVsYXRpb24iOjUyLCJzYW1wbGVfc2l6ZSI6NX0seyJmcmVxdWVuY3kiOiJkYWlseSIsIm1pbl9wb3B1bGF0aW9uIjoyNTAsIm1heF9wb3B1bGF0aW9uIjoyNjAsInNhbXBsZV9zaXplIjoyNX0seyJmcmVxdWVuY3kiOiJtdWx0aXBsZV9wZXJfZGF5IiwibWluX3BvcHVsYXRpb24iOjEwMDAsIm1heF9wb3B1bGF0aW9uIjoxMDAwMDAsInNhbXBsZV9zaXplIjo2MH1dfXHV9blrAgAA