GOV-ONT-004 — Expose decision chronology
| Field | Value |
|---|---|
| Status | Open finding; source-verified |
| Severity | Medium |
| Components | sparqd/ontology, sparqd/oqullus |
| Associated issues | Not opened pending finding review |
Concrete observed case
Each approval or rejection is stored as a decision row. Proposal reads reduce that history to the latest decision per approver and omit decision time and the proposal's create, update, decision, and merge timestamps. Branch edits also delete tasks and decisions before reopening the proposal.
Expected condition
The UI distinguishes current effective review state from an append-only event timeline that records actor, time, branch revision, decision, comment, resets, and merge outcome.
Why it matters
Reviewers and auditors cannot reconstruct who changed a decision, when reviewed content changed, or why prior approvals ceased to apply.
Existing controls and workarounds
The database retains decisions until a branch edit resets the proposal. Direct database inspection is not a supported governance view and loses deleted rows.
Alternatives considered
- Recommended: append-only proposal events plus a derived effective status.
- Expose all existing decision rows and timestamps — useful interim step but does not preserve reset events after deletion.
- Keep only latest state — simple, but insufficient for governed review.
Component involvement
- Ontology backend owns immutable review events and response timestamps.
- Oqullus presents current state and chronology separately.
Reproduction and verification
Follow ONT-S014.
Resolution conditions
Close when repeated decisions and branch-edit resets remain attributable and ordered after reload, merge, and archival.
Validation and blockers
Persistence and response shaping are source-confirmed; live history is pending because the deployed database has no proposals or decisions.