Phase 2: Rework for final PR review 23 #776

Merged
claude merged 128 commits from IW-707-phase-02 into IW-707 2026-10-10 19:43:23 +00:00
Member

Phase 02 implementation for IW-707.

Files

Browse changed files: https://code.iterative.works/iterative-works/iw-cli/-/blob/IW-707-phase-02/

Phase 02 implementation for IW-707. ### Files Browse changed files: https://code.iterative.works/iterative-works/iw-cli/-/blob/IW-707-phase-02/
Port allocation for worktrees, so project start hooks need not compute their own ports

Artifacts:
- analysis.md
- issue.md

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B8ZD5foFWAE2zV1xYojPMa
Port allocation for worktrees, so project start hooks need not compute their own ports

Artifacts:
- tasks.md
- review-state.json (tasks_ready)

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B8ZD5foFWAE2zV1xYojPMa
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B8ZD5foFWAE2zV1xYojPMa
An attached session is killed after 5 minutes, because attachSession runs under ProcessAdapter's default timeout

Artifacts:
- analysis.md
- issue.md

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B8ZD5foFWAE2zV1xYojPMa
An attached session is killed after 5 minutes, because attachSession runs under ProcessAdapter's default timeout

Artifacts:
- tasks.md
- review-state.json (tasks_ready)

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B8ZD5foFWAE2zV1xYojPMa
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B8ZD5foFWAE2zV1xYojPMa
ci-gate has no way to take an expected head, so kanon awaitCi cannot stop a stale-head judgement

Artifacts:
- analysis.md
- issue.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B8ZD5foFWAE2zV1xYojPMa
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B8ZD5foFWAE2zV1xYojPMa
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B8ZD5foFWAE2zV1xYojPMa
ci-gate has no way to take an expected head, so kanon awaitCi cannot stop a stale-head judgement

Artifacts:
- tasks.md
- review-state.json (tasks_ready)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B8ZD5foFWAE2zV1xYojPMa
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B8ZD5foFWAE2zV1xYojPMa
Subcommand dispatch boilerplate is repeated across seven commands

Artifacts:
- analysis.md
- issue.md

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B8ZD5foFWAE2zV1xYojPMa
Subcommand dispatch boilerplate is repeated across seven commands

Artifacts:
- tasks.md
- review-state.json (tasks_ready)

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B8ZD5foFWAE2zV1xYojPMa
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B8ZD5foFWAE2zV1xYojPMa
Add IssueId.numericPart instead of repeated split("-").last

Artifacts:
- analysis.md
- issue.md

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B8ZD5foFWAE2zV1xYojPMa
Add IssueId.numericPart instead of repeated split("-").last

Artifacts:
- tasks.md
- review-state.json (tasks_ready)

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B8ZD5foFWAE2zV1xYojPMa
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B8ZD5foFWAE2zV1xYojPMa
Issue: IW-672
Phase: 1 - IssueId.numericPart + adapter contracts

This commit marks the checkpoint for phase 1 context generation.
Use wf-implement IW-672 to return to this point.

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
IssueId.numericPart + adapter contracts

Artifacts:
- phase-01-tasks.md

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
review-state card location: route on the key kind, report pointer read errors, keep the routing pure

Artifacts:
- analysis.md
- issue.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VuB38s4FzXfyuePZHx32w7
review-state card location: route on the key kind, report pointer read errors, keep the routing pure

Artifacts:
- tasks.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VuB38s4FzXfyuePZHx32w7
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VuB38s4FzXfyuePZHx32w7
Small fixes: docs/plans

Artifacts:
- analysis.md
- issue.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VuB38s4FzXfyuePZHx32w7
Small fixes: docs/plans

Artifacts:
- tasks.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VuB38s4FzXfyuePZHx32w7
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VuB38s4FzXfyuePZHx32w7
LinearClient.escapeForJson escapes a value only once, so a quote breaks the GraphQL string

Artifacts:
- analysis.md
- issue.md

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VuB38s4FzXfyuePZHx32w7
LinearClient.escapeForJson escapes a value only once, so a quote breaks the GraphQL string

Artifacts:
- tasks.md

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VuB38s4FzXfyuePZHx32w7
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VuB38s4FzXfyuePZHx32w7
docs(IW-672): review packet, release notes; file follow-ups
All checks were successful
CI / changes (pull_request) Successful in 5s
CI / contract (pull_request) Has been skipped
CI / format (pull_request) Successful in 11s
CI / lint (pull_request) Successful in 13s
CI / compile (pull_request) Successful in 1m43s
CI / dashboard-build (pull_request) Successful in 1m27s
CI / test (pull_request) Successful in 18m18s
cf061a97d8
Follow-ups filed: #733 (dashboard issue-number parser), #734 (Small fixes: core),
comment on #586 (phase-pr push output in card message).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Issue: IW-679
Phase: 1 - Shared subcommand runner + migrate six commands

This commit marks the checkpoint for phase 1 context generation.
Use wf-implement IW-679 to return to this point.

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Shared subcommand runner + migrate six commands

Artifacts:
- phase-01-tasks.md

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(IW-679): review packet and release notes
All checks were successful
CI / format (pull_request) Successful in 10s
CI / compile (pull_request) Successful in 1m40s
CI / dashboard-build (pull_request) Successful in 1m29s
CI / test (pull_request) Successful in 18m24s
CI / changes (pull_request) Successful in 5s
CI / contract (pull_request) Has been skipped
CI / lint (pull_request) Successful in 11s
430c0695aa
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(IW-672): rework for final PR review 18
Some checks failed
CI / changes (pull_request) Successful in 7s
CI / contract (pull_request) Has been skipped
CI / compile (pull_request) Successful in 1m39s
CI / format (pull_request) Successful in 10s
CI / lint (pull_request) Successful in 12s
CI / dashboard-build (pull_request) Has been cancelled
CI / test (pull_request) Has been cancelled
ca5c147318
Issue: IW-672
Phase: 2 - Rework for final PR review 18

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
workflow(wf): Generate Phase 2 tasks for IW-672
All checks were successful
CI / changes (pull_request) Successful in 4s
CI / contract (pull_request) Has been skipped
CI / compile (pull_request) Successful in 1m35s
CI / format (pull_request) Successful in 10s
CI / lint (pull_request) Successful in 13s
CI / dashboard-build (pull_request) Successful in 1m22s
CI / test (pull_request) Successful in 18m16s
11a48676c3
Rework for final PR review 18

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Phase 2: Rework for final PR review 18 (#748)
Some checks failed
CI / changes (pull_request) Successful in 5s
CI / contract (pull_request) Has been skipped
CI / format (pull_request) Successful in 10s
CI / lint (pull_request) Successful in 13s
CI / compile (pull_request) Successful in 1m43s
CI / dashboard-build (pull_request) Successful in 1m27s
CI / test (pull_request) Has been cancelled
32334fcd5b
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Restores the ancestry that the squash merge of the phase 2 sync (#748)
dropped. The tree is identical to the parent: the sync resolution is
kept as reviewed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(IW-672): review packet for the whole branch
All checks were successful
CI / changes (pull_request) Successful in 5s
CI / contract (pull_request) Has been skipped
CI / format (pull_request) Successful in 10s
CI / lint (pull_request) Successful in 13s
CI / compile (pull_request) Successful in 1m34s
CI / dashboard-build (pull_request) Successful in 1m25s
CI / test (pull_request) Successful in 18m25s
3d0ead03ba
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(IW-679): rework for final PR review 17
Some checks failed
CI / changes (pull_request) Successful in 5s
CI / contract (pull_request) Has been skipped
CI / format (pull_request) Successful in 10s
CI / lint (pull_request) Successful in 11s
CI / compile (pull_request) Successful in 1m36s
CI / dashboard-build (pull_request) Has been cancelled
CI / test (pull_request) Has been cancelled
ccbffb2773
Issue: IW-679
Phase: 2 - Rework for final PR review 17

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
workflow(wf): Generate Phase 2 tasks for IW-679
Some checks failed
CI / changes (pull_request) Successful in 5s
CI / contract (pull_request) Has been skipped
CI / lint (pull_request) Successful in 14s
CI / format (pull_request) Successful in 10s
CI / compile (pull_request) Successful in 1m42s
CI / dashboard-build (pull_request) Failing after 8s
CI / test (pull_request) Failing after 8s
981c2cb65e
Rework for final PR review 17

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Phase 2: Rework for final PR review 17 (#751)
Some checks failed
CI / changes (pull_request) Successful in 5s
CI / contract (pull_request) Has been skipped
CI / format (pull_request) Successful in 11s
CI / lint (pull_request) Successful in 12s
CI / compile (pull_request) Successful in 1m35s
CI / dashboard-build (pull_request) Successful in 1m26s
CI / test (pull_request) Has been cancelled
7d862467d4
Phase 2 PR #751 was squash-merged, which dropped the parent link of
merge 4421a10b to origin/main d9e76182. The tree already held that
merge's resolution, so this merge keeps the branch side of
core/commands/Issue.scala and leaves the tree unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(IW-679): record ancestry repair in log and review packet
All checks were successful
CI / changes (pull_request) Successful in 5s
CI / contract (pull_request) Has been skipped
CI / format (pull_request) Successful in 11s
CI / lint (pull_request) Successful in 12s
CI / compile (pull_request) Successful in 1m38s
CI / dashboard-build (pull_request) Successful in 1m27s
CI / test (pull_request) Successful in 18m17s
1b5e5f48c7
Issue: IW-682
Phase: 1 - Slot model + slot store

This commit marks the checkpoint for phase 1 context generation.
Use wf-implement IW-682 to return to this point.

The analysis now names GitDirReader (IW-702) and AtomicFile as the shared
helpers, the --separate-git-dir main checkout rule, and the corrected reason
for an idempotent claim.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Slot model + slot store

Artifacts:
- phase-01-tasks.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Issue: IW-682
Phase: 2 - `iw port-slot` + docs

This commit marks the checkpoint for phase 2 context generation.
Use wf-implement IW-682 to return to this point.

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`iw port-slot` + docs

Artifacts:
- phase-02-tasks.md

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(IW-682): review packet and release notes
All checks were successful
CI / changes (pull_request) Successful in 5s
CI / contract (pull_request) Has been skipped
CI / format (pull_request) Successful in 10s
CI / lint (pull_request) Successful in 12s
CI / compile (pull_request) Successful in 1m37s
CI / dashboard-build (pull_request) Successful in 1m27s
CI / test (pull_request) Successful in 19m1s
6eb87a459c
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Issue: IW-687
Phase: 1 - Terminal attach is bounded by ProcessAdapter.DefaultTimeoutMs

This commit marks the checkpoint for phase 1 context generation.
Use dx-fix IW-687 to return to this point.

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Terminal attach is bounded by ProcessAdapter.DefaultTimeoutMs

Artifacts:
- phase-01-tasks.md

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(IW-687): add release notes
All checks were successful
CI / changes (pull_request) Successful in 5s
CI / contract (pull_request) Has been skipped
CI / format (pull_request) Successful in 11s
CI / lint (pull_request) Successful in 12s
CI / compile (pull_request) Successful in 1m37s
CI / dashboard-build (pull_request) Successful in 1m26s
CI / test (pull_request) Successful in 18m23s
c45142e035
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Issue: IW-690
Phase: 1 - ci-gate --expected-head

This commit marks the checkpoint for phase 1 context generation.
Use wf-implement IW-690 to return to this point.

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ci-gate --expected-head

Artifacts:
- phase-01-tasks.md

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(IW-690): review packet and release notes
All checks were successful
CI / changes (pull_request) Successful in 5s
CI / contract (pull_request) Has been skipped
CI / format (pull_request) Successful in 11s
CI / lint (pull_request) Successful in 13s
CI / compile (pull_request) Successful in 1m35s
CI / dashboard-build (pull_request) Successful in 1m26s
CI / test (pull_request) Successful in 18m33s
7a7fd8e12e
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Issue: IW-701
Phase: 1 - User values enter Linear GraphQL text with fewer escaping layers than the embedding needs

This commit marks the checkpoint for phase 1 context generation.
Use dx-fix IW-701 to return to this point.

The comment builders from IW-610 share the root cause and are in
scope; analysis.md now says so.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
User values enter Linear GraphQL text with fewer escaping layers than the embedding needs

Artifacts:
- phase-01-tasks.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
chore(IW-701): file follow-ups on #643
All checks were successful
CI / changes (pull_request) Successful in 5s
CI / contract (pull_request) Has been skipped
CI / format (pull_request) Successful in 11s
CI / lint (pull_request) Successful in 11s
CI / compile (pull_request) Successful in 1m33s
CI / dashboard-build (pull_request) Successful in 1m26s
CI / test (pull_request) Successful in 18m20s
08804ff8eb
Both LinearClient.scala items went onto the open issue #643 as one comment.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviewed-on: #765
Reviewed-on: #763
Reviewed-on: #760
Reviewed-on: #757
Reviewed-on: #746
Reviewed-on: #735
Issue: IW-708
Phase: 1 - Supersede the state-only merge design in the CI gate plan

This commit marks the checkpoint for phase 1 context generation.
Use wf-implement IW-708 to return to this point.

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Supersede the state-only merge design in the CI gate plan

Artifacts:
- phase-01-tasks.md

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(IW-708): add final review packet and release notes
All checks were successful
CI / changes (pull_request) Successful in 5s
CI / compile (pull_request) Has been skipped
CI / format (pull_request) Has been skipped
CI / lint (pull_request) Has been skipped
CI / contract (pull_request) Has been skipped
CI / test (pull_request) Has been skipped
CI / dashboard-build (pull_request) Has been skipped
96b6b84929
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Issue: IW-712
Phase: 1 - Card location: one pure rule + path command object

This commit marks the checkpoint for phase 1 context generation.
Use wf-implement IW-712 to return to this point.

Context review decisions applied to analysis.md: forKey replaces
resolveFrom (ci-gate handles --input itself); WorktreeKey.md documents
fromFlagOrBranch instead of a separate WorktreeKeyResolver.md page;
the issue + --slice case now reports a state-root failure first.

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Card location: one pure rule + path command object

Artifacts:
- phase-01-tasks.md

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Dashboard rule copy -> #773; four small core fixes -> collector #762.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(IW-712): review packet for the final PR
All checks were successful
CI / changes (pull_request) Successful in 5s
CI / contract (pull_request) Has been skipped
CI / format (pull_request) Successful in 11s
CI / lint (pull_request) Successful in 14s
CI / compile (pull_request) Successful in 1m36s
CI / dashboard-build (pull_request) Successful in 1m24s
CI / test (pull_request) Successful in 19m13s
d1baa8e81b
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
chore: Bump version to 0.21.0
All checks were successful
CI / changes (pull_request) Successful in 5s
CI / contract (pull_request) Has been skipped
CI / format (pull_request) Successful in 11s
CI / lint (pull_request) Successful in 12s
CI / compile (pull_request) Successful in 1m43s
CI / test (pull_request) Successful in 20m52s
CI / dashboard-build (pull_request) Successful in 1m41s
d43636fb99
Merge pull request 'chore: Bump version to 0.21.0' (#775) from chore/bump-version-0.21.0 into main
All checks were successful
Release / release (push) Successful in 20m48s
6514fcc064
Reviewed-on: ⁨#775⁩
Reviewed-on: #771
Reviewed-on: #774
Resolutions of the two add/add conflicts:

- core/adapters/AtomicFile.scala: keep main's Left mapping
  Option(e.getMessage).getOrElse(e.toString); one PURPOSE pair true for
  card writers, service declarations and port slot stores.
- core/test/AtomicFileTest.scala: the 7 tests of this branch in main's
  Fixtures / tempDir.test style; the private inTempDir helper is removed;
  main's replace test is covered by the replace-and-no-temp-file test.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Rework for final PR review 23: merge origin/main
All checks were successful
CI / changes (pull_request) Successful in 5s
CI / contract (pull_request) Has been skipped
CI / compile (pull_request) Successful in 1m39s
CI / format (pull_request) Successful in 10s
CI / lint (pull_request) Successful in 14s
CI / dashboard-build (pull_request) Successful in 1m28s
CI / test (pull_request) Successful in 19m42s
51ff99aff1
- Merge origin/main to remove the conflicts that blocked final PR 768
- AtomicFile keeps the null-safe failure text from main
- AtomicFileTest holds the union of both sides' tests in the shared tempDir fixture style
claude merged commit 185bec7ca6 into IW-707 2026-10-10 19:43:23 +00:00
claude deleted branch IW-707-phase-02 2026-10-10 19:43:24 +00:00
Sign in to join this conversation.
No description provided.