{
  "claimsContract": 2,
  "$comment": "The only sentences any public asset may assert about what this framework does. AGENTS.md: 'every claim in the docs, the ADR, the PR body and the JTBD matrix traces to a merged test — a capability and its limitation are stated in the same breath.' This file extends that rule to marketing. Templates reference claims by id ({{claim:C-01}}); `npm run site:check` fails the build if a claim is missing evidence, missing a limitation, references a file that does not exist, or is defined and never used. Contract 2 (ADR-027): measuredAgainst additionally requires testFiles and testsTree, and no claim, limitation or repoFact may type an exact test count — the one number lives in measuredAgainst and reaches a page as {{measured.tests}}.",
  "measuredAgainst": {
    "date": "2026-08-18",
    "sha": "f088bf9",
    "command": "npm run verify",
    "tests": 1220,
    "failures": 0,
    "testFiles": 103,
    "testsTree": "83902d0165b60e1359ce501918fcc7e9fdb895b5",
    "note": "Written by `node scripts/measure-suite.js --apply` from a real run on a clean tree. Never edit these numbers by hand: scripts/site-check.js verifies sha, testsTree and testFiles against the commit, so a record moved forward without a re-run fails the build."
  },
  "claims": [
    {
      "id": "C-01",
      "text": "Write a module manifest; the agent turns it into a migration, a service, a REST resource, an SDK method and Admin screens — with no page code.",
      "evidence": {
        "jtbd": "JTBD-01",
        "tests": [
          "tests/module-factory-e2e.test.js",
          "tests/generated-api-e2e.test.js",
          "tests/admin-modules.test.js",
          "tests/admin-core.test.js"
        ],
        "docs": [
          "docs/MODULE_FACTORY.md",
          "docs/ADMIN.md"
        ]
      },
      "limitation": "Generated CRUD only. The factory does not generate workflows or approvals for a custom object — that is still handwritten (JTBD-06, partially supported).",
      "surfaces": [
        "site",
        "readme",
        "launch"
      ]
    },
    {
      "id": "C-02",
      "text": "Generated objects reference each other: a foreign key, runtime target validation, schema metadata and an Admin selector, all from one field declaration.",
      "evidence": {
        "jtbd": "JTBD-01b",
        "tests": [
          "tests/reference-fields-e2e.test.js",
          "tests/reference-resolver.test.js",
          "tests/module-factory.test.js"
        ],
        "docs": [
          "docs/MODULE_FACTORY.md"
        ]
      },
      "limitation": "Generated-to-generated many-to-one only. Many-to-many, inverse collections, cascade delete and generated-to-core references do not exist.",
      "surfaces": [
        "site",
        "readme"
      ]
    },
    {
      "id": "C-03",
      "text": "Commercial policy is deterministic code, not a model's judgement: a renewal at or above the threshold stops and waits for a named human.",
      "evidence": {
        "jtbd": "JTBD-02",
        "tests": [
          "tests/workflow.test.js",
          "tests/api.test.js"
        ],
        "docs": [
          "ARCHITECTURE.md",
          "DECISIONS.md"
        ]
      },
      "limitation": "Proven for the built-in renewal object and its single value threshold. A general policy engine over arbitrary custom objects does not exist.",
      "surfaces": [
        "site",
        "readme",
        "launch"
      ]
    },
    {
      "id": "C-04",
      "text": "The agent cannot approve on the human's behalf. A test asserts the refusal, so the boundary is a property of the system rather than a promise in a README.",
      "evidence": {
        "jtbd": "JTBD-02",
        "tests": [
          "tests/workflow.test.js"
        ],
        "docs": [
          "ARCHITECTURE.md"
        ],
        "testName": "approval workflow rejects an agent pretending to make the human decision"
      },
      "limitation": "The actor is asserted, not authenticated: there is no auth, tenancy or RBAC, and an actor header is not identity. This holds a boundary against an honest agent, not against an attacker with network access.",
      "surfaces": [
        "site",
        "readme",
        "launch"
      ]
    },
    {
      "id": "C-05",
      "text": "Opportunities move through code-first pipeline stages under a server-authoritative action — the client asks, the server decides.",
      "evidence": {
        "jtbd": "JTBD-03",
        "tests": [
          "tests/opportunity-pipeline-e2e.test.js",
          "tests/pipeline-contract.test.js",
          "tests/admin-pipeline.test.js"
        ],
        "docs": [
          "docs/ACTIONS.md"
        ]
      },
      "limitation": "Pipelines are proven on the built-in Opportunity module. Configurable pipelines for generated custom objects are not claimed.",
      "surfaces": [
        "site",
        "readme"
      ]
    },
    {
      "id": "C-06",
      "text": "A lead is captured, scored, routed, qualified and converted into Company, Contact and Opportunity through explicit actions, each one atomic and audited.",
      "evidence": {
        "jtbd": "JTBD-04, JTBD-05, JTBD-05b, JTBD-LI-01, JTBD-LI-02, JTBD-LI-04",
        "tests": [
          "tests/lead-qualification-e2e.test.js",
          "tests/lead-conversion-e2e.test.js",
          "tests/lead-intelligence-e2e.test.js"
        ],
        "docs": [
          "docs/LEAD_INTELLIGENCE.md"
        ]
      },
      "limitation": "Enrichment runs against a fixture provider — no real external data source is wired. The Lead model is the starter's, not a built-in core module.",
      "surfaces": [
        "site",
        "readme",
        "launch"
      ]
    },
    {
      "id": "C-07",
      "text": "Scoring is explainable and versioned: every score carries the fingerprint of the model version that produced it, so a number from last quarter can still be accounted for.",
      "evidence": {
        "jtbd": "JTBD-LI-02, JTBD-LI-07",
        "tests": [
          "tests/lead-intelligence-e2e.test.js",
          "tests/intelligence-contract.test.js"
        ],
        "docs": [
          "docs/LEAD_INTELLIGENCE.md"
        ]
      },
      "limitation": "Deterministic weighted rules, not a machine-learning model. Nothing trains, fits or backtests.",
      "surfaces": [
        "site",
        "readme"
      ]
    },
    {
      "id": "C-08",
      "text": "Quotes price on the server from a catalog — one-time and recurring, flat, per-unit, volume and graduated tiers — and freeze into an immutable version when a discount goes for approval.",
      "evidence": {
        "jtbd": "JTBD-CO-01, JTBD-CO-03",
        "tests": [
          "tests/commercial-e2e.test.js",
          "tests/commercial-contract.test.js",
          "tests/admin-quotes.test.js"
        ],
        "docs": [
          "docs/COMMERCIAL_OPERATIONS.md"
        ]
      },
      "limitation": "Catalog sync runs against a fixture provider; no real external catalog (Stripe, Zuora, ERP) is connected. Money is integer cents with no FX — currencies are never summed.",
      "surfaces": [
        "site",
        "readme"
      ]
    },
    {
      "id": "C-09",
      "text": "A signature envelope produces verified events and a hashed signed artifact, and exactly one immutable Order is built from the approved quote version.",
      "evidence": {
        "jtbd": "JTBD-CO-07",
        "tests": [
          "tests/signature-order-e2e.test.js",
          "tests/signature-contract.test.js",
          "tests/admin-signature.test.js"
        ],
        "docs": [
          "docs/SIGNATURE_ORDER.md"
        ]
      },
      "limitation": "A fixture signature provider with a test-only webhook key. No DocuSign, Adobe Sign or Dropbox Sign adapter exists, and the artifact hash is provider-reported rather than independently recomputed.",
      "surfaces": [
        "site",
        "readme"
      ]
    },
    {
      "id": "C-10",
      "text": "A signed Order activates into a Commercial Contract, an immutable contract version, a Subscription and explicitly pending delivery and service obligations — every component classified, never guessed.",
      "evidence": {
        "jtbd": "JTBD-CS-01, JTBD-CS-02",
        "tests": [
          "tests/contracts-activation-e2e.test.js",
          "tests/contracts-contract.test.js",
          "tests/admin-contracts.test.js"
        ],
        "docs": [
          "docs/CONTRACT_ACTIVATION.md"
        ]
      },
      "limitation": "The term is post-signature operational metadata, not a signed contractual term. Nothing bills, renews, amends or cancels: there is no scheduler, so auto-renew and notice periods are recorded and never fire.",
      "surfaces": [
        "site",
        "readme"
      ]
    },
    {
      "id": "C-11",
      "text": "Pending obligations hand over into a Delivery Project with work packages, milestones and an optional partner — atomically, idempotently, and across a package boundary the kernel never learns about.",
      "evidence": {
        "jtbd": "JTBD-DS-01",
        "tests": [
          "tests/delivery-handover-e2e.test.js",
          "tests/delivery-execution-e2e.test.js",
          "tests/admin-delivery.test.js"
        ],
        "docs": [
          "docs/DELIVERY_HANDOVER.md"
        ]
      },
      "limitation": "It hands work over and runs it through human-driven transitions. Nothing schedules, staffs, computes percent complete or bills. Deliverables and recorded customer acceptance exist as of M14b2, and acceptance there is evidence a user actor recorded — never an authenticated customer, a legal signature or authorization to bill.",
      "surfaces": [
        "site",
        "readme"
      ]
    },
    {
      "id": "C-12",
      "text": "Delivery records what it consumed: append-only time and expense evidence, costed server-side by a versioned fingerprinted policy, with a reproducible contribution estimate grouped by currency.",
      "evidence": {
        "jtbd": "JTBD-DS-06, JTBD-DS-07",
        "tests": [
          "tests/delivery-economics-e2e.test.js"
        ],
        "docs": [
          "docs/DELIVERY_ECONOMICS.md"
        ]
      },
      "limitation": "Deliberately not a margin: no revenue recognition, no cost of goods sold, no ARR/MRR/TCV, no annualization, no FX. A project carrying a recurring obligation returns no estimate at all and says why.",
      "surfaces": [
        "site",
        "readme"
      ]
    },
    {
      "id": "C-13",
      "text": "A customer-authored domain package attaches and detaches with the kernel's fingerprint unchanged, and reaches another package only through a capability it declares.",
      "evidence": {
        "jtbd": "JTBD-PK-01, JTBD-PK-02",
        "tests": [
          "tests/package-contract.test.js",
          "tests/custom-package-e2e.test.js",
          "tests/contracts-registry-review.test.js"
        ],
        "docs": [
          "docs/PACKAGE_AUTHORING.md"
        ]
      },
      "limitation": "The scaffold that starts one writes an empty package and nothing else: no business logic, no composition, no global identity-uniqueness check. There is no registry, no marketplace, no publication and no sandboxing — package code runs with the host process's authority. Detaching leaves its data behind; there is no uninstall.",
      "surfaces": [
        "site",
        "readme"
      ]
    },
    {
      "id": "C-14",
      "text": "One command tells an agent what an application actually is — packages, capabilities, resources, actions, policies, providers — read from checked-in source, in a single deterministic JSON report.",
      "evidence": {
        "jtbd": "JTBD-AX-01, JTBD-AX-02",
        "tests": [
          "tests/app-inspect.test.js"
        ],
        "docs": [
          "docs/APPLICATION_INSPECTION.md",
          "docs/AGENT_HARNESS_COMPATIBILITY.md"
        ]
      },
      "limitation": "Source-only and read-only. It never opens the database, contacts a provider, reads a secret, or reports runtime, CI or authorization state — and it lists those blind spots as machine-readable limitations in its own output.",
      "surfaces": [
        "site",
        "readme",
        "launch"
      ]
    },
    {
      "id": "C-22",
      "text": "One command composes the whole thing and then inspects it: 71 modules, 8 packages, 57 resources, 59 actions, 7 policies and 2 providers, applied from manifests and driven end to end — then it prints the eleven things the inspector says it cannot see.",
      "evidence": {
        "tests": [
          "tests/app-inspect.test.js",
          "tests/contracts-activation-e2e.test.js",
          "tests/delivery-economics-e2e.test.js"
        ],
        "docs": [
          "docs/APPLICATION_INSPECTION.md"
        ],
        "repoFacts": [
          "npm run tour runs examples/starters/b2b-lead-qualification/install.mjs, which CI runs on every push, into a directory it keeps",
          "the counts are the app inspect report of that composed project",
          "scripts/tour.js exits non-zero if the composed application is ever empty"
        ]
      },
      "limitation": "It composes the starter's application, not yours, and it runs entirely locally against SQLite with no authentication. The counts describe what that starter applies; a different composition gives different numbers. Wall-clock time varies by machine and is deliberately not claimed.",
      "surfaces": [
        "site",
        "readme",
        "launch"
      ]
    },
    {
      "id": "C-21",
      "text": "The same refusal holds where the money is: an agent actor asking to approve a discounted quote is refused with a 403, and only a human user actor can decide.",
      "evidence": {
        "jtbd": "JTBD-CO-03",
        "tests": [
          "tests/commercial-e2e.test.js"
        ],
        "docs": [
          "docs/COMMERCIAL_OPERATIONS.md"
        ],
        "testName": "commercial e2e: approval boundary, revise/version-2, concurrency, fault injection, provider failures, drift",
        "assertion": "tests/commercial-e2e.test.js — quote.approve with actor { type: 'agent' } rejects with status 403 and code HUMAN_APPROVAL_REQUIRED"
      },
      "limitation": "The assertion lives inside a composite end-to-end test rather than a test named for it, so the citation is a file and a line rather than a test name. Extracting it into a named test is tracked in docs/strategy/GO_TO_MARKET.md; until then, cite the line.",
      "surfaces": [
        "site",
        "readme",
        "launch"
      ]
    },
    {
      "id": "C-15",
      "text": "A Solution Plan is a checked-in file with a contract and a canonical fingerprint, validated against a real inspection — so a plan written against a composition that has since moved reports itself stale.",
      "evidence": {
        "jtbd": "JTBD-AX-03",
        "tests": [
          "tests/solution-plan.test.js"
        ],
        "docs": [
          "docs/SOLUTION_PLAN.md"
        ]
      },
      "limitation": "A document contract, not a planner and not a runtime. Nothing executes a plan, and the validator refuses a plan that carries a command.",
      "surfaces": [
        "site",
        "readme"
      ]
    },
    {
      "id": "C-16",
      "text": "Every mutation goes through a module service or a named workflow, and leaves an audit event and a step-level trace behind it.",
      "evidence": {
        "jtbd": "JTBD-02",
        "tests": [
          "tests/workflow.test.js",
          "tests/action-runtime-semantics.test.js",
          "tests/event-bus-outbox.test.js"
        ],
        "docs": [
          "ARCHITECTURE.md",
          "docs/ACTIONS.md"
        ]
      },
      "limitation": "Audit records what the process did under an asserted actor. It is not a tamper-evident or externally attestable log, and it is not a compliance control.",
      "surfaces": [
        "site",
        "readme",
        "launch"
      ]
    },
    {
      "id": "C-17",
      "text": "Zero third-party runtime dependencies. Node 22 and a checkout — no build step, no bundler, no framework underneath your framework.",
      "evidence": {
        "repoFacts": [
          "package.json has no dependencies field",
          "SQLite via node:sqlite",
          "the HTTP server, test runner and database adapter are all Node built-ins"
        ],
        "tests": [
          "tests/api.test.js"
        ],
        "docs": [
          "ARCHITECTURE.md",
          "AGENTS.md"
        ]
      },
      "limitation": "Development dependencies and the eventual PostgreSQL adapter are separate questions. Having no runtime dependencies is a property of the framework, not of whatever you add on top of it.",
      "surfaces": [
        "site",
        "readme",
        "launch"
      ]
    },
    {
      "id": "C-18",
      "text": "The MCP server exposes project context and narrow write tools to a coding agent; anything that generates code or destroys state is dry-run unless you pass an explicit apply flag.",
      "evidence": {
        "jtbd": "JTBD-AX-02",
        "tests": [
          "tests/mcp.test.js",
          "tests/scaffold.test.js"
        ],
        "docs": [
          "docs/MCP.md"
        ]
      },
      "limitation": "Stdio only, local only. There is no hosted or authenticated MCP endpoint, and the server inherits the local process's authority.",
      "surfaces": [
        "site",
        "readme"
      ]
    },
    {
      "id": "C-19",
      "text": "Generated modules evolve without rewriting history: explicit revisions, a checked-in state file and append-only named migrations.",
      "evidence": {
        "tests": [
          "tests/module-evolution.test.js",
          "tests/module-evolution-factory.test.js",
          "tests/module-migrations.test.js"
        ],
        "docs": [
          "docs/MODULE_EVOLUTION.md"
        ]
      },
      "limitation": "The view is source-only: what the checked-in revisions and migrations say is knowable; what a particular database has actually applied is not.",
      "surfaces": [
        "site",
        "readme"
      ]
    },
    {
      "id": "C-20",
      "text": "The verification gate runs on every push — source checks and then the whole test suite — covering happy paths and the policy boundaries that matter: hostile input, transaction rollback, idempotency, concurrency and immutability among them.",
      "evidence": {
        "repoFacts": [
          "measuredAgainst in this file records the run: npm run verify, green, at the commit named there, with a fingerprint of the tests/ tree it was taken over",
          ".github/workflows/ci.yml runs verify and smoke on push and pull_request, and runs the public-claims gate over full history so the measurement can be traced"
        ],
        "docs": [
          "docs/QUALITY_GATES.md"
        ]
      },
      "limitation": "A test count measures effort, not correctness — read the adversarial-review categories in docs/QUALITY_GATES.md to see what is actually attacked. Real-browser tests are run manually and are not in CI.",
      "surfaces": [
        "site",
        "readme"
      ]
    },
    {
      "id": "C-23",
      "text": "Five rules can be removed on purpose in one command, and the suite catches every one in about two seconds — naming the test that caught it. Anything that survives is reported as a gap, not omitted.",
      "evidence": {
        "tests": [
          "tests/falsify.test.js",
          "tests/module-factory.test.js",
          "tests/workflow.test.js"
        ],
        "docs": [
          "docs/FALSIFY.md"
        ],
        "repoFacts": [
          "npm run falsify at 6489982: 5 caught, 0 survived, 0 stale, 2.2s",
          "npm run falsify --only delivery-cost-rounding: caught by 'cost arithmetic is exact at every boundary' in 108.3s",
          "the run refuses to start over uncommitted target files and verifies every restore byte-for-byte"
        ]
      },
      "limitation": "It falsifies six named rules, not the claims in this ledger, and it proves only that a test holds each one — a rule that is wrong but faithfully defended passes every mutation. It is not mutation testing: nothing is generated or sampled, and no score is derived.",
      "surfaces": [
        "site",
        "readme",
        "launch"
      ]
    }
  ],
  "limitations": [
    {
      "id": "L-01",
      "headline": "No authentication, tenancy or RBAC.",
      "text": "The server is local-development-only. An actor header is an assertion, not an identity. Do not expose it to a network.",
      "evidence": {
        "jtbd": "JTBD-15",
        "docs": [
          "docs/PROJECT_STATUS.md",
          "README.md"
        ],
        "repoFacts": [
          "crm app inspect reports productionPosture: local development only"
        ]
      },
      "surfaces": [
        "site",
        "readme",
        "launch"
      ]
    },
    {
      "id": "L-02",
      "headline": "SQLite only.",
      "text": "Persistence is Node's built-in SQLite adapter. PostgreSQL is on the Production Spine track and is not implemented.",
      "evidence": {
        "docs": [
          "docs/PROJECT_STATUS.md",
          "docs/strategy/PLATFORM_CAPABILITIES.md"
        ]
      },
      "surfaces": [
        "site",
        "readme"
      ]
    },
    {
      "id": "L-03",
      "headline": "The build benchmark has not been run.",
      "text": "The protocol is designed and published; no Successful Agent Build Rate exists yet. Any number you see quoted for this project is not ours.",
      "evidence": {
        "docs": [
          "docs/strategy/CRM_BUILD_BENCHMARK.md",
          "docs/PROJECT_STATUS.md"
        ]
      },
      "surfaces": [
        "site",
        "readme",
        "launch"
      ]
    },
    {
      "id": "L-04",
      "headline": "No scheduler, no reminders, nothing on a timer.",
      "text": "Follow-up Tasks and an Activity timeline are one shared model that a person moves by hand: a due date changes no state. There is no recurring work, no delayed workflow, no queue — so nothing fires on a renewal notice period either.",
      "evidence": {
        "jtbd": "JTBD-07, JTBD-10",
        "docs": [
          "docs/strategy/JOBS_AND_OUTBOX.md"
        ]
      },
      "surfaces": [
        "site",
        "readme"
      ]
    },
    {
      "id": "L-05",
      "headline": "No email, calendar or marketing integrations.",
      "text": "An in-memory notification provider contract exists. No adapter sends anything to anyone.",
      "evidence": {
        "jtbd": "JTBD-14",
        "docs": [
          "docs/strategy/INTEGRATION_RUNTIME.md"
        ]
      },
      "surfaces": [
        "site",
        "readme"
      ]
    },
    {
      "id": "L-06",
      "headline": "No import, export, dedupe, merge, bulk edit, saved views or global search.",
      "text": "Table stakes in every commercial CRM, and none of them has a milestone yet. This is recorded deliberately rather than left for you to discover.",
      "evidence": {
        "docs": [
          "docs/benchmarks/CRM_JTBD_MATRIX.md"
        ]
      },
      "surfaces": [
        "site",
        "readme"
      ]
    },
    {
      "id": "L-08",
      "headline": "Ownership today means copying source, not installing a dependency.",
      "text": "There is a project bootstrap and there is no published package, and the two are different facts. The repository's bootstrap command scaffolds a project that boots, reports `valid` from `app inspect` and exits 0 from `project doctor`, offline and with no install — run from a checkout of this repository. The package published under the reserved npm name is still an empty 0.0.1 placeholder, so the `npm create` route installs nothing until a human publishes it. Either way the framework is vendored into the project rather than depended on by version: you own the result outright, and upgrading means merging, not bumping.",
      "evidence": {
        "tests": [
          "tests/project-bootstrap.test.js"
        ],
        "docs": [
          "docs/PROJECT_STATUS.md",
          "docs/plans/project-bootstrap-installability.md"
        ],
        "repoFacts": [
          "the project bootstrap writes a project from an empty directory, dry-run unless --apply",
          "tests/project-bootstrap.test.js bootstraps into a temporary directory and then runs app inspect, project doctor and the generated project's own checks against the result",
          "site/brand.json records the registry status and the source status as two separate fields, and scripts/distribution-check.js fails if either disagrees with the tree",
          "the published 0.0.1 tarball is an empty name reservation and this repository publishes nothing"
        ]
      },
      "surfaces": [
        "site",
        "readme",
        "launch"
      ]
    },
    {
      "id": "L-09",
      "headline": "You cannot put real customer data in this yet.",
      "text": "A CRM is a personal-data system by definition, and this one has no authentication, no tenancy, no export and no erasure path — so there is no way to service a data-subject access or deletion request with it. Data governance is designed and unimplemented. The one thing that does hold today: lead scoring is deterministic, versioned and explainable, not a model's judgement about a person.",
      "evidence": {
        "jtbd": "JTBD-15",
        "tests": [
          "tests/lead-intelligence-e2e.test.js"
        ],
        "docs": [
          "docs/strategy/DATA_GOVERNANCE.md",
          "docs/benchmarks/CRM_JTBD_MATRIX.md"
        ],
        "repoFacts": [
          "DATA_GOVERNANCE.md records the whole track as design only",
          "no import or export exists (L-06)",
          "scoring is a deterministic weighted model with a persisted version fingerprint (C-07)"
        ]
      },
      "surfaces": [
        "site",
        "readme",
        "launch"
      ]
    },
    {
      "id": "L-07",
      "headline": "This is a framework, not a product you sign up for.",
      "text": "There is no hosted CRM, no free tier and no account. The output is an application in your repository that you run.",
      "evidence": {
        "docs": [
          "PRODUCT.md",
          "docs/strategy/CATEGORY.md"
        ]
      },
      "surfaces": [
        "site",
        "readme",
        "launch"
      ]
    },
    {
      "id": "L-10",
      "headline": "Nothing bills.",
      "text": "No invoice, payment, tax, usage rating, proration or revenue recognition exists, and MRR, ARR and TCV are not derived from contract data.",
      "evidence": {
        "jtbd": "JTBD-DS-10, JTBD-CS-05",
        "docs": [
          "docs/strategy/EXECUTION_ROADMAP.md",
          "docs/benchmarks/CRM_JTBD_MATRIX.md"
        ],
        "repoFacts": [
          "EXECUTION_ROADMAP.md lists invoicing, billing, payment, usage rating, proration, tax and FX as explicitly deferred",
          "packages/contracts/modules/subscription.module.json describes itself as a commercial activation record, not a billing engine, with no invoice schedule, usage rating, proration, payment, renewal or cancellation state",
          "JTBD-DS-10 (activate billing on accepted milestones) and JTBD-CS-05 (calculate MRR, ARR and TCV from real contract data) both read 'not supported'"
        ]
      },
      "surfaces": [
        "site"
      ]
    },
    {
      "id": "L-11",
      "headline": "Marketing is a design document, not a package.",
      "text": "All 43 marketing jobs read 'not supported', no marketing package exists, and the strategy document says nothing in it is implemented.",
      "evidence": {
        "jtbd": "JTBD-MK-01",
        "docs": [
          "docs/strategy/MARKETING_GROWTH_OPERATIONS.md",
          "docs/benchmarks/CRM_JTBD_MATRIX.md"
        ],
        "repoFacts": [
          "MARKETING_GROWTH_OPERATIONS.md opens with 'Status: product strategy and roadmap only. Nothing in this document is implemented.'",
          "all 43 JTBD-MK rows in docs/benchmarks/jobs.json read 'not supported'",
          "the work is sequenced as EXECUTION_ROADMAP track MK0-MK7 and none of it is merged"
        ]
      },
      "surfaces": [
        "site"
      ]
    }
  ],
  "sourceVisibility": {
    "repository": "https://github.com/khaoss85/agent-crm",
    "note": "Evidence paths resolve in the public repository."
  }
}
