Default to Opus 4.8; freeze v0 and adopt the v1.x release track#2
Merged
Conversation
Two changes bundled for the v1.8 release: 1. Bump the built-in default model opus-4-7 -> opus-4-8 for the reasoning stages (Investigator/Critic). Reporter/issue path stays Haiku 4.5 (Opus rejects outputConfig.textFormat over Bedrock). The sampling-param strip pattern already covers opus-4-8, so no call-path change is needed. Routed every default through config._DEFAULT_MODEL / _DEFAULT_REPORTER_MODEL (main.py provenance + pricing fallback, doctor.py) so the literal lives in exactly one place and a future bump can't drift the early-exit paths out of sync. 2. Freeze the moving v0 tag and document the v1.x numbered-release track. v0 had silently stopped advancing at the v1.6 vintage, so the README's 'v0 = latest' contract was already false. Convert every @v0 / /v0/ / default-v0 reference (README, caller example, action.yml, reusable workflow default, CFN template) to v1.8, and rewrite the versioning + supply-chain prose to recommend a numbered tag or SHA pin. Also add the missing BEDROCK_ISSUE_MODEL_ID row to the README env table. 538 tests pass.
Full 10-angle review of the default-model + v0-freeze diff surfaced no correctness bugs but several items worth fixing (four self-introduced): - main.py _build_provenance_from_env: the investigator line used the 2-arg os.getenv(name, default), which stamps "" for a set-but-empty BEDROCK_MODEL_ID (the normal result of forwarding an unset secret), diverging from Config.env_or. Its 3 siblings already used the robust '(getenv or "").strip() or default' idiom; align investigator too so the comment's 'mirrors the single source of truth' claim is actually true. Add a parametrized empty/whitespace regression test. - infrastructure: drop the 'refs/tags/v1.*' family-wildcard suggestion for the OIDC trust pin — it auto-trusts every future v1.x tag (incl. a malicious one an upstream attacker could push), defeating the pin. - README/versioning prose: a git tag is not 'immutable' (it can be re-pointed); reword so the tag-vs-SHA tradeoff is honest and doesn't undercut the SHA-is-stronger guidance. - requirements.txt: 'post-v0' -> present-tense 'not hash-pinned yet' so the hardening note isn't an unanchored rotting TODO. - test_config_init: add a bare-Config() test asserting the built-in model defaults resolve (was only indirectly pinned via provenance). 541 tests pass (was 538).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Two changes, bundled for the v1.8 release:
1. Default model → Opus 4.8
Bumps the built-in default
_DEFAULT_MODELfromopus-4-7toopus-4-8for the reasoning stages (Investigator + Critic). Reporter and issue-answer paths stay Haiku 4.5 — Opus rejectsoutputConfig.textFormat(structured output) over Bedrock, which those paths require.The sampling-param strip pattern (
_NO_SAMPLING_PARAMS_PATTERN) already matchesopus-4-8, so no call-path change is needed — this was validated when 4.8 support landed. All three adopter repos (deequ, python-deequ, dqdl) already run 4.8 via theBEDROCK_MODEL_IDsecret; this just makes it the out-of-the-box default.DRY hardening: routed every default through
config._DEFAULT_MODEL/_DEFAULT_REPORTER_MODEL(the provenance + pricing-fallback paths inmain.py, anddoctor.py), so the literal lives in exactly one place. This directly prevents the drift class that caused the original 4.7→4.8 sampling-pattern miss.2. Freeze v0, adopt the v1.x release track
The moving
v0tag had silently stopped advancing at the v1.6 vintage — so the README's "v0= latest" contract was already false, and@v0adopters were stuck three releases behind. This:@v0//v0//default: v0reference (README quick-start, caller example,action.yml, the reusable workflow'sshadow_refdefault, the CFN Launch Stack URL + template) tov1.8.v1.xtag or a SHA pin, and documents thatv0is now frozen.3. Doc fix
Adds the missing
BEDROCK_ISSUE_MODEL_IDrow to the README env-var table (it was only in a.shadow.ymlcomment + the caller example).Testing
Release steps (after merge)
v1.8at the merge commit + create its GitHub Release.v1.6andv1.7(currently zero Releases exist despite the tags).