Skip to content

Release/3.0.0 - #6

Merged
codxse merged 8 commits into
masterfrom
release/3.0.0
Jul 30, 2026
Merged

Release/3.0.0#6
codxse merged 8 commits into
masterfrom
release/3.0.0

Conversation

@codxse

@codxse codxse commented Jul 30, 2026

Copy link
Copy Markdown
Owner

No description provided.

codxse and others added 8 commits July 30, 2026 00:43
Closes the ## [Unreleased] block that has been accumulating since the
case-solvers rename. All five manifests already read 3.0.0; this dates
the release header, adds the version roll-up line the file's other
release entries carry, and refreshes the Codex build stamp.

Not tagged or pushed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Ports the unmerged improve-kimi-model-checking fix (f9d4d52) onto the 3.0.0
rename: hooks/kimi-model-context.sh (UserPromptSubmit) reads modelAlias from
the session record so Kimi sessions stop classifying unsure — without it every
gated skill refused on every model, and budget sessions guessing themselves
frontier authored to bd (measured 7/27 guard FAILs pre-fix).

The three model-guard.sh twins now assert the guard's model-guard: line and
run both directions (a refusal-only harness cannot fail — unsure refuses in
the same words as budget), with --below-tier budget|medium generalizing the
medium-rung trial to all hosts. Also from that branch: the REPO_ROOT,
claude -p stream-json, and infra_error UUID fixes.

New manual harnesses for the 3.0.0 /specify behaviors: socratic-loop.sh on
all three hosts (a vague-word description must be questioned, not drafted
past), authoring-format.sh ported to Codex and Kimi, and all three format
twins now assert the Complexity call (rung + low/high/max effort, never
medium) and grep out Deliverable Format / planning-tier regressions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…posed

- socratic-loop.sh (all hosts): .beads/ is not a slip signal on a frontier
  session — bd init is the documented Environment Guard flow. Only .spec.md
  marks drafting past the vague word.
- authoring-format.sh (all hosts): seed a minimal Python fixture and name the
  language in the descriptions — the 3.0.0 Socratic loop correctly asks
  "which runtime?" in a bare repo, so the greenfield fixtures must answer it.
- codex twins: drop the false-refusal grep — codex exec transcripts echo the
  SKILL.md, so "must run on a frontier model" matches the skill's own prose.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…sking

A codex trial asked "Should the endpoint return: 1. Aggregate (recommended)
2. Per-user" — a textbook Socratic question with no literal '?', scored FAIL.
"Asked" is now '?' OR recommendation phrasing; the recommended-answer check
stays separate.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ptions

Two more assertion bugs the first kimi/codex runs exposed:

- The story-line grep demanded the one-line spelling, but the Output Format
  template's own form is a three-line fenced block — join lines before
  matching so both spellings pass.
- "Fully specified" is a higher bar under the 3.0.0 Socratic loop than the
  old greenfield descriptions met: codex correctly asked "ASCII or Unicode
  alphanumeric?" and "which framework?" instead of drafting. Descriptions
  now preempt those questions (separator rule, any-exception retry, Flask +
  SQLite + dev-log reset + CLI-seeded admin).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…t it

New third marketplace plugin, /code-review-quality: a standalone multi-axis
review of a change before it merges (correctness, readability, architecture,
security, performance), judged against a stated intent and reported as
Critical/Required/Consider/Nit/FYI plus a verdict. Inspired by addyosmani's
code-review-and-quality; written fresh for this repo's voice and flags.

Deliberately not an sdd skill — it shares none of that plugin's bd machinery
(no bd, no worktrees, no branch naming, no .beads/ guard).

- Target defaults to the working diff by a stated ladder (uncommitted, else
  branch vs merge-base, else last commit); a ref, an explicit a...b range, a
  path, or #<n> overrides it. A caller-named checkout is honored with -C.
- --effort <low|high|max> reuses /validate's effort vocabulary, default high.
- --fix <true|false>, default false. Under true it applies Critical+Required
  and leaves them uncommitted: never add/commit/amend/push, never fix by
  weakening a check, unverifiable findings stay unfixed and say so.
- Model-invocable so "review my changes" routes here, but --fix is honored
  only when the caller typed it, so an implicit invocation can't reach the
  write path. No model gate and no tier vocabulary at all.

sdd's reviewers now prefer it, as a preference and not a dependency: all four
agent files (story-reviewer, story-reviewer-strong; .md + .toml) run
/code-review-quality <base>...bd/<id> --effort <effort> --fix true where the
plugin is installed and fall back to the host's own review-and-apply where it
isn't. A missing install is explicitly not an error.

Two consequences: /validate (1.17.1 -> 1.18.0) now hands the reviewer the base
branch, since it diffs <base>...bd/<id> and a story forked from a feature
branch must not have its base guessed as main; and /validate's prose stopped
naming a command it no longer chooses, so the command lives once in the agent
definitions and the two can't drift.

Versions: sdd 3.0.0 -> 3.1.0 (agents + /validate changed), kimi.plugin.json
3.0.0 -> 3.1.0 (that manifest versions the whole Kimi bundle, now eight
skills), code-review-quality 1.0.0, writing-claude-md unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
opencode is the first host with no manifest to publish to — its extension
surface is the config directory itself — so the port is a script rather than a
plugin.json. plugins/sdd/hosts/opencode/install.sh copies the skills, reviewer
agents, a generated slash command per skill, and one plugin into
~/.config/opencode; it records its file list in .sdd-installed and clears that
set first, so re-running it is the update and a renamed skill can't linger as a
duplicate. No skill prose changed: the skills/ tree is shared verbatim, and
/validate's capability-keyed reviewer map already covered this host.

plugin/sdd-model-context.js injects the model ID at two seams, and both are
load-bearing. opencode's built-in system context is cwd/project/git/platform/
date only, and its default prompt frames the session as Claude Code — so a
session with no injected ID does not merely go `unsure`, it confabulates. With
the system-prompt seam alone and the correct ID sitting in it, claude-haiku-4-5
emitted `model-guard: id=claude-opus-4-1 tier=frontier` and authored a story.
Skills arrive as tool results, far from the system prompt, so the second seam
(tool.execute.after on the skill tool) puts the ID next to the rubric that
reads it. Don't simplify either away.

hosts/opencode/agent/*.md is a third agent format because the Claude one can't
be reused: opencode's agent loader hard-fails the whole config on the
comma-separated `tools:` string, and splits `model:` on `/`, so a bare `sonnet`
resolves to nothing. It does honor the pin, so both rungs are enforced by
definition as on Claude Code.

tests/opencode/model-guard.sh is the fourth guard harness, same two-direction
protocol. It stages a throwaway config dir instead of mutating the operator's,
and invokes skills as `opencode run --command <name>` — the user's real path; a
bare "/specify …" is sent verbatim and never resolves. tests/lib.sh gains
SDD_TEST_ENV, an opt-in forward list for hosts whose provider key comes from
{env:VAR}. Verified live: 11/11 trials, all three gated skills, both
directions, on Anthropic-native and OpenAI-compatible providers.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@codxse
codxse merged commit 41af179 into master Jul 30, 2026
2 checks passed
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