Skip to content

Latest commit

 

History

History
75 lines (57 loc) · 3.38 KB

File metadata and controls

75 lines (57 loc) · 3.38 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.


[1.1.2] — 2026-08-30

Changed

  • Version bump with packaging corrections
  • pip install scyvera resolves to this release as latest stable
  • T8 warning now correctly emitted via logging module (scyvera.enforcer logger) instead of warnings.warn
  • T7 wildcard rejection enforced at JSON schema level in addition to Python load-time check — validate_contract() now catches wildcards independently of ContractEnforcer

[1.0.0] — 2026-08-30

Added — Runtime Enforcer (Step 3)

  • ContractEnforcer class: load, freeze, gate, audit, integrity verification
  • ContractEnforcer.gate(action_name, action_type) decorator — default-deny enforcement of declared side_effects and permissions
  • ContractEnforcer.verify_integrity() — SHA-256 check detects contract file replacement after load (T5)
  • ContractEnforcer.get_audit_log() — returns deep-copy frozen AuditEntry list (T9)
  • ContractVersionError — raised on schema version mismatch (T10)
  • ContractTamperError — raised on frozen object mutation or disk file replacement (T5, T9)
  • ApprovalPendingError — raised when action hits an approval_point; approval channel routing is caller's responsibility (stub, documented)
  • assert_gated(fn) utility for integration test suites (T4)
  • T7: wildcard permissions rejected at schema level AND Python load time
  • T8: irreversible side effect + empty approval_points emits logging.WARNING via scyvera.enforcer logger
  • 59-test suite covering all threat models T1–T10

Stable Public API (semver-protected from v1.0.0)

  • ContractEnforcer.load / gate / get_audit_log / verify_integrity / assert_gated
  • ContractViolationError, ContractTamperError, ApprovalPendingError, ContractVersionError, AuditEntry

What scyvera does NOT guarantee (documented in README)

  • Cannot prevent gate bypass if integrator calls ungated function directly (T4 — known limitation)
  • Cannot verify that gated function's internal behavior matches its declared permission string (T6 — known limitation)
  • Integrity check protects AFTER load only, not before (T5)

[0.3.0] — 2026-08-30

Added — Contract v1.1 Spec + lifecycle field (Step 2)

  • lifecycle field added to contract spec (optional, backward compatible)
  • v1.1 JSON schema at schemas/v1.1/contract.schema.json
  • Default applied by loader when lifecycle absent: {mode: request-response, initiation: human-only, resumability: stateless}
  • loader emits logging.WARNING when defaults are applied
  • irreversible boolean field on side_effects entries
  • RFC 0002 (lifecycle field) added to rfcs/
  • Three worked examples in spec: request-response, scheduled, persistent
  • T1/T2/T3 threat mitigations documented

Migration

  • All v1 contracts (no lifecycle field) remain valid
  • No breaking changes to validate_contract() or CLI

[0.2.0] — 2026-08-30

Fixed — Repository Cleanup (Step 1)

  • Canonical filename is now contract.yaml everywhere; contract.yml references removed
  • Loader raises actionable error on contract.yml: "Found contract.yml — rename to contract.yaml"
  • Backslash folder issue resolved (if it existed)

Migration

  • Rename any contract.yml files to contract.yaml