Apply the same fix as the Behave steps: construct TieredFragment with
direct keyword arguments and use post-construction assignment for the
optional last_accessed field, eliminating the need for dict unpacking
and the associated type:ignore suppression.
ISSUES CLOSED: #1183
Replace dict[str, object] unpacking with direct keyword construction
and post-construction assignment for the optional last_accessed field.
This eliminates the Pyright arg-type error without type suppression,
complying with CONTRIBUTING.md's strict no-type-ignore policy.
ISSUES CLOSED: #1183
Add Behave BDD scenarios and Robot Framework integration tests that
capture bug #1152: _enforce_hot_budget() permanently deletes hot-tier
fragments via del self._hot[oldest_id] instead of demoting them to the
warm tier. Similarly, evict_lru() permanently deletes via del store[fid].
The specification (§Plan Lifecycle ACMS Actions) describes a downward
lifecycle ("Hot context archived to warm") that requires demotion, not
destruction.
Two Behave scenarios tagged @tdd_expected_fail @tdd_issue @tdd_issue_1152:
- Budget-evicted fragment should be demoted to warm, not deleted
- evict_lru-evicted fragment should be demoted to warm, not deleted
Two Robot Framework tests mirror the Behave scenarios with a Python
helper script for subprocess isolation.
All 11 nox sessions pass (lint, format, typecheck, security_scan,
dead_code, unit_tests, integration_tests, docs, build, benchmark,
coverage_report at 97%).
ISSUES CLOSED: #1183