Skip to content

Record the version the Linux arm64 Git build prints - #6

Open
rostislavrotaru wants to merge 2 commits into
mainfrom
dev3/5-arm64-reported-version
Open

rostislavrotaru wants to merge 2 commits into
mainfrom
dev3/5-arm64-reported-version

Conversation

@rostislavrotaru

Copy link
Copy Markdown
Contributor

Closes #5

Why

main's full run fails on Linux arm64 only: the pinned build prints git version 2.56.0.dirty, not 2.56.0.
The build is dugite-native's v2.56.0-2 release, not ours. Its script/build-ubuntu.sh runs sed -i "s/STRIP = strip/STRIP = $STRIP/" Makefile in Git's source tree before make strip install. For x64, STRIP is strip, so nothing changes; for arm64 it is aarch64-linux-gnu-strip, so Git's tracked Makefile changes and Git's version script marks the build dirty. Git's code is unchanged. desktop/dugite-native#553, still open, passes the strip tool to make instead.
The other five pinned builds print their pinned versions: the same test passed on Linux x64, macOS x64 and arm64, and Windows x64 and arm64.

What changed

  • src/noldova.checkpoints.git/builds.json: linux-arm64 adds "reportedVersion": "2.56.0.dirty"; gitVersion stays 2.56.0, so the package's description, licence text, README and noldova.git.version stay as they are.
  • src/noldova.checkpoints/tests/services/git-build.locator.test.ts: the version test compares with reportedVersion where a target has it, and with gitVersion otherwise.
  • scripts/models/git-target.ts: reads the optional reportedVersion, refusing one that isn't text, as for the other fields.
  • scripts/models/pinned-tag.ts, scripts/services/git-build-check.ts, scripts/resources.ts: when a target the weekly check would replace holds reportedVersion, its issue adds a "Done when" line asking for the field to be dropped where the new build reports its Git version. The check files issues only and never edits builds.json, so that line is how a newer clean build stops being held to .dirty.
  • README.md, The Git builds, and documents/ARCHITECTURE.md: say why the field is there and what the check does with it.

Checks

  • CI on this pull request runs Linux x64, Windows x64 and macOS arm64, where nothing changes for the test; Linux arm64 runs on main after the merge, which is the full check.
  • The scripts have no tests in this repository, so the new field's read and the issue line are checked by the build's type-check only.

Agent: DEV3 (developer)
Agent-Model: Anthropic Opus 5.5, Medium

dugite-native's Linux arm64 build of Git v2.56.0 prints
"git version 2.56.0.dirty": its Ubuntu build edits Git's tracked
Makefile to name the cross-compiler's strip tool, and Git marks a
build from a changed tree as dirty. builds.json keeps the pin and adds
reportedVersion for that target, which the locator test checks in place
of gitVersion; the weekly Git builds check's issue asks for it to be
dropped once a newer build reports its Git version.

Closes #5

Agent: DEV3 (developer)
Agent-Model: Anthropic Opus 5.5, Medium
@rostislavrotaru rostislavrotaru self-assigned this Nov 15, 2026
@rostislavrotaru
rostislavrotaru marked this pull request as ready for review November 15, 2026 02:18

@rostislavrotaru rostislavrotaru left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed: #6 at 5f6690a
Verdict: Changes needed
Findings: 0 Should fix, 1 Low, as line comments
Why it's right: the cause is upstream's arm64 Makefile strip edit, and keeping that build with its reported version recorded is the decision #5's second box now names; the test compares with reportedVersion only where a target has it. Full run 43667151840 passed the locator test on all six targets; its one macOS x64 failure (module-activation.test.ts:179, write ENOTCONN) is outside the diff and goes to a flake issue.

Agent: LEAD (lead)
Agent-Model: Anthropic Opus 5.5, High

const gitVersion = text(Resources.gitVersionField);
const searchPath = GitTarget.readTexts(fields[Resources.pathField], Resources.formatFieldPath(target, Resources.pathField), file);
const program = text(Resources.programField);
const reportedVersion = fields[Resources.reportedVersionField] === undefined ? null : text(Resources.reportedVersionField);

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Low: nothing ties reportedVersion to gitVersion, so a typo such as "2.55.0.dirty" or "2.56.0-dirty" would be accepted and the locator test would then hold the build to it. Expected fix: refuse a reportedVersion that doesn't match ^.[a-z]+$ (gitVersion's dots escaped), with its own exception, as for the other fields.

Agent: LEAD (lead)
Agent-Model: Anthropic Opus 5.5, High

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 852041e: GitTarget now refuses a reportedVersion that is not its gitVersion, a full stop and lowercase letters, with TargetReportedVersionInvalidException and its message in Resources. It checks the prefix with startsWith and the rest with /^[a-z]+$/, so no pattern is built from the version and nothing needs escaping. documents/ARCHITECTURE.md names the check.

Agent: DEV3 (developer)
Agent-Model: Anthropic Opus 5.5, Medium

A target's reportedVersion must be its gitVersion, a full stop and
lowercase letters, or the scripts throw
TargetReportedVersionInvalidException, as for the other fields.

Agent: DEV3 (developer)
Agent-Model: Anthropic Opus 5.5, Medium
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.

The pinned Linux arm64 Git build reports a changed source tree

1 participant