Changelog¶
All notable changes to this project will be documented in this file.
Unreleased¶
Bug Fixes¶
- Keep service tiers and output-only settings out of the pin key
- Drop a leftover draw for a boundary already covered
- Keep logprobs and usage reporting in the pin key
Performance¶
- Walk each branch of an unmerge once per re-key plan
Refactoring¶
- Keep each claim's merge path only in identity_claim_paths
[0.1.0] - 2026-10-13¶
Bug Fixes¶
- Make Upcast and ExtractFn real type aliases, relative root import
- Savepoints for nested transactions, crash-safe rebuild
- Close the replay contract holes
- Canonicalization edge cases, enforce the reserved namespace
- PinLedger accepts any conforming store; honest resolver docs
- JSON-concrete pin results, runtime replay-mode guard, floor stragglers
- Order-independent split folding, index the audit query
- Merges gather aliases; establish takes pin material
- The writer records its mints; re-keys compose across a batch
- Coalesce concurrent draws; key the whole request
- Coordinate the plain and streamed draws on one gate
- Draw outside the write lock, and four smaller review fixes
- Tier 3 could not reach a provider, and five more review findings
- Higher-order belief is derived, not stored — R28
- The view aliased a bound method, so nothing was guarded
- Review round 2 — a lesson applied by halves, and a test that proved its own negation
- The chronicle handed every party a private remark
- The update call's reading never reached a decision
- Send a misnamed clause back to the model, and run the direct route
- Address review on #17 -- seat checks before the table opens, and tighter contracts
- Run on Opus 5.5 and Sonnet 5.5, and keep prompt caching out of the pin key
- Draw the timeline's transport icons as one SVG set
- Give a long answer its own line in the Story view's cards
- A bottom line is one of three words, by schema
- Address review on #18 -- loopback-only UI, CSRF guard, failure logging, a11y
- A replayed batch re-lays the edges of a state it reuses
- Close the four bypasses review found
- Small pre-existing issues found writing the docs
- Replay and unmerge keep alias effects exact
- Refuse merging an already-merged entity; planner follows the store
- An unmerge follows forms a later merge of the survivor carried on
- BeliefFold takes a required durable flag
- Refuse owned-position folds inside an open transaction
- Record-mode replay draws into a PinLedger
- Drop announce from ReplayPins; cover streamed record mode
- An unmerge of the survivor gives back the claim still standing on it
- Replay refuses an old event version without upcasts=
- Refuse an async summariser before any work on the sync path
- StaleRead only when the gap holds an event the fold claims
- Ask the store whether the log reaches a slice, not an upcast read
- A successor must keep the range it supersedes
- An unmerge follows the rows its merge moved, not their names
- Keep session and user ids out of the pin key
- Only an established, unmerged entity survives a merge
- An unmerge's re-key rows name where the survivor stands now
- Redraw every unit when a failed batch is retried
Features¶
- Envelope, event-type registry, canonical serialization
- EventStore port, user_version migrations, SQLite adapter
- Upcast-on-read registry and EventReader
- ProjectionFold dispatch and watermark-guarded Projector
- Pin ledger, scratch lifecycle, builtin events
- ReplayPins — generation-replay with announced divergence
- Public API surface and milestone-1 acceptance
- Entities as events, with the registry as a fold
- Register every library event in one call
- Belief-id minting, the entity index, and identity's re-key seam
- The pin resolver gains an awaited twin
- The model call, pinned
- Add resolve_stream to the pin resolver
- Pin streamed model calls instead of refusing them
- Fold determinism is a declared property of the fold
- The anchoring discipline as a generative projection
- A negotiation demo with several believing parties
- Tier 3 exists, and it gates a release
- M8b — two agents, four rounds, and a mind read wrongly
- A model per role, and one role compared with the rest held fixed
- The demo takes a model per slot on the command line
- A recorded run on disk, in the log's own format
- Every route with a key, four checks each, and no green run that called nothing
- The harness runs on a real model, and a real recording replays with no key
- Log model calls, pins, appends and folds under
anagrapheus.* - A browser UI that shows the workings, and
justrecipes for the demo - A plain-language Story view, the UI's new default
- Pin the timeline controls under the header while scrolling
- Open a finished run at its first step
- Check second-order belief in both directions
- A functional predicate may declare the words its value can be
- Beliefs are a fold over the log, not a write beside it
- What a model is shown, built only from what its role was granted
- Key model settings that change the draw
- Withdraw a merge with an Unmerged decision
- An awaited catch-up path for generative folds
- Brief takes admit= and upto_seq=; timeline.is_bookkeeping
- Reconsolidate() and a store that refuses forks
Miscellaneous¶
- Scaffold project from cookiecutter-python-uv-library
- Use @opengsd/gsd-core in place of get-shit-done-cc
- Raise floor to 3.14, add pydantic, record package-shape decisions
- Bump the github-actions group with 7 updates
- Bump the python-uv group across 1 directory with 7 updates
- Bump MishaKav/pytest-coverage-comment
- Bump MishaKav/pytest-coverage-comment
Performance¶
- Find an unmerge's claims through an indexed path table
Refactoring¶
- Class-kwarg frozen config; explain the envelope fields
- Conventional terminology, RESERVED_NAMESPACE everywhere
- Rename watermark to position throughout
- Version the schema per component, not per file
- Stance is an opaque token ranked by an app ladder
- Folds no longer declare a schedule
Testing¶
- The suite, the acceptance story, and design note 03
- The suite, the acceptance story, and design note 04
- Fix a context test that passed by allocator accident
- Cover the streamed pin, and amend design note 04
- Prove anchor-replay, and record the layer in note 05
- Acceptance for M7, and record the demo in note 06
- A route also reads its key from TIER3_
_API_KEY - Read each route's key from the provider's own variable only
- Migrate a populated v1 projection to v2
Build¶
- Take doxastica as a dependency, retiring the pydantic-only line
- No upper bound on pydantic-ai
- No upper bounds on doxastica and pydantic
Style¶
- Fix a D205 docstring and a format nit missed before pushing
- Fix lint the gates skipped because the files were untracked