Feature: Domain Model Immutability — Plan and Action Identity Fields
  As a developer working with the CleverAgents domain model
  I want Plan and Action identity fields to be read-only after construction
  So that core identity invariants cannot be accidentally violated

  # ============================================================
  # Plan.identity.plan_id — read-only after construction
  # ============================================================

  Scenario: Plan identity plan_id is set correctly at construction
    Given I create a Plan with a known ULID plan_id
    Then the plan identity plan_id should match the known ULID

  Scenario: Plan identity plan_id cannot be reassigned after construction
    Given I create a Plan with a known ULID plan_id
    When I attempt to reassign the plan identity plan_id
    Then a frozen model error should be raised for plan_id

  Scenario: Plan identity root_plan_id is auto-resolved to plan_id when not provided
    Given I create a Plan without specifying root_plan_id
    Then the plan identity root_plan_id should equal the plan_id

  Scenario: Plan identity root_plan_id cannot be reassigned after construction
    Given I create a Plan with a known ULID plan_id
    When I attempt to reassign the plan identity root_plan_id
    Then a frozen model error should be raised for root_plan_id

  # ============================================================
  # Plan.timestamps.created_at — read-only after construction
  # ============================================================

  Scenario: Plan timestamps created_at is set at construction
    Given I create a Plan with a specific created_at timestamp
    Then the plan timestamps created_at should match the specified timestamp

  Scenario: Plan timestamps created_at cannot be reassigned after construction
    Given I create a Plan with a specific created_at timestamp
    When I attempt to reassign the plan timestamps created_at
    Then an AttributeError should be raised for created_at

  Scenario: Plan timestamps updated_at remains mutable after construction
    Given I create a Plan with a specific created_at timestamp
    When I update the plan timestamps updated_at to a new datetime
    Then the plan timestamps updated_at should reflect the new datetime

  Scenario: Plan timestamps strategize_started_at remains mutable after construction
    Given I create a Plan with a specific created_at timestamp
    When I set the plan timestamps strategize_started_at to a new datetime
    Then the plan timestamps strategize_started_at should reflect the new datetime

  # ============================================================
  # Action.namespaced_name.name — read-only after construction
  # ============================================================

  Scenario: Action namespaced_name name is set correctly at construction
    Given I create an Action with namespaced name "myorg/my-action"
    Then the action namespaced_name name should be "my-action"

  Scenario: Action namespaced_name name cannot be reassigned after construction
    Given I create an Action with namespaced name "myorg/my-action"
    When I attempt to reassign the action namespaced_name name
    Then a frozen model error should be raised for action name

  # ============================================================
  # Action.namespaced_name.namespace — read-only after construction
  # ============================================================

  Scenario: Action namespaced_name namespace is set correctly at construction
    Given I create an Action with namespaced name "myorg/my-action"
    Then the action namespaced_name namespace should be "myorg"

  Scenario: Action namespaced_name namespace cannot be reassigned after construction
    Given I create an Action with namespaced name "myorg/my-action"
    When I attempt to reassign the action namespaced_name namespace
    Then a frozen model error should be raised for action namespace

  # ============================================================
  # Mutable state fields remain mutable
  # ============================================================

  Scenario: Plan phase remains mutable after construction
    Given I create a Plan in STRATEGIZE phase
    When I update the plan phase to EXECUTE
    Then the plan phase should be EXECUTE

  Scenario: Plan processing_state remains mutable after construction
    Given I create a Plan in STRATEGIZE phase
    When I update the plan processing_state to PROCESSING
    Then the plan processing_state should be PROCESSING

  Scenario: Action state remains mutable after construction
    Given I create an Action with namespaced name "local/test-action"
    When I update the action state to archived
    Then the action state should be archived

  # ============================================================
  # NamespacedName frozen model — Plan context
  # ============================================================

  Scenario: Plan namespaced_name name cannot be reassigned after construction
    Given I create a Plan with namespaced name "local/my-plan"
    When I attempt to reassign the plan namespaced_name name
    Then a frozen model error should be raised for plan namespaced name

  Scenario: Plan namespaced_name namespace cannot be reassigned after construction
    Given I create a Plan with namespaced name "local/my-plan"
    When I attempt to reassign the plan namespaced_name namespace
    Then a frozen model error should be raised for plan namespaced namespace
