Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
abd236b
refactor(filetypedetection): code-quality-policy 045 auf alle klassen…
github-actions[bot] Feb 16, 2026
26e4d4a
refactor(filetypedetection): remove redundant `Global` qualifiers and…
github-actions[bot] Feb 16, 2026
fe746fe
ci(preflight): re-trigger with updated pr governance body
github-actions[bot] Feb 16, 2026
308a57f
ci(preflight): trigger run after pr-body governance fix
github-actions[bot] Feb 16, 2026
480b0cb
refactor(filetypedetection): evidencehashing whitespace policy-konfor…
github-actions[bot] Feb 16, 2026
cbc8294
Update src/FileTypeDetection/Infrastructure/ArchiveManagedInternals.vb
tomtastisch Feb 16, 2026
077ca8b
Update src/FileTypeDetection/Infrastructure/CoreInternals.vb
tomtastisch Feb 16, 2026
ba98f45
Update src/FileTypeDetection/Infrastructure/ArchiveManagedInternals.vb
tomtastisch Feb 16, 2026
6f8eb03
fix(filetypedetection): review-fixes fuer catch-filter und policy 045
github-actions[bot] Feb 16, 2026
535dace
docs(policy): .MD konvergenz und docs-links-full fix
github-actions[bot] Feb 16, 2026
b24b365
docs(policy): roc-bijection mapping fuer policy 045/145
github-actions[bot] Feb 16, 2026
4f16b45
chore(filetypedetection): netstandard2-kompatibilitaet und provider-a…
github-actions[bot] Feb 17, 2026
104c6ee
chore(filetypedetection): policy-konforme umlaut- und typdoku-korrekt…
github-actions[bot] Feb 17, 2026
f7e0875
chore(ci): trigger checks after governance body update
github-actions[bot] Feb 17, 2026
827d3a3
docs(audit): add roc mapping for policy snapshot
github-actions[bot] Feb 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
</PropertyGroup>
<PropertyGroup>
<RepoVersion>5.1.4</RepoVersion>
<RepoVersion>5.2.0</RepoVersion>
</PropertyGroup>
</Project>
3 changes: 3 additions & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,16 @@
<PackageVersion Include="coverlet.collector" Version="6.0.4" />
<PackageVersion Include="coverlet.msbuild" Version="6.0.4" />
<PackageVersion Include="FsCheck" Version="3.2.0" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.0" />
<PackageVersion Include="Microsoft.IO.RecyclableMemoryStream" Version="3.0.1" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
<PackageVersion Include="Mime" Version="3.8.0" />
<PackageVersion Include="Reqnroll.Tools.MsBuild.Generation" Version="3.3.3" />
<PackageVersion Include="Reqnroll.xunit.v3" Version="3.3.3" />
<PackageVersion Include="SharpCompress" Version="0.39.0" />
<PackageVersion Include="System.Collections.Immutable" Version="10.0.0" />
<PackageVersion Include="System.IO.Hashing" Version="10.0.2" />
<PackageVersion Include="System.Text.Json" Version="10.0.0" />
<PackageVersion Include="YamlDotNet" Version="16.3.0" />
<PackageVersion Include="xunit.v3" Version="2.0.0" />
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.5" />
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ EXPECTED_VERSION=X.Y.Z bash tools/ci/verify_nuget_release.sh
- Migration: Verwende ausschließlich `Tomtastisch.FileClassifier` (Details in `docs/guides/004_GUIDE_MIGRATE_LEGACY_NUGET.MD`).

## 5. Compatibility / TFMs
- Library-Zielplattformen: `net8.0` und `net10.0`
- Library-Zielplattformen: `netstandard2.0`, `net8.0` und `net10.0`
- Release-Versioning: Git-Tag `vX.Y.Z` (optional `-prerelease`) ist SSOT

## 6. Architekturüberblick
Expand Down
3 changes: 3 additions & 0 deletions docs/audit/000_INDEX.MD
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ Zentrale Einstiegsseite fuer Dritte: `SECURITY_ASSURANCE_INDEX.md`.
- `docs/audit/012_WAVE_EXECUTION_DOD.MD`
- `docs/audit/013_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD`
- `docs/audit/014_EVIDENCE_REPORT_ISSUE_67.MD`
- `docs/audit/compat/001_NETSTANDARD2_POLICY_SNAPSHOT.MD`
- `docs/audit/compat/002_NETSTANDARD2_INVENTORY.MD`
- `docs/audit/compat/003_NETSTANDARD2_COMPAT_EVIDENCE.MD`

## Maschinelle Nachweise
- `artifacts/ci/security-claims-evidence/`
Expand Down
3 changes: 3 additions & 0 deletions docs/audit/100_INDEX.MD
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ Root landing page for third parties: `SECURITY_ASSURANCE_INDEX.md`.
- `docs/audit/112_WAVE_EXECUTION_DOD.MD`
- `docs/audit/113_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD`
- `docs/audit/114_EVIDENCE_REPORT_ISSUE_67.MD`
- `docs/audit/compat/001_NETSTANDARD2_POLICY_SNAPSHOT.MD`
- `docs/audit/compat/002_NETSTANDARD2_INVENTORY.MD`
- `docs/audit/compat/003_NETSTANDARD2_COMPAT_EVIDENCE.MD`

## Machine Evidence
- `artifacts/ci/security-claims-evidence/`
Expand Down
52 changes: 52 additions & 0 deletions docs/audit/compat/001_NETSTANDARD2_POLICY_SNAPSHOT.MD
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Policy Snapshot: netstandard2 Compat Refactor

## 1. Zweck
Dieses Dokument extrahiert verbindliche Anforderungen fuer den netstandard2.0-Kompatibilitaetsrefactor.

## 2. Geltungsbereich
- Quelle A: `docs/governance/045_CODE_QUALITY_POLICY_DE.MD`
- Quelle B: `docs/versioning/001_POLICY_VERSIONING.MD`
- Quelle C: `docs/governance/004_POLICY_DOCUMENTATION.MD`

## 3. Regeln/Architektur
### 3.1 Muss (verbindlich)
- Keine Public-Signaturaenderungen und kein Behavior-Drift in bestehenden Public APIs.
- Build/Test muessen erfolgreich sein.
- Fail-closed Verhalten (Fehlerpfade und Logging) darf nicht aufgeweicht werden.
- Versionierungsentscheidung muss SemVer-konform sein.
- Dokumentdateien unter `docs/` muessen `UPPER_SNAKE_CASE` mit `.MD` nutzen.
- Doku-Checks sind verpflichtend:
- `python3 tools/check-doc-consistency.py`
- `python3 tools/check-docs.py`

### 3.2 Kann (erlaubt unter Bedingungen)
- Interne Refactorings und Strukturverbesserungen sind erlaubt, wenn Public API und Semantik erhalten bleiben.
- Interne Abstraktionen fuer TFM-sensitive APIs sind erlaubt.

### 3.3 Nicht erlaubt
- Runtime-Provider-Switching oder environment-basierte Pfadwahl.
- Unbelegte Annahmen ohne Evidence.
- Nicht-policy-konforme Dokumentbenennung.

## 4. Verifikation/Nachweise
Auszuege der Policyquellen:
- `docs/governance/045_CODE_QUALITY_POLICY_DE.MD:36-39` (keine Semantikaenderung, keine Signaturaenderung)
- `docs/governance/045_CODE_QUALITY_POLICY_DE.MD:196-204` (DoD Build/Test, keine Public-Signature-Aenderung)
- `docs/versioning/001_POLICY_VERSIONING.MD:22-26` (MINOR/PATCH Klassifikation)
- `docs/governance/004_POLICY_DOCUMENTATION.MD:16-24` (Benennungsregeln)
- `docs/governance/004_POLICY_DOCUMENTATION.MD:55-59` (Doku-Pflichtchecks)

## 5. Grenzen/Nicht-Ziele
- Keine Aenderung an `SECURITY.md`.
- Keine Erweiterung der fachlichen Semantik.
- Keine Einfuehrung neuer externer Runtime-Abhaengigkeiten ausser zur Kompatibilitaet notwendige Library-Referenzen.

## 6. Verlinkte SSOT-Quellen
- [Code Quality Policy DE](https://github.com/tomtastisch/FileClassifier/blob/main/docs/governance/045_CODE_QUALITY_POLICY_DE.MD)
- [Versioning Policy DE](https://github.com/tomtastisch/FileClassifier/blob/main/docs/versioning/001_POLICY_VERSIONING.MD)
- [Documentation Policy DE](https://github.com/tomtastisch/FileClassifier/blob/main/docs/governance/004_POLICY_DOCUMENTATION.MD)

## RoC-Bezug
- [Artifact-Contract-Regel](https://github.com/tomtastisch/FileClassifier/blob/main/tools/ci/policies/rules/artifact_contract.yaml)
- [Docs-Drift-Regel](https://github.com/tomtastisch/FileClassifier/blob/main/tools/ci/policies/rules/docs_drift.yaml)
- [Shell-Safety-Regeln](https://github.com/tomtastisch/FileClassifier/blob/main/tools/ci/policies/rules/shell_safety.yaml)
66 changes: 66 additions & 0 deletions docs/audit/compat/002_NETSTANDARD2_INVENTORY.MD
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Inventory: netstandard2 Compat Baseline

## 1. Zweck
Dieses Dokument protokolliert den Ausgangs-/Zwischenstand der TFM- und API-sensitiven Fundstellen fuer den netstandard2.0-Refactor.

## 2. Geltungsbereich
- Library-Projekt: `src/FileTypeDetection/FileTypeDetectionLib.vbproj`
- Produktionscode: `src/FileTypeDetection/**/*.vb`
- Tests: `tests/FileTypeDetectionLib.Tests/**/*`

## 3. Regeln/Architektur
Erfasste Suchmuster:
- `Convert.ToHexString`
- `SHA256.HashData`
- `System.IO.Hashing`
- `XxHash3`
- `FrameworkReference Microsoft.AspNetCore.App`
- `TargetFrameworks`

## 4. Verifikation/Nachweise
### 4.1 Projekt/TFMs
Befehl:
```bash
rg -n "TargetFrameworks|FrameworkReference|PackageReference Include=\"System\.IO\.Hashing\"|PackageReference Include=\"Microsoft\.Extensions\.Logging\.Abstractions\"" src/FileTypeDetection/FileTypeDetectionLib.vbproj
```
Ausgabe:
- `src/FileTypeDetection/FileTypeDetectionLib.vbproj:6` -> `TargetFrameworks netstandard2.0;net8.0;net10.0`
- `src/FileTypeDetection/FileTypeDetectionLib.vbproj:26` -> `Microsoft.Extensions.Logging.Abstractions`
- `src/FileTypeDetection/FileTypeDetectionLib.vbproj:29` -> `System.IO.Hashing`

### 4.2 Produktionscode
Befehl:
```bash
rg -n "Convert\.ToHexString|SHA256\.HashData|System\.IO\.Hashing|XxHash3" src/FileTypeDetection --glob '*.vb' --glob '*.vbproj'
```
Relevante Treffer:
- `src/FileTypeDetection/Providers/Net8_0Plus/HashPrimitivesProvider.vb:49` (`Convert.ToHexString`)
- `src/FileTypeDetection/Providers/Net8_0Plus/HashPrimitivesProvider.vb:64` (`SHA256.HashData`)
- `src/FileTypeDetection/Providers/Net8_0Plus/HashPrimitivesProvider.vb:77` (`XxHash3`)
- `src/FileTypeDetection/Providers/NetStandard2_0/HashPrimitivesProvider.vb:91` (`XxHash3`)

### 4.3 AspNetCore FrameworkReference
Befehl:
```bash
rg -n "Microsoft\.AspNetCore\.App|AspNetCore" src/FileTypeDetection --glob '*.vb' --glob '*.vbproj'
```
Ausgabe:
- Keine Treffer (exit code 1) -> FrameworkReference entfernt.

### 4.4 Tests
Befehl:
```bash
rg -n "Convert\.ToHexString|SHA256\.HashData|System\.IO\.Hashing|XxHash3" tests/FileTypeDetectionLib.Tests --glob '*.cs' --glob '*.txt'
```
Relevante Treffer (expected in tests):
- `tests/FileTypeDetectionLib.Tests/Support/FixtureManifestCatalog.cs:133-134`
- `tests/FileTypeDetectionLib.Tests/Unit/HashingEvidenceTests.cs:2,45,61,349,372-373`
- `tests/FileTypeDetectionLib.Tests/Contracts/public-api.snapshot.txt:75-76`

## 5. Grenzen/Nicht-Ziele
- Dieses Inventar ist ein technischer Suchlauf und ersetzt keine Laufzeit- oder CI-Verifikation.
- Nicht gelistet sind reine Dokumenttexte ausserhalb des Produktions-/Testcodes.

## 6. Verlinkte SSOT-Quellen
- [Versioning Policy](https://github.com/tomtastisch/FileClassifier/blob/main/docs/versioning/001_POLICY_VERSIONING.MD)
- [Code Quality Policy](https://github.com/tomtastisch/FileClassifier/blob/main/docs/governance/045_CODE_QUALITY_POLICY_DE.MD)
116 changes: 116 additions & 0 deletions docs/audit/compat/003_NETSTANDARD2_COMPAT_EVIDENCE.MD
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
# Evidence Report: netstandard2 Compat

## 1. Zweck
Dieser Report dokumentiert die technische Umsetzung und Verifikation fuer die net48-Kompatibilitaet ueber `netstandard2.0`.

## 2. Geltungsbereich
- Library: `src/FileTypeDetection/FileTypeDetectionLib.vbproj`
- Hashing-Core-Fassade: `src/FileTypeDetection/EvidenceHashing.vb`
- Provider-Abstraktionen und TFM-Provider unter `src/FileTypeDetection/Abstractions/Providers`, `src/FileTypeDetection/Composition`, `src/FileTypeDetection/Providers`

## 3. Regeln/Architektur
### 3.1 Before/After TargetFrameworks
- Before: `net8.0;net10.0`
- After: `netstandard2.0;net8.0;net10.0`
- Nachweisdatei: `src/FileTypeDetection/FileTypeDetectionLib.vbproj`

### 3.2 Interface-Abstraktionen und API-Mapping
- `IHexCodec`
- abstrahiert: Lower-Hex-Encoding (`Convert.ToHexString(...).ToLowerInvariant()` bzw. nibble-map)
- `ISha256Primitives`
- abstrahiert: `SHA256.HashData`/`SHA256.Create().ComputeHash`
- `IFastHash64`
- abstrahiert: `System.IO.Hashing.XxHash3.HashToUInt64`
- `IHashPrimitives`
- Aggregation + `ProviderMarker`

### 3.3 Hashing-Verhalten je TFM
- `netstandard2.0`:
- SHA256: `SHA256.Create()`
- Hex: deterministischer lower-hex nibble-codec
- FastHash: `XxHash3.HashToUInt64(...).ToString("x16")`
- `net8.0` und `net10.0`:
- SHA256: `SHA256.HashData`
- Hex: `Convert.ToHexString(...).ToLowerInvariant()`
- FastHash: `XxHash3.HashToUInt64(...).ToString("x16")`
- FastHash ist auf `netstandard2.0` **nicht** deaktiviert.

### 3.4 Provider-Selektion (compile-time)
MSBuild-Conditionen in `src/FileTypeDetection/FileTypeDetectionLib.vbproj`:
- global: `<Compile Remove="Providers/**/*.vb"/>`
- `netstandard2.0`: `<Compile Include="Providers/NetStandard2_0/**/*.vb"/>`
- `net8.0|net10.0`: `<Compile Include="Providers/Net8_0Plus/**/*.vb"/>`

## 4. Verifikation/Nachweise
### 4.1 Befehle und Exit-Codes
1. `dotnet --info` -> `0`
2. `dotnet restore FileClassifier.sln -v minimal` -> `0`
3. `dotnet restore --locked-mode FileClassifier.sln -v minimal` -> `0`
4. `dotnet build FileClassifier.sln -c Release --no-restore -warnaserror -v minimal` -> `0`
5. `dotnet test tests/FileTypeDetectionLib.Tests/FileTypeDetectionLib.Tests.csproj -c Release --no-build -v minimal` -> `0` (`414` Tests gruen)
6. `dotnet test tests/FileTypeDetectionLib.Tests/FileTypeDetectionLib.Tests.csproj -c Release --no-build --filter "Category=ApiContract" -v minimal` -> `0` (`3` Tests gruen)
7. `dotnet pack src/FileTypeDetection/FileTypeDetectionLib.vbproj -c Release --no-build -o artifacts/ci/netstandard2-compat/nuget -v minimal` -> `0`
8. `dotnet build src/FileTypeDetection/FileTypeDetectionLib.vbproj -c Release -f netstandard2.0 -v diag > artifacts/ci/netstandard2-compat/build-netstandard2.0.log` -> `0`
9. `dotnet build src/FileTypeDetection/FileTypeDetectionLib.vbproj -c Release -f net8.0 -v diag > artifacts/ci/netstandard2-compat/build-net8.0.log` -> `0`
10. `dotnet build src/FileTypeDetection/FileTypeDetectionLib.vbproj -c Release -f net10.0 -v diag > artifacts/ci/netstandard2-compat/build-net10.0.log` -> `0`
11. `python3 tools/check-doc-consistency.py` -> `0`
12. `python3 tools/check-docs.py` -> `0`
13. `bash tools/ci/bin/run.sh versioning-svt` -> `0`
14. `bash tools/ci/bin/run.sh version-convergence` -> `0`
15. `bash tools/ci/bin/run.sh security-nuget` -> `0`

### 4.2 Build-/Pack-Proof
- Build-Matrix erfolgreich:
- `src/FileTypeDetection/bin/Release/netstandard2.0/Tomtastisch.FileClassifier.dll`
- `src/FileTypeDetection/bin/Release/net8.0/Tomtastisch.FileClassifier.dll`
- `src/FileTypeDetection/bin/Release/net10.0/Tomtastisch.FileClassifier.dll`
- NUPKG-Inhalt (`unzip -l ... | rg "lib/"`):
- `lib/netstandard2.0/Tomtastisch.FileClassifier.dll`
- `lib/net8.0/Tomtastisch.FileClassifier.dll`
- `lib/net10.0/Tomtastisch.FileClassifier.dll`

### 4.3 Provider-Compile-Proof
- `netstandard2.0`:
- `artifacts/ci/netstandard2-compat/build-netstandard2.0.log:48497`
- Treffer: `Providers/NetStandard2_0/HashPrimitivesProvider.vb (Aufgaben-ID: 7)`
- `net8.0`:
- `artifacts/ci/netstandard2-compat/build-net8.0.log:48421`
- Treffer: `Providers/Net8_0Plus/HashPrimitivesProvider.vb (Aufgaben-ID: 12)`
- `net10.0`:
- `artifacts/ci/netstandard2-compat/build-net10.0.log:48416`
- Treffer: `Providers/Net8_0Plus/HashPrimitivesProvider.vb (Aufgaben-ID: 12)`
- Negativ-Proof:
- kein Treffer fuer `Providers/Net8_0Plus/HashPrimitivesProvider.vb (Aufgaben-ID: 7)` in `build-netstandard2.0.log`
- kein Treffer fuer `Providers/NetStandard2_0/HashPrimitivesProvider.vb (Aufgaben-ID: 12)` in `build-net8.0.log` und `build-net10.0.log`

### 4.4 Forbidden-API Grep-Proof (Core)
Befehl:
```bash
rg -n "Convert\.ToHexString|SHA256\.HashData|System\.IO\.Hashing|Microsoft\.AspNetCore\.App" src/FileTypeDetection/Core
```
Ergebnis:
- keine Treffer, Exit-Code `1` (expected for no-match)

### 4.5 CI-Teilchecks
- `artifacts/ci/versioning-svt/versioning-svt-summary.json` -> `status: pass`
- `artifacts/ci/version-convergence/summary.json` -> `status: pass`, `repo_version=5.2.0`, `vbproj_version=5.2.0`, `docs_latest_version=5.2.0`
- `artifacts/ci/security-nuget/result.json` -> `status: pass`

### 4.6 Policy Ambiguity
Ambiguitaet zwischen:
- `docs/versioning/001_POLICY_VERSIONING.MD:43` (in PR/CI keine statischen Versionfelder), und
- existierendem SVT/Convergence-Setup (`verify-version-convergence.sh`, `check-versioning-svt.sh`), das `RepoVersion` und `Version`/`PackageVersion` in `FileTypeDetectionLib.vbproj` erwartet.

Entscheidung fuer diesen Scope:
- fail-closed nach bestehendem CI/Repo-Vertrag: Versionen auf `5.2.0` synchron gehalten und durch `versioning-svt` + `version-convergence` verifiziert.

## 5. Grenzen/Nicht-Ziele
- Keine oeffentliche API-Signatur geaendert.
- Keine Runtime-Provider-Umschaltung eingefuehrt.
- Keine Blocker-Datei notwendig (`999_NETSTANDARD2_BLOCKERS.MD` nicht erstellt).

## 6. Verlinkte SSOT-Quellen
- [Versioning Policy](https://github.com/tomtastisch/FileClassifier/blob/main/docs/versioning/001_POLICY_VERSIONING.MD)
- [Code Quality Policy](https://github.com/tomtastisch/FileClassifier/blob/main/docs/governance/045_CODE_QUALITY_POLICY_DE.MD)
- [Documentation Policy](https://github.com/tomtastisch/FileClassifier/blob/main/docs/governance/004_POLICY_DOCUMENTATION.MD)
- [Audit Index](https://github.com/tomtastisch/FileClassifier/blob/main/docs/audit/000_INDEX.MD)
Loading
Loading