raw accept: Datums-Shard statt Typverzeichnis, fidelity/authority am Drop-Punkt (Teil 1/3, #67)
Files changed: - .gitignore - CHANGES.md - VERSION - instructions/bootstrap.md - instructions/wiki-ingest/SKILL.md - kb/CONTRACT.md - raw/CONTRACT.md - tools/CONTRACT.md - tools/chemenu/commands/dist_cmd.py - tools/chemenu/commands/docs_verify.py - tools/chemenu/commands/new_page.py - tools/chemenu/commands/raw_cmd.py - tools/chemenu/commands/touch.py - tools/chemenu/lint_core.py - tools/chemenu/tests/test_dist_cmd.py - tools/chemenu/tests/test_docs_verify.py - tools/chemenu/tests/test_lint.py - tools/chemenu/tests/test_new_page.py - tools/chemenu/tests/test_provenance.py - tools/chemenu/tests/test_raw_cmd.py - tools/chemenu/tests/test_touch.py - tools/chemenu/tests/test_type_resolver.py - tools/chemenu/type_resolver.py - types/source.md - types/source.schema.yaml
This commit is contained in:
+82
-1
@@ -35,7 +35,7 @@ dev-checkout concern - readable here, never shipped as something to parse.
|
||||
|
||||
---
|
||||
|
||||
## 4.8.0-beta.7 - 2026-09-08 - source_type: Default streichen, unclassified als sichtbares Fach, layout: fuer source (schliesst #66)
|
||||
## 4.8.0-beta.8 - 2026-09-08 - raw accept: Datums-Shard statt Typverzeichnis, fidelity/authority am Drop-Punkt (schliesst #67)
|
||||
|
||||
**Author:** Torben Nehmer
|
||||
|
||||
@@ -48,6 +48,7 @@ dev-checkout concern - readable here, never shipped as something to parse.
|
||||
- update entity naming conventions to use singular form for consistency
|
||||
- kb/concepts/ bekommt Areas: layout: fuer concept, Area-Titel aus jedem Type-Spec, Schwellen-Empfehlung im lint (schliesst #59)
|
||||
- source_type: Default streichen, unclassified als sichtbares Fach, layout: fuer source (schliesst #66)
|
||||
- raw accept: Datums-Shard statt Typverzeichnis, fidelity/authority am Drop-Punkt (schliesst #67)
|
||||
<!-- /wikitool:bumps -->
|
||||
|
||||
Das Label `status/incoming` gibt es seit heute in Gitea: der Mensch legt einen
|
||||
@@ -418,6 +419,86 @@ maschinengelesenes Format. Kein `--breaking`, kein Migrationsdokument.
|
||||
|
||||
Schließt #66.
|
||||
|
||||
**`raw accept`: Datums-Shard statt Typverzeichnis, `fidelity`/`authority` am Drop-Punkt** (#67,
|
||||
Paket B von vier — A ist #66 oben, C ist #68, D ist #69): zwei unabhängige Befunde, ein
|
||||
Codepfad.
|
||||
|
||||
Befund 1: `raw/CONTRACT.md`s vier Typverzeichnisse (`articles/`, `documents/`, `notes/`,
|
||||
`assets/`) lösten keinen der drei Gründe ein, die einen Verzeichnis-Split rechtfertigen —
|
||||
`raw/` wird nie durchgeblättert, keine Klausel dieser Datei galt je pro Verzeichnis, alle vier
|
||||
verrotten gleich (unveränderlich, nie gelöscht). Der Split kostete real: der Mensch trifft beim
|
||||
Ablegen in `incoming/<typ>/` eine Routing-Entscheidung, die später blind nach `source_type:`
|
||||
abgeschrieben wird — genau darüber entstand der in #66 korrigierte Bias (`raw/notes/` hielt laut
|
||||
altem Contract-Text „Gesprächsprotokolle", 16 der 25 Dateien dort waren tatsächlich Transkripte).
|
||||
|
||||
Befund 2: was am Drop-Punkt bekannt ist und danach nirgends mehr — wie treu eine Erfassung ist
|
||||
und was das Material über seinen Gegenstand behaupten darf. Zwei neue, unabhängige Achsen auf
|
||||
`types/source.md`: `fidelity` (`verbatim`/`published`/`secondhand`/`nontextual`) und `authority`
|
||||
(`normative`/`reporting`/`opinion`), beide mit `unknown` als backfill-only-Wert.
|
||||
|
||||
Umgesetzt:
|
||||
|
||||
- `raw accept` adressiert eine Datei jetzt über `raw/<YYYY>/<MM>/`, berechnet aus dem
|
||||
Annahmedatum — eine reine Funktion von etwas Unveränderlichem, kann also nie rebalancieren und
|
||||
keinen `[^cite-id]`-Anker brechen. `incoming/` wird flach; ein Unterverzeichnis wird toleriert
|
||||
und ignoriert statt inspiziert (alte `incoming/<typ>/`-Skripte laufen unverändert weiter).
|
||||
Bestandsdateien in `raw/articles|documents|notes|assets/` bleiben unbewegt und weiter gültige
|
||||
`--replaces`-Ziele — das Layout war nirgends versioniert, es gibt also keine „zwei Korpusformen".
|
||||
Wächst eine bereits promotete Einzeldatei zum Bündel, entsteht das Bündel an ihrem eigenen
|
||||
Speicherort, nie im heutigen Shard — ein Bündel aus altem und neuem Datum hätte keine
|
||||
eindeutig richtige Adresse.
|
||||
- Stem-Eindeutigkeit (#64) gilt jetzt global über `raw/`, nicht mehr pro Typverzeichnis —
|
||||
ohne Typverzeichnisse als Grenze wäre die Prüfung sonst wirkungslos gegen ein Bündel in einem
|
||||
anderen Shard oder einem Alt-Verzeichnis.
|
||||
- `fidelity`/`authority`: neu in `types/source.schema.yaml`, ohne `default:` und bewusst
|
||||
**nicht** in `required:` (sonst bricht jede bestehende Instanz an der Validierung — die
|
||||
MINOR-Einstufung unten hängt daran). Erzwungen stattdessen im Werkzeug: `raw accept` verlangt
|
||||
beide Flags immer; trägt der Aufruf `--page`, schreibt es sie direkt auf die Zielseite, sonst
|
||||
druckt es die fertige `new source --set fidelity=... --set authority=...`-Folgezeile, und
|
||||
`new source` verweigert seinerseits ohne beide Werte. `unknown` ist backfill-only — weder
|
||||
`raw accept` noch `new source` dürfen es schreiben.
|
||||
- Capture-Felder sind **fill-once**, nicht auf `touch.py`s `UNSETTABLE`-Denylist: eine Denylist
|
||||
hätte auch den ersten (Backfill-)Schreibzugriff verboten, den der Migrationslauf braucht.
|
||||
`touch --set <feld>=<wert>` schreibt nur, solange das Feld fehlt, und verweist danach auf
|
||||
`raw accept --replaces` als einzigen Korrekturweg — der einzige Aufruf, der einen bereits
|
||||
gesetzten Capture-Wert überschreiben darf, weil eine korrigierte Erfassung eine neue Edition
|
||||
der Quelle ist, keine Bearbeitung der Seite. `types/source.md` deklariert die Feldliste selbst
|
||||
(`capture_fields:`), gelesen über `TypeResolver.get_capture_fields` statt an drei Stellen
|
||||
hartkodiert.
|
||||
- `lint` bekommt einen neuen beratenden Befund, *Confidence Above Source Standing*: die
|
||||
Autoritätsbewertung, die `kb/CONVENTIONS.md`s Confidence-Rubrik seit je verlangt („+0.1 für
|
||||
offizielle Doku"), aber nirgends festhielt. Eine stackseitige Obergrenzentabelle in
|
||||
`kb/CONTRACT.md` (`reporting` 0.8, `opinion` 0.6, `secondhand`/`nontextual` 0.7, `normative`/
|
||||
`verbatim`/`published`/`unknown` ohne Obergrenze) begrenzt `confidence_base`, ersetzt es aber
|
||||
nicht — eine Formel hätte zwei widersprechende Ableitungen derselben Zahl, und Autorität ist
|
||||
eine Obergrenze, kein Determinant. Nicht in `HARD_ERROR_KEYS`. Auf dieser Instanz meldet der
|
||||
Befund aktuell nichts: kein Bestand trägt die neuen Felder, das ist erwartet, nicht geprüft.
|
||||
- Aufgeräumt: `dist_cmd.RAW_SUBDIRS` und der darauf laufende `docs verify`-Check
|
||||
(`check_raw_subdirs`) entfallen ersatzlos, `raw/CONTRACT.md`s Routing-Tabelle beschreibt
|
||||
stattdessen den Shard, die Ignore-Kanarie wandert von `incoming/documents/probe.pdf` auf
|
||||
`incoming/probe.pdf`.
|
||||
|
||||
**MINOR**, `4.8.0-beta.8` desselben Kandidaten — drei geprüfte Bedingungen: `raw accept` nimmt
|
||||
weiterhin Dateien aus `incoming/<irgendwas>/` an, statt sie zu verweigern; `fidelity`/`authority`
|
||||
stehen nicht in `required:`; die zwei neuen Pflichtflags an `raw accept` sind eine
|
||||
Verhaltensänderung, aber dieselbe Einstufung, die #66s `new source`-Verweigerung im selben
|
||||
Kandidaten schon bekam. Kein `--breaking`, kein Migrationsdokument nötig — kein Bestand wird
|
||||
durch diesen Bump ungültig.
|
||||
|
||||
Geändert: `raw/CONTRACT.md`, `types/source.md`, `types/source.schema.yaml`,
|
||||
`tools/chemenu/commands/raw_cmd.py` (Neufassung), `tools/chemenu/commands/new_page.py`
|
||||
(Capture-Feld-Pflicht), `tools/chemenu/commands/touch.py` (`_capture_field_or_fail`,
|
||||
Fill-once), `tools/chemenu/type_resolver.py` (`get_capture_fields`),
|
||||
`tools/chemenu/commands/dist_cmd.py`/`docs_verify.py` (Aufräumen), `tools/chemenu/lint_core.py`
|
||||
(neuer Befund), `kb/CONTRACT.md` (Obergrenzentabelle), `tools/CONTRACT.md`, `.gitignore`,
|
||||
`instructions/bootstrap.md`, `instructions/wiki-ingest/SKILL.md` (Schritt 1 und 6), zugehörige
|
||||
Tests.
|
||||
|
||||
Absichtlich nicht in diesem Publish: der Backfill über die 31 bestehenden Source-Seiten (eigener
|
||||
`work/`-Lauf nach `instructions/migrate-corpus.md`, eigenes Mass-Update-Gate) und die
|
||||
Beleg-/Fundzeile im Changelog dazu — #67 bleibt bis dahin offen, dieser Bump deckt Schritt 1 der
|
||||
im Issue festgehaltenen Drei-Publish-Abfolge.
|
||||
|
||||
---
|
||||
|
||||
## 4.7.4 - 2026-09-04 - bootstrap.md nennt den session-id-WARN nach frischem Bootstrap explizit als erwartet
|
||||
|
||||
Reference in New Issue
Block a user