Skip to content

Commit d9a8ec0

Browse files
authored
Merge pull request #3 from BaseInfinity/v0.8.9-cross-model-review-aliases
v0.8.9: close v0.8.0 drift family (4 doc + 1 runtime fix)
2 parents c98034e + c6149ca commit d9a8ec0

13 files changed

Lines changed: 695 additions & 31 deletions

AGENTS.md

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ Pick a backend in two steps:
6565
# What's reachable on this machine?
6666
bash .opencode/scripts/detect-backends.sh
6767

68+
# Or bias toward free providers (Cerebras / Groq / NVIDIA NIM / Google AI Studio quotas)
69+
bash .opencode/scripts/detect-backends.sh --free-tier-first
70+
6871
# Configure the highest-privacy tier you can use
6972
bash .opencode/scripts/configure-backend.sh \
7073
--tier private_local --provider ollama \
@@ -75,10 +78,14 @@ Tiers (privacy-first ordering):
7578

7679
| Tier | Where prompts travel | Examples |
7780
|------|----------------------|----------|
78-
| `private_local` | Stays on your machine | Ollama, LM Studio, llama.cpp, vLLM |
81+
| `private_local` | Stays on your machine | Ollama, LM Studio, llama.cpp, vLLM, MLX (Apple Silicon) |
7982
| `enterprise` | Stays in your tenant | Azure OpenAI, AWS Bedrock |
80-
| `hosted_oss` | Open weights, third-party host | Together, Groq, OpenRouter |
81-
| `proprietary` | Vendor-bound | Anthropic, OpenAI |
83+
| `hosted_oss` | Open weights, third-party host | Together, Groq, OpenRouter, Cerebras, DeepSeek direct, NVIDIA NIM (`nvidia_nim`) |
84+
| `proprietary` | Vendor-bound | Anthropic, OpenAI, Google AI Studio (`google_aistudio` — Gemini) |
85+
86+
See [`docs/cost-ladder.md`](docs/cost-ladder.md) for $0/$20/$200 monthly
87+
budget paths and a per-job picker (routine fix vs long-context refactor
88+
vs CI gate vs security audit).
8289

8390
The SDLC enforcement works on any backend that hits the **capability floor**
8491
(30B+ code-tuned models — Qwen-Coder, DeepSeek-Coder, Sonnet, Opus, GPT-5.x).

CHANGELOG.md

Lines changed: 242 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,248 @@
22

33
All notable changes to opencode-sdlc-wizard.
44

5+
## [0.8.9] - 2026-05-08
6+
7+
### Fixed — `cross-model-review.sh` wrapper alias parity with configure-backend.sh
8+
9+
Codex pre-ship review of the v0.8.x stack caught a real invocation
10+
bug introduced by v0.8.7's SKILL.md drift sweep. The skill's Step 2
11+
table and Step 3 examples advertised `nvidia_nim` and `google_aistudio`
12+
as reviewer providers, but `scripts/cross-model-review.sh`'s alias
13+
`case` block hadn't been extended. `configure-backend.sh` aliases
14+
`nvidia_nim → nvidia` and `google_aistudio → google` (writes the
15+
corresponding `provider.nvidia` / `provider.google` blocks in
16+
`opencode.json`). The wrapper's wildcard fallthrough was passing
17+
`nvidia_nim` and `google_aistudio` through verbatim, which built
18+
model pins (`nvidia_nim/<model>` / `google_aistudio/<model>`) that
19+
didn't match the registered provider blocks → silent
20+
provider-not-found from OpenCode at run time.
21+
22+
- `scripts/cross-model-review.sh`: alias `case` block now mirrors
23+
configure-backend.sh's canonical mapping:
24+
- `nvidia_nim | nvidia-nim | nvidia``nvidia`
25+
- `google_aistudio | google | gemini``google`
26+
- Pass-through list also explicitly names the new v0.8.0 canonical
27+
IDs (`cerebras`, `deepseek`, `mlx`) — they were already correct via
28+
the wildcard, but documenting them stops a future maintainer from
29+
thinking they need an alias.
30+
31+
### Tests
32+
33+
- `tests/test-cross-model-review.sh` adds T11–T14:
34+
- T11: `nvidia_nim` resolves to `nvidia/<model>` in the opencode pin
35+
- T12: `google_aistudio` resolves to `google/<model>`
36+
- T13: `gemini` resolves to `google/<model>`
37+
- T14: canonical `cerebras`/`deepseek`/`mlx` pass through unchanged
38+
- 305 tests total across 11 suites (was 301 in v0.8.8).
39+
40+
### Note on the v0.8.0 drift family
41+
42+
This is the fifth surface in the v0.8.0 picker drift family
43+
(install.sh in v0.8.4, validator domain in v0.8.5, setup-wizard
44+
SKILL.md in v0.8.6, cross-model-review SKILL.md in v0.8.7,
45+
AGENTS.md+PRIVACY.md in v0.8.8) — and the only one that was an actual
46+
runtime bug rather than documentation drift. Caught by cross-model
47+
review before ship. The drift family is now closed across both
48+
documentation surfaces and runtime invocation.
49+
50+
## [0.8.8] - 2026-05-06
51+
52+
### Fixed — AGENTS.md + PRIVACY.md tier drift (final v0.8.0 sweep)
53+
54+
Last surface in the v0.8.0 provider drift family. The user-facing
55+
AGENTS.md tier table and the deeper PRIVACY.md tier walkthroughs both
56+
still listed only the v0.2.0 providers. Since AGENTS.md is what
57+
OpenCode auto-loads at session start, this was the most user-visible
58+
of the four drift surfaces.
59+
60+
**`AGENTS.md`** privacy-tier table updated:
61+
- `private_local` row gains MLX (Apple Silicon)
62+
- `hosted_oss` row gains Cerebras / DeepSeek direct / NVIDIA NIM
63+
- `proprietary` row gains Google AI Studio (`google_aistudio`)
64+
- New `--free-tier-first` example before the configure call
65+
- New cross-link to `docs/cost-ladder.md`
66+
67+
**`PRIVACY.md`** tier walkthroughs updated:
68+
- private_local runtime table gains MLX row with default URL +
69+
suggested model
70+
- hosted_oss provider table gains 3 rows (Cerebras / DeepSeek /
71+
NVIDIA NIM) plus a Notes column flagging free tier and pricing
72+
- hosted_oss configure example now shows free-tier path (Cerebras),
73+
cheapest paid path (DeepSeek direct), and the original Together
74+
example
75+
- proprietary section gains Google AI Studio configure example
76+
with the closed-weights caveat
77+
78+
### Tests
79+
80+
- `test-doc-templates.sh` adds 2 final drift gates: AGENTS.md tier
81+
table covers v0.8.0 providers + PRIVACY.md tier walkthroughs cover
82+
same. Catches the next regression of this kind.
83+
- 29/29 doc-template tests green (was 27/27).
84+
- Full suite: 301/11 (was 299/11).
85+
86+
**v0.8.0 drift family closed.** Four surfaces in total were carrying
87+
the same drift — install.sh next-steps (v0.8.4), validator domain
88+
mismatch (v0.8.5, related), setup-wizard SKILL.md (v0.8.6),
89+
cross-model-review SKILL.md (v0.8.7), and now AGENTS.md +
90+
PRIVACY.md (v0.8.8). Each surface now has a regression gate.
91+
92+
## [0.8.7] - 2026-05-06
93+
94+
### Fixed — cross-model-review SKILL.md provider drift + stale DeepSeek price
95+
96+
Audit-driven completion of the v0.8.0 provider rollout: this is the
97+
third surface (after install.sh in v0.8.4 and setup-wizard SKILL.md
98+
in v0.8.6) carrying the same drift. The Step 2 reviewer table still
99+
recommended `togetherai/deepseek-ai/DeepSeek-V3` as the default at
100+
`~$0.27/M` — both the model id and the price had moved.
101+
102+
Updates to `skills/cross-model-review/SKILL.md`:
103+
104+
- **Step 2 reviewer table** gains four rows for v0.8.0 providers:
105+
- `private_local/mlx` — Apple Silicon native (Qwen2.5-Coder-32B 4bit)
106+
- `hosted_oss/cerebras` — free tier, ~2000 tok/s, gpt-oss-120b /
107+
qwen-3-235b-a22b-instruct-2507
108+
- `hosted_oss/deepseek` direct — cheapest paid hosted reasoning
109+
(~$0.14/M cache-miss, deepseek-chat)
110+
- `hosted_oss/nvidia_nim` — free credits at build.nvidia.com
111+
- **Stale Together row** kept but model bumped to `DeepSeek-V3.1`
112+
(current) and price callout dropped from this row (it was wrong,
113+
and the cheaper deepseek-direct row sits next to it now).
114+
- **Default suggestion** no longer pins `togetherai/DeepSeek-V3`.
115+
Points users to `docs/cost-ladder.md` for the per-budget pick and
116+
names three common defaults (cerebras free, deepseek cheap-paid,
117+
ollama local).
118+
- **Step 3 examples** now show two paths — the free-tier Cerebras
119+
default and the cheapest-paid DeepSeek-direct path. Old Together
120+
example removed.
121+
122+
### Tests
123+
124+
- `test-doc-templates.sh` adds two gates against
125+
`cross-model-review/SKILL.md`:
126+
- Each v0.8.0 provider (cerebras / deepseek / nvidia_nim) appears
127+
as a Step 2 table row OR a Step 3 `--reviewer-provider` flag —
128+
avoids coincidental matches on legacy model names like
129+
`deepseek-coder-v2:16b`.
130+
- Stale `~$0.27/M` DeepSeek price string must not reappear.
131+
- 27/27 doc-template tests green (was 25/25).
132+
- Full suite: 299/11 (was 297/11).
133+
134+
## [0.8.6] - 2026-05-06
135+
136+
### Fixed — sibling-wizard awareness + setup-wizard skill provider drift
137+
138+
Two issues in the same release because they share a root cause: **drift
139+
between v0.8.0's expanded picker and the surfaces that describe it**.
140+
141+
**Sibling-wizard awareness in install.sh.** Caught during the
142+
`states-project-research` consumption test where the repo already had
143+
`claude-sdlc-wizard` installed. `install.sh` happily wrote `.opencode/`
144+
without acknowledging the existing `.claude/` install — leaving the
145+
user wondering whether the wizards were merging behavior or stomping
146+
each other (they coexist; one writes `.opencode/`, the other `.claude/`).
147+
148+
- New detection block runs right after the version banner.
149+
- Looks for `.claude/skills/sdlc/` or `CLAUDE_CODE_SDLC_WIZARD.md`
150+
(claude-sdlc-wizard) and `.codex/` (codex-sdlc-wizard).
151+
- Prints a single-paragraph "Note: detected sibling SDLC wizard
152+
installation(s)" with the dirs found, then continues install.
153+
- Non-blocking; informational only.
154+
155+
**Setup-wizard SKILL.md provider drift.** Same root cause as v0.8.4's
156+
`install.sh` next-steps drift — the skill still listed the v0.2.0 tier
157+
providers (Ollama / LM Studio / llama.cpp / vLLM, Together / Groq /
158+
OpenRouter, Anthropic / OpenAI). Five providers added in v0.8.0 (MLX,
159+
Cerebras, DeepSeek direct, NVIDIA NIM, Google AI Studio) were missing.
160+
161+
- `private_local` row gains MLX (Apple Silicon native).
162+
- `hosted_oss` row gains Cerebras / DeepSeek direct / NVIDIA NIM,
163+
with a free-tier callout pointing to `docs/cost-ladder.md`.
164+
- `proprietary` row gains Google AI Studio (Gemini, closed weights).
165+
- Step 2 now shows the `--free-tier-first` flag inline so users see
166+
it without reading `--help`.
167+
168+
### Tests
169+
170+
- `test-install.sh` adds T10/T11/T12: claude-sdlc-wizard detected,
171+
codex-sdlc-wizard detected, fresh empty target produces no false
172+
sibling detection.
173+
- `test-doc-templates.sh` adds a setup-wizard provider drift gate:
174+
asserts every v0.8.x picker provider + `--free-tier-first` are
175+
named in the SKILL.md.
176+
- 17/17 install behavior tests green (was 14/14).
177+
- 25/25 doc template tests green (was 24/24).
178+
- Full suite: 297/11 (was 293/11).
179+
180+
## [0.8.5] - 2026-05-06
181+
182+
### Fixed — schema validator emits domain-mismatch hint on foreign-domain artifacts
183+
184+
`validate-review-artifact.js` previously printed only generic
185+
`required field missing` errors when a research- or persuasion-domain
186+
handoff was validated against the code-review schema. Caught during
187+
the `states-project-research` consumption test: a pre-existing
188+
research-review handoff with `topic` / `audience` / `stakes` produced
189+
5 missing-required errors with no signal that the schema might just
190+
be wrong for the artifact category.
191+
192+
Heuristic added to `scripts/validate-review-artifact.js`:
193+
194+
- After validation fails, count missing top-level required fields and
195+
the presence of any foreign-domain markers (`topic`, `audience`,
196+
`stakes`, `research_question`, `claim`, `argument`, `manuscript`,
197+
`paper`, `theme`, `narrative`).
198+
- If `≥3 missing required` AND `≥1 foreign marker present`, emit a
199+
single `DOMAIN HINT:` line on stderr **before** the per-field error
200+
list. Tells the user the artifact looks like a non-code-review
201+
category and to check the schema choice.
202+
- No behavior change for legit code-review artifacts (verified with
203+
T32: partially-filled code-review handoff produces no hint, T33:
204+
valid handoff with forward-compat extras still validates clean).
205+
206+
### Tests
207+
208+
- `test-review-schemas.sh` adds T31/T32/T33: foreign-domain triggers
209+
hint, partial code-review does not, valid extras-laden handoff
210+
validates without false positive.
211+
- 33/33 review-schema tests green (was 30/30).
212+
- Full suite: 293/11 (was 290/11).
213+
214+
## [0.8.4] - 2026-05-06
215+
216+
### Fixed — install.sh "Next steps" hint refreshed for v0.8.x picker
217+
218+
The post-install banner had drifted: it still printed the v0.2.0 tier
219+
list (Ollama / LM Studio / llama.cpp / vLLM, Azure / Bedrock,
220+
Together / Groq / OpenRouter, Anthropic / OpenAI), missing every
221+
provider added since v0.8.0. Caught during the
222+
`states-project-research` consumption test — fresh installs were
223+
sending users to a stale provider menu while the real picker offered
224+
five more options.
225+
226+
Fixes in `install.sh`:
227+
228+
- `private_local` row gains `mlx` (Apple Silicon native, v0.8.0)
229+
- `hosted_oss` row gains `cerebras` / `deepseek` / `nvidia_nim` (v0.8.0)
230+
- `proprietary` row gains `google_aistudio` (v0.8.0)
231+
- New `--free-tier-first` example line so users discover the bias flag
232+
without reading `--help`
233+
- Cost guidance link to `docs/cost-ladder.md` (v0.8.0) — the doc
234+
exists in the bundle but nothing pointed to it from the install path
235+
- `$0 / $20 / $200` literals escaped (`\$`) — they would have been
236+
expanded as positional parameters and tripped `set -u` in the
237+
unquoted heredoc
238+
239+
### Tests
240+
241+
- `test-install.sh` adds T9: assert next-steps text mentions every
242+
provider the picker emits + `--free-tier-first` + `cost-ladder.md`.
243+
This is the regression gate so the banner can't drift again.
244+
- 14/14 install behavior tests green (was 13/13).
245+
- Full suite: 290/11 (was 289/11).
246+
5247
## [0.8.3] - 2026-05-06
6248

7249
### Fixed — release workflow unblocked

PRIVACY.md

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ Supported runtimes (all open-weight, locally hosted):
4343
| **LM Studio** | `http://127.0.0.1:1234/v1` | Whatever you've loaded in the GUI |
4444
| **llama.cpp** | `http://127.0.0.1:8080/v1` | Any GGUF you've loaded |
4545
| **vLLM** | `http://127.0.0.1:8000/v1` | Any HuggingFace ID you serve |
46+
| **MLX** (Apple Silicon native) | `http://127.0.0.1:8080/v1` | `mlx-community/Qwen2.5-Coder-32B-Instruct-4bit` (32 GB unified memory) |
4647

4748
**Capability floor.** SDLC enforcement (plan → TDD → self-review → cross-model
4849
review) leans on instruction-following + tool-use. The 30B+ code-tuned class
@@ -105,13 +106,29 @@ OpenCode reads keys via `{env:VAR}` substitution; no secrets land in
105106
Open-weight model on a hosted endpoint. Use when local hardware is
106107
insufficient and an enterprise tenant is unavailable.
107108

108-
| Provider | Suggested model |
109-
|----------|------------------|
110-
| Together | `Qwen/Qwen2.5-Coder-32B-Instruct` |
111-
| Groq | `llama-3.3-70b-versatile` |
112-
| OpenRouter | `qwen/qwen-2.5-coder-32b-instruct` |
109+
| Provider | Suggested model | Notes |
110+
|----------|-----------------|-------|
111+
| Together | `Qwen/Qwen2.5-Coder-32B-Instruct` | Stable, paid hosting |
112+
| Groq | `llama-3.3-70b-versatile` | Fastest hosted, free daily quota |
113+
| OpenRouter | `qwen/qwen-2.5-coder-32b-instruct` | Aggregator routing across providers |
114+
| Cerebras | `gpt-oss-120b` or `qwen-3-235b-a22b-instruct-2507` | Free tier, ~2000 tok/s |
115+
| DeepSeek direct | `deepseek-chat` | Cheapest paid hosted (~$0.14/M cache-miss) |
116+
| NVIDIA NIM (`nvidia_nim`) | `deepseek-ai/deepseek-r1` | Free credits at build.nvidia.com |
113117

114118
```bash
119+
# Free path — Cerebras
120+
export CEREBRAS_API_KEY="..."
121+
bash .opencode/scripts/configure-backend.sh \
122+
--tier hosted_oss --provider cerebras \
123+
--model "gpt-oss-120b"
124+
125+
# Cheapest paid — DeepSeek direct
126+
export DEEPSEEK_API_KEY="..."
127+
bash .opencode/scripts/configure-backend.sh \
128+
--tier hosted_oss --provider deepseek \
129+
--model "deepseek-chat"
130+
131+
# Stable paid — Together
115132
export TOGETHER_API_KEY="..."
116133
bash .opencode/scripts/configure-backend.sh \
117134
--tier hosted_oss --provider together \
@@ -123,14 +140,23 @@ move to `private_local` or `enterprise`.
123140

124141
## `proprietary` — max capability, vendor-bound
125142

126-
Anthropic Claude or OpenAI GPT. Use when ceiling matters more than data
127-
locality and you accept the vendor's standard terms.
143+
Anthropic Claude, OpenAI GPT, or Google AI Studio (Gemini). Use when
144+
ceiling matters more than data locality and you accept the vendor's
145+
standard terms. (Gemini lives here despite the "OSS-friendly" branding
146+
because the weights are closed; the runtime is just hosted.)
128147

129148
```bash
149+
# Anthropic
130150
export ANTHROPIC_API_KEY="..."
131151
bash .opencode/scripts/configure-backend.sh \
132152
--tier proprietary --provider anthropic \
133153
--model claude-opus-4-7
154+
155+
# Google AI Studio (Gemini)
156+
export GOOGLE_API_KEY="..."
157+
bash .opencode/scripts/configure-backend.sh \
158+
--tier proprietary --provider google_aistudio \
159+
--model gemini-2.5-flash
134160
```
135161

136162
## What the wizard itself sends

install.sh

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,27 @@ echo "OpenCode SDLC Wizard v$WIZARD_VERSION"
5454
echo "Target: $TARGET_DIR"
5555
echo ""
5656

57+
# Sibling-wizard detection — two SDLC wizards in one repo is supported (each
58+
# writes to its own directory), but worth surfacing so users don't expect a
59+
# merge of behavior. Caught during the states-project-research consumption
60+
# test where the repo already had claude-sdlc-wizard installed.
61+
SIBLINGS=""
62+
if [ -d "$TARGET_DIR/.claude/skills/sdlc" ] || \
63+
[ -f "$TARGET_DIR/CLAUDE_CODE_SDLC_WIZARD.md" ]; then
64+
SIBLINGS="${SIBLINGS} - claude-sdlc-wizard (.claude/)
65+
"
66+
fi
67+
if [ -d "$TARGET_DIR/.codex" ]; then
68+
SIBLINGS="${SIBLINGS} - codex-sdlc-wizard (.codex/)
69+
"
70+
fi
71+
if [ -n "$SIBLINGS" ]; then
72+
echo "Note: detected sibling SDLC wizard installation(s):"
73+
printf '%s' "$SIBLINGS"
74+
echo " opencode-sdlc-wizard installs to .opencode/ — both can coexist."
75+
echo ""
76+
fi
77+
5778
# Required source files in this repo (the bundle)
5879
REQUIRED_SOURCES=(
5980
"AGENTS.md"
@@ -206,13 +227,18 @@ Next steps:
206227
2. The plugin (.opencode/plugins/sdlc-wizard.js) auto-loads at session start
207228
and shells out to .opencode/hooks/ for SDLC enforcement.
208229
3. (Optional) Pick a backend — privacy-first picker:
209-
bash .opencode/scripts/detect-backends.sh # see what's available
230+
bash .opencode/scripts/detect-backends.sh # what's available
231+
bash .opencode/scripts/detect-backends.sh --free-tier-first # bias to free tiers
210232
bash .opencode/scripts/configure-backend.sh \\
211233
--tier private_local --provider ollama \\
212234
--model qwen2.5-coder:32b
213-
Tiers: private_local (Ollama / LM Studio / llama.cpp / vLLM),
214-
enterprise (Azure / Bedrock), hosted_oss (Together / Groq /
215-
OpenRouter), proprietary (Anthropic / OpenAI). See PRIVACY.md.
235+
Tiers (see PRIVACY.md for the privacy contract per tier):
236+
private_local: ollama / lm_studio / llama.cpp / vllm / mlx
237+
enterprise: azure_openai / aws_bedrock
238+
hosted_oss: together / groq / openrouter / cerebras / deepseek / nvidia_nim
239+
proprietary: anthropic / openai / google_aistudio
240+
Cost guidance for each path: docs/cost-ladder.md (\$0 / \$20 / \$200 monthly
241+
budgets, per-job picker, capability-floor table).
216242
4. Run skill({ name: "sdlc" }) inside OpenCode to invoke the SDLC workflow.
217243
218244
The installer does not write opencode.json on its own — backend selection is

0 commit comments

Comments
 (0)