ART-838 · OpenChainGraph · Control Frequency Sample

Control Frequency Sample

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.

compliance_control server compute values only, zero network no randomness proof deferred

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.

What it does

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.

Output
sample_sizetaken from your table row, never computed
within_expected_rangewhether the declared population lies between the row’s min_population and max_population
start_offseta fold of population_hash, modulo population_size
selected_indicesfloor((start_offset + i × population_size) ÷ sample_size) for i from 0 to sample_size − 1, unique and in range, replayable from the same hash
frequency_rowthe table row that was used, echoed back

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.

Input manifest

policy_parameters
control_frequency (required, string)a frequency id that matches one table row, for example monthly
population_size (required, integer ≥ 1)number of instances of the control in the period
population_hash (required, string)hash of the sorted population extract, declared by you
period_days (required, integer ≥ 1)length of the testing period, echoed in the output
policy_table (required, array)rows of frequency, min_population, max_population, sample_size (integers)

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.

Provenance

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.

Node page authored 2026-11-13

Ask your agent

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