docs(milestone): complete v0.5-live-assist — v0.1.13 tagged, milestone release, merged to main

v0.5 (Live Assist — on-the-job voice companion) milestone complete.
4 phases: P0 (pre-execution, v0.1.10) → P1 (assist core + guardrail,
v0.1.11) → P2 (integration + tech-debt + NFR, v0.1.12) → P3 (final
review + ship, v0.1.13 = milestone release).

16/16 REQs covered (3 ASSIST + 4 NFR + 9 IDEATE). 4 v0.6 backlog.
469 tests passed, 0 failed. 1 P0 fixed (guardrail processor safety).
8 P1+ flagged for v0.6. 8 v0.4 P1+ tech-debt addressed.
G-049 + G-067 grill MUSTs resolved. ESCALATION-01 (PIPEDA) OPEN for
human legal review before assist surface go-live.

---ci---
project: praxis
phase: 3
milestone: v0.5
status: complete
requirements:
  covered: [REQ-ASSIST-01, REQ-ASSIST-02, REQ-ASSIST-03, REQ-NFR-ASSIST-01, REQ-NFR-ASSIST-02, REQ-NFR-ASSIST-03, REQ-NFR-ASSIST-04, REQ-IDEATE-01, REQ-IDEATE-02, REQ-IDEATE-03, REQ-IDEATE-04, REQ-IDEATE-05, REQ-IDEATE-06, REQ-IDEATE-07, REQ-IDEATE-08, REQ-IDEATE-09]
  partial: []
---/ci---
This commit is contained in:
Praxis CI
2026-08-04 22:35:56 +00:00
parent ba928cf3b4
commit ec397f2c65
65 changed files with 11550 additions and 77 deletions
+16 -5
View File
@@ -142,21 +142,32 @@ class LLMProvider(ABC):
@dataclass
class GuardrailVerdict:
"""Verdict from a guardrail check (D-019)."""
"""Verdict from a guardrail check (D-019).
category values:
- ok / blocked_legal / blocked_financial / blocked_medical /
blocked_impersonation / blocked_off_role / blocked_pii (v0.1 CS guardrail)
- blocked_direct_script / blocked_imperative / blocked_false_authority /
coaching / neutral (v0.5 LiveAssistGuardrail — D-068)
"""
allowed: bool
reason: str = ""
filtered_text: str | None = None
category: str = "ok" # ok | blocked_legal | blocked_financial | blocked_medical |
# blocked_impersonation | blocked_off_role | blocked_pii
category: str = "ok" # see category values above
extra: dict[str, Any] = field(default_factory=dict)
@dataclass
class GuardrailContext:
"""Context passed to a guardrail check."""
"""Context passed to a guardrail check.
role: Literal["system", "user", "assistant", "debrief"] = "user"
role: 'system' | 'user' | 'assistant' | 'debrief' | 'assist' (v0.5 — REQ-IDEATE-02).
The 'assist' role is the LiveAssistGuardrail's context (in-loop guardrail
processor, post-LLM, pre-TTS).
"""
role: Literal["system", "user", "assistant", "debrief", "assist"] = "user"
scenario_id: str | None = None
session_id: str | None = None
turn_seq: int | None = None