Reusable scaffold for OpenSpec + SPECBOOT workflow with OSS governance, GitHub automation, and branch protection.
Use this repo as a template or copy its contents into a new repository root.
Edit openspec/config.yaml:
project: <your-project>
domain: <your-domain>
version: 0.1.0 # semver source of truth for releasesRename the domain spec folder:
Rename-Item openspec\specs\_domain_ <your-domain>Find-replace across the repo:
| Placeholder | Example |
|---|---|
<owner> |
jcuel |
<repo> |
my-project |
<your-project> |
my-project |
<your-domain> |
my-project |
<project-board-url> |
https://github.com/users/jcuel/projects/1 |
Files with placeholders: CONTRIBUTING.md, SECURITY.md, CODE_OF_CONDUCT.md, LICENSE, .github/PROJECT.md, .github/ISSUE_TEMPLATE/config.yml, .cursor/rules/github-workflow.mdc, scripts/project-board.env, scripts/setup-gh-project-sync-secret.*
Create dev and master branches. Set default branch to dev for contributor PRs.
- Create a project board (Table or Board layout).
- Add a Status single-select field: Backlog, Ready, In progress, In review, Done.
- Paste the board URL into
.github/PROJECT.mdand.cursor/rules/github-workflow.mdc. - Fill
scripts/project-board.envwith board IDs (usegh project field-list).
| Secret | Purpose |
|---|---|
GH_RULESET_SYNC |
Fine-grained PAT — Administration read/write (sync branch rulesets) |
GH_RELEASE_TOKEN |
Fine-grained PAT — Contents write (release version commits/tags) |
GH_BRANCH_SYNC |
PAT — open master → dev sync PRs (optional) |
GH_PROJECT_SYNC |
Classic PAT — project + repo scopes (project board sync) |
Helpers: scripts/setup-gh-project-sync-secret.sh / .ps1
Merge to dev (or run locally):
bash scripts/apply-branch-rulesets.shRulesets require CI job Bootstrap — repo check from ci-bootstrap.yml.
Default: MIT (LICENSE). For noncommercial licensing, see PolyForm Noncommercial (used by disk-tool).
| Path | Purpose |
|---|---|
.cursor/rules/ |
Engineering guardrails, SPECBOOT state machine, GitHub workflow |
.cursor/commands/ |
Slash commands (/enrich-us through /commit) |
.cursor/templates/openspec/ |
Artifact templates for new changes |
openspec/config.yaml |
Project, domain, and version configuration |
openspec/specs/_domain_/spec.md |
Source-of-truth spec stub (rename folder) |
openspec/changes/ |
One folder per feature change |
CODE_OF_CONDUCT.md |
Contributor Covenant 2.1 |
CONTRIBUTING.md |
Branch model, rulesets, release flow |
SECURITY.md |
Private vulnerability reporting |
.github/ |
Workflows, rulesets, issue/PR templates, project board guide |
templates/pipelines/ |
Full CI workflow + rulesets — see templates/pipelines/README.md |
/enrich-us → /propose → /apply → /verify → /code-review → /archive → /commit
Type / in Cursor Agent chat to invoke commands.
Each stage updates GitHub Issues and the Project board (see github-workflow.mdc).
Ships with .github/workflows/ci-bootstrap.yml — a minimal passing job so branch rulesets work immediately.
Copy-ready CI from disk-tool lives in templates/pipelines/:
| File | Purpose |
|---|---|
ci-go-node-docker-e2e.yml |
Linux/Windows tests, govulncheck, Docker smoke, Cypress E2E, Trivy |
rulesets-dev.full.json / rulesets-master.full.json |
Matching branch protection checks |
Also available via GitHub Actions → New workflow (.github/workflow-templates/).
Enable steps:
- Replace
<your-project>in the copied workflow. cp templates/pipelines/ci-go-node-docker-e2e.yml .github/workflows/ci.ymlcp templates/pipelines/rulesets-*.full.json .github/rulesets/- Implement
scripts/smoke-*.shandscripts/e2e-run.sh(stubs included). - Disable
ci-bootstrap.yml; updatesync-project-board.ymlto watch workflowCI.
When you add custom CI instead:
- Create
.github/workflows/ci.ymlwith your test/lint/security jobs. - Update required status check names in
.github/rulesets/dev.jsonandmaster.json. - Merge to
devto re-sync rulesets.
Reference: disk-tool CI
| Scan | Tool |
|---|---|
| Go dependency CVEs | govulncheck |
| Filesystem + container CVEs | Trivy |
| Dependency updates | Dependabot (extend .github/dependabot.yml) |
Record manual security review in testing-report.md via /verify until CI scans are configured.
Maintainer merges dev → master:
- Release version bumps
openspec/config.yamland tagsvX.Y.Z. - Release assets stub runs (customize for your artifacts).
- Sync dev from master opens a sync PR if branches drift.
See CONTRIBUTING.md for Release-Version: X.Y.Z in PR descriptions.
_domain_— rename to your OpenSpec domain (e.g.api,core)config.yaml— setproject,domain, andversion- Do not copy
openspec/changes/<example-change>/from a live project; start with an emptychanges/folder