Releases: MacFall7/spine-lite-python
Phase 3 exit — v0.3.0a0
Feature-complete against the original three-phase plan.
Added
Disposition(closed StrEnum:ALLOW/DENY/ESCALATE)transition(Posture, ...) -> Posture— pure state transition, raisesPostureErroron illegal movesevaluate(Posture, ToolDefinition, Decision) -> Disposition— pure policy evaluationReceipt— frozen dataclass with deterministic SHA-256 content addressing- PreToolUse hook adapter (
spine_lite.hook) — stdin JSON in, decision JSON out, exit code signals allow/deny - Full CLI surface (
spine-lite version | validate-manifest | classify | hook) via Typer
Verification
- 209 / 209 tests passing
- 100% coverage on every runtime module (248 stmts, 30 branches, 0 misses)
mypy --strictclean across 19 source files- 9 hypothesis properties × 1,000 examples
- 7 subprocess E2E cases covering posture × tool × byte-stability
- 14/14 CI checks green on the merge commit
Design
Spine Lite is deterministic by design: no clocks, no randomness, no network, no LLM calls inside the runtime. Six-class effects taxonomy (READ / WRITE / NETWORK / EXECUTE / SPAWN / DESTRUCTIVE) on state × boundary × reversibility axes with ordinal precedence. Sibling project to M87-Spine-lite — see Porting Notes for the relationship.
Docs
Full Diátaxis-structured documentation at https://macfall7.github.io/spine-lite-python/
Phase 1 exit — v0.1.0a0
Initial release. Scaffold, taxonomy, public API, CI matrix, and documentation site.
Added
- Six-class effects taxonomy (closed StrEnum:
READ/WRITE/NETWORK/EXECUTE/SPAWN/DESTRUCTIVE) PRECEDENCEordinal precedence:DESTRUCTIVE>SPAWN>EXECUTE>NETWORK>WRITE>READmost_restrictive(effects)— returns highest-precedence effect from a set- Exception hierarchy rooted at
SpineLiteError - CLI surface (
spine-lite version) via Typer - Full Diátaxis-structured documentation site
Verification
- 35 / 35 tests passing
- 100% coverage on every runtime module (45 stmts, 4 branches, 0 misses)
mypy --strictclean across 13 source filesmkdocs build --strictclean- CI matrix: Python 3.11 / 3.12 / 3.13 × Linux / macOS / Windows
Design
Spine Lite is a deterministic policy and effects runtime for LLM tool calls. No clocks, no randomness, no network, no LLM calls inside the runtime itself. Sibling project to M87-Spine-lite; see docs/explanation/porting-notes.md for the relationship.
Docs
Phase 2 exit — v0.2.0a0
Manifest schema and classifier shipped from spec.
Added
Posture(closed StrEnum, 4 members) — enum lands; transitions arrive in v0.3.0a0Manifest,ToolDefinition(pydantic v2, frozen)parse_manifest()accepting dict / JSON string / JSON bytesToolCall,Decision(frozen + slotted + kw-only dataclasses)classify(tool_call, manifest) -> Decision— pure, deterministic
Verification
- 99 / 99 tests passing
- 100% coverage on every runtime module
mypy --strictclean- 6 hypothesis properties × 1,000 examples
Design note
This phase explicitly resolved the parity question with the M87-Spine-lite sibling project. The taxonomy here (READ / WRITE / NETWORK / EXECUTE / SPAWN / DESTRUCTIVE, ordinal precedence) is categorically different from the sibling's risk-score model; this is a sibling project, not a parity port. See docs/explanation/porting-notes.md for the full divergence record.