feat(classification): data-sensitivity taxonomy + per-wing/repo tags (#50)
Implements the I1-prerequisite from #49/#50: the classification taxonomy and the per-wing / per-repo tagging the capture server reads to derive a target's sensitivity. - Levels public < internal < confidential, ordered so "stricter wins" (spec §4.1 model C) is a plain max via Stricter(). - Tags read from an optional classification.yaml at the brain root (wings:/repos: maps). Absent file → defaults-only, not an error. - Defaulting: client-* → confidential; hyperguild/homelab → internal; everything else → confidential. Fail-safe-to-strictest is the load-bearing property: a missing tag never silently downgrades. - Config.Derive(Target) is the function the use-case calls; Wing/Repo are the per-kind helpers. ParseLevel rejects unknown tokens; a bad level in the config file is a hard load error. Central classification.yaml (not _index.md frontmatter, not gitea repo topics): classifying a repo needs no live Gitea client, so #50 has no dependency on the tracker work (#52); it's auditable in one place; and it avoids BuildWingIndex clobbering a wing's regenerated _index.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -203,6 +203,12 @@ binding design decisions for the build.
|
||||
- **Prerequisite (new build work):** a classification taxonomy (e.g. `public` /
|
||||
`internal` / `confidential`) and a per-wing / per-repo classification tag the server can read.
|
||||
This must exist before the I1 gate is load-bearing. Tracked as a sub-task of #49.
|
||||
- **Implemented (#50):** taxonomy `public < internal < confidential` (ordered so "stricter wins"
|
||||
is `max`) in `ingestion/internal/classification/`. Tags are read from an optional
|
||||
`classification.yaml` at the brain root (`wings:` / `repos:` maps); absent entries fall to
|
||||
built-in defaults (`client-*` → confidential; `hyperguild`/`homelab` → internal; everything
|
||||
else → **confidential, fail-safe**). `Config.Derive(Target)` is the function the use-case
|
||||
calls. See brain `wiki/hyperguild/decisions/capture-classification-taxonomy`.
|
||||
- Rationale: composes with decision 2; fails safe; honours a caller flagging something *more*
|
||||
sensitive than its destination. Pure caller-trust (A) was rejected — it makes the gate theatre.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user