Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
c1a365a
feat(prompts): move backend + HTML-dashboard contracts into built-in …
SailingSF Jul 9, 2026
0af6687
fix(skills): address review — shadow fallback, recall idempotence, on…
SailingSF Jul 11, 2026
c5db078
fix(skills): stub must not satisfy the already-recalled check
SailingSF Jul 14, 2026
fd372ed
feat(publish): add access modes (password/restricted) to /publish and…
StpMax Jul 15, 2026
18cf596
fix(scratchpad): force UTF-8 so non-UTF-8 host locales don't crash th…
alecantu7 Jul 16, 2026
0dc7261
fix(scratchpad): drop PYTHONIOENCODING, keep only PYTHONUTF8 (self-re…
alecantu7 Jul 16, 2026
a4ba80a
fix(scratchpad): give the pip/uv install subprocess UTF-8 mode too (s…
alecantu7 Jul 16, 2026
16c83fc
Merge branch 'staging' into feat/ENG-727
StpMax Jul 17, 2026
0a0bb91
fix(publish): clear local .published.json on /unpublish so re-publish…
StpMax Jul 17, 2026
8b00144
fix(publish): publish_or_preview resolves artifact target from metada…
StpMax Jul 17, 2026
2ef9614
feat(publish): ask for access mode in chat when the user didn't speci…
StpMax Jul 17, 2026
a0814f2
fiix
StpMax Jul 17, 2026
b898bfc
fix web_search
ea-rus Jul 17, 2026
fda8510
Sync main back into staging after release
mindsdb-release-train[bot] Jul 20, 2026
7726302
Merge pull request #258 from mindsdb/fix/eng847-web_search-returns-empty
ea-rus Jul 20, 2026
e0584cd
fix(prompts): reference created artifact in final message
StpMax Jul 20, 2026
94a34ec
fix(cli): flush per-round preambles separately instead of concatenating
StpMax Jul 20, 2026
d9406ce
fix(scratchpad): UTF-8 the _parent_venv.pth write + pin the boot-scri…
alecantu7 Jul 20, 2026
1fc202f
test(scratchpad): pin the _parent_venv.pth write encoding (self-revie…
alecantu7 Jul 20, 2026
86b5d13
Merge pull request #253 from mindsdb/alejandrocantu/eng-824-scratchpa…
ZoranPandovski Jul 21, 2026
cbf474c
Merge pull request #244 from mindsdb/feat/prompt-skills-slim
SailingSF Jul 21, 2026
966a261
Merge pull request #251 from mindsdb/feat/ENG-727
StpMax Jul 21, 2026
e0720ff
count turns without tools
ea-rus Jul 21, 2026
dff7076
fix(llm): back off + retry mid-stream provider failures; typed transi…
alecantu7 Jul 21, 2026
83da2f8
public-data-sources skill
ea-rus Jul 22, 2026
58c75c9
use router model for summarization
ea-rus Jul 22, 2026
8675e4b
thalamus gate
ea-rus Jul 22, 2026
9382bac
Merge pull request #262 from mindsdb/feat/eng-742-save-tool-calls
ea-rus Jul 22, 2026
0775df6
ENG-940: explicit encoding="utf-8" on scratchpad/chat reads (launcher…
alecantu7 Jul 22, 2026
043a017
fix: preload skill alreadyin history
ea-rus Jul 22, 2026
84e3160
ENG-981: heal lone surrogates before compile() in the scratchpad (#268)
alecantu7 Jul 22, 2026
e1cca88
Merge pull request #260 from mindsdb/fix/ENG-900
StpMax Jul 23, 2026
167db92
count gate tokens
ea-rus Jul 23, 2026
3f93768
Merge pull request #264 from mindsdb/feat/eng-648-reduce-token-usage
ea-rus Jul 23, 2026
369b808
Merge pull request #265 from mindsdb/feat/eng-648-summary-model
ea-rus Jul 23, 2026
25d7355
max_chars works also for messages of the same role which go subsequently
ea-rus Jul 23, 2026
31a2082
Merge branch 'staging' into feat/eng-648-thalamus
ea-rus Jul 23, 2026
bd87572
fix for eng-845
martyna-mindsdb Jul 23, 2026
d014d05
Merge pull request #261 from mindsdb/fix/ENG-901
StpMax Jul 23, 2026
60b822f
Merge pull request #269 from mindsdb/fix-eng-845
martyna-mindsdb Jul 23, 2026
d61470f
fix: pillow vulnerability
martyna-mindsdb Jul 23, 2026
31f8eb0
fix: npm packages vulnerability
martyna-mindsdb Jul 23, 2026
eeb2632
Merge pull request #266 from mindsdb/feat/eng-648-thalamus
ea-rus Jul 23, 2026
39a4586
Merge pull request #271 from mindsdb/fix-upgrade-npm-packages
martyna-mindsdb Jul 24, 2026
180ac00
Merge pull request #270 from mindsdb/fix-upgrade-pillow
martyna-mindsdb Jul 24, 2026
ecbbe11
ci(ENG-1008): merge-to-main + staging panic and recovery alerts (#274)
lucas-koontz Jul 25, 2026
3b659c2
ci(ENG-1008): consolidate notify jobs for consistent pipeline alerts …
lucas-koontz Jul 25, 2026
cc0fb7b
chore(ENG-1053): introduce pipeline watchdog for startup failures ale…
lucas-koontz Jul 26, 2026
5ca45bd
ci: specify permissions for notify-main-failure workflow
lucas-koontz Jul 27, 2026
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
8 changes: 8 additions & 0 deletions .github/actionlint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# actionlint needs to be told about self-hosted runner labels, or every
# `runs-on:` referring to one is an error and the real findings drown in noise.
#
# mdb-dev, mdb-prod the org's self-hosted runner pools
self-hosted-runner:
labels:
- mdb-dev
- mdb-prod
16 changes: 4 additions & 12 deletions .github/workflows/cla.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,7 @@ on:

jobs:
CLAssistant:
runs-on: ubuntu-latest
steps:
- name: "CLA Assistant"
if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
uses: contributor-assistant/github-action@v2.6.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
path-to-signatures: 'assets/contributions-agreement/signatures/cla.json'
path-to-document: 'https://github.com/mindsdb/mindsdb/blob/main/assets/contributions-agreement/individual-contributor.md'
branch: 'cla'
allowlist: bot*, ZoranPandovski, torrmal, Stpmax, mindsdbadmin, ea-rus, hamishfagg, MinuraPunchihewa, martyna-mindsdb, tino097, lucas-koontz
uses: mindsdb/github-actions/.github/workflows/cla-assistant.yml@main
with:
path-to-document: 'https://github.com/mindsdb/mindsdb/blob/main/assets/contributions-agreement/individual-contributor.md'
allowlist: bot*, ZoranPandovski, torrmal, Stpmax, mindsdbadmin, ea-rus, hamishfagg, MinuraPunchihewa, martyna-mindsdb, tino097, lucas-koontz
Comment thread
lucas-koontz marked this conversation as resolved.
17 changes: 17 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,20 @@ jobs:
steps:
- id: deployment
uses: actions/deploy-pages@v4

notify:
# Alert the eng channel if the docs build or Pages deploy fails.
# One job covers both outcomes: a `uses:` job cannot branch on status, so
# the aggregate result picks the failed or recovered message, and a
# cancelled run stays silent.
needs: [build, deploy]
if: ${{ !cancelled() && !contains(needs.*.result, 'cancelled') }}
permissions:
contents: read
actions: read # the prior-run lookup behind the recovery message
uses: mindsdb/github-actions/.github/workflows/notify-main-failure.yml@main
with:
Comment thread
lucas-koontz marked this conversation as resolved.
env-name: "docs deploy"
status: ${{ contains(needs.*.result, 'failure') && 'failed' || 'recovered' }}
runs-on: ubuntu-latest
secrets: inherit
46 changes: 46 additions & 0 deletions .github/workflows/pipeline-watchdog.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Alert when a deploy pipeline concluded WITHOUT EVER STARTING.
#
# The panic-alert job in each pipeline is a job inside that pipeline, so it covers
# every failure where the run exists. It cannot cover
# `conclusion: startup_failure` — GitHub rejecting the run at load time, with zero
# jobs — because there is no job to put the alert in. The run appears in the
# Actions tab and nowhere else, and the branch is not deployed.
#
# It is not hypothetical. In mindsdb/auth a caller job granted narrower
# `permissions:` than a called workflow's jobs declared, two pushes to `staging`
# were rejected before scheduling, and staging served the previous image for ten
# hours with nothing said. The shared `workflow-lint.yml` gate stops that
# particular cause reaching a deploy branch; this watchdog notices the next one,
# whatever it is.
#
# Alerts repeat by design — roughly three per failing push at this cadence and
# window, then silence. A stateless sweep cannot be exactly-once, and a missed
# alert is the failure being fixed.
#
# Note it only runs once merged to `main`: GitHub runs `schedule` triggers from the
# default branch alone. `workflow_dispatch` is how to prove it before then, and
# widening the window on a dispatch replays a past incident.

name: Pipeline watchdog

on:
schedule:
- cron: "*/30 * * * *"
workflow_dispatch:
inputs:
lookback-minutes:
description: "Widen to replay a past incident"
type: number
default: 90

jobs:
startup-failures:
permissions:
contents: read
actions: read # run + job history for the sweep
uses: mindsdb/github-actions/.github/workflows/notify-startup-failure.yml@main
with:
branches: "main staging"
lookback-minutes: ${{ inputs.lookback-minutes && fromJson(inputs.lookback-minutes) || 90 }}
runs-on: ubuntu-latest
secrets: inherit
68 changes: 22 additions & 46 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,54 +12,12 @@ concurrency:
group: auto-release-${{ github.ref }}
cancel-in-progress: false

env:
CALVER_MAJOR: 2

jobs:
auto-release:
runs-on: ubuntu-latest
outputs:
tag: ${{ steps.version.outputs.tag }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # need tags for sequence calculation

- name: Compute CalVer version
id: version
run: |
set -euo pipefail

MAJOR=${{ env.CALVER_MAJOR }}
YY=$(date -u +%y) # e.g. 26
M=$(date -u +%-m) # e.g. 6 (no zero-pad)
DD=$(date -u +%-d) # e.g. 23 (no zero-pad)

# Find the highest sequence for today's date
PREFIX="v${MAJOR}.${YY}.${M}.${DD}."
SEQ=0
for tag in $(git tag -l "${PREFIX}*" | sort -t. -k5 -n); do
N="${tag##*.}"
if [[ "$N" =~ ^[0-9]+$ ]] && [ "$N" -gt "$SEQ" ]; then
SEQ="$N"
fi
done
SEQ=$((SEQ + 1))

VERSION="${MAJOR}.${YY}.${M}.${DD}.${SEQ}"
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
echo "tag=v${VERSION}" >> "$GITHUB_OUTPUT"
echo "Computed version: ${VERSION}"

- name: Create tag and GitHub Release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git tag "${{ steps.version.outputs.tag }}"
git push origin "${{ steps.version.outputs.tag }}"
gh release create "${{ steps.version.outputs.tag }}" \
--generate-notes \
--title "${{ steps.version.outputs.tag }}"
uses: mindsdb/github-actions/.github/workflows/calver-release.yml@main
with:
calver-major: "2"
runs-on: ubuntu-latest
Comment thread
lucas-koontz marked this conversation as resolved.

publish:
name: Publish to PyPI
Expand Down Expand Up @@ -93,3 +51,21 @@ jobs:
with:
tag: ${{ needs.auto-release.outputs.tag }}
secrets: inherit

notify:
# Alert the eng channel if ANY job in the release pipeline fails (tag, PyPI
# publish, or release e2e).
# One job covers both outcomes: a `uses:` job cannot branch on status, so
# the aggregate result picks the failed or recovered message, and a
# cancelled run stays silent.
needs: [auto-release, publish, e2e]
if: ${{ !cancelled() && !contains(needs.*.result, 'cancelled') }}
permissions:
contents: read
actions: read # the prior-run lookup behind the recovery message
uses: mindsdb/github-actions/.github/workflows/notify-main-failure.yml@main
with:
env-name: "release"
status: ${{ contains(needs.*.result, 'failure') && 'failed' || 'recovered' }}
runs-on: ubuntu-latest
secrets: inherit
19 changes: 19 additions & 0 deletions .github/workflows/staging-freeze.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,22 @@ jobs:
freeze:
uses: mindsdb/github-actions/.github/workflows/release-freeze.yml@75df118f3b003625052c4f14e7b90817fb8b2784 # v1
secrets: inherit

notify:
# Alert the eng channel if the freeze fails (e.g. missing ruleset) — otherwise
# a broken freeze is silent and the code-freeze window never opens.
needs: [freeze]
if: failure()
permissions:
contents: read
# Declared even though this caller never runs the prior-run lookup: a
# reusable workflow's requested permissions are validated when the file
# is parsed, not when the step that needs them runs, so a caller that
# grants less than the reusable asks for is INVALID rather than merely
# degraded, and the whole workflow fails to load.
actions: read
uses: mindsdb/github-actions/.github/workflows/notify-main-failure.yml@main
with:
env-name: "staging freeze"
runs-on: ubuntu-latest
secrets: inherit
Comment thread
lucas-koontz marked this conversation as resolved.
19 changes: 19 additions & 0 deletions .github/workflows/staging-unfreeze.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,22 @@ jobs:
github.event.pull_request.head.repo.full_name == github.repository)
uses: mindsdb/github-actions/.github/workflows/release-unfreeze.yml@75df118f3b003625052c4f14e7b90817fb8b2784 # v1
secrets: inherit

notify:
# Alert the eng channel if the unfreeze or main->staging sync-back fails —
# otherwise staging stays frozen (or drifts from main) with no signal.
needs: [unfreeze]
if: failure()
permissions:
contents: read
# Declared even though this caller never runs the prior-run lookup: a
# reusable workflow's requested permissions are validated when the file
# is parsed, not when the step that needs them runs, so a caller that
# grants less than the reusable asks for is INVALID rather than merely
# degraded, and the whole workflow fails to load.
actions: read
uses: mindsdb/github-actions/.github/workflows/notify-main-failure.yml@main
with:
env-name: "staging unfreeze"
runs-on: ubuntu-latest
secrets: inherit
Comment thread
lucas-koontz marked this conversation as resolved.
18 changes: 18 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,21 @@ jobs:

- name: Run E2E tests (stub)
run: uv run --extra dev pytest tests/e2e/ -v

notify:
# Alert the eng channel if CI fails on a direct push to main/staging. PR runs
# are skipped — the author sees those directly.
# One job covers both outcomes: a `uses:` job cannot branch on status, so
# the aggregate result picks the failed or recovered message, and a
# cancelled run stays silent.
needs: [run-tests]
if: ${{ !cancelled() && !contains(needs.*.result, 'cancelled') && github.event_name == 'push' }}
permissions:
contents: read
actions: read # the prior-run lookup behind the recovery message
uses: mindsdb/github-actions/.github/workflows/notify-main-failure.yml@main
with:
Comment thread
lucas-koontz marked this conversation as resolved.
env-name: "CI"
status: ${{ contains(needs.*.result, 'failure') && 'failed' || 'recovered' }}
runs-on: ubuntu-latest
secrets: inherit
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,11 @@ Anton uses an automated release flow. The single source of truth for the package
- Publishes a GitHub release with auto-generated notes.
- Triggers [`tests_e2e_release.yml`](.github/workflows/tests_e2e_release.yml) to run live e2e tests against the released version.

The version computation, tag push, and release creation are shared with the other
service repos through the `calver-release.yml` reusable workflow in
[mindsdb/github-actions](https://github.com/mindsdb/github-actions); this repo's
workflow supplies the major component and consumes the resulting `tag` output.

### What you should NOT do

- **Don't create GitHub releases manually.** The `v*` tag namespace is locked via a repo ruleset — only the release workflow can create them. Manual attempts will be rejected by GitHub.
Expand Down
Loading
Loading