Releases: Guardantix/doc-lattice
Releases · Guardantix/doc-lattice
Release list
v2.0.0
Added
reconcilenow commits multi-file updates as one conflict-detecting durable transaction, recovers
interrupted work automatically before real runs, and provides recovery-only--recovermode;
initprints the corresponding transaction-artifact ignore patterns.- Empty ATX headings such as
#and##are now recognized and receive the same empty GitHub
slug thatgithub-sluggergenerates. - Document symlinks whose targets remain inside the project root are now supported. Aliases to the
same resolved document are loaded once, while external targets are skipped with a warning and
reconcile revalidates containment before writing.
Changed
- Documentation ownership is consolidated: README.md owns the user contract, ARCHITECTURE.md owns
durable decisions and module boundaries, CLAUDE.md routes contributors and agents, CHANGELOG.md
owns history and migrations, and roadmap.md contains future direction only. - Internal:
doc_lattice.cliis now a package with a frozen per-invocation runtime, focused
command adapters, centralized output and error handling, and command-mirrored CLI tests. Runtime
behavior is unchanged. - Internal: Markdown heading recognition and GitHub-compatible slug generation now pass through a
documented adapter pinned tomarkdown-it-py==4.2.0andgithub-slugger@2.0.0. The slug-strip
and JavaScript Unicode 17 lowercase and contextual-casing compatibility data is generated from
upstream. Section spans and the cache schema are unchanged, but existing version-2 load caches
are rebuilt so parser-derived anchors and spans use the new adapter. Rare headings whose casing
data was absent from Python Unicode 15.1 now receive the upstream-compatible section id. - Internal: the load cache module is now a phase-separated
doc_lattice/cache/package
(schema/codec, store, lookup, run state). No user-facing behavior change; the cache file
format is unchanged.
Fixed
- Markdown files that open YAML frontmatter without a closing
---now fail with a
source-naming tool error (exit 2) across cached and uncached loads instead of being silently
omitted from the lattice. Existing version-1 load caches are rebuilt.
Removed
- BREAKING (2.0): Removed the unsupported
binding_layersconfiguration key. Migration:
delete the key from 1.x configs; there is no replacement, andlint's fixed authority ladder
is unchanged. Strict configuration now rejects the key. - BREAKING (2.0): Removed the silent
--jsonalias fromcheck,lint,impact,
reconcile, andlinear;impact,reconcile, andlinearnow accept--format human|json.
Migration: replace--jsonwith--format json.--indentnow requires an effective
--format json, and the former--json/--format githubconflict rule is gone along with
the alias. - Internal: removed the singular
section_spanhelper in favor of the existingsection_spans
API. - Deleted completed design specs and implementation plans after recording their durable Linear,
load-cache, and Markdown compatibility decisions in ARCHITECTURE.md. Also deleted the duplicate
code-conventions guide and incomplete build log; their owners are CLAUDE.md and CHANGELOG.md.
Version control retains the implementation history.
v1.0.1
Fixed
graphMermaid output now assigns each node a collision-free identifier. Distinct node ids
that sanitized to the same Mermaid-safe token previously merged into one graph node.- Heading anchor parsing now recognizes
{#marker}only as a trailing heading marker
(optionally followed by an ATX closing#sequence). An anchor-like token in the middle of
heading text is no longer mistaken for the heading's explicit anchor.
v1.0.0
Added
- Publish release wheels and source distributions to PyPI through GitHub Actions Trusted
Publishing, with no stored PyPI credential.
Changed
- Generated pre-commit and CI gates install an exact
doc-lattice==1.0.0PyPI requirement
instead of cloning and building a tagged Git revision. - Release retries distinguish the current tagged commit from an ordinary unversioned merge,
making GitHub Release and PyPI publication safe to resume after a partial failure. - Source distributions contain only package source, tests, license, README, build metadata, and
Hatchling's required.gitignore.
v0.9.0
Changed
- BREAKING: the project is renamed from game-lattice to doc-lattice. The engine was never
game-specific; the name now matches its general purpose. In one release this renames the
repository (https://github.com/Guardantix/doc-lattice, with GitHub redirects from the old
URL), the distribution and package (doc-lattice/doc_lattice), the CLI executable
(doc-lattice), the config file (only.doc-lattice.ymlis recognized; no fallback), and
the opt-in load-cache location (<cache_home>/doc-lattice/; old cache directories are
orphaned and safe to delete). Doc sets themselves need no edits; lattice frontmatter
(id,derives_from,authority,seen) is unchanged.
Migration (v0.8.x to v0.9.0)
Nothing breaks until you bump your pin: checked-in gates pin a tag
(uvx --from git+.../game-lattice@v0.8.0 game-lattice ...) and GitHub's rename redirect keeps
that resolving indefinitely. Upgrading the pin to v0.9.0 requires, in one commit:
- Rename
.game-lattice.ymlto.doc-lattice.yml(contents unchanged). - Regenerate the checked-in pre-commit hook and CI workflow (re-run
doc-lattice init
codegen, or by hand update the repo URL, the@v0.9.0pin, and the executable name
game-latticetodoc-latticein each invocation). - Any Python code importing
game_latticeswitches todoc_lattice(the package is not on
PyPI and no import consumers are known; listed for completeness).
v0.8.0
Added
- Opt-in incremental load cache: set
cache_keyin.game-lattice.ymlto skip re-parsing
unchanged docs across runs and git worktrees, with byte-identical output to an uncached run by
default;cache_trust_stat: trueadds a faster stat tier for read-only commands under the
documented mtime caveat, andreconcilealways verifies content (#28). check,lint,impact, andlinearaccept--indent Nwith JSON output (--json, or the
equivalent--format jsononcheckandlint), and the global--no-coloroption and the
NO_COLORenvironment variable both explicitly disable colored output, including the styling on
help and usage-error text even when a terminal-forcing environment variable is set (#20).check --format githubandlint --format githubemit escaped GitHub Actions error
annotations with repo-relative file paths so findings attach inline to the offending doc in
the pull request diff, while preserving the existing gate exit codes; both commands also accept
--format human|json, and--jsonremains the JSON alias (#18).
Changed
- Moved
check,lint, andimpactJSON builders beside their result types and centralized their
human console output in a dedicated report renderer, leaving the CLI as dispatch-only wiring
(#29). - Centralized CLI
ProjectErrorhandling behind the shared tool-error exit path (#30). - Internal performance:
checkandreconcilememoize target-content hashes within each run,
avoiding repeated section extraction and hashing for edges that share a target (#25). - Reduced repeated load-path work by counting document lines once, reusing safe YAML loaders, and
sharing newline normalization between section parsing and hashing (#27). - Moved reconcile phase-1 rewrite planning into the pure reconcile module via an injected reader
(#31).
v0.7.0
Added
check --only STATE(repeatable) filters human and JSON output by edge state; the exit code
still reflects every edge (#19).graph --format jsonemits a machine-readable node and edge dump that matches the Mermaid and
DOT edge collapsing (#21).impact --depth Nbounds the reverse walk, andimpact --jsonentries now carry adepth
field (#22).reconcile --dry-runpreviews the plan without writing, andreconcile --jsonemits a
machine-readable plan for both dry and real runs (#17).- The Linear client retries transient HTTP 429 and 5xx failures with bounded backoff, honoring
Retry-Afterup to a 30 second cap (#24). - The version-sync guard now also checks README pinned install refs (
game-lattice@vX.Y.Z)
against__version__(#34). - The release job now publishes a GitHub Release for each tag it cuts, with the body taken from
the matching## [X.Y.Z]CHANGELOG section;scripts/extract_release_notes.py(pure core
version_check.changelog_section) extracts it and fails the release if that section is missing
or empty (#47).
Changed
graph --formatnow rejects unknown formats with exit 2 instead of silently rendering
Mermaid (#21).- Ancestor recording in the loader is a single stack pass instead of a quadratic scan (#26).
- CI runs the code-quality job on both Python 3.13 and 3.14 (#33).
Removed
- Unused
datetime_utilshelpers (local_now,parse_iso,format_iso);utc_nowremains the
single sanctioned current-time entry point (#35).