Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
f892579
docs(architecture): add comprehensive architecture documentation (#1069)
zbigniewsobiecki Apr 1, 2026
597ec16
feat(crypto): validate CREDENTIAL_MASTER_KEY format at startup (#1071)
aaight Apr 2, 2026
10fadd1
fix(security): invalidate user sessions on password change (#1070)
aaight Apr 2, 2026
fc828a3
fix(cors): throw hard error in production when CORS_ORIGIN is unset (…
aaight Apr 2, 2026
4bb4e59
fix(deps): align Zod version across monorepo to ^3.25.0 (bridge) (#1073)
aaight Apr 2, 2026
211f012
feat(prompts): add documentation maintenance instructions to agent pr…
aaight Apr 2, 2026
2b7559f
chore(deps): upgrade @biomejs/biome from 1.9.4 to 2.4.10 (#1075)
aaight Apr 2, 2026
4949ad4
chore(deps): batch minor dependency updates across root and web packa…
aaight Apr 2, 2026
47aaeb9
refactor(integrations): migrate integration checker to registry, dele…
aaight Apr 3, 2026
12dd917
fix(pm): consolidate PM registration to single canonical path in inte…
aaight Apr 3, 2026
4345775
chore(deps): upgrade @anthropic-ai/claude-agent-sdk from ^0.2.42 to ^…
aaight Apr 3, 2026
beb568f
refactor(cli): rename config_() getter to cliConfig in DashboardComma…
aaight Apr 3, 2026
81a636e
refactor(triggers): extract shared webhook utilities and add Sentry c…
aaight Apr 3, 2026
1420e20
refactor: replace hardcoded agentType === 'review' checks with profil…
aaight Apr 3, 2026
b9477fd
refactor(agents): migrate deprecated sync loader functions to non-dep…
aaight Apr 4, 2026
42b1fd0
refactor(agents): remove LegacyCapabilities shim and migrate callers …
aaight Apr 4, 2026
884f8ee
refactor(web): decompose project-agent-configs.tsx and integration-fo…
aaight Apr 4, 2026
d643527
fix(webhooks): relax webhook CRUD from superAdminProcedure to adminPr…
aaight Apr 4, 2026
bbe33cd
chore: remove Squint codebase intelligence support (#1091)
aaight Apr 8, 2026
aac9c2a
chore(deps): bump axios from 1.13.5 to 1.15.0 (#1093)
dependabot[bot] Apr 14, 2026
7ac1655
chore(deps): bump hono from 4.12.9 to 4.12.12 (#1090)
dependabot[bot] Apr 14, 2026
ce2a4bc
chore(deps): bump vite from 7.3.1 to 7.3.2 (#1087)
dependabot[bot] Apr 14, 2026
cfa7aa9
feat(linear): add Linear GraphQL API client (#1094)
aaight Apr 14, 2026
f14d2cc
chore(deps): bump @hono/node-server from 1.19.12 to 1.19.13 (#1089)
dependabot[bot] Apr 14, 2026
ab4ad2c
chore(deps): bump follow-redirects from 1.15.11 to 1.16.0 (#1095)
dependabot[bot] Apr 14, 2026
73c646c
feat(pm): add Linear PM provider adapter and integration (#1096)
aaight Apr 14, 2026
aa0c4f7
feat(linear): register Linear in bootstrap and add DB lookup function…
aaight Apr 14, 2026
8a4009b
chore(deps): bump vite to 6.4.2 and picomatch to 4.0.4 in /web (#1098)
zbigniewsobiecki Apr 14, 2026
04ab3c3
feat(linear): add Linear webhook ingestion in router (#1099)
aaight Apr 14, 2026
8d20981
feat(linear): add Linear worker dispatch and trigger handlers (#1100)
aaight Apr 14, 2026
ce958e5
test(linear): add unit tests for Linear trigger handlers (#1101)
aaight Apr 14, 2026
bcc16e8
docs(linear): update documentation and prompt context for Linear PM i…
aaight Apr 14, 2026
48eb254
fix(linear): wire up lookupProject to loadProjectConfigByLinearTeamId…
aaight Apr 14, 2026
e431f57
feat(linear): add getTeams, getTeamWorkflowStates, getTeamLabels disc…
aaight Apr 14, 2026
acfa097
feat(api): add Linear tRPC discovery endpoints (#1105)
aaight Apr 14, 2026
09ee1a7
feat(reactions): wire up Linear reaction for Comment.create webhook e…
aaight Apr 14, 2026
946fc5e
feat(wizard): add Linear as PM provider option in dashboard wizard (#…
aaight Apr 14, 2026
4fc794b
feat(webhooks): add Linear webhook info to webhooks dashboard and CLI…
aaight Apr 14, 2026
310a6f7
fix(dashboard): comprehensive dark mode fixes across all affected com…
aaight Apr 15, 2026
b89c1dc
fix(review): correct external-fork PR checkout, swap pre-fetch for co…
zbigniewsobiecki Apr 15, 2026
1848b56
fix(linear): remove Bearer prefix from API key auth + fix biome confi…
zbigniewsobiecki Apr 15, 2026
ac6773a
fix(linear): unblock wizard Save + UX polish for Linear PM setup (#1113)
zbigniewsobiecki Apr 15, 2026
710443e
feat(pm): status mapping parity across Linear and JIRA (#1114)
zbigniewsobiecki Apr 15, 2026
5a7d741
fix(config): disambiguate credential role resolution by provider (#1115)
zbigniewsobiecki Apr 15, 2026
c03611f
docs(005): add spec + plans + coverage map for Linear project scope
zbigniewsobiecki Apr 15, 2026
1dc1b61
feat(linear): optional project scope — backend (config, filter, disco…
zbigniewsobiecki Apr 15, 2026
bc7556f
feat(linear): optional project scope — wizard UI + operator docs
zbigniewsobiecki Apr 15, 2026
12c578b
Merge pull request #1116 from mongrel-intelligence/feat/005-linear-pr…
zbigniewsobiecki Apr 15, 2026
64ec2c4
fix(linear): store state IDs, not names, in status mappings
zbigniewsobiecki Apr 15, 2026
77c5617
Merge pull request #1117 from mongrel-intelligence/fix/linear-status-…
zbigniewsobiecki Apr 15, 2026
00fcca7
fix(linear): pass projectId to extractProjectIdFromJob for linear jobs
zbigniewsobiecki Apr 15, 2026
83ffe93
Merge pull request #1118 from mongrel-intelligence/fix/linear-worker-…
zbigniewsobiecki Apr 15, 2026
8140929
fix(linear): send personal API keys without Bearer prefix
zbigniewsobiecki Apr 15, 2026
078ac9c
test(linear): add text() to makeHttpErrorResponse factory
zbigniewsobiecki Apr 15, 2026
77a6f1b
Merge pull request #1119 from mongrel-intelligence/fix/linear-api-bea…
zbigniewsobiecki Apr 15, 2026
edb54d7
feat(linear): full label parity with Trello — dropdown + create-label UX
zbigniewsobiecki Apr 16, 2026
7a0ee03
Merge pull request #1121 from mongrel-intelligence/feat/linear-label-…
zbigniewsobiecki Apr 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 0 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,6 @@ npm-debug.log*
tmp-*.ts
tmp-*.sh

# Generated databases
.squint.db

# Local agent workspace (repos, logs)
workspace/

Expand Down
24 changes: 24 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Changelog

All notable user-visible changes to CASCADE are documented here. The format is loosely based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); the project does not use strict semver for releases.

## Unreleased

### Added

- **Linear PM — optional Project scope.** Operators can now narrow a Linear-backed CASCADE project to a specific Linear Project (initiative) in the PM wizard's "Board / Project Selection" step. When set, CASCADE only responds to issues that belong to that Linear Project; webhooks for issues outside the scope are silently dropped by the router (with a structured `logger.info` entry), outbound listings are scoped to the project, and newly-created issues (including checklist sub-issues) inherit the project. Leave the new selector empty to preserve existing team-wide behavior. Because Linear's data model requires every issue to belong to a team and scopes workflow states per team, status mappings stay team-scoped. For cross-team Linear Projects, CASCADE responds to the **intersection** of the configured team and project only (sibling-team issues in the same project are ignored). No migration required — existing Linear integrations are unaffected. (Spec [005](docs/specs/005-linear-project-scope.md.done).)
- **Linear status mapping — full parity with Trello and JIRA.** The Linear PM wizard's Field Mapping step now exposes all eight CASCADE stages that drive agent dispatch (backlog, splitting, planning, todo, inProgress, inReview, done, merged) in lifecycle order, instead of only four. An operator can now map a Linear workflow state to any of `splitting`, `planning`, `todo`, or `merged` and have the corresponding agent (splitting, planning, implementation, backlog-manager) dispatch on issue transitions — previously these four stages were unreachable from Linear because the wizard had no slot to save them. Existing Linear integrations upgrade in place: the four new slots render as "not set" on next wizard visit; pre-existing mappings are untouched. No migration required. The normalized `ProjectPMConfig.statuses` type widens to declare the full nine-stage vocabulary (including `debug`, reserved for a future trigger), so providers can no longer silently drift from the trigger layer's dispatch map. (Spec [003](docs/specs/003-linear-status-mapping-parity.md), plan [1/1](docs/plans/003-linear-status-mapping-parity/1-status-parity.md).)
- **Linear wizard — inline webhook signing-secret field and accurate events list.** The Webhooks step of the Linear PM wizard now renders a `ProjectSecretField` bound to `LINEAR_WEBHOOK_SECRET` directly beneath the webhook URL, so operators can paste Linear's signing secret in place instead of navigating to the Credentials tab. The "Enable events" instructions now list the three event families CASCADE actually consumes — `Issues` (status transitions), `Comments` (bot @mentions), and `Issue Labels` ("Ready to Process") — each with a one-line rationale tracing back to the registered trigger handlers. (Spec [002](docs/specs/002-linear-webhook-setup-ux.md), plan [2/2](docs/plans/002-linear-webhook-setup-ux/2-wizard-webhooks-step.md).)

### Changed

- **Review-agent context shape: compact diffs instead of full files.** The review agent's pre-fetched PR context now consists of compact per-file diffs (using GitHub's `file.patch`) rather than full file contents. Files that can't fit the budget — deleted, binary, oversized patch, or cumulative budget exhausted — are surfaced in a structured `SKIPPED FILES` injection that names each file with a reason and tells the agent how to fetch it on demand (`gh pr diff`, `Read`, `Grep`). This scales with PR size rather than repo size, mitigates LLM context rot, and ensures the agent is aware of (rather than blind to) the omissions. The context budget is `REVIEW_DIFF_CONTEXT_TOKEN_LIMIT` (200k tokens), replacing the prior 25k full-file cap. The `SKIPPED FILES` injection is also delivered to the four other agents that share the PR context pipeline (`respond-to-ci`, `respond-to-pr-comment`, `respond-to-review`, `resolve-conflicts`); explicit prompt guidance is added in `review.yaml` only. (Spec [001](docs/specs/001-pr-review-correctness.md), plan [2/2](docs/plans/001-pr-review-correctness/2-context-rework.md.done).)

### Fixed

- **Linear wizard no longer demands you re-paste your API key on every edit.** The dashboard's credential-resolution helper was picking the first provider in its registered order that declared a matching role name, so a Linear-only project's `('pm', 'api_key')` lookup returned `TRELLO_API_KEY` — which isn't configured, which surfaced as "Linear credentials not configured" in the Board / Project Selection step. Fixed by adding a required provider parameter to the helper and updating every call site. **The same fix also corrects Linear webhook signature verification in the router**, which was silently resolving to the JIRA webhook secret (and returning null on Linear-only projects, so verification was silently skipped in production). Discovery calls on a project with no PM integration row yet now return a distinguishable "No PM integration configured" error instead of the misleading "credentials not configured". (Spec [004](docs/specs/004-credential-role-provider-disambiguation.md), plan [1/1](docs/plans/004-credential-role-provider-disambiguation/1-disambiguate-role-resolver.md).)
- **JIRA `resolveLifecycleConfig` silent-drop of splitting / planning / todo.** The JIRA PM wizard accepts mappings for all eight CASCADE stages, but the normalization step that feeds them to `PMLifecycleManager` was dropping `splitting`, `planning`, and `todo` on the floor. Any agent lifecycle hook that moved JIRA issues to those statuses silently no-op'd. Now passes all eight keys through. No operator action required — existing JIRA mappings start working once the fix deploys. (Spec [003](docs/specs/003-linear-status-mapping-parity.md), plan [1/1](docs/plans/003-linear-status-mapping-parity/1-status-parity.md).)
- **Linear wizard Save — HTTP 500 on `projects.integrations.upsert`.** A check constraint (`chk_integration_category_provider`) restricted the `pm` category to `trello` or `jira`; Linear support shipped without a matching constraint update, so every attempt to save a Linear PM integration failed with SQLSTATE 23514. Migration 0049 adds `linear` to the allowed `pm` providers. (Spec [002](docs/specs/002-linear-webhook-setup-ux.md), plan [1/2](docs/plans/002-linear-webhook-setup-ux/1-save-path-fix.md).)
- **Dashboard error logs now surface DB diagnostic fields.** Unhandled errors in the Hono app error handler and tRPC error formatter now include PG error code, detail, constraint, table, and column (unwrapped from `.cause` when Drizzle wraps a pg driver error). Clients still receive a generic "Internal server error" for unexpected `INTERNAL_SERVER_ERROR` throws — real diagnostics go to stdout for operators to grep. (Spec [002](docs/specs/002-linear-webhook-setup-ux.md), plan [1/2](docs/plans/002-linear-webhook-setup-ux/1-save-path-fix.md).)

- **Review agent on external-fork and large PRs.** PR checkouts now use the canonical `refs/pull/N/head` ref, which works for same-repo branches and external-fork branches alike. Previously, a silent `git checkout <branch>` failure on fork PRs caused the worker to review the base branch (`dev`) while believing it was on the PR branch, producing confidently wrong reviews. Any git or HEAD-SHA mismatch now fails the run loudly rather than silently continuing. Additionally, every paginated GitHub REST endpoint used in the review setup pipeline now paginates to completion, so PRs with more than 100 changed files are no longer truncated at the first page. (Spec [001](docs/specs/001-pr-review-correctness.md), plan [1/2](docs/plans/001-pr-review-correctness/1-checkout-and-pagination.md.done).)
Loading
Loading