approval-engine/approval_engine
tegwick c93628a017 Let supersede() reissue an expired approval given a fresh window
expired stays a terminal exit from valid (state machine unchanged),
but supersede() now also accepts it as a source status when the
caller supplies a validity window, linking a new successor approval
to the expired original instead of requiring a caller to mint an
unlinked replacement from scratch. Without a fresh window, an expired
source still conflicts exactly as before.

The original's status becomes superseded (not left as a bare dead-end
expired) and superseded_by points at the successor, so the link is
documented rather than hidden -- informed-decision's overview already
renders this automatically, no changes needed there.

Prompted by the operator missing infd-20260927-b01's approval window
during today's key-cape login outage (APPROVAL-WP-0003).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: sonnet
Assistant-Process: 169987@bnt-lap001
Assistant-Session: 322ef1ef-9048-4021-8570-b6d6f6347999
2026-09-27 20:23:56 +02:00
..
__init__.py Implement approval engine production readiness 2026-09-02 00:52:04 +02:00
api.py Let supersede() reissue an expired approval given a fresh window 2026-09-27 20:23:56 +02:00
audit.py Heartbeat per event class, not per source 2026-09-10 20:36:21 +02:00
auth.py Implement approval engine production readiness 2026-09-02 00:52:04 +02:00
binding.py Implement the engine spine: claim, outbox, machine, API 2026-08-29 12:52:49 +02:00
cli.py Set the approval store tenant to exact tenant:platform 2026-09-06 22:33:50 +02:00
errors.py Implement approval engine production readiness 2026-09-02 00:52:04 +02:00
pep.py Harden the PEP harness and KeyCape registration request 2026-09-02 15:46:06 +02:00
store.py Let supersede() reissue an expired approval given a fresh window 2026-09-27 20:23:56 +02:00