Skip to main content
← Back to list
01Issue
BugOpenSwamp CLIPublic
AssigneesNone

Relationships

#1744 ExtensionWorkflowRepository scans manifest.yaml as a workflow, emitting 'Unknown key manifestVersion' warning

Opened by svendowideit · 8/20/2026

Summary

ExtensionWorkflowRepository walks the extension workflows directory recursively for *.yaml files and treats every one as a workflow definition. It has no skip for manifest.yaml / manifest.yml, so an extension that uses the paths.base: manifest layout (manifest co-located with its workflows) triggers a spurious warning on every swamp serve / swamp doctor workflows / workflow scan.

Reproduction

  1. Create an extension with paths.base: manifest whose manifest.yaml sits in the same directory as its workflow YAML files, e.g.:
extensions/workflows/news/
  manifest.yaml          # has manifestVersion: 1, name, version, models, workflows, ...
  news.yaml              # workflow
  news-fusion.yaml       # workflow
  1. Run swamp serve (or swamp doctor workflows).

Expected

The manifest is recognized as an extension manifest and skipped by the workflow scanner. No warning.

Actual

warning extension-workflow-repo Skipping broken extension workflow
  "/home/[REDACTED]/src/swamp-project/extensions/workflows/news/manifest.yaml":
  "Unknown key 'manifestVersion' on workflow '@svendowideit/news'.
  Valid workflow keys: id, name, description, trigger, tags, inputs, jobs,
  version, concurrency, reports, target, labels, platform, queueTimeout"

swamp doctor workflows reports OVERALL: FAIL because of this one file, even though all real workflows load fine.

Root cause

src/infrastructure/persistence/extension_workflow_repository.ts findAll():

for await (const entry of walk(dir, { exts: [".yaml"], includeDirs: false })) {
  const content = await Deno.readTextFile(entry.path);
  const data = parseYaml(content) as WorkflowData;
  const workflow = Workflow.fromData(data);   // rejects manifestVersion
  ...
}

There is no filter to skip manifest.yaml / manifest.yml. Workflow.fromDataWorkflowSchema uses rejectUnknownKeys("workflow", ...), which throws on the manifest's manifestVersion key.

Why this matters

  • The paths.base: manifest layout is the documented, rubric-rewarded layout (README/LICENSE at archive root, manifest co-located with source). Any extension using it with workflows will emit this warning.
  • It's cosmetic (the extension and its workflows still load correctly — the extension loader and workflow scanner are separate code paths), but it's noisy and makes swamp doctor workflows report a false FAIL.

Suggested fix

Skip manifest files in the walk. The extension loader already recognizes manifest.yaml and manifest.yml (see src/domain/extensions/manifest_cross_kind_discovery.ts MANIFEST_FILENAMES). The workflow scanner should do the same — e.g. filter entry.name against manifest.yaml / manifest.yml (or add a skip regex to the walk options).

Environment

  • swamp version: 20260818.022435.0-sha.4ed5cc7b
  • Reproduced on latest tag v20260820.011410.0-sha.23de2d5a (scanner code unchanged since #500)
02Bog Flow
OPENTRIAGEDIN PROGRESSSHIPPED

Open

8/20/2026, 6:39:05 AM

No activity in this phase yet.

03Sludge Pulse
Editable. Press Enter to edit.

svendowideit commented 8/20/2026, 6:41:08 AM

gosh, dsv4-pro is mean :)

Sign in to post a ripple.