Context
Productionizes the onboarding + auto-distribution flow on top of the landed Config substrate. The spine is designed in #178 (classifier-service: COMPILE/TAG, catalog, flywheel, determinism guardrail); the encrypted, master-only DataClass::Config home is landed in #201 (Phases 0–5). This issue is the product/onboarding view + four refinements (R1–R4).
The flow
- Config init — two entry points (both write
config/policy.enc + config/memory-taxonomy.enc):
- A · default preset — role/region-aware curated taxonomy (the parent-control "init default" path).
- B · NL → COMPILE — user types a sentence; classifier COMPILEs it into taxonomy + policy. (This is where COMPILE happens explicitly.)
POST /v1/master/memory/plant stays test-only (CI/demo seed); production authors the taxonomy via COMPILE/default and classifies memory on write.
- Agent connect → vendor-default classifier → auto-distribution — the classifier TAGs the agent's surface (memory namespaces it reads + cred services it uses) and proposes scopes; master confirms (sensitivity-gated) →
setScope.
- New cred minted → auto-categorize (catalog + telemetry prior) → master picks →
cred:<service> grant.
Cred and memory follow the SAME pattern (universal-gate-pattern): classify → propose scope → master-confirm → setScope → deterministic gate. Only the resource axis differs (memory → namespace / read; cred → service-category / fetch).
Work items (each independently shippable; ship in order)
Resolved decisions (2026-06)
- Default presets: ~10 role/region presets; the default = the adult-with-kids / business / IoT-home / relationship(wife,parents) / investment profile.
- COMPILE review UX: confirm-as-is + adjust later.
- Telemetry: opt-in — tracked separately (see the linked telemetry enhancement issue).
- Vendor-overlay trust: signed + sensitivity floor.
Security invariants (load-bearing — spec §3)
- Determinism guardrail — classifier emits tags/policy, never allow/deny; no model on the gate hot path.
- Auto-distribute = propose → confirm — sensitive categories require explicit K11; the sensitivity tier comes from the catalog, NOT the vendor/telemetry prior.
- Tag the entity (real service id), not the agent's/vendor's narrative.
- Telemetry + vendor priors carry CATEGORIES, never GRANTS — catalog ≠ policy; grants stay in encrypted Config.
Acceptance
Context
Productionizes the onboarding + auto-distribution flow on top of the landed Config substrate. The spine is designed in #178 (classifier-service: COMPILE/TAG, catalog, flywheel, determinism guardrail); the encrypted, master-only
DataClass::Confighome is landed in #201 (Phases 0–5). This issue is the product/onboarding view + four refinements (R1–R4).docs/plan/web-flow/onboarding-classifier-distribution.mddocs/plan/classifier-service.md(docs(plan): classifier-service — NL → deterministic authorization for the fleet (#147) #178) ·docs/research/universal-gate-pattern.mddocs/wiki/policy-scope-namespace.mdThe flow
config/policy.enc+config/memory-taxonomy.enc):POST /v1/master/memory/plantstays test-only (CI/demo seed); production authors the taxonomy via COMPILE/default and classifies memory on write.setScope.cred:<service>grant.Cred and memory follow the SAME pattern (universal-gate-pattern): classify → propose scope → master-confirm →
setScope→ deterministic gate. Only the resource axis differs (memory → namespace / read; cred → service-category / fetch).Work items (each independently shippable; ship in order)
apps/parent-control+ daemon)agentkeys-worker-classify.CapOp::Classify+/v1/cap/classify— brokercap.rs+ workerverify.rs(2-crate enum add); data-class-bound.apps/parent-control)Resolved decisions (2026-06)
Security invariants (load-bearing — spec §3)
Acceptance