`POST /api/rank-feedback` accepts a `prioritix-feature-set-v1`-style payload from Scattermind and returns ranked items plus `buildOrder.doFirst / validateNext / defer / park`. Keep this contract action-first; do not use it as a reason to add generic dashboard, auth, billing, or workspace layers before the bridge has proof.
Recommended payload shape:
```json
{
"schema":"prioritix-feature-set-v1",
"sourceName":"Scattermind",
"artifactId":"snapshot_or_concept_map_id",
"snapshotTitle":"Plain idea title",
"conceptMapId":"optional_concept_map_id",
"originalPrompt":"The user's starting prompt, trimmed for provenance",
"idea":"What Scattermind clarified",
"context":"Important constraints: solo builder, non-AI-native user, avoid dashboard swamp, etc.",
"mode":"mvp",
"featureSet":{
"features":[
{
"id":"build-order-preview",
"title":"Build order preview",
"description":"Show do first, validate next, defer, and park with reasons.",
"userValue":"A tired builder sees the next move without opening a dashboard.",
"evidenceNeeded":"Can 3 non-AI-native users understand the first recommended action?",
"proofSteps":["Show a static result screen to 3 people"],
"dependencies":[],
"risk":"May become generic roadmap UI if the source context is lost.",
originalPrompt:'I have a tiny shop idea and do not know what to build first.',
idea:'Scattermind clarified a small product idea. Ranker must defend the next build order, not create a dashboard.',
context:'Solo builder. Need a rank-ready build order after Snapshot / Concept Map. Avoid accounts, workspaces, and team voting.',
mode:'mvp',
featureSet:{
features:[
{id:'bridge-contract',title:'Snapshot to Ranker feature-set contract',description:'Convert Concept Map next moves into a rank-ready feature set with provenance.',userValue:'Preserves the user prompt and source artifact so build order is defensible.',evidenceNeeded:'Can one generated Concept Map create 3-7 sane next moves with source sections?',proofSteps:['Run one fixture through /api/rank-feedback'],recommendedLane:'do-first',sourceSection:'concept-map.nextMoves'},
{id:'build-order-preview',title:'Build order preview',description:'Show do first, validate next, defer, and park with reasons.',userValue:'A tired builder sees the next move without opening a dashboard.',evidenceNeeded:'Can 3 non-AI-native users understand the first recommended action?',proofSteps:['Show a static result screen to 3 people'],recommendedLane:'validate-next'},
{id:'workspace',title:'Accounts and saved workspaces',description:'Full dashboard with auth, workspace collaboration, team voting, and sync.',dependencies:['auth','teams','saved projects','sync'],risk:'Turns the bridge into generic dashboard swamp before the first proof.'},
{id:'billing',title:'Subscription billing layer',description:'Pricing, checkout, invoices, account plans, and admin controls.',dependencies:['account model','checkout','fulfillment'],risk:'Payment machinery before the continuation value is proven.'},
{id:'export',title:'Exportable decision brief',description:'Simple brief for sharing the defended build order.',evidenceNeeded:'Does a plain brief help a user act within 48 hours?',recommendedLane:'validate-next'},
{id:'parked-bridge-dashboard',title:'Saved Snapshot dashboard with provenance',description:'Looks bridge-adjacent, but Scattermind already marked it as not-now because it needs auth, saved workspaces, and collaboration first.',recommendedLane:'park',sourceSection:'concept-map.parkingLot'},
assert.equal(data.ranked.find(item=>item.id==='parked-bridge-dashboard').lane.id,'park','explicit Scattermind park hints must stay out of the active proof slice');
consttheme=top?`The strongest signal is “${top.title}” because it has ${reasonFor(top)}.`:'The list needs at least two options before ranking becomes useful.';
consttheme=top?`The strongest signal is “${top.title}” because it has ${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.`:''}`,
summary:`${theme}${second?` “${second.title}” is the nearest follow-up, not a parallel first step.`:''}${sourceLabel?` Source: ${sourceLabel}.`:''}`,
provenance?.artifactId?`Open the source artifact (${provenance.artifactId}) and mark “${top.title}” as the defended first move.`:`Write a one-paragraph test for “${top.title}”.`,
top.factors?.evidenceNeeded?`Evidence to collect: ${top.factors.evidenceNeeded}.`:'Name the evidence that would make this decision obviously right or wrong.',
'Put it in front of 3–5 real people or run it manually once.',
'Put it in front of 3–5 real people or run it manually once.',
`Do not touch ${deferred[0]?`“${deferred[0].title}”`:'the parked ideas'} until the first signal is real.`,
`Do not touch ${deferred[0]?`“${deferred[0].title}”`:'the parked ideas'} until the first signal is real.`,
]:['Paste 3–10 options.','Choose what the ranking should care about.','Run the first-pass judgement.'],
]:['Paste 3–10 options.','Choose what the ranking should care about.','Run the first-pass judgement.'],
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.