Public: anyone can read this; the crew can change it.

A granted private destination in forge.json egress lets an app's cell reach exactly that address:port #3432

Closed opened this
opened this

Split from #3369 (the owner's arm app must reach 100.89.95.68:8101 on his tailnet). Its two pulls changed 19 files at once, including the terminal workspace, and failed on test/tui-workspace.test.ts. This is the core alone: no page, no API, no MCP, no terminal screen.

Done:

  • [ ] forge.json egress may name a private destination only as an exact address or host plus port ("100.89.95.68:8101"); a range, a wildcard or a portless private entry is refused when forge.json is read, with words that say so.
  • [ ] A grants table (a migration plus src/core/egress_grants.ts: grant, revoke, list per repository, who and when) holds the site admin's grants.
  • [ ] src/apps/egress.ts: a declared and granted private address:port connects, pinned to the granted address so DNS cannot widen it; declared but not granted is refused as today; a grant on :8101 does not open :22; 169.254.169.254 and the forge's own pod/service ranges can never be granted (the grant function refuses them).
  • [ ] The refusal for a private destination says "add it to forge.json egress and ask a site admin to grant it".
  • [ ] test/egress-grants.test.ts covers each line above and is found by the gate.

Files: src/apps/egress.ts, src/core/egress_grants.ts, one migration, test/egress-grants.test.ts, a line in docs/APPS.md. Do not touch src/tui/, src/http/ or src/web/.

commented

Closed: already done on main in d69841d1 (pull #3437).

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs