Part of #7640; first slice of #7657. The core only: no MCP, no page.
Done when:
[ ] A small module src/core/first.ts records that a writer put an open, ready issue first (who, when), and clears it when the issue closes; putting a closed or blocked issue first is invalid
[ ] The rank is appended as an event with the actor, and the new kind is classified in src/core/event_audience.ts (test/event-audience-coverage.test.ts fails otherwise — this is what sank pull #7773)
[ ] readyNow (or inSlotOrder in src/crew/autonomy.ts) orders ranked ready issues before the rest; a rank never lifts the Later gate or a blocker
[ ] test/map-first.test.ts: with A and B ready, ranking B makes autonomy assign B next; ranking a blocked issue is refused
Part of #7640; first slice of #7657. The core only: no MCP, no page.
Done when:
src/core/first.tsrecords that a writer put an open, ready issue first (who, when), and clears it when the issue closes; putting a closed or blocked issue first isinvalidsrc/core/event_audience.ts(test/event-audience-coverage.test.tsfails otherwise — this is what sank pull #7773)readyNow(orinSlotOrderinsrc/crew/autonomy.ts) orders ranked ready issues before the rest; a rank never lifts the Later gate or a blockertest/map-first.test.ts: with A and B ready, ranking B makes autonomy assign B next; ranking a blocked issue is refusedFiles: src/core/first.ts, src/core/dependencies.ts, src/crew/autonomy.ts, src/core/event_audience.ts, test/map-first.test.ts
Risks: keep the change small (the earlier tries touched 14–17 files and failed); do not touch README.md or docs/MCP.md here.
Fits: a builder