js-rigor: greybox fuzzer campaign, config validation, lifecycle positional gates

- fuzzer-mutation-needles.test.js: first greybox-fuzzer campaign (mutation
  + replay-near-failure strategies) hunting cache staleness across config
  kind transitions; pins canonical config shapes ({union:{rules}},
  {exclusion:[a,b]} with probabilistic P(A)*(1-P(B)) semantics) and a
  mirror faithful to the engine's phantom-node no-op rule
- ArbiterConfig.setRelationConfig: clean validation error for non-object
  configs (was cryptic internal TypeError under fuzzed args)
- protocol-snapshot-lifecycle.test.js: beforeStep/afterStep positional
  gates (virgin state, mirror-engine tuple sync)
- dropped complexity-verification attempt: wall-clock e-process too noisy
  at sub-ms operation scale
This commit is contained in:
John Dvorak
2026-07-31 13:59:02 -07:00
parent 717ae1031e
commit 2de5faa7c9
3 changed files with 223 additions and 1 deletions
+5
View File
@@ -9,6 +9,11 @@ export class ArbiterConfig {
}
setRelationConfig(relation, config) {
if (config === null || typeof config !== 'object') {
throw new Error(
`Invalid relation config for ${String(relation)}: expected a config object, got ${config === null ? 'null' : typeof config}`
);
}
const normalized = this._normalizeOwaConfig(config);
this.arbiter.relationConfigs.set(relation, normalized);
this.arbiter.graphManager.setRelationConfig(relation, normalized);