`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.';
return{
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.',
`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.'],
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.