feat: add specsync epic command to mint and wire coordination epics - #134
Merged
Conversation
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.
Deploying specsync with
|
| Latest commit: |
717e92c
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://7eaac192.specsync.pages.dev |
| Branch Preview URL: | https://feat-epic-scaffold-command.specsync.pages.dev |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 atype:epiccoordination issue and wires every child to it, idempotently, cross-repo.epic.go: coreEpic()orchestration. ReusesPush/Find/marker()completely unchanged via anepic:-prefixed slug namespace — no new provider methods.classifyChildsyncs an unsynced slug child automatically.PushRelatedEditis extracted fromrunLink's reference-edit path as a shared helper, now used by bothlinkandepic.cmd/specsync/epic.go: CLI wiring (--repo, repeatable--child,--dry-run).versionString()(cmd/specsync/version.go):specsync versionnow reports the VCS revision for a local dev build viaruntime/debug.ReadBuildInfo(), sodevbuilds are distinguishable from each other and from a release.Deferred to a separate step (not in this PR): publishing the pending release and archiving
link-by-issue-reference— seeopenspec/changes/epic-scaffold-command/tasks.mdtask 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.