Upgrade Ranker visual direction

This commit is contained in:
OpenClaw Bot
2026-05-26 22:39:03 +02:00
parent e8085663bd
commit 962fb3a46f
3 changed files with 34 additions and 28 deletions
+3 -3
View File
@@ -4,9 +4,9 @@
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#101626" /> <meta name="theme-color" content="#101626" />
<meta name="rank-version" content="2.0.0-feedback-map-mvp" /> <meta name="rank-version" content="2.1.0-editorial-decision-room" />
<title>Ranker — ranked feedback maps for messy decisions</title> <title>Ranker — ranked feedback maps for messy decisions</title>
<link rel="stylesheet" href="/styles.css?v=2.0.0-feedback-map-mvp" /> <link rel="stylesheet" href="/styles.css?v=2.1.0-editorial-decision-room" />
</head> </head>
<body> <body>
<main class="page-shell"> <main class="page-shell">
@@ -123,6 +123,6 @@
</main> </main>
<div class="toast" id="toast" hidden></div> <div class="toast" id="toast" hidden></div>
<script src="/app.js?v=2.0.0-feedback-map-mvp" type="module"></script> <script src="/app.js?v=2.1.0-editorial-decision-room" type="module"></script>
</body> </body>
</html> </html>
+25 -19
View File
File diff suppressed because one or more lines are too long
+6 -6
View File
@@ -513,11 +513,11 @@ function reasonFor(option) {
const m = option.metrics; const m = option.metrics;
if (option.lane?.id === 'do' && /snapshot|concept map|feature set|build order|rank/i.test(`${option.title} ${option.description}`)) return 'it strengthens the Scattermind → Ranker bridge instead of inventing a generic workspace'; if (option.lane?.id === 'do' && /snapshot|concept map|feature set|build order|rank/i.test(`${option.title} ${option.description}`)) return 'it strengthens the Scattermind → Ranker bridge instead of inventing a generic workspace';
if (option.factors?.evidenceNeeded && m.confidence >= 6.4) return 'it names the evidence needed, so the next move can be tested instead of guessed'; if (option.factors?.evidenceNeeded && m.confidence >= 6.4) return 'it names the evidence needed, so the next move can be tested instead of guessed';
if (m.feasibility >= 7.2 && m.value >= 6.2) return 'high enough value with low enough delivery drag to create fast signal'; if (m.feasibility >= 7.2 && m.value >= 6.2) return 'it has high enough value with low enough delivery drag to create fast signal';
if (m.revenue >= 6.4) return 'clearer buyer or money signal than the rest of the list'; if (m.revenue >= 6.4) return 'it has a clearer buyer or money signal than the rest of the list';
if (m.risk >= 6.5) return 'interesting, but it carries assumption risk that should be tested before build'; if (m.risk >= 6.5) return 'it is interesting, but carries assumption risk that should be tested before build';
if (m.novelty >= 6.7) return 'more differentiated than the safe options, but still needs proof'; if (m.novelty >= 6.7) return 'it is more differentiated than the safe options, but still needs proof';
return 'balanced tradeoff across value, effort, confidence, and timing'; return 'it has the best balanced tradeoff across value, effort, confidence, and timing';
} }
function concernFor(option) { function concernFor(option) {
@@ -536,7 +536,7 @@ function createDecisionBrief({ idea, context, mode, ranked, provenance }) {
const risky = ranked.slice().sort((a, b) => b.metrics.risk - a.metrics.risk)[0]; const risky = ranked.slice().sort((a, b) => b.metrics.risk - a.metrics.risk)[0];
const deferred = ranked.filter(item => ['defer', 'park'].includes(item.lane.id)).slice(0, 3); const deferred = ranked.filter(item => ['defer', 'park'].includes(item.lane.id)).slice(0, 3);
const sourceLabel = [provenance?.snapshotTitle, provenance?.artifactId].filter(Boolean).join(' · '); const sourceLabel = [provenance?.snapshotTitle, provenance?.artifactId].filter(Boolean).join(' · ');
const theme = top ? `The strongest signal is “${top.title}” because it has ${reasonFor(top)}.` : 'The list needs at least two options before ranking becomes useful.'; const theme = top ? `The strongest signal is “${top.title}” because ${reasonFor(top)}.` : 'The list needs at least two options before ranking becomes useful.';
return { return {
headline: top ? `Start with ${top.title}` : 'Add options to get a ranked feedback map', headline: top ? `Start with ${top.title}` : 'Add options to get a ranked feedback map',
summary: `${theme}${second ? `${second.title}” is the nearest follow-up, not a parallel first step.` : ''}${sourceLabel ? ` Source: ${sourceLabel}.` : ''}`, summary: `${theme}${second ? `${second.title}” is the nearest follow-up, not a parallel first step.` : ''}${sourceLabel ? ` Source: ${sourceLabel}.` : ''}`,