Skip to content

Commit 11d3823

Browse files
ryderstormclaudecoderabbitai[bot]
authored
feat: standardize app to opensource it (#6)
* docs: add open-source readiness specification and tasks Add comprehensive specification for preparing the repository for open-source release under Apache 2.0 license. Includes task breakdown covering: - Apache 2.0 licensing artifacts (LICENSE, README updates) - README refresh with visual asset and improved structure - Contribution guidelines (CONTRIBUTING.md) - GitHub issue templates (bug, feature, question) - Semantic versioning and release documentation Also update pre-commit config to exclude MD041 (first line heading) rule to accommodate spec document format. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * docs: add Apache 2.0 license and metadata Add Apache 2.0 license to repository with complete supporting documentation: - Add LICENSE file with official Apache 2.0 text - Add license badge to README - Add License section with file reference in README - Update pyproject.toml with license field - Exclude LICENSE from markdownlint checks - Update task tracking (tasks 1.1-1.3 complete) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]> * docs(readme): add workflow diagram and header asset - embed a header graphic to give the README a visual entry point - add a mermaid sequence diagram that explains the SDD workflow - reference CONTRIBUTING.md alongside the operations guide for contributors * docs: add CONTRIBUTING and complete task 3.0 - Adds CONTRIBUTING.md with setup, testing, commits, PRs, CoC placeholder - References docs/operations.md and issue templates - Runs tests and pre-commit hooks - Updates task list: marks 3.1–3.5 and 3.0 complete Related to tasks 0002 * docs(templates): add GitHub issue forms and config - Add bug, feature, and question forms using Issue Forms schema - Add config to disable blank issues and link to docs - Add title prefixes and default labels for triage - Validate with pre-commit (check-yaml, markdownlint) - Update 0002/4.0–4.5 tasks as completed * ci: add uv CI and semantic release pipeline - add uv-based CI jobs for tests, linting, coverage, and commitlint - configure semantic release with octo-sts identity and uv lock refresh - align developer tooling via pre-commit defaults, coverage ignores, and pyproject metadata - add placeholder pytest * fix: add missing python packages * chore: add pull request template * fix: Apply suggestion from @coderabbitai[bot] to fix STS repo reference Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * fix: Apply suggestion from @coderabbitai[bot] to fix incorrect repo url Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * docs: use correct python version --------- Co-authored-by: Claude <[email protected]> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
1 parent 0e13d5e commit 11d3823

19 files changed

+1312
-6
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
name: Bug report
2+
description: Report a bug or regression with clear repro steps and environment details.
3+
labels:
4+
- bug
5+
- needs-triage
6+
title: "[Bug]: "
7+
body:
8+
- type: markdown
9+
attributes:
10+
value: |
11+
Thanks for taking the time to fill out a bug report!
12+
Please provide as much detail as possible so we can reproduce and fix the issue.
13+
14+
- type: input
15+
id: summary
16+
attributes:
17+
label: Summary
18+
description: Short summary of the bug.
19+
placeholder: A brief description of the problem
20+
validations:
21+
required: true
22+
23+
- type: textarea
24+
id: repro
25+
attributes:
26+
label: Steps to Reproduce
27+
description: Provide step-by-step instructions to reproduce the problem.
28+
placeholder: |
29+
1. ...
30+
2. ...
31+
3. ...
32+
render: shell
33+
validations:
34+
required: true
35+
36+
- type: textarea
37+
id: expected
38+
attributes:
39+
label: Expected Behavior
40+
description: What did you expect to happen?
41+
validations:
42+
required: true
43+
44+
- type: textarea
45+
id: actual
46+
attributes:
47+
label: Actual Behavior
48+
description: What actually happened?
49+
validations:
50+
required: true
51+
52+
- type: textarea
53+
id: logs
54+
attributes:
55+
label: Logs / Output
56+
description: Relevant logs or command output (mask secrets). Attach files if helpful.
57+
render: shell
58+
59+
- type: input
60+
id: python_version
61+
attributes:
62+
label: Python Version
63+
placeholder: e.g., 3.11.9
64+
65+
- type: input
66+
id: os
67+
attributes:
68+
label: Operating System
69+
placeholder: e.g., Ubuntu 22.04, macOS 14.6
70+
71+
- type: input
72+
id: prompt_task_ids
73+
attributes:
74+
label: Related Prompt/Task IDs
75+
description: List any related Spec or Task IDs (e.g., 0002/4.1) or prompt names.
76+
placeholder: e.g., 0002/4.1; manage-tasks
77+
78+
- type: textarea
79+
id: context
80+
attributes:
81+
label: Additional Context
82+
description: Any other context, screenshots, or information that might be relevant.
83+
84+
- type: checkboxes
85+
id: checks
86+
attributes:
87+
label: Pre-Submission Checks
88+
options:
89+
- label: I searched existing issues for duplicates
90+
required: true
91+
- label: I included clear reproduction steps
92+
required: true

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
blank_issues_disabled: true
2+
contact_links:
3+
- name: Documentation
4+
url: https://github.com/liatrio/spec-driven-development-mcp#readme
5+
about: Refer to the README and docs for setup and usage guidance.
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
name: Feature request
2+
description: Suggest an idea or enhancement with clear problem and acceptance criteria.
3+
labels:
4+
- enhancement
5+
- needs-triage
6+
title: "[Feature]: "
7+
body:
8+
- type: markdown
9+
attributes:
10+
value: |
11+
Thanks for proposing a feature! Please describe the problem and the desired outcome.
12+
13+
- type: textarea
14+
id: problem
15+
attributes:
16+
label: Problem Statement
17+
description: What problem are you trying to solve? Why is it a problem?
18+
placeholder: Describe the pain point or limitation
19+
validations:
20+
required: true
21+
22+
- type: textarea
23+
id: desired_outcome
24+
attributes:
25+
label: Desired Outcome
26+
description: What should happen when this feature is implemented?
27+
placeholder: Describe the ideal behavior
28+
validations:
29+
required: true
30+
31+
- type: textarea
32+
id: acceptance_criteria
33+
attributes:
34+
label: Acceptance Criteria
35+
description: List concrete, testable criteria for success.
36+
placeholder: |
37+
- [ ] Given ..., when ..., then ...
38+
- [ ] ...
39+
40+
- type: input
41+
id: affected_prompts
42+
attributes:
43+
label: Affected Prompts/Workflows
44+
description: Which prompts/workflows/spec tasks are impacted?
45+
placeholder: e.g., manage-tasks; generate-spec; 0002/4.0
46+
47+
- type: textarea
48+
id: additional_context
49+
attributes:
50+
label: Additional Context
51+
52+
- type: checkboxes
53+
id: checks
54+
attributes:
55+
label: Pre-Submission Checks
56+
options:
57+
- label: I searched existing issues for duplicates
58+
required: true
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
name: Question
2+
description: Ask a question about usage, behavior, or development workflow.
3+
labels:
4+
- question
5+
- needs-triage
6+
title: "[Question]: "
7+
body:
8+
- type: markdown
9+
attributes:
10+
value: |
11+
Thanks for your question! Please include context and what you have tried.
12+
13+
- type: textarea
14+
id: context
15+
attributes:
16+
label: Context
17+
description: Background information, what you are trying to achieve, relevant details.
18+
validations:
19+
required: true
20+
21+
- type: textarea
22+
id: commands
23+
attributes:
24+
label: Commands Run
25+
description: Include exact commands and output where relevant (mask secrets).
26+
render: shell
27+
28+
- type: input
29+
id: spec_task_ids
30+
attributes:
31+
label: Referenced Spec/Task IDs
32+
description: Any related Spec or Task IDs.
33+
placeholder: e.g., 0002/4.3
34+
35+
- type: textarea
36+
id: tried
37+
attributes:
38+
label: What's been tried
39+
description: Steps or approaches attempted so far.
40+
validations:
41+
required: true
42+
43+
- type: textarea
44+
id: additional_context
45+
attributes:
46+
label: Additional Context
47+
48+
- type: checkboxes
49+
id: checks
50+
attributes:
51+
label: Pre-Submission Checks
52+
options:
53+
- label: I searched existing issues and discussions
54+
required: true
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
issuer: https://token.actions.githubusercontent.com
2+
# subject pattern is defining what repo and branch is allowed to generate a token at the permission level set below
3+
subject_pattern: "repo:liatrio-labs/spec-driven-workflow-mcp:ref:refs/heads/main"
4+
5+
permissions:
6+
contents: write
7+
packages: write

.github/pull_request_template.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
## Why?
2+
3+
<!-- Summarize the motivation for this change. Reference specs/tasks/issues as needed. -->
4+
5+
## What Changed?
6+
7+
<!-- Call out the key updates in this PR. -->
8+
9+
## Additional Notes
10+
11+
<!-- Optional: document follow-ups, rollout concerns, or reviewer guidance. -->
12+
13+
- [ ] Linked relevant spec/task IDs (e.g., `tasks/0002-spec-open-source-ready.md`)
14+
- [ ] Ran tests: `uv run pytest`
15+
- [ ] Ran linters/hooks: `uv run pre-commit run --all-files`
16+
- [ ] Updated docs or prompts if behavior changed

.github/workflows/ci.yml

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
name: Run tests and linting
2+
3+
on:
4+
# Avoid duplicate runs: run on PRs for branches, and on direct pushes to main
5+
# but ignore changes to pyproject.toml, CHANGELOG.md, and uv.lock
6+
# This is to avoid running tests and linting for commits that only relate to releases
7+
push:
8+
branches: ["main"]
9+
paths-ignore:
10+
- "pyproject.toml"
11+
- "CHANGELOG.md"
12+
- "uv.lock"
13+
pull_request:
14+
15+
jobs:
16+
test:
17+
name: Test (uv + pytest)
18+
runs-on: ubuntu-latest
19+
strategy:
20+
fail-fast: false
21+
matrix:
22+
python: ["3.12"]
23+
steps:
24+
- name: Checkout
25+
uses: actions/checkout@v4
26+
27+
- name: Install uv (with cache)
28+
uses: astral-sh/setup-uv@v6
29+
with:
30+
enable-cache: true
31+
cache-dependency-glob: |
32+
**/pyproject.toml
33+
**/uv.lock
34+
35+
- name: Install Python
36+
run: uv python install ${{ matrix.python }}
37+
38+
- name: Sync dependencies (frozen)
39+
run: uv sync --all-groups --frozen
40+
41+
- name: Run tests with coverage
42+
run: uv run pytest -vv --cov=mcp_server --cov-report=term-missing:skip-covered --cov-report=xml
43+
44+
45+
- name: Upload coverage.xml artifact
46+
uses: actions/upload-artifact@v4
47+
with:
48+
name: coverage-xml-${{ matrix.python }}
49+
path: coverage.xml
50+
51+
- name: Upload coverage to Codecov
52+
uses: codecov/codecov-action@v4
53+
with:
54+
files: coverage.xml
55+
flags: unittests
56+
fail_ci_if_error: false
57+
58+
lint:
59+
name: Lint (uv + ruff)
60+
runs-on: ubuntu-latest
61+
steps:
62+
- name: Checkout
63+
uses: actions/checkout@v4
64+
65+
- name: Install uv (with cache)
66+
uses: astral-sh/setup-uv@v6
67+
with:
68+
enable-cache: true
69+
cache-dependency-glob: |
70+
**/pyproject.toml
71+
**/uv.lock
72+
73+
- name: Install Python
74+
run: uv python install 3.12
75+
76+
- name: Sync dependencies (frozen)
77+
run: uv sync --all-groups --frozen
78+
79+
- name: Run ruff lint
80+
run: uv run ruff check .
81+
82+
- name: Format (check)
83+
run: uv run ruff format --check .
84+
85+
- name: Pre-commit (meta checks)
86+
run: uv run pre-commit run --all-files --show-diff-on-failure

.github/workflows/release.yml

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
name: Semantic Release
2+
3+
on:
4+
workflow_run:
5+
workflows: ["Run tests and linting"]
6+
branches: [main]
7+
types: [completed]
8+
9+
permissions:
10+
contents: write
11+
issues: write
12+
pull-requests: write
13+
14+
jobs:
15+
semantic-release:
16+
if: ${{ github.event.workflow_run.conclusion == 'success' }}
17+
runs-on: ubuntu-latest
18+
concurrency:
19+
group: semantic-release-${{ github.ref }}
20+
cancel-in-progress: false
21+
steps:
22+
- uses: octo-sts/action@6177b4481c00308b3839969c3eca88c96a91775f # v1.0.0
23+
id: octo-sts
24+
with:
25+
scope: ${{ github.repository }}
26+
identity: main-semantic-release
27+
- uses: actions/checkout@v4
28+
with:
29+
fetch-depth: 0
30+
fetch-tags: true
31+
persist-credentials: false
32+
33+
34+
- name: Get GitHub App User ID
35+
id: get-user-id
36+
run: echo "user-id=$(gh api "/users/octo-sts[bot]" --jq .id)" >> "$GITHUB_OUTPUT"
37+
env:
38+
GH_TOKEN: ${{ steps.octo-sts.outputs.token }}
39+
40+
- name: Configure git author
41+
run: |
42+
set -eox pipefail
43+
git config --global user.name 'octo-sts[bot]'
44+
git config --global user.email '${{ steps.get-user-id.outputs.user-id }}+octo-sts[bot]@users.noreply.github.com'
45+
46+
- name: Use PAT for pushes to origin
47+
run: |
48+
git remote set-url origin \
49+
https://x-access-token:${{ steps.octo-sts.outputs.token }}@github.com/${{ github.repository }}.git
50+
# sanity check
51+
git ls-remote --heads origin >/dev/null
52+
53+
- name: Semantic Release
54+
uses: python-semantic-release/python-semantic-release@v10
55+
with:
56+
github_token: ${{ steps.octo-sts.outputs.token }}

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,5 @@ __pycache__
44

55
# Misc
66
temp/
7+
.coverage
8+
coverage.xml

0 commit comments

Comments
 (0)