Ctrl K
ComunidadGuías…

specs/011-mylar-modern-tagger/acceptance.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Acceptance matrix

Every row needs executable evidence before its activation gate. First-increment unit
proof does not satisfy real-package, native, final-image or live gates.

| ID | Gate | Cases | Required evidence |
|---|---|---|---|
| R1 | Process foundation | Success, nonzero, missing binary, bad cwd, timeout, output flood, parent exits with child holding pipes | Bounded output/deadline; direct child reaped; same-group descendants stopped; sanitized repr |
| M1 | Metadata foundation | Volume 1/year, Unicode, annual/variant fields, multiple arcs, partial original/explicit pairs, mismatched counts, missing values, comma ambiguity | Explicit overrides, no fabricated identity, matched arc positions |
| M2 | Metadata foundation | Existing notes/web/CBL-adjacent XML, pages/bookmarks, unknown fields, malformed/oversize/DTD XML | No implicit loss; precise rejection; repeat reconciliation idempotent |
| C1 | Real CLI | Exact pinned runtime version, exit 1 version banner, unavailable/wrong version, malformed success output | Observe actual binary; exit/banner cannot bypass content checks |
| C2 | Real archive | Regular, annual, variant, volume 1, Unicode, multiple/new/existing arcs, notes/web/legacy comments/unknown tags | Page/member/comment hashes, exact approved XML delta, valid CRCs |
| C3 | Archive failure | Nonzero, timeout, truncated ZIP, unreadable entry, changed page, empty tag, unchanged file, symlink, low space | Original hash/permissions retained, staged data removed or recovery recorded |
| C4 | Publication | Source race, file replacement failure, crash before/after rename, restart, repeated job | Atomic ownership, durable intent, deterministic recovery, no duplicate write |
| C5 | NFS publication | Explicit v2, ACL/user attributes, no-clobber link, crash before/after displacement/link, ambiguous RPC, v1 reader | Actual NFS fixture preserves pages/ACLs; deterministic recovery; no competing file overwritten; old reader rejects unchanged |
| N1 | Native | Automatic/manual, disabled tags, overwrite off/on, CBL-only and mixed preferences, alternate config root | Old/new return contracts, settings unchanged, unsupported choice explicit |
| N2 | Conversion | CBZ, CBR, CB7, CBT and conversion-only with worker enabled/disabled | Exactly one converter, retained original on failure, no second tagger converter |
| N3 | UI | Added, updated, unchanged, failed, timed out, unsupported | Accurate monitor and history at mobile/wide sizes, no raw output/secrets |
| P1 | Packaging | Final image user, runtime venv/ICU/console, architecture, dependency hashes, no Qt | Offline CLI and full native matrix in final image, legacy still available |
| L1 | Rollout | Idle drain, app/canary backup+restore, old/new read state, canary, rollback | Record/media preservation, NZBGet/Komga uptime unchanged, cleanup receipt |
| D1 | Discovery | Disabled default, missing optional package, cookies, redirect, POST, proxy, TLS verify, 429/503/timeout/reset | Same normalized outcomes and cooldown accounting, bounded cleanup, redacted diagnostics |
| D2 | Byte transfer (future option) | Unknown/zero length, 200 vs 206, wrong range, 416, compressed body, HTML, short body, bad ZIP, cancellation/restart | Same verified_transfer outcomes and preserved partials, explicit identity encoding |
| D3 | Streaming (future option) | Slow consumer, multi-GB pack, server stalls, parent cancellation, response close | Fixed buffer bound independent of body size; cancellation deadline and cleanup tested |
| D4 | Transport rollout | Switch while idle/active, rollback, provider cooldown, NZB fallback, queue priority | Choice applies at next session boundary, active work retains owner, no cooldown bypass |