commit bf1281ee023ebfd5e1c6f3c4ff19ebd3a8d7ec31559637f6d0922a4e9ad63773 Author: gc-dev-afjd Date: Sun Jul 19 11:18:33 2026 +0200 feat(OSS/TOP): zentrale normative V7GUID-Registry (kinds.json + status_flags.json) Erstanlage des OSS-Tenant-TOP-Repos als zentrale Heimat (SSoT) fuer repo-uebergreifende V7GUID-Dictionaries, mit GCC abzustimmen. - dictionaries/kinds.json: normativer Kind-Enum (V7GUID Bits 114-121, Layout v2) - dictionaries/status_flags.json: Lebenszyklus-Bitmask (Bits 106-113, Layout v2) - LEGAL_ENTITY.v7g.json: OSS-Tenant-Identitaet - others.json: Tenant-/Endpunkt-/Dictionary-Deskriptor - README.md, dictionaries/README.md: Konvention Spec: GITCOVER_PROTOCOL/specs/v7guid/33_kind.md, 34_status.md, ADR-002_layout_v2_kind.md Objektformat: SHA256. Co-Authored-By: Claude diff --git a/.gitcover/LEGAL_ENTITY.v7g.json b/.gitcover/LEGAL_ENTITY.v7g.json new file mode 100644 index 0000000..e3b5aa4 --- /dev/null +++ b/.gitcover/LEGAL_ENTITY.v7g.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://gitcover.org/schemas/legal-entity-1.0.json", + "version": "1.0.0", + "tenant": { + "shortCode": "OSS", + "uuidV7": "0197a0a0-0000-7000-8000-000000000000", + "registeredName": "GitCover OSS Commons (Open-Source-Inhaltspflege)", + "legalForm": "gUG", + "lifecycle": "REGISTERED", + "capitalState": "PAID", + "maturityLevel": 0, + "flags": 0, + "jurisdictionPrimary": "DE", + "jurisdictionsAdditional": ["EU"], + "regulatoryScopes": ["GOBD", "AO", "GDPR"], + "tax": { "taxId": null, "vatId": null }, + "tradeRegister": { "registerNumber": null, "registerCourt": null, "notaryDeedNumber": null, "notaryDate": null, "registryStatus": "NOT_FILED" }, + "address": { "street": null, "houseNumber": null, "postalCode": null, "city": null, "region": null, "country": "DE" }, + "contact": { "email": null, "phone": null }, + "legacyStatus": "PLANNED" + }, + "purpose": "Zentrale normative V7GUID-Dictionary-Heimat (SSoT) fuer GitCover; OSS-Inhaltspflege; mit GCC abzustimmen (§52 AO: Wissenschaft/Bildung/Verbraucherschutz).", + "createdUtc": "2026-07-19T00:00:00.000Z" +} \ No newline at end of file diff --git a/.gitcover/dictionaries/README.md b/.gitcover/dictionaries/README.md new file mode 100644 index 0000000..df45ca0 --- /dev/null +++ b/.gitcover/dictionaries/README.md @@ -0,0 +1,55 @@ +# Normative V7GUID-Dictionaries — OSS-Tenant (zentrale Registry) + +Dieser OSS-Tenant (`git.gitcover.org/OSS/TOP`) ist die **zentrale, normative +Heimat** für GitCover-Dictionaries, die **repo-übergreifend** gelten und mit **GCC +abgestimmt** werden — weil alle GitCover-Module dieselbe Bedeutung teilen. + +## Erste Dictionaries: `kinds.json` + `status_flags.json` (Layout v2) + +| Datei | V7GUID-Feld | Bits | Breite | Art | Höchstwert = `Custom` | Bedeutung | +|---|---|---|---|---|---|---| +| `kinds.json` | `kind` | 114–121 | 8 | Enum (Einzelwert) | `255` | **Art der Tätigkeit/Maßnahme** (Vorhaben, Routine, Workflow, Auftrags-Sachbearbeitung …) | +| `status_flags.json` | `status` | 106–113 | 8 | Bitmask (8 Flags) | — | **Lebenszyklus-Stufen** (kombinierbar: Geplant/Genehmigt/Entwickelt/Validiert/Freigegeben/Abgenommen/Archiviert) | + +> Normative Spec-Dokumente: `GITCOVER_PROTOCOL/specs/v7guid/33_kind.md` und `…/34_status.md`; +> Spec-ADR: `GITCOVER_PROTOCOL/specs/v7guid/ADR-002_layout_v2_kind.md`. + +`kinds.json` generalisiert das enge BSFZ-Vorhabens-Konzept auf die *Art* einer +Tätigkeit/Einheit: Vorhaben, Forschungs-Kapitel, Forschungsfrage, Arbeitspaket, +Routine, Workflow, Auftrags-Sachbearbeitung, Verwaltung, Begleitaufwand, +IP-Verwaltung, GF-Pflichten, Hauptberuf, Förderantrag, Routine-Software, +Vorhabens-Fortsetzung, Auftragsforschung, Eigenleistung. Jeder Eintrag trägt: +`slug`, `label_de`, `label_en`, Default-`sphere`, Default-`foerderkategorie`, +§52-AO-`zweck`. + +`status_flags.json` definiert die 8 kombinierbaren Lebenszyklus-Flags (Bitmask) +und liefert Beispielkombinationen (z. B. `0x03` = geplant+genehmigt). + +Die `kinds.json`-Defaults (sphere/foerderkategorie/zweck) sind **aus der Art +ableitbar** und pro Tagebucheintrag überschreibbar. + +## Erweiterung statt Beschränkung + +Reicht der 8-Bit-Raum (256 Werte) nicht aus, gilt der reservierte Sentinel +`255` = `Custom`/`TenantDefined` (Bitwert bleibt deterministisch; +Interpretationsquelle wechselt von global-kanonisch zu tenant-kanonisch) — +siehe `GITCOVER_PROTOCOL/specs/v7guid/40_erweiterung_custom.md`. + +## Verhältnis zu den L1–L6-Dictionaries + +Die L1–L6-Dictionaries (`entities.json` … `instances.json`) liegen derzeit im +CFP-Tenant (`REPOS/CFP/TOP/.gitcover/dictionaries/`). Ihre Konsolidierung in diesen +OSS-Tenant ist ein **Folge-Slice**; bis dahin gilt CFP als Quelle für L1–L6 und +OSS als Quelle für das neue `kind`-Feld. + +## Austausch + +Dictionaries sind über `others.json` als `"normative": true` mit +`"exchange": ["gcep", "gcucb"]` referenzierbar (siehe `../others.json`). + +## Quellen + +- Spec: `GITCOVER_PROTOCOL/specs/v7guid/33_kind.md` +- Bedarf: `REPOS/AFJD/Tagebuch-Prompt.md`, `REPOS/AFJD/FY2025/BSFZ/Antrag/BSFZ_STAMMDATEN.md`, + `REPOS/AFJD/FY2026/Chats/GCUCB/05-operativer-forschungs-und-nachweisplan-cfp-first.md`, + `REPOS/AFJD/AIChats/Claude/Modul_gGmbH_Accounting/GitCover-Accounting-Modul-Businessplan.md` (Sphären-Enum). \ No newline at end of file diff --git a/.gitcover/dictionaries/kinds.json b/.gitcover/dictionaries/kinds.json new file mode 100644 index 0000000..ed478b0 --- /dev/null +++ b/.gitcover/dictionaries/kinds.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://gitcover.org/schemas/v7guid/kinds-1.0.json", + "$comment": "Normativer zentraler Kind-Enum (V7GUID Bits 114-121, Layout v2). Siehe GITCOVER_PROTOCOL/specs/v7guid/33_kind.md und ADR-002_layout_v2_kind.md. Mit GCC abzustimmen (alle GitCover-Module teilen dieselbe Bedeutung).", + "version": "1.0.0", + "bitLayout": { "field": "kind", "bits": "114-121", "width": 8, "max": 255, "sentinel": 255, "spec": "GITCOVER_PROTOCOL/specs/v7guid/33_kind.md" }, + "values": { + "0": { "slug": "unspecified", "label_de": "unbestimmt", "label_en": "unspecified", "sphere": null, "foerderkategorie": null, "zweck": null, "note": "Standard / nicht zugewiesen" }, + "1": { "slug": "vorhaben", "label_de": "Vorhaben (F&E)", "label_en": "R&D undertaking", "sphere": "afjd_fe_sphaere", "foerderkategorie": "fue_kern", "zweck": "wissenschaft", "note": "Mehrjährig, mit Vorhabens-ID (BSFZ)" }, + "2": { "slug": "forschungs_kapitel", "label_de": "Forschungs-Kapitel", "label_en": "research chapter", "sphere": "afjd_fe_sphaere", "foerderkategorie": "fue_nahe_dokumentation", "zweck": "wissenschaft", "note": "GCBoK Tier-1" }, + "3": { "slug": "forschungs_frage", "label_de": "Forschungsfrage", "label_en": "research question", "sphere": "afjd_fe_sphaere", "foerderkategorie": "fue_kern", "zweck": "wissenschaft", "note": "F1-F9, U1-U6" }, + "4": { "slug": "arbeitspaket", "label_de": "Arbeitspaket (AP)", "label_en": "work package", "sphere": "afjd_fe_sphaere", "foerderkategorie": "je_ap", "zweck": "wissenschaft", "note": "AP-G0/AP-G5 = Begleitaufwand" }, + "5": { "slug": "routine", "label_de": "Routine (wiederkehrend)", "label_en": "recurring routine", "sphere": "wigb", "foerderkategorie": "nicht_foerderfaehig", "zweck": null, "note": "Nicht-F&E, wiederkehrend" }, + "6": { "slug": "workflow", "label_de": "Workflow (regelmaessig)", "label_en": "regular workflow", "sphere": "zweckbetrieb", "foerderkategorie": "nicht_foerderfaehig", "zweck": "bildung", "note": "GCC-Trägerschaft oder WiGB" }, + "7": { "slug": "auftrags_sachbearbeitung","label_de": "Auftrags-Sachbearbeitung", "label_en": "order/case processing", "sphere": "wigb", "foerderkategorie": "nicht_foerderfaehig", "zweck": null, "note": "Fall-/Auftragsabwicklung" }, + "8": { "slug": "verwaltung", "label_de": "Verwaltung (allgemein)", "label_en": "administration", "sphere": "wigb", "foerderkategorie": "nicht_foerderfaehig", "zweck": null, "note": "Allg. Verwaltung, Buchhaltung" }, + "9": { "slug": "begleitaufwand", "label_de": "Begleitaufwand", "label_en": "companion effort", "sphere": "je_traeger", "foerderkategorie": "nicht_foerderfaehig", "zweck": null, "note": "Foerder-/Traegerstrukturierung" }, + "10": { "slug": "ip_verwaltung", "label_de": "IP-Verwaltung (admin)", "label_en": "IP administration", "sphere": "vermoegensverwaltung", "foerderkategorie": "nicht_foerderfaehig", "zweck": null, "note": "Patent-/Markenverwaltung rein administrativ" }, + "11": { "slug": "gf_pflichten", "label_de": "GF-Pflichten", "label_en": "MD duties", "sphere": "je_traeger", "foerderkategorie": "nicht_foerderfaehig", "zweck": null, "note": "Geschaeftsfuehrung verbundener Unternehmen" }, + "12": { "slug": "hauptberuf", "label_de": "Hauptberuf", "label_en": "primary employment", "sphere": null, "foerderkategorie": null, "zweck": null, "note": "Nichtselbststaendig, Sperrzeit (R5)" }, + "13": { "slug": "foerderantrag", "label_de": "Foerderantrag/Antragsadmin", "label_en": "grant application admin", "sphere": "afjd_fe_sphaere", "foerderkategorie": "nicht_foerderfaehig", "zweck": null, "note": "Antragserstellung, Antragsadministration" }, + "14": { "slug": "routine_software", "label_de": "Routine-Software", "label_en": "routine software", "sphere": null, "foerderkategorie": "nicht_foerderfaehig", "zweck": null, "note": "BSFZ-Ausschluss (Routine-Softwareentwicklung)" }, + "15": { "slug": "vorhaben_fortsetzung", "label_de": "Vorhabens-Fortsetzung", "label_en": "project continuation", "sphere": "afjd_fe_sphaere", "foerderkategorie": "fue_kern", "zweck": "wissenschaft", "note": "Folgejahr, gleiche Vorhabens-ID" }, + "16": { "slug": "auftragsforschung", "label_de": "Auftragsforschung", "label_en": "contract research", "sphere": "afjd_fe_sphaere", "foerderkategorie": "fue_kern", "zweck": "wissenschaft", "note": "§3 Abs. 2 FZulG" }, + "17": { "slug": "eigenleistung", "label_de": "Eigenleistung (§3 Abs.3 FZulG)", "label_en": "own work", "sphere": "afjd_fe_sphaere", "foerderkategorie": "fue_kern", "zweck": "wissenschaft", "note": "Einzelunternehmer, pauschal 100 EUR/h ab 2026" }, + "255": { "slug": "custom", "label_de": "Custom/TenantDefined", "label_en": "custom/tenant-defined", "sphere": "tenant", "foerderkategorie": "tenant", "zweck": "tenant", "note": "Sentinel: tenant-eigene Definition" } + } +} \ No newline at end of file diff --git a/.gitcover/dictionaries/status_flags.json b/.gitcover/dictionaries/status_flags.json new file mode 100644 index 0000000..a66800b --- /dev/null +++ b/.gitcover/dictionaries/status_flags.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://gitcover.org/schemas/v7guid/status-flags-1.0.json", + "$comment": "Normative Lebenszyklus-Bitmask (V7GUID Bits 106-113, Layout v2). Siehe GITCOVER_PROTOCOL/specs/v7guid/34_status.md und ADR-002_layout_v2_kind.md. 8 Bit = 8 kombinierbare Flags. Mit GCC abzustimmen.", + "version": "1.0.0", + "bitLayout": { "field": "status", "bits": "106-113", "width": 8, "kind": "bitmask", "spec": "GITCOVER_PROTOCOL/specs/v7guid/34_status.md" }, + "flags": { + "0": { "slug": "geplant", "label_de": "geplant", "label_en": "planned", "mask": 1, "note": "initiiert / geplant" }, + "1": { "slug": "genehmigt", "label_de": "genehmigt", "label_en": "approved", "mask": 2, "note": "genehmigt (Entscheidung / Vorhabenfreigabe)" }, + "2": { "slug": "entwickelt", "label_de": "entwickelt", "label_en": "developed", "mask": 4, "note": "umgesetzt / entwickelt" }, + "3": { "slug": "validiert", "label_de": "validiert", "label_en": "validated", "mask": 8, "note": "getestet / validiert" }, + "4": { "slug": "freigegeben", "label_de": "freigegeben", "label_en": "released", "mask": 16, "note": "fachlich freigegeben (Vier-Augen / Go-Live)" }, + "5": { "slug": "abgenommen", "label_de": "abgenommen", "label_en": "accepted", "mask": 32, "note": "abgenommen / akzeptiert (Stakeholder)" }, + "6": { "slug": "archiviert", "label_de": "archiviert", "label_en": "archived", "mask": 64, "note": "archiviert (Aufbewahrung)" }, + "7": { "slug": "reserved", "label_de": "reserviert", "label_en": "reserved", "mask": 128, "note": "reserviert (tenant-definierbar)" } + }, + "examples": { + "0x01": ["geplant"], + "0x03": ["geplant", "genehmigt"], + "0x07": ["geplant", "genehmigt", "entwickelt"], + "0x1F": ["geplant", "genehmigt", "entwickelt", "validiert", "freigegeben"], + "0x7F": ["geplant", "genehmigt", "entwickelt", "validiert", "freigegeben", "abgenommen", "archiviert"] + } +} \ No newline at end of file diff --git a/.gitcover/others.json b/.gitcover/others.json new file mode 100644 index 0000000..d6360c3 --- /dev/null +++ b/.gitcover/others.json @@ -0,0 +1,39 @@ +{ + "v7g_version": "1.0", + "tenant": { + "id": "oss-top", + "name": "GitCover OSS Commons — TOP (zentrale Dictionary-Heimat)", + "legal_form": "gUG", + "repository_id": 1, + "role": "normative_registry", + "group": "gitcover", + "effective": "2026-07-19" + }, + "infra": { + "storage": "git", + "object_format": "sha256", + "signing": { + "gpg": true, + "required_for": ["dictionaries", "legal_entity"] + }, + "llm": { + "scope": "lan-only", + "server": "gtr9", + "note": "Kein Dictionary-/Belegdaten-Traffic ins Internet (DSGVO)." + } + }, + "endpoints": { + "gitea": "git.gitcover.org", + "gitea_org": "OSS", + "gitea_repo": "TOP", + "remote": "git-gcf@git.gitcover.org:OSS/TOP.git", + "public_mirror": "codeberg.org/org/gitcover-commons" + }, + "dictionaries": { + "source": "./.gitcover/dictionaries/", + "normative": true, + "exchange": ["gcep", "gcucb"], + "hosted": ["kinds.json", "status_flags.json"], + "note": "L1-L6-Dictionaries verbleiben vorerst im CFP-Tenant (Konsolidierung in OSS = Folge-Slice)." + } +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..2a93c03 --- /dev/null +++ b/README.md @@ -0,0 +1,43 @@ +# OSS/TOP — Zentrale normative V7GUID-Registry (GitCover) + +Dieses Repository (`git.gitcover.org/OSS/TOP`, lokal `/mnt/brx5/work/OSS/TOP/`) +ist die **zentrale, normative Heimat (SSoT)** für V7GUID-Dictionaries, die +**repo-übergreifend** für alle GitCover-Lösungen gelten und mit **GCC** +abgestimmt werden. + +## Inhalt + +``` +TOP/ +└── .gitcover/ + ├── LEGAL_ENTITY.v7g.json # OSS-Tenant-Identität + ├── others.json # Tenant-/Endpunkt-/Dictionary-Deskriptor + └── dictionaries/ + ├── README.md # Konvention + ├── kinds.json # Normativer Kind-Enum (V7GUID Bits 114–121, Layout v2) + └── status_flags.json # Lebenszyklus-Bitmask (Bits 106–113, Layout v2) +``` + +## `kind` + `status` (Layout v2) + +`kinds.json` klassifiziert die **Art einer Tätigkeit/Maßnahme** — generalisiert +über das BSFZ-Vorhabens-Konzept hinaus (Vorhaben, Routine, Workflow, +Auftrags-Sachbearbeitung …). `status_flags.json` definiert die 8 kombinierbaren +**Lebenszyklus-Flags** (Geplant/Genehmigt/Entwickelt/Validiert/Freigegeben/…) +als O(1)-Bitmask-Filter aus der GUID. + +- Spec: `GITCOVER_PROTOCOL/specs/v7guid/33_kind.md`, `…/34_status.md` +- Spec-ADR: `GITCOVER_PROTOCOL/specs/v7guid/ADR-002_layout_v2_kind.md` +- Bedarf: `REPOS/AFJD/Tagebuch-Prompt.md` + +## Git + +- Objekt-Format: **SHA256** (`git init --object-format=sha256`). +- Remote: `git-gcf@git.gitcover.org:OSS/TOP.git` (Forge-Repo vom User anzulegen, + dann Push). Öffentlicher Spiegel: `codeberg.org/org/gitcover-commons`. + +## Konsolidierung (Folge-Slice) + +Die L1–L6-Dictionaries verbleiben vorerst im CFP-Tenant +(`REPOS/CFP/TOP/.gitcover/dictionaries/`). Ihre Migration in diesen OSS-Tenant +ist ein Folge-Slice. \ No newline at end of file