Example 02: Cross-edition comparison supporting a regulatory submission
Scenario: a process engineer at a small-molecule pharmaceutical sponsor is preparing a CMC supplement for a regulatory submission. The submission switches a tablet line from batch to continuous direct compression. The relevant verification-of-continuous-manufacturing standard has just gone through a major edition revision.
Tools exercised: list_changes, resolve_reference (the second call surfaces the cross-publisher pointer case).
Standard (fictional): TMF-3050, Standard Guide for Verification of Continuous Pharmaceutical Manufacturing Systems. Comparison between editions 2023 and 2026.
Engineering intent: regulatory-submission (5).
Deliverable type: submitted-to-regulator (4).
Requester authority: organization-licensee (1). Regulatory submissions are issued by the firm, not by the individual engineer.
CLASP version: 0.1.
Language: canonical en; AI System declares preferred_languages: ["en"]. The regulatory incorporation is annotated with the transition-window fields and the BPEC pointer in Step 5 closes the loop with the BPEC discoverability catalog example.
Engineering context
The sponsor’s existing validation procedures were qualified against TMF-3050-2023, and the regulator’s reviewer guidance, last updated in 2024, references the 2023 edition by name. TMF-3050-2026 is now in force and the sponsor needs a structured, citable diff between the two editions to support the supplement’s justification narrative and to identify which qualified procedures need re-evaluation.
The engineer’s regulatory-authoring environment hosts a CLASP-aware AI assistant. The AI System issues list_changes between the two editions, then follows a normative reference in the 2026 edition via resolve_reference. The reference points to a clause in BPEC-200, Hygienic Design of Single-Use Bioprocess Components, which is published by a different SDO that the sponsor does not hold a license to. The response is a structured pointer, not text.
Step 1: CoMP handshake request
{
"aisystem": {
"name": "reg-authoring.example",
"ua": "RegSubmissionAI/2.0",
"id": "TL-REG-998877",
"aisysuse": {
"lid": "TMF-LIC-SPONSOR-2026-A7714",
"aiauth": 2,
"uri": ["https://retrieval.tmf.example/mcp"],
"scope": 5,
"function": [3],
"subfn": [2],
"resdis": 1,
"ext": {
"clasp_version": "0.1",
"engineering_intent": [5],
"target_designation": ["TMF-3050"],
"target_edition": "2023",
"target_edition_compare": "2026",
"preferred_languages": ["en"],
"deliverable_type": 4,
"requester_authority": 1
}
}
}
}What this declares
function = [3](ai-input),subfn = [2](grounding): the AI System will use retrieved content to ground generated text in the regulatory submission.engineering_intent = [5](regulatory-submission): the engineering workflow is preparing a regulator-bound document.target_edition = "2023",target_edition_compare = "2026": the session intends to uselist_changesbetween these two editions. Withtarget_edition_comparepopulated,target_editionis interpreted as the “from” edition.deliverable_type = 4(submitted-to-regulator): the strictest deliverable type. The Content Owner is expected to requireexact_text_mode = 1and may impose other constraints (some publishers requirerequester_authority = 0for submitted-to-regulator; this publisher accepts organization-licensee).requester_authority = 1(organization-licensee): the firm is the licensee. The citation envelope will carry this through and any FDA reviewer can verify the firm-level attribution.
Step 2: CoMP handshake response
{
"package": {
"id": "PKG-TMF-3050-CROSSED-S122",
"title": "TMF-3050 Cross-Edition Access (2023 to 2026)",
"seller": "tmf.example",
"licenseurl": "https://tmf.example/licensing/clasp-terms",
"reporturl": "https://tmf.example/reporting/clasp-usage",
"citation": 1,
"scope": {
"scope": 5,
"ause": 0,
"pricetype": 4,
"pricetier": 2,
"licensedur": 365,
"max": 0,
"ctype": [0],
"text": [
{
"title": "TMF-3050-2023, Standard Guide for Verification of Continuous Pharmaceutical Manufacturing Systems",
"language": [22],
"pubdate": "2023-09-01T00:00:00Z",
"author": ["Technical Methods Federation"],
"sourcetype": 0
},
{
"title": "TMF-3050-2026, Standard Guide for Verification of Continuous Pharmaceutical Manufacturing Systems",
"language": [22],
"pubdate": "2026-02-12T00:00:00Z",
"author": ["Technical Methods Federation"],
"sourcetype": 0
}
],
"ext": {
"clasp_version": "0.1",
"publisher": "tmf.example",
"designation": "TMF-3050",
"edition": "2026",
"pubdate": "2026-02-12",
"canonical_language": "en",
"available_languages": ["en", "fr"],
"supersedes": ["TMF-3050-2023"],
"industry_sectors": [0, 1],
"clause_scheme": "https://tmf.example/schemas/clause-scheme/3050-2026.json",
"defined_terms_uri": "https://tmf.example/standards/3050/2026/defined-terms",
"normative_refs": [
{
"designation": "BPEC-200",
"edition": "2024",
"publisher": "bpec.example",
"clauses": ["8.3.2"]
},
{
"designation": "TMF-3001",
"edition": "2022",
"publisher": "tmf.example",
"clauses": ["4.1", "4.2"]
}
],
"regulatory_incorporations": [
{
"regulator": "example-pharma-regulator.gov",
"regulation_id": "EX-CFR-211.X (proposed amendment, 2024)",
"incorporation_date": "2024-11-01",
"pinned_edition": "2023",
"transition_window_start": "2026-07-01",
"transition_window_end": "2027-12-31",
"next_pinned_edition": "2026"
}
]
}
},
"retrieval": {
"auth": 2,
"endpoint": "https://retrieval.tmf.example/mcp",
"type": [3],
"ext": {
"clasp_version": "0.1",
"tools": [0, 1, 2, 3, 4],
"exact_text_mode": 1,
"citation_envelope": "https://clasp.example/schemas/citation-envelope-0.1.json"
}
}
}
}What this declares
scope.ext.editionis the “current” edition (2026). Thesupersedeschain records that2023is the prior edition. Thetarget_editionfrom the handshake (2023) is licensed for this session even though it is superseded; cross-edition tools require both editions to be accessible.regulatory_incorporationsis populated: the regulator pinned the 2023 edition. The transition-window fields (transition_window_start: 2026-07-01,transition_window_end: 2027-12-31,next_pinned_edition: 2026) tell the AI System and the engineer that the regulator has announced a transition. The 2026 edition becomes acceptable for new submissions on 2026-07-01, and the 2023 edition is no longer acceptable after 2027-12-31. This is the architectural reason the engineer is generating a diff in the first place; the submission must justify why work qualified against the pinned edition is acceptable under the current edition, and the transition-window dates give the regulator’s reviewer a concrete frame for the justification.normative_refslists two normative references. One is to a TMF document (same publisher; the responding Content Owner can resolve it inline). The other is toBPEC-200, a different publisher; resolution will require a pointer.retrieval.ext.tools = [0, 1, 2, 3, 4]includeslist_changes(3) andresolve_reference(4), which is what this session needs.
Step 3: MCP tool call — list_changes
The AI System requests the change set between the two editions, filtered to the specific clause subtree that is operative for the supplement (the verification of continuous direct compression sub-process is covered in clauses 7.x).
Tool call:
{
"tool": "list_changes",
"arguments": {
"clause_filter": "7..7.99"
}
}Response (abbreviated to three changes for readability; a real response would include all changes in the filter):
{
"changes": [
{
"clause": "7.2.1",
"change_kind": "modified",
"before_text": "The verification plan SHALL include sampling at the outlet of the continuous direct compression line at a frequency sufficient to detect material composition drift over a single production campaign.",
"after_text": "The verification plan SHALL include sampling at the outlet of the continuous direct compression line at a frequency sufficient to detect material composition drift over a single production campaign. Sampling frequency SHALL be defined as a function of the line's mean residence time, with a minimum of three samples per residence time interval, in accordance with the residence-time-distribution analysis required by 7.2.2.",
"description": "Sampling frequency now has a normative minimum tied to mean residence time. Prior text was silent on minimum frequency. Impact: validation procedures qualifying sampling at fixed wall-clock intervals (e.g. every 15 minutes) must be reassessed against the new mean-residence-time-coupled criterion."
},
{
"clause": "7.2.2",
"change_kind": "added",
"before_text": null,
"after_text": "A residence-time-distribution analysis SHALL be performed for the continuous direct compression line as part of the verification plan. The analysis SHALL use the method described in TMF-3001:2022 clauses 4.1 and 4.2, or an equivalent method documented in the verification plan and accepted by the responsible quality function.",
"description": "New normative clause introducing residence-time-distribution analysis as a verification-plan requirement. Cross-references TMF-3001:2022."
},
{
"clause": "7.4.3",
"change_kind": "modified",
"before_text": "Wetted components in contact with active pharmaceutical ingredient streams SHALL comply with the hygienic design requirements of generally recognized industry practice.",
"after_text": "Wetted components in contact with active pharmaceutical ingredient streams SHALL comply with BPEC-200:2024 clause 8.3.2.",
"description": "Replaces 'generally recognized industry practice' with a normative reference to BPEC-200:2024 clause 8.3.2. Impact: components qualified under the prior text need a documented BPEC-200:2024 compliance assessment."
}
],
"envelope": {
"envelope_version": "0.1",
"tool": "list_changes",
"publisher": "tmf.example",
"designation": "TMF-3050",
"primary_edition": "2023",
"comparison_edition": "2026",
"language": "en",
"retrieval_timestamp": "2026-05-15T15:08:11Z",
"endpoint_uri": "https://retrieval.tmf.example/mcp",
"license_id_fingerprint": "sha256:6f5e4d3c2b1a0f9e8d7c6b5a4938271605f4e3d2c1b0a9988776655443322110",
"deliverable_type": 4,
"requester_authority": 1,
"citations": [
{
"clause": "7.2.1",
"mode": 3,
"content_hash": "sha256:8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b",
"content_length": 692,
"snippet": null,
"diff": { "from_edition": "2023", "to_edition": "2026", "change_kind": "modified" },
"pointer": null
},
{
"clause": "7.2.2",
"mode": 3,
"content_hash": "sha256:9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c",
"content_length": 401,
"snippet": null,
"diff": { "from_edition": "2023", "to_edition": "2026", "change_kind": "added" },
"pointer": null
},
{
"clause": "7.4.3",
"mode": 3,
"content_hash": "sha256:0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d",
"content_length": 328,
"snippet": null,
"diff": { "from_edition": "2023", "to_edition": "2026", "change_kind": "modified" },
"pointer": null
}
]
}
}What this demonstrates
- The envelope’s
primary_editionis2023(the “from” edition) andcomparison_editionis2026. This is the one tool that populates both fields. - All three citations have
mode = 3(diff). Eachdiffsub-object records the editions compared and the kind of change. An AI System emitting a claim that “clause 7.2.2 is new in the 2026 edition” can be checked against achange_kind = addeddiff citation; no other mode supports such a claim. - The
content_hashfor each citation is computed over the canonical JSON serialization of the diff record, not over the clause text. The change_kind and the before/after text are part of the hashed structure, so a downstream reader can recompute the hash to verify integrity.
Step 4: MCP tool call — resolve_reference (same-publisher)
The 2026 edition’s clause 7.2.2 normatively cites TMF-3001:2022 clauses 4.1 and 4.2. The AI System resolves this reference. Because both designations belong to the same publisher (TMF), the response returns the clauses inline.
Tool call:
{
"tool": "resolve_reference",
"arguments": {
"reference": {
"designation": "TMF-3001",
"edition": "2022",
"clauses": ["4.1", "4.2"]
},
"mode": "exact-text"
}
}Response (showing just clause 4.1; clause 4.2 would follow the same pattern):
{
"resolved": {
"designation": "TMF-3001",
"edition": "2022",
"publisher": "tmf.example",
"clauses": [
{
"clause": "4.1",
"content": "The residence-time-distribution (RTD) analysis of a continuous process line SHALL be performed by introducing a tracer at the line inlet and measuring tracer concentration at the line outlet over time. The tracer SHALL be inert with respect to the process chemistry and detectable at the required sensitivity at the outlet measurement point. The method of tracer introduction SHALL be either pulse, step, or random binary sequence; the choice SHALL be documented in the analysis plan.",
"mode": "exact-text"
}
]
},
"envelope": {
"envelope_version": "0.1",
"tool": "resolve_reference",
"publisher": "tmf.example",
"designation": "TMF-3001",
"primary_edition": "2022",
"comparison_edition": null,
"language": "en",
"retrieval_timestamp": "2026-05-15T15:09:42Z",
"endpoint_uri": "https://retrieval.tmf.example/mcp",
"license_id_fingerprint": "sha256:6f5e4d3c2b1a0f9e8d7c6b5a4938271605f4e3d2c1b0a9988776655443322110",
"deliverable_type": 4,
"requester_authority": 1,
"citations": [
{
"clause": "4.1",
"mode": 0,
"content_hash": "sha256:1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e",
"content_length": 487,
"snippet": null,
"diff": null,
"pointer": null
}
]
}
}What this demonstrates
- The envelope’s
designationisTMF-3001, notTMF-3050. A single CLASP session can return citation envelopes anchored to different standards as long as all such standards are within the session’s licensed scope. mode = 0(exact-text): the cited text is verbatim. The AI System may quote it in the regulatory submission as long as the envelope is attached.
Step 5: MCP tool call — resolve_reference (cross-publisher)
The 2026 edition’s clause 7.4.3 normatively cites BPEC-200:2024 clause 8.3.2. BPEC is a different publisher. The sponsor does not hold a BPEC license.
Tool call:
{
"tool": "resolve_reference",
"arguments": {
"reference": {
"designation": "BPEC-200",
"edition": "2024",
"clauses": ["8.3.2"]
},
"mode": "exact-text"
}
}Response:
{
"resolved": {
"designation": "BPEC-200",
"edition": "2024",
"publisher": "bpec.example",
"clauses": [
{
"clause": "8.3.2",
"pointer": {
"target_publisher": "bpec.example",
"target_designation": "BPEC-200",
"target_edition": "2024",
"target_clause": "8.3.2",
"discoverability_uri": "https://bpec.example/.well-known/clasp-catalog"
}
}
]
},
"envelope": {
"envelope_version": "0.1",
"tool": "resolve_reference",
"publisher": "tmf.example",
"designation": "BPEC-200",
"primary_edition": "2024",
"comparison_edition": null,
"language": null,
"retrieval_timestamp": "2026-05-15T15:10:18Z",
"endpoint_uri": "https://retrieval.tmf.example/mcp",
"license_id_fingerprint": "sha256:6f5e4d3c2b1a0f9e8d7c6b5a4938271605f4e3d2c1b0a9988776655443322110",
"deliverable_type": 4,
"requester_authority": 1,
"citations": [
{
"clause": "8.3.2",
"mode": 5,
"content_hash": "sha256:2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f",
"content_length": 218,
"snippet": null,
"diff": null,
"pointer": {
"target_publisher": "bpec.example",
"target_designation": "BPEC-200",
"target_edition": "2024",
"target_clause": "8.3.2",
"discoverability_uri": "https://bpec.example/.well-known/clasp-catalog"
}
}
]
}
}What this demonstrates
- The envelope’s
publisher(tmf.example) and the citation’spointer.target_publisher(bpec.example) are different. This is the cross-publisher case. mode = 5(pointer): the AI System has NOT received the text ofBPEC-200:2024clause8.3.2. It has received a structured pointer to where that text can be licensed. Downstream emission rules apply: the AI System MUST NOT quoteBPEC-200clause8.3.2based on this envelope. It can disclose to the engineer that the reference exists and direct them to the BPEC discoverability catalog.content_hashis over the canonical JSON serialization of thepointerobject, not over clause text. There is no clause text to hash.endpoint_uriis the TMF endpoint, because the TMF endpoint generated the pointer; the AI System would need a separate handshake with BPEC to retrieve the actual clause text.- The envelope’s
languagefield isnull. Pointer-only responses do not include any rendered text, so no language attaches; this is the only envelope shape that legitimately has anulllanguage.
What this example demonstrates that the others do not
target_edition_comparepopulated; the envelope’sprimary_editionandcomparison_editionboth populated forlist_changes.mode = 3(diff) andmode = 5(pointer) citation types.submitted-to-regulatordeliverable type forcingexact_text_mode = 1and the strictest envelope discipline.organization-licenseerequester_authority.- A single session spanning citations from two designations (
TMF-3050,TMF-3001) and a pointer to a third (BPEC-200). regulatory_incorporationspopulated with transition-window fields (transition_window_start,transition_window_end,next_pinned_edition), capturing why the engineer is doing the diff and giving the regulator’s reviewer a concrete frame for the transition justification.available_languagesdeclaring more than one rendering (["en", "fr"]); the AI System’spreferred_languages: ["en"]selects English, but a French-language retrieval would have been available within the same session.- A
language: nullenvelope (Step 5), demonstrating the cross-publisher pointer case where no language attaches.
Notes on the protocol surface
- The
clause_filterargument tolist_changesis an MCP tool argument and is not part of the CoMP handshake. It is also not part oftarget_clausesin the handshake;target_clausesdeclares the session’s authorized clause subset (here, none specified, meaning the full standard is in scope), whileclause_filternarrows the specific tool call. - The
target_clausesrenumbering case is handled by CLASP-0.1: default is the “to” edition’s numbering, with explicit override viatarget_clauses_numbering. This example continues to leavetarget_clausesunset at session level (filtering at tool-call time) because the scenario doesn’t need to narrow the diff; the mechanism is available for scenarios that do. - The
Object: RegulatoryIncorporationshape used here is the CLASP-0.1 form, including the transition-window fields. The multi-jurisdiction case is addressed in CLASP-0.1 prose: the Content Owner surfaces all incorporations; the AI System filters by session context. This example shows only one regulator; a multi-regulator example would just populate the array with multiple entries and let the AI System pick by deliverable target.