{
  "provenance": "Copied subset of supplied docs/feature_coverage.json. Coverage status was not independently reclassified.",
  "summary": {
    "app": "GolpoShur",
    "requirements": 12,
    "implemented_local": 3,
    "partial": 6,
    "blocked": 3
  },
  "requirements": [
    {
      "id": "GS-F01",
      "app": "GolpoShur",
      "slug": "golposhur",
      "source_title": "Brand voice kit",
      "original_priority": "P0",
      "source_requirement": "Store audience, approved claims, banned phrases, terminology, tone examples and separate Bengali and English style preferences.\nAcceptance: A banned product claim is flagged in both languages before approval is possible.",
      "status": "implemented_local",
      "implementation_scope": "Bilingual brand voice, terminology, approved source-linked claims and banned phrases; brand changes invalidate approvals.",
      "residual_limitation": "Human brand and factual review remain required.",
      "evidence_paths": [
        "docs/blueprint_requirements.json",
        "docs/PROPOSALS_SOCIAL.md",
        "suite/apps/golposhur.py",
        "tests/test_proposals_social.py"
      ],
      "test_references": [
        {
          "path": "tests/test_proposals_social.py",
          "class": "GolpoShurTests",
          "method": "test_banned_claim_is_blocked_in_both_languages"
        },
        {
          "path": "tests/test_proposals_social.py",
          "class": "GolpoShurTests",
          "method": "test_factual_claim_requires_source_and_human_approval"
        }
      ],
      "verification_note": "Listed tests support the named invariants, not every sentence of the original feature or production operation."
    },
    {
      "id": "GS-F02",
      "app": "GolpoShur",
      "slug": "golposhur",
      "source_title": "Campaign calendar",
      "original_priority": "P0",
      "source_requirement": "Plan channel, objective, audience, owner and Asia/Dhaka publishing time; mark religious or seasonal dates as editable confirmations.\nAcceptance: Moving a campaign updates pending jobs but never silently reschedules an already approved job.",
      "status": "implemented_local",
      "implementation_scope": "Channel, objective, audience, owner and Dhaka schedule; seasonal confirmation and explicit invalidation of approved jobs after edits.",
      "residual_limitation": "Calendar dates are operator confirmations, not verified external event data.",
      "evidence_paths": [
        "docs/blueprint_requirements.json",
        "docs/PROPOSALS_SOCIAL.md",
        "suite/apps/golposhur.py",
        "tests/test_proposals_social.py"
      ],
      "test_references": [
        {
          "path": "tests/test_proposals_social.py",
          "class": "GolpoShurTests",
          "method": "test_approved_schedule_is_never_silently_moved"
        }
      ],
      "verification_note": "Listed tests support the named invariants, not every sentence of the original feature or production operation."
    },
    {
      "id": "GS-F03",
      "app": "GolpoShur",
      "slug": "golposhur",
      "source_title": "Source-aware ideation",
      "original_priority": "P0",
      "source_requirement": "Suggest topics from user-supplied or licensed sources; distinguish source facts, creative suggestions and unverified claims.\nAcceptance: A factual claim without an approved source is routed to review rather than marked verified.",
      "status": "partial",
      "implementation_scope": "Approved-source ideation prompts, bilingual claim evidence and an explicit source/review state.",
      "residual_limitation": "No external generation model or automatic factual verification is connected.",
      "evidence_paths": [
        "docs/blueprint_requirements.json",
        "docs/PROPOSALS_SOCIAL.md",
        "suite/apps/golposhur.py",
        "tests/test_proposals_social.py"
      ],
      "test_references": [
        {
          "path": "tests/test_proposals_social.py",
          "class": "GolpoShurTests",
          "method": "test_factual_claim_requires_source_and_human_approval"
        }
      ],
      "verification_note": "Listed tests support the named invariants, not every sentence of the original feature or production operation."
    },
    {
      "id": "GS-F04",
      "app": "GolpoShur",
      "slug": "golposhur",
      "source_title": "Bilingual copy studio",
      "original_priority": "P0",
      "source_requirement": "Create natural Bengali and English variants while preserving prices, dates, disclaimers and the intended offer; avoid literal awkward translation.\nAcceptance: Both variants show the same offer expiry, currency and eligibility conditions.",
      "status": "partial",
      "implementation_scope": "Separately authored bilingual copy, shared offer values, numeric/price consistency and human language-review attestation.",
      "residual_limitation": "No automatic translation or native-language quality certification is provided.",
      "evidence_paths": [
        "docs/blueprint_requirements.json",
        "docs/PROPOSALS_SOCIAL.md",
        "suite/apps/golposhur.py",
        "tests/test_proposals_social.py"
      ],
      "test_references": [
        {
          "path": "tests/test_proposals_social.py",
          "class": "GolpoShurTests",
          "method": "test_shared_offer_values_and_numeric_mismatch"
        },
        {
          "path": "tests/test_proposals_social.py",
          "class": "GolpoShurTests",
          "method": "test_copy_cannot_contradict_structured_offer_price"
        }
      ],
      "verification_note": "Listed tests support the named invariants, not every sentence of the original feature or production operation."
    },
    {
      "id": "GS-F05",
      "app": "GolpoShur",
      "slug": "golposhur",
      "source_title": "Media and accessibility",
      "original_priority": "P0",
      "source_requirement": "Track image rights, consent, dimensions, captions and alt text; show a visual preview before publication.\nAcceptance: A post with missing media rights is held; missing alt text is visibly flagged.",
      "status": "partial",
      "implementation_scope": "Media rights/consent, declared hash, dimensions, captions and bilingual alt-text metadata with publication holds.",
      "residual_limitation": "Actual file ingestion, verified bytes, scanning, private asset hosting and visual preview QA are not implemented.",
      "evidence_paths": [
        "docs/blueprint_requirements.json",
        "docs/PROPOSALS_SOCIAL.md",
        "suite/apps/golposhur.py",
        "tests/test_proposals_social.py"
      ],
      "test_references": [
        {
          "path": "tests/test_proposals_social.py",
          "class": "GolpoShurTests",
          "method": "test_missing_media_rights_and_alt_text_hold_publication"
        }
      ],
      "verification_note": "Listed tests support the named invariants, not every sentence of the original feature or production operation."
    },
    {
      "id": "GS-F06",
      "app": "GolpoShur",
      "slug": "golposhur",
      "source_title": "Hash-bound approval",
      "original_priority": "P0",
      "source_requirement": "Bind approval to content version, media hash, channel and scheduled time; require approval again after any material edit.\nAcceptance: Changing a price after approval prevents publishing until re-approved.",
      "status": "partial",
      "implementation_scope": "Approval fingerprint binds stored text, offer, campaign/channel/time, source state and declared media/account metadata.",
      "residual_limitation": "Actual media bytes are not ingested or pinned; stored-metadata approval alone cannot guarantee unchanged external file content.",
      "evidence_paths": [
        "docs/blueprint_requirements.json",
        "docs/PROPOSALS_SOCIAL.md",
        "suite/apps/golposhur.py",
        "tests/test_proposals_social.py"
      ],
      "test_references": [
        {
          "path": "tests/test_proposals_social.py",
          "class": "GolpoShurTests",
          "method": "test_every_material_edit_invalidates_approved_job"
        }
      ],
      "verification_note": "Listed tests support the named invariants, not every sentence of the original feature or production operation."
    },
    {
      "id": "GS-F07",
      "app": "GolpoShur",
      "slug": "golposhur",
      "source_title": "Authorized connectors",
      "original_priority": "P0",
      "source_requirement": "Use provider OAuth and approved account permissions. Store encrypted tokens and support revoke, reconnect and permission failure states.\nAcceptance: Revoked access disables future jobs without exposing token values in logs.",
      "status": "blocked",
      "implementation_scope": "Mock account authorization/revocation lifecycle and explicit live-provider rejection are present.",
      "residual_limitation": "Live OAuth, encrypted provider-token custody, refresh, permission approval and provider onboarding are not implemented.",
      "evidence_paths": [
        "docs/blueprint_requirements.json",
        "docs/PROPOSALS_SOCIAL.md",
        "suite/apps/golposhur.py",
        "tests/test_proposals_social.py"
      ],
      "test_references": [
        {
          "path": "tests/test_proposals_social.py",
          "class": "GolpoShurTests",
          "method": "test_live_provider_is_explicitly_unconfigured"
        }
      ],
      "verification_note": "Listed tests support the named invariants, not every sentence of the original feature or production operation."
    },
    {
      "id": "GS-F08",
      "app": "GolpoShur",
      "slug": "golposhur",
      "source_title": "Reliable publisher",
      "original_priority": "P0",
      "source_requirement": "Persist jobs before dispatch; use idempotency, bounded retries and provider-result reconciliation to prevent duplicate posts.\nAcceptance: A timeout after provider acceptance creates one post, not two, after reconciliation.",
      "status": "partial",
      "implementation_scope": "Persistent mock queue, idempotent receipts, bounded retries, due worker and timeout-after-acceptance reconciliation.",
      "residual_limitation": "No real provider dispatch or external result reconciliation is connected; receipts are labelled simulated.",
      "evidence_paths": [
        "docs/blueprint_requirements.json",
        "docs/PROPOSALS_SOCIAL.md",
        "suite/apps/golposhur.py",
        "tests/test_proposals_social.py"
      ],
      "test_references": [
        {
          "path": "tests/test_proposals_social.py",
          "class": "GolpoShurTests",
          "method": "test_jobs_persist_before_dispatch_and_deduplicate"
        },
        {
          "path": "tests/test_proposals_social.py",
          "class": "GolpoShurTests",
          "method": "test_timeout_after_accept_reconciles_once_even_after_pause"
        },
        {
          "path": "tests/test_proposals_social.py",
          "class": "GolpoShurTests",
          "method": "test_bounded_retries_stop_after_three_failures"
        },
        {
          "path": "tests/test_proposals_social.py",
          "class": "GolpoShurTests",
          "method": "test_worker_is_scoped_mock_only_and_bounded"
        }
      ],
      "verification_note": "Listed tests support the named invariants, not every sentence of the original feature or production operation."
    },
    {
      "id": "GS-F09",
      "app": "GolpoShur",
      "slug": "golposhur",
      "source_title": "Review inbox",
      "original_priority": "P1",
      "source_requirement": "Group incoming comments from permitted APIs and draft replies; escalate complaints or sensitive requests to a human.\nAcceptance: A refund complaint remains a draft and cannot trigger a public automated promise.",
      "status": "blocked",
      "implementation_scope": "No enabled comment-ingestion or public reply operation.",
      "residual_limitation": "Permitted comment API connectors, grouped review inbox and reply drafting/escalation are not implemented.",
      "evidence_paths": [
        "docs/blueprint_requirements.json",
        "docs/PROPOSALS_SOCIAL.md",
        "suite/apps/golposhur.py"
      ],
      "test_references": [],
      "verification_note": "Implementation/status is source-reviewed here; no dedicated feature test is cited. Consult final suite evidence and required human reviews."
    },
    {
      "id": "GS-F10",
      "app": "GolpoShur",
      "slug": "golposhur",
      "source_title": "Honest analytics",
      "original_priority": "P1",
      "source_requirement": "Show channel-specific metrics, collection time and missing-data states; avoid combining non-equivalent platform measurements.\nAcceptance: An unavailable reach metric displays unavailable, not zero or an invented estimate.",
      "status": "partial",
      "implementation_scope": "Actual local queue/receipt counts with collection context; absent reach is unavailable with sample size zero.",
      "residual_limitation": "No live platform metrics or cross-channel analytics integration is supplied.",
      "evidence_paths": [
        "docs/blueprint_requirements.json",
        "docs/PROPOSALS_SOCIAL.md",
        "suite/apps/golposhur.py",
        "tests/test_proposals_social.py"
      ],
      "test_references": [
        {
          "path": "tests/test_proposals_social.py",
          "class": "GolpoShurTests",
          "method": "test_publishing_history_is_immutable_and_reach_is_unavailable"
        }
      ],
      "verification_note": "Listed tests support the named invariants, not every sentence of the original feature or production operation."
    },
    {
      "id": "GS-F11",
      "app": "GolpoShur",
      "slug": "golposhur",
      "source_title": "Consent-based messaging",
      "original_priority": "P1",
      "source_requirement": "Send only opted-in notifications through authorized templates; maintain opt-out, quiet hours and message cost previews.\nAcceptance: An opted-out contact receives no subsequent campaign message, including retried jobs.",
      "status": "blocked",
      "implementation_scope": "The application sends no campaign messages.",
      "residual_limitation": "Recipient/consent store, opt-out, approved messaging templates, quiet hours and cost preview are not implemented.",
      "evidence_paths": [
        "docs/blueprint_requirements.json",
        "docs/PROPOSALS_SOCIAL.md",
        "suite/apps/golposhur.py"
      ],
      "test_references": [],
      "verification_note": "Implementation/status is source-reviewed here; no dedicated feature test is cited. Consult final suite evidence and required human reviews."
    },
    {
      "id": "GS-F12",
      "app": "GolpoShur",
      "slug": "golposhur",
      "source_title": "Crisis pause and audit",
      "original_priority": "P0",
      "source_requirement": "Provide a tenant-level stop switch, job cancellation and immutable approval/publishing history for incident review.\nAcceptance: Pausing a tenant prevents new dispatch while preserving already returned provider receipts.",
      "status": "implemented_local",
      "implementation_scope": "Tenant stop switch, cancellation/revocation and immutable approval/receipt history preserve accepted mock receipts.",
      "residual_limitation": "The tested transport is the explicit mock provider; live transport remains blocked under GS-F07/08.",
      "evidence_paths": [
        "docs/blueprint_requirements.json",
        "docs/PROPOSALS_SOCIAL.md",
        "suite/apps/golposhur.py",
        "tests/test_proposals_social.py"
      ],
      "test_references": [
        {
          "path": "tests/test_proposals_social.py",
          "class": "GolpoShurTests",
          "method": "test_pause_and_revoke_prevent_dispatch_without_deleting_history"
        },
        {
          "path": "tests/test_proposals_social.py",
          "class": "GolpoShurTests",
          "method": "test_receipt_survives_content_edit_and_revocation_after_timeout"
        }
      ],
      "verification_note": "Listed tests support the named invariants, not every sentence of the original feature or production operation."
    }
  ]
}