What 5 AI tools did over the last 13 days, who holds which files right now, and what is blocked. Snapshot taken Oct 21, 2026 07:12 UTC by aisync board.
aisync demo: every tool session, repo, commit and person on this page is made up. Run aisync demo to build the same hub on your machine, then aisync board to render this page from it.| Tool | Doing | Expires |
|---|---|---|
| windsurf | design tokens for dark mode | until 08:46 |
| cursor | show refund credit on checkout summary overlaps claude-code | until 09:01 |
| claude-code | wire /quote credit lines into Summary overlaps cursor | until 09:11 |
Overlapping claims are what aisync claim refuses with exit code 3: the second tool is told who holds the files before it edits them.
| Blocked | Waiting for | Since |
|---|---|---|
| gemini-cli | prod plan needs a read-only role on the billing account; waiting for access | Oct 21 04:01 |
| Rule copy | Conflict | Fix |
|---|---|---|
| codex | rules changed in preferences.md and in this copy | aisync resolve codex --take truth|target |
| Tool | Blocked on | Outcome |
|---|---|---|
| gemini-cli | prod plan needs a read-only role on the billing account; waiting for access | still open |
| codex | integration tests need a payment-sandbox key in CI; the secret is missing from the staging environment | unblocked by gemini-cli after 3 h 37 min: sandbox key now comes from the secrets manager through the new OIDC role; CI can read it |
aisync claim; exit code 3 means someone else holds those files.aisync log.Agent: <tool> trailer.| Time | Tool | Kind | What |
|---|---|---|---|
| 07:11 | cursor | rule | shared rule added: feature flags are removed within two weeks of full rolloutpreferences.md |
| 07:11 | claude-code | claim | claimed: wire /quote credit lines into Summarysrc/pages/checkout/Summary.tsx |
| 07:11 | cursor | claim | claimed: show refund credit on checkout summarysrc/pages/checkout/ |
| 07:11 | windsurf | claim | claimed: design tokens for dark modesrc/styles/tokens.css src/components/Button.tsx |
| 05:36 | codex | commit | test: refund webhook end-to-end in the sandboxtests/integration/test_refund_webhook.py |
| 04:41 | claude-code | log | refund webhooks now update order status within one retry cycleapp/webhooks/payments.py |
| 04:01 | gemini-cli | blocked | prod plan needs a read-only role on the billing account; waiting for access |
| Time | Tool | Kind | What |
|---|---|---|---|
| 17:20 | gemini-cli | decision | prod changes go through a plan comment on the PR; no local appliesdocs/runbooks/terraform.md |
| 14:45 | windsurf | log | visual diff on 14 checkout screens after the font swap: 0 regressions |
| 11:10 | cursor | commit | feat(account): refund status on order pagesrc/pages/account/Order.tsx |
| 09:30 | codex | commit | chore(deps): payment provider SDK 4.2 -> 5.0app/payments/provider.py pyproject.toml uv.lock |
| Time | Tool | Kind | What |
|---|---|---|---|
| 16:56 | claude-code | release | released: refunds endpoint |
| 16:55 | claude-code | commit | feat(api): partial refundsapp/api/refunds.py app/payments/refunds.py tests/test_refunds.py +1 more |
| 10:25 | codex | note | SDK upgrade waits until claude-code lands refunds; app/payments/ is claimed |
| 10:24 | codex | release | released: payment provider SDK upgrade |
| 10:20 | codex | claim | claimed: payment provider SDK upgradeapp/payments/provider.py |
| 10:00 | claude-code | claim | claimed: refunds endpointapp/api/refunds.py app/payments/ |
| Time | Tool | Kind | What |
|---|---|---|---|
| 14:20 | gemini-cli | log | staging RDS resize applied in a 4 min window; no errors in checkout-api logs |
| 12:40 | git:alex | commit | raise staging RDS to db.t4g.mediumenvs/staging/rds.tf |
| 09:15 | codex | log | flaky test_retry_worker traced to a real clock; switched to a fake clocktests/test_retry_worker.py |
| Time | Tool | Kind | What |
|---|---|---|---|
| 15:45 | claude-code | commit | feat(api): list and delete saved cardsapp/api/cards.py tests/test_cards.py tests/contract/test_cards_schema.py |
| 11:30 | windsurf | rule | shared rule added: UI changes include a screenshot or a Playwright trace in the PRpreferences.md |
| 10:10 | cursor | commit | feat(account): saved cards listsrc/pages/account/Cards.tsx src/lib/api.ts |
| Time | Tool | Kind | What |
|---|---|---|---|
| 14:05 | gemini-cli | commit | fix(prod): import the 3 drifted security group rules into stateenvs/prod/sg.tf |
| 11:50 | codex | commit | test: replay duplicate webhooks in integration suitetests/integration/test_webhook_replay.py |
| 09:35 | claude-code | commit | fix(webhooks): dedupe on provider event idapp/webhooks/payments.py app/models/webhook_event.py migrations/0031_webhook_event.py |
| Time | Tool | Kind | What |
|---|---|---|---|
| 16:10 | claude-code | decision | webhook handler becomes idempotent on event id; duplicates were double-capturing on retriesapp/webhooks/payments.py |
| 13:25 | windsurf | commit | perf: preload the payment iframe on cart opensrc/components/CartDrawer.tsx src/lib/preload.ts |
| 10:00 | cursor | log | Lighthouse on /checkout: LCP 3.1 s -> 1.9 s after lazy-loading the mapsrc/pages/checkout/AddressForm.tsx |
| Time | Tool | Kind | What |
|---|---|---|---|
| 15:20 | codex | commit | test(e2e): checkout happy path with Playwrighte2e/checkout.spec.ts playwright.config.ts |
| 11:15 | gemini-cli | log | prod plan shows 3 drifted security group rules; left untouched, opened ticket |
| 09:40 | claude-code | commit | test: contract test for zero-amount quotestests/contract/test_quote_schema.py |
| 09:05 | git:alex | commit | hotfix: allow 0-amount quotes for gift cardsapp/api/quote.py |
| Time | Tool | Kind | What |
|---|---|---|---|
| 16:30 | codex | rule | shared rule added: every API change ships with a contract test in the same PRpreferences.md |
| 14:00 | cursor | commit | feat(checkout): totals from /quote, remove local tax mathsrc/lib/quote.ts src/pages/checkout/Summary.tsx src/lib/tax.ts |
| 10:45 | claude-code | commit | feat(api): /quote returns tax and discount linesapp/api/quote.py app/pricing/tax.py tests/test_quote.py |
| 09:20 | windsurf | decision | keep client-side price math only for display; totals always come from checkout-api /quotedocs/decisions/pricing.md |
| Time | Tool | Kind | What |
|---|---|---|---|
| 14:30 | codex | commit | ci: run integration tests against the payment sandbox.github/workflows/ci.yml |
| 13:52 | gemini-cli | unblocked | sandbox key now comes from the secrets manager through the new OIDC role; CI can read itenvs/staging/ci.tf |
| 13:40 | gemini-cli | commit | feat(ci): OIDC role for checkout-api to read sandbox secretsmodules/ci-oidc/main.tf envs/staging/ci.tf |
| 11:00 | claude-code | log | worked around the missing sandbox key locally with the recorded fixtures; CI still blockedtests/fixtures/sandbox/ |
| 10:15 | codex | blocked | integration tests need a payment-sandbox key in CI; the secret is missing from the staging environment.github/workflows/ci.yml |
| Time | Tool | Kind | What |
|---|---|---|---|
| 15:06 | cursor | release | released: promo code field on checkout |
| 15:05 | cursor | commit | feat(checkout): promo code componentsrc/components/PromoCode.tsx src/components/PromoCode.test.tsx |
| 12:36 | windsurf | release | released: checkout page a11y pass |
| 12:35 | windsurf | commit | fix(a11y): labels and error announcements on checkout formsrc/pages/checkout/AddressForm.tsx src/pages/checkout/CardForm.tsx |
| 09:10 | cursor | note | windsurf holds src/pages/checkout/; moved the promo field work to src/components/PromoCode.tsx insteadsrc/components/PromoCode.tsx |
| 09:03 | cursor | claim | claimed: promo code field on checkoutsrc/pages/checkout/PromoCode.tsx |
| 09:00 | windsurf | claim | claimed: checkout page a11y passsrc/pages/checkout/ |
| Time | Tool | Kind | What |
|---|---|---|---|
| 16:22 | gemini-cli | commit | chore(staging): enable RDS performance insightsenvs/staging/rds.tf |
| 14:10 | git:alex | commit | bump next to 14.2.5package.json package-lock.json |
| 11:48 | cursor | commit | fix(cart): drawer focus trap on Safarisrc/components/CartDrawer.tsx |
| 10:05 | claude-code | rule | shared rule added: never log full card numbers or tokens; mask to the last 4 digitspreferences.md |
| 09:30 | codex | commit | test: contract tests for the /pay response schematests/contract/test_pay_schema.py tests/contract/pay.schema.json |
| Time | Tool | Kind | What |
|---|---|---|---|
| 17:15 | windsurf | log | replaced the hand-rolled price formatter with Intl.NumberFormat; fixes JPY showing two decimalssrc/lib/money.ts src/lib/money.test.ts |
| 15:41 | claude-code | release | released: retry worker + idempotency keys |
| 15:40 | claude-code | commit | feat(payments): idempotency keys on POST /payapp/payments/idempotency.py app/api/pay.py tests/test_idempotency.py |
| 13:02 | claude-code | commit | feat(payments): retry worker with exponential backoffapp/workers/retry.py app/workers/__init__.py tests/test_retry_worker.py |
| 10:20 | claude-code | claim | claimed: retry worker + idempotency keysapp/workers/ app/payments/idempotency.py |
| 08:55 | gemini-cli | log | terraform plan for staging is clean after the VPC split; no drift |
| Time | Tool | Kind | What |
|---|---|---|---|
| 16:48 | codex | log | split the staging VPC module so checkout-api and storefront-web get separate subnetsmodules/vpc/main.tf envs/staging/main.tf |
| 14:32 | cursor | release | released: cart drawer redesign |
| 14:30 | cursor | commit | feat(cart): slide-over drawer with line-item editingsrc/components/CartDrawer.tsx src/components/CartDrawer.css src/hooks/useCart.ts |
| 11:05 | cursor | claim | claimed: cart drawer redesignsrc/components/CartDrawer.tsx src/components/CartDrawer.css |
| 09:40 | claude-code | commit | docs(adr): 0007 payment retries via queue workerdocs/adr/0007-payment-retries.md |
| 09:12 | claude-code | decision | move payment retries out of the request path into a queue worker; p99 on /pay was 2.8 sdocs/adr/0007-payment-retries.md |