Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
284 commits
Select commit Hold shift + click to select a range
347ca1a
formal: inventory executable variable-width tests
dylon Sep 3, 2026
c82d8f5
formal: join declaration and coverage inventories
dylon Sep 3, 2026
7bebe51
formal: bind ledger ownership and applicability
dylon Sep 3, 2026
dd417aa
formal: record proof artifact metadata
dylon Sep 3, 2026
2d10960
test: cover canonical codec invariants
dylon Sep 3, 2026
3af8d87
test: cover UTF-8 and canonical equality laws
dylon Sep 3, 2026
18345b6
test: cover vocabulary identity invariants
dylon Sep 3, 2026
63b18dc
test: cover interning lifecycle invariants
dylon Sep 3, 2026
a8ddb8a
test: cover snapshot and id-view laws
dylon Sep 3, 2026
e72eaae
test: cover interning descriptors and bijections
dylon Sep 3, 2026
86edd86
test: cover foundational interning laws
dylon Sep 3, 2026
8e66f00
test: cover publication and recovery laws
dylon Sep 3, 2026
f7bcadc
test: cover remaining vocabulary lifecycle laws
dylon Sep 3, 2026
b9c5a31
test: cover term fiber publication witnesses
dylon Sep 3, 2026
c0bdb9d
test: cover allocation state laws
dylon Sep 3, 2026
25910fa
test: cover logical observation laws
dylon Sep 3, 2026
a61343f
test: cover family profile matrix laws
dylon Sep 3, 2026
59d244f
test: cover profile and consumer refinement laws
dylon Sep 3, 2026
871ae91
test: cover direct numeric profile laws
dylon Sep 3, 2026
d7e493b
test: cover ULEB semantic adapter laws
dylon Sep 3, 2026
2b6af5a
test: cover open and certified profile laws
dylon Sep 3, 2026
8232ed5
test: cover vocabulary temporal invariants
dylon Sep 3, 2026
4b47b1e
test: cover remaining formal codec and interning laws
dylon Sep 3, 2026
74ac016
ci: allow exact dependency versions published on master
dylon Sep 3, 2026
1c31e53
test: format variable-width harness
dylon Sep 3, 2026
75bbde3
formal: support distro Coq logical imports
dylon Sep 3, 2026
6b6bcee
ci: align formal tools and lint harness
dylon Sep 3, 2026
7bd759d
docs: refresh eviction pipeline diagram
dylon Sep 3, 2026
7f7ed4c
formal: use portable map_length lemma
dylon Sep 4, 2026
900a9f1
docs: align eviction diagram with CI renderer
dylon Sep 4, 2026
287fbfc
formal: use portable list length lemmas
dylon Sep 4, 2026
c0b20f4
formal: normalize portable list length proofs
dylon Sep 4, 2026
4d516a8
formal: replace remaining list length aliases
dylon Sep 4, 2026
6404ac7
formal: use portable reverse-length lemma
dylon Sep 4, 2026
f4ffe5c
ci: fetch immutable compatibility baseline on shallow checkout
dylon Sep 4, 2026
1d5787f
ci: bind Julia docs to local package source
dylon Sep 4, 2026
b7c6357
ci: resolve Julia sibling packages together
dylon Sep 4, 2026
5d69040
ci: develop Julia docs packages together
dylon Sep 4, 2026
f6e516a
fix: use current Documenter strictness options
dylon Sep 4, 2026
66922d8
fix: verify compatibility fixture commits strictly
dylon Sep 4, 2026
01c9584
fix: resolve canonical interop sibling in compatibility gate
dylon Sep 4, 2026
6b6b458
feat: add arbitrary-width canonical ULEB128 atoms
dylon Sep 4, 2026
fe71152
feat: provide zero default for ULEB atoms
dylon Sep 4, 2026
36527a0
feat: expose borrowed ULEB128 views
dylon Sep 4, 2026
5633d95
feat: support canonical ULEB payload digits
dylon Sep 4, 2026
376d46c
feat: define reusable variable-width codec contract
dylon Sep 4, 2026
8d7c293
feat: parse borrowed ULEB atoms from streams
dylon Sep 4, 2026
f31a867
feat: attach stable identity to variable-width codecs
dylon Sep 4, 2026
c6bc44a
feat: add bounded u64 ULEB fast path
dylon Sep 4, 2026
b15a6af
feat: expose allocation-free ULEB payload iteration
dylon Sep 4, 2026
c7dab14
feat: iterate concatenated ULEB atoms safely
dylon Sep 4, 2026
15d18fb
feat: add owned arbitrary-width atom sequences
dylon Sep 4, 2026
50ed212
feat: add shared fixed-width atom profiles
dylon Sep 4, 2026
ed3fbb1
feat: add generic fixed-profile atom sequences
dylon Sep 4, 2026
d02cae0
feat: expose logical atom streams for profiles
dylon Sep 4, 2026
d809dde
test: harden fixed-profile sequence boundaries
dylon Sep 4, 2026
54c92ba
feat: expose sequence profile metadata
dylon Sep 4, 2026
b6ee5e6
feat: add capsule-local arbitrary atom interning
dylon Sep 4, 2026
a89f301
feat: add interned logical ID sequences
dylon Sep 4, 2026
1620bd7
feat: expose zero-copy interned sequence resolution
dylon Sep 4, 2026
cfbe560
feat: validate interned sequences against vocabulary
dylon Sep 4, 2026
3a98d3b
feat: bind interners to explicit generations
dylon Sep 4, 2026
447e6ba
feat: bind interned sequences to vocabulary generations
dylon Sep 4, 2026
5474e53
feat: expose generation binding predicate
dylon Sep 4, 2026
7cc89f4
feat: add variable codec prefix decoding contract
dylon Sep 4, 2026
e51eaa7
refactor: generalize variable atom sequences over codecs
dylon Sep 4, 2026
f66c715
docs: clarify little-endian magnitude normalization
dylon Sep 4, 2026
25d107f
feat: expose direct logical atom slices
dylon Sep 4, 2026
2315580
feat: add stable built-in profile descriptors
dylon Sep 4, 2026
e840dd0
feat: canonicalize profile names
dylon Sep 4, 2026
069ea38
feat: bind atom profiles to canonical kinds
dylon Sep 4, 2026
c8e9d30
feat: require exact profile identity versions
dylon Sep 4, 2026
9100c4d
feat: preserve legacy profile name aliases
dylon Sep 4, 2026
7c20515
feat: expose unit-generic dynamic dawg profiles
dylon Sep 4, 2026
c5bf7e4
feat: complete generic dawg read parity
dylon Sep 4, 2026
1736a24
feat: add DynamicDawgU32 alias
dylon Sep 4, 2026
6bb2937
feat: add generic dawg sorted batch construction
dylon Sep 4, 2026
c4f06d9
feat: add deterministic generic dawg batch builder
dylon Sep 4, 2026
81add19
feat: add generic dawg valued batch construction
dylon Sep 4, 2026
c288b1c
feat: add generic dawg clear operation
dylon Sep 4, 2026
1a80437
feat: expose generic dawg deterministic entries
dylon Sep 4, 2026
644e189
feat: coordinate interned vocabulary and ID sequences
dylon Sep 4, 2026
db05c35
feat: add canonical ULEB interned sequence alias
dylon Sep 4, 2026
2cd93f1
fix: distinguish poisoned vocabulary locks
dylon Sep 4, 2026
18e8cfd
feat: add explicit u64 interned carrier
dylon Sep 4, 2026
0c3b80c
feat: accept profile sequences in generic dawg
dylon Sep 4, 2026
9d3fdc5
feat: expose canonical factory profile metadata
dylon Sep 4, 2026
228c4a5
feat: expose container profile descriptors
dylon Sep 4, 2026
c92dedd
feat: complete profile-aware dawg operation parity
dylon Sep 4, 2026
5ed4d76
fix: enforce read-only interned ID views
dylon Sep 4, 2026
2d967c2
fix: expose fallible vocabulary ID allocation
dylon Sep 4, 2026
bb4dbaf
feat: expose deterministic interned ID entries
dylon Sep 4, 2026
a017257
feat: expose interned vocabulary generation
dylon Sep 4, 2026
e2ed94f
feat: expose canonical binding profile descriptors
dylon Sep 4, 2026
d9820d8
fix: keep generic dawg clear available across features
dylon Sep 4, 2026
3364640
feat: format canonical profile identities
dylon Sep 4, 2026
0db576a
feat: validate interned ID sequence generations
dylon Sep 4, 2026
e07d1a3
feat: build DATs from logical profile sequences
dylon Sep 4, 2026
dcf05fe
feat: build Unicode SCDAWGs from profile sequences
dylon Sep 4, 2026
3e7d907
feat: build Unicode suffix automata from profile sequences
dylon Sep 4, 2026
293023c
feat: construct generic DAWGs from profile sequences
dylon Sep 4, 2026
c5839bb
feat: construct profiled DAWGs with mapped values
dylon Sep 4, 2026
711769c
feat: construct DATs from profiled entries
dylon Sep 4, 2026
f91201c
feat: construct persistent U64 tries from profiles
dylon Sep 4, 2026
d1bdf0f
feat: construct persistent suffix families from profiles
dylon Sep 4, 2026
711471e
feat: preserve values in persistent profile constructors
dylon Sep 4, 2026
45263df
feat: construct persistent char ARTs from profiles
dylon Sep 4, 2026
68508bd
feat: expose persistent ART raw-byte insertion
dylon Sep 4, 2026
41e739e
feat: expose persistent ART raw-byte removal
dylon Sep 4, 2026
ea0ea6c
feat: add PathMap profile constructors
dylon Sep 4, 2026
1b25f22
test: cover PathMap profile constructors
dylon Sep 4, 2026
d2bd7e1
test: cover profiled SCDAWG mapped entries
dylon Sep 4, 2026
a89f5ab
feat: expose PathMap raw-byte operations
dylon Sep 4, 2026
571554d
feat: construct bijective maps from profiles
dylon Sep 4, 2026
292e19e
feat: expose raw-byte DAT value lookup
dylon Sep 4, 2026
3ef8420
feat: expose scalar-unit DAT value lookup
dylon Sep 4, 2026
80a016e
feat: add named profiled DAWG aliases
dylon Sep 4, 2026
1b6f890
feat: expose values through interned sequence dictionaries
dylon Sep 4, 2026
65e39b3
feat: expose profiled DAWG value lookup
dylon Sep 4, 2026
7578b16
feat: expose DAT profile value lookup
dylon Sep 4, 2026
33eafd9
feat: expose PathMap profile value lookup
dylon Sep 4, 2026
2433dd9
feat: expose persistent U64 profile value lookup
dylon Sep 4, 2026
0ac0dd2
feat: add suffix automaton profile value APIs
dylon Sep 4, 2026
e4ef38d
feat: expose SCDAWG profile value lookup
dylon Sep 4, 2026
2206ef9
feat: expose persistent suffix profile value lookup
dylon Sep 4, 2026
ea0653e
feat: expose persistent suffix profile value lookup
dylon Sep 4, 2026
056d0e5
feat: expose bijective profile value lookup
dylon Sep 4, 2026
490470f
feat: expose PersistentARTrieChar profile lookup
dylon Sep 4, 2026
edd4ad9
feat: add boundary-safe ULEB128 DAWG
dylon Sep 4, 2026
a2d5c38
feat: add boundary-safe DAT ULEB profile
dylon Sep 4, 2026
27c3d30
feat: export variable-width dictionary profiles
dylon Sep 4, 2026
1bf942f
feat: add PathMap ULEB profile boundary
dylon Sep 4, 2026
bdcc35a
feat: complete DAT ULEB wrapper basics
dylon Sep 4, 2026
9a02249
feat: add validated encoded ULEB lookup seams
dylon Sep 4, 2026
858cae3
feat: expose PathMap ULEB enumeration and counts
dylon Sep 4, 2026
5574040
feat: expose DAT ULEB logical enumeration
dylon Sep 4, 2026
ded5e69
fix: preserve unvalued entries in ULEB exports
dylon Sep 4, 2026
db86099
feat: re-export PathMap ULEB profile
dylon Sep 4, 2026
a37fb70
fix: check interned ID conversion before lookup
dylon Sep 4, 2026
ab31002
feat: expose lossless interned atom snapshots
dylon Sep 4, 2026
cf59431
feat: add variable-width UTF-8 scalar profile
dylon Sep 4, 2026
452fd49
feat: expose UTF-8 profile in prelude
dylon Sep 4, 2026
b10d3d5
feat: add byte-backed UTF-8 DynamicDawg profile
dylon Sep 4, 2026
46e0547
feat: add byte-backed UTF-8 DAT profile
dylon Sep 4, 2026
f9032ae
feat: add byte-backed UTF-8 PathMap adapter
dylon Sep 4, 2026
f3d133b
feat: complete UTF-8 adapter parity operations
dylon Sep 4, 2026
e2995d9
docs: generalize profile decoder error documentation
dylon Sep 4, 2026
21625f2
feat: add encoded removal to UTF-8 DAWG
dylon Sep 4, 2026
a40aae8
feat: expose UTF-8 adapters through dictionary factory
dylon Sep 4, 2026
6ce1711
feat: add u64 ULEB interning specialization alias
dylon Sep 4, 2026
8a06134
docs: expose interning aliases in prelude
dylon Sep 4, 2026
9b5ff9a
feat: add persistent ULEB128 boundary adapter
dylon Sep 4, 2026
e9b1860
feat: add persistent ULEB create and open constructors
dylon Sep 4, 2026
8bd05a4
feat: expose checked persistent ULEB mutations
dylon Sep 4, 2026
c492558
feat: add persistent UTF-8 boundary adapter
dylon Sep 4, 2026
18d2b8f
docs: expose persistent profile adapters in prelude
dylon Sep 4, 2026
4651dfb
fix: preserve persistent ULEB traversal errors
dylon Sep 4, 2026
8019347
fix: preserve persistent UTF-8 traversal errors
dylon Sep 4, 2026
731417d
feat: add persistent profile bulk constructors
dylon Sep 4, 2026
8da93c2
refactor: name coordinated interning snapshot rows
dylon Sep 4, 2026
7728bd1
feat: expose checked persistent profile counts
dylon Sep 4, 2026
bfd8ac0
fix: fail closed on persistent profile emptiness errors
dylon Sep 4, 2026
224e1ea
feat: add typed ULEB factory seam
dylon Sep 4, 2026
9d20915
feat: export typed ULEB factory types in prelude
dylon Sep 4, 2026
d21facf
feat: add stable ULEB backend display names
dylon Sep 4, 2026
8e6a295
feat: expose ULEB profile metadata from factory container
dylon Sep 4, 2026
a8c8ec5
feat: expose encoded ULEB queries from factory container
dylon Sep 4, 2026
dc8f0d9
test: reject malformed encoded ULEB queries
dylon Sep 4, 2026
0c7794f
feat: support zero-copy encoded ULEB insertion
dylon Sep 4, 2026
948f5b5
perf: validate ULEB sequences without allocation
dylon Sep 4, 2026
69b4dfc
formal: add machine-readable variable-width invariant ledger
dylon Sep 5, 2026
a488d58
formal: complete invariant ledger schema
dylon Sep 5, 2026
89c8f75
formal: enrich source-derived conformance ledger schema
dylon Sep 5, 2026
a8ce693
test: validate conformance ledger status and artifacts
dylon Sep 5, 2026
cc050cc
chore: keep formal verifier artifacts off tmpfs
dylon Sep 5, 2026
319f992
formal: expose complete conformance ledger schema
dylon Sep 5, 2026
a3ff84f
chore: keep formal tool temporary files off tmpfs
dylon Sep 5, 2026
367a243
feat: support arbitrary-width atoms in generic profiles
dylon Sep 5, 2026
5fc2a79
api: export arbitrary-width profile type
dylon Sep 5, 2026
3881e99
fix: preserve AtomProfile method compatibility
dylon Sep 5, 2026
807d065
feat: bridge generic and dictionary ULEB sequences
dylon Sep 5, 2026
70e8f69
feat: expose shared ULEB profiles on DynamicDawg
dylon Sep 5, 2026
29d0250
feat: expose shared ULEB profiles on DoubleArrayTrie
dylon Sep 5, 2026
246c736
feat: expose shared ULEB profiles on PathMap adapter
dylon Sep 5, 2026
9ac82e8
feat: expose shared ULEB profiles on persistent ART
dylon Sep 5, 2026
0b0875b
feat: accept shared profiles in interned dictionaries
dylon Sep 5, 2026
13363e5
feat: construct ULEB dictionaries from shared profiles
dylon Sep 5, 2026
6e313ff
feat: expose shared UTF-8 profiles on DynamicDawg
dylon Sep 5, 2026
9096042
feat: expose shared UTF-8 profiles on DAT and PathMap
dylon Sep 5, 2026
5a61906
feat: expose shared UTF-8 profiles on persistent ART
dylon Sep 5, 2026
4a48a3a
feat: add UTF-8 aliases for suffix families
dylon Sep 5, 2026
e54614e
feat: export UTF-8 suffix automaton aliases
dylon Sep 5, 2026
5bb95ac
perf: preallocate shared profile encodings
dylon Sep 5, 2026
7285201
docs: correct PathMap snapshot concurrency contract
dylon Sep 5, 2026
5a41f8c
docs: remove stale PathMap locking claims
dylon Sep 5, 2026
32e5ae4
docs: align PathMap integration concurrency guidance
dylon Sep 5, 2026
bee8614
fix: distinguish positive and mutant ledger coverage
dylon Sep 5, 2026
39fd0a2
feat: record proof-only ledger exceptions explicitly
dylon Sep 5, 2026
24419b7
feat: link proof-only exceptions to boundary evidence
dylon Sep 5, 2026
f53d438
feat: expose exact F64 profile boundary semantics
dylon Sep 5, 2026
400d0d0
docs: clarify F64 raw-bit ordering contract
dylon Sep 5, 2026
49a36a6
feat: add immutable vocabulary snapshots
dylon Sep 5, 2026
0043eab
feat: expose coordinated vocabulary snapshots
dylon Sep 5, 2026
b5e0e3c
feat: support validated encoded ULEB removal
dylon Sep 5, 2026
d084e4f
feat: expose DynamicDawg F64 bit specialization
dylon Sep 5, 2026
433e1de
feat: support validated encoded UTF-8 insertion
dylon Sep 5, 2026
b2bc65d
feat: add checked encoded ULEB insertion to persistent ART
dylon Sep 5, 2026
d6fac72
feat: add checked encoded UTF-8 insertion to persistent ART
dylon Sep 5, 2026
da39f40
feat: support validated encoded UTF-8 insertion in PathMap
dylon Sep 5, 2026
828de9b
feat: validate interned sequences from snapshots
dylon Sep 5, 2026
35222f7
feat: add allocation-free snapshot ID resolution
dylon Sep 5, 2026
4b71175
feat: expose interned F64 bit aliases
dylon Sep 5, 2026
f3dcab4
fix: export DynamicDawg F64 profile
dylon Sep 5, 2026
23f1e44
fix: distinguish interned ID carrier exhaustion
dylon Sep 5, 2026
e5b62dc
test: cover u32 ID sequence exhaustion
dylon Sep 5, 2026
32d31db
feat: add UTF-8 DAT encoded value lookup
dylon Sep 5, 2026
0ca22ae
feat: add UTF-8 PathMap encoded value lookup
dylon Sep 5, 2026
323d13e
feat: add persistent encoded value lookups
dylon Sep 5, 2026
99236ee
feat: add DynamicDawg UTF-8 encoded value lookup
dylon Sep 5, 2026
ffd1853
fix: make sequence interning transactional
dylon Sep 5, 2026
0f7bb47
fix: keep duplicate interning transactional
dylon Sep 5, 2026
bee8afe
feat: add unit-preserving profiled bijective map
dylon Sep 5, 2026
e4c8dd1
fix: serialize profiled bijective writers
dylon Sep 5, 2026
dd53f34
feat: support removal in profiled bijections
dylon Sep 5, 2026
bfac1d8
feat: expose profile sequence vocabulary APIs
dylon Sep 5, 2026
d38bd9f
chore: expose profiled bijections in prelude
dylon Sep 5, 2026
118a480
test: cover concurrent profiled bijective writers
dylon Sep 5, 2026
c155432
feat: add coherent profiled bijective snapshots
dylon Sep 5, 2026
ac041ea
test: property-check profiled bijection laws
dylon Sep 5, 2026
9f50372
test: exercise persistent profile vocabulary API
dylon Sep 5, 2026
661fb8b
test: verify persistent profile checkpoint reopen
dylon Sep 5, 2026
debb972
feat: preserve mapped values in ULEB factory
dylon Sep 5, 2026
70679a6
feat: model dictionary topology independently of profiles
dylon Sep 5, 2026
48f9120
feat: add stable dictionary family identifiers
dylon Sep 5, 2026
5979026
feat: add validated serializable dictionary descriptors
dylon Sep 5, 2026
96b4c64
feat: make binding profile capability discovery explicit
dylon Sep 5, 2026
f72e3c4
feat: add profile-typed zipper combinator adapter
dylon Sep 5, 2026
97049ee
feat: add profile-checked dictionary container
dylon Sep 5, 2026
c99af27
feat: expose persistent vocabulary profile metadata
dylon Sep 5, 2026
e8fa11c
feat: expose persistent profile adapter metadata
dylon Sep 5, 2026
8489cb0
feat: expose persistent suffix profile metadata
dylon Sep 5, 2026
ba108b9
feat: expose interned profile metadata
dylon Sep 5, 2026
9b69ea6
feat: expose direct metadata on variable-width wrappers
dylon Sep 5, 2026
16f9d1c
feat: expose metadata on legacy dictionary surfaces
dylon Sep 5, 2026
30d8f86
feat: expose metadata on suffix dictionary families
dylon Sep 5, 2026
2b114d9
feat: expose profile metadata on generic DAWG core
dylon Sep 5, 2026
589ea82
feat: export profile metadata through prelude
dylon Sep 5, 2026
641e736
docs: specify variable-width profile boundaries
dylon Sep 5, 2026
7020bc8
test: update pathmap backend availability count
dylon Sep 5, 2026
4f38134
test: make feature suite resource-safe and correct expectations
dylon Sep 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 54 additions & 1 deletion .github/actions/checkout-dev-siblings/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,38 @@ runs:
"$remote" "$event_ref" >/dev/null 2>&1
then
selected_ref="$event_ref"
else
elif [ "$repo" = "vinary-tree-interop" ]; then
# Prefer the exact public version declared by this checkout's
# path dependency when no coordinated development branch exists.
# This keeps development branches flexible while preventing a
# stale sibling default (for example RC4) from satisfying an
# exact RC6 requirement.
required_version="$(
sed -nE \
'/^[[:space:]]*vinary-tree-interop[[:space:]]*=/{s/.*version[[:space:]]*=[[:space:]]*"=([^" ]+)".*/\1/p;}' \
"$GITHUB_WORKSPACE/Cargo.toml" | head -n 1
)"
tagged_ref="v$required_version"
if [ -n "$required_version" ] && \
git ls-remote --exit-code \
"$remote" "refs/tags/$tagged_ref" >/dev/null 2>&1
then
selected_ref="$tagged_ref"
elif [ -n "$required_version" ] && \
git ls-remote --exit-code --heads \
"$remote" master >/dev/null 2>&1
then
# The release branch may publish an exact version on master
# before creating a version tag. Select master only as an
# explicit fallback; the post-checkout package-version audit
# below remains authoritative and rejects mismatches.
selected_ref=master
elif [ -n "$required_version" ]; then
echo "ERROR: $repo requires $tagged_ref from Cargo.toml, but that upstream ref is unavailable" >&2
exit 1
fi
fi
if [ -z "$selected_ref" ]; then
selected_ref="$development_ref"
fi
fi
Expand All @@ -83,6 +114,28 @@ runs:
"https://github.com/vinary-tree/$repo.git" "$dest"
echo "::endgroup::"
fi
if [ "$repo" = "vinary-tree-interop" ]; then
required_version="$(
sed -nE \
'/^[[:space:]]*vinary-tree-interop[[:space:]]*=/{s/.*version[[:space:]]*=[[:space:]]*"=([^" ]+)".*/\1/p;}' \
"$GITHUB_WORKSPACE/Cargo.toml" | head -n 1
)"
if [ -n "$required_version" ]; then
actual_version="$(
awk '
/^\[package\]$/ { in_package=1; next }
/^\[/ { in_package=0 }
in_package && /^[[:space:]]*version[[:space:]]*=/ {
gsub(/[[:space:]]*"/, "", $3); print $3; exit
}
' "$dest/Cargo.toml"
)"
if [ "$actual_version" != "$required_version" ]; then
echo "ERROR: $repo ref $selected_ref declares $actual_version, but Cargo.toml requires $required_version" >&2
exit 1
fi
fi
fi
done
echo "Sibling crates available under $parent:"
ls -1d \
Expand Down
12 changes: 8 additions & 4 deletions .github/workflows/bindings-conformance.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,14 +76,18 @@ jobs:
mkdir -p target/julia-ci-env
julia --project=target/julia-ci-env -e '
using Pkg
Pkg.develop(path=ENV["GITHUB_WORKSPACE"] * "/../vinary-tree-interop/bindings/julia/VinaryTreeInterop")
Pkg.develop(path=ENV["GITHUB_WORKSPACE"] * "/bindings/julia/Libdictenstein")
Pkg.develop([
PackageSpec(path=ENV["GITHUB_WORKSPACE"] * "/../vinary-tree-interop/bindings/julia/VinaryTreeInterop"),
PackageSpec(path=ENV["GITHUB_WORKSPACE"] * "/bindings/julia/Libdictenstein")
])
Pkg.test("Libdictenstein")
'
julia --project=bindings/julia/Libdictenstein/docs -e '
using Pkg
Pkg.develop(path=ENV["GITHUB_WORKSPACE"] * "/../vinary-tree-interop/bindings/julia/VinaryTreeInterop")
Pkg.develop(path=ENV["GITHUB_WORKSPACE"] * "/bindings/julia/Libdictenstein")
Pkg.develop([
PackageSpec(path=ENV["GITHUB_WORKSPACE"] * "/../vinary-tree-interop/bindings/julia/VinaryTreeInterop"),
PackageSpec(path=ENV["GITHUB_WORKSPACE"] * "/bindings/julia/Libdictenstein")
])
Pkg.instantiate()
include("bindings/julia/Libdictenstein/docs/make.jl")
'
Expand Down
60 changes: 57 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -199,9 +199,9 @@ jobs:
- uses: taiki-e/install-action@cargo-llvm-cov
- name: Run coverage
run: |
cargo llvm-cov --all-features --branch \
cargo +nightly llvm-cov --all-features --branch \
--lcov --output-path lcov.info
cargo llvm-cov report --branch \
cargo +nightly llvm-cov report --branch \
--cobertura --output-path cobertura.xml
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
Expand Down Expand Up @@ -355,6 +355,59 @@ jobs:
TLA_JAVA_HEAP: "3g"
run: prlimit --as="$FORMAL_MEM_LIMIT_BYTES" --rss="$FORMAL_MEM_LIMIT_BYTES" -- bash scripts/verify-formal-correspondence.sh

# -----------------------------------------------------------------
# Variable-width family/profile gate. This is the exact preimplementation
# gate for the committed Rocq/TLA+ family-refinement source tuple, including
# safe models and every required negative control. GitHub-hosted runners do
# not expose a user systemd bus, so the verifier uses prlimit here while
# retaining systemd-run caps for local execution.
# -----------------------------------------------------------------
variable-width-formal:
name: Variable-width formal gate
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: ./.github/actions/checkout-dev-siblings
- uses: ocaml/setup-ocaml@v3
with:
ocaml-compiler: "5.2"
- uses: actions/setup-java@v5
with:
distribution: temurin
java-version: "21"
- name: Install Rocq and TLA+ tools
run: |
sudo apt-get update
sudo apt-get install -y curl ripgrep util-linux
# Rocq 9.1.1 is distributed in opam through the compatibility
# package name [coq]; pinning the version still selects the Rocq
# toolchain and avoids Ubuntu's older apt package.
opam install --yes coq.9.1.1
eval "$(opam env)"
echo "$(opam var bin)" >> "$GITHUB_PATH"
curl -L \
https://github.com/tlaplus/tlaplus/releases/latest/download/tla2tools.jar \
-o tla2tools.jar
sudo mkdir -p /opt/tla
sudo mv tla2tools.jar /opt/tla/tla2tools.jar
sudo tee /usr/local/bin/tla2sany >/dev/null <<'EOF'
#!/usr/bin/env bash
exec java -Xmx"${TLA_JAVA_HEAP:-512m}" -cp /opt/tla/tla2tools.jar tla2sany.SANY "$@"
EOF
sudo tee /usr/local/bin/tlc >/dev/null <<'EOF'
#!/usr/bin/env bash
exec java -Xmx"${TLA_JAVA_HEAP:-512m}" -cp /opt/tla/tla2tools.jar tlc2.TLC "$@"
EOF
sudo chmod +x /usr/local/bin/tla2sany /usr/local/bin/tlc
- name: Run capped variable-width formal gate
env:
VARIABLE_WIDTH_FORMAL_RESOURCE_CONTROL: external
VARIABLE_WIDTH_FORMAL_TIMEOUT_SECONDS: "7200"
VARIABLE_WIDTH_TLC_JAVA_OPTIONS: "-Xms64m -Xmx512m -XX:+UseParallelGC"
run: bash scripts/verify-variable-width-formal.sh
- name: Run invariant-derived reference harness
run: prlimit --rss=2147483648 -- cargo test --manifest-path formal-verification/Cargo.toml --test variable_width_formal_harness

# -----------------------------------------------------------------
# Miri unsafe-boundary checks. Runs on nightly because `cargo miri`
# is a nightly component.
Expand Down Expand Up @@ -394,12 +447,13 @@ jobs:
env:
CARGO_BUILD_JOBS: "2"
FORMAL_MEM_LIMIT_BYTES: "8589934592"
run: prlimit --as="$FORMAL_MEM_LIMIT_BYTES" --rss="$FORMAL_MEM_LIMIT_BYTES" -- cargo miri setup
run: prlimit --as="$FORMAL_MEM_LIMIT_BYTES" --rss="$FORMAL_MEM_LIMIT_BYTES" -- cargo +nightly miri setup
- name: Run Miri-gated correspondence harness
env:
CARGO_BUILD_JOBS: "2"
FORMAL_MEM_LIMIT_BYTES: "8589934592"
FORMAL_RESOURCE_CONTROL: external
FORMAL_MIRI_TOOLCHAIN: nightly
RUN_MIRI: "1"
TLA_JAVA_HEAP: "3g"
run: prlimit --as="$FORMAL_MEM_LIMIT_BYTES" --rss="$FORMAL_MEM_LIMIT_BYTES" -- bash scripts/verify-formal-correspondence.sh
Expand Down
6 changes: 5 additions & 1 deletion bindings/julia/Libdictenstein/docs/make.jl
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,11 @@ DocMeta.setdocmeta!(Libdictenstein, :DocTestSetup,
makedocs(
modules=[Libdictenstein],
sitename="Libdictenstein.jl",
strict=true,
# Documenter 1.x removed the legacy `strict` keyword. An empty
# `warnonly` list preserves fail-closed documentation diagnostics, while
# `checkdocs=:all` retains strict API coverage checking.
warnonly=Symbol[],
checkdocs=:all,
doctest=true,
pages=[
"Guide" => "index.md",
Expand Down
5 changes: 4 additions & 1 deletion docs/algorithms/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ The Dictionary Layer is the family of dictionary backends provided by **libdicte

This layer abstracts over different data structures (tries, DAWGs, double-array tries) through common traits, allowing you to choose the best backend for your specific use case while maintaining a consistent API.

For the topology/profile split, canonical UTF-8 and ULEB128 boundaries, and
interned-ID identity rules, see [variable-width logical profiles](variable-width-profiles.md).

## Architecture

<img src="../diagrams/algorithms-backend-family.svg" alt="The Dictionary Layer trait API (Dictionary, MappedDictionary, DictionaryNode) sits above three in-memory backend families - Trie, DAWG, and Suffix Automaton; the Trie family holds DoubleArrayTrie (the recommended default) and DAT-Char (UTF-8), and the DAWG family holds DynamicDawg." width="70%"/>
Expand Down Expand Up @@ -559,7 +562,7 @@ For concurrent writes, dictionaries have different strategies:
|-----------|----------|--------|-------|
| DoubleArrayTrie | `Persistent` | Rebuild + atomic swap | Append-only via builder |
| DynamicDawg | `InternalSync` | Direct mutation | Internal RwLock |
| PathMapDictionary | `InternalSync` | Direct mutation | Internal RwLock |
| PathMapDictionary | `ArcSwap` copy-on-write | Clone, transform, and CAS-publish an immutable root | Readers take one snapshot and never block; competing writers retry from the winning root |

## Advanced Topics

Expand Down
Loading