The last thread cut — SwiftGitX and libgit2 leave the project
Step 6 of strategy/01-git-excision.md, the proving step: the two packages and their rationale blocks (including the stale never-runs-in-the-free-app note) come out of project.yml, the project regenerates, and the build resolves clean — nothing living referenced libgit2. Resurrection pins (SwiftGitX 0.4.0, libgit2 1.9.2) are recorded in the plan and at the pre-git-excision tag. 2,707 tests green. Claude-Session: https://claude.ai/code/session_014PtZdPwqZuqEDLc6wZMtEy
This commit is contained in:
+3
-37
@@ -23,35 +23,9 @@ packages:
|
|||||||
IndieAbout:
|
IndieAbout:
|
||||||
url: https://git.rzen.dev/rzen/indie-about.git
|
url: https://git.rzen.dev/rzen/indie-about.git
|
||||||
minorVersion: 0.2.2
|
minorVersion: 0.2.2
|
||||||
# **The bundled git client** (06-history-undo.md ▸ Rules: "Bundled libgit2 — no git install
|
# SwiftGitX 0.4.0 / libgit2 1.9.2 (both `github.com/ibrahimcetin/…`) left with the git excision
|
||||||
# required"): SwiftGitX vendors libgit2 as an in-process library, so every git operation the app
|
# (strategy/01-git-excision.md, 2026-08-08) — the exact pins for resurrection are recorded there
|
||||||
# performs runs inside the sandbox with no `Process`, no `/usr/bin/git`, and no sandbox extension.
|
# and at the `pre-git-excision` tag.
|
||||||
# A board's history therefore works identically in a Release build on a machine that has never had
|
|
||||||
# Xcode or the command-line tools installed.
|
|
||||||
#
|
|
||||||
# `exactVersion` rather than a range, and pinned to the pathfinder's own 0.4.0: the package is
|
|
||||||
# pre-1.0 with an API that moves between minors (the commit and diff surfaces this depends on both
|
|
||||||
# changed shape in 0.3→0.4), so a floating pin would be a resolver deciding when the git provider
|
|
||||||
# stops compiling.
|
|
||||||
SwiftGitX:
|
|
||||||
url: https://github.com/ibrahimcetin/SwiftGitX
|
|
||||||
exactVersion: 0.4.0
|
|
||||||
# **The C library underneath SwiftGitX, named directly** (06-history-undo.md ▸ Interaction with
|
|
||||||
# external writers: "foreign changes are committed under the pinned synthetic author"). SwiftGitX
|
|
||||||
# 0.4.0's `commit(message:)` takes no signature — its `CommitOptions` leaves `author`/`committer`
|
|
||||||
# null and libgit2 falls back to `git_signature_default`, which reads a config the sandbox cannot
|
|
||||||
# see — so the auto-committer's per-commit authorship is unreachable through the wrapper. It
|
|
||||||
# reaches `git_commit_create` itself (`GitCommitOperation`), which needs the same vendored module
|
|
||||||
# SwiftGitX imports.
|
|
||||||
#
|
|
||||||
# **The same package SwiftGitX already resolves**, pinned to the version SwiftGitX pins exactly
|
|
||||||
# (`.package(url: …/libgit2.git, exact: "1.9.2")`): this adds no second copy of libgit2 to the
|
|
||||||
# binary and no second resolution to argue with — it makes a module the app already links
|
|
||||||
# *importable*. A drift between these two pins is a resolver error at build time, which is the
|
|
||||||
# loudest place for it to be.
|
|
||||||
libgit2:
|
|
||||||
url: https://github.com/ibrahimcetin/libgit2.git
|
|
||||||
exactVersion: 1.9.2
|
|
||||||
|
|
||||||
settings:
|
settings:
|
||||||
base:
|
base:
|
||||||
@@ -69,12 +43,6 @@ settings:
|
|||||||
# What that buys this file: no anchors, no per-target exclusion lists, no second copy of the
|
# What that buys this file: no anchors, no per-target exclusion lists, no second copy of the
|
||||||
# resources. There is one product, one Info.plist, one entitlements file, one Swift module, and one
|
# resources. There is one product, one Info.plist, one entitlements file, one Swift module, and one
|
||||||
# `.kanban` UTI **exported** (never imported) by the app that owns it.
|
# `.kanban` UTI **exported** (never imported) by the app that owns it.
|
||||||
#
|
|
||||||
# libgit2 arrived here with pro-m1, as SwiftGitX above — a dependency of the one target, dormant
|
|
||||||
# behind the subscription gate rather than the contents of a second download. It links into the free
|
|
||||||
# app and never runs there: detection itself is tier-gated (`HistoryStore.compose`), so a free-tier
|
|
||||||
# session opens without so much as a `fileExists` under `.git` (12-editions.md ▸ The free tier and
|
|
||||||
# `.git`, and `InertGitTests`).
|
|
||||||
targets:
|
targets:
|
||||||
# MARK: - Lanework
|
# MARK: - Lanework
|
||||||
|
|
||||||
@@ -116,8 +84,6 @@ targets:
|
|||||||
- package: swift-markdown
|
- package: swift-markdown
|
||||||
product: Markdown
|
product: Markdown
|
||||||
- package: IndieAbout
|
- package: IndieAbout
|
||||||
- package: SwiftGitX
|
|
||||||
- package: libgit2
|
|
||||||
postBuildScripts:
|
postBuildScripts:
|
||||||
- script: '"${SRCROOT}/../indie-skills/skills/app-versioning/scripts/update_build_info.sh"'
|
- script: '"${SRCROOT}/../indie-skills/skills/app-versioning/scripts/update_build_info.sh"'
|
||||||
name: Update Build Info
|
name: Update Build Info
|
||||||
|
|||||||
Reference in New Issue
Block a user