@validation-os/dashboard 0.16.1 → 0.16.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +3 -0
- package/dist/index.js +47 -38
- package/dist/index.js.map +1 -1
- package/dist/styles.css +82 -36
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -586,6 +586,9 @@ interface PipelineRow {
|
|
|
586
586
|
nextMove: string;
|
|
587
587
|
/** The assumption's Question Type (DEV-5890) — kind of claim. */
|
|
588
588
|
questionType: string | null;
|
|
589
|
+
/** The max ceiling for this question type (highest anchor across all
|
|
590
|
+
* rungs) — the Known meter fills relative to this, not the absolute 100. */
|
|
591
|
+
questionTypeCeiling: number | null;
|
|
589
592
|
/** The assumption's Stage (DEV-5890) — kind of response / threshold. */
|
|
590
593
|
stage: string | null;
|
|
591
594
|
/** The stage's Risk threshold (DEV-5890) — the stopping bar. */
|
package/dist/index.js
CHANGED
|
@@ -1802,10 +1802,7 @@ function ThresholdBar({
|
|
|
1802
1802
|
stage,
|
|
1803
1803
|
cleared
|
|
1804
1804
|
}) {
|
|
1805
|
-
const
|
|
1806
|
-
const riskPct = Math.min(100, risk / riskTrackMax * 100);
|
|
1807
|
-
const thresholdPct = Math.min(100, threshold / riskTrackMax * 100);
|
|
1808
|
-
const confPct = Math.min(100, Math.abs(confidence2));
|
|
1805
|
+
const confPct = Math.min(100, Math.max(0, Math.abs(confidence2)));
|
|
1809
1806
|
const confFloorPct = Math.min(100, confFloor);
|
|
1810
1807
|
const riskBelow = risk <= threshold;
|
|
1811
1808
|
const confAbove = confidence2 >= confFloor;
|
|
@@ -1813,49 +1810,30 @@ function ThresholdBar({
|
|
|
1813
1810
|
return /* @__PURE__ */ jsxs4("div", { className: "vos-card vos-threshold-bar-card", children: [
|
|
1814
1811
|
/* @__PURE__ */ jsxs4("div", { className: "vos-threshold-bar-header", children: [
|
|
1815
1812
|
/* @__PURE__ */ jsxs4("span", { className: "vos-threshold-bar-title", children: [
|
|
1816
|
-
|
|
1817
|
-
" evidence bar",
|
|
1813
|
+
"Evidence needed",
|
|
1818
1814
|
/* @__PURE__ */ jsx4("span", { className: "vos-threshold-bar-stage-tag", children: stage })
|
|
1819
1815
|
] }),
|
|
1820
1816
|
/* @__PURE__ */ jsx4("span", { className: `vos-threshold-bar-status vos-threshold-bar-${tone}`, children: cleared ? "Cleared" : "Needs evidence" })
|
|
1821
1817
|
] }),
|
|
1822
1818
|
/* @__PURE__ */ jsxs4("div", { className: "vos-threshold-bar-section", children: [
|
|
1823
1819
|
/* @__PURE__ */ jsxs4("div", { className: "vos-threshold-bar-section-label", children: [
|
|
1824
|
-
/* @__PURE__ */ jsx4("span", { children: "
|
|
1825
|
-
/* @__PURE__ */ jsx4("span", { className: "vos-num vos-threshold-bar-section-val", children:
|
|
1820
|
+
/* @__PURE__ */ jsx4("span", { children: "Confidence" }),
|
|
1821
|
+
/* @__PURE__ */ jsx4("span", { className: "vos-num vos-threshold-bar-section-val", children: formatSigned(confidence2) }),
|
|
1826
1822
|
/* @__PURE__ */ jsxs4("span", { className: "vos-threshold-bar-section-target", children: [
|
|
1827
|
-
"
|
|
1828
|
-
|
|
1823
|
+
"need \u2265 ",
|
|
1824
|
+
confFloor,
|
|
1825
|
+
" ",
|
|
1826
|
+
cleared ? "\u2713" : ""
|
|
1829
1827
|
] })
|
|
1830
1828
|
] }),
|
|
1831
|
-
/* @__PURE__ */ jsxs4("div", { className: "vos-threshold-bar-track", children: [
|
|
1829
|
+
/* @__PURE__ */ jsxs4("div", { className: "vos-threshold-bar-track vos-threshold-bar-track-tall", children: [
|
|
1832
1830
|
/* @__PURE__ */ jsx4(
|
|
1833
1831
|
"div",
|
|
1834
1832
|
{
|
|
1835
|
-
className:
|
|
1836
|
-
style: {
|
|
1833
|
+
className: "vos-threshold-bar-target-zone",
|
|
1834
|
+
style: { left: `${confFloorPct}%` }
|
|
1837
1835
|
}
|
|
1838
1836
|
),
|
|
1839
|
-
/* @__PURE__ */ jsx4(
|
|
1840
|
-
"div",
|
|
1841
|
-
{
|
|
1842
|
-
className: "vos-threshold-bar-marker",
|
|
1843
|
-
style: { left: `${thresholdPct}%` },
|
|
1844
|
-
title: `Risk threshold: ${threshold}`
|
|
1845
|
-
}
|
|
1846
|
-
)
|
|
1847
|
-
] })
|
|
1848
|
-
] }),
|
|
1849
|
-
/* @__PURE__ */ jsxs4("div", { className: "vos-threshold-bar-section", children: [
|
|
1850
|
-
/* @__PURE__ */ jsxs4("div", { className: "vos-threshold-bar-section-label", children: [
|
|
1851
|
-
/* @__PURE__ */ jsx4("span", { children: "Confidence" }),
|
|
1852
|
-
/* @__PURE__ */ jsx4("span", { className: "vos-num vos-threshold-bar-section-val", children: formatSigned(confidence2) }),
|
|
1853
|
-
/* @__PURE__ */ jsxs4("span", { className: "vos-threshold-bar-section-target", children: [
|
|
1854
|
-
"floor \u2265 ",
|
|
1855
|
-
confFloor
|
|
1856
|
-
] })
|
|
1857
|
-
] }),
|
|
1858
|
-
/* @__PURE__ */ jsxs4("div", { className: "vos-threshold-bar-track vos-threshold-bar-track-conf", children: [
|
|
1859
1837
|
/* @__PURE__ */ jsx4(
|
|
1860
1838
|
"div",
|
|
1861
1839
|
{
|
|
@@ -1866,14 +1844,32 @@ function ThresholdBar({
|
|
|
1866
1844
|
/* @__PURE__ */ jsx4(
|
|
1867
1845
|
"div",
|
|
1868
1846
|
{
|
|
1869
|
-
className: "vos-threshold-bar-marker
|
|
1847
|
+
className: "vos-threshold-bar-marker",
|
|
1870
1848
|
style: { left: `${confFloorPct}%` },
|
|
1871
|
-
title: `Confidence
|
|
1849
|
+
title: `Need Confidence \u2265 ${confFloor} for ${stage}`,
|
|
1850
|
+
children: /* @__PURE__ */ jsx4("span", { className: "vos-threshold-bar-marker-label vos-num", children: confFloor })
|
|
1872
1851
|
}
|
|
1873
1852
|
)
|
|
1853
|
+
] }),
|
|
1854
|
+
/* @__PURE__ */ jsxs4("div", { className: "vos-threshold-bar-scale", children: [
|
|
1855
|
+
/* @__PURE__ */ jsx4("span", { className: "vos-num", children: "0" }),
|
|
1856
|
+
/* @__PURE__ */ jsx4("span", { className: "vos-num vos-threshold-bar-scale-mid", children: "50" }),
|
|
1857
|
+
/* @__PURE__ */ jsx4("span", { className: "vos-num", children: "100" })
|
|
1874
1858
|
] })
|
|
1875
1859
|
] }),
|
|
1876
|
-
/* @__PURE__ */
|
|
1860
|
+
/* @__PURE__ */ jsxs4("div", { className: "vos-threshold-bar-risk-summary", children: [
|
|
1861
|
+
/* @__PURE__ */ jsxs4("span", { className: `vos-threshold-bar-risk-val vos-text-${riskBelow ? "good" : "crit"}`, children: [
|
|
1862
|
+
"Risk ",
|
|
1863
|
+
Math.round(risk)
|
|
1864
|
+
] }),
|
|
1865
|
+
/* @__PURE__ */ jsxs4("span", { className: "vos-threshold-bar-risk-cap", children: [
|
|
1866
|
+
"max ",
|
|
1867
|
+
threshold,
|
|
1868
|
+
" for ",
|
|
1869
|
+
stage
|
|
1870
|
+
] })
|
|
1871
|
+
] }),
|
|
1872
|
+
/* @__PURE__ */ jsx4("div", { className: "vos-threshold-bar-hint", children: cleared ? `Confidence ${formatSigned(confidence2)} \u2265 ${confFloor} and Risk ${Math.round(risk)} \u2264 ${threshold} \u2014 cleared for ${stage}.` : `Need Confidence \u2265 ${confFloor}${!confAbove ? ` (now ${formatSigned(confidence2)})` : " \u2713"} and Risk \u2264 ${threshold}${!riskBelow ? ` (now ${Math.round(risk)})` : " \u2713"}.` })
|
|
1877
1873
|
] });
|
|
1878
1874
|
}
|
|
1879
1875
|
function riskTone(risk) {
|
|
@@ -2210,7 +2206,11 @@ import {
|
|
|
2210
2206
|
assumptionCompleteness,
|
|
2211
2207
|
readingBeliefInputs
|
|
2212
2208
|
} from "@validation-os/core";
|
|
2213
|
-
import {
|
|
2209
|
+
import {
|
|
2210
|
+
confidenceFloorForStage as confidenceFloorForStage2,
|
|
2211
|
+
riskThresholdForStage as riskThresholdForStage2,
|
|
2212
|
+
RUNG_ANCHOR as RUNG_ANCHOR3
|
|
2213
|
+
} from "@validation-os/core/derivation";
|
|
2214
2214
|
|
|
2215
2215
|
// src/stage-grid-model.ts
|
|
2216
2216
|
var STAGE_ORDER = [
|
|
@@ -2407,6 +2407,13 @@ function buildPipeline(assumptions, experiments) {
|
|
|
2407
2407
|
const framed = assumptionCompleteness(a);
|
|
2408
2408
|
const stage = deriveBeliefStage({ framed, confidence: d.confidence, test });
|
|
2409
2409
|
const questionType = str3(a["Question Type"]);
|
|
2410
|
+
let questionTypeCeiling = null;
|
|
2411
|
+
if (questionType && questionType in RUNG_ANCHOR3) {
|
|
2412
|
+
const subLadder = RUNG_ANCHOR3[questionType];
|
|
2413
|
+
questionTypeCeiling = Math.max(
|
|
2414
|
+
...Object.values(subLadder).map((r) => r.High)
|
|
2415
|
+
);
|
|
2416
|
+
}
|
|
2410
2417
|
const stageName = str3(a.Stage);
|
|
2411
2418
|
const stageKey = stageName && STAGE_ORDER.includes(stageName) ? stageName : null;
|
|
2412
2419
|
const riskThreshold = stageKey ? riskThresholdForStage2(stageKey) : null;
|
|
@@ -2425,6 +2432,7 @@ function buildPipeline(assumptions, experiments) {
|
|
|
2425
2432
|
tested: stage.tested,
|
|
2426
2433
|
nextMove: nextMove(stage.stage, stage.killZone),
|
|
2427
2434
|
questionType,
|
|
2435
|
+
questionTypeCeiling,
|
|
2428
2436
|
stage: stageName,
|
|
2429
2437
|
riskThreshold,
|
|
2430
2438
|
clearedThreshold: riskThreshold != null ? d.risk <= riskThreshold && (confFloor == null || stage.confidence >= confFloor) : null
|
|
@@ -2919,7 +2927,8 @@ function PipelineBoard({
|
|
|
2919
2927
|
}
|
|
2920
2928
|
function PipelineRowView({ row, onOpen }) {
|
|
2921
2929
|
const stripeTone = row.riskTone;
|
|
2922
|
-
const
|
|
2930
|
+
const ceiling = row.questionTypeCeiling ?? 99;
|
|
2931
|
+
const knownPct = Math.max(0, Math.min(100, Math.abs(row.confidence) / ceiling * 100));
|
|
2923
2932
|
const knownSign = row.confSign;
|
|
2924
2933
|
return /* @__PURE__ */ jsxs5("div", { className: "vos-pipe-row vos-pipe-row-2seg", children: [
|
|
2925
2934
|
/* @__PURE__ */ jsx5("div", { className: `vos-pipe-stripe vos-fill-${stripeTone}` }),
|