Set default value for workspace.root and updated config documentation

This commit is contained in:
2026-05-19 07:07:19 -05:00
parent 9c5e5d6dc1
commit 11a3e174b6
4 changed files with 39 additions and 2 deletions

View File

@@ -66,7 +66,8 @@ whisperx:
Why this is sufficient: Why this is sufficient:
- `workspace.root` and `whisperx.transcribe_url` are the core required pipeline fields. - `whisperx.transcribe_url` is required.
- `workspace.root` is optional and defaults to `/var/lib/narratio`.
- Seriatim and Audita sections may be omitted; defaults are applied. - Seriatim and Audita sections may be omitted; defaults are applied.
- Archive, storage, spool, normalize, and other optional sections get defaults when omitted. - Archive, storage, spool, normalize, and other optional sections get defaults when omitted.
@@ -135,7 +136,7 @@ Defaults listed here are effective runtime defaults after load.
| Path | Type | Required | Default | | Path | Type | Required | Default |
| --- | --- | --- | --- | | --- | --- | --- | --- |
| `pipeline.workspace.root` | string | Yes | none | | `pipeline.workspace.root` | string | No | `/var/lib/narratio` |
| `pipeline.workspace.cleanup_after_archive` | bool | No | `false` | | `pipeline.workspace.cleanup_after_archive` | bool | No | `false` |
| `pipeline.secrets.env_dir` | string | Conditional | none | | `pipeline.secrets.env_dir` | string | Conditional | none |
| `pipeline.storage.backend` | string | No | empty | | `pipeline.storage.backend` | string | No | empty |

View File

@@ -11,6 +11,7 @@ const (
DefaultS3AccessKeyIDEnv = "OBJECT_STORAGE_KEY_ID" DefaultS3AccessKeyIDEnv = "OBJECT_STORAGE_KEY_ID"
DefaultS3SecretAccessKeyEnv = "OBJECT_STORAGE_KEY" DefaultS3SecretAccessKeyEnv = "OBJECT_STORAGE_KEY"
DefaultStorageS3RootPrefix = "dnd" DefaultStorageS3RootPrefix = "dnd"
DefaultWorkspaceRoot = "/var/lib/narratio"
DefaultSpoolRoot = "/var/spool/narratio" DefaultSpoolRoot = "/var/spool/narratio"
DefaultWhisperXLanguage = "en" DefaultWhisperXLanguage = "en"

View File

@@ -152,6 +152,7 @@ func applyPipelineDefaults(cfg *PipelineConfig) {
if cfg == nil { if cfg == nil {
return return
} }
applyWorkspaceDefaults(&cfg.Workspace)
applyStorageDefaults(&cfg.Storage) applyStorageDefaults(&cfg.Storage)
applySpoolDefaults(&cfg.Spool) applySpoolDefaults(&cfg.Spool)
applyArchiveDefaults(&cfg.Archive) applyArchiveDefaults(&cfg.Archive)
@@ -166,6 +167,15 @@ func applyPipelineDefaults(cfg *PipelineConfig) {
applyScriptoriumDefaults(cfg.Scriptorium) applyScriptoriumDefaults(cfg.Scriptorium)
} }
func applyWorkspaceDefaults(cfg *WorkspaceConfig) {
if cfg == nil {
return
}
if cfg.Root == "" {
cfg.Root = DefaultWorkspaceRoot
}
}
func applyStorageDefaults(cfg *StorageConfig) { func applyStorageDefaults(cfg *StorageConfig) {
if cfg == nil { if cfg == nil {
return return

View File

@@ -15,6 +15,7 @@ func TestLoadAndValidate(t *testing.T) {
wantLoadErr string wantLoadErr string
wantValidate string wantValidate string
checkDefault bool checkDefault bool
wantRoot string
}{ }{
{ {
name: "valid minimal config", name: "valid minimal config",
@@ -39,6 +40,7 @@ inputs:
glossary_file: ./glossary.yml glossary_file: ./glossary.yml
`, `,
checkDefault: true, checkDefault: true,
wantRoot: "/tmp/narratio",
}, },
{ {
name: "seriatim and audita sections can be omitted", name: "seriatim and audita sections can be omitted",
@@ -59,6 +61,26 @@ inputs:
glossary_file: ./glossary.yml glossary_file: ./glossary.yml
`, `,
checkDefault: true, checkDefault: true,
wantRoot: "/tmp/narratio",
},
{
name: "workspace root defaults when omitted",
pipelineYAML: `whisperx:
transcribe_url: https://transcription.ai.rakestrawhome.com/transcribe
analyzer:
timeout: 20m
notification:
timeout: 15s
`,
sessionYAML: `session_id: 2026-05-03
inputs:
audio_dir: ./audio
speakers_file: ./speakers.yml
autocorrect_file: ./autocorrect.yml
glossary_file: ./glossary.yml
`,
checkDefault: true,
wantRoot: DefaultWorkspaceRoot,
}, },
{ {
name: "unknown pipeline field fails", name: "unknown pipeline field fails",
@@ -713,6 +735,9 @@ inputs:
t.Fatalf("SessionPath = %q, want %q", cfg.SessionPath, sessionPath) t.Fatalf("SessionPath = %q, want %q", cfg.SessionPath, sessionPath)
} }
if tt.checkDefault { if tt.checkDefault {
if tt.wantRoot != "" && cfg.Pipeline.Workspace.Root != tt.wantRoot {
t.Fatalf("workspace.root = %q, want %q", cfg.Pipeline.Workspace.Root, tt.wantRoot)
}
if cfg.Pipeline.WhisperX.Language != "en" { if cfg.Pipeline.WhisperX.Language != "en" {
t.Fatalf("whisperx.language = %q, want %q", cfg.Pipeline.WhisperX.Language, "en") t.Fatalf("whisperx.language = %q, want %q", cfg.Pipeline.WhisperX.Language, "en")
} }