Skip to content

feat(pipeline): config schema (off by default) + daemon boot wiring - #205

Merged
saucam merged 2 commits into
feat/sdlc-pipelinefrom
feat/sdlc-pipeline-wiring
Jul 20, 2026
Merged

feat(pipeline): config schema (off by default) + daemon boot wiring#205
saucam merged 2 commits into
feat/sdlc-pipelinefrom
feat/sdlc-pipeline-wiring

Conversation

@saucam

@saucam saucam commented Jul 19, 2026

Copy link
Copy Markdown
Collaborator

What

Second slice: the config surface + daemon boot wiring for the SDLC pipeline. Still effectively dark — the pipeline is off by default.

  • PipelineSchema in config: enabled (default false) + defaultPack (default null), plus a CODEOID_PIPELINE_ENABLED env switch (matching the dispatch/conductor kill-switch convention).
  • SessionManager constructs a PipelineManager only when enabled, sharing the daemon DB file so pipeline state persists and non-terminal pipelines rehydrate on boot (resume()); get pipelines() returns undefined when disabled ⇒ the daemon holds no pipeline manager at all.
  • createPipelineManagerFromConfig() — a pure factory so the enable/disable + share-DB + restart-survival behavior is unit-tested without standing up a full SessionManager.

Verification

  • tsc --noEmit — clean project-wide (0 errors)
  • bun test95 pass / 0 fail (pipeline 30 + config/settings suites)
  • biome check — clean

Stacked

Base = feat/sdlc-pipeline (#204). Review after #204. Next: PR #3 — a backend-driven PhaseKind + the halt → ui_request → answer-from-frontend → resume path + additive protocol fields.

🤖 Generated with Claude Code

@github-actions

Copy link
Copy Markdown

🤖 Gemini code review

The PR successfully introduces the configuration schema and daemon-level wiring for the SDLC pipeline feature. It is properly gated behind a default-off switch and includes comprehensive unit tests verifying the factory behavior and persistence.

Findings: 🔴 0 · 🟠 0 · 🟡 0 · 🟢 0


Tokens spent · ⬆️ Input: 3,187 · ⬇️ Output: 56 · Σ Total: 4,999
Total may be higher due to thinking token counts.

Add a PipelineSchema to config (enabled=false default, defaultPack=null) with a CODEOID_PIPELINE_ENABLED env switch, and construct a PipelineManager in SessionManager when enabled — sharing the daemon DB and rehydrating non-terminal pipelines on boot (resume). Undefined when disabled, so the daemon stays dark by default. Pure createPipelineManagerFromConfig() factory keeps the enable/disable + share-DB + restart-survival behavior unit-tested without a full SessionManager.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ume (#206)

Add the runtime layer. A 'skill' PhaseKind runs fn skills natively and drives prompt/slash skills through an injectable PhaseRunner (the backend seam; a SessionManager-backed adapter lands in a follow-up). PipelineManager.answer(id, requestId, {approved, value}) is the daemon side of halt -> answer-from-a-frontend -> resume: it resolves a halted phase (pass/fail) and continues advancing to the next halt or terminal. Fully unit-tested with fakes; no live backend required. Still dark (pipeline off by default).

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@saucam
saucam merged commit c731e84 into feat/sdlc-pipeline Jul 20, 2026
saucam added a commit that referenced this pull request Jul 20, 2026
…dark) (#204)

* docs: SDLC pipeline design — external prior-art & SOTA validation + refinements

Add §2a (Spec Kit / BMAD / Kiro / Roo / Aider + 2026 papers + omnigent/kiss_ai) and §5a (per-phase tool scoping, typed artifacts, entry/grounding gates, constitution/steering layer, gate enforcement tiers). Resolve open Q3/Q4/Q6; default the pipeline off (freestyle) until a pack is selected.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(pipeline): SDLC pipeline primitive — engine, store, registries (dark)

Methodology-agnostic pipeline foundation (docs/sdlc-pipeline.md §5): PhaseDef/PipelineState types + the four plugin seams (PhaseKind, GatePlugin, SkillPlugin, Pack), a Map-backed registry, a built-in noop phase kind + always/manual gates, the advance engine (entry/exit gates; onFail halt/retry/abort), durable bun:sqlite state, and PipelineManager with resume() for restart survival. No daemon wiring, no methodology content — lands dark. 26 unit tests; tsc + biome clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(pipeline): config schema (off by default) + daemon boot wiring (#205)

* feat(pipeline): config schema (off by default) + daemon boot wiring

Add a PipelineSchema to config (enabled=false default, defaultPack=null) with a CODEOID_PIPELINE_ENABLED env switch, and construct a PipelineManager in SessionManager when enabled — sharing the daemon DB and rehydrating non-terminal pipelines on boot (resume). Undefined when disabled, so the daemon stays dark by default. Pure createPipelineManagerFromConfig() factory keeps the enable/disable + share-DB + restart-survival behavior unit-tested without a full SessionManager.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(pipeline): skill phase kind + PhaseRunner seam + halt/answer/resume (#206)

Add the runtime layer. A 'skill' PhaseKind runs fn skills natively and drives prompt/slash skills through an injectable PhaseRunner (the backend seam; a SessionManager-backed adapter lands in a follow-up). PipelineManager.answer(id, requestId, {approved, value}) is the daemon side of halt -> answer-from-a-frontend -> resume: it resolves a halted phase (pass/fail) and continues advancing to the next halt or terminal. Fully unit-tested with fakes; no live backend required. Still dark (pipeline off by default).

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant