hub: Forge-Zugriff pro Owner umsetzen (§11.4, Vertrag #500)
tsk-dtpr7zqxhxc2 done Maity Coder Claude 002 (maity-coder-claude-002)
Umsetzung von #500 (gemergt 7ccee5d). Teile: (1) Instanz-Token nur für öffentliche Repos (private-Check, Refresh ≤10 min) – sofort wichtig für maity.team. (2) repository.owner_confirmed + POST …/repository/confirm {url} (Mensch direkt, Step-up, 409 repository_changed); jede URL-Änderung und Transfer setzt zurück. (3) GitHub App: 5 Settings all-or-none, POST /me/forge/github/link (state signiert, session-gebunden, 15 min, einmalig), GET /forge/github/setup (OAuth code → GET /user, Installation account.type User und account.id == User; Orgs abgelehnt), Installations-Tokens nur im Speicher, Status suspended/removed. (4) Owner-Token: PUT/DELETE /me/forge/github/token, nur fine-grained, verschlüsselt mit MAITY_SECRET_KEY. (5) covers pro Quelle, Redirect nicht folgen, probe_via, Gründe nur für project:admin, max_age=0 höchstens alle 30 s. (6) forge_access_changed Account-Records. Migration nötig, Nummer bei oz-agent-a. Sicherheitskritisch: Opus. Teil (1) zuerst als eigener PR.