Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
b22b828
feat(rest): store a REST response in a file document (#922)
claude Aug 18, 2026
9d2d5bb
Merge pull request #186 from ako/claude/mxcli-issues-ovfoxk
ako Aug 19, 2026
35a4951
fix(examples): version-gate DecimalScale, which 10.24 does not have
claude Aug 19, 2026
50fdade
Merge branch 'mendixlabs:main' into main
ako Aug 19, 2026
f478721
Merge pull request #187 from ako/claude/nightly-1024-decimalscale
ako Aug 19, 2026
fec4333
fix(canon): carry stored element $IDs onto a rewritten document
claude Aug 19, 2026
f9b816f
fix(executor): stop reporting writes that storage skipped
claude Aug 19, 2026
8113e7f
feat(mappings): reach a nested JSON leaf without an entity per level …
claude Aug 19, 2026
f85f891
Merge remote-tracking branch 'origin/main' into claude/mapping-nested…
claude Aug 19, 2026
1492e57
fix(check): catch a nested export-mapping member at check time (MDL-M…
claude Aug 19, 2026
55f77c8
fix(run-local): use an mxbuild this host can execute, and say so when…
claude Aug 19, 2026
f78d9f2
fix(windows): append .exe to the java path, and find a per-user JDK
claude Aug 19, 2026
c4055a4
fix(executor): count writes that land outside unit storage
claude Aug 19, 2026
de7ea71
fix(widgets): bind a pluggable text template's contentparams, warn on…
claude Aug 19, 2026
52f4ae0
Merge pull request #188 from ako/claude/mapping-nested-paths
ako Aug 19, 2026
a96f03a
Merge pull request #189 from ako/claude/mxcli-unit-test-perf-n7ggx8
ako Aug 19, 2026
d017af7
Merge branch 'main' into claude/bootstrap-prompt-smaller-37u3fu
ako Aug 19, 2026
26f7bd0
Merge pull request #190 from ako/claude/bootstrap-prompt-smaller-37u3fu
ako Aug 19, 2026
3a8a03b
Merge branch 'main' into claude/widget-binding-gaps-928
ako Aug 19, 2026
626b254
Merge pull request #191 from ako/claude/widget-binding-gaps-928
ako Aug 19, 2026
2a9c69f
fix(mappings): an unauthored import range is All, not First
claude Aug 19, 2026
d4998ac
Merge pull request #192 from ako/claude/bootstrap-prompt-smaller-37u3fu
ako Aug 19, 2026
cbed3b0
fix(rest): refuse `body: file`, which sent the expression text (MDL-R…
claude Aug 19, 2026
79c473f
feat(rest): binary request body on REST CALL (`body binary $Doc/Conte…
claude Aug 19, 2026
733d6db
fix(rest): correct the mapping request body, and refuse one it cannot…
claude Aug 19, 2026
d452a3d
fix(security): GRANT widens an access rule instead of replacing it
claude Aug 19, 2026
c6bd29c
docs(rest): document the binary body where people look for it
claude Aug 19, 2026
c396356
fix(alter-page): refuse widgets at a column target, see into a custom…
claude Aug 19, 2026
603aeb4
Merge pull request #193 from ako/claude/bootstrap-prompt-smaller-37u3fu
ako Aug 20, 2026
0f16b35
Merge branch 'main' into claude/mxcli-issues-ovfoxk
ako Aug 20, 2026
e6d7b38
docs(proposal): structured description of irreducible microflow graph…
claude Aug 20, 2026
d867785
docs(rest): add a request-body/upload section to rest-call-from-json
claude Aug 20, 2026
26bcc78
chore(hooks): warn when the checkout or the branch is not what it seems
claude Aug 20, 2026
3a341c0
Merge branch 'main' into claude/mxcli-unit-test-perf-n7ggx8
ako Aug 20, 2026
db70558
feat(lint): detect microflow branches that cannot be described faithf…
claude Aug 20, 2026
2246e39
Merge pull request #194 from ako/claude/mxcli-issues-ovfoxk
ako Aug 20, 2026
210eb35
Merge branch 'main' into claude/mxcli-unit-test-perf-n7ggx8
ako Aug 20, 2026
57823ec
Merge pull request #195 from ako/claude/mxcli-unit-test-perf-n7ggx8
ako Aug 20, 2026
fdbb6b8
Merge pull request #196 from ako/claude/bootstrap-prompt-smaller-37u3fu
ako Aug 20, 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
68 changes: 68 additions & 0 deletions .claude/hooks/post-push.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#!/bin/bash
#
# PostToolUse hook (Bash) — after a `git push`, report where the branch stands
# relative to main.
#
# Why this exists: twice in one session commits were pushed onto a branch whose
# pull request had already been merged, and reported as "added to PR #N" when
# PR #N was closed and contained none of them. A merged PR cannot take new
# commits, so the work needed a fresh branch and a new PR.
#
# It would be better to name the PR directly, but this environment's egress
# proxy intercepts api.github.com and answers 403 ("GitHub access is not enabled
# for this session"), so a shell hook cannot ask. What it CAN compute locally is
# the state both failures shared: the branch was behind origin/main because main
# had absorbed the branch's earlier commits via the merge.
#
# Prints nothing when the branch is simply ahead of main — the normal case —
# so a clean push stays quiet.
set -uo pipefail

payload=$(cat)

# Only react to a push. Matched anywhere in the command rather than via the
# hook's `if` filter, which is a PREFIX match and would miss the common
# `git add … && git commit … && git push …`.
command=$(printf '%s' "$payload" | jq -r '.tool_input.command // ""' 2>/dev/null || true)
case "$command" in
*"git push"*) ;;
*) exit 0 ;;
esac

cd "${CLAUDE_PROJECT_DIR:-.}" 2>/dev/null || exit 0
git rev-parse --git-dir >/dev/null 2>&1 || exit 0

branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || true)
if [ -z "$branch" ] || [ "$branch" = "HEAD" ]; then exit 0; fi

# Best effort: a slow or offline fetch must not hold up the session.
timeout 15 git fetch -q origin main >/dev/null 2>&1 || true
git rev-parse --verify -q origin/main >/dev/null 2>&1 || exit 0

behind=$(git rev-list --count "HEAD..origin/main" 2>/dev/null || echo 0)
if [ "$behind" -eq 0 ]; then exit 0; fi

ahead=$(git rev-list --count "origin/main..HEAD" 2>/dev/null || echo 0)

if [ "$ahead" -eq 0 ]; then
# Nothing of its own: main has everything this branch has. Either its PR was
# merged, or the checkout is stale (an ephemeral container is re-cloned fresh,
# so locally-made commits can be absent while the pushed branch still has them).
msg="$branch is $behind commit(s) behind origin/main and has none of its own.
Its pull request may already be merged, or this checkout may be stale — a fresh container
re-clones the repo, so commits made earlier in the session can be missing locally.
Check both before describing the branch's state:
git log --oneline origin/$branch (what was actually pushed)
restart from main if the PR merged: git checkout -B $branch origin/main"
else
msg="pushed $branch — it is $ahead commit(s) ahead of origin/main but also $behind BEHIND.
If a pull request from this branch was already merged, it CANNOT carry those $ahead commit(s):
verify the PR is still open before saying they were added to it.
If it merged, restart the branch and keep the unmerged work:
git fetch origin main && git rebase --onto origin/main <merged-sha> $branch"
fi

# systemMessage surfaces it to the user; additionalContext puts the same fact in
# the model's context, which is where the wrong claim was made.
jq -nc --arg m "$msg" \
'{systemMessage: $m, hookSpecificOutput: {hookEventName: "PostToolUse", additionalContext: $m}}'
39 changes: 37 additions & 2 deletions .claude/hooks/session-start.sh
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,48 @@ set -euo pipefail
ANTLR_VERSION='4.13.2'
ANTLR_TOOLS_VERSION='0.2.2'

cd "${CLAUDE_PROJECT_DIR:-$(dirname "$0")/../..}" 2>/dev/null || exit 0

# 0. Is this checkout what the session thinks it is?
#
# The container is ephemeral: it is re-cloned when reprovisioned, so commits made
# earlier in a session can be absent from the working copy while still present on
# the remote. That happened twice in one session, and the second time it was
# misread as a code bug — a grammar rule "missing" from the tree had in fact been
# committed and pushed hours earlier, and the binary under test was built from
# the rolled-back tree.
#
# Only speaks when the branch is actually behind its own remote, so a healthy
# start stays silent. Runs before the remote-only exit below because a stale
# checkout is worth knowing about on any machine.
_branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || true)
if [ -n "${_branch:-}" ] && [ "${_branch}" != "HEAD" ]; then
timeout 15 git fetch -q origin "${_branch}" >/dev/null 2>&1 || true
if git rev-parse --verify -q "origin/${_branch}" >/dev/null 2>&1; then
_behind=$(git rev-list --count "HEAD..origin/${_branch}" 2>/dev/null || echo 0)
if [ "${_behind}" -gt 0 ]; then
echo "WARNING: HEAD is ${_behind} commit(s) behind origin/${_branch}."
echo " This checkout may be a fresh clone that is missing work pushed earlier."
echo " Reconcile before building or testing: git log --oneline origin/${_branch}"
fi
fi
fi

# The binary carries the commit it was built from (Makefile -X main.Version), so
# a mismatch means any behaviour observed through bin/mxcli is from other code.
if [ -x bin/mxcli ]; then
_built=$(bin/mxcli --version 2>/dev/null | grep -oE '[0-9a-f]{7,}' | head -1 || true)
_head=$(git rev-parse --short HEAD 2>/dev/null || true)
if [ -n "${_built:-}" ] && [ -n "${_head:-}" ] && [ "${_built}" != "${_head}" ]; then
echo "NOTE: bin/mxcli was built from ${_built}, HEAD is ${_head} — run 'make build' before testing."
fi
fi

# Local (devcontainer / laptop) setups already have these via the Dockerfile.
if [ "${CLAUDE_CODE_REMOTE:-}" != "true" ]; then
exit 0
fi

cd "${CLAUDE_PROJECT_DIR:-$(dirname "$0")/../..}"

# 1. ANTLR4 — required by `make grammar`, which `make build` always runs.
if ! command -v antlr4 >/dev/null 2>&1; then
echo "Installing antlr4-tools==${ANTLR_TOOLS_VERSION}..."
Expand Down
12 changes: 12 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,18 @@
}
]
}
],
"PostToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "$CLAUDE_PROJECT_DIR/.claude/hooks/post-push.sh",
"timeout": 25
}
]
}
]
}
}
Loading
Loading