agentsclimarketplace

Speq spec merge

Skill marconae/speq-skill/.claude/skills/speq-spec-merge

A light-weight and straightforward system for spec-driven development with Claude Code or OpenAI Codex. Written in Rust πŸ¦€

Install
npx -y skills add marconae/speq-skill --skill speq-spec-merge

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

What its author says it does

Copied from the file, not written here

Delta-merge procedure β€” DELTA marker semantics, library-organization thresholds, and ADR-promotion field mapping. Triggered by recorder-agent.

SKILL.md

3.4 KB, as published. Nobody here has run it

Spec Merge

Load Plan Context

Read: specs/_plans/<plan-name>/plan.md
List: specs/_plans/<plan-name>/**/spec.md

Run speq feature list to see the current permanent spec library.

Apply Deltas

For each delta spec at specs/_plans/<plan-name>/<domain>/<feature>/spec.md:

specs/<domain>/<feature>/spec.md exists?
β”œβ”€ No  β†’ Copy delta (strip markers)
└─ Yes β†’ Merge using markers below
MarkerAction
DELTA:NEWAppend scenario
DELTA:CHANGEDReplace scenario with same name
DELTA:REMOVEDDelete scenario with same name

After each merge:

  1. Strip all <!-- DELTA:* --> markers
  2. Validate: speq feature validate <domain>/<feature>
  3. If validation fails, stop and report β€” do not guess fixes

Check Library Thresholds

After merges, check for organization signals:

MetricThresholdAction
Scenarios per spec>10Return to orchestrator for user decision
Domain features>8Return to orchestrator for user decision

Never assume β€” library reorganization is a user decision. Signal back to the orchestrator with a concrete question.

Promote ADRs to Permanent Decision Log

Read specs/_plans/<plan-name>/decision-log.md (if it exists).

For each entry where Promotes to ADR: yes:

  1. Convert to ADR format using .claude/skills/speq-plan/references/decision-log-permanent-template.md:

    • Title β€” from the decision entry heading
    • ID β€” a kebab-case slug derived from the title; MUST be unique across every file in specs/_decision/
    • Plan β€” <plan-name>
    • Status β€” Accepted
    • Supersedes (optional) β€” if the entry names an earlier decision it replaces, set this to that decision's existing ADR slug
    • Context β€” synthesized from the entry's Rationale + Alternatives
    • Decision β€” from the entry's Decision bullet
    • Options Considered β€” from the entry's Alternatives bullet
    • Consequences β€” brief inference from Rationale
  2. Write ONE new fragment file specs/_decision/NNN-<plan-name>.md:

    • NNN = (count of existing files in specs/_decision/) + 1, zero-padded to 3 digits
    • H1: # Decisions: <plan-name>
    • Emit one ## ADR: <Title> block per promoted entry, in decision-log order
    • MUST NOT edit any other file in specs/_decision/ β€” a supersede reference is a one-way pointer from the new ADR's **Supersedes:** field to the target slug
  3. Validate: speq decision-log validate

If decision-log.md is absent or has no "Promotes to ADR: yes" entries, skip silently.

Finalize

  1. Final validation: speq feature validate
  2. Archive: mv specs/_plans/<plan-name> specs/_recorded/NNN-<plan-name>, where NNN = (count of existing entries in specs/_recorded/) + 1, zero-padded to 3 digits

If a threshold is exceeded, return BEFORE archiving and ask the orchestrator to clarify with the user.

Anti-Patterns

PatternWhy Wrong
Merging without running validatorBroken specs may land
Assuming split/domain reorganizationUser must decide
Rewriting scenario wording during mergeRecording is a mechanical operation
Leaving DELTA markersPollutes permanent specs

Keep looking

Skills are one crate of 328,083. 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.