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