agentsclimarketplace

Speq spec merge

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

Delta-merge procedure — DELTA marker semantics, library-organization thresholds, and ADR-promotion field mapping. Triggered by recorder-agent.From its SKILL.md

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.

One thing to look at

  • runs commandsInstructs the agent to run 5 commands, including `speq feature list` and 4 more.

SKILL.md

3.4 KB, 842 tokens by cl100k_base, 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>
    • StatusAccepted
    • 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

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. 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.