agentsclimarketplace

Rsdd

Skill jeremedia/rsdd

Use when a project has spec-layer artifacts (ADRs, spec-kit constitution/spec/plan, RFCs, architecture docs) and you need ongoing alignment between spec and code — not one-shot validation. Triggers include spec drift in conversation ("the code doesn't match what we said"), post-merge spec-vs-code reconciliation, designing a drift-detection workflow, integrating reasoning agents into spec-kit, or any moment when an agent is about to file an "out-of-spec" issue against a codebase.From its SKILL.md

Install
npx -y skills add jeremedia/rsdd

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

17.9 KB, ~4.0k tokens by cl100k_base, as published. Nobody here has run it

Reconciled Spec-Driven Development

Overview

Reconciled Spec-Driven Development (RSDD) is Spec-Driven Development with the missing arc closed: a reasoning cascade that continuously aligns the spec layer and the implementation layer, with conversational kickoff, multi-layer awareness, bidirectional drift handling, and a trust gradient that lets agents earn autonomy.

Software developed this way is attended software — software whose alignment between intent and manifestation is actively maintained by a reasoning loop, not assumed.

GitHub's spec-kit (/speckit.* commands) provides the conversational scaffolding for SDD across 29+ agents. RSDD extends spec-kit (or any equivalent ADR/RFC practice) by adding the artifact↔code reconciliation direction that spec-kit explicitly does not yet provide in core.

Core insight: drift is symmetric. Sometimes the code is wrong. Sometimes the spec is. Sometimes both are scoped correctly and the gap reveals a new requirement. The reconciliation cascade is a controller loop (k8s pattern) with a reasoning step at every gate — and the first move when drift is detected is a conversation, not an action.

Use this skill when

  • A project has formal-ish spec artifacts and you're about to design a check/audit/CI step for spec-vs-code alignment
  • An agent is about to file an "out-of-spec" issue and needs to do it well (with reasoning, direction, confidence, alternatives) rather than as a one-line lint
  • A team is on spec-kit and asking how to handle "spec drift" (spec-kit's own term — they know it's an open gap)
  • Conversation reaches the topic of "the code and the spec disagree, now what?"
  • You're integrating multiple AI agents into a Q/A flow and need to know where reconciliation hooks attach
  • You're being asked to encode a process for keeping an evolving artifact aligned with an evolving codebase

Do NOT use when:

  • The "spec" is informal (chat logs, ad-hoc decisions). Build the spec layer first, then return to RSDD.
  • The triage agent's track record is unknown and stakes are high. Run the cascade manually for a calibration period first.
  • The codebase is a one-shot script with no long-term maintenance horizon.

The cascade

digraph cascade {
    rankdir=TB;
    "Change merged" [shape=box];
    "Detector reasons over diff" [shape=box];
    "Drift suspected?" [shape=diamond];
    "Open reconciliation event" [shape=box];
    "Conversational kickoff with human" [shape=box];
    "Direction agreed?" [shape=diamond];
    "Triage: can agent resolve unaided?" [shape=diamond];
    "Auto-resolve + commit reasoning trail" [shape=box];
    "Escalate with reasoning to human" [shape=box];
    "Update trust gradient from outcome" [shape=box];
    "Close event, archive as corpus" [shape=box];
    "No-op, log" [shape=box];

    "Change merged" -> "Detector reasons over diff";
    "Detector reasons over diff" -> "Drift suspected?";
    "Drift suspected?" -> "No-op, log" [label="no"];
    "Drift suspected?" -> "Open reconciliation event" [label="yes"];
    "Open reconciliation event" -> "Conversational kickoff with human";
    "Conversational kickoff with human" -> "Direction agreed?";
    "Direction agreed?" -> "Triage: can agent resolve unaided?" [label="yes"];
    "Direction agreed?" -> "Escalate with reasoning to human" [label="no / unclear"];
    "Triage: can agent resolve unaided?" -> "Auto-resolve + commit reasoning trail" [label="yes + within trust budget"];
    "Triage: can agent resolve unaided?" -> "Escalate with reasoning to human" [label="no / outside budget"];
    "Auto-resolve + commit reasoning trail" -> "Update trust gradient from outcome";
    "Escalate with reasoning to human" -> "Update trust gradient from outcome";
    "Update trust gradient from outcome" -> "Close event, archive as corpus";
}

The conversational kickoff (load-bearing)

When an agent detects suspected drift, the first move is not to file an issue, fail CI, or open a PR. The first move is to open a conversation. The conversation has a recognizable shape:

1. State the spec change (verbatim quote of the spec text + reference).
2. State the code state (verbatim diff or code reference).
3. Articulate the drift in one sentence (the gap).
4. Reason about direction:
   - Could the code be the new truth (and the spec needs to evolve)?
   - Could the spec be the standing truth (and the code needs to change)?
   - Could both be correct in scope and the gap reveal a new requirement?
5. Propose a reconciliation with a confidence level.
6. List alternatives considered, with one-line reasons.
7. Ask the human which direction to take (or, if confident and within trust budget, propose to proceed and commit the reasoning).

This shape is the contract. An agent that skips steps 4-6 has filed a lint, not a reconciliation event.

Why the conversation matters: the spec and the code are both writing surfaces. The drift event is itself an editorial moment — it's where the project gets to write down why it chose one direction over the other. That writing is corpus for future agents.

Where the kickoff lives on spec-kit: extend /speckit.clarify. Spec-kit's /speckit.clarify already does conversational Q/A about underspecified spec areas. RSDD's kickoff is the same shape, applied to the spec-vs-code gap: instead of "this part of the spec is underspecified, let me ask," it's "this part of the code disagrees with the spec, let me explain the gap and ask which direction we reconcile."

Multi-layer spec awareness

Spec artifacts are not uniform. Treating them as one undifferentiated corpus is the single biggest failure mode.

LayerSpec-kit nameMutabilityAuto-resolve eligible?
Canon / principlesconstitutionRare, deliberate, never silentNo. Always escalate.
Decisionnumbered ADR / specSupersedable via new ADR with status linkSometimes, if drift is mechanical and trust is earned
TacticalplanMutable, updated as execution discovers factsOften, low stakes
Research / discoverydated noteImmutable (point-in-time by convention)N/A — drift against research is just "world moved on"
CodeimplementationMutableThis is what the cascade reconciles

The detector must know which layer the drift is against and choose a default accordingly. Drift against the constitution is a stop-the-line event; drift against a plan is often routine.

Drift direction is symmetric

The fork in the conversational kickoff is the most important reasoning step. Three cases, all common:

Code is the new truth. The implementer discovered a constraint or capability the spec didn't account for. The spec should catch up. Example: ADR 0008 said "SQLite, can move to pg later." A PR added pgvector. Code is right; spec needs supersession. Reconciliation = draft a new ADR with the new substrate decision and supersession link.

Spec is the standing truth. The implementer violated a load-bearing constraint, often because they didn't read the spec or misunderstood it. Reconciliation = revert or rework code, possibly add a note about why the constraint exists so the next implementer doesn't repeat the mistake.

Both are correct in scope. The spec covers one context, the code is in another, and the gap reveals a missing distinction. Reconciliation = neither revert nor supersede; add a new spec layer (chapter, scope qualifier, conditional) that names both situations.

A cascade that defaults to one direction without reasoning about all three is broken.

Compressing the kickoff (not skipping it)

Under release pressure or high drift volume, the temptation is to skip the conversational kickoff. Don't skip it. Compress it.

The kickoff shape (the seven steps) is the contract. The medium of delivery is negotiable:

PressureCompressed kickoffStill required
Many small drifts in one layerSingle async batch document, one entry per drift, human approves in one passEach drift gets all seven steps; reasoning per drift, not per batch
Recurring identical drift patternTrust-gradient authorization to auto-resolve this class; reasoning trail still committedThe authorization itself is a kickoff event; the human approved the class, not each instance
Time-critical releaseAsync kickoff (no synchronous meeting)Document is still produced; human still approves; reasoning trail still committed

What compression never licenses:

  • Skipping the reasoning trail (the corpus value comes from the trail)
  • Skipping the direction analysis (the three-direction reasoning is the load-bearing step)
  • Batching across spec layers (constitution drift never shares a kickoff doc with plan drift)
  • Auto-resolving constitution-layer drift, ever

When in doubt: compress the medium, preserve the shape.

Trust gradient

The triage gate decides "can the agent resolve this without human review?" The answer changes over time.

Day 1:        Escalate everything. Agent files reasoning, human resolves.
Week 2:       Auto-resolve mechanical cases (typo in spec quoted text, renamed identifier).
Month 1:      Auto-resolve low-stakes plan-layer drift if direction is unambiguous.
Month 3+:     Auto-resolve well-understood decision-layer drift; constitution still escalates.
Forever:      Constitution drift always escalates. Major architecture shifts always escalate.

Trust is earned by a track record. Every reconciliation event becomes a record: did the agent's resolution stick? Was it reverted? Did a human override it? The trust gradient is computed (or at minimum, periodically reviewed) from that record.

The agent is a junior team member earning autonomy. Treat it accordingly.

Reasoning as committed artifact

Every reconciliation event produces a reasoning trail. That trail is corpus, not garbage. It belongs in the repo, not in a transient JSONL log.

Recommended location: docs/reconciliation/YYYY-MM-DD-NNN-short-slug.md. One file per event. Format:

---
event: 2026-05-22-001
status: resolved | escalated | open
trigger: post-merge | scheduled | manual | conversation
spec_layer: constitution | decision | plan | research
direction: code-is-truth | spec-is-truth | both-need-new-layer
confidence: high | medium | low
resolver: agent | human | both
---

# Drift: <one-line summary>

## Spec state
<verbatim quote + reference>

## Code state
<verbatim diff or code reference>

## The gap
<one sentence>

## Direction reasoning
<the agent's analysis of all three cases — code-truth, spec-truth, new-layer>

## Resolution
<what was done, by whom, with what reasoning>

## Alternatives considered
- <option> — <why not>
- <option> — <why not>

Future agents reading the repo learn from this trail the same way they learn from ADRs and commit messages. The trail is one of the project's load-bearing knowledge surfaces.

Integration with spec-kit

Spec-kit gives RSDD almost everything it needs except the reconciliation arc. Build on it.

Reuse spec-kit primitives:

  • Constitution = canon layer
  • Specify = decision layer (per feature)
  • Plan = tactical layer
  • Tasks = execution unit
  • Clarify = conversational shape (RSDD extends this for drift conversations)
  • Analyze = artifact↔artifact drift detector (RSDD adds artifact↔code direction)

Add (as a spec-kit extension or preset):

  • /cascade.detect — runs reasoning detector against a diff or full tree, emits suspected drift candidates
  • /cascade.kickoff — opens a reconciliation event with the conversational shape above
  • /cascade.triage — applies trust gradient + spec-layer awareness, decides escalate vs. auto-resolve
  • /cascade.resolve — performs the agreed action (supersede ADR, draft new layer, edit code), commits the reasoning trail
  • /cascade.review-trust — reviews recent reconciliation events to update trust gradient

Composition with spec-kit's existing commands:

  • After /speckit.implement, run /cascade.detect against the resulting diff vs. the spec it claimed to implement.
  • When /speckit.analyze finds artifact-artifact drift, it can hand off to /cascade.kickoff for the conversational resolution.
  • /speckit.constitution changes always trigger /cascade.detect against the full codebase (high stakes).

The community extension spec-kit-reconcile (stn1slv) does surgical one-way updates of spec from code. RSDD generalizes: bidirectional, reasoned, conversational, with trust gradient. They are compatible — spec-kit-reconcile can be one of the resolver implementations.

Common mistakes

MistakeWhat goes wrongFix
Treat drift as code-violating-spec by defaultCode that's actually the new truth gets reverted; spec ossifiesAlways reason about direction explicitly before action
One severity tier for all spec layersConstitution drift gets auto-resolved silently; tactical drift gets escalated and creates noiseMulti-layer awareness, different defaults per layer
Lint-style drift reportsUseless one-line "ADR 0008 mentions SQLite, code uses pgvector" — no direction, no proposal, no alternativesReasoning surface contract (see kickoff shape)
Pre-commit hooksBypassable with --no-verify; runs on author's machine; hard to give it the context it needsPost-merge (or pre-merge on a CI runner with full repo access)
Static trust calibrationEither too noisy forever or too permissive foreverDynamic trust gradient, reviewed against actual resolution outcomes
Reasoning trail as JSONL onlyFuture humans can't read it; future agents skip it as "logs"Markdown files committed to docs/reconciliation/
Bypass conversational kickoff for "obvious" casesCases that seem obvious to the agent often aren't; the human catches the third-direction case agents missThe conversational kickoff is the contract. Skip it only after the trust gradient has explicitly authorized auto-resolve for this class of drift.

Counter-rationalizations

RationalizationReality
"The drift is obvious, just file the issue"Filing without the reasoning contract creates noise and erodes trust. The reasoning is the value.
"Conversational kickoff is too slow for routine drift"Compress the medium (batch async doc, one entry per drift); never skip the shape. For repeating classes, earn trust-gradient authorization so the class itself becomes the kickoff event.
"We have 23 drifts this sprint, no time for kickoffs"Stratify by layer first (the count usually collapses). Compress the kickoff for the survivors (one async doc, one entry per drift). Constitution drift never batches.
"ADRs are immutable, we just need to enforce them"ADRs are supersedable by design. RSDD's job is to surface when supersession is needed, not to ossify the spec.
"We can do this with regex/static checks"Static checks catch keyword presence. They cannot reason about direction (which side is right). That's the work.
"Auto-resolve once trust is earned" should mean auto-mergeAuto-resolve commits a draft and reasoning trail; the merge can still go through normal review. Resolution and merge are separate gates.
"Spec-kit doesn't have this, so we don't need it"Spec-kit explicitly calls drift detection an open gap. Their /speckit.analyze only covers artifact↔artifact; the artifact↔code direction is missing.
"This is just over-engineered linting"Linting answers "does this match the rule?" RSDD answers "the spec and the code disagree — which is right, and what do we change?" Different question, different shape.

Red flags — stop and re-read the skill

  • About to file an "out-of-spec" issue without the reasoning surface contract
  • About to auto-resolve drift against the constitution / canon layer
  • Designing a one-shot audit instead of a controller loop
  • Conversational kickoff is being skipped because "the drift is obvious"
  • Trust gradient is static (or doesn't exist)
  • Drift reports are going to a JSONL log instead of docs/reconciliation/
  • Defaulting to "code violates spec, fix the code" without considering the other two directions
  • Treating all spec layers (constitution, decision, plan, research) as one corpus

All of these mean: stop and re-read this skill.

Quick reference

You see...Do...
Code merged that contradicts an ADROpen reconciliation event, reason about all three drift directions before proposing
Constitution changeTrigger /cascade.detect against full codebase, escalate every finding
Spec-kit project with no drift detectionAdd /cascade.* extension commands as a preset
ADR-only project (no spec-kit)Build the cascade directly; spec-kit integration is nice-to-have, not required
"Should we auto-fix this?"Check trust gradient + spec layer; default escalate unless both authorize
Multiple drifts at onceOne reconciliation event per drift; do not batch — each needs its own reasoning trail
Drift the agent can't reason aboutEscalate with verbatim spec quote + verbatim code state + explicit "I cannot determine direction"

Background reading

  • Spec-kit: github/spec-kit (releases, /speckit.* commands)
  • Spec-kit on drift: April 2026 newsletter explicitly names drift detection as an open gap
  • Community prior art: spec-kit-reconcile, spec-kit-canon, Architecture Guard extensions
  • Kubernetes controller pattern (the structural ancestor of the cascade): reconciliation loop with desired-state vs. actual-state
  • Spine (in our project corpus): AI edit reviewer as the book's immune system — RSDD applied to a manuscript

What ships with it: 2 files

9.0 KB alongside SKILL.md

Keep looking

Skills are one crate of 326,851. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.