Part of epic #5012. Spec: specs/067-knowledge-ingest/spec.md (§8 Integration Points).
Description
CLI + config scaffold for the knowledge-ingest feature. Mirrors the existing src/commands/ingest.rs structure. No sink logic yet — this issue lands the command surface, config section, and migration step that the sink PRs (N1, G2) hang off.
Scope
src/cli.rs: Command::Knowledge { Ingest { sources, dry_run, max_documents, provider, yes }, Rollback { batch_id }, Status }.
src/runner.rs: dispatch to src/commands/knowledge.rs.
src/commands/knowledge.rs: command handler skeleton using AppBuilder (config, build_provider, build_memory); --dry-run and --yes plumbing; current-project root resolution (allowlist enforcement point, INV-6); progress render via mpsc (modeled on IndexProgress).
zeph-config [knowledge] section: ingest_provider, concurrency (default 3), max_documents (default 0 = unlimited), recall_include_imported (default true — see F1), transcript_scope = "current-project". #[serde(default)] on all fields.
--init wizard step_knowledge() (graph sink default off; choose ingest_provider).
--migrate-config step adds [knowledge] defaults; idempotent (--in-place).
- Place TODO marker: automatic/scheduled ingest is out of MVP scope (spec §9).
Acceptance
zeph knowledge --help lists ingest, rollback, status.
zeph knowledge ingest --source specs --dry-run runs the handler skeleton and writes nothing (sink wired in N1).
--migrate-config --in-place adds [knowledge] to a config lacking it and is a no-op when already present.
--init emits [knowledge] only when the user opts into non-default values.
Dependencies
None (foundation). Blocks: N1, N2, N3, G2.
Labels: feature, core, config, P1, size/L.
Part of epic #5012. Spec:
specs/067-knowledge-ingest/spec.md(§8 Integration Points).Description
CLI + config scaffold for the knowledge-ingest feature. Mirrors the existing
src/commands/ingest.rsstructure. No sink logic yet — this issue lands the command surface, config section, and migration step that the sink PRs (N1, G2) hang off.Scope
src/cli.rs:Command::Knowledge { Ingest { sources, dry_run, max_documents, provider, yes }, Rollback { batch_id }, Status }.src/runner.rs: dispatch tosrc/commands/knowledge.rs.src/commands/knowledge.rs: command handler skeleton usingAppBuilder(config,build_provider,build_memory);--dry-runand--yesplumbing; current-project root resolution (allowlist enforcement point, INV-6); progress render viampsc(modeled onIndexProgress).zeph-config[knowledge]section:ingest_provider,concurrency(default 3),max_documents(default 0 = unlimited),recall_include_imported(default true — see F1),transcript_scope = "current-project".#[serde(default)]on all fields.--initwizardstep_knowledge()(graph sink default off; chooseingest_provider).--migrate-configstep adds[knowledge]defaults; idempotent (--in-place).Acceptance
zeph knowledge --helplistsingest,rollback,status.zeph knowledge ingest --source specs --dry-runruns the handler skeleton and writes nothing (sink wired in N1).--migrate-config --in-placeadds[knowledge]to a config lacking it and is a no-op when already present.--initemits[knowledge]only when the user opts into non-default values.Dependencies
None (foundation). Blocks: N1, N2, N3, G2.
Labels:
feature,core,config, P1,size/L.