Skip to content

Releases: VectorSophie/hgit

hgit 1.9.0 — storage and incremental exchange

Choose a tag to compare

@VectorSophie VectorSophie released this 27 Sep 09:37

Objects are stored once instead of duplicated on every commit, an interrupted write is recoverable instead of corrupting the archive, and a portable incremental exchange bundle format (.hgb/.hgh) ships in hgit-native. format_version stays 4 — nothing here changes what an existing byte means, only what a writer produces and how tolerant a reader is.

See docs/research/11-storage-and-exchange-1.9.md for the full campaign report (measured before/after, test/QEMU evidence, limitations), ADR 0018, ADR 0019, ADR 0020, and BUNDLE.md.

Verified on real TempleOS under QEMU: full regression suite, golden fixtures regenerated, in-guest hgit version confirms HGIT_VERSION 1.9.0.

Install: see INSTALL.md. hgit-bundle-1.9.0.zip is what the Chocolatey package downloads.

v1.8.9 - usable at the console, and installable (deb / brew / choco)

Choose a tag to compare

@VectorSophie VectorSophie released this 20 Sep 01:30

Usability: hgit's reports used to go only to a serial port - a person typing in the QEMU window saw nothing. Hgit("interactive"); now echoes them to the screen and turns AutoComplete off (the bundle launcher runs it); missing-file probes no longer print red errors. Bundle: refreshed TempleOS disk with hgit 1.8.9 (guest-verified by checksum; tools/build-bundle.py). Install: hgit_1.8.9_all.deb (sudo apt install ./hgit_1.8.9_all.deb), Homebrew tap VectorSophie/hgit, Chocolatey sources in packaging/chocolatey/ (not yet on the community feed). Verified on real QEMU: full + standing regression, screenshot evidence in experiments/126. Untested here: the brew/choco installs themselves (no macOS/Windows host).

v1.8.8 - v1.8.x series complete

Choose a tag to compare

@VectorSophie VectorSophie released this 20 Sep 00:54

Documentation-accuracy sweep and full regression pass. v1.8.x complete: ignore rules, attributes/modes, rename-aware and mode-aware merge, persistent conflicts with resolve/continue/abort/conflictdoc, integrity hardening. Repository format 4.

v1.8.7 - integrity and adversarial hardening

Choose a tag to compare

@VectorSophie VectorSophie released this 20 Sep 00:47

Repos from a newer hgit are rejected clearly; every OBJ_CONFLICT is shape-validated (corrupt/hostile archives are reported, not decoded blindly); check catches missing conflict dependencies; recovery via merge abort verified. New stable regression cases. Verified on real QEMU (probe 125) + full regression.

v1.8.6 - conflict DolDoc view and merge UX

Choose a tag to compare

@VectorSophie VectorSophie released this 20 Sep 00:38

hgit conflictdoc (DolDoc view of in-progress conflicts: text lines / binary / directory / absent, resolution suggested not chosen), MERGE_AUTO lines for auto-merged files, stable conflict indices across resolve. Verified on real QEMU (probe 124).

v1.8.5 - rename-aware merge

Choose a tag to compare

@VectorSophie VectorSophie released this 20 Sep 00:32

ADR 0017: entity-ID based rename detection in merge (rename+edit merges cleanly; ambiguous rename/rename refused). Verified on real QEMU (probe 123) + full regression.

v1.8.4 - conflict lifecycle completion

Choose a tag to compare

@VectorSophie VectorSophie released this 20 Sep 00:24

resolve to deletion (delete-vs-edit), conflicts shows base/ours/theirs evidence, resolution provenance in the merge commit message. Verified on real QEMU (probe 122).

v1.8.3 - conflicts as persistent repository data

Choose a tag to compare

@VectorSophie VectorSophie released this 20 Sep 00:19

ADR 0016: merge now persists real conflicts (OBJ_CONFLICT + Meta.HC state) instead of aborting. New: conflicts, resolve <idx> take-ours|take-theirs, merge continue, merge abort. status/check understand in-progress merges. format_version 4. Verified on real QEMU (probe 122) + full regression.

v1.8.2 - merge's own real 3-way mode merge

Choose a tag to compare

@VectorSophie VectorSophie released this 15 Sep 07:27

Closes the "mode-only changes" gap in docs/ROADMAP-v1.8.md's "Complete three-way merge" section, and the real TODO Merge.HC's own header comment used to carry explicitly.

Mode is now a wholly separate 3-way decision from content inside MergeTreesRecursive (ADR 0011/0015 follow-up): a file's bytes and its mode can each change independently, each surviving entity's mode resolved base/ours/theirs the same way content already is. A genuine mode-only conflict (both sides changed mode, differently) is reported and aborts the whole merge exactly like a content conflict, not silently guessed. No format change needed - reuses the exact has_attrs/attrs_hash mechanism ADR 0015 already defined.

Verified standalone first (experiments/121-merge-mode-3way/, real QEMU/TempleOS execution): a clean mode-only round trip resolves to MERGE_OK with hgit diff on the merge commit showing DIFF_MODE_CHANGED file.txt 0 -> 2; a genuine mode-only conflict resolves to MERGE_CONFLICT/MERGE_ABORTED with HEAD provably byte-unchanged and a clean hgit check afterward. Full 86+-probe regression suite re-run end-to-end, clean.

One honest, narrower limitation left open: a mode-only change on the side a file gets deleted from isn't itself detected as a conflict (the existing edit-vs-delete decision only ever consults content). Documented in Merge.HC's own header and docs/adr/0011-merge.md.

v1.8.1 - tracked file attributes and modes

Choose a tag to compare

@VectorSophie VectorSophie released this 14 Sep 05:01

A .hgitattributes file (same directory, same glob grammar as .hgitignore) declares a tracked file's real mode — TempleOS has no Unix permission bits or execute bit, so text/binary/executable are only ever set explicitly, never guessed for executable:

*.png binary
*.HC text,executable
build/* binary

Binary detection otherwise falls back to Git's own real NUL-byte-in-the-first-8000-bytes heuristic for any file no rule matches.

Mode is stored as a commit-level side-channel (a new OBJ_ATTRS object, entity-ID-keyed) rather than embedded in tree entries — a deliberate choice after measuring the alternative's real blast radius (8 files hand-parse tree-entry bytes; only 3 call CommitEncode). Costs nothing for a repo where every file is plain text and non-executable.

  • status/statustree and diff surface a pure mode change (no content edit) independently of the existing UNCHANGED/MODIFIED verdict: STATUS_MODE_CHANGED/DIFF_MODE_CHANGED <path> <old> -> <new>.
  • check validates the mode list's own referential integrity the same way it does every other object reference (a real gap found and fixed along the way: the reachability walk didn't know about attrs_hash at all, so every repo's own attrs object showed up as a false CHECK_DANGLING).
  • format_version bumped 2 → 3 — additive, no migration needed; an older commit correctly reports "no attrs" via a real bounds check, not a version branch.

Full design: docs/adr/0015-file-attributes-and-modes.md. Roadmap context: docs/ROADMAP-v1.8.md.