Skip to content

release: v2.0.0 - #11

Merged
null-result merged 4 commits into
mainfrom
release/2.0.0
Aug 2, 2026
Merged

release: v2.0.0#11
null-result merged 4 commits into
mainfrom
release/2.0.0

Conversation

@null-result

Copy link
Copy Markdown
Owner

Release v2.0.0: Kivax owns the workflow, gitflow is explicit.

Breaking changes

  • Pipeline is now fixed: Kivax determines the sequence (spec → compile → plan → tdd → it → audit → retro), not configuration.
  • Setup is mandatory and one-time: PRINCIPLES.md and ARCHITECTURE.md must exist before the first feature, written by the kvax-setup skill.
  • Paths are mostly fixed: only paths.features is configurable; wiki, lessons, state, lock, principles, architecture are derived or hardcoded.
  • Gates are fixed: each phase has a hardcoded gate (human or auto), not configurable.
  • The 3-way sync system is gone: kivax promote, sync.json, .upstream files, and the manifest are eliminated. Upgrade now overwrites and prunes.

Features

  • Model selection: nested agents: block in config.yml lets you pick a model per agent (Claude Code, Cursor, opencode only; GitLab's glab and VS Code Copilot inherit defaults).
  • Gitflow is explicit: every feature runs on feature/<NN>-<slug>, cut from develop (or whatever git.base_branch says). The flow ends as a pull request marked ready for review. Every phase pushes before ending, so the PR contains the work.
  • Forge CLI is required: gh (GitHub) or glab (GitLab) must be installed and authenticated. kivax doctor checks for it.
  • New kivax-git skill: merge, release, hotfix — only when the human asks, with confirmation before each irreversible step. Never force-pushes, never writes directly to main/develop.

Migration

Update .kivax/config.yml to version: 3. Delete obsolete keys: pipeline, gates, paths (except features), git.branch_prefix, stack.*.cmd_lint. If you see a warning about stale keys, delete them and re-run kivax doctor.

Commits: 5 (PRs #9, #10, and prior work on the platform)

null-result and others added 4 commits August 1, 2026 10:23
The flow was configurable in ways that cost users decisions without
buying them anything. A project could reorder the pipeline, add its own
phases, retarget every path, and flip approval gates — so "Kivax" meant
something different in each repo, and the docs, skills, and error
messages could only describe the default. This makes the workflow the
tool's, and leaves config.yml holding only what a project genuinely
decides.

BREAKING CHANGE: config.yml keys `pipeline`, `gates`, `git.branch_prefix`,
every `paths.*` except `features`, and `stack.*.cmd_lint` are ignored;
`kivax promote` and `.kivax/sync.json` are gone. Old configs keep
working — `kivax doctor` names each dead key and what replaced it.

The flow is now code:
- PIPELINE is fixed at spec → compile → plan → tdd → it → audit → retro,
  with GATES alongside it. Both live in kivax_lib, not in any config.
- Users can no longer add agents, skills, or phases to the flow. The
  worked example under share/examples/ and the extension paths in the
  orchestrator and skills are removed.
- paths_of() derives every path from paths.features, the one a project
  still chooses (an existing repo may have docs/spec/ spoken for).

principles and architecture leave the pipeline entirely:
They describe the project, not this week's feature, so asking "does the
file exist yet?" at the head of every feature answered a question about
the repository in the wrong place — two steps in each feature's history
that did nothing. They become one-time setup behind the new kivax-setup
skill, gated by `kivax feature new`, which refuses while either document
is missing. Completion is the file existing on disk; deliberately no
flag in state.yml, which could disagree with it. ARCHITECTURE.md upkeep
already lived in the plan phase, so nothing moves there.

upgrade replaces the three-way sync:
The manifest, hash comparison, conflict reporting, and .upstream sidecar
files existed only to protect local edits to files that are generated
from the store plus config.yml. With nothing left to customize in them,
upgrade overwrites what it manages and prunes what the store no longer
ships, so a renamed skill can't linger as a phase driver the flow never
references. `kivax promote`, which pushed those edits back upstream, has
no purpose left.

Per-agent model selection lands where the choice belongs:
  agents:
    default:      {model: sonnet}
    orchestrator: {model: opus}
The value is rendered into each agent file's frontmatter at init/upgrade
in the runtime's own spelling, and doctor rejects an unknown agent name,
which is otherwise silent. It reaches claude, cursor, and opencode;
copilot-cli, vscode-copilot, and codex have no model field to write to.

Co-Authored-By: Claude <noreply@anthropic.com>
feat!: Kivax owns the workflow, and models are selected from config
The flow claimed to end in a draft pull request, but nothing ever pushed.
Commits accumulated locally through tdd, it, and retro, so the PR — if
it was created at all — never received the implementation, and the audit
marked "ready" a pull request the reviewer would find empty.

Three separate holes, found while tracing what the flow actually does to
git:

1. No `git push` existed anywhere in the skills. The branch was created
   and committed locally, then `gh pr create` was asked to open a PR for
   an unpushed branch — which stops to ask where to push it, a prompt
   nothing is there to answer, and which `glab` refuses outright.
2. A missing gh/glab was silently ignored ("if a CLI is available"), and
   the audit phase then unconditionally tried to mark a PR that was
   never created. Nothing detected it.
3. The base branch came from `origin/HEAD`, which points at the
   published branch. On a gitflow repo that is `main`, so every feature
   PR targeted production instead of the integration branch.

Gitflow is now the model, explicitly:
- detect_base_branch prefers `develop` when it exists, before falling
  back to origin/HEAD. BRANCH_PREFIX is fixed at `feature/`, like the
  pipeline — what the branch is called doesn't vary, what it's cut from
  does (git.base_branch).
- kivax-plan cuts feature/<NN>-<slug> from the base, commits spec+plan,
  pushes with -u, and opens the PR as a draft against the base.
- tdd, it, and retro push before ending. An unpushed commit isn't in the
  PR, and the PR is the only thing a human reviews.
- kivax-audit verifies the tree is clean and everything is pushed before
  marking the PR ready and writing the reviewer's summary into it.

A forge CLI is now required, not optional. A pull request is a forge
concept, not a git one — no git command creates one — so without gh or
glab the flow cannot deliver what it promises. `kivax doctor` reports it
up front rather than letting the plan phase discover it after the branch
and commits already exist.

New kivax-git skill for merge, release, and hotfix. These stay out of
the flow: it ends at a PR marked ready, and the human merges. The skill
runs only when asked for by name and confirms each irreversible step,
never force-pushes, and never writes directly to main or develop. The
orchestrator's hard rule moves from "you never merge" to "you never
merge on your own initiative", with the distinction spelled out — a
passing audit is what makes a PR reviewable, not a substitute for the
review.

Test robustness: doctor's forge-CLI check would otherwise make the suite
pass or fail on whether the machine happens to have gh installed. An
autouse fixture pins it, and the real-subprocess e2e test asserts
against whatever the machine actually has, since no monkeypatch reaches
a separate process.

Co-Authored-By: Claude <noreply@anthropic.com>
feat(git): finish every feature as a reviewable gitflow pull request
@null-result
null-result merged commit 6962282 into main Aug 2, 2026
25 checks passed
@null-result
null-result deleted the release/2.0.0 branch August 2, 2026 08:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant