S59 · FRIDAY / Artaxias - protocol authorization
Declared state: built 2026-10-17 - every protocol resolves by index, codename or name; a spoken number is understood; failures back off and survive a restart but a correct password always works, so the owner cannot be locked out of his own machine; a one-time code is spent once. Second factor is optional and unset, so today the gate is password-only exactly as it was.
This is the repository plan and evidence, not a live health reading. A task marked done may still depend on credentials, devices, deployment or a newer acceptance test.
Dependencies
S58, S14, D-95
Tasks and gates
59.F1 · Numbered protocol registry: index and codename per protocol (01 SYSTEM_REBOOT, 02 VRAM_PURGE, 99 CLEAN_SLATE), resolvable by number or by name.
Tier F · done · Verification: hermetic-test
Gate: - `test_friday_protocols.py` - the existing 8 protocols resolve under both their name and their new index.
- hermetic-green · 2026-10-17 ·
bench/test_friday_protocols.py
59.F2 · Voice digit normalizer ('seven four two zero' -> 7420) shared by the passcode path and the protocol index.
Tier F · done · Verification: hermetic-test
Gate: - `test_friday_protocols.py` - spoken digits resolve the same as typed digits.
- hermetic-green · 2026-10-17 ·
bench/test_friday_protocols.py
59.F3 · TOTP (RFC 6238) as an OPTIONAL second factor, secret resolved per D-95 - never a literal, never in git.
Tier F · done · Verification: hermetic-test
Gate: - `test_friday_protocols.py` - the seed is read from secret resolution; the module contains no seed (D-102).
- hermetic-green · 2026-10-17 ·
bench/test_friday_protocols.py
59.F4 · Sentry: persisted failed-attempt counter, lockout after N tries, cooldown. Survives a restart, which an in-memory counter does not.
Tier F · done · Verification: hermetic-test
Gate: - `test_friday_protocols.py` - the count survives process restart, so lockout cannot be cleared by bouncing the process.
- hermetic-green · 2026-10-17 ·
bench/test_friday_protocols.py
59.F5 · Anti-replay for one-time codes that survives restart and has no bounded forgetting window.
Tier F · done · Verification: hermetic-test
Gate: - `test_friday_protocols.py` - the brief's used-set `.clear()` at 50 is the defect being closed (D-104.6); a code is spent once.
- hermetic-green · 2026-10-17 ·
bench/test_friday_protocols.py
59.R1 · The 8 shipped protocols resolve and run unchanged after an index is added to a working registry.
Tier R · done · Verification: hermetic-test
Gate: - `test_friday_protocols.py` plus the existing protocol gate - adding a numbering to a live password path is exactly how it silently stops matching.
- hermetic-green · 2026-10-17 ·
bench/test_friday_protocols.py
59.R2 · No protocol executes without a successful challenge, asserted at the launcher rather than at each call site.
Tier R · done · Verification: hermetic-test
Gate: - `test_friday_protocols.py` - asserted once, at the seam every protocol passes through, so a new protocol cannot skip it.
- hermetic-green · 2026-10-17 ·
bench/test_friday_protocols.py
HUD screen contracts
- Protocol vault · /agents/friday/protocols
- Challenge · /agents/friday/challenge
- Execution receipts · /agents/friday/executions
- Authentication health · /agents/friday/sentry
- Protocol readiness and drills · /agents/friday/readiness
- FRIDAY / Artaxias - protocol authorization · /systems/S59
All subsystems · Source: docs/systems-plan.json.