# devx-workflow Quick reference for devx tools when working on this repo. ## PR Workflow (use these, not raw git/tea/MCP) | Task | Command | |------|---------| | Create Vikunja task | `make create-task -- --title "..." --description "..."` | | Create PR | `make create-pr` | | Push + create PR | `make push-with-pr` | | Check CI status | `make devx-pr-status` or `make devx-pr-status PR=42 WAIT=1` | | Fetch CI failure logs | `make devx-pr-logs` or `make devx-pr-logs PR=42 JOB=quality TAIL=50` | | Add ready-to-merge label | `make devx-pr-label` or `make devx-pr-label PR=42` | | Rebase current branch | `make rebase` | | Rebase PR via API | `make pr-rebase` or `make pr-rebase PR=42` | ## Auto-merge Behavior When the `ready-to-merge` label is added and all CI checks pass: 1. Auto-merge validates PR title format (`GRM-N: `) 2. If branch is behind master, auto-merge **rebases via Gitea API** automatically 3. The rebase triggers a new CI run; the next auto-merge attempt merges 4. No manual rebase needed unless the API rebase fails ## Pre-merge Check CI runs a `pre-merge-check` job early (after quality + detect-changes) that validates branch format, PR title, and Vikunja task match. This fails fast before expensive molecule tests run. ## Spec-Driven CI Gates (Pre-merge) Every PR must pass these gates before merge: | Gate | Module | What it checks | |------|--------|----------------| | Spec validation | `devx.ci.validate_spec` | Spec file exists at `docs/specs/.md`, has REQ-IDs, all ACs checked | | PR size | `devx.ci.check_pr_size` | Max 500 lines / 10 files (excludes CHANGELOG, badges, locks) | Full molecule tests still run on every PR (6 scenarios, all platforms). ## Post-merge Auto-publish + Dependency PR After merge to master, `post-merge.yml`: 1. Runs release (git-cliff semver, tags, publishes to Gitea PyPI) 2. Auto-creates an infra dependency PR (`devx.ci.create_dependency_pr`) to bump the pinned grm version in `infra/pyproject.toml` 3. Syncs wiki, updates Vikunja task, pushes badges ## Key Rules - Never manually merge via API — always use auto-merge with `ready-to-merge` label - Branch naming: `GRM-N-short-description` (N = Vikunja task ID) - Commit format: conventional commits (`feat:`, `fix:`, `docs:`, etc.) - PR title: `GRM-N: ` (auto-derived by `make create-pr`)