Skip to content

Fix #76: the default branch always ships, regardless of CLAUDE.md designation - #115

Closed
laird wants to merge 24 commits into
masterfrom
feature/issue-76-default-branch-ships
Closed

Fix #76: the default branch always ships, regardless of CLAUDE.md designation#115
laird wants to merge 24 commits into
masterfrom
feature/issue-76-default-branch-ships

Conversation

@laird

@laird laird commented Aug 8, 2026

Copy link
Copy Markdown
Owner

Closes #76

Problem

verify-shipped.sh resolves the ship branch from the local worktree's CLAUDE.md. Two worktrees with different CLAUDE.md files returned different verdicts for the same commit:

worktree **Ship branch**: verdict for a commit on master
master absent SHIPPED
integration line integration NOT_SHIPPED (wrong!)

A second failure mode: when the designated ship branch no longer exists (merged away and deleted), the script exited with code 2 ("cannot resolve ship branch") — even when the commit was sitting on the default branch.

Fix

A commit is now considered shipped if it reached the designated ship branch or the repo's default branch. The default branch is resolved independently of any local CLAUDE.md (via git symbolic-ref refs/remotes/origin/HEAD, then gh repo view) so the verdict is consistent regardless of which worktree runs the check.

Stale designations are also handled: if the named ship branch doesn't resolve but the commit IS on the default branch, the script now reports SHIPPED (with a note) instead of exiting 2.

Changes

  • plugins/autocoder/scripts/verify-shipped.sh: add resolve_default_branch(), compute DEFAULT_BRANCH at startup, check default branch as secondary ship target
  • .agent/scripts/verify-shipped.sh: add mirror (was absent; parallel maintenance requirement)
  • tests/test_verify_shipped.py: three new pytest cases

Verification

$ python3 -m pytest tests/test_verify_shipped.py -v
15 passed in 0.90s     # previously 12 (3 new cases added)

New cases:

Pre-existing test_issue_fns.sh failures (11 label-exclusion checks in the gh backend) are unrelated to this change and tracked separately.

🤖 Generated with Claude Code

laird and others added 24 commits August 7, 2026 15:36
…g to N-clean; scope + exercise preflight; swarm cadence)
Design spec for adding a human-gated planning capability to the manager
session (brainstorm → spec → critical review → decompose to stories →
existing fleet implements), plus renaming /fix→/dev and /fix-loop→/dev-loop
with aliases. Reuses existing skills and the decomposed/subtask convention;
adds two backlog-aware behaviors to the manager loop.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Critical-design-review round 1 approved the planning-pipeline spec as-is:
0 literal-wrongness findings, 0 forced decisions. Empirically confirmed the
two load-bearing hand-off facts (subtask is claimable; decomposed parents are
excluded from claiming). Recorded the CDR approval in the spec status and
carried the three CIR-deferred items forward as notes B8/B9 (+ existing B5).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…eview-1 to autocoder-planning-pipeline-implementation-plan
Tracks the 2026-07-28 handoff documenting the /fix→/dev rename and
peters-toolkit:bugfix integration, plus the still-unaddressed critical
review of the planning-pipeline implementation plan.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
… reimplemented on master + platform drift repair
… exclusion, drift repair), marketplace to 3.32.0
…ound/improved/learned per round, verdict chapter)
…e v2 removal

Atlassian removed POST /rest/api/2/search from Jira Cloud (HTTP 410,
CHANGE-2046). list and any-claimable now use POST /rest/api/3/search/jql
with an explicit fields list, nextPageToken pagination (no startAt), and
existence-of-first-page instead of the removed total for any-claimable.
Issue lifecycle endpoints stay on v2 (not removed; plain-string bodies).
The fake serves the new contract, enforces a settable page cap to exercise
the token loop, and returns 410 on v2 search so regressions cannot pass.

Live verification against real Jira Cloud pending by coordinator.
…text

Live smoke showed /rest/api/3/search/jql returns description as an ADF
document object, not v2's plain string. The list reshape now walks ADF
content nodes collecting text (paragraphs joined with newlines; tolerates
null, plain strings, malformed nodes), so body stays a plain string for
all consumers. v2 CRUD read paths are untouched (still plain strings).
The fake now serves ADF descriptions from v3 search to pin the contract.
…-smoke-test.sh; live validation pending an ADO sandbox)
…gents

The SKILL.md had no model guidance. Top-level coordinator (scope/grade/fix
decisions) uses the deep model; subagents and swarm workers use the balanced
model. Mirrors the autocoder manager/worker tier pattern.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… model selection (#110)

* feat(autocoder): add model-config startup confirmation and env-var-driven model selection

Autocoder agents now resolve model tiers from env vars → .autocoder.json →
built-in defaults (claude-opus-5 / claude-sonnet-5 / claude-haiku-4-5 on
Claude Code; gemini-2.5-pro / gemini-2.0-flash on Antigravity).

On first run with no model config found, the agent presents the defaults and
asks the user to confirm or override before proceeding.  The confirmed models
are exported as MANAGER_MODEL / WORKER_MODEL / FAST_MODEL and referenced in
every Task tool call in the workflow so agents actually use them.

Also adds skills/autocoder/references/model-config.md documenting the tier
system and how to persist overrides via .autocoder.json.

Parallel maintenance: plugins/autocoder/commands/fix.md ↔ .agent/workflows/fix.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: bump autocoder to 4.11.0, marketplace to 3.33.0

Reflects model-config startup confirmation and env-var-driven model
selection added in the previous commit.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
#112)

Switch fix.md and model-config.md from full API model IDs (claude-opus-5)
to platform tier shorthand (opus/sonnet/haiku for Claude Code, pro/flash
for Gemini). Agents inherit credentials from the running session — no
separate API keys needed.

Rename skills/harden → skills/improve to reflect the general improvement
and validation loop, not just security hardening.

Bump autocoder 4.11.0 → 4.12.0, marketplace 3.33.0 → 3.34.0.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…ignation

Two worktrees with different CLAUDE.md files returned different verdicts for
the same commit — a worker on an integration line with a '**Ship branch**:'
designation would report master commits as NOT_SHIPPED.

Fix: a commit is considered shipped if it reached the designated ship branch
OR the repo's default branch. The default branch is resolved independently
of any local CLAUDE.md (via origin/HEAD then gh), so the verdict is
consistent regardless of which worktree runs the check.

Also handles stale designations: if the named ship branch no longer exists
(merged away) but the commit is on the default branch, the script now
reports SHIPPED instead of exiting with error code 2.

Mirrors verify-shipped.sh into .agent/scripts/ per parallel-maintenance
requirement. Adds three pytest cases that verify the new property, the
consistent-verdict property, and the #35 non-regression.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
laird added a commit that referenced this pull request Aug 17, 2026
…ignation (#126)

Fix #76: the default branch always ships, regardless of CLAUDE.md designation. Supersedes #115. Unrelated pre-existing shell CI failure tracked as #125.
@laird

laird commented Aug 17, 2026

Copy link
Copy Markdown
Owner Author

Superseded by #126.

This branch was 24 commits behind master (CONFLICTING), mostly carrying already-landed history. The one real fix -- default branch always ships, regardless of CLAUDE.md designation -- is reapplied verbatim on current master in #126.

On the #77-dependency note in #76's original filing: this fix doesn't need #77 to land. It makes verify-shipped.sh check the repo's default branch as an additional ship target (resolved independently of CLAUDE.md), so the verdict is correct regardless of which branch is currently designated as the ship branch -- no CLAUDE.md/.envrc edit required either way.

@laird laird closed this Aug 17, 2026
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.

Ship-branch designation is worktree-dependent; the integration branch's CLAUDE.md goes stale when #77 lands

1 participant