Skip to content

Code Tribunal 2.0.3

Choose a tag to compare

@github-actions github-actions released this 18 Oct 15:44
· 43 commits to main since this release
v2.0.3
052f12f

Code Tribunal 2.0.3

Release identity

  • Release: 2.0.3
  • Tag: v2.0.3
  • Release inputs: release/release-inputs.json, status: active
  • Runtime source R: 10f2f8deef3ee63c952df76d5f627ed6aa2e7ea9
  • CI run: 39124138106
  • Image publication run: 39124138105
  • Base image: ghcr.io/seanleecoder/code-tribunal/ai-review-base:2.0-10f2f8deef3ee63c952df76d5f627ed6aa2e7ea9@sha256:e6ca87a2082cd4820b780a14164212a33e3d176812541e9ede68dd1b2169ccdd
  • Reviewer image: ghcr.io/seanleecoder/code-tribunal/ai-review-reviewer:2.0-10f2f8deef3ee63c952df76d5f627ed6aa2e7ea9@sha256:4279949eadccc6333ce6b07263e7ee5097e25eda49e62e9bc72fdb118614f4a6

Scope

This compatible patch refreshes the default roster to Claude Haiku 5.5 / low,
GPT-6 Luna / low, and DeepSeek V4.1 Flash / low. Cursor stays off the default
roster with Composer 2.5. It keeps one review and one critique round and the
deterministic informational consensus policy.

Findings are no longer lost silently. A finding that a majority of critics call
noise is listed under the summary's FYI findings instead of disappearing, and a
noise vote no longer resolves an existing thread. A finding that omits
confidence is kept at 0.0 instead of being dropped. Every summary entry shows
Found by.

Every stage is now bound to prepare's whole effective configuration. A job that
sees different AI_REVIEW_* overrides fails before any provider call or platform
write, and post refuses a consensus artifact from another run. Prompts and rules
always come from the image. Prepare removes every reviewer CLI's agent files
(AGENTS.md, CLAUDE.md, .claude/, and the others) from the snapshot for all
seats.

Posting state no longer grows with every run, which could overflow it and stop
post from publishing. Post ignores summary-marker notes from other authors, and an
ambiguous remap marks candidate threads stale instead of resolving them.

Output formats change only within their versions. consensus.v2 keeps the drop
decision and summary.drop_count, which are now never produced (COMPAT-003). The
prepare manifest drops config_sha256 and rules_sha256, and prepare no longer
writes the unread inputs/prompts/, inputs/rules/, and
inputs/config.review.yaml. Configuration remains review_config.v3; state_schema_version: 1 and
render-body.v4 are unchanged. The images no longer ship unread repository files
under /opt.

The hardened GitLab child pipeline is deprecated and will be removed in the next
major release (COMPAT-004).

Migration

Adopt the synchronized templates and digest-pinned image pair together, and run
every job of a pipeline on the same release: the effective-config digest changes
once, and a mixed pipeline fails at the first stage that compares it. Existing
configuration and persisted state need no schema migration.

Deployments without model or effort overrides move to the new default roster.
Set AI_REVIEW_<REVIEWER>_MODEL and AI_REVIEW_<REVIEWER>_EFFORT to keep the
2.0.2 models; see
effort inheritance and clearing.

Custom configurations that omit the inline posting settings now get multiline
comments and all three diff sides. To keep the previous behaviour, set
posting.v1_inline_sides: [new] and posting.inline_multiline: false. Remove an
unsupported posting.fyi_mode, which is now rejected, or set it to
summary_comment. See
posting and state.

A custom configuration whose prompts or rules sit beside the file that
AI_REVIEW_CONFIG names no longer has them read. Build a custom image to change
them.

GitLab installations on the hardened child should move to a protected direct
include; see the
GitLab guide.

Live campaign

Record Result
record-candidate-canary.md Passed
record-github-current-image.md Passed
record-gitlab-current-image.md Passed
record-gitlab-hostile-mr.md Passed
record-model-effort-routes.md Passed
record-github-revision-failures.md Registered waiver; reason in release inputs

Release gates

  • Run the scoped campaign against one frozen runtime source R and the final
    base/reviewer pair.
  • Record only sanitized evidence; keep private consumer coordinates out of the
    public repository. Audit with scripts/scan_evidence_leaks.py and record its
    exact scope.
  • Activate the release inputs only after every non-waived release-gating record
    binds to the same source and image digests.
  • Keep candidate-canary.yml unchanged: the 2.0.3 evidence generator rejects
    unexpected artifacts.

Tagging

The external manifest binds release_commit and re-derives the R..P diff, so the
tag must point at a commit that satisfies it.

  • Merge the single release PR with a merge commit. Check out that final merged
    commit as P, then run make release-manifest P=<full SHA>.
  • Inspect R..P, the manifest, checksum, and generated tag certificate before
    signing. Sign v2.0.3 locally on exactly P, using the generated message.
  • The signed certificate's Release-manifest-sha256 binds the manifest bytes.
    Any change of tag target requires rebuilding and revalidating the certificate.
  • Push the signed tag and verify automatic publication of these notes and both
    assets. CI never holds the signing key.

Carried known limitations

  • In-pipeline trusted-image enforcement and runner/container network-egress
    enforcement remain absent. Credential isolation is established only in the
    recorded hardened-child and unprotected-ref sense; GitLab forks remain untested.
  • Cursor is off in the shipped default roster and exercised only by the four-seat
    Candidate Canary. Nothing verifies that the pinned cursor-agent honours its
    Shell(*) and write denies at runtime.
  • The mock critique stage emits no critiques, so the noise-to-FYI demotion is
    exercised live only if a real panel produces a noise majority. Unit and golden
    consensus tests cover it.
  • Posted summaries still carry no loss counters. The confidence default is
    covered by unit tests only.
  • The four-seat canary does not certify a real run of the shipped three-seat
    default roster.
  • Effort routes other than the low defaults, including the 2.0.2 routes that
    Migration restores, are not verified on this release's image pair.

Operator sign-off items

Final-pair provenance, real four-seat panels and critiques on both platforms, both
lifecycle campaigns, hostile containment and cleanup passed in Candidate Canary
39124481046. The default effort routes are taken from that run's GitHub panel; no
separate three-seat smoke ran. CI and image publication for R passed. Demo
preflight passed before and after the campaign.

The release PR also requires full quality and green final-head CI before merge.
The signed certificate and publication checks follow the Tagging procedure above.
No exact-value credential scan or OpenRouter billed token/cost inspection was
performed. Provider-internal effort behavior and non-default effort routes remain
outside the scoped pass.

Finalization

After every required gate passes, make release-repin RUN=<id> and
make release-finalize RUN=<id> EVIDENCE="<all record filenames>" prepare the
pins, active inputs, CHANGELOG promotion, and final notes together for one release
PR. Include quoted WAIVE arguments for every registered waiver. Scope and
Migration remain operator-written. After merging, generate the manifest and
certificate for the final merged P, sign and push the tag locally, and verify
publication. Then make release-open-next V=2.1.0 opens the next draft.
Historical inputs remain available at v2.0.3:release/release-inputs.json.