Releases: DazzleLib/dazzle-lib
Release list
v0.8.2 — the bedrock nucleus, subtypes, and rank addressing
dazzle-lib v0.8.2
Bedrock primitives for the DazzleLib stack: the Unified ↔ Groupable ↔ Continuum ↔ ContinuumSpace value ladder, protocols, and the rank/axis machinery every higher layer builds on.
What's New in v0.8.2 (the 0.8.1 + 0.8.2 pair)
The nucleus and framing — every ladder type knows its invariant seat
nucleus() returns the conserved center (the 0-seat's meaning); framing() names the perspective a continuum is read under. The {-1, 0, +1} thesis lands in code: a Groupable is {minus, plus, meaning}, and the meaning seat is addressable.
Continuum subtypes — the struct declares its shape
subtype ∈ {full | monopole | list} with sign-structure validation: full requires reaches on both sides of 0, monopole exactly one, list is the sanctioned home of truthful ordinals (a numeric NAME must equal its rank — the truth guard).
Continuum("visibility", ranks={"visible": 0, "silenced": -1, "hidden": -2}, subtype="monopole")Rank addressability
level_at(rank, nearest=) and rank_name(rank) — positions answer by number; anonymous rungs self-name by their rank spelling ("5/2"), and rename_level christens them later without moving anything.
Insertion without renumbering — or with it, side-aware
densify_between gains integer mediants and optional naming; shift_from(rank, by) renumbers one side only (the pivot's sign selects the side; the invariant seat is unmovable). Named collisions raise loudly; from_groupable declares subtype="full".
Test hardening (pre-tag additions)
PEP 440 .devN tails accepted without a phase marker; the densified-rank serialization seam documented as a repro (densify_between promotes whole-number mediants to Fraction, breaking JSON downstream — fix scheduled with the countable-christening work); the nucleus/rank-addressing human checklist ships in tests/checklists/.
Installation
pip install dazzle-libVersion History (0.8.x)
| Version | Key Change |
|---|---|
| v0.8.2 | Current — nucleus/subtypes/rank addressing + tester-findings fixes |
| v0.8.1 | nucleus()/framing(), level_at, the subtype field, side-aware shift_from (no standalone release) |
| v0.8.0 | The bedrock CONTRACT protocols — "bedrock declares, consumer adheres" (no standalone release) |
Earlier lines: v0.6.7 (the SH base-object redesign) · v0.1.0 (protocols, payload schemas, exception root).
Platform Support
| Platform | Status |
|---|---|
| Windows | Tested |
| Linux / macOS / BSD | Expected to work (pure Python, no platform calls) |
Requirements
Python 3.10+. Zero runtime dependencies.
137 tests passing at the tag.
v0.6.7 -- SH base-object redesign
The 0.6.x line completes the Scarcity-Hypothesis-grounded base-object redesign: the recursive ladder Unified → Groupable → Continuum → ContinuumSpace, closed under composition, with the four-quadrant wheel and the state/transition machinery built on top. The bedrock now ships the bones every dazzle-* library and aggregator composes on — pure, stdlib-only, side-effect-free by charter.
Highlights
ContinuumSpaceis closed under composition (0.6.0) — a dimension may be aContinuumor aContinuumSpace;compose()yields a space andnormal_form()folds nesting to the flat leaf product.{Continuum, ContinuumSpace, compose}is complete the way{+, ×, ^}is. Alignment became a property, not a requirement: an aligned space carries one merged presence spectrum; a product space holds independent, differently-scaled axes and refuses cross-axis navigation by design (scale-safety).is_alignedreports which.- The ladder floor (0.6.1) —
Groupable(the{minus, plus}dual that is an axis's bounds) +Unified(the0_agpre-cut form, implicitly a Groupable). Invertibility is the floor; nothing is one-way. - Continuum bridges (0.6.2) —
poles(),densify_between()(insert a named rung at the mediantFraction),Continuum.from_groupable(), and theRungValuealias. Method-additive; un-densified continua stay byte-identical. - The four-quadrant wheel (0.6.3) —
ContinuumSpace.quadrants(a1, a2) → QuadrantView: the SH-cycle four-phase wheel as a pairwise view over any two axes of the N-ary space (never a structural 2-axis limit).quadrants()/hidden_at()/agreement_diagonal()/disagreement_diagonal()/tau_steps(). Transition.kind(0.6.4, fixed 0.6.6) — the lateral / generative / one-way / refused vocabulary bridge over the existingReversibility, with a completeness guard so a new member can't go unmapped.- Serialization floor (0.6.5) —
to_dict/from_dict+SCHEMA_VERSIONonGroupable+Unified(lossless round-trip). - The inward/outward symmetry (0.6.7) —
Continuum.fibers(a per-rung INWARD sub-structure) + the unifiedchildren()/walk()/fold(): one child-relation, total over the ladder (a space's children are its axes OUTWARD, a continuum's are its fibers INWARD, a Groupable/Unified is a leaf). The recursive core, finalized.
Compatibility
- Backward-compatible — the aligned-spectrum path and existing primitives are byte-identical; new capabilities are method/field-additive (empty defaults).
- Charter-pure — stdlib-only, no I/O, no effects (enforced by
tests/test_charter.py).
Docs
docs/the-ladder.md— the base-object model (Unified/Groupable/Continuum/ContinuumSpace, aligned vs product, the signed invariant-bearing zero, fibers).docs/the-quadrant-wheel.md—QuadrantView+ the polar/quadrant geometry it projects.
Full changelog: see CHANGELOG.md (0.6.0 → 0.6.7).
v0.1.0 - The Bedrock: Protocols, Payload Schemas, Exception Root
dazzle-lib v0.1.0
The DazzleLib stack's bedrock: shared Protocols, TypedDict payload schemas, and the exception root. Types only -- by charter this package contains no I/O, no path handling, no platform probing, and no behavior, forever.
This is Phase F of the DazzleLib stack plan under the frozen architecture contract.
What's in v0.1.0
- Protocols --
Viewable(summary()/__str__) andSerializable(to_dict/from_dict/to_json,SCHEMA_VERSION): structural,runtime_checkable, nothing is forced to subclass. "The dict is the interface; objects know how to become dicts." - Payload schemas --
FileMetadataDict,TimestampsDict,WindowsMetadataDict,UnixMetadataDict,LinkTargetDict,HashResultDict: the cross-layer TypedDict shapes, mirroring what dazzle-filekit actually produces. - Exception bedrock --
DazzleErrorroot +PathIdentityError/FileOperationError/LinkError/PreserveErrordomain bases: one catchable root for the whole stack. DazzleDataMixin-- derivesto_json/summary/__str__from yourto_dict.- Day-one guards -- api-stability.md with the locked surface, an import-stability canary, and the charter test that fails on any behavior-bearing or non-stdlib import (red-green verified).
Installation
pip install dazzle-libRequirements
Python 3.9+ · zero dependencies · all platforms (platform support)
What adopts it next
dazzle-filekit 0.3.0 (#15) and dazzle-unctools 0.2.0 (UNCtools#3) in the stack's P1 "foundations refresh", then the dazzle-linklib and dazzle-preservelib extractions.