rag-service/openspec/specs/ocr-review-workflow/spec.md

4.4 KiB

OCR Review Workflow Specification

Purpose

Define authenticated review, atomic correction, activation, and retention.

Requirements

Requirement: Mandatory Authenticated Review

OCR versions MUST remain review_required and non-retrievable until approved. Status, review, images, approval, and rejection MUST require the administrator token.

Scenario: Reviewer inspects a candidate

  • GIVEN all documents passed the version gate
  • WHEN an authorized reviewer opens review
  • THEN it MUST show image, native text, raw OCR, boxes, confidence, differences, and risks

Scenario: Unauthorized or premature access

  • GIVEN credentials fail or the version is not reviewable
  • WHEN review or decision is requested
  • THEN it MUST reject the request without exposing artifacts or changing state

Requirement: Atomic Optimistic Corrections

Approval MUST validate candidateSha256, unique line identities, and every expectedLineSha256 before changes. Reviewed text SHALL be immutable.

Scenario: Valid corrections commit together

  • GIVEN hashes are current and correction targets are unique
  • WHEN approval is submitted
  • THEN all replacements MUST commit together with reviewer, time, and resulting hashes

Scenario: Stale or conflicting correction

  • GIVEN any candidate, line, identity, or box is stale or duplicated
  • WHEN approval is submitted
  • THEN the system MUST return 409 without corrections or state transition

Requirement: Approval and Activation Gate

Approval MUST cover the version, derive final hashes, and move review_required to indexing before chunking. Activation SHALL use Point 2 verification and the expected active version.

Scenario: Approved content becomes active

  • GIVEN corrections are valid and the expected active version is current
  • WHEN indexing and point verification succeed
  • THEN the new version MUST become active atomically and the previous one superseded
  • AND only reviewed content MAY be retrieved

Scenario: Active version changes during review

  • GIVEN another version activates during review
  • WHEN approved indexing completes
  • THEN the candidate MUST remain ready, return 409 ACTIVE_VERSION_CHANGED, and not replace it

Scenario: Reusable content already exists

  • GIVEN final content, fingerprint, and metadata match a reusable version
  • WHEN approval checks the active-version precondition
  • THEN the candidate MUST be rejected with DUPLICATE_REUSABLE_VERSION
  • AND only the existing version MAY be activated

Requirement: Rejection and Failure Isolation

Rejection MUST produce rejected, preserve temporary audit evidence, and generate no embeddings. Failed or rejected candidates SHALL never alter the active version.

Scenario: Reviewer rejects candidate

  • GIVEN a version is review_required
  • WHEN an authorized reviewer rejects it
  • THEN it MUST become rejected with audit data and no indexing

Requirement: Retention Safety

Private artifacts MUST use 0600 permissions and verifiable hashes. The system MUST retain review 30 days, failed/rejected artifacts 7 days, review images 7 days post-decision, OCR copies until transfer or 24 hours, and active artifacts until 30 days after supersession. Cleanup MUST be idempotent and never delete active versions.

Scenario: Review expires

  • GIVEN a version remains review_required for 30 days
  • WHEN daily retention runs exclusively
  • THEN it MUST become rejected with REVIEW_EXPIRED before removal

Scenario: Active artifacts are protected

  • GIVEN an active version is past a TTL
  • WHEN retention runs concurrently with review or purge
  • THEN its original, reviewed text, raw OCR, and manifest MUST remain
  • AND cleanup MUST not escape the version directory or expose a public URL

Scenario: Interrupted cleanup resumes

  • GIVEN deletion stopped after retention entered its deleting state
  • WHEN cleanup runs again
  • THEN deletion MUST resume safely and finish in the deleted state without affecting other versions

Requirement: Human-Approved Production Acceptance

The release MUST prove corrected content after approval; confidence SHALL NOT authorize activation.

Scenario: FacturaTech acceptance succeeds

  • GIVEN the real FacturaTech PDF has been reviewed and its 34 entries approved
  • WHEN the version becomes active and retrieval is queried
  • THEN all 34 entries and CBG04a, FAT07, DSAU08, and NSAV06 MUST be returned exactly