Commit Graph

130 Commits

Author SHA1 Message Date
Henry b1d1281f44 feat(office): sync agents, projects, skills, and routines from GitHub or GitLab (#3304)
Co-authored-by: nova28 <17953305+nova28@users.noreply.github.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-09-03 19:47:53 +00:00
Henry 0c7b16a412 fix(backend): stop a subtask's PR from binding to unrelated tasks and archiving them (#3248)
Co-authored-by: nova28 <17953305+nova28@users.noreply.github.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-09-01 15:19:59 +00:00
Henry 8b6ec7f639 fix(backend): stop a PR from rendering twice on a task's detail page (#3208)
Co-authored-by: nova28 <17953305+nova28@users.noreply.github.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-08-31 20:58:27 +00:00
Carlos Florêncio 0a0fb2d134 fix: support stacked PR base retargeting for review-watch worktrees (#3199) 2026-08-31 17:59:31 +00:00
Carlos Florêncio 6074f39a32 feat: add pull request link copy actions (#3179) (#3182) 2026-08-31 11:25:58 +00:00
Carlos Florêncio ace26dfd99 fix(github): harden auto-merge and surface task automation (#3128) 2026-08-28 22:23:45 +00:00
Alassane b2ac3add00 fix(backend): scrub ambient GH_TOKEN in internal/github tests (#2792)
Co-authored-by: ayattara <alassane.yattara@savoirfairelinux.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-08-27 13:09:21 +00:00
Carlos Florêncio a6896bca9a feat: hydrate persisted PR details on task disclosure (#3055) 2026-08-26 15:54:59 +00:00
Carlos Florêncio 4dbc7afc53 feat(github): recover pull requests removed from merge queues (#3042) 2026-08-26 10:06:41 +00:00
Carlos Florêncio 690a1ec3fe feat(github): surface pull request merge queue status (#2928) 2026-08-22 19:51:59 +00:00
Carlos Florêncio 032ea05bc8 fix(github): restore PR sync context (#2916) 2026-08-22 11:42:53 +01:00
nova28 9178780ba2 feat(github): add PR outcome attribution (merge, close, draft, changed files) (#2614)
Co-authored-by: nova28 <17953305+nova28@users.noreply.github.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-08-21 22:35:41 +01:00
Carlos Florêncio cf391bab8b feat(git): use repository-qualified PR comparison targets (#2828) 2026-08-21 22:04:44 +01:00
WaleWangPW e711e8d993 fix(credentials): reissue managed git leases (#2850)
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-08-20 19:34:22 +01:00
Carlos Florêncio 704f652f30 feat(sidebar): add last activity task sorting (#2762) 2026-08-18 10:15:42 +01:00
João Salavisa ad21460007 feat(github): add merge queue actions (#2755)
Co-authored-by: Kandev Agent <agent@kandev.dev>
2026-08-17 23:28:59 +00:00
João Salavisa f2014b2a90 fix(github): stop re-asking the batched PR watch query once per watch (#2742)
Co-authored-by: Kandev Agent <agent@kandev.dev>
2026-08-17 10:14:58 +00:00
Carlos Florêncio 15788438b4 feat: route managed Improve Kandev contributions to bound forks (#2569) 2026-08-15 23:51:39 +01:00
Alassane 49177d742f fix(gitlab): delete task-owned MR/PR associations on hard task delete (#2655)
Co-authored-by: ayattara <alassane.yattara@savoirfairelinux.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-08-15 17:21:14 +01:00
João Salavisa c553b991eb fix(github): stop counting unconfigured workspaces as broken connections (#2666)
Co-authored-by: Kandev Agent <agent@kandev.dev>
2026-08-14 18:03:35 +01:00
Carlos Florêncio 1a12c0bae0 fix: restore GitHub rate limit indicator (#2664) 2026-08-14 17:04:04 +01:00
Carlos Florêncio 6bb02a6f34 fix: verify provider history ordering and retry (#2626) 2026-08-13 15:20:35 +01:00
Carlos Florêncio 29b3e397bd fix: align setup and launch timeouts (#2578) 2026-08-13 11:26:02 +01:00
José Almeida f218880ecb feat(plugins): add source-control extension contracts (#2117) 2026-08-13 08:29:29 +01:00
Alassane 7855a4e087 fix(github): scope PR CI automation switches per linked PR (#2512)
Co-authored-by: ayattara <alassane.yattara@savoirfairelinux.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-08-12 18:36:11 +01:00
Carlos Florêncio 2debf43952 fix(backend): quiet expected shutdown/startup log noise (#2567) 2026-08-12 17:10:22 +01:00
Nazar f82d841955 fix(github): repair GitHub App registration and installation auth (#2511)
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-08-12 11:13:05 +01:00
José Almeida 146419fc8c fix(search): include workspace root with submodules (#2524) 2026-08-12 10:53:07 +01:00
Luan Martins adc7614649 feat(ui): add PR event automation pills (#2522) 2026-08-12 08:16:00 +01:00
Carlos Florêncio c4b4791de6 fix(git): contain rewritten contribution histories (#2509) 2026-08-12 08:12:53 +01:00
João Salavisa 26a9d64846 fix(github): keep a PR watch per branch so multi-branch automation works (#2504)
Co-authored-by: Kandev Agent <agent@kandev.dev>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 22:27:54 +01:00
João Salavisa f6fc6b3c72 fix(github): copy the watch handed to the initial-check goroutine (#2492) 2026-08-10 18:04:52 +02:00
João Salavisa 46021e7d23 fix(github): persist PR state from the feedback fetch so surfaces agree (#2449)
PR state was written by two flows and the second one could not persist: the feedback fetch returned live PR data without saving it, and the browser patched its own store copy instead. Opening a PR's detail panel turned that tab purple while the kanban card and boot payload still read state=open, and a reload snapped it back.

The backend is now the only writer — the feedback read reconciles through SyncTaskPR and publishes github.task_pr.updated, so every surface converges and the state survives a reload. SyncTaskPR also refuses to move a row out of merged, since GitHub cannot un-merge a PR.
2026-08-09 00:32:43 +02:00
João Salavisa f344fc3774 fix(github): sync PR rows no watch points at so merged PRs stop reading as open (#2429)
Co-authored-by: Kandev Agent <agent@kandev.dev>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-08 21:03:02 +01:00
Alassane 5f99e0fd9d fix(backend): allowlist GitHub credential broker and app webhook (#2310)
Co-authored-by: ayattara <alassane.yattara@savoirfairelinux.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-08-07 18:21:28 +01:00
Clément Fiere 1db7379ed8 feat: isolate improve-kandev tasks in a dedicated workspace (#2347) 2026-08-07 18:18:45 +01:00
Carlos Florêncio 4f7298a5d1 fix: support gh account status on stderr (#2348) (#2379) 2026-08-07 18:13:31 +01:00
Carlos Florêncio acfbf58646 fix: harden remote contribution launch safety (#2294) 2026-08-06 12:07:13 +01:00
Carlos Florêncio 3a1ca57c0a fix: route PR-only commits to GitHub details (#2268) 2026-08-05 20:45:59 +01:00
Carlos Florêncio 84fe8132a1 feat: support remote contribution tasks (#2265) 2026-08-05 19:25:58 +01:00
José Almeida 257fffdcc1 fix: count all unresolved review threads (#2240) 2026-08-04 08:46:38 +01:00
Carlos Florêncio a6326fdc5d feat: unlink task pull requests (#2114) 2026-08-02 17:00:32 +01:00
Carlos Florêncio 190eeddbc4 fix: default new workspaces to host GitHub access (#2156) 2026-08-02 14:13:04 +01:00
Clément Fiere 3e794ba903 fix(github): stop SELECT * scans from breaking on TaskPR schema drift (#1988) 2026-07-29 18:52:00 +01:00
Luan Martins 04a5c4e4ee feat(github): add task PR lifecycle notifications (#2038) 2026-07-29 18:13:02 +01:00
Carlos Florêncio 1f19dbe6d5 fix: keep watcher save state visible (#2037) 2026-07-29 14:05:38 +01:00
Carlos Florêncio b39a668e99 feat(github): add task git credential policy (#1985) 2026-07-27 18:10:12 +01:00
João Salavisa 37b56ba11c feat(automations): reliable cron scheduling and webhook-driven push/CI triggers (#1972)
* feat(automations): reliable cron scheduling and webhook-driven push/CI triggers

Automations were "wounded": cron schedules mishandled timezones and some
never fired, and the GitHub push/CI trigger types were coming-soon stubs.

Cron (fix):
- The scheduler reduced every cron expression to a fixed interval derived
  only from a */N step in the minute/hour field, so any pinned schedule
  (0 9 * * *, 30 14 * * *, weekday ranges, day-of-month) never fired, and
  the configured timezone was parsed but never used.
- Replace the interval approximation with robfig/cron/v3: shouldFire now
  computes the true next fire time in the configured timezone (DST-aware,
  defaulting to UTC for host-independence), anchored to last-evaluated or
  creation time. Dead interval-parsing helpers and shorthand constants
  removed.

GitHub push + CI triggers (feat):
- Implement push and CI-failure triggers end to end via the existing
  per-workspace GitHub App webhook plumbing (#1810): the HMAC-verified
  webhook service now parses push and completed check_run events, resolves
  the installation to its workspaces, and publishes normalized bus events.
- A new automation subscriber matches enabled github_push / github_ci
  triggers by workspace + repo + branch/conclusion/check-name filters and
  fires them (deduped by commit SHA / check-run id). The old poll-based
  stub evaluators are removed; the PR poll path is unchanged.
- Subscribe the App manifest to push/check_run and enable both trigger
  types in the registry (CI defaults to the failure conclusion).

Docs:
- Update docs/public/feature-status.md and automation-and-mcp.md so the
  cron and push/CI rows reflect shipped reality.

Tests: regression tests pin the previously-never-firing cron shapes,
timezone/DST behavior, and host-independence; backend tests cover the
webhook parse->publish and subscriber match/fire/dedup flows for both
push and CI-failure.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(automations): populate push.message and ci.url placeholders in fired trigger data

Address PR review blockers: the default push and CI automation prompts
reference {{push.message}} and {{ci.url}}, which the interpolator maps to
data["message"] / data["html_url"] — but the webhook subscriber never
populated those fields, so both always rendered empty.

- Parse head_commit.message (push) and check_run.html_url (CI) in the
  GitHub webhook service and carry them on the published bus payloads.
- Include "message" / "html_url" in the fired trigger data so the
  placeholders resolve; extend the webhook and subscriber tests to assert
  both flow through end to end.

Non-blocking review cleanups:
- Replace the misleading reuse of matchesAuthors for CI conclusions/check
  names with a clearly-named matchesFilterValue helper.
- Drop dead context.Background() line and its unused import from the cron
  regression test.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(automations): scope webhook triggers to active installs and per-branch dedup

Address CodeRabbit review on the push/CI webhook triggers:

- Security: resolveWorkspaceIDs now only returns connections whose status is
  active, so a suspended or revoked GitHub App installation can no longer fire
  push/CI automations.
- Correctness: include the branch in the push dedup key
  (push:owner/name@branch@sha) so the same commit pushed to two matching
  branches fires once per branch instead of being suppressed.
- Correctness: add an optional head-branch filter to github_ci triggers and
  gate CI matching on it, matching the push trigger's branch-scoping.
- Stability: make the webhook subscriber's Start retryable — a subscription
  failure rolls back partial subscriptions and leaves the subscriber
  un-started so a later Start re-attempts, instead of permanently disabling
  push/CI processing.
- Tests: cover multi-connection workspace resolution (dedup + inactive
  filtering), per-branch push dedup, and CI branch filtering.
- Docs: note the CI branch filter and per-branch push dedup.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* test(automations): cover webhook subscriber Start retry-after-failure path

Add TestGitHubWebhookSubscriberStartRetryableAfterFailure with a minimal
flaky bus whose second Subscribe fails, pinning the retry contract: a
subscription failure rolls back the partial subscription and leaves the
subscriber un-started, and a later Start re-attempts and succeeds.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Kandev Agent <agent@kandev.dev>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-27 10:24:57 +01:00
Carlos Florêncio 49e00447a5 fix: restore legacy GitHub launch compatibility (#1962) 2026-07-26 19:07:46 +01:00
Carlos Florêncio 75abf779ed feat(github): support per-workspace GitHub App registrations (#1810) 2026-07-26 10:39:08 +01:00