Changelog¶
All notable changes to this project will be documented in this file.
[0.2.0] - 2026-07-05¶
Bug Fixes¶
- Satisfy basedpyright-strict on Stance lt and SC2 test
Features¶
- Land Stance ordinal enum + required BeliefState field
- Thread stance through write spine, Protocol, and ladybug DDL
- Export Stance from the package root
Miscellaneous¶
- Remove archived v0.1.0 phase directories
- Mark two completed quick tasks status: complete
- Archive v0.2.0 milestone files
- Bump version to 0.2.0
Testing¶
- Prove stance byte-stable round-trip + default on both backends
- Prove contract-verbatim + get_scope_at stance reconstruction
- Widen stateful oracle to carry the Stance member (SC1)
- Prove the stance widening is non-vacuous (D-03, SC1)
- Exhaustive order-law enumeration for Stance (D-04/D-05)
- No-arithmetic closure guard for Stance (D-06)
- Quantify stance round-trip over list(Stance) x backend (D-08)
- Quantify contract-verbatim + get_scope_at over list(Stance) (STANCE-04/05)
- WR-01 mechanically verify FORMAL-03 conformance registry
Style¶
- Wrap stance-persistence comment/docstring lines to <=100 (ruff E501)
[0.1.0] - 2026-07-04¶
Bug Fixes¶
- Forbid extra fields on frozen models (WR-01) and make ImpactResult.reached an immutable tuple (WR-03)
- WR-01 enforce backend-blind import guard on ports.py too
- WR-02 widen traverse frontier to frozenset[UUID | str]
- WR-03 rename query_scope filter param to belief_filter
- Module-level import-purity scan in plan 02-03 + PATTERNS
- Unbreak core.py type-check now that LadybugBackend types resolve
- Annotate _value -> str so sorted() typechecks (DEF-02-02)
- WR-04 run full suite in ladybug-absent isolation CI job
- CR-01 WR-01 derive upsert MERGE key from label PK, exclude PK from SET
- WR-02 WR-03 coherent max_depth=0 traverse, runtime guards over asserts
- Resolve Open Questions marker + populate VALIDATION
- WR-01 make vacuous contract a true no-op (no Scope write)
- WR-02 assert exact BeliefState count in chain-immutability invariant
- WR-03/WR-04/WR-05 harden ladybug BackendPort interpolation + tenancy
- WR-01 read BeliefState PK from _PK_BY_LABEL in traverse
- WR-02 pin is_world boolean round-trip on production write path
- IN-01 reject non-empty edge props instead of dropping silently
- IN-03 centralize UUID7 ordering key into _order_key helper
- IN-02 DRY append/edge body into _append_state; IN-04 drop redundant return None
- WR-02 wrap get_impact traverse + re-fetch in one read unit_of_work
- WR-01 restore tenant's prior var_length cap, not literal default
- WR-03 raise on full-closure depth-ceiling hit instead of silent truncation
- IN-01 fail loud on reached/store divergence; IN-02 validate traverse direction on both backends
- WR-01 document single-call snapshot invariant in get_scope_at
- IN-01 extract _is_active_tail predicate for retracted-tail collapse
- IN-01 correct stale RED/unimplemented docstring in test_scope_at.py
- IN-02 reconcile stale Wave-0/plan-06-02 framing to present tense
- Pass --config .cliff.toml to git-cliff in CI; rm orphan changelog stub
- Cap ladybug full-closure traverse depth to avoid buffer-pool OOM
- Address PR #1 review findings
- Repair terminology.yaml and black-format how-to code blocks
- Normalize CHANGELOG.md trailing newline
- Blacken-docs format Cluedo tutorial code blocks
Features¶
- Add frozen pydantic taxonomy and typed exceptions
- Add public BeliefStore Protocol with UUID7 ordering contract
- Add DATA-01 import-purity guard and public re-export barrel
- Author LPG-primitive BackendPort Protocol
- Draft backend-port contract spec and distinctness guard
- Add BackendDependencyError and InMemoryBackend oracle
- MemoryCore engine + driver-blind factories + package exports
- LadybugBackend ownership, namespace guard, idempotent bootstrap
- Five LPG primitives + SC4 traverse confirmation in LadybugBackend
- Parametrized backend fixture + oracle-parity suite (D-05/FORMAL-06)
- Add reserved WORLD_SCOPE_ID constant (D-02)
- Add HAS_REVISION REL table + endpoint-aware add_edge (D-07)
- Scope + derived-current + hydrate helpers (SCOPE-01/02/03, CHAIN-01, D-01/D-02/D-06)
- Revise/expand/contract + get_revision_chain spine ops (OPS-01/02/03, CHAIN-02/03, HIST-02, D-03/D-04/D-05/D-07)
- Implement query_scope (group-by-belief max -> filter -> sort -> hydrate)
- Add keyword-only direction param to BackendPort.traverse + BACK-04
- Route in-memory traverse on direction via reverse-adjacency _in_edges
- Make ladybug traverse direction-aware via a 3-arrow flip
- Implement MemoryCore.add_edge passthrough (EDGE-01, D-06/D-07)
- Implement MemoryCore.get_impact (EDGE-02 cascade)
- Implement MemoryCore.get_scope_at temporal reconstruction
- Add PyPI-ready metadata to pyproject.toml (PKG-04)
- Relocate backend contract into docs_dir and add nav entry
Miscellaneous¶
- Add project config
- Add workflow.ai_integration_phase key
- Render cookiecutter scaffold under import name doxastica
- Pin runtime deps to ladybug + pydantic, add hypothesis to dev
- Add GitHub Copilot instructions to ignore .planning/
- Add doc-writer config and audit reports
- Strip leaked tool-call tags from .planning artifacts
- Rename GSD milestone v1.0 -> v0.1.0 to match PyPI release version
- Archive v0.1.0 milestone (roadmap, requirements, audit, retrospective)
- Remove REQUIREMENTS.md for v0.1.0 milestone (fresh for next milestone)
Refactoring¶
- Rename include_deprecated -> include_retracted (D-03)
- Factor status-agnostic _current_tail; _current delegates to it
- Extract pure _current_tails rows->tails helper (D-01a)
- Move factory classmethods to factories.py
- Remove factories layer for pure-DI construction
Testing¶
- Guard frozen-ness and closed taxonomy
- Extend import-purity to driver-blind core + memory (D-02)
- Add Wave-0 revision-spine behavior scaffold over both backends
- Add Hypothesis spine consistency machine + fix derived-current after contract
- Flip DEF-02-01 xfail to a passing core-routed regression
- Add failing Wave-0 query_scope behavior scaffold (both backends)
- Add failing reverse-direction (direction='in') parity cases
- Add failing add_edge mechanism tests (idempotency, closed enum, D-07 no-op)
- Add failing get_impact mechanism + property tests
- Add failing example tests for get_scope_at cut-rewind
- Operational-fold oracle + get_scope_at==fold property (D-07)
- Add AGM revision postulates to _SpineMachine (FORMAL-01, BACK-05)
- Add Hansson contraction postulates + FORMAL-03 registry (FORMAL-02/03, BACK-05)
- Register get_scope_at ≡ replay into FORMAL-03 conformance set
- Add Recovery strict-xfail + superseded-chain positives
- Two-scope divergence demo, one round-trip (FORMAL-05, BACK-05)
- Repoint factory callers to doxastica factories
- Repoint tests off removed factories layer
Build¶
- Demote ladybug to opt-in extra (D-03 Option B)
Ci¶
- Two-env CI + reverse CLAUDE.md dep constraint (D-03)
Style¶
- Wrap WR-02 comment to satisfy ruff E501
- Apply ruff format and fix .gitignore trailing whitespace