Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .flow/tasks/fn-68.5.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"assignee": "bordumbb@gmail.com",
"claim_note": "",
"claimed_at": "2026-09-28T14:32:03.861768Z",
"created_at": "2026-09-28T14:32:03.585809Z",
"depends_on": [],
"epic": "fn-68",
"evidence": {
"commits": [],
"prs": [
"https://github.com/bordumb/dataing/pull/210",
"https://github.com/bordumb/dataing/pull/220",
"https://github.com/bordumb/dataing/pull/221",
"https://github.com/bordumb/dataing/pull/227"
],
"tests": [
"merge simulations in a scratch worktree before each batch",
"main Backend CI + Frontend CI green after each batch"
]
},
"id": "fn-68.5",
"priority": 5,
"spec_path": ".flow/tasks/fn-68.5.md",
"status": "done",
"title": "Clear the Dependabot backlog after the uv switch",
"updated_at": "2026-09-28T17:27:35.585979Z"
}
21 changes: 21 additions & 0 deletions .flow/tasks/fn-68.5.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# fn-68.5 Clear the Dependabot backlog after the uv switch

## Description
TBD

## Acceptance
- Green Dependabot PRs merged: #193, #132, #133, #134, #195, #196, #202, #204, #201, #194, then #200 after rebase
- Superseded pip PRs closed: #139, #141, #142, #143, #144
- Fix PR: dedupe extras (Dependabot mangled faker in #197), CI skips building jupyterlab-dataing, frontend CI on Node 22 (jsdom 30, #203), ignore sentence-transformers >=6 (#199)
- After the fix PR: #197 recreated, #203 rebased, #198 re-run, #125 recreated, then merged


## Done summary
- Merged (user ran the merges; auto mode denies gh pr merge here): #193 #132 #133 #134 #195 #196 #202 #204 #194 #210, then #125 #213 #214 #215 #216 #197 #217 #218 #221 #220, then #227.
- Closed as superseded or blocked, each with a reason: #139 #141 #142 #143 #144 (pip ecosystem), #199 (sentence-transformers 6, landed in #227), #200 #201 #203 (npm updater failed; landed in #221), #219 (landed in #220), #212 (landed in #227).
- Root-cause fixes: #210 (duplicate extras, jupyterlab-dataing build flake, Node 22), #220 (redis, sqlalchemy[asyncio], SQLAlchemy 2.1), #227 (pydantic-ai 2, boto3, Temporal sandbox, FastAPI nested routers).
- Left for the user: #75 and #128 (stale feature PRs, 100 and 35 conflicting files).
## Evidence
- Commits:
- Tests: merge simulations in a scratch worktree before each batch, main Backend CI + Frontend CI green after each batch
- PRs: https://github.com/bordumb/dataing/pull/210, https://github.com/bordumb/dataing/pull/220, https://github.com/bordumb/dataing/pull/221, https://github.com/bordumb/dataing/pull/227
29 changes: 29 additions & 0 deletions .flow/tasks/fn-68.6.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"assignee": "bordumbb@gmail.com",
"claim_note": "",
"claimed_at": "2026-09-28T16:50:54.170566Z",
"created_at": "2026-09-28T16:50:53.862796Z",
"depends_on": [],
"epic": "fn-68",
"evidence": {
"commits": [
"c091d817"
],
"prs": [
"https://github.com/bordumb/dataing/pull/227"
],
"tests": [
"uv run pytest python-packages/dataing/tests",
"uv run pytest python-packages/dataing-ee/tests",
"pytest -m integration (CE 130, EE 16) on pgvector:pg16",
"workflow_runner() validates 3/3 workflows in worker import order",
"offline build_chat_model -> anthropic 1.8 smoke run"
]
},
"id": "fn-68.6",
"priority": 6,
"spec_path": ".flow/tasks/fn-68.6.md",
"status": "done",
"title": "Migrate to pydantic-ai 2 (and anthropic 1.x)",
"updated_at": "2026-09-28T17:15:03.481195Z"
}
24 changes: 24 additions & 0 deletions .flow/tasks/fn-68.6.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# fn-68.6 Migrate to pydantic-ai 2 (and anthropic 1.x)

## Description
TBD

## Acceptance
- pydantic-ai 1.44 -> 2.x with the provider extras we use declared (pydantic-ai-slim[anthropic])
- mypy clean; CE and EE unit tests pass
- CE and EE integration tests pass on pgvector:pg16
- uv.lock written with the uv version CI uses
- dependabot.yml ignore for pydantic-ai removed; sentence-transformers >=6 ignore removed too if pydantic-ai 2 allows huggingface-hub 1.x


## Done summary
- pydantic-ai 1.44 -> 2.51 (anthropic 1.8, mcp 2.2, starlette 1.7, fastapi 0.141); depend on pydantic-ai-slim[anthropic]; declare boto3 (only transitively installed before).
- AgentRunResult.usage is a property now.
- Temporal sandbox: pydantic-ai 2 -> fastmcp -> py-key-value-aio installs beartype claw hooks; default sandbox validated 0/3 workflows in worker import order. dataing.temporal.sandbox.workflow_runner() passes beartype through; worker + tests use it.
- FastAPI 0.141 nests included routers: route policy fixtures + endpoint registration test walk iter_route_contexts().
- sentence-transformers 6.1 now resolves (hub 1.33); both dependabot ignores removed.
- Verified: mypy clean, CE 3159 / EE 714 unit, CE 130 / EE 16 integration, 3/3 workflows validate, offline anthropic 1.8 smoke run.
## Evidence
- Commits: c091d817
- Tests: uv run pytest python-packages/dataing/tests, uv run pytest python-packages/dataing-ee/tests, pytest -m integration (CE 130, EE 16) on pgvector:pg16, workflow_runner() validates 3/3 workflows in worker import order, offline build_chat_model -> anthropic 1.8 smoke run
- PRs: https://github.com/bordumb/dataing/pull/227
26 changes: 26 additions & 0 deletions .flow/tasks/fn-68.8.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"assignee": "bordumbb@gmail.com",
"claim_note": "",
"claimed_at": "2026-09-28T20:31:06.555957Z",
"created_at": "2026-09-28T20:31:06.221291Z",
"depends_on": [],
"epic": "fn-68",
"evidence": {
"commits": [
"920dc739"
],
"prs": [],
"tests": [
"just worktrees --branches (output identical to the scratch version; worktree index mtimes unchanged)",
".venv/bin/ruff check scripts/worktree_status.py",
".venv/bin/ruff format --check scripts/worktree_status.py",
".venv/bin/mypy scripts/worktree_status.py"
]
},
"id": "fn-68.8",
"priority": null,
"spec_path": ".flow/tasks/fn-68.8.md",
"status": "done",
"title": "Add just worktrees to list work not yet on main",
"updated_at": "2026-09-28T20:38:06.239060Z"
}
22 changes: 22 additions & 0 deletions .flow/tasks/fn-68.8.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# fn-68.8 Add just worktrees to list work not yet on main

## Description
With dozens of agent worktrees, nobody could tell what was still unmerged: PRs are squash-merged and the merge train rebases branches, so `git branch --merged` misses almost every merged branch. Add a script and just recipe that answer it per worktree as branch, yes/no.

## Acceptance
- `just worktrees` prints, for every git worktree, the branch and whether its work is on origin/main (yes/no), with a short reason for each "no"
- `just worktrees --branches` also covers local branches that no worktree has checked out
- Squash-merged and train-rebased branches count as merged: commits are matched against merged PR heads and main by sha, patch-id and title (title-only matches are flagged)
- Uncommitted edits count as merged only when main already has them (snapshot in a throwaway index, 3-way merge onto main with HEAD as the base); other sessions' worktree indexes and files stay untouched
- Standard library only (runs with python3, no venv); gh is optional


## Done summary
- scripts/worktree_status.py plus `just worktrees [--branches]`. It prints one line per worktree (and, with --branches, per local branch no worktree has checked out): the branch, merged yes/no, and for each "no" a reason (commits not landed, PR open/closed/none, uncommitted files, conflicts with main).
- Merged detection handles squash merges and train rebases. It indexes every merged PR head's commits (not on main) and main's commits by sha, stable patch-id and title (main's " (#N)" suffix is stripped), then matches the branch's own commits. It falls back to merge-tree onto main == main's tree. Title-only matches are flagged "by title: #N".
- Uncommitted edits are snapshotted in a throwaway GIT_INDEX_FILE (read-tree HEAD, add --all of the status paths, write-tree, commit-tree), then merged onto main with --merge-base=HEAD. The result equal to main, or the snapshot's patch-id in a merged PR, means main already has the edits. That catches gallant-boyd's edits in #150 and ignores old-base worktrees whose files simply differ from main.
- Verified on 36 worktrees and 100 branches: all 36 real index files had unchanged mtimes after a run. Title matches were spot-checked (all specific conventional-commit subjects). #206 vs #207 was checked by hand (superseded). ruff check and format are clean, mypy is clean, and `just worktrees --branches` matches the scratch run line for line.
## Evidence
- Commits: 920dc739
- Tests: just worktrees --branches (output identical to the scratch version; worktree index mtimes unchanged), .venv/bin/ruff check scripts/worktree_status.py, .venv/bin/ruff format --check scripts/worktree_status.py, .venv/bin/mypy scripts/worktree_status.py
- PRs:
4 changes: 4 additions & 0 deletions justfile
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,10 @@ clean:
rm -rf frontend/app/dist frontend/app/node_modules/.cache
rm -rf frontend/landing/dist frontend/landing/node_modules/.cache

# Show which worktrees still hold work not on main (--branches: other local branches too)
worktrees *args:
@python3 scripts/worktree_status.py {{args}}

# Start docker-compose stack
docker-up:
docker-compose -f infra/docker-compose.yml up -d
Expand Down
Loading
Loading