diff --git a/.gitea/ISSUE_TEMPLATE/bug.yml b/.gitea/ISSUE_TEMPLATE/bug.yml new file mode 100644 index 0000000..b5fc14e --- /dev/null +++ b/.gitea/ISSUE_TEMPLATE/bug.yml @@ -0,0 +1,19 @@ +name: Bug report +description: Report a reproducible defect. +title: 'bug: ' +labels: [bug] +body: + - type: textarea + id: reproduction + attributes: + label: Reproduction + description: List the smallest deterministic reproduction and expected behavior. + validations: + required: true + - type: textarea + id: verification + attributes: + label: Verification context + description: Include repository, branch, version, and relevant checks. Never include secrets. + validations: + required: true diff --git a/.gitea/ISSUE_TEMPLATE/feature.yml b/.gitea/ISSUE_TEMPLATE/feature.yml new file mode 100644 index 0000000..3a651ea --- /dev/null +++ b/.gitea/ISSUE_TEMPLATE/feature.yml @@ -0,0 +1,18 @@ +name: Feature request +description: Propose a change that is consistent with PLAN.md. +title: 'feature: ' +labels: [enhancement] +body: + - type: textarea + id: problem + attributes: + label: Problem and proposed behavior + validations: + required: true + - type: checkboxes + id: plan + attributes: + label: Planning + options: + - label: I checked PLAN.md and this does not silently change an existing decision. + required: true diff --git a/.gitea/workflows/release-check.yaml b/.gitea/workflows/release-check.yaml new file mode 100644 index 0000000..564a3cd --- /dev/null +++ b/.gitea/workflows/release-check.yaml @@ -0,0 +1,19 @@ +name: API release check + +on: + workflow_dispatch: + push: + tags: ['v*.*.*'] + +jobs: + release-check: + runs-on: debian-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 22 + - name: Validate release metadata + run: test -s CHANGELOG.md && test -s README.md && test -s docs/versioning.md + - name: Validate JSON + run: node --input-type=module -e "import { readdir, readFile } from 'node:fs/promises'; for (const d of ['contracts/v1','fixtures/v1']) for (const f of await readdir(d)) if (f.endsWith('.json')) JSON.parse(await readFile(d + '/' + f, 'utf8'));" diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..84c0cf8 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelog + +All notable API contract changes are recorded here. The format follows +[Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Development work is +performed on `dev`; stable release entries are added when the user authorizes a +release. + +## [Unreleased] + +- Add versioned backup inventory and manual-backup response contracts.