Skip to content

Fix red CI (Go 1.26.6), propose container auto-sizing for #884, regenerate LSP completions - #146

Merged
ako merged 3 commits into
mainfrom
claude/mxcli-issues-ovfoxk
Aug 14, 2026
Merged

Fix red CI (Go 1.26.6), propose container auto-sizing for #884, regenerate LSP completions#146
ako merged 3 commits into
mainfrom
claude/mxcli-issues-ovfoxk

Conversation

@ako

@ako ako commented Aug 14, 2026

Copy link
Copy Markdown
Owner

Three independent commits, each self-contained. The toolchain bump is the one that unblocks CI — cherry-pick cad70cc on its own if you'd rather not wait on review of the other two.

1. build: Go toolchain 1.26.5 → 1.26.6 — fixes red CI

The Vulnerability scan step (govulncheck ./...) started exiting 3 on every push. No mxcli code is at fault: all six findings are Go standard-library advisories reported as Found in: <pkg>@go1.26.5 / Fixed in: <pkg>@go1.26.6.

ID Package
GO-2026-6218 net/url quadratic complexity in resolvePath
GO-2026-6090 crypto/tls unbounded post-handshake messages
GO-2026-6089 net/http ReadHeaderTimeout on the h2c check
GO-2026-6088 encoding/xml missing recursion depth guard
GO-2026-5972 encoding/asn1 missing recursion depth limit
GO-2026-5026 net/http idna punycode label rejection

The timeline is the proof: cd2b01e was green at 21:43, 64935d4 red at 07:11 the next morning. go1.26.6 was published in between, and govulncheck@latest re-resolves the vulnerability database on every run — so the same code went from clean to failing with no commit responsible. Every trace lands in pre-existing code (marketplace/client.go, tunnelhub/server.go, widgets/mpk, …).

Bumps all pins together — go.mod's toolchain plus push-test, release and nightly (two jobs there). Bumping only push-test would turn CI green while release kept linking published binaries against the vulnerable standard library. Same treatment as the earlier 1.26.4 → 1.26.5 bump for GO-2026-5856.

Verified by running the scan under both toolchains rather than trusting the advisory metadata: 1.26.5 → six findings, exit 3; 1.26.6 → No vulnerabilities found, exit 0.

2. docs: proposal — derive container Size from contents (closes the last open item of mendixlabs#884)

A LoopedActivity's Size is computed from a pre-pass over the AST before its body is built, so it is a function of statement count alone. Child positions — @position included — have no effect on the box meant to contain them.

Measured on a blank 11.6.6 app, LOOP body varied and nothing else:

Body Child centres (X) Loop Size
A 2 activities, default 150, 310 480;160
B same 2, @position(1500,60) / (2000,60) 1500, 2000 480;160
C same 2, @position(160,60) / (170,60) 160, 170 480;160
D 4 activities, default 150 … 630 800;160

Same box around contents spanning 160px, 500px and 10px; only the statement count moves it. Case B is a correctness problem, not cosmetics — both children sit entirely outside their container (interior x ∈ [0,480]), and mx check reports the same error count before and after, so validation is blind to it.

It isn't a patch because of an ordering cycle: innerStartY = loopHeight/2 and loopCenterX = loopLeftX + loopWidth/2, so children are placed relative to an origin derived from the size, while the fix needs the size derived from the children. The proposal breaks that with build-first / size-after / translate-once, keeping the translation at one choke point — the same shape as applyFlowCurves and mergePosition.

It also names the decision that must be made explicitly (@position inside a container: container-relative and translated, or authoritative and exempt — recommending the former), rejects a cheap @size escape hatch as the primary fix while noting the MDL059 coupling if it is added later, and states the risk plainly: every flow containing a loop changes geometry once, which under ADR-0008 means one round of writes users did not author.

Docs only — no behaviour change. Ships with the four-case repro at mdl-examples/bug-tests/container-autosize-884.mdl (check clean).

3. chore: regenerate LSP completions for FIRST

mendixlabs#881 added FIRST to the lexer but never refreshed the committed generated completion list, so make build left a clean checkout dirty.

Verification

  • govulncheck ./... under both toolchains, as above.
  • make build && make test green under 1.26.6.
  • The proposal's measurements were re-run against a freshly built binary after a container rollback was found to have reverted the working tree to an older build — the numbers above are from the current branch, not the stale one.
  • Mendix Studio Pro validation: not applicable — no .mpr is written by any commit here.

Generated by Claude Code

claude added 3 commits August 13, 2026 21:43
…roblem 1)

A LoopedActivity's Size is computed from a pre-pass over the AST before
its body is built, so it is a function of statement count alone and the
children's real positions -- @position included -- have no effect on the
box meant to contain them.

Measured on 11.6.6: two activities at x=150/310, at x=1500/2000, and at
x=160/170 all yield Size 480;160; only changing the statement count to
four moves it (800;160). In the x=1500/2000 case both children sit
entirely outside their own container and mx check reports no additional
error, so nothing catches it short of opening the flow in Studio Pro.

The fix is not a one-liner: children are placed relative to an inner
origin derived from the size, so deriving the size from the children
closes a cycle. Proposes build-first / size-after / translate-once, with
the translation as a single post-pass over the nested builder's objects
-- the same single-choke-point shape used for @Curve and @merge.

Includes the four-case repro as a bug-test example, and notes the two
consequences worth a release note: every flow containing a loop changes
geometry once, and under ADR-0008 that means one round of writes users
did not author.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013uQvFDd5R4eNqqita59jM8
The import-mapping Range work (mendixlabs#881) added FIRST to the lexer but the
committed generated completion list was never refreshed, so `make build`
left the tree dirty on a clean checkout.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013uQvFDd5R4eNqqita59jM8
The `Vulnerability scan` step (govulncheck ./...) started failing with
exit 3 on every push. Nothing in mxcli changed: all six findings are
standard-library advisories reported as `Found in: <pkg>@go1.26.5` /
`Fixed in: <pkg>@go1.26.6`, and go1.26.6 was published between the last
green run and the first red one. govulncheck@latest re-resolves the vuln
database on each run, so the pinned toolchain went stale underneath a
workflow that had not been touched.

  GO-2026-6218  net/url        quadratic complexity in resolvePath
  GO-2026-6090  crypto/tls     unbounded post-handshake messages
  GO-2026-6089  net/http       ReadHeaderTimeout on the h2c check
  GO-2026-6088  encoding/xml   missing recursion depth guard
  GO-2026-5972  encoding/asn1  missing recursion depth limit
  GO-2026-5026  net/http       idna punycode label rejection

Bumps every pin together -- go.mod's toolchain plus push-test, release
and nightly (two jobs) -- so a release binary is not still linked against
the vulnerable standard library after CI goes green. Same treatment as
the 1.26.4 -> 1.26.5 bump for GO-2026-5856.

Verified by running the scan under both toolchains: go1.26.5 reports the
six above and exits 3, go1.26.6 reports "No vulnerabilities found" and
exits 0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013uQvFDd5R4eNqqita59jM8
@ako
ako merged commit f656d4d into main Aug 14, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants