Repository navigation
gitai 0.3.1
A fix release: one correctness fix in landing, Windows support for the CLI and
the SDK, fewer fsyncs on the land path, and the measured results of AI conflict
resolution.
Fixes
UserLandresolves its branch by its exact name (#6, thanks
@LosaLosSantos). It read the branch with git's revision rules, so a missing
refs/heads/xcould resolve to a tag or a remote-tracking reference named
like it, and a land onto a branch that does not exist could be answered
already_landed. Every branch read ofUserLand(decision, batching,
pre-resolution, verification, the moved-reference check) now looks up
refs/heads/<branch>exactly, asUserCommitFilesalready did.
New
- The CLI and the SDK run on Windows (#7, thanks @LosaLosSantos). Storage
relative paths are built with/on every system (on Windows they broke a
regular expression and every program importing the SDK panicked at start),
andgraftno longer imports the Unix-only changelog package. A CI job
buildsgraft.exeand the SDK on Windows and runs the workspace tests. The
server stays Linux-only.
Faster
- Fewer fsyncs on the land path (#4, thanks @Trigodil, with maintainer
fixes). A file-bucket upload fsyncs only the directories not yet known to be
durable, and the storage-core watermark of a dirty repository is written
without fsync and made durable by the durable step, outside git's reference
lock and before the repository's marker goes. Measured on one WSL2 machine,
authoritative mode, SQLite, file bucket, 10 writers (four paired runs):
lands per minute about 1,234 -> 1,650, Preparing phase mean about 36 -> 20 ms.
The gain depends on the cost of fsync on the disk. - Operators: never remove or replace a directory of a file bucket while a
server uses it (the directory cache relies on it; STORAGE.md). - New metric
graft_storage_preparing_step_seconds{step,kind}(record, walk,
pack, upload) for authoritative writes.
AI conflict resolution: measured
Two writers from different vendors that produce the same resolution, checked by
the project's own tests (or build/tsc) on the exact tree, as verify.command
does, were wrong in (Wilson upper bound in brackets):
| with the project's tests | with build or tsc only | without tests | |
|---|---|---|---|
| Go | 7.7% (16.8%), replicated on fresh conflicts | build: 6.8% (14.9%) | only where it builds |
| Python | 3.2% (7.2%) | - | abstaining on semantic conflicts: 5.9% (9.2%) |
| TypeScript | 4.1% (8.6%) | tsc: 4.9% (9.7%) | not verified |
Python and TypeScript are judged against an AI reference (Claude) with a written
rubric, calibrated blind on known errors, not a human one; TypeScript without
tests is not verified. Details and every protocol in PLAN10 15.15-15.24.
Upgrade
No configuration or data change from 0.3.0.