Milestones and review in the new loop (M2.1, PR C)
CI / checks (push) Skipped
CI / checks (pull_request) Successful in 1m48s
CI / checks (push) Skipped
CI / checks (pull_request) Successful in 1m48s
A work item starts from a fresh workspace: fetch, set aside (never discard) leftover changes, branches and unpushed commits, a clean default branch, and a branch of its own (D3, #62). start_milestone cuts the milestone's branch; finish_milestone commits only the work, pushes and opens a PR that closes the issue, under an intent, adopting an open PR and treating a closed one as the operator's answer (D4). Between runs the loop watches each item's PR: operator comments and inline review notes (#69) reach the item, a merge or close hands back to the driver. A review fix is checked after it's pushed and goes out as a new PR if the PR merged first (D5). At boot an interrupted publish is settled against Gitea (L8). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE
This commit is contained in:
1 parent
f84bb70839
commit
21744efac1
9 files changed
+1004
-10
No files matched your search
@@ -18,6 +18,7 @@ CLOSED = "closed"
|
||||
# What a waiting item waits for.
|
||||
GO_AHEAD = "go-ahead" # a go on the restatement up (L3, D1)
|
||||
ANSWER = "answer" # an answer to a question
|
||||
MERGE = "merge" # the PR's review and merge (D4, D5)
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
@@ -28,13 +29,23 @@ class Loop:
|
||||
rev: int = 0 # the latest proposal put up (L3)
|
||||
started: bool = False # scope agreed: a go-ahead was given (D1)
|
||||
note: str = "" # what a waiting item said it is waiting on
|
||||
prepared: bool = False # its fresh workspace was made (D3)
|
||||
milestone: int = 0 # the current milestone (D4)
|
||||
branch: str = "" # the current milestone's branch, while one is open
|
||||
pr: int = 0 # the current milestone's PR, once published
|
||||
pr_url: str = ""
|
||||
comments: int = 0 # the last PR conversation comment taken (L8)
|
||||
notes: tuple[str, ...] = () # review notes taken (#69)
|
||||
fixes: int = 0 # review fixes pushed, for follow-up branch names
|
||||
|
||||
def to_data(self) -> dict[str, Any]:
|
||||
return asdict(self)
|
||||
|
||||
|
||||
def loop_of(item: WorkItem) -> Loop:
|
||||
return Loop(**item.data.get("loop", {}))
|
||||
data = dict(item.data.get("loop", {}))
|
||||
data["notes"] = tuple(data.get("notes", ()))
|
||||
return Loop(**data)
|
||||
|
||||
|
||||
def save(
|
||||
|
||||
Reference in new issue
Block a user