Harden soft Scattermind guardrails
This commit is contained in:
@@ -171,6 +171,33 @@ try {
|
||||
assert.equal(hardRail.brief.quickGlance.topPick, 'Manual source-traced build order preview');
|
||||
assert.equal(hardRail.handoff.readiness.status, 'ready');
|
||||
|
||||
const softGuardrailResponse = await fetch(`${base}/api/rank-feedback`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
schema: 'prioritix-feature-set-v1',
|
||||
sourceName: 'Scattermind',
|
||||
artifactId: 'concept_map_soft_guardrails',
|
||||
idea: 'A Concept Map clarified that the continuation should stay lightweight and defend one next move.',
|
||||
context: 'Solo builder. This is not a dashboard. Keep auth, billing, saved workspaces, and collaboration out until proof.',
|
||||
mode: 'mvp',
|
||||
featureSet: {
|
||||
features: [
|
||||
{ id: 'decision-strip', title: 'One-screen decision strip', description: 'Show the active build slice with source trace and the first proof step.', evidenceNeeded: 'Can a tired user explain the first move?', rankerHints: { value: 8, effort: 2, confidence: 7, urgency: 7, risk: 2 } },
|
||||
{ id: 'saved-workspace', title: 'Saved workspace dashboard', description: 'Accounts, auth, billing, team collaboration, and saved project dashboards.', rankerHints: { value: 10, effort: 1, confidence: 9, urgency: 9, risk: 1 } },
|
||||
{ id: 'copy-brief', title: 'Copy decision brief', description: 'Copy the defended order and source anchor into notes.', recommendedLane: 'validate-next' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
});
|
||||
assert.equal(softGuardrailResponse.status, 200);
|
||||
const softGuardrail = await softGuardrailResponse.json();
|
||||
assert.ok(softGuardrail.input.decisionContext.nonGoals.some(item => /not a dashboard/i.test(item)), 'soft dashboard language should become a non-goal');
|
||||
assert.ok(softGuardrail.input.decisionContext.nonGoals.some(item => /Keep auth, billing, saved workspaces/i.test(item)), 'keep-out-until-proof language should become a non-goal');
|
||||
assert.equal(softGuardrail.ranked.find(item => item.id === 'saved-workspace').lane.source, 'source-non-goal');
|
||||
assert.equal(softGuardrail.buildOrder.doFirst[0], 'decision-strip');
|
||||
assert.ok(!/dashboard/i.test(softGuardrail.brief.quickGlance.topPick));
|
||||
|
||||
const hintedResponse = await fetch(`${base}/api/rank-feedback`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
|
||||
Reference in New Issue
Block a user