| name | weight-perturbation |
| description | SOP: Perturb weights to test gap-ranking stability, output a stability verdict |
| version | 1.0.0 |
| category | hypothesis-formation |
| type | sop |
| campaign | gap-prioritization |
| input | Baseline weight vector + gap scoring matrix (gap × dimension) |
| output | PerturbationReport — perturbation scenarios, ranking change magnitude, and stability verdict |
| dependencies | {"skills":["subagent-spawning"]} |
Weight Perturbation
Perturb weights to test gap-ranking stability, output a stability verdict.
HARD-GATE
- The elements of the input weight vector must sum to 1.0 (±0.001 tolerance allowed)
- The number of rows in the scoring matrix (number of gaps) must be ≥ 2
- At least 4 perturbation scenarios must be generated (±20% per dimension)
- stability_verdict must be one of "stable" | "sensitive" | "unstable"
Pipeline
- Precheck: Verify the weight vector is normalized; verify the scoring matrix dimensions match the weight vector length
- Baseline ranking computation: Weight-sum the scoring matrix with the baseline weights to obtain the baseline ranking
- Perturbation scenario generation: Apply +20% and -20% perturbations to each dimension separately (re-normalizing afterward), generating 2×n perturbation scenarios
- Re-compute rankings: Compute a new ranking for each perturbation scenario
- Compare change magnitude: Count the number of gaps whose ranking changed in each scenario; compute Kendall τ correlation against the baseline ranking
- Stability verdict: stable (all scenarios τ ≥ 0.8) / sensitive (any scenario 0.5 ≤ τ < 0.8) / unstable (any scenario τ < 0.5)
- Output: Return a PerturbationReport object
Output Format
{
"baseline_ranking": ["gap_003", "gap_001", "gap_002"],
"perturbation_scenarios": [
{
"scenario_id": "importance_+20%",
"perturbed_weights": { "importance": 0.48, "feasibility"