feat(sdd): add SDD infrastructure and runner as first managed component#1092
feat(sdd): add SDD infrastructure and runner as first managed component#1092jeremyeder wants to merge 1 commit intomainfrom
Conversation
Introduces Spec-Driven Development (SDD) enforcement infrastructure: - SDD manifest (.specify/sdd-manifest.yaml) declaring managed components and their paths, constitutions, specs, and enforcement mode - Runner constitution (.specify/constitutions/runner.md) with 6 principles extracted from PR #1091 patterns (version pinning, freshness automation, dependency procedures, layer discipline, schema sync, bridge modularity) - Runner spec (.specify/specs/runner.md) documenting component boundary, current state, maintenance workflows, and change protocol - SDD preflight CI job (.github/workflows/sdd-preflight.yml) that checks PRs for managed-path modifications and warns or blocks accordingly The runner is the first component onboarded to SDD in warn mode. Additional components can be added to the manifest to gradually migrate the codebase. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
markturansky
left a comment
There was a problem hiding this comment.
Balanced Take on SDD Infrastructure
The Vision: Constitutional governance for agent-maintained components is genuinely interesting. The separation of constitution (principles) / spec (current state) / manifest (enforcement) is clean architecture.
The Gap: You're building agent infrastructure before you have an agent. The CI doesn't validate constitutional compliance (R-I through R-VI) — it just checks "did you touch these paths?" That's documentation enforcement, not governance.
The Risk:
- The spec will drift from reality (no automated sync between
specs/runner.mdand actual Dockerfile versions) - The bash glob→regex conversion is fragile (
sed 's/\*\*/.*/g'doesn't handle brace expansion, character classes, etc.) - Overhead (CI time, bot comments,
sdd-exemptlabels) without proven ROI
What's Actually Valuable Right Now:
The constitution and spec themselves are excellent documentation. They codify patterns that should be followed (version pinning, layer discipline, schema sync). That's useful even without an agent.
Recommendation
Split this PR into two pieces:
Ship Now: Documentation
.specify/
constitutions/runner.md ✅
specs/runner.md ✅
docs/CONTRIBUTING.md (link to constitution)
These docs help human maintainers understand component governance. No CI overhead.
Ship Later: Enforcement Infrastructure
When you have a persistent agent session that actually maintains the runner:
- Add the manifest + CI preflight
- Validate constitutional compliance, not just paths (check version pins exist, layers are optimized, etc.)
- Use a proper glob library instead of bash regex conversion
Why Wait on CI?
- You'll learn what enforcement needs to look like once you have a real agent making changes
- The constitution might evolve based on agent behavior
- No point enforcing a boundary when there's no designated agent to route changes to
Right now, the preflight job tells developers "use the component's agent workflow" — but that workflow doesn't exist yet. That's confusing, not helpful.
tl;dr: The thinking is solid, but you're building the parking garage before anyone owns a car. Keep the docs (they're great!), hold the CI until you have an agent that needs it.
Summary
.specify/sdd-manifest.yaml) declaring managed components, their paths, constitutions, specs, and enforcement mode (warn/enforce).github/workflows/sdd-preflight.yml) that comments on PRs touching managed paths — warns inwarnmode, blocks inenforcemodesdd-exemptlabel to bypass enforcement when neededFiles added
.specify/sdd-manifest.yaml.specify/constitutions/runner.md.specify/specs/runner.md.github/workflows/sdd-preflight.ymlHow it works
yq, converts glob patterns to regexessdd-exemptlabel skips the check entirely (job-levelif)Test plan
components/runners/ambient-runner/and verify preflight commentssdd-exemptlabel skips the check🤖 Generated with Claude Code