Feature: Change model coverage boost
  Target uncovered lines in src/cleveragents/domain/models/core/change.py:
  - Line 268: DELETE branch of ChangeEntry.has_integrity_hashes
  - Lines 487, 491, 499, 503: InvocationTracker Protocol method bodies
  - Lines 560, 566, 570, 574, 578: ChangeSetStore Protocol method bodies

  # ---- ChangeEntry.has_integrity_hashes DELETE branch (line 268) ----

  Scenario: DELETE entry with before_hash reports full integrity
    Given a DELETE ChangeEntry with before_hash "sha256:abc123"
    Then the entry has_integrity_hashes should be true

  Scenario: DELETE entry without before_hash reports missing integrity
    Given a DELETE ChangeEntry without before_hash
    Then the entry has_integrity_hashes should be false

  # ---- InvocationTracker Protocol default method bodies (lines 487-503) ----

  Scenario: InvocationTracker protocol methods are callable with default bodies
    Given a bare InvocationTracker subclass instance
    When I call track on the protocol with a ToolInvocation
    Then track should return None
    When I call get_invocations on the protocol with plan_id "plan-proto"
    Then get_invocations should return None
    When I call get_invocations_for_skill on the protocol with plan_id "plan-proto" and skill "s1"
    Then get_invocations_for_skill should return None
    When I call get_changes on the protocol with plan_id "plan-proto"
    Then get_changes should return None

  # ---- ChangeSetStore Protocol default method bodies (lines 560-578) ----

  Scenario: ChangeSetStore protocol methods are callable with default bodies
    Given a bare ChangeSetStore subclass instance
    When I call start on the store protocol with plan_id "plan-store"
    Then start should return None
    When I call record on the store protocol with changeset_id "cs1" and a ChangeEntry
    Then record should return None
    When I call get on the store protocol with changeset_id "cs1"
    Then protocol get should return None
    When I call get_for_plan on the store protocol with plan_id "plan-store"
    Then get_for_plan should return None
    When I call summarize on the store protocol with changeset_id "cs1"
    Then summarize should return None
