Module: utils/bornRepoKey

Born-Repo-Keys — geteilter Vertrag zwischen members und ide-server (080-Workspaces/018-Cross-Service-Contracts.mdx; AP 20/C6). Ein **geborenes** Repo (Thread-Repo, geborene Einheit) hat **keine** `gitUrl`; es entsteht im Plattform-Origin des ide-servers. Damit es auch in der members-Topologie (Roots/Ableger, Teilen, UI) erscheint, legt members beim ersten Repository-Share eines Projekts die **Ressourcen-Zeile** an — und muss dabei **denselben** `repositoryKey` bilden wie der ide-server. Genau das ist der Vertrag: diese Datei ist die members-Fassung von `ide-server/src/workspaces/repoKeyName.js` + `threads/threadRepo.js`. **Warum die Ableitung doppelt existiert (und doppelt bleiben muss):** `bareRepoPath(key)` ist **global** (`/.git`); der Key ist die Identität des Bares. Läuft die Ableitung auseinander, zeigt die members-Zeile auf ein anderes Bare als der ide-server ⇒ zwei leere Thread-Repos, stiller Datenverlust. Deshalb: identische Regeln, identische Grenzen — und ein Test auf **beiden** Seiten, der genau das festhält. Der members-Dienst kennt die physische Bare-Ablage **nicht** und schreibt sie auch nicht an: er bildet nur den Namen. Das Bare legt der ide-server an (`ensurePlatformRepo`).
Source:

Members

(static, constant) BORN_FLAG

Markierung, die eine Ressourcenzeile als **geboren** ausweist.
Source:

(static, constant) BORN_THREAD_KIND

Kennung geborener Thread-Repos in `metadata.kind` (ide-server: `platform`).
Source:

(static, constant) VALID_REPO_KEY

Repo-Keys, die als Bare-Verzeichnisname zulässig sind — identisch zu `ide-server/src/workspaces/repoKeyName.js` (`VALID_REPO_KEY`).
Source:

Methods

(static) bornThreadRepoMetadata(input) → {Record.<string, unknown>}

Metadaten einer **geborenen** Thread-Repo-Share-Zeile. Sie ist eine reguläre, editierbare `repositoryShare`-Zeile (`required: true`) — nur ohne `gitUrl` und ohne members-Snapshot-Ursprung. `born: true` ist die generische Kennung, die der ide-server liest (`isBornResource`); `indexing` hält das Repo aus dem RAG-Index (Thread-Wissen wird über den Overlay-Pfad indexiert, nicht als Projekt-Share-Base).
Parameters:
Name Type Description
input
Source:
Returns:
Type
Record.<string, unknown>

(static) sanitizeRepoKey(value, maxLengthopt) → {string}

Repo-Keys auf `VALID_REPO_KEY` bringen. Der `..`-Fall ist der wichtige: `'../../etc/passwd'` → `'etc-passwd'`. Identisch zur ide-server-Fassung.
Parameters:
Name Type Attributes Description
value unknown
maxLength number <optional>
Source:
Returns:
leer, wenn nichts Gültiges übrig bleibt
Type
string

(static) shortUidSuffix(value) → {string}

Kurzer, stabiler Suffix aus einer UID (8 Hex-Zeichen) — identisch zu `shortUidSuffix`/`projectKeySuffix` des ide-servers (md5, erste 8 Hex).
Parameters:
Name Type Description
value unknown
Source:
Returns:
Type
string

(static) threadRepoKey(input) → {string|null}

Deterministischer Repo-Key des Thread-Repos eines Projekts. Regel (identisch zu `ide-server/src/threads/threadRepo.js`): `threads--`. Der **primäre** Repo-Key ist der `repositoryKey` des Repository-Shares mit der **kleinsten UID** (der ide-server bildet `projectKeyForSnapshot` genauso, `snapshot.shares` sortiert nach `uid`) — **geborene** Shares zählen dabei nicht, sonst hinge der Key an sich selbst.
Parameters:
Name Type Description
input
Source:
Returns:
`null`, wenn kein gültiger Key gebildet werden kann
Type
string | null