{"record":{"id":"3398a0fb7aacc745","repo":"astrid-runtime/astrid","slug":"stability-quantiles-must-lie-strictly-between-zero","errorCode":null,"errorMessage":"stability quantiles must lie strictly between zero and 10,000","messagePattern":"stability quantiles must lie strictly between zero and 10,000","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/astrid-storage-chunker-evidence/src/stability.rs","lineNumber":149,"sourceCode":"        cases,\n    })\n}\n\nfn sampled_boundaries(\n    original: &[Chunk],\n    quantiles_basis_points: &[u16],\n) -> Result<Vec<(u16, usize)>> {\n    let interior = original\n        .get(..original.len().saturating_sub(1))\n        .ok_or_else(|| anyhow::anyhow!(\"stability fixture has no interior boundary\"))?;\n    if interior.is_empty() {\n        bail!(\"stability fixture has no interior boundary\");\n    }\n    let mut sampled = Vec::with_capacity(quantiles_basis_points.len());\n    let mut previous_index = None;\n    for quantile in quantiles_basis_points {\n        if *quantile == 0 || *quantile >= 10_000 {\n            bail!(\"stability quantiles must lie strictly between zero and 10,000\");\n        }\n        let index = usize::try_from(\n            u64::try_from(interior.len())?\n                .checked_mul(u64::from(*quantile))\n                .and_then(|value| value.checked_div(10_000))\n                .ok_or_else(|| anyhow::anyhow!(\"stability quantile overflow\"))?,\n        )?\n        .min(\n            interior\n                .len()\n                .checked_sub(1)\n                .expect(\"the empty interior returned above\"),\n        );\n        if previous_index == Some(index) {\n            bail!(\"stability quantiles select duplicate boundary neighborhoods\");\n        }\n        previous_index = Some(index);\n        sampled.push((*quantile, interior[index].end));","sourceCodeStart":131,"sourceCodeEnd":167,"githubUrl":"https://github.com/astrid-runtime/astrid/blob/affd8760f44190dbdfbec23403f4c4b642c33112/crates/astrid-storage-chunker-evidence/src/stability.rs#L131-L167","documentation":"`sampled_boundaries` validates each configured quantile, which must be expressed in basis points strictly between 0 and 10,000 (exclusive). Quantile 0 or >= 10000 would map to boundary index 0 or past the interior, so it is rejected as a configuration error.","triggerScenarios":"Calling `measure_fixture` with a quantiles_basis_points list containing 0, 10_000, or a larger value — e.g. configuring a quantile as 1.0 instead of 10_000 basis points, or passing percentages (100) confused with basis points.","commonSituations":"Config mistakes where percent values (e.g. 50 for 50%) are used where basis points (5000) are required; off-by-one boundary values like 10000 intending 'the end'.","solutions":["Convert values to basis points: 50% becomes 5000; keep every quantile in 1..=9999.","Audit the quantile configuration source for percent-vs-basis-point confusion.","Clamp/validate the quantile list before calling measure_fixture.","Use named constants (e.g. QUANTILE_25PCT: u16 = 2500) to avoid magic-number mistakes."],"exampleFix":"// before\nlet quantiles: &[u16] = &[0, 5000, 10_000];\n// after\nlet quantiles: &[u16] = &[2500, 5000, 7500];","handlingStrategy":"validation","validationCode":"fn valid_quantiles(quantiles: &[u16]) -> bool {\n    quantiles.iter().all(|&q| (1..10_000).contains(&q))\n}","typeGuard":"fn is_valid_basis_point_quantile(q: u16) -> bool {\n    (1..10_000).contains(&q)\n}","tryCatchPattern":"let quantiles: Vec<u16> = configured\n    .iter()\n    .copied()\n    .filter(|&q| (1..10_000).contains(&q))\n    .collect();\nif quantiles.is_empty() { bail!(\"no valid quantiles configured\"); }\nmeasure_fixture(&fixture, &quantiles)?;","preventionTips":["Express all quantiles in basis points and name constants accordingly.","Add a config-load-time range check (1..=9999) for quantiles.","Document that values are basis points, not percentages, where the config is defined."],"tags":["rust","chunker","config","validation"],"backgroundTag":"invalid-config-value","analyzedSha":"affd8760f44190dbdfbec23403f4c4b642c33112","analyzedAt":"2026-09-09T21:28:12.402Z","contentChangedAt":"2026-09-09T21:28:12.402Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}