Skip to content

Working PR for ADR-246: implementation can be done by dev team in cloud environment - #6

Closed
jodavis wants to merge 7 commits into
mainfrom
feature/ADR-246-cloud-dev-team
Closed

Working PR for ADR-246: implementation can be done by dev team in cloud environment#6
jodavis wants to merge 7 commits into
mainfrom
feature/ADR-246-cloud-dev-team

Conversation

@jodavis

@jodavis jodavis commented Jun 3, 2026

Copy link
Copy Markdown
Owner

Working PR for ADR-246: implementation can be done by dev team in cloud environment

Includes breaking changes which must be completed before consumers can update their dev-team instances.

…ontext, add parse_json_list_output (#5)

* ADR-253: Add ReviewComment/ReviewThread dataclasses, extend PipelineContext, add parse_json_list_output

- Add ReviewComment and ReviewThread dataclasses
- Add PipelineContext fields: review_threads, first_push_done, base_branch
- Remove pr_url from PipelineContext (moves to sidecar; ADR-254 fixes step references)
- save(): first_push_done as lowercase true/false; review_threads as camelCase JSON unconditionally; review_notes unconditionally
- load(): deserialise all new fields; review_threads camelCase→snake_case
- Add parse_json_list_output(): fenced blocks first, then bare lines, returns [] on failure
- main(): compute base_branch via git before pipeline run, guarded against recomputation on resume
- Add test_dev_team.py with 34 unit tests covering all round-trips and edge cases
- Update validate-tests.cmd/.sh to invoke pytest

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

* ADR-253: Fix validate-tests scripts to reference correct test path

%~dp0 / SCRIPT_DIR resolves to scripts/ (repo root), but test_dev_team.py
lives in plugins/dev-team/scripts/. Point both the PYTHONPATH and the pytest
target at the correct plugin subdirectory.

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

* ADR-253: uncommitted changes at validation

* ADR-253: Add TypeError to review_threads exception handler in load()

If the Review Threads section contained valid JSON that was not a list
(null, string, dict — e.g. from file corruption), json.loads would
succeed but `for t in threads_data` would raise TypeError, crashing
load() on pipeline resume. Added TypeError to the except tuple and a
test covering null, dict, and string cases.

* ADR-253: uncommitted changes at validation

* Put dev-team plugin back in settings

---------

Co-authored-by: Joe Davis <ElwoodMoves@hotmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Joe Davis <jodasoft@outlook.com>
@jodavis
jodavis marked this pull request as draft June 3, 2026 18:50
jodavis-claude and others added 4 commits June 3, 2026 14:29
- ReviewStep: remove PR-creation block; parse reviewer JSON into
  ReviewThread objects with UUID assignment; save ctx.review_threads /
  ctx.review_notes; emit [DEV-TEAM] Review ready: <status>
- FixPrStep: add context_path ctor; pass $REVIEW_THREADS (unresolved
  threads JSON); thread-merge preserving Reviewer's resolved value;
  ctx.save() after merge
- SignoffStep: add context_path ctor; _run_reviewer_signoff returns
  4-tuple (ok, error, thread_dicts, body); $BASE_BRANCH/$REVIEW_THREADS
  substitutions; sys.exit(1) guard in main thread; thread-merge
  appending comments / updating resolved / adding new threads with UUIDs;
  ctx.signoff_notes; approval driven by thread resolution; explicit save
- ValidateStep: add context_path ctor; emit [DEV-TEAM] First push
  complete (save-before-marker pattern, skipped on resume)
- ImplementStep: emit [DEV-TEAM] Implementation started / complete
- DebugStep: emit [DEV-TEAM] Debug complete
- FixStep: add $REVIEW_THREADS: "" substitution
- PipelineContext: add signoff_notes field with save/load via
  <!-- section:Signoff Notes --> (mirrors review_notes pattern)

Co-authored-by: Joe Davis <ElwoodMoves@hotmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* ADR-255: Update reviewer/developer skill files to use thread schema

- reviewer-review.md: replace $PR_URL with $BASE_BRANCH; remove Step 3
  (PR gate) and Step 6 (gh api post); replace gh pr diff with git diff
  origin/$BASE_BRANCH; output uses threads[] with filePath/lineNumber/
  resolved/comments schema (no id field)
- reviewer-sign-off.md: replace $PR_URL with $BASE_BRANCH and
  $REVIEW_THREADS; remove GraphQL fetch (Step 3), GitHub MCP resolve
  calls, gh api post (Step 6), and Step 6a; Reviewer evaluates threads
  from $REVIEW_THREADS and returns every thread evaluated (comments: []
  if no new comment); output has no status field; id preserved on
  carried-over threads
- developer-fix.md: remove Step 3 (GitHub MCP fetch) and Step 4
  (triage with direct GitHub reply); add Build/Test Issues and Review
  Threads input sections; add mode-detection; in review-fix mode
  Developer returns full updated threads[] JSON block; disagree flow
  appends Developer comment to thread instead of posting to GitHub

* ADR-255: Fix developer-fix.md to preserve prior comments in threads output

Returning comments: [] erased the original Reviewer comment, leaving
the sign-off Reviewer with no issue description. Instruction now says
to include all prior comments as-is and append a Developer reply only
when disagreeing or explaining. Example JSON block updated to match.

* ADR-255: Fix FixPrStep to increment iteration before save

ctx.save() was called before ctx.review_fix_iteration += 1, so a
crash between the two lines would replay the step with the same
iteration count, allowing one extra retry beyond the configured limit.

---------

Co-authored-by: Joe Davis <ElwoodMoves@hotmail.com>
…milestone scrum master table (#12)

* ADR-256: Remove Jira tools from developer, update reviewer output schema, add dev-team.md milestone table

All authenticated connector tools removed from developer.md per the scrum-master-owns-all-operations design.
Reviewer output schema updated to thread-based JSON. Full 8-milestone table added to dev-team.md with sidecar
persistence, thread-matching, and Jira idempotency guard.

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

* ADR-255: Update reviewer/developer skill files to use thread schema (#9)

* ADR-255: Update reviewer/developer skill files to use thread schema

- reviewer-review.md: replace $PR_URL with $BASE_BRANCH; remove Step 3
  (PR gate) and Step 6 (gh api post); replace gh pr diff with git diff
  origin/$BASE_BRANCH; output uses threads[] with filePath/lineNumber/
  resolved/comments schema (no id field)
- reviewer-sign-off.md: replace $PR_URL with $BASE_BRANCH and
  $REVIEW_THREADS; remove GraphQL fetch (Step 3), GitHub MCP resolve
  calls, gh api post (Step 6), and Step 6a; Reviewer evaluates threads
  from $REVIEW_THREADS and returns every thread evaluated (comments: []
  if no new comment); output has no status field; id preserved on
  carried-over threads
- developer-fix.md: remove Step 3 (GitHub MCP fetch) and Step 4
  (triage with direct GitHub reply); add Build/Test Issues and Review
  Threads input sections; add mode-detection; in review-fix mode
  Developer returns full updated threads[] JSON block; disagree flow
  appends Developer comment to thread instead of posting to GitHub

* ADR-255: Fix developer-fix.md to preserve prior comments in threads output

Returning comments: [] erased the original Reviewer comment, leaving
the sign-off Reviewer with no issue description. Instruction now says
to include all prior comments as-is and append a Developer reply only
when disagreeing or explaining. Example JSON block updated to match.

* ADR-255: Fix FixPrStep to increment iteration before save

ctx.save() was called before ctx.review_fix_iteration += 1, so a
crash between the two lines would replay the step with the same
iteration count, allowing one extra retry beyond the configured limit.

---------

Co-authored-by: Joe Davis <ElwoodMoves@hotmail.com>

* ADR-256: Fix ctx.save() ordering and review_notes preservation in dev_team.py

P2a: Move ctx.save() to after review_fix_iteration and work_summaries updates in
FixPrStep so a pipeline resume after interruption sees the correct iteration count
and the latest work summary.

P2b: Preserve signoff body in SignoffStep when failures is empty but threads are
unresolved. ctx.review_notes now falls back to ctx.signoff_notes so the developer-fix
agent receives textual context explaining why sign-off failed.

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

* ADR-256: Document gh api strategy in dev-team.md; update reviewer.md frontmatter

P1: Add implementation note to the thread-posting section of dev-team.md explaining
that mcp__github__help was called but plugin:github:github was unavailable, and that
gh api REST/GraphQL calls are the direct equivalent. Preserves all functional
behaviour; satisfies the exit criterion by documenting the discovery outcome.

P4: Update reviewer.md description frontmatter to remove "Creates GitHub PRs" —
the scrum master owns PR creation after ADR-256; the reviewer only outputs a
structured JSON result.

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

* ADR-256: Fix reply-to-thread URL in dev-team.md

The reply endpoint requires the pull number in the path:
  /pulls/<pull-num>/comments/<id>/replies
not the shorter form without it. Verified empirically while posting PR
thread replies — the shorter form returns 404.

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

* ADR-256: Use mcp__plugin_github_github__add_reply_to_pull_request_comment for reply-to-thread

Satisfies exit criterion #4: MCP method name discovered from plugin:github:github
server and now referenced in Thread-posting logic. resolve-thread continues to
use gh api graphql resolveReviewThread (no MCP equivalent exists).

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

* Remove gh CLI instructions from dev-team.md

---------

Co-authored-by: Joe Davis <ElwoodMoves@hotmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Joe Davis <jodasoft@outlook.com>
@jodavis

jodavis commented Jun 5, 2026

Copy link
Copy Markdown
Owner Author

Issue: There are SO MANY permission requests in this process. A lot of them are for gh CLI commands (that shouldn't be getting called), for all the Jira updates, and for writing to the sidecar file (because it's in the .claude folder).

@jodavis

jodavis commented Jun 5, 2026

Copy link
Copy Markdown
Owner Author

Ran out of tokens on this fairly simple change. There's still some work to do here. The top level agent is doing a lot of work re-figuring its own tasks, when they should just be working.

ElwoodMoves and others added 2 commits June 5, 2026 17:25
…reliable and the agent is falling back on gh anyway. The cloud environment will have to have gh set up and authenticated.
Repository owner deleted a comment from Copilot AI Jun 6, 2026
Repository owner deleted a comment from Copilot AI Jun 6, 2026
@jodavis

jodavis commented Jun 13, 2026

Copy link
Copy Markdown
Owner Author

This wasn't working as we hoped, so abandoning it in favor of the new architecture

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.

3 participants