IW-682: Port allocation for worktrees (iw port-slot) #757
No reviewers
Labels
No labels
agent-ready
bug
contract
documentation
duplicate
enhancement
good first issue
help wanted
invalid
needs-human
needs-input
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
iterative-works/iw-cli!757
Loading…
Reference in a new issue
No description provided.
Delete branch "IW-682"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
iw-cli gives each worktree a port slot: a whole number unique among the worktrees of one repository. The main checkout holds 0; a linked worktree claims the lowest free slot from 1. A project start hook computes its ports as
base + slot × stepand no longer needs its own allocator (the generic form of medeca-modul-poptavkyfind_next_offset).Changes
PortSlot,PortSlots.lowestFree,PortSlot.port(base, step), theiw-port-slot.jsonformat andPortSlotError(core/model/PortSlot.scala).WorktreePortSlots.claim/list(core/adapters/WorktreePortSlots.scala) store the slot in the per-worktree git dir, discover other worktrees withgit worktree list, and hold a cross-process lock in the common git dir. The atomic file write is extracted fromWorktreeServicesintoAtomicFile, and both stores use it.iw port-slot claim|list+ docs:PortSlotOpscapability onCommandEnv,PortSlotCommand,commands/port-slot.scala, a README row, and a "Port slots" section plus a rewritten example hook indocs/worktree-services.md.git worktree remove/iw rmreleases the slot with no extra step. A claim is idempotent and atomic across processes.Testing
PortSlotTest,AtomicFileTest,ServiceDeclarationTest,CommandDeclarationTest.PortSlotHarnessTest.WorktreePortSlotsItest(real git worktrees).test/port-slot.bats(claim, list, not-a-checkout, a start hook that claims and declares with the slot free afteriw rm, help).Review notes
// REQUIRES: iw-cli >= 0.21.0;VERSIONis 0.20.0. The release that ships this must be 0.21.0, or the header must change.project-management/issues/IW-682/review-packet.md.Release notes
Datum: 2026-10-08
Každá pracovní kopie projektu teď od iw-cli dostane vlastní číslo, které žádná jiná pracovní kopie téhož repozitáře nemá. Projekt z něj snadno spočítá porty pro své služby, a tak už se nestane, že by dvě souběžně spuštěné pracovní kopie obsadily stejný port. Projekty už nemusí psát a udržovat vlastní skripty, které hledají volné místo mezi ostatními pracovními kopiemi.
Hlavní kopie repozitáře má vždy číslo nula. Každá další pracovní kopie si při prvním vyžádání vezme nejnižší volné číslo od jedničky výš a při každém dalším vyžádání dostane totéž číslo znovu. Projekt si sám zvolí výchozí port a rozestup, například výchozí port 8085 s rozestupem 100 dá první pracovní kopii port 8185. Když se pracovní kopie odstraní, její číslo se samo uvolní a další nová kopie ho může použít. Žádný úklid navíc není potřeba. Ani když se dvě pracovní kopie zakládají ve stejnou chvíli, nedostanou stejné číslo.
Číslo si vyžádá spouštěcí skript projektu, buď přímo v kódu, nebo novým příkazem
iw port-slot. Ten také umí vypsat, která pracovní kopie drží které číslo. Dokumentace k deklaraci služeb teď ukazuje celý postup na příkladu: skript si vyžádá číslo, spočítá z něj porty a ohlásí služby, na které pak odkazuje přehled.Projekty, které si porty dosud počítaly samy, například pomocí souboru s posunem portů, mohou přejít postupně. Nový mechanismus jejich dosavadní soubory nevidí, proto je vhodné pracovní kopie po přechodu založit znovu, nebo do té doby oba způsoby nechat na různých výchozích portech. Číslování platí vždy pro jeden repozitář: pokud má na jednom počítači stejný projekt naklonovaný víc lidí, měl by každý klon používat jiný výchozí port.
🤖 Generated with Claude Code
Closes #682
Issue: IW-682 Phase: 2 - `iw port-slot` + docs This commit marks the checkpoint for phase 2 context generation. Use wf-implement IW-682 to return to this point. 🤖 Generated with Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>`iw port-slot` + docs Artifacts: - phase-02-tasks.md 🤖 Generated with Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>