Home > Engineering > Mycelium > Git Design Scope
Git is constitutive to mycelium alongside AVRO. AVRO provides the language of articulation. Git provides the temporal axis — historicity, identity, integrity, the hard boundary, and the decentralised exchange between realities. Together with the fabric primitives, that is the full substrate.
Git provides capabilities that are drawn on across the architecture — at the fabric level, the management level, the cognitive level, the peer-to-peer level. The same capability may serve different needs at different levels, each level accessing it through its own language. The goal is not to add Git to mycelium but to discover how much of the architecture’s temporal life is already Git.
Git’s capabilities are not assigned to levels. They are available. Each level of the architecture brings its own needs and its own language to Git’s capability set, and finds its own use.
A single capability may serve multiple levels simultaneously. The staging area is a Git mechanism at the plumbing level, a gathering point at the management level, and a threshold of commitment at the cognitive level. Squash is a history rewriting operation, a consolidation act, and an act of forgetting. Clone is an object exchange, a management operation, and the birth of a new subject reality.
The design proceeds by laying Git’s capabilities open and mapping them against needs at every level — without predetermining where a capability is allowed to land. What appears to be separate concerns at different levels may turn out to be one Git capability accessed through different lenses.
Every design decision should be tested against: are we limiting a capability to one level when it could serve more? Are we building mechanism where Git already provides one?
The subject reality operates on cognitive principles — attention, memory, forgetting, conscious engagement, subconscious routine. Git’s temporal capabilities must be evaluated against how well they serve a subject reality that is alive in this sense.
Git’s conventional philosophy is to never lose anything — the append-only DAG, content-addressable integrity, the complete audit trail. A living subject reality needs the opposite capability alongside preservation: it needs to forget. Selective memory, progressive consolidation, detail fading over time, only the significant shape surviving.
Git provides mechanisms for both. The immutable object store preserves. History rewriting, squashing, shallow boundaries, and garbage collection allow forgetting. The design must use both — not as a tension to be resolved but as complementary aspects of a living memory.
The cognitive model from HAICC informs how Git’s capabilities are read at the higher levels:
Every design decision should be tested against: does this serve a living subject or an archive?
Approached with intelligence against the established architecture, mechanisms that appear distinct may turn out to be one thing expressed through Git’s capabilities at different levels.
The checkpoint and the commit. The dirty-to-settled transition and the staging area. The memory gradient and history rewriting. Selective recall and path-filtered log. Peer-to-peer exchange and push/fetch. Reality spawning and clone. These pairings may be more than analogy — they may be the same thing seen from two directions.
The design should actively look for these collapses. Every proposed mechanism should be tested against: is this already a Git capability used at the appropriate level?
What Git gives us, presented as capabilities available to all levels.
Four object types, all content-addressable and immutable once written:
Blob — opaque content identified by SHA-1 hash of content plus type header. Same content always produces the same hash.
Tree — a named collection of blobs and sub-trees. A directory snapshot at a point in time.
Commit — wraps a tree with parent links, timestamp, author, and message. Captures full tree state, not a diff. Parent links create a directed acyclic graph.
Tag — a named pointer to any object, optionally annotated with its own message, author, and timestamp.
Everything identified by hash. Once written, immutable. The object store is append-only at the physical level.
A mutable staging buffer between working state and the object store. Selective staging — choose what goes into the next commit. Multiple additions before a single commit. The only mutable structure in the core model.
Commits form a directed acyclic graph through parent references. Zero parents (root), one (normal), or multiple (merge). Encodes causal history — what came from what, not just temporal sequence.
Named pointers to objects. Branches advance with new commits. Tags stay put. HEAD points to the current ref. Lightweight — just files containing a hash. Movable, deletable, creatable at near-zero cost.
Creating a branch creates a new ref. No data copied. Work proceeds independently. Timelines diverge from a common ancestor.
Three-way merge using the common ancestor. Merge commits record convergence with multiple parents. Conflicts surface for resolution. Fast-forward when one timeline is strictly ahead.
Multiple working directories linked to the same repository, each with its own branch checked out. Shared object store, shared refs, independent working state and index.
DAG walking with composable filters:
Between any two commits, trees, working state versus index, index versus last commit. Content-level line-by-line diffs. Stat summaries per path.
Interactive rebase — pick, reword, squash, fixup, drop, reorder across a commit range.
Squash — collapse multiple commits into one. Detail gone, consolidated state remains.
Fixup — squash discarding the message.
Drop — remove a commit from the timeline.
Amend — modify the most recent commit.
filter-repo — rewrite entire history: remove paths, rename, transform across all commits.
Cherry-pick — copy a single commit to another timeline.
–depth N — only the last N commits.
–shallow-since=DATE — truncate at a date boundary.
–shallow-exclude=REF — exclude a specific ancestry line.
Deepening — incrementally add more history.
Unshallow — restore full history from a remote.
Graft points tracked in .git/shallow.
Swap one object for another transparently. All operations see the replacement. Stored as refs, pushable and fetchable. Original can be garbage-collected after replacement.
Arbitrary text attached to any object without changing its hash. Multiple namespaces. Stored as independent object tree. Viewable in log, editable, removable. Not pushed by default — explicit configuration required.
Scripts triggered at defined points: pre-commit, post-commit, pre-push, post-merge, pre-rebase, and others. Can validate, transform, reject, or trigger side effects.
Packing and pruning. Unreferenced objects pruned after configurable grace period. git gc --prune=now for immediate cleanup. Pack files use delta encoding. Physical deletion — the data is gone.
Local record of every ref movement. Survives rewriting operations. Configurable expiry. Recovery buffer.
Every clone is complete. No central server required. Push and fetch exchange objects peer to peer. Multiple remotes supported.
What the architecture needs, at each level, from temporal infrastructure. These needs are mapped against Git’s capabilities in the design areas that follow.
The commit as timestep. How fabric activity becomes remembered time.
History is not preserved uniformly. The subject reality has short-term memory, long-term memory, and forgetting.
The HAICC conscious/subconscious architecture shapes how Git’s capabilities are used at the cognitive level.
Where Git’s snapshot-based model doesn’t reach — high-frequency, high-volume activity.
“What happened to me” — the subject’s ability to query its own past.
Post-hoc metadata attached without altering the checkpoint.
Clone, branch, merge, fork, push, fetch, worktrees — the operations that constitute reality-level acts.
How Git’s object types relate to mycelium’s primitives and how the content-addressable store serves the architecture.
How the management layer operates Git internally.
Git’s native decentralisation serving P4.
isomorphic-git — pure JavaScript Git implementation for Node.js and browser environments.
Why isomorphic-git. Pure JavaScript, no native dependencies. Programmatic API with individual functions for each operation. Full interoperability with canonical Git — standard .git format. Same runtime as avsc (AVRO). Tree-shakeable. Active community maintenance.
Why JavaScript. Consistent with avsc choice. Same runtime, same dependency philosophy. Management layer operates both AVRO and Git through JavaScript libraries in the same process. No polyglot substrate.
Programmatic access. Plumbing-level operations available as function calls. The management layer operates Git through the same programming model it uses for everything else.
Interoperability. Standard .git format means canonical Git tooling works alongside. Development and debugging use any Git client.
Gaps to evaluate. History rewriting coverage (interactive rebase, squash, filter-repo) and garbage collection within isomorphic-git. These serve the memory gradient — consolidation and forgetting. If insufficient, options include extending the library, supplementing with canonical Git operations, or implementing directly against the object store.
The Git design should proceed from the capabilities outward to the needs, allowing the mapping to emerge rather than prescribing it.
Start with the checkpoint (area 1), because the commit as timestep is where Git most obviously meets the architecture. Then the memory gradient (area 2) and the attention-memory relationship (area 3), because these extend the temporal capabilities into the cognitive model. Then the high-frequency complement (area 4), because the boundary of Git’s reach must be understood. Then selective recall (area 5) and notes (area 6), because these are how the capabilities serve the subject’s experience of its own past. Then reality operations (area 7), the object model mapping (area 8), the management layer interface (area 9), and decentralisation (area 10). Implementation platform (area 11) informs the entire sequence.
At each step, apply the governing principles. The open mapping test: are we limiting a capability to one level when it could serve more? The living subject test: does this serve a living subject or an archive? The simplification test: is this already a Git capability used at the appropriate level?
© 2026 In Wonder - The World of Splectrum, Jules ten Bos. The conversation lives at In Wonder - The Conversation.