{
  "schema_version": "1.0",
  "contract_id": "maestro.lead-magnet.minimum-useful.v1",
  "purpose": "Choose and build the smallest asset that completes one named B2B buyer task without inventing evidence.",
  "canonical_paths": {
    "contract": "lead-magnet-contract.json",
    "selection_matrix_blank": "selection-matrix-template.md",
    "selection_matrix_worked": "selection-matrix-worked.md",
    "minimum_useful_asset_markdown": "minimum-useful-lead-magnet.md",
    "minimum_useful_asset_json": "minimum-useful-lead-magnet.json",
    "production_brief_blank": "production-brief-template.md",
    "production_brief_worked": "production-brief-worked.md",
    "prompt_manifest": "agent-prompts.json",
    "build_prompt": "lead-magnet-build-prompt.md",
    "review_prompt": "lead-magnet-review-prompt.md"
  },
  "decision_states": {
    "selected_mechanism": ["structured_decision_worksheet", "visual_model", "calculator", "reference_guide", "research_report", "technical_framework", null],
    "draft_decision": ["ready", "hold"],
    "launch_decision": ["ready", "hold", "not_assessed"],
    "knowledge_state": ["supplied", "derived", "unknown"],
    "support_state": ["supported", "hypothesis", "excluded"],
    "inspection_depth": ["full_interior", "executed_public_tool", "bounded_preview", "sampled_manual_review", "not_inspected"]
  },
  "unknown_rule": "Blank or absent information is Unknown. Zero is a supplied value only when the owner explicitly enters zero. Never convert Unknown to zero, false, an empty claim, or an invented answer.",
  "selection_rule": "Select a mechanism only when it can complete the named buyer job with the available inputs and a credible maintenance owner. Preserve all viable candidates and external questions when selection is null.",
  "draft_rule": "Draft may be ready when the buyer job, completion state, mechanism, source boundaries, allowed claims and owner are known. A final public URL may remain Unknown for a provisional draft.",
  "launch_rule": "Launch is ready only after the final asset, destination, permissions, delivery behavior and required evidence have been verified. Draft readiness never implies launch readiness.",
  "invalidation_rule": "A change to buyer job, completion state, source boundary, allowed claims or selected mechanism invalidates prior approval. Create and approve a new version; do not reuse the old approval identifier.",
  "minimum_required_fields": [
    "asset_id", "version", "fictional", "buyer_problem", "buyer_decision", "completion_state", "selected_mechanism", "mechanism_reason", "source_ledger", "claim_ledger", "asset_body", "owner", "maintenance", "draft_readiness", "launch_readiness"
  ],
  "field_ownership": {
    "supplied": ["buyer_problem", "buyer_decision", "completion_state", "constraints", "source_ledger[].source_url", "source_ledger[].permission", "claim_ledger[].claim", "claim_ledger[].support_state", "owner.name_or_role", "maintenance.trigger"],
    "derived": ["candidate_mechanisms", "selected_mechanism", "mechanism_reason", "minimum_useful_version", "hold_reasons", "next_action", "draft_readiness", "launch_readiness"],
    "never_infer": ["customer_results", "performance_numbers", "permissions", "customer_quotes", "final_url", "delivery_verification", "owner_approval"]
  },
  "source_entry_contract": {
    "required": ["source_id", "title", "source_url", "inspection_depth", "used_for", "permission", "notes"],
    "rule": "A source can support only what was inspected. A landing page, cover or preview cannot support unseen contents or results."
  },
  "claim_entry_contract": {
    "required": ["claim_id", "claim", "support_state", "source_ids", "publication_treatment"],
    "rule": "Supported claims name their source. Hypotheses stay labeled. Excluded claims do not appear in buyer-facing copy."
  },
  "roundtrip_contract": {
    "canonical_format": "JSON",
    "markdown_fence_label": "lead-magnet-json",
    "requirement": "minimum-useful-lead-magnet.md must contain one fenced lead-magnet-json block whose UTF-8 payload plus one trailing newline is byte-for-byte identical to minimum-useful-lead-magnet.json. Human-readable Markdown outside that block is a view; reimport uses the fenced payload.",
    "comparison": "byte_exact"
  },
  "portable_template_rule": "Every blank file defines all fields, allowed states and missing-input behavior inside the file. Every worked file uses the same field labels and can be understood without the article.",
  "prompt_rule": "Each prompt embeds its reference summary and source links, required inputs, missing-input behavior, a worked adaptation, factual constraints and an explicit output contract. Links add provenance; the prompt must still run if links cannot be opened."
}
