Skip to content

feat: add specsync epic command to mint and wire coordination epics - #134

Merged
androidand merged 3 commits into
mainfrom
feat/epic-scaffold-command
Aug 19, 2026
Merged

feat: add specsync epic command to mint and wire coordination epics#134
androidand merged 3 commits into
mainfrom
feat/epic-scaffold-command

Conversation

@androidand

Copy link
Copy Markdown
Owner

Part of #100

Gives the cross-repo linking stack (cross-repo-linked-issues, link-by-issue-reference) a front door: specsync epic <title> [--repo owner/name] [--child <slug|owner/repo#N|url>]... mints a type:epic coordination issue and wires every child to it, idempotently, cross-repo.

  • epic.go: core Epic() orchestration. Reuses Push/Find/marker() completely unchanged via an epic:-prefixed slug namespace — no new provider methods. classifyChild syncs an unsynced slug child automatically. PushRelatedEdit is extracted from runLink's reference-edit path as a shared helper, now used by both link and epic.
  • cmd/specsync/epic.go: CLI wiring (--repo, repeatable --child, --dry-run).
  • versionString() (cmd/specsync/version.go): specsync version now reports the VCS revision for a local dev build via runtime/debug.ReadBuildInfo(), so dev builds are distinguishable from each other and from a release.
  • Tests: idempotent re-run, mixed slug+issue-ref children, cross-repo children, dry-run parity, marker non-duplication across repeated wiring.
  • Docs: skill file, README, and site feature card.

Deferred to a separate step (not in this PR): publishing the pending release and archiving link-by-issue-reference — see openspec/changes/epic-scaffold-command/tasks.md task 1. Also documents that the "release checklist" task 6 called for already exists and is already enforced in CI (release-plan -fail-on-archive-candidates) — no new checklist code was needed there, only the version diagnostic above.

See openspec/changes/epic-scaffold-command/ for the full proposal/design/specs.

Implements tasks 2-5, 7-8 of epic-scaffold-command: the epic subcommand
mints (or converges onto) a type:epic coordination issue and wires
cross-repo children (local change slugs or existing issue references)
to it via a managed Related section, degrading gracefully until native
GitHub sub-issue attachment lands.

- epic.go: core Epic() orchestration, reusing Push/Find/marker
  unchanged via an epic: slug namespace; classifyChild syncs unsynced
  slug children automatically; PushRelatedEdit extracted as a shared
  fetch-upsert-push helper used by both epic and link's reference path.
- cmd/specsync/epic.go: CLI wiring (--repo, repeatable --child,
  --dry-run), dispatched from main.go.
- epic_test.go: idempotent re-run, mixed slug+issue-ref children,
  cross-repo children, dry-run parity, marker non-duplication.
- skills/specsync + README already documented the epic workflow;
  synced the 3 derived SKILL.md mirrors to match (drift test).

Deferred (separate scope): task 1 (publish current release, archive
link-by-issue-reference) and task 6 (--version build info /
release-gap-guard) — left unchecked in tasks.md with a deferred note.
(#100)
Task 6 of epic-scaffold-command: versionString() reports the VCS revision
for a local dev build via runtime/debug.ReadBuildInfo() (no ldflags needed),
so 'specsync version' distinguishes dev builds from each other and from a
released binary.

Correction to design.md's other half of task 6: the release checklist it
called for already exists and is already enforced in CI (release-plan
-fail-on-archive-candidates, wired into release.yml before every tag's
goreleaser step) - no new checklist code was needed. Updated tasks.md and
the release-gap-guard spec to document the existing mechanism accurately
instead of describing a new one.
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying specsync with  Cloudflare Pages  Cloudflare Pages

Latest commit: 717e92c
Status: ✅  Deploy successful!
Preview URL: https://7eaac192.specsync.pages.dev
Branch Preview URL: https://feat-epic-scaffold-command.specsync.pages.dev

View logs

@androidand
androidand merged commit 32f773b into main Aug 19, 2026
2 checks passed
@androidand
androidand deleted the feat/epic-scaffold-command branch August 19, 2026 12:15
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