Skip to content

pkgutil: formalize and enforce state invariants #7

Description

@sighook

Issue: Implicit invariants not encoded in API

Problem

Core invariants exist but are implicit:

  • db_open() must precede most operations
  • db_commit() required for persistence
  • packages must reflect filesystem reality

These are not enforced -> misuse is easy.

Proposal

Add explicit state machine:

enum class state {
  uninitialized,
  opened,
  dirty
};

Enforce:

  • db_open() -> state = opened
  • mutating ops -> state = dirty
  • db_commit() -> state = opened

All methods assert valid state transitions.

Optional

  • debug mode: invariant verification pass
    • scan filesystem vs DB

Acceptance criteria

  • invalid call sequences throw
  • lifecycle clearly documented
  • invariant violations detectable

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    Fields

    No fields configured for Task.

    Projects

    Status
    Tools

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions