9.6 KiB
9.6 KiB
Media Routing Requirements Quality & Implementation Planning Checklist
Purpose: Validate requirements quality, architectural fidelity, and implementation plan completeness for the media routing feature Created: 2026-08-24 Feature: spec.md | plan.md | research.md | data-model.md
Note: This checklist is a reviewer-owned review artifact. Mark an item [x] only when the reviewer determines the quality criterion is satisfied.
Marker Semantics: [x] means the criterion has been reviewed and satisfied. It does not mean implementation work is complete.
1. Requirement & Plan Fidelity
- CHK001 Does the specification define behavioral requirements for structural media relevance to the publication while the plan and research define the concrete, minimal DOM parsing algorithm without contradiction? [Fidelity, Spec §FR-001, §FR-004; Plan §4.1; Research §Decisão 1]
- CHK002 Are all 5 media subtypes (
video,image,images,embed,mixed) exhaustively specified with their definitions? [Completeness, Spec §FR-009] - CHK003 Are the payload fields for compact LLM input generation fully defined across the plan and data model without arbitrary truncation of editorial text? [Completeness, Plan §4.2; Data-Model §2]
- CHK004 Are the required fields, mandatory file generation in all successful batch runs, and minimal envelope structure (
articles, containing[]when zero media articles) for*_media.jsonexplicitly specified without extra report fields? [Completeness, Spec §FR-014, §FR-015; Plan §4.4; Contract: media-output.schema.json] - CHK005 Are all 11 mandatory operational metrics enumerated with their exact tracking points documented in the plan? [Completeness, Spec §FR-028; Plan §4.5]
- CHK006 Are the specific conditions that trigger operational fallback defined for each provider? [Completeness, Spec §FR-019, §FR-020; Plan §4.3]
- CHK007 Are error handling and reporting requirements specified when all 3 LLM providers fail, recording the failure inline in the main JSON with
classification_status: "failed"without creating separate failure files or DTOs? [Completeness, Spec §FR-022; Plan §4.3; Data-Model §2.6] - CHK008 Are all ungrounded technical promises, invented latency SLOs (<1.5s, <10ms) and artificial benchmarks completely absent from the plan? [Fidelity, Plan §2, §4]
2. Minimal Implementation & Code Reusability
- CHK009 Were real repository files inspected, reusing existing dependencies (
beautifulsoup4,urllib.request) and avoiding new package installations? [Minimalism, Plan §2, §5] - CHK010 Is the implementation organized as lightweight functions in
scripts/extract_article_contents.pyrather than unnecessary class hierarchies or generic provider frameworks? [Minimalism, Plan §5] - CHK011 Are speculative abstractions, generic provider frameworks, and unnecessary domain DTOs (e.g.
MediaBatchReport,MediaMetricsCollector,FailedArticle,ClassificationFailedArticle) completely absent? [Minimalism, Plan §5, §7] - CHK012 Was
src/tools/adapters/llm.pyevaluated and its non-reuse properly justified due to its coupling to the ECP domain rather than creating redundant provider frameworks? [Minimalism, Plan §5; Research §Decisão 3]
3. Structural DOM Gate
- CHK013 Is the DOM structural gate defined without treating
<source>alone as video, without double-counting<figure>/<picture>wrappers, and distinguishing editorial content from page structure (<header>,<nav>,<footer>,<aside>)? [Gate, Plan §4.1; Research §Decisão 1] - CHK014 Is the structural gate completely free of regular expressions (
re), language-specific keywords, site-specific selectors, and ad detectors? [Constraint, Spec §FR-002; Plan §4.1] - CHK015 Does the gate bypass the LLM completely when no relevant candidate media is present, sending the article directly to
extract_all_engines()? [Gate, Spec §FR-003; Plan §4.1]
4. Classifier Payload & Interface Contracts
- CHK016 Is the compact payload defined with title, normalized editorial text without HTML and without arbitrary character truncation, and structural media summary? [Payload, Spec §FR-005, §FR-006; Plan §4.2]
- CHK017 Does the classifier output contract contain exactly 2 fields (
content_typeandmedia_type), enforcingtext -> media_type = nullandmedia -> media_type != nullin application validation? [Contract, Spec §FR-007, §FR-008, §FR-009; Contract: classifier-io.schema.json] - CHK018 Is the prompt unique, concise, and language-independent, explicitly prohibiting reasoning, summaries, rationale, and translation requests? [Prompt, Spec §FR-010; Plan §4.2]
- CHK019 Does Ollama use JSON Schema in
format, Groq use native JSON Schema Structured Output withopenai/gpt-oss-20b, OmniRoute use JSON Schema Structured Output, and the application strictly validate the two-field schema? [Contract, Spec §FR-011; Plan §4.3] - CHK020 Is deliberative reasoning/thinking explicitly disabled/configured per provider (Ollama:
think=false, Groq:reasoning_effort="low", OmniRoute: sem parâmetro inventado), ensuring no reasoning content appears in the output? [Reasoning, Plan §4.3; Research §Decisão 3]
5. Sequential Provider Chain & Fallback Rules
- CHK021 Is the provider order strictly Ollama (
qwen3.5:2b) → Groq (openai/gpt-oss-20b) → OmniRoute (cgpt-web/gpt-5.5), executing sequentially and stopping immediately on the first valid response? [Providers, Spec §FR-018, §FR-019, §FR-020, §FR-021; Plan §4.3] - CHK022 Are voting, model consensus, second opinions, LLM-as-a-judge, and confidence thresholds strictly excluded? [Boundary, Spec §FR-021; Plan §4.3, §7]
- CHK023 Are automatic per-provider retries, exponential backoff, circuit breakers, discovery frameworks, and health services strictly excluded from the provider chain? [Boundary, Plan §4.3, §7]
- CHK024 Are endpoints, models, timeouts, and API keys externalized via environment variables, with OmniRoute having no invented default hostname? [Security, Spec §FR-025; Plan §4.3]
6. I/O Persistence, Counter Semantics & CLI Interface
- CHK025 Are the naming and path derivation rules for
*_media.jsonexplicit and identical for default (same stem/dir) and custom-o/--outputpaths? [I/O, Spec §FR-014; Plan §4.4; Contract: cli-interface.md] - CHK026 Does every successful batch run generate
*_media.json, using{ "articles": [] }when zero media articles were classified, without extra report counters or status aggregates? [I/O, Spec §FR-014, §FR-015; Plan §4.4; Contract: media-output.schema.json] - CHK027 Do the main JSON counters (
total_articles,successful_articles,failed_articles) reflect strictly the items present in that file, excluding media articles and including classification failures? [Counters, Spec §FR-017; Plan §4.4] - CHK028 Does the implementation preserve 100% of the input metadata dictionary in
input_metaacross text, media, and failure records without dropping unknown fields or inventing default values? [Data Integrity, Plan §4.4; Data-Model §2.1] - CHK029 Does the implementation preserve 100% of the existing CLI interface (
-i,-o,-l,--lang,-t,-s) without creating new flags like--media-output? [CLI, Spec §FR-030; Plan §4.4]
7. Observability, Logging & Security Constraints
- CHK030 Are all 11 required operational metrics incremented in memory at the exact points defined and emitted via existing stderr logging mechanisms while respecting the
-s/--silentflag? [Observability, Spec §FR-028; Plan §4.5] - CHK031 Are logs structured to record provider usage, fallback transitions, final classifications, and total failures without logging full text payloads by default? [Observability, Spec §FR-027; Plan §4.5]
- CHK032 Are API keys, tokens, and credentials strictly prevented from appearing in logs, error messages, and JSON outputs? [Security, Spec §FR-026; Plan §4.5]
8. Test Coverage & CI Determinism
- CHK033 Are all 13 normative test scenarios (A through M) plus zero-media batch generation covered in the test plan, spanning text-only, single media, multiple images, mixed media, long text with media, fallbacks, and multilingual cases? [Test Coverage, Spec §User Stories; Plan §6]
- CHK034 Are deterministic unit and integration tests defined to simulate the 5 provider states in CI without requiring live network calls to Ollama, Groq, or OmniRoute? [Test CI, Spec §FR-024; Plan §4.3, §6]
- CHK035 Is the zero-regex policy verified via static AST inspection in
tests/scripts/check_zero_regex.pyacross all feature modules and tests? [Zero-Regex, Spec §SC-007; Plan §5, §6]
9. Global Artifact Consistency Check
- CHK036 Are
spec.md,plan.md,research.md,data-model.md,quickstart.md,classifier-io.schema.json,media-output.schema.json, andcli-interface.md100% consistent with each other, confirming that classification failures are recorded inline withclassification_status: "failed"and without any reintroduction ofMediaBatchReport,MediaMetricsCollector, or DTOs de falha? [Consistency, Plan §5, §7; Data-Model §2]
Notes
- Mark items
[x]only after review confirms the quality criterion is satisfied - Leave items unchecked when they still require clarification, correction, or reviewer evaluation
/speckit-implementreads checklist checkbox state as a gate and must not modify markers- Items are numbered sequentially (CHK001–CHK036) for easy reference