Files
ss-tools/specs/020-task-reports-design/research.md
2026-02-23 10:18:56 +03:00

93 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Phase 0 Research: Unified Task Reports by Type
**Feature**: [`020-task-reports-design`](specs/020-task-reports-design)
**Input Spec**: [`spec.md`](specs/020-task-reports-design/spec.md)
**Related UX**: [`ux_reference.md`](specs/020-task-reports-design/ux_reference.md)
## 1) Normalizing heterogeneous task outputs into one report model
### Decision
Adopt a two-layer report model:
1. **Canonical Report Envelope** shared across all task types.
2. **Type-Specific Detail Block** preserved per task type (LLM verification/documentation, backup, migration, documentation).
### Rationale
This preserves a uniform list/filter/sort experience while avoiding data loss from specialized task outcomes. It also aligns with the specs requirement for consistent minimum fields and type-specific design.
### Alternatives considered
- **Single fully generic schema only**: rejected because rich type-specific context becomes flattened and less actionable.
- **Separate endpoints and UI per type**: rejected because it breaks unified-report UX goal and increases navigation friction.
---
## 2) Pagination/filter strategy at report-history scale
### Decision
Use server-driven pagination and filtering as source of truth, with optional client-side refinement for currently visible page.
### Rationale
Large historical datasets require bounded payload sizes and stable response times. Server-side filtering supports scalable queries and predictable UX for “find failed report quickly” scenarios.
### Alternatives considered
- **Client-only filtering over full dataset**: rejected due to high transfer/memory cost and slow initial load at scale.
- **Infinite scroll without explicit pagination metadata**: rejected due to weaker operational predictability and harder QA validation.
---
## 3) Unknown type and partial payload fallback semantics
### Decision
Define deterministic fallback rules:
- Unknown type → render neutral “Other/Unknown” profile.
- Missing fields → show explicit placeholder text (“Not provided”).
- Status normalization maps all backend states into a fixed view state set: Success, Failed, In Progress, Partial.
### Rationale
This directly supports UX error-recovery expectations and prevents broken/blank interfaces when upstream task payloads vary.
### Alternatives considered
- **Hide malformed/unknown reports**: rejected because it reduces visibility and can hide operational incidents.
- **Hard-fail rendering on missing fields**: rejected due to poor resilience and degraded operator trust.
---
## 4) RBAC/privacy in consolidated reporting
### Decision
Inherit existing task visibility and permission checks; do not broaden data exposure in this feature.
### Rationale
Consolidation can accidentally reveal cross-domain details. Reusing current auth boundaries avoids privilege escalation and keeps rollout low risk.
### Alternatives considered
- **Open read access to all reports**: rejected due to security/privacy risk.
- **Introduce new role system in this feature**: rejected as out of scope and high change risk for current release.
---
## 5) UX state to contract mapping strategy
### Decision
Map UX states from [`ux_reference.md`](specs/020-task-reports-design/ux_reference.md) into explicit module/API contracts using semantic tags:
- `@UX_STATE: Loading`
- `@UX_STATE: NoData`
- `@UX_STATE: FilteredEmpty`
- `@UX_STATE: Error`
- `@UX_STATE: Ready`
### Rationale
The project constitution and semantics standard require UX to be treated as contract logic, not decoration. Explicit state contracts reduce ambiguity for implementation and testing.
### Alternatives considered
- **Document states only in UX narrative**: rejected because it weakens enforceability and test traceability.
- **Encode states implicitly in code without contracts**: rejected due to lower semantic compliance and harder review.
---
## Consolidated Research Outcomes for Planning
- Canonical envelope + per-type details is the selected report modeling pattern.
- Server-side pagination/filtering is required for scalable history.
- Unknown/partial payloads must remain visible with fallback rendering.
- Existing RBAC boundaries remain authoritative for report visibility.
- UX states must be contract-bound in module definitions for implementation and QA traceability.