Catalog (142)

IDDocumentUpdatedAnchorsSHA
agents/ag2-extraction-notesAG2 Extraction Notes
agents/ag2-extraction-notes.md
10/20/2018, 1:46:40 AM11e8d0072ebec1
asset-provenanceAsset Provenance
asset-provenance.md
10/20/2018, 1:46:40 AM41025c0acc117
closeout-notesAI-RSI one-click closeout notes
closeout-notes.md
10/20/2018, 1:46:40 AM21f560f6a8535
content-credibility-engineContent Credibility Engine
content-credibility-engine.md
10/20/2018, 1:46:40 AM8d9aa32358670
demo-scriptProduct Walkthrough — Shot List & Script (60–90s)
demo-script.md
10/20/2018, 1:46:40 AM2299b901ec583
deploymentDeployment — Vercel + Render
deployment.md
10/20/2018, 1:46:40 AM8822e08a991b9
development-roadmapMeta Museum Development Roadmap
development-roadmap.md
10/20/2018, 1:46:40 AM23624a8a089d72
development/aidd-tddAIDD + TDD Discipline
development/aidd-tdd.md
10/20/2018, 1:46:40 AM5cd0a0524525a
development/typescript-command-contractTypeScript Command Contract
development/typescript-command-contract.md
10/20/2018, 1:46:40 AM0e2c0fe337ff6
envEnvironment Variables
env.md
10/20/2018, 1:46:40 AM13d45d28b1acb7
evals/golden-museum-questionsGolden Eval Dataset: Complex Museum Questions
evals/golden-museum-questions.md
10/20/2018, 1:46:40 AM62876a2b5e78d
knowledge/concepts/llm-wiki-patternDefinition
knowledge/concepts/llm-wiki-pattern.md
10/20/2018, 1:46:40 AM01538a0b7d895
knowledge/concepts/meta-museum-knowledge-systemDefinition
knowledge/concepts/meta-museum-knowledge-system.md
10/20/2018, 1:46:40 AM0fb8615747115
knowledge/concepts/open-knowledge-formatDefinition
knowledge/concepts/open-knowledge-format.md
10/20/2018, 1:46:40 AM037e419de4736
knowledge/indexMeta Museum Knowledge Wiki
knowledge/index.md
10/20/2018, 1:46:40 AM38d2fe66d7442
knowledge/logMeta Museum Knowledge Wiki Log
knowledge/log.md
10/20/2018, 1:46:40 AM19f73157e299f
knowledge/schema/llm-wiki-maintainerPurpose
knowledge/schema/llm-wiki-maintainer.md
10/20/2018, 1:46:40 AM01bc0cde6fa1e
knowledge/sources/llm-wiki-pattern-noteSummary
knowledge/sources/llm-wiki-pattern-note.md
10/20/2018, 1:46:40 AM0db115d8fd7bf
knowledge/sources/open-knowledge-format-google-2026-06-12Summary
knowledge/sources/open-knowledge-format-google-2026-06-12.md
10/20/2018, 1:46:40 AM0a87b065f97db
linked-art/activity-stream-partner-quickstartActivityStreams Partner Quickstart
linked-art/activity-stream-partner-quickstart.md
10/20/2018, 1:46:40 AM96ea3aea16866
linked-art/activity-stream-profileMetaMuseum Linked Art Activity Stream Profile
linked-art/activity-stream-profile.md
10/20/2018, 1:46:40 AM6adb634532df8
linked-art/api/abstract-worksLinked Art API: Abstract Works
linked-art/api/abstract-works.md
7/6/2026, 12:00:00 AM7271315c08d2d
linked-art/api/bibliographyLinked Art: Bibliography
linked-art/api/bibliography.md
7/6/2026, 12:00:00 AM126d9d5160565a
linked-art/api/cdwa-mappingLinked Art: CDWA Mapping
linked-art/api/cdwa-mapping.md
7/6/2026, 12:00:00 AM9baaefda0cff6
linked-art/api/code-and-toolsLinked Art: Code And Tools
linked-art/api/code-and-tools.md
7/6/2026, 12:00:00 AM87d87b00c2f04
linked-art/api/conceptsLinked Art API: Concepts
linked-art/api/concepts.md
7/6/2026, 12:00:00 AM75c3b10a975bb
linked-art/api/design-principlesLinked Art API: Design Principles
linked-art/api/design-principles.md
7/6/2026, 12:00:00 AM103ff80e8696b0
linked-art/api/digital-objectsLinked Art API: Digital Objects
linked-art/api/digital-objects.md
7/6/2026, 12:00:00 AM889a21989333a
linked-art/api/discoveryLinked Art API: Discovery
linked-art/api/discovery.md
7/7/2026, 12:00:00 AM5407a0f6a9de4
linked-art/api/eventsLinked Art API: Events
linked-art/api/events.md
7/6/2026, 12:00:00 AM8cdb00a835694
linked-art/api/groupsLinked Art API: Groups
linked-art/api/groups.md
7/6/2026, 12:00:00 AM7abbb3e00ba19
linked-art/api/halLinked Art API: HAL
linked-art/api/hal.md
7/6/2026, 12:00:00 AM264c645e4c2ea6
linked-art/api/indexLinked Art API Reference Notes
linked-art/api/index.md
7/6/2026, 12:00:00 AM404ab73322251
linked-art/api/json-ld-considerationsLinked Art API: JSON-LD Considerations
linked-art/api/json-ld-considerations.md
7/6/2026, 12:00:00 AM7dc542f437a12
linked-art/api/json-schemasLinked Art API: JSON Schemas
linked-art/api/json-schemas.md
7/6/2026, 12:00:00 AM1657ed7e27b78b
linked-art/api/peopleLinked Art API: People
linked-art/api/people.md
7/6/2026, 12:00:00 AM700141f499e00
linked-art/api/physical-objectsLinked Art API: Physical Objects
linked-art/api/physical-objects.md
7/6/2026, 12:00:00 AM10b947ded689e6
linked-art/api/placesLinked Art API: Places
linked-art/api/places.md
7/6/2026, 12:00:00 AM75b00bba40010
linked-art/api/protocolLinked Art API: Protocol
linked-art/api/protocol.md
7/6/2026, 12:00:00 AM8d7f6c925ba69
linked-art/api/provenance-activitiesLinked Art API: Provenance Activities
linked-art/api/provenance-activities.md
7/6/2026, 12:00:00 AM18565a129b4074
linked-art/api/schema-abstract-workLinked Art API Schema: Abstract Work
linked-art/api/schema-abstract-work.md
7/6/2026, 12:00:00 AM720660a51677e
linked-art/api/schema-conceptLinked Art API Schema: Concept
linked-art/api/schema-concept.md
7/6/2026, 12:00:00 AM76a568b387d80
linked-art/api/schema-digital-objectLinked Art API Schema: Digital Object
linked-art/api/schema-digital-object.md
7/6/2026, 12:00:00 AM7750a7f2de6a7
linked-art/api/schema-eventLinked Art API Schema: Event
linked-art/api/schema-event.md
7/6/2026, 12:00:00 AM7ecc0b93c1ea6
linked-art/api/schema-groupLinked Art API Schema: Group
linked-art/api/schema-group.md
7/6/2026, 12:00:00 AM833ee6eb1355f
linked-art/api/schema-org-mappingLinked Art: Schema.org Mapping
linked-art/api/schema-org-mapping.md
7/6/2026, 12:00:00 AM10e5407dc8677d
linked-art/api/schema-personLinked Art API Schema: Person
linked-art/api/schema-person.md
7/6/2026, 12:00:00 AM87c1f64043517
linked-art/api/schema-physical-objectLinked Art API Schema: Human-Made Object
linked-art/api/schema-physical-object.md
7/6/2026, 12:00:00 AM9d0ab12e93755
linked-art/api/schema-placeLinked Art API Schema: Place
linked-art/api/schema-place.md
7/6/2026, 12:00:00 AM8f3340073270b
linked-art/api/schema-provenance-activityLinked Art API Schema: Provenance Activity
linked-art/api/schema-provenance-activity.md
7/6/2026, 12:00:00 AM8dd2fe5345a6a
linked-art/api/schema-setLinked Art API Schema: Set
linked-art/api/schema-set.md
7/6/2026, 12:00:00 AM82b48dd1a0cb1
linked-art/api/schema-textual-workLinked Art API Schema: Textual Work
linked-art/api/schema-textual-work.md
7/6/2026, 12:00:00 AM827f38ce348c4
linked-art/api/schema-visual-workLinked Art API Schema: Visual Work
linked-art/api/schema-visual-work.md
7/6/2026, 12:00:00 AM97dc44dd62a63
linked-art/api/searchLinked Art API: Search
linked-art/api/search.md
7/7/2026, 12:00:00 AM6fe2301e3ac01
linked-art/api/setsLinked Art API: Sets
linked-art/api/sets.md
7/6/2026, 12:00:00 AM717aaf803945c
linked-art/api/shared-activitiesLinked Art API: Shared Activities
linked-art/api/shared-activities.md
7/6/2026, 12:00:00 AM7de394280c803
linked-art/api/shared-concept-referencesLinked Art API: Shared Concept References
linked-art/api/shared-concept-references.md
7/6/2026, 12:00:00 AM8d1d6465ac086
linked-art/api/shared-digital-linksLinked Art API: Shared Digital Links
linked-art/api/shared-digital-links.md
7/6/2026, 12:00:00 AM6aa747ae005bf
linked-art/api/shared-dimensionsLinked Art API: Shared Dimensions
linked-art/api/shared-dimensions.md
7/6/2026, 12:00:00 AM7a6a512ce1f69
linked-art/api/shared-identifiersLinked Art API: Shared Identifiers
linked-art/api/shared-identifiers.md
7/6/2026, 12:00:00 AM70e518b8d88c5
linked-art/api/shared-monetary-amountsLinked Art API: Shared Monetary Amounts
linked-art/api/shared-monetary-amounts.md
7/6/2026, 12:00:00 AM7030dc129f2ca
linked-art/api/shared-namesLinked Art API: Shared Names
linked-art/api/shared-names.md
7/6/2026, 12:00:00 AM73da4d8a4c849
linked-art/api/shared-referencesLinked Art API: Shared References
linked-art/api/shared-references.md
7/6/2026, 12:00:00 AM822aa1cc20d4f
linked-art/api/shared-relationshipsLinked Art API: Shared Relationships
linked-art/api/shared-relationships.md
7/6/2026, 12:00:00 AM7af011a27832c
linked-art/api/shared-rightsLinked Art API: Shared Rights
linked-art/api/shared-rights.md
7/6/2026, 12:00:00 AM79975708ccd02
linked-art/api/shared-statementsLinked Art API: Shared Statements
linked-art/api/shared-statements.md
7/6/2026, 12:00:00 AM7f26889987779
linked-art/api/shared-structuresLinked Art API: Shared Structures
linked-art/api/shared-structures.md
7/6/2026, 12:00:00 AM69f6a99f012ad
linked-art/api/shared-timespansLinked Art API: Shared TimeSpans
linked-art/api/shared-timespans.md
7/6/2026, 12:00:00 AM7ea33d788e29b
linked-art/api/textual-worksLinked Art API: Textual Works
linked-art/api/textual-works.md
7/6/2026, 12:00:00 AM783115d01844b
linked-art/api/visual-worksLinked Art API: Visual Works
linked-art/api/visual-works.md
7/6/2026, 12:00:00 AM75c7225b0a261
linked-art/canonical-identifier-policyCanonical Identifier Policy
linked-art/canonical-identifier-policy.md
10/20/2018, 1:46:40 AM856bc7bc9ee2f
linked-art/conformance-matrixLinked Art 1.0 — Conformance Matrix
linked-art/conformance-matrix.md
10/20/2018, 1:46:40 AM53666a6671a7a
linked-art/external-activity-streamsExternal Activity Stream Candidates
linked-art/external-activity-streams.md
10/20/2018, 1:46:40 AM3756dbb91f85c
linked-art/Linked%20Art%20NotesLinked Art Notes.md
linked-art/Linked Art Notes.md
10/20/2018, 1:46:40 AM0aca66d51107b
linked-art/Linked%20Open%20Art%20Data%20Web%20App%20-%20Must-have%20Data%20SourcesLinked Open Art Data Web App (AI) — Must-have Data Sources
linked-art/Linked Open Art Data Web App - Must-have Data Sources.md
10/20/2018, 1:46:40 AM77b7d350fe8a0
linked-art/LinkedArtAppFeatures🏛️ Art Explorer: Linked Art Application & Ecosystem
linked-art/LinkedArtAppFeatures.md
10/20/2018, 1:46:40 AM14e23b890ecd2a
linked-art/LinkedArtChallengesLinkedArtChallenges.md
linked-art/LinkedArtChallenges.md
10/20/2018, 1:46:40 AM0d8c987070277
linked-art/LinkedArtCollaborationLinkedArtCollaboration.md
linked-art/LinkedArtCollaboration.md
10/20/2018, 1:46:40 AM114ccf63edef3
linked-art/LinkedArtDashboardLinkedArtDashboard.md
linked-art/LinkedArtDashboard.md
10/20/2018, 1:46:40 AM06d04d4b2bf79
linked-art/LinkedArtFeatureRoadmapFeature Roadmap for Linked Open Art Data Apps
linked-art/LinkedArtFeatureRoadmap.md
10/20/2018, 1:46:40 AM8ac10d8e79c20
linked-art/LinkedArtJobReadyLinkedArtJobReady.md
linked-art/LinkedArtJobReady.md
10/20/2018, 1:46:40 AM0c60b357bcb87
linked-art/LinkedArtModel1.0-ReferenceLinked Art Model 1.0 Reference (Round 1)
linked-art/LinkedArtModel1.0-Reference.md
10/20/2018, 1:46:40 AM344e6d48d474b3e
linked-art/LinkedArtPatternsLinkedArtPatterns.md
linked-art/LinkedArtPatterns.md
10/20/2018, 1:46:40 AM0d45bbbb02d70
linked-art/LinkedArtPRD🖼️ Product Requirements Document
linked-art/LinkedArtPRD.md
10/20/2018, 1:46:40 AM2091bc1f37307c
linked-art/LinkedArtRoadmapLinkedArtRoadmap.md
linked-art/LinkedArtRoadmap.md
10/20/2018, 1:46:40 AM0e52e71c6bd28
linked-art/LinkedArtSaaSLinkedArtSaaS.md
linked-art/LinkedArtSaaS.md
10/20/2018, 1:46:40 AM03d260738fb29
linked-art/LinkedArtSoftwareCode and Tools
linked-art/LinkedArtSoftware.md
10/20/2018, 1:46:40 AM89e8fef24aea9
linked-art/LinkedArtSOTAWebAppLinkedArt SOTA Web App — Master Build Specification
linked-art/LinkedArtSOTAWebApp.md
10/20/2018, 1:46:40 AM129a5f0baca89c6
linked-art/LinkedArtUnmetNeedsLinkedArtUnmetNeeds.md
linked-art/LinkedArtUnmetNeeds.md
10/20/2018, 1:46:40 AM0cb35fac29cc1
linked-art/LinkedArtUseCasesLinkedArtUseCases.md
linked-art/LinkedArtUseCases.md
10/20/2018, 1:46:40 AM05c572ce8e7f3
linked-art/LinkedArtWidgetsLinkedArtWidgets.md
linked-art/LinkedArtWidgets.md
10/20/2018, 1:46:40 AM0b39911c7d97d
linked-art/LinkedDesignLinkedDesign.md
linked-art/LinkedDesign.md
10/20/2018, 1:46:40 AM00a02240471e5
linked-art/LODEngineLODEngine.md
linked-art/LODEngine.md
10/20/2018, 1:46:40 AM0ef73426f80db
linked-art/LODPipelineLODPipeline.md
linked-art/LODPipeline.md
10/20/2018, 1:46:40 AM0fe95e61ed9da
linked-art/LODToolsLODTools.md
linked-art/LODTools.md
10/20/2018, 1:46:40 AM03167947fc4e4
linked-art/metahistorybook-prod-harvest-evidenceMetaHistoryBook Production Consumer Evidence
linked-art/metahistorybook-prod-harvest-evidence.md
10/20/2018, 1:46:40 AM131577a970c8b0
linked-art/metahistorybook-reciprocal-harvest-checklistMetaHistoryBook Reciprocal Harvest Checklist
linked-art/metahistorybook-reciprocal-harvest-checklist.md
10/20/2018, 1:46:40 AM506f00beacbe6
linked-art/partitioningLinked Art Graph Partitioning
linked-art/partitioning.md
10/20/2018, 1:46:40 AM3341aff71f753
linked-art/SPARQLSPARQL.md
linked-art/SPARQL.md
10/20/2018, 1:46:40 AM050e00ed51733
linked-art/VocabulariesVocabularies.md
linked-art/Vocabularies.md
10/20/2018, 1:46:40 AM0e0574a338aaa
linked-art/wikidataexplorer-consumer-evidenceWikidata Explorer ActivityStreams Consumer Evidence
linked-art/wikidataexplorer-consumer-evidence.md
10/20/2018, 1:46:40 AM2d2dee0ad49d3
linked-art/YaleLuxYaleLux.md
linked-art/YaleLux.md
10/20/2018, 1:46:40 AM074fd47fae749
meta-wiki-art-bridgeMeta Wiki Art Bridge (MediaWiki + Wikibase)
meta-wiki-art-bridge.md
10/20/2018, 1:46:40 AM77a43fb0c48b8
ops/activity-adoption-proofActivity Feed Adoption Proof Runbook
ops/activity-adoption-proof.md
10/20/2018, 1:46:40 AM8b3c1d8e3399b
ops/ag2-workerAG2 Worker and Bridge Runbook
ops/ag2-worker.md
10/20/2018, 1:46:40 AM950efcd4e3318
ops/auth-credential-rotationAuth credential rotation runbook
ops/auth-credential-rotation.md
10/20/2018, 1:46:40 AM476e3fc6daefa
ops/deployment-preflightDeployment Preflight Runbook
ops/deployment-preflight.md
10/20/2018, 1:46:40 AM597db694dd88b
ops/era-c-exit-gate-evidenceEra C Exit-Gate Evidence Pack
ops/era-c-exit-gate-evidence.md
10/20/2018, 1:46:40 AM64fdaaa29056a
ops/evidence-script-ownershipEvidence Script Ownership
ops/evidence-script-ownership.md
10/20/2018, 1:46:40 AM48432d0529cf4
ops/external-evidence-request-packExternal Evidence Request Pack
ops/external-evidence-request-pack.md
10/20/2018, 1:46:40 AM64d89c9ef0410
ops/go-live-checklistGo-Live & Evidence-Pipeline Checklist
ops/go-live-checklist.md
10/20/2018, 1:46:40 AM6621cddad10fb
ops/k6-slok6 SLO Load Test (SOTA §20.4)
ops/k6-slo.md
10/20/2018, 1:46:40 AM4328b5b3163d4
ops/kpi-evidenceSOTA §26 KPI Evidence Input
ops/kpi-evidence.md
10/20/2018, 1:46:40 AM7bc46be9b160e
ops/launch-reviewLaunch Review Packet
ops/launch-review.md
10/20/2018, 1:46:40 AM51d414c314ee3
ops/managed-linked-art-pilot-runbookManaged Linked Art Pilot Runbook
ops/managed-linked-art-pilot-runbook.md
10/20/2018, 1:46:40 AM15b2e939be7a87
ops/otel-localLocal OpenTelemetry Wiring (Tempo / Jaeger)
ops/otel-local.md
10/20/2018, 1:46:40 AM51ebbc3b33f92
ops/outbox-projectorTransactional Outbox Projector (Postgres -> Solr/GraphDB)
ops/outbox-projector.md
10/20/2018, 1:46:40 AM6e6c332598258
ops/procurement-readiness-packetProcurement Readiness Packet
ops/procurement-readiness-packet.md
10/20/2018, 1:46:40 AM9c5685e82cca7
ops/product-constraintsProduct Constraints Gate
ops/product-constraints.md
10/20/2018, 1:46:40 AM2471d6d54d4e3
ops/reconciliation-serviceReconciliation Service (C2)
ops/reconciliation-service.md
10/20/2018, 1:46:40 AM605162c313ea9
ops/review-goalsReview Goals Audit
ops/review-goals.md
10/20/2018, 1:46:40 AM3cc1459601a26
ops/search-graph-provisioningSolr 9 + GraphDB Provisioning
ops/search-graph-provisioning.md
10/20/2018, 1:46:40 AM6fc1b15279a84
ops/security-dr-drillPen Test Baseline + DR Drill Runbook
ops/security-dr-drill.md
10/20/2018, 1:46:40 AM3a766ef3e2afc
progress/2026-05-31/era-c-readiness-snapshotEra C Readiness Snapshot (May 31, 2026)
progress/2026-05-31/era-c-readiness-snapshot.md
10/20/2018, 1:46:40 AM39672614ceb53
progress/era-historyMeta Museum — Era Delivery History
progress/era-history.md
10/20/2018, 1:46:40 AM4776bd307557c2
providers/harvard-art-museumsHarvard Art Museums API Integration Plan
providers/harvard-art-museums.md
10/20/2018, 1:46:40 AM11fa8b980154f5
providers/louvre-collections-jsonLouvre Collections JSON Integration Plan
providers/louvre-collections-json.md
10/20/2018, 1:46:40 AM11775f91a8d813
providers/moma-open-dataMoMA Open Data Snapshot
providers/moma-open-data.md
10/20/2018, 1:46:40 AM3bcdd2d8a3e6b
providers/museumsvictoria-collections-apiMuseums Victoria Collections API Integration
providers/museumsvictoria-collections-api.md
10/20/2018, 1:46:40 AM7a5408e229cdc
providers/nga-open-dataNational Gallery of Art (NGA) Open Data Integration Plan
providers/nga-open-data.md
10/20/2018, 1:46:40 AM1151c4807c8de0
providers/princeton-art-museumPrinceton University Art Museum API Integration Plan
providers/princeton-art-museum.md
10/20/2018, 1:46:40 AM11c8823f65ee41
providers/rkd-knowledge-graphRKD Knowledge Graph Integration Plan
providers/rkd-knowledge-graph.md
10/20/2018, 1:46:40 AM162b4b42f2ad42
providers/smithsonian-open-accessSmithsonian Open Access Integration Plan
providers/smithsonian-open-access.md
10/20/2018, 1:46:40 AM12db1ffa4cab02
providers/vanda-collections-apiVictoria and Albert Museum (V&A) Collections API Integration Plan
providers/vanda-collections-api.md
10/20/2018, 1:46:40 AM11755d93972233
qualityQuality & Performance
quality.md
10/20/2018, 1:46:40 AM6174add040960
reconciliation/exhibition-literature-reconciliationExhibition + Literature Reconciliation (B6.1)
reconciliation/exhibition-literature-reconciliation.md
10/20/2018, 1:46:40 AM7054bcea75896
responsible-aiResponsible AI
responsible-ai.md
10/20/2018, 1:46:40 AM8f90006650821
risk-registerRisk Register
risk-register.md
10/20/2018, 1:46:40 AM471caef3f084e
roadmap-to-10Roadmap to 10/10
roadmap-to-10.md
7/11/2026, 12:00:00 AM80adbd67fa416
roadmapMeta Museum Roadmap
roadmap.md
7/7/2026, 12:00:00 AM18988d4c1562ff
rsi-wikiAI-RSI compounding wiki
rsi-wiki.md
10/20/2018, 1:46:40 AM8b64914fe6f20
wikibase-cloud-migration-checklistWikibase Cloud -> Self-Host Migration Checklist
wikibase-cloud-migration-checklist.md
10/20/2018, 1:46:40 AM12170657fcbf2b

    Current Document: Managed Linked Art Pilot Runbook

    Source updated 10/20/2018, 1:46:40 AM · SHA-256 b2e939be7a87 · 411 lines

    Canonical ID: ops/managed-linked-art-pilot-runbook

    JSON for this doc:/api/docs/content?path=ops/managed-linked-art-pilot-runbook.md

    Human link:/docs?doc=ops%2Fmanaged-linked-art-pilot-runbook.md

    Canonical API endpoint:/api/docs/content?path=ops%2Fmanaged-linked-art-pilot-runbook.md

    Sections (stable anchors):

    Managed Linked Art Pilot Runbook

    This runbook covers the first concierge paid pilots for the "Managed Linked Art Launch Pilot" offer. It is an operator checklist for onboarding one collection export into a hosted Meta Museum workspace without waiting for self-serve signup or automated billing.

    Scope

    Use this runbook when a prospect has agreed to a bounded pilot conversation and a human operator is preparing a workspace, entitlement record, support path, and monthly evidence packet.

    The pilot covers:

    • one customer organization
    • one source data export or one bounded source API
    • one hosted workspace namespace
    • one public or review-only collection slice
    • one monthly evidence packet
    • manual invoice-backed entitlement tracking

    The pilot does not cover:

    • self-serve signup
    • automated billing
    • custom feature development
    • bulk migration guarantees
    • publication without human approval

    Commercial Readiness Gate

    The public `/pilot` page must stay explicit about the pre-revenue state until

    real commercial evidence exists:

    entitlement, source data received, and seven-day activation evidence

    • paid pilots: `0`
    • billing path: manual invoice-backed entitlement only
    • in-app billing: not built
    • next revenue evidence: first signed pilot with invoice reference, active

    Do not treat a researched account, warm conversation, demo, or internal dataset

    as revenue evidence. A pilot becomes commercial evidence only after all of the

    following are true:

    1. Signed scope or written approval names the customer organization, price,

    publication boundary, workspace owner, and customer review owner.

    1. A real manual invoice reference exists and is recorded in the pilot

    entitlement. Demo, fixture, internal, placeholder, sample, smoke, or test

    invoice references do not count as commercial evidence.

    1. The entitlement is active, exact-scoped by `tenantId` or `orgId`, and

    exportable through managed storage.

    1. Source data has been received for the named tenant.
    1. The activation ledger has dated customer evidence, not demo or smoke data.

    Only after at least one invoice-referenced pilot reaches first value should the

    roadmap consider checkout, subscription webhooks, pricing pages, or self-serve

    plan changes.

    Buyer Onboarding Pack

    Before turning a signed pilot into launch evidence, generate the buyer-specific

    capture pack:

    
    pnpm pilot:buyer-pack -- --account <real-account-id> --tenant <tenant-id> --organization "<buyer organization>" --invoice-ref <real-invoice-ref> --owner "<operator owner>"
    

    For web forms or first-touch enquiries where pricing would be premature, generate

    a form-safe draft that keeps pricing and invoice language out of the outbound

    message body while preserving private evidence fields in the response template:

    
    pnpm pilot:buyer-pack -- --account <real-account-id> --tenant <tenant-id> --organization "<buyer organization>" --invoice-ref <real-invoice-ref> --owner "<operator owner>" --submission-mode=form --omit-pricing
    

    The command writes:

    • `artifacts/pilot-evidence/pilot-buyer-onboarding-pack-latest.json`
    • `artifacts/pilot-evidence/pilot-buyer-onboarding-pack-latest.md`
    • `artifacts/pilot-evidence/runs/pilot-buyer-onboarding-pack-<timestamp>.json`

    The pack is `needs-buyer-evidence` until the operator supplies a real account,

    tenant, buyer organization, owner, and invoice reference. It rejects

    demo/fixture/local/placeholder/sample/smoke/test-looking account, tenant, and

    invoice values unless explicitly run as a placeholder rehearsal, and placeholder

    rehearsals do not count as external pilot evidence. A `ready-to-send` pack is

    still only an operator handoff; the 10/10 gate clears only after the real

    entitlement, outreach, activation, support, KPI, retention, gross-margin, and

    packet artifacts pass. Until then, the buyer pack is not strict paid-pilot

    proof.

    SaaS Packaging Gate

    Use `pnpm pilot:packaging` before promising that the concierge path is

    supportable as SaaS packaging. The command reads the managed

    `pilot-entitlements.json` ledger and writes:

    • `artifacts/pilot-packaging/pilot-packaging-latest.json`
    • `artifacts/pilot-packaging/pilot-packaging-<timestamp>.json`

    Default concierge check:

    
    pnpm pilot:packaging
    pnpm pilot:packaging:check
    

    Repeatable SaaS check:

    
    pnpm pilot:packaging -- --target=repeatable-saas --check
    

    Packaging rules:

    active pilots with invoice-backed entitlements, workspace owner, review owner,

    publication boundary, and monthly evidence cadence.

    support limit or when the target is repeatable SaaS.

    entitlement sync, customer billing portal, and plan-change audit evidence are

    implemented and configured.

    alone; the `institution` tier is package intent until billing and onboarding

    workflows are executable.

    • Manual invoice billing is supportable only for bounded concierge load: 1-3
    • Subscription billing is required when active concierge pilots exceed the
    • Repeatable SaaS remains blocked until subscription checkout, webhook
    • Do not mark an institution plan as available from commercial plan metadata

    Workspace Setup

    1. Assign an owner and reviewer.
    1. Create the pilot namespace:
    1. Create the source dataset namespace:
    1. Record publication boundary:
    1. Confirm source data minimums:
    1. Run import, validation, and review smoke checks against the pilot dataset.
    1. Capture first-value proof:
    • Operator: Sun & Rain Works pilot owner.
    • Customer: one named collection-side review owner.
    • `pilot-{org_slug}-{YYYYMM}`
    • Example: `pilot-benton-202606`
    • `pilot/{org_slug}/{source_slug}/v1`
    • Example: `pilot/benton/collection-export/v1`
    • public slice allowed
    • review-only slice allowed
    • internal-only records excluded from public projection
    • stable identifiers
    • titles or display labels
    • dates or timespan notes
    • makers or creator notes when available
    • rights text or rights review status
    • image references when available
    • searchable records
    • at least one reviewed public or review-only collection slice
    • one record detail page
    • one Linked Art JSON response
    • one unresolved-risk list

    Tenant Namespace Convention

    Until every route and persisted store propagates tenant context, every pilot artifact must include an explicit namespace string so it can be separated later without guessing from file paths or record labels.

    Required namespace fields:

    • `tenantId`: `pilot-{org_slug}-{YYYYMM}`
    • `sourceNamespace`: `pilot/{org_slug}/{source_slug}/v1`
    • `plan`: `pilot`
    • `billingMode`: `manual_invoice`
    • `publicationMode`: `review_only`, `public_slice`, or `mixed`

    Do not infer tenant identity from a URL, display label, or provider name. The namespace must be explicit in operator notes, entitlement records, evidence packets, and any pilot-specific storage export.

    Service-level scoped storage now exists for records, manual jobs, and persisted AgentTask review artifacts through `orgId`/`tenantId` options. Tenant-tagged records, jobs, and AgentTask route callers now pass the exact tenant ID into their scoped backing stores. Operators should still record the namespace explicitly and avoid mixing real pilot data in remaining shared routes until activity, annotation, audit, export, and backup evidence paths are covered.

    Manual Plan Entitlement

    Create a manual entitlement record before onboarding data. `src/services/pilot-entitlements.ts` is the executable contract for the interim plan gates, namespace shape, manual invoice fields, durable ledger storage, exact tenant lookup, and validation rules until a first-class entitlement table exists. The entitlement validator rejects synthetic invoice references that tokenize as demo, fixture, internal, placeholder, sample, smoke, or test evidence.

    The durable interim ledger is `storage/pilot-entitlements.json`. It is registered as a managed storage document, so `pnpm storage:export:postgres` exports it with the other storage-of-record JSON documents during Postgres cutover.

    
    {
      "tenantId": "pilot-benton-202606",
      "organizationName": "Benton Museum of Art at Pomona College",
      "organizationSlug": "benton",
      "sourceNamespace": "pilot/benton/collection-export/v1",
      "plan": "pilot",
      "workspaceOwner": "operator-name",
      "reviewOwner": "customer-name",
      "publicationBoundary": "Public browse slice after rights review; sensitive records held.",
      "evidencePacketCadence": "monthly",
      "effectiveFrom": "2026-06-14",
      "billing": {
        "invoiceMode": "manual",
        "invoiceReference": "INV-2026-001"
      },
      "status": "active-pilot",
      "planLimits": {
        "importsPerMonth": 3,
        "aiCallsPerMonth": 250,
        "storageGb": 25,
        "users": 5,
        "exportsPerMonth": 4,
        "apiRateLimitPerMinute": 120
      }
    }
    

    Operator rules:

    • Do not enable production publication until publication boundary and review owner are recorded.
    • Do not exceed the `pilot` plan gates without written scope approval.
    • Do not promise self-serve billing, automated entitlements, or custom integrations during this pilot.
    • Do not search by loose organization slug when checking access; read by exact `tenantId`.
    • Do not run tenant-tagged imports from a public role. Provider import paths are generated from the capability registry and require `researcher` or higher for both direct legacy and `/api/providers/{provider}/import` facade routes.
    • Run `pnpm test -- tests/services/pilot-entitlements.test.ts` after changing plan IDs, gates, namespace rules, or manual invoice evidence.
    • Run `node --import tsx --test tests/services/org-storage-isolation.test.ts` after changing records, jobs, AgentTask artifact persistence, or scoped storage path rules.

    Outreach Evidence

    Record real outreach status with `pnpm pilot:outreach` instead of changing the static offer page by hand. The command writes to managed `pilot-outreach-events.json`, validates the account id against the named `/pilot` outreach queue, and rejects incomplete or out-of-sequence stage evidence before changing the ledger.

    
    pnpm pilot:outreach --account=benton-museum-of-art-at-pomona-college --stage=sent --occurred-at=2026-06-19T16:00:00Z --owner="operator-name" --evidence=channel=email --evidence=messageRef=outreach/benton/2026-06-19 --evidence=followUpAt=2026-06-26
    

    Use `pnpm pilot:outreach --summary` before updating buyer-facing notes. Do not claim first outreach has been sent until the `sent` event has `accountId`, `owner`, `channel`, `messageRef`, `sentAt`, and `followUpAt` evidence for one named account. The `followUpAt` date must be on or after `sentAt`, and `replied` evidence requires a prior `sent` event for the same named account with `repliedAt` on or after `sentAt`.

    Pilot Usage Gate

    Use `evaluatePilotUsage` for dry-run plan checks, `assertPilotUsageAllowed` for service callers, and `enforcePilotRouteUsageGate` for route handlers before work consumes monthly or per-minute plan capacity. The first enforced dimensions are:

    • imports per month
    • AI calls per month
    • storage GB
    • exports per month
    • API requests per minute

    Route-level gates are now wired for:

    • `app/api/providers/[provider]/import` through the shared provider facade, counting one import and one API request
    • `app/api/providers/[provider]/profile` and `app/api/providers/[provider]/search` through the shared provider facade, counting one API request
    • `app/api/ai/query`, `app/api/ai/chat`, `app/api/ai/embeddings`, `app/api/ai/visual-similarity`, and `app/api/ai/mapping-assist`, counting one AI call and one API request
    • `app/api/content/generate`, counting one AI call and one API request
    • `app/api/records`, counting tenant-tagged API reads/writes and one export when `?export=1`, `?download=1`, `?format=export`, `?format=jsonl`, `?format=csv`, or `x-metamuseum-export-request: true` is present

    Pilot automation must send the exact tenant ID. Route gates now derive current usage from `storage/pilot-usage-counters.json` through `src/services/pilot-usage-counters.ts`; that document is registered as managed storage, so `pnpm storage:export:postgres` carries usage counters alongside entitlement records during Postgres cutover.

    | Header | Meaning |

    |---|---|

    | `x-metamuseum-tenant-id` | Exact tenant ID, for example `pilot-benton-202606`. |

    | `x-metamuseum-usage-imports-this-month` | Legacy override only: imports already consumed in the current billing month. |

    | `x-metamuseum-usage-ai-calls-this-month` | Legacy override only: AI calls already consumed in the current billing month. |

    | `x-metamuseum-usage-storage-gb-used` | Legacy override only: current tenant storage usage in GB. |

    | `x-metamuseum-usage-exports-this-month` | Legacy override only: exports already consumed in the current billing month. |

    | `x-metamuseum-usage-api-requests-this-minute` | Legacy override only: API calls already consumed in the current rate-limit minute. |

    Requests without `x-metamuseum-tenant-id` remain public/evaluation behavior. Tenant-tagged requests require an exact active entitlement, read the current month/minute counter snapshot by exact tenant ID, reject malformed legacy usage snapshot headers when those overrides are present, and return a CORS-preserving `402` response before import, AI, export, or API work runs when the requested usage would exceed the `pilot` plan.

    Successful tenant-tagged `2xx` responses on those gated shared route paths increment the same counter ledger after route work completes. Denied, malformed, validation-error, and upstream-error responses do not consume quota.

    Direct provider-specific routes such as `/api/met/import`, `/api/getty/sparql`, or `/api/rijks/ldes` remain public/evaluation legacy surfaces only when no pilot tenant header is present. `proxy.ts` blocks tenant-tagged direct provider routes with `409` and points supported `profile`, `search`, and `import` operations at `/api/providers/{provider}/{operation}` so pilot usage cannot bypass facade gates and counters before multi-org hosting.

    Focused tenant-isolation tests now prove one over-plan pilot tenant cannot deny or mutate another tenant's counter snapshot at the entitlement/counter gate layer, service-level storage tests prove records, manual jobs, and persisted AgentTask artifacts can be isolated under the same storage root by exact org/tenant scope, and route tests prove tenant-tagged records, jobs, and AgentTask history do not bleed into sibling tenants or the unscoped default store. This does not replace the SaaS-2 requirement to propagate tenant identity through the remaining shared route callers or to add isolation coverage for activity metrics, annotations, audit logs, exports, and backup/restore evidence before shared multi-org hosting.

    Seven-Day Activation Checklist

    The pilot reaches first value only when all items below are true within seven calendar days of receiving usable source data:

    • workspace namespace assigned
    • manual entitlement recorded
    • source export ingested or staged
    • imported records are searchable
    • one representative record detail page is reviewable
    • Linked Art JSON response is available for at least one record
    • rights/reuse status is visible to the reviewer
    • critical validation issues are listed
    • customer review owner has viewed the workspace or evidence packet
    • next customer decision is recorded

    Usage And Activation Events

    Track these events manually until product analytics is tenant-aware:

    The public `/pilot` activation evidence ledger mirrors these event names, and `src/services/pilot-activation-events.ts` records the same events in managed `pilot-activation-events.json` by exact tenant id. Keep every public milestone at `not_started` until a real tenant has dated evidence; do not mark a milestone complete from a demo, seed fixture, or internal smoke run. Later milestones require prior activation evidence for the same tenant, and every event's evidence `tenantId` must match the top-level tenant id.

    Use the operator command to append real tenant evidence instead of hand-editing JSON:

    
    pnpm pilot:activation --tenant=pilot-benton-202606 --event=pilot.workspace.created --occurred-at=2026-06-19T12:00:00Z --evidence=workspaceOwner="operator-name" --evidence=createdAt=2026-06-19T12:00:00Z
    

    Use `pnpm pilot:activation --tenant=pilot-benton-202606 --summary` before sending a customer update to confirm the completed milestone count and the next required evidence. The command writes through the same managed storage service, auto-attaches `tenantId` to evidence, and rejects incomplete, tenant-mismatched, or out-of-sequence required fields before changing the ledger.

    | Event | Required fields | Why it matters |

    |---|---|---|

    | `pilot.workspace.created` | `tenantId`, `workspaceOwner`, `createdAt` | Starts the seven-day activation clock. |

    | `pilot.source.received` | `tenantId`, `sourceNamespace`, `recordEstimate`, `receivedAt` | Proves data readiness and source scope. |

    | `pilot.records.imported` | `tenantId`, `sourceNamespace`, `recordCount`, `importedAt` | Confirms first ingestion. |

    | `pilot.review.slice_ready` | `tenantId`, `recordCount`, `sliceUrl`, `readyAt` | Confirms first value for reviewers. |

    | `pilot.customer.viewed` | `tenantId`, `reviewOwner`, `viewedAt` | Confirms non-engineer access. |

    | `pilot.evidence.sent` | `tenantId`, `packetPath`, `sentAt` | Confirms recurring evidence delivery. |

    Support Intake

    Use one support channel per pilot. Record every issue with:

    • `tenantId`
    • requester
    • severity: `blocking`, `high`, `normal`, or `question`
    • record or source reference when relevant
    • decision owner
    • next response date
    • resolution summary

    Record support load with `pnpm pilot:support` instead of keeping issue state in ad hoc notes. The command writes to managed `pilot-support-issues.json`, validates severity/status fields, keeps issues scoped by exact tenant id, rejects response deadlines before `openedAt`, rejects existing issue updates that rewrite the original `requester`, `summary`, `openedAt`, or `severity`, rejects updates to already resolved issues that rewrite `resolvedAt` or `resolutionSummary`, rejects open issues that include resolution evidence, and rejects resolved issues without both `resolvedAt` and `resolutionSummary` or with `resolvedAt` before `openedAt`.

    
    pnpm pilot:support --tenant=pilot-benton-202606 --issue=SUP-1 --opened-at=2026-06-20T10:00:00Z --requester="customer-name" --severity=normal --title="Question about rights warning wording" --decision-owner="operator-name" --next-response-at=2026-06-24T18:00:00Z
    

    Use `pnpm pilot:support --tenant=pilot-benton-202606 --summary` before sending customer updates or monthly evidence packets. Support severities are `blocking`, `high`, `normal`, and `question`; support statuses are `open` and `resolved`.

    Support boundaries:

    • Blocking import or access issues get a next-business-day response.
    • Mapping, provenance, and rights questions are triaged weekly unless blocking publication.
    • Feature requests are logged as product feedback, not accepted as pilot scope by default.

    KPI Evidence

    Record monthly outcome evidence with `pnpm pilot:kpi` instead of deriving business readiness from usage counters alone. The command writes to managed `pilot-kpi-events.json`, keeps entries scoped by exact tenant id, validates known metric IDs, requires a numeric value, source, evidence reference, and owner, and rejects evidence references that look like demo, fixture, smoke, or sample data.

    
    pnpm pilot:kpi --tenant=pilot-benton-202606 --metric=pilot.first_value_days --value=4 --measured-at=2026-06-24T12:00:00Z --source="pilot-evidence/benton/activation-ledger" --evidence-ref="artifacts/pilot-evidence/benton-2026-06.json" --owner="operator-name"
    

    Use `pnpm pilot:kpi --tenant=pilot-benton-202606 --summary` before generating a monthly evidence packet. A ready packet requires one latest entry for each required KPI:

    | Metric | Meaning |

    |---|---|

    | `pilot.first_value_days` | Calendar days from usable source receipt to first reviewed value. |

    | `pilot.imported_record_count` | Count of records imported for the pilot tenant. |

    | `pilot.customer_view_count` | Count of customer review views or equivalent named reviewer access events. |

    | `pilot.support_minutes` | Operator support minutes spent during the packet period, including zero when documented. |

    | `pilot.validation_critical_open_count` | Open critical validation issues at packet close. |

    | `pilot.retention_signal_count` | Count of explicit continue, convert, expand-scope, or renewal signals from the customer. |

    | `pilot.gross_margin_percent` | Gross-margin percentage for the pilot period, backed by invoice revenue minus support, infra, and operator cost evidence. |

    Monthly Evidence Packet Template

    Generate the current operator packet with:

    
    pnpm pilot:evidence --tenant=pilot-benton-202606 --account=benton-museum-of-art-at-pomona-college --markdown
    

    Use `--check` in closeout, CI, or pre-send review when the packet must be

    ready rather than merely generated:

    
    pnpm pilot:evidence --tenant=pilot-benton-202606 --account=benton-museum-of-art-at-pomona-college --markdown --check
    

    The command writes `artifacts/pilot-evidence/pilot-evidence-latest.json`, `artifacts/pilot-evidence/pilot-evidence-latest.md`, and timestamped packet files. The JSON packet is the machine-readable source of truth; the Markdown packet is the customer/buyer-facing summary for email, docs, or procurement review. Each packet includes invoice-backed commercial evidence, support-load counts from `pilot-support-issues.json`, and KPI evidence from `pilot-kpi-events.json`. A packet is `ready` only when the exact tenant has an active manual entitlement with a real invoice reference that is not demo, fixture, internal, placeholder, sample, smoke, or test evidence, at least one named outreach account has a sent/replied event, all activation milestones have dated evidence, support-load evidence is tied to an invoice-backed pilot period with `pilot.support_minutes` recorded, no blocking support issue remains open, no open support issue is past `nextResponseAt`, all required KPI metrics have real tenant evidence, `pilot.retention_signal_count` records a real continue, convert, expand-scope, or renewal signal, and `pilot.gross_margin_percent` records real invoice-minus-cost evidence for the pilot period; otherwise it is `blocked` with explicit open blockers. An empty support ledger before an invoice-backed pilot exists is a pending capture state, not strict support-load proof.

    With `--check`, a blocked packet exits non-zero while still writing the JSON and

    Markdown artifacts, so missing real outreach, entitlement, activation, or

    support or KPI evidence cannot pass an automated readiness check silently.

    Each monthly packet must include:

    1. Pilot summary
    1. Activation status
    1. Data quality
    1. Rights and provenance
    1. Product usage
    1. Support load
    1. Next decision
    • tenant ID
    • source namespace
    • record count
    • publication mode
    • current status
    • seven-day checklist result
    • first-value date
    • reviewer access status
    • validation summary
    • critical issues
    • unresolved mapping questions
    • enrichment coverage when available
    • rights/reuse status summary
    • records held for review
    • provenance risks
    • review sessions or customer views
    • API/export examples used
    • AI review runs consumed
    • open issues
    • resolved issues
    • operator minutes estimate
    • continue pilot
    • expand source scope
    • pause
    • convert to recurring subscription

    Exit Criteria

    A pilot can be called successful when:

    • first value is reached within seven days
    • customer review owner can inspect records without routine developer help
    • monthly evidence packet is delivered
    • support load is recorded
    • conversion decision is explicit

    Do not claim profitable SaaS readiness from this runbook alone. Profitability still needs recurring revenue, support-load evidence, retention, gross-margin, and acquisition-channel proof.

    AI/agent quick endpoints