@disclosureos/instruments 2.0.0-beta.5 → 2.0.0-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @disclosureos/instruments
2
2
 
3
+ ## 2.0.0-beta.6
4
+
5
+ ### Patch Changes
6
+
7
+ - Use patched Zod 4.6.6 for validation, resolving GHSA-mrhx-c7xc-m3w5 without requiring a consumer dependency override. Preserve published schema identities and verify existing documents and package consumers against the patched runtime.
8
+ - Updated dependencies
9
+ - @disclosureos/records@2.0.0-beta.6
10
+
3
11
  ## 2.0.0-beta.5
4
12
 
5
13
  ### Patch Changes
@@ -1,3 +1,4 @@
1
+ import { preservePublishedSchema } from '@disclosureos/records/shared';
1
2
  import { z } from 'zod';
2
3
  import { compareUtcInstants } from '@disclosureos/records/experimental/v2';
3
4
 
@@ -89,7 +90,7 @@ var AcquisitionContextSchema = z.strictObject({
89
90
  extensions: z.record(z.string().regex(/^[a-z][a-z0-9_-]*(?:\.[a-z0-9_-]+)+(?![\s\S])/), z.json()).optional()
90
91
  });
91
92
  function acquisitionContextJsonSchema() {
92
- return { ...z.toJSONSchema(AcquisitionContextSchema, { target: "draft-2020-12" }), $id: ACQUISITION_CONTEXT_SCHEMA_ID };
93
+ return { ...preservePublishedSchema(z.toJSONSchema(AcquisitionContextSchema, { target: "draft-2020-12" })), $id: ACQUISITION_CONTEXT_SCHEMA_ID };
93
94
  }
94
95
  var pointer = (path) => path.map((p) => `/${String(p).replace(/~/g, "~0").replace(/\//g, "~1")}`).join("");
95
96
  function parseAcquisitionContext(input) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/experimental/v2/schema.ts","../../../src/experimental/v2/validate.ts"],"names":["ref","instant","period","channel","pointer","binding"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod';\n\nconst text = z.string().min(1).regex(/\\S/);\nconst id = z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]*(?![\\s\\S])/);\nconst ref = (kind: string) => z.string().regex(new RegExp(`^${kind}:[A-Za-z0-9][A-Za-z0-9._-]*(?![\\\\s\\\\S])`));\n// Locally owned schema, matching the records UTC lexical contract without crossing Zod instances.\nconst instant = z.iso.datetime({offset:true}).regex(/^(?!0000)/).regex(/T[0-9]{2}:[0-9]{2}:[0-9]{2}/).regex(/(?:Z|[+-][0-9]{2}:[0-9]{2})(?![\\s\\S])/);\nconst unknown = z.strictObject({state:z.literal('unknown'),reason:text});\nconst knownText = z.union([z.strictObject({state:z.literal('known'),value:text}),unknown]);\nconst knownInstant = z.union([z.strictObject({state:z.literal('known'),value:instant}),unknown]);\nconst interval = z.strictObject({state:z.literal('known'),start:instant,end:instant,timeScale:z.literal('UTC')});\nconst period = z.union([interval,unknown]);\nconst binding = (kind: string) => z.union([\n z.strictObject({state:z.literal('pinned'),ref:ref(kind)}),\n z.strictObject({state:z.literal('unresolved'),reason:text,legacyRef:text.optional()}),\n]);\nexport const ContextArtifactSchema = z.strictObject({\n digest:z.strictObject({algorithm:z.literal('sha256'),value:z.string().regex(/^[a-f0-9]{64}(?![\\s\\S])/)}),\n mediaType:text,byteLength:z.number().int().min(0).max(Number.MAX_SAFE_INTEGER),uri:z.url().optional(),\n});\nexport const InstrumentInstanceSchema = z.strictObject({\n id,identity:z.union([z.strictObject({state:z.literal('known'),manufacturer:text,model:text,serialNumber:text.optional()}),unknown]),\n});\nconst channel = z.strictObject({id,quantity:text,unit:text,sampling:z.union([z.strictObject({state:z.literal('known'),rateHz:z.number().positive()}),unknown])});\nexport const ManifestRevisionSchema = z.strictObject({\n id,instrumentRef:ref('instrument'),version:text,publishedAt:instant,artifact:ContextArtifactSchema,\n configuration:z.strictObject({hardware:knownText,firmware:knownText}),channels:z.array(channel).min(1),\n});\nexport const DeploymentContextSchema = z.strictObject({id,instrumentRef:ref('instrument'),manifest:binding('manifest'),period,site:knownText});\nconst quantified = {magnitude:z.number().min(0),unit:text};\nconst uncertainty = z.union([\n z.strictObject({kind:z.literal('unknown'),reason:text}),\n z.strictObject({kind:z.literal('standard'),...quantified}),z.strictObject({kind:z.literal('bound'),...quantified}),\n z.strictObject({kind:z.literal('expanded'),...quantified,coverageFactor:z.number().positive(),coverageProbability:z.number().gt(0).lte(1).optional()}),\n]);\nexport const CalibrationContextSchema = z.strictObject({\n id,instrumentRef:ref('instrument'),manifestRef:ref('manifest'),channelId:id,performedAt:knownInstant,validity:period,\n method:z.union([z.strictObject({state:z.literal('known'),id:text,version:text,description:text}),unknown]),\n report:z.union([z.strictObject({state:z.literal('known'),artifact:ContextArtifactSchema}),unknown]),uncertainty,\n review:z.union([z.strictObject({state:z.literal('unreviewed')}),unknown,\n z.strictObject({state:z.literal('reviewed'),reviewedBy:text,reviewedAt:instant,outcome:z.enum(['accepted','rejected','inconclusive']),report:ContextArtifactSchema})]),\n});\nconst timingQuantity = (positive: boolean) => z.union([\n z.strictObject({state:z.literal('known'),magnitude:positive ? z.number().positive() : z.number().min(0),unit:z.enum(['s','ms','us','ns'])}),unknown,\n]);\nexport const AcquisitionContextEntrySchema = z.strictObject({\n id,instrumentRef:ref('instrument'),manifest:binding('manifest'),deployment:binding('deployment'),\n time:z.union([z.strictObject({state:z.literal('known'),kind:z.literal('instant'),value:instant,timeScale:z.literal('UTC')}),interval.extend({kind:z.literal('interval')}),unknown]),\n classification:z.enum(['background','known_control','candidate','other','unknown']),\n clock:z.strictObject({source:knownText,synchronization:knownText,resolution:timingQuantity(true),uncertainty:timingQuantity(false)}),\n channels:z.array(z.strictObject({channelId:id,calibration:binding('calibration')})).min(1),\n});\nexport const RawAcquisitionProductSchema = z.strictObject({id,acquisitionRef:ref('acquisition'),kind:z.literal('raw'),artifact:ContextArtifactSchema});\nexport const ACQUISITION_CONTEXT_SCHEMA_ID = 'urn:disclosureos:experimental:acquisition-context:0.1.0';\nexport const ACQUISITION_CONTEXT_RULESET_VERSION = '0.1.0';\nexport const AcquisitionContextSchema = z.strictObject({\n kind:z.literal('acquisition_context'),schemaVersion:z.literal('0.1.0'),id,\n instruments:z.array(InstrumentInstanceSchema),manifests:z.array(ManifestRevisionSchema),deployments:z.array(DeploymentContextSchema),\n calibrations:z.array(CalibrationContextSchema),acquisitions:z.array(AcquisitionContextEntrySchema),products:z.array(RawAcquisitionProductSchema),\n extensions:z.record(z.string().regex(/^[a-z][a-z0-9_-]*(?:\\.[a-z0-9_-]+)+(?![\\s\\S])/),z.json()).optional(),\n});\nexport type AcquisitionContext = z.infer<typeof AcquisitionContextSchema>;\nexport type AcquisitionContextEntry = z.infer<typeof AcquisitionContextEntrySchema>;\nexport type CalibrationContext = z.infer<typeof CalibrationContextSchema>;\nexport type ManifestRevision = z.infer<typeof ManifestRevisionSchema>;\nexport type ContextArtifact = z.infer<typeof ContextArtifactSchema>;\nexport function acquisitionContextJsonSchema(): Record<string,unknown> {\n return {...z.toJSONSchema(AcquisitionContextSchema,{target:'draft-2020-12'}),$id:ACQUISITION_CONTEXT_SCHEMA_ID};\n}\n","import { compareUtcInstants } from '@disclosureos/records/experimental/v2';\nimport { AcquisitionContextSchema, ACQUISITION_CONTEXT_SCHEMA_ID, ACQUISITION_CONTEXT_RULESET_VERSION } from './schema';\nimport type { AcquisitionContext, AcquisitionContextEntry, ManifestRevision } from './schema';\n\nexport type AcquisitionContextIssueCode = 'STRUCT.VALUE' | 'REF.UNIQUE_ID' | 'REF.LOCAL_RESOLUTION' | 'REF.INSTRUMENT_MISMATCH'\n | 'MANIFEST.AMBIGUOUS_VERSION' | 'MANIFEST.MISMATCH' | 'CHANNEL.UNKNOWN' | 'TIME.INTERVAL' | 'TIME.INSTANT'\n | 'TIME.OUTSIDE_DEPLOYMENT' | 'CALIBRATION.CHANNEL_MISMATCH' | 'CALIBRATION.AFTER_ACQUISITION' | 'CALIBRATION.OUTSIDE_VALIDITY'\n | 'CALIBRATION.REVIEW_ORDER' | 'UNIT.MISMATCH' | 'CONTEXT.UNRESOLVED' | 'CONTEXT.UNKNOWN';\nexport interface AcquisitionContextIssue {code:AcquisitionContextIssueCode;stage:'structural'|'semantic';severity:'error'|'warning';pointer:string;message:string}\nexport interface AcquisitionResolution {acquisitionRef:string;status:'resolved'|'incomplete';manifestRef?:string;calibrationRefs:string[];missingPointers:string[]}\ninterface ResultBase {\n checks:{structural:'passed'|'failed';semantic:'passed'|'failed'|'not_checked';profile:'not_checked';external:'not_checked'};\n contract:{schemaId:typeof ACQUISITION_CONTEXT_SCHEMA_ID;rulesetVersion:typeof ACQUISITION_CONTEXT_RULESET_VERSION};\n issues:AcquisitionContextIssue[];uncheckedArtifactPointers:string[];\n}\nexport type AcquisitionContextResult = ResultBase & ({success:true;data:AcquisitionContext;acquisitions:AcquisitionResolution[]}|{success:false});\nconst pointer = (path:readonly PropertyKey[]) => path.map(p=>`/${String(p).replace(/~/g,'~0').replace(/\\//g,'~1')}`).join('');\ntype Period = {state:'known';start:string;end:string;timeScale:'UTC'} | {state:'unknown';reason:string};\n\n/** Validates pinned declarations, not scientific calibration adequacy or artifact bytes. */\nexport function parseAcquisitionContext(input:unknown):AcquisitionContextResult {\n const contract:ResultBase['contract']={schemaId:ACQUISITION_CONTEXT_SCHEMA_ID,rulesetVersion:ACQUISITION_CONTEXT_RULESET_VERSION};\n const parsed=AcquisitionContextSchema.safeParse(input);\n if(!parsed.success) return {success:false,contract,checks:{structural:'failed',semantic:'not_checked',profile:'not_checked',external:'not_checked'},uncheckedArtifactPointers:[],\n issues:parsed.error.issues.map(issue=>({code:'STRUCT.VALUE',stage:'structural',severity:'error',pointer:pointer(issue.path),message:issue.message}))};\n const data=parsed.data;\n const issues:AcquisitionContextIssue[]=[];\n const uncheckedArtifactPointers:string[]=[];\n const error=(code:AcquisitionContextIssueCode,path:string,message:string)=>issues.push({code,stage:'semantic',severity:'error',pointer:path,message});\n function index<T extends {id:string}>(items:T[],kind:string,collection:string) {\n const map=new Map<string,{value:T;pointer:string}>();\n items.forEach((value,i)=>{\n const ref=`${kind}:${value.id}`;\n if(map.has(ref)) error('REF.UNIQUE_ID',`/${collection}/${i}/id`,'Duplicate ID; pinned revisions must be unambiguous.');\n else map.set(ref,{value,pointer:`/${collection}/${i}`});\n });\n return map;\n }\n const instruments=index(data.instruments,'instrument','instruments');\n const manifests=index(data.manifests,'manifest','manifests');\n const deployments=index(data.deployments,'deployment','deployments');\n const calibrations=index(data.calibrations,'calibration','calibrations');\n const acquisitions=index(data.acquisitions,'acquisition','acquisitions');\n index(data.products,'product','products');\n function resolve<T>(map:Map<string,T>,ref:string,path:string):T|undefined {\n const value=map.get(ref);\n if(!value) error('REF.LOCAL_RESOLUTION',path,`Undeclared pinned reference: ${ref}`);\n return value;\n }\n function sameInstrument(expected:string,actual:string,path:string):void {\n if(expected!==actual) error('REF.INSTRUMENT_MISMATCH',path,'Pinned context belongs to a different instrument instance.');\n }\n function instant(value:string,path:string):void {\n if(compareUtcInstants(value,value)===undefined) error('TIME.INSTANT',path,'Instant cannot be resolved with its UTC offset.');\n }\n function period(value:Period,path:string):void {\n if(value.state==='unknown') return;\n instant(value.start,`${path}/start`);instant(value.end,`${path}/end`);\n const order=compareUtcInstants(value.start,value.end);\n if(order!==undefined && order>=0) error('TIME.INTERVAL',`${path}/end`,'Half-open intervals require end strictly after start; represent a point acquisition as an instant.');\n }\n const channelMaps=new Map<string,Map<string,{value:ManifestRevision['channels'][number];pointer:string}>>();\n const versions=new Set<string>();\n for(const [i,manifest] of data.manifests.entries()) {\n const path=`/manifests/${i}`;\n resolve(instruments,manifest.instrumentRef,`${path}/instrumentRef`);\n instant(manifest.publishedAt,`${path}/publishedAt`);\n const version=JSON.stringify([manifest.instrumentRef,manifest.version]);\n if(versions.has(version)) error('MANIFEST.AMBIGUOUS_VERSION',`${path}/version`,'Instrument/version pair is declared more than once.');\n versions.add(version);\n const channels=new Map<string,{value:ManifestRevision['channels'][number];pointer:string}>();\n for(const [j,channel] of manifest.channels.entries()) {\n if(channels.has(channel.id)) error('REF.UNIQUE_ID',`${path}/channels/${j}/id`,'Duplicate channel ID within manifest revision.');\n channels.set(channel.id,{value:channel,pointer:`${path}/channels/${j}`});\n }\n channelMaps.set(`manifest:${manifest.id}`,channels);\n uncheckedArtifactPointers.push(`${path}/artifact`);\n }\n for(const [i,deployment] of data.deployments.entries()) {\n const path=`/deployments/${i}`;\n resolve(instruments,deployment.instrumentRef,`${path}/instrumentRef`);period(deployment.period,`${path}/period`);\n if(deployment.manifest.state==='pinned') {\n const manifest=resolve(manifests,deployment.manifest.ref,`${path}/manifest/ref`);\n if(manifest) sameInstrument(deployment.instrumentRef,manifest.value.instrumentRef,`${path}/manifest/ref`);\n }\n }\n for(const [i,calibration] of data.calibrations.entries()) {\n const path=`/calibrations/${i}`;\n resolve(instruments,calibration.instrumentRef,`${path}/instrumentRef`);\n const manifest=resolve(manifests,calibration.manifestRef,`${path}/manifestRef`);\n if(manifest) {\n sameInstrument(calibration.instrumentRef,manifest.value.instrumentRef,`${path}/manifestRef`);\n const channel=channelMaps.get(calibration.manifestRef)?.get(calibration.channelId);\n if(!channel) error('CHANNEL.UNKNOWN',`${path}/channelId`,'Calibration channel is not in its pinned manifest.');\n else if(calibration.uncertainty.kind!=='unknown' && calibration.uncertainty.unit!==channel.value.unit) error('UNIT.MISMATCH',`${path}/uncertainty/unit`,'Declared calibration uncertainty unit differs from its channel.');\n }\n if(calibration.performedAt.state==='known') instant(calibration.performedAt.value,`${path}/performedAt/value`);\n period(calibration.validity,`${path}/validity`);\n if(calibration.report.state==='known') uncheckedArtifactPointers.push(`${path}/report/artifact`);\n if(calibration.review.state==='reviewed') {\n instant(calibration.review.reviewedAt,`${path}/review/reviewedAt`);uncheckedArtifactPointers.push(`${path}/review/report`);\n if(calibration.performedAt.state==='known' && compareUtcInstants(calibration.review.reviewedAt,calibration.performedAt.value)===-1) error('CALIBRATION.REVIEW_ORDER',`${path}/review/reviewedAt`,'Review cannot precede the declared calibration event.');\n }\n }\n const resolutions:AcquisitionResolution[]=[];\n function outside(time:AcquisitionContextEntry['time'],window:Period):boolean {\n if(time.state!=='known'||window.state!=='known') return false;\n const start=time.kind==='instant'?time.value:time.start;\n const end=time.kind==='instant'?time.value:time.end;\n return compareUtcInstants(start,window.start)===-1 || (time.kind==='instant' ? compareUtcInstants(end,window.end)!==-1 : compareUtcInstants(end,window.end)===1);\n }\n for(const [i,acquisition] of data.acquisitions.entries()) {\n const path=`/acquisitions/${i}`;\n const resolution:AcquisitionResolution={acquisitionRef:`acquisition:${acquisition.id}`,status:'resolved',calibrationRefs:[],missingPointers:[]};\n const missing=(code:'CONTEXT.UNKNOWN'|'CONTEXT.UNRESOLVED',pointer:string,message:string)=>{\n resolution.status='incomplete';resolution.missingPointers.push(pointer);issues.push({code,stage:'semantic',severity:'warning',pointer,message});\n };\n const instrument=resolve(instruments,acquisition.instrumentRef,`${path}/instrumentRef`);\n if(instrument?.value.identity.state==='unknown') missing('CONTEXT.UNKNOWN',`${instrument.pointer}/identity`,'Physical instrument identity is unknown beyond its local ID.');\n if(acquisition.time.state==='unknown') missing('CONTEXT.UNKNOWN',`${path}/time`,'Acquisition time is unknown.');\n else if(acquisition.time.kind==='instant') instant(acquisition.time.value,`${path}/time/value`);\n else period(acquisition.time,`${path}/time`);\n for(const [key,value] of Object.entries(acquisition.clock)) if(value.state==='unknown') missing('CONTEXT.UNKNOWN',`${path}/clock/${key}`,'Clock context is unknown.');\n const manifest=acquisition.manifest.state==='pinned'?resolve(manifests,acquisition.manifest.ref,`${path}/manifest/ref`):undefined;\n if(acquisition.manifest.state==='unresolved') missing('CONTEXT.UNRESOLVED',`${path}/manifest`, 'No manifest revision is selected; legacy labels are never resolved automatically.');\n if(manifest && acquisition.manifest.state==='pinned') {\n resolution.manifestRef=acquisition.manifest.ref;sameInstrument(acquisition.instrumentRef,manifest.value.instrumentRef,`${path}/manifest/ref`);\n for(const [key,value] of Object.entries(manifest.value.configuration)) if(value.state==='unknown') missing('CONTEXT.UNKNOWN',`${manifest.pointer}/configuration/${key}`,'Configuration detail is unknown.');\n }\n if(acquisition.deployment.state==='unresolved') missing('CONTEXT.UNRESOLVED',`${path}/deployment`,'Deployment history is unresolved.');\n else {\n const deployment=resolve(deployments,acquisition.deployment.ref,`${path}/deployment/ref`);\n if(deployment) {\n sameInstrument(acquisition.instrumentRef,deployment.value.instrumentRef,`${path}/deployment/ref`);\n if(deployment.value.manifest.state==='unresolved') missing('CONTEXT.UNRESOLVED',`${deployment.pointer}/manifest`,'Deployment configuration is unresolved.');\n else if(acquisition.manifest.state==='pinned' && deployment.value.manifest.ref!==acquisition.manifest.ref) error('MANIFEST.MISMATCH',`${path}/manifest/ref`,'Acquisition and deployment pin different manifest revisions.');\n if(deployment.value.site.state==='unknown') missing('CONTEXT.UNKNOWN',`${deployment.pointer}/site`,'Deployment site is unknown.');\n if(deployment.value.period.state==='unknown') missing('CONTEXT.UNKNOWN',`${deployment.pointer}/period`,'Deployment time coverage is unknown.');\n else if(outside(acquisition.time,deployment.value.period)) error('TIME.OUTSIDE_DEPLOYMENT',`${path}/time`,'Acquisition is not wholly contained in its deployment window.');\n }\n }\n const channels=new Set<string>();\n for(const [j,binding] of acquisition.channels.entries()) {\n const bindingPath=`${path}/channels/${j}`;\n if(channels.has(binding.channelId)) error('REF.UNIQUE_ID',`${bindingPath}/channelId`,'Channel is bound more than once; select an explicit calibration per channel.');\n channels.add(binding.channelId);\n const selectedChannel=manifest?channelMaps.get(`manifest:${manifest.value.id}`)?.get(binding.channelId):undefined;\n if(manifest && !selectedChannel) error('CHANNEL.UNKNOWN',`${bindingPath}/channelId`,'Acquisition channel is not in its pinned manifest.');\n if(selectedChannel?.value.sampling.state==='unknown') missing('CONTEXT.UNKNOWN',`${selectedChannel.pointer}/sampling`,'Declared channel sampling is unknown.');\n if(binding.calibration.state==='unresolved') {missing('CONTEXT.UNRESOLVED',`${bindingPath}/calibration`,'Calibration history is unresolved.');continue;}\n const calibration=resolve(calibrations,binding.calibration.ref,`${bindingPath}/calibration/ref`);\n if(!calibration) continue;\n resolution.calibrationRefs.push(binding.calibration.ref);\n sameInstrument(acquisition.instrumentRef,calibration.value.instrumentRef,`${bindingPath}/calibration/ref`);\n if(acquisition.manifest.state==='pinned' && calibration.value.manifestRef!==acquisition.manifest.ref) error('MANIFEST.MISMATCH',`${bindingPath}/calibration/ref`,'Calibration does not apply to the exact acquisition manifest revision.');\n if(calibration.value.channelId!==binding.channelId) error('CALIBRATION.CHANNEL_MISMATCH',`${bindingPath}/calibration/ref`,'Calibration covers a different channel.');\n if(calibration.value.performedAt.state==='unknown') missing('CONTEXT.UNKNOWN',`${calibration.pointer}/performedAt`,'Calibration performance time is unknown.');\n else if(acquisition.time.state==='known') {\n const start=acquisition.time.kind==='instant'?acquisition.time.value:acquisition.time.start;\n if(compareUtcInstants(calibration.value.performedAt.value,start)===1) error('CALIBRATION.AFTER_ACQUISITION',`${bindingPath}/calibration/ref`,'A calibration performed after acquisition cannot establish acquisition-time calibration.');\n }\n if(calibration.value.validity.state==='unknown') missing('CONTEXT.UNKNOWN',`${calibration.pointer}/validity`,'Declared calibration coverage is unknown.');\n else if(outside(acquisition.time,calibration.value.validity)) error('CALIBRATION.OUTSIDE_VALIDITY',`${bindingPath}/calibration/ref`,'Acquisition is not wholly contained in declared calibration validity.');\n for(const field of ['method','report','review'] as const) if(calibration.value[field].state==='unknown') missing('CONTEXT.UNKNOWN',`${calibration.pointer}/${field}`,'Calibration documentation is unknown.');\n if(calibration.value.uncertainty.kind==='unknown') missing('CONTEXT.UNKNOWN',`${calibration.pointer}/uncertainty`,'Calibration uncertainty is unknown.');\n }\n resolutions.push(resolution);\n }\n for(const [i,product] of data.products.entries()) {resolve(acquisitions,product.acquisitionRef,`/products/${i}/acquisitionRef`);uncheckedArtifactPointers.push(`/products/${i}/artifact`);}\n const failed=issues.some(issue=>issue.severity==='error');\n const base:ResultBase={contract,issues,uncheckedArtifactPointers,checks:{structural:'passed',semantic:failed?'failed':'passed',profile:'not_checked',external:'not_checked'}};\n return failed?{...base,success:false}:{...base,success:true,data,acquisitions:resolutions};\n}\n"]}
1
+ {"version":3,"sources":["../../../src/experimental/v2/schema.ts","../../../src/experimental/v2/validate.ts"],"names":["ref","instant","period","channel","pointer","binding"],"mappings":"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","file":"index.js","sourcesContent":["import { preservePublishedSchema } from '@disclosureos/records/shared';\nimport { z } from 'zod';\n\nconst text = z.string().min(1).regex(/\\S/);\nconst id = z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]*(?![\\s\\S])/);\nconst ref = (kind: string) => z.string().regex(new RegExp(`^${kind}:[A-Za-z0-9][A-Za-z0-9._-]*(?![\\\\s\\\\S])`));\n// Locally owned schema, matching the records UTC lexical contract without crossing Zod instances.\nconst instant = z.iso.datetime({offset:true}).regex(/^(?!0000)/).regex(/T[0-9]{2}:[0-9]{2}:[0-9]{2}/).regex(/(?:Z|[+-][0-9]{2}:[0-9]{2})(?![\\s\\S])/);\nconst unknown = z.strictObject({state:z.literal('unknown'),reason:text});\nconst knownText = z.union([z.strictObject({state:z.literal('known'),value:text}),unknown]);\nconst knownInstant = z.union([z.strictObject({state:z.literal('known'),value:instant}),unknown]);\nconst interval = z.strictObject({state:z.literal('known'),start:instant,end:instant,timeScale:z.literal('UTC')});\nconst period = z.union([interval,unknown]);\nconst binding = (kind: string) => z.union([\n z.strictObject({state:z.literal('pinned'),ref:ref(kind)}),\n z.strictObject({state:z.literal('unresolved'),reason:text,legacyRef:text.optional()}),\n]);\nexport const ContextArtifactSchema = z.strictObject({\n digest:z.strictObject({algorithm:z.literal('sha256'),value:z.string().regex(/^[a-f0-9]{64}(?![\\s\\S])/)}),\n mediaType:text,byteLength:z.number().int().min(0).max(Number.MAX_SAFE_INTEGER),uri:z.url().optional(),\n});\nexport const InstrumentInstanceSchema = z.strictObject({\n id,identity:z.union([z.strictObject({state:z.literal('known'),manufacturer:text,model:text,serialNumber:text.optional()}),unknown]),\n});\nconst channel = z.strictObject({id,quantity:text,unit:text,sampling:z.union([z.strictObject({state:z.literal('known'),rateHz:z.number().positive()}),unknown])});\nexport const ManifestRevisionSchema = z.strictObject({\n id,instrumentRef:ref('instrument'),version:text,publishedAt:instant,artifact:ContextArtifactSchema,\n configuration:z.strictObject({hardware:knownText,firmware:knownText}),channels:z.array(channel).min(1),\n});\nexport const DeploymentContextSchema = z.strictObject({id,instrumentRef:ref('instrument'),manifest:binding('manifest'),period,site:knownText});\nconst quantified = {magnitude:z.number().min(0),unit:text};\nconst uncertainty = z.union([\n z.strictObject({kind:z.literal('unknown'),reason:text}),\n z.strictObject({kind:z.literal('standard'),...quantified}),z.strictObject({kind:z.literal('bound'),...quantified}),\n z.strictObject({kind:z.literal('expanded'),...quantified,coverageFactor:z.number().positive(),coverageProbability:z.number().gt(0).lte(1).optional()}),\n]);\nexport const CalibrationContextSchema = z.strictObject({\n id,instrumentRef:ref('instrument'),manifestRef:ref('manifest'),channelId:id,performedAt:knownInstant,validity:period,\n method:z.union([z.strictObject({state:z.literal('known'),id:text,version:text,description:text}),unknown]),\n report:z.union([z.strictObject({state:z.literal('known'),artifact:ContextArtifactSchema}),unknown]),uncertainty,\n review:z.union([z.strictObject({state:z.literal('unreviewed')}),unknown,\n z.strictObject({state:z.literal('reviewed'),reviewedBy:text,reviewedAt:instant,outcome:z.enum(['accepted','rejected','inconclusive']),report:ContextArtifactSchema})]),\n});\nconst timingQuantity = (positive: boolean) => z.union([\n z.strictObject({state:z.literal('known'),magnitude:positive ? z.number().positive() : z.number().min(0),unit:z.enum(['s','ms','us','ns'])}),unknown,\n]);\nexport const AcquisitionContextEntrySchema = z.strictObject({\n id,instrumentRef:ref('instrument'),manifest:binding('manifest'),deployment:binding('deployment'),\n time:z.union([z.strictObject({state:z.literal('known'),kind:z.literal('instant'),value:instant,timeScale:z.literal('UTC')}),interval.extend({kind:z.literal('interval')}),unknown]),\n classification:z.enum(['background','known_control','candidate','other','unknown']),\n clock:z.strictObject({source:knownText,synchronization:knownText,resolution:timingQuantity(true),uncertainty:timingQuantity(false)}),\n channels:z.array(z.strictObject({channelId:id,calibration:binding('calibration')})).min(1),\n});\nexport const RawAcquisitionProductSchema = z.strictObject({id,acquisitionRef:ref('acquisition'),kind:z.literal('raw'),artifact:ContextArtifactSchema});\nexport const ACQUISITION_CONTEXT_SCHEMA_ID = 'urn:disclosureos:experimental:acquisition-context:0.1.0';\nexport const ACQUISITION_CONTEXT_RULESET_VERSION = '0.1.0';\nexport const AcquisitionContextSchema = z.strictObject({\n kind:z.literal('acquisition_context'),schemaVersion:z.literal('0.1.0'),id,\n instruments:z.array(InstrumentInstanceSchema),manifests:z.array(ManifestRevisionSchema),deployments:z.array(DeploymentContextSchema),\n calibrations:z.array(CalibrationContextSchema),acquisitions:z.array(AcquisitionContextEntrySchema),products:z.array(RawAcquisitionProductSchema),\n extensions:z.record(z.string().regex(/^[a-z][a-z0-9_-]*(?:\\.[a-z0-9_-]+)+(?![\\s\\S])/),z.json()).optional(),\n});\nexport type AcquisitionContext = z.infer<typeof AcquisitionContextSchema>;\nexport type AcquisitionContextEntry = z.infer<typeof AcquisitionContextEntrySchema>;\nexport type CalibrationContext = z.infer<typeof CalibrationContextSchema>;\nexport type ManifestRevision = z.infer<typeof ManifestRevisionSchema>;\nexport type ContextArtifact = z.infer<typeof ContextArtifactSchema>;\nexport function acquisitionContextJsonSchema(): Record<string,unknown> {\n return {...preservePublishedSchema(z.toJSONSchema(AcquisitionContextSchema,{target:'draft-2020-12'})),$id:ACQUISITION_CONTEXT_SCHEMA_ID};\n}\n","import { compareUtcInstants } from '@disclosureos/records/experimental/v2';\nimport { AcquisitionContextSchema, ACQUISITION_CONTEXT_SCHEMA_ID, ACQUISITION_CONTEXT_RULESET_VERSION } from './schema';\nimport type { AcquisitionContext, AcquisitionContextEntry, ManifestRevision } from './schema';\n\nexport type AcquisitionContextIssueCode = 'STRUCT.VALUE' | 'REF.UNIQUE_ID' | 'REF.LOCAL_RESOLUTION' | 'REF.INSTRUMENT_MISMATCH'\n | 'MANIFEST.AMBIGUOUS_VERSION' | 'MANIFEST.MISMATCH' | 'CHANNEL.UNKNOWN' | 'TIME.INTERVAL' | 'TIME.INSTANT'\n | 'TIME.OUTSIDE_DEPLOYMENT' | 'CALIBRATION.CHANNEL_MISMATCH' | 'CALIBRATION.AFTER_ACQUISITION' | 'CALIBRATION.OUTSIDE_VALIDITY'\n | 'CALIBRATION.REVIEW_ORDER' | 'UNIT.MISMATCH' | 'CONTEXT.UNRESOLVED' | 'CONTEXT.UNKNOWN';\nexport interface AcquisitionContextIssue {code:AcquisitionContextIssueCode;stage:'structural'|'semantic';severity:'error'|'warning';pointer:string;message:string}\nexport interface AcquisitionResolution {acquisitionRef:string;status:'resolved'|'incomplete';manifestRef?:string;calibrationRefs:string[];missingPointers:string[]}\ninterface ResultBase {\n checks:{structural:'passed'|'failed';semantic:'passed'|'failed'|'not_checked';profile:'not_checked';external:'not_checked'};\n contract:{schemaId:typeof ACQUISITION_CONTEXT_SCHEMA_ID;rulesetVersion:typeof ACQUISITION_CONTEXT_RULESET_VERSION};\n issues:AcquisitionContextIssue[];uncheckedArtifactPointers:string[];\n}\nexport type AcquisitionContextResult = ResultBase & ({success:true;data:AcquisitionContext;acquisitions:AcquisitionResolution[]}|{success:false});\nconst pointer = (path:readonly PropertyKey[]) => path.map(p=>`/${String(p).replace(/~/g,'~0').replace(/\\//g,'~1')}`).join('');\ntype Period = {state:'known';start:string;end:string;timeScale:'UTC'} | {state:'unknown';reason:string};\n\n/** Validates pinned declarations, not scientific calibration adequacy or artifact bytes. */\nexport function parseAcquisitionContext(input:unknown):AcquisitionContextResult {\n const contract:ResultBase['contract']={schemaId:ACQUISITION_CONTEXT_SCHEMA_ID,rulesetVersion:ACQUISITION_CONTEXT_RULESET_VERSION};\n const parsed=AcquisitionContextSchema.safeParse(input);\n if(!parsed.success) return {success:false,contract,checks:{structural:'failed',semantic:'not_checked',profile:'not_checked',external:'not_checked'},uncheckedArtifactPointers:[],\n issues:parsed.error.issues.map(issue=>({code:'STRUCT.VALUE',stage:'structural',severity:'error',pointer:pointer(issue.path),message:issue.message}))};\n const data=parsed.data;\n const issues:AcquisitionContextIssue[]=[];\n const uncheckedArtifactPointers:string[]=[];\n const error=(code:AcquisitionContextIssueCode,path:string,message:string)=>issues.push({code,stage:'semantic',severity:'error',pointer:path,message});\n function index<T extends {id:string}>(items:T[],kind:string,collection:string) {\n const map=new Map<string,{value:T;pointer:string}>();\n items.forEach((value,i)=>{\n const ref=`${kind}:${value.id}`;\n if(map.has(ref)) error('REF.UNIQUE_ID',`/${collection}/${i}/id`,'Duplicate ID; pinned revisions must be unambiguous.');\n else map.set(ref,{value,pointer:`/${collection}/${i}`});\n });\n return map;\n }\n const instruments=index(data.instruments,'instrument','instruments');\n const manifests=index(data.manifests,'manifest','manifests');\n const deployments=index(data.deployments,'deployment','deployments');\n const calibrations=index(data.calibrations,'calibration','calibrations');\n const acquisitions=index(data.acquisitions,'acquisition','acquisitions');\n index(data.products,'product','products');\n function resolve<T>(map:Map<string,T>,ref:string,path:string):T|undefined {\n const value=map.get(ref);\n if(!value) error('REF.LOCAL_RESOLUTION',path,`Undeclared pinned reference: ${ref}`);\n return value;\n }\n function sameInstrument(expected:string,actual:string,path:string):void {\n if(expected!==actual) error('REF.INSTRUMENT_MISMATCH',path,'Pinned context belongs to a different instrument instance.');\n }\n function instant(value:string,path:string):void {\n if(compareUtcInstants(value,value)===undefined) error('TIME.INSTANT',path,'Instant cannot be resolved with its UTC offset.');\n }\n function period(value:Period,path:string):void {\n if(value.state==='unknown') return;\n instant(value.start,`${path}/start`);instant(value.end,`${path}/end`);\n const order=compareUtcInstants(value.start,value.end);\n if(order!==undefined && order>=0) error('TIME.INTERVAL',`${path}/end`,'Half-open intervals require end strictly after start; represent a point acquisition as an instant.');\n }\n const channelMaps=new Map<string,Map<string,{value:ManifestRevision['channels'][number];pointer:string}>>();\n const versions=new Set<string>();\n for(const [i,manifest] of data.manifests.entries()) {\n const path=`/manifests/${i}`;\n resolve(instruments,manifest.instrumentRef,`${path}/instrumentRef`);\n instant(manifest.publishedAt,`${path}/publishedAt`);\n const version=JSON.stringify([manifest.instrumentRef,manifest.version]);\n if(versions.has(version)) error('MANIFEST.AMBIGUOUS_VERSION',`${path}/version`,'Instrument/version pair is declared more than once.');\n versions.add(version);\n const channels=new Map<string,{value:ManifestRevision['channels'][number];pointer:string}>();\n for(const [j,channel] of manifest.channels.entries()) {\n if(channels.has(channel.id)) error('REF.UNIQUE_ID',`${path}/channels/${j}/id`,'Duplicate channel ID within manifest revision.');\n channels.set(channel.id,{value:channel,pointer:`${path}/channels/${j}`});\n }\n channelMaps.set(`manifest:${manifest.id}`,channels);\n uncheckedArtifactPointers.push(`${path}/artifact`);\n }\n for(const [i,deployment] of data.deployments.entries()) {\n const path=`/deployments/${i}`;\n resolve(instruments,deployment.instrumentRef,`${path}/instrumentRef`);period(deployment.period,`${path}/period`);\n if(deployment.manifest.state==='pinned') {\n const manifest=resolve(manifests,deployment.manifest.ref,`${path}/manifest/ref`);\n if(manifest) sameInstrument(deployment.instrumentRef,manifest.value.instrumentRef,`${path}/manifest/ref`);\n }\n }\n for(const [i,calibration] of data.calibrations.entries()) {\n const path=`/calibrations/${i}`;\n resolve(instruments,calibration.instrumentRef,`${path}/instrumentRef`);\n const manifest=resolve(manifests,calibration.manifestRef,`${path}/manifestRef`);\n if(manifest) {\n sameInstrument(calibration.instrumentRef,manifest.value.instrumentRef,`${path}/manifestRef`);\n const channel=channelMaps.get(calibration.manifestRef)?.get(calibration.channelId);\n if(!channel) error('CHANNEL.UNKNOWN',`${path}/channelId`,'Calibration channel is not in its pinned manifest.');\n else if(calibration.uncertainty.kind!=='unknown' && calibration.uncertainty.unit!==channel.value.unit) error('UNIT.MISMATCH',`${path}/uncertainty/unit`,'Declared calibration uncertainty unit differs from its channel.');\n }\n if(calibration.performedAt.state==='known') instant(calibration.performedAt.value,`${path}/performedAt/value`);\n period(calibration.validity,`${path}/validity`);\n if(calibration.report.state==='known') uncheckedArtifactPointers.push(`${path}/report/artifact`);\n if(calibration.review.state==='reviewed') {\n instant(calibration.review.reviewedAt,`${path}/review/reviewedAt`);uncheckedArtifactPointers.push(`${path}/review/report`);\n if(calibration.performedAt.state==='known' && compareUtcInstants(calibration.review.reviewedAt,calibration.performedAt.value)===-1) error('CALIBRATION.REVIEW_ORDER',`${path}/review/reviewedAt`,'Review cannot precede the declared calibration event.');\n }\n }\n const resolutions:AcquisitionResolution[]=[];\n function outside(time:AcquisitionContextEntry['time'],window:Period):boolean {\n if(time.state!=='known'||window.state!=='known') return false;\n const start=time.kind==='instant'?time.value:time.start;\n const end=time.kind==='instant'?time.value:time.end;\n return compareUtcInstants(start,window.start)===-1 || (time.kind==='instant' ? compareUtcInstants(end,window.end)!==-1 : compareUtcInstants(end,window.end)===1);\n }\n for(const [i,acquisition] of data.acquisitions.entries()) {\n const path=`/acquisitions/${i}`;\n const resolution:AcquisitionResolution={acquisitionRef:`acquisition:${acquisition.id}`,status:'resolved',calibrationRefs:[],missingPointers:[]};\n const missing=(code:'CONTEXT.UNKNOWN'|'CONTEXT.UNRESOLVED',pointer:string,message:string)=>{\n resolution.status='incomplete';resolution.missingPointers.push(pointer);issues.push({code,stage:'semantic',severity:'warning',pointer,message});\n };\n const instrument=resolve(instruments,acquisition.instrumentRef,`${path}/instrumentRef`);\n if(instrument?.value.identity.state==='unknown') missing('CONTEXT.UNKNOWN',`${instrument.pointer}/identity`,'Physical instrument identity is unknown beyond its local ID.');\n if(acquisition.time.state==='unknown') missing('CONTEXT.UNKNOWN',`${path}/time`,'Acquisition time is unknown.');\n else if(acquisition.time.kind==='instant') instant(acquisition.time.value,`${path}/time/value`);\n else period(acquisition.time,`${path}/time`);\n for(const [key,value] of Object.entries(acquisition.clock)) if(value.state==='unknown') missing('CONTEXT.UNKNOWN',`${path}/clock/${key}`,'Clock context is unknown.');\n const manifest=acquisition.manifest.state==='pinned'?resolve(manifests,acquisition.manifest.ref,`${path}/manifest/ref`):undefined;\n if(acquisition.manifest.state==='unresolved') missing('CONTEXT.UNRESOLVED',`${path}/manifest`, 'No manifest revision is selected; legacy labels are never resolved automatically.');\n if(manifest && acquisition.manifest.state==='pinned') {\n resolution.manifestRef=acquisition.manifest.ref;sameInstrument(acquisition.instrumentRef,manifest.value.instrumentRef,`${path}/manifest/ref`);\n for(const [key,value] of Object.entries(manifest.value.configuration)) if(value.state==='unknown') missing('CONTEXT.UNKNOWN',`${manifest.pointer}/configuration/${key}`,'Configuration detail is unknown.');\n }\n if(acquisition.deployment.state==='unresolved') missing('CONTEXT.UNRESOLVED',`${path}/deployment`,'Deployment history is unresolved.');\n else {\n const deployment=resolve(deployments,acquisition.deployment.ref,`${path}/deployment/ref`);\n if(deployment) {\n sameInstrument(acquisition.instrumentRef,deployment.value.instrumentRef,`${path}/deployment/ref`);\n if(deployment.value.manifest.state==='unresolved') missing('CONTEXT.UNRESOLVED',`${deployment.pointer}/manifest`,'Deployment configuration is unresolved.');\n else if(acquisition.manifest.state==='pinned' && deployment.value.manifest.ref!==acquisition.manifest.ref) error('MANIFEST.MISMATCH',`${path}/manifest/ref`,'Acquisition and deployment pin different manifest revisions.');\n if(deployment.value.site.state==='unknown') missing('CONTEXT.UNKNOWN',`${deployment.pointer}/site`,'Deployment site is unknown.');\n if(deployment.value.period.state==='unknown') missing('CONTEXT.UNKNOWN',`${deployment.pointer}/period`,'Deployment time coverage is unknown.');\n else if(outside(acquisition.time,deployment.value.period)) error('TIME.OUTSIDE_DEPLOYMENT',`${path}/time`,'Acquisition is not wholly contained in its deployment window.');\n }\n }\n const channels=new Set<string>();\n for(const [j,binding] of acquisition.channels.entries()) {\n const bindingPath=`${path}/channels/${j}`;\n if(channels.has(binding.channelId)) error('REF.UNIQUE_ID',`${bindingPath}/channelId`,'Channel is bound more than once; select an explicit calibration per channel.');\n channels.add(binding.channelId);\n const selectedChannel=manifest?channelMaps.get(`manifest:${manifest.value.id}`)?.get(binding.channelId):undefined;\n if(manifest && !selectedChannel) error('CHANNEL.UNKNOWN',`${bindingPath}/channelId`,'Acquisition channel is not in its pinned manifest.');\n if(selectedChannel?.value.sampling.state==='unknown') missing('CONTEXT.UNKNOWN',`${selectedChannel.pointer}/sampling`,'Declared channel sampling is unknown.');\n if(binding.calibration.state==='unresolved') {missing('CONTEXT.UNRESOLVED',`${bindingPath}/calibration`,'Calibration history is unresolved.');continue;}\n const calibration=resolve(calibrations,binding.calibration.ref,`${bindingPath}/calibration/ref`);\n if(!calibration) continue;\n resolution.calibrationRefs.push(binding.calibration.ref);\n sameInstrument(acquisition.instrumentRef,calibration.value.instrumentRef,`${bindingPath}/calibration/ref`);\n if(acquisition.manifest.state==='pinned' && calibration.value.manifestRef!==acquisition.manifest.ref) error('MANIFEST.MISMATCH',`${bindingPath}/calibration/ref`,'Calibration does not apply to the exact acquisition manifest revision.');\n if(calibration.value.channelId!==binding.channelId) error('CALIBRATION.CHANNEL_MISMATCH',`${bindingPath}/calibration/ref`,'Calibration covers a different channel.');\n if(calibration.value.performedAt.state==='unknown') missing('CONTEXT.UNKNOWN',`${calibration.pointer}/performedAt`,'Calibration performance time is unknown.');\n else if(acquisition.time.state==='known') {\n const start=acquisition.time.kind==='instant'?acquisition.time.value:acquisition.time.start;\n if(compareUtcInstants(calibration.value.performedAt.value,start)===1) error('CALIBRATION.AFTER_ACQUISITION',`${bindingPath}/calibration/ref`,'A calibration performed after acquisition cannot establish acquisition-time calibration.');\n }\n if(calibration.value.validity.state==='unknown') missing('CONTEXT.UNKNOWN',`${calibration.pointer}/validity`,'Declared calibration coverage is unknown.');\n else if(outside(acquisition.time,calibration.value.validity)) error('CALIBRATION.OUTSIDE_VALIDITY',`${bindingPath}/calibration/ref`,'Acquisition is not wholly contained in declared calibration validity.');\n for(const field of ['method','report','review'] as const) if(calibration.value[field].state==='unknown') missing('CONTEXT.UNKNOWN',`${calibration.pointer}/${field}`,'Calibration documentation is unknown.');\n if(calibration.value.uncertainty.kind==='unknown') missing('CONTEXT.UNKNOWN',`${calibration.pointer}/uncertainty`,'Calibration uncertainty is unknown.');\n }\n resolutions.push(resolution);\n }\n for(const [i,product] of data.products.entries()) {resolve(acquisitions,product.acquisitionRef,`/products/${i}/acquisitionRef`);uncheckedArtifactPointers.push(`/products/${i}/artifact`);}\n const failed=issues.some(issue=>issue.severity==='error');\n const base:ResultBase={contract,issues,uncheckedArtifactPointers,checks:{structural:'passed',semantic:failed?'failed':'passed',profile:'not_checked',external:'not_checked'}};\n return failed?{...base,success:false}:{...base,success:true,data,acquisitions:resolutions};\n}\n"]}
@@ -1,5 +1,5 @@
1
- import 'zod';
2
1
  import { schemaId } from '@disclosureos/records/shared';
2
+ import 'zod';
3
3
 
4
4
  // src/schema.ts
5
5
  var INSTRUMENTS_SCHEMA_VERSION = "1.0.0";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/schema.ts","../../src/factories/index.ts"],"names":[],"mappings":";;;;AASO,IAAM,0BAAA,GAA6B,OAAA;AAEL,QAAA;AAAA,EACnC,aAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF;;;ACRO,SAAS,iBAAA,CACd,EAAA,EACA,IAAA,EACA,QAAA,EACA,OAAA,EACa;AACb,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,QAAA,EAAU,GAAG,OAAA,EAAQ;AAC1C;AAMO,SAAS,oBAAA,CACd,GAAA,EACA,OAAA,EACA,OAAA,EACA,OAAA,EACgB;AAChB,EAAA,OAAO;AAAA,IACL,aAAA,EAAe,0BAAA;AAAA,IACf,GAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,GAAG;AAAA,GACL;AACF","file":"index.js","sourcesContent":["import { z } from 'zod';\nimport { jsonSchemaEnvelope, schemaId } from '@disclosureos/records/shared';\nimport { SensorManifestSchema } from './manifest/types';\n\n/**\n * Version of the emitted JSON Schema artifact. Bump on any intentional change\n * to the manifest shape; the committed `schema/sensor-manifest.schema.json` and\n * the drift test (`src/__tests__/schema.test.ts`) keep this honest.\n */\nexport const INSTRUMENTS_SCHEMA_VERSION = '1.0.0';\n\nexport const INSTRUMENTS_SCHEMA_ID = schemaId(\n 'instruments',\n 'sensor-manifest',\n INSTRUMENTS_SCHEMA_VERSION,\n);\n\n/**\n * Emit the canonical JSON Schema (draft 2020-12) for {@link SensorManifestSchema}.\n * Unlike the satellite slot schemas, this is a standalone document schema — a\n * manifest is published on its own, not composed into `Observation`.\n */\nexport function instrumentsJsonSchema(): Record<string, unknown> {\n const schema = z.toJSONSchema(SensorManifestSchema, { target: 'draft-2020-12' }) as Record<\n string,\n unknown\n >;\n return jsonSchemaEnvelope(schema, {\n id: INSTRUMENTS_SCHEMA_ID,\n version: INSTRUMENTS_SCHEMA_VERSION,\n });\n}\n","import type { Modality, SensorEntry, SensorManifest } from '../manifest/types';\nimport { INSTRUMENTS_SCHEMA_VERSION } from '../schema';\n\n/**\n * Build a sensor entry from the three required fields, with everything else\n * supplied via `options`.\n */\nexport function createSensorEntry(\n id: string,\n name: string,\n modality: Modality,\n options?: Partial<Omit<SensorEntry, 'id' | 'name' | 'modality'>>,\n): SensorEntry {\n return { id, name, modality, ...options };\n}\n\n/**\n * Build a sensor manifest. `schemaVersion` defaults to the version of the\n * schema this package emits.\n */\nexport function createSensorManifest(\n org: string,\n orgSlug: string,\n sensors: SensorEntry[],\n options?: Partial<Omit<SensorManifest, 'org' | 'orgSlug' | 'sensors'>>,\n): SensorManifest {\n return {\n schemaVersion: INSTRUMENTS_SCHEMA_VERSION,\n org,\n orgSlug,\n sensors,\n ...options,\n };\n}\n"]}
1
+ {"version":3,"sources":["../../src/schema.ts","../../src/factories/index.ts"],"names":[],"mappings":";;;;AAUO,IAAM,0BAAA,GAA6B,OAAA;AAEL,QAAA;AAAA,EACnC,aAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF;;;ACTO,SAAS,iBAAA,CACd,EAAA,EACA,IAAA,EACA,QAAA,EACA,OAAA,EACa;AACb,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,QAAA,EAAU,GAAG,OAAA,EAAQ;AAC1C;AAMO,SAAS,oBAAA,CACd,GAAA,EACA,OAAA,EACA,OAAA,EACA,OAAA,EACgB;AAChB,EAAA,OAAO;AAAA,IACL,aAAA,EAAe,0BAAA;AAAA,IACf,GAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,GAAG;AAAA,GACL;AACF","file":"index.js","sourcesContent":["import { preservePublishedSchema } from '@disclosureos/records/shared';\nimport { z } from 'zod';\nimport { jsonSchemaEnvelope, schemaId } from '@disclosureos/records/shared';\nimport { SensorManifestSchema } from './manifest/types';\n\n/**\n * Version of the emitted JSON Schema artifact. Bump on any intentional change\n * to the manifest shape; the committed `schema/sensor-manifest.schema.json` and\n * the drift test (`src/__tests__/schema.test.ts`) keep this honest.\n */\nexport const INSTRUMENTS_SCHEMA_VERSION = '1.0.0';\n\nexport const INSTRUMENTS_SCHEMA_ID = schemaId(\n 'instruments',\n 'sensor-manifest',\n INSTRUMENTS_SCHEMA_VERSION,\n);\n\n/**\n * Emit the canonical JSON Schema (draft 2020-12) for {@link SensorManifestSchema}.\n * Unlike the satellite slot schemas, this is a standalone document schema — a\n * manifest is published on its own, not composed into `Observation`.\n */\nexport function instrumentsJsonSchema(): Record<string, unknown> {\n const schema = preservePublishedSchema(z.toJSONSchema(SensorManifestSchema, { target: 'draft-2020-12' })) as Record<\n string,\n unknown\n >;\n return jsonSchemaEnvelope(schema, {\n id: INSTRUMENTS_SCHEMA_ID,\n version: INSTRUMENTS_SCHEMA_VERSION,\n });\n}\n","import type { Modality, SensorEntry, SensorManifest } from '../manifest/types';\nimport { INSTRUMENTS_SCHEMA_VERSION } from '../schema';\n\n/**\n * Build a sensor entry from the three required fields, with everything else\n * supplied via `options`.\n */\nexport function createSensorEntry(\n id: string,\n name: string,\n modality: Modality,\n options?: Partial<Omit<SensorEntry, 'id' | 'name' | 'modality'>>,\n): SensorEntry {\n return { id, name, modality, ...options };\n}\n\n/**\n * Build a sensor manifest. `schemaVersion` defaults to the version of the\n * schema this package emits.\n */\nexport function createSensorManifest(\n org: string,\n orgSlug: string,\n sensors: SensorEntry[],\n options?: Partial<Omit<SensorManifest, 'org' | 'orgSlug' | 'sensors'>>,\n): SensorManifest {\n return {\n schemaVersion: INSTRUMENTS_SCHEMA_VERSION,\n org,\n orgSlug,\n sensors,\n ...options,\n };\n}\n"]}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { createEnumGuard, schemaId, jsonSchemaEnvelope, validateWith } from '@disclosureos/records/shared';
2
+ import { createEnumGuard, schemaId, preservePublishedSchema, jsonSchemaEnvelope, validateWith } from '@disclosureos/records/shared';
3
3
  import { SENSOR_TYPES, DETECTION_METHODS } from '@disclosureos/records/constants';
4
4
 
5
5
  // src/manifest/types.ts
@@ -153,7 +153,7 @@ var INSTRUMENTS_SCHEMA_ID = schemaId(
153
153
  INSTRUMENTS_SCHEMA_VERSION
154
154
  );
155
155
  function instrumentsJsonSchema() {
156
- const schema = z.toJSONSchema(SensorManifestSchema, { target: "draft-2020-12" });
156
+ const schema = preservePublishedSchema(z.toJSONSchema(SensorManifestSchema, { target: "draft-2020-12" }));
157
157
  return jsonSchemaEnvelope(schema, {
158
158
  id: INSTRUMENTS_SCHEMA_ID,
159
159
  version: INSTRUMENTS_SCHEMA_VERSION
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/manifest/types.ts","../src/constants/index.ts","../src/labels/index.ts","../src/guards/index.ts","../src/schema.ts","../src/factories/index.ts","../src/formatters/index.ts","../src/validators/index.ts"],"names":["z"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod';\n\n/**\n * The sensor manifest is the instrument layer of the standard: DisclosureOS\n * records describe *what was observed*; a sensor manifest describes *the\n * hardware that produced the data* — per sensor, in enough structured detail\n * that a field mission or data drop from one organization is comparable,\n * replicable, and verifiable by everyone else.\n *\n * Design lineage: proposed by ELDÆON (disclosurefoundation/disclosureos#5) and\n * promoted into the framework as a foundation package. The manifest is the\n * standard's first standalone document type besides `Observation`: it is not a\n * per-observation extension slot — observations point at manifest entries via\n * `SensorReading.sensorRef` (`\"<org-slug>:<sensor-id>\"`).\n */\n\nconst KEBAB_CASE_PATTERN = /^[a-z0-9][a-z0-9-]*$/;\n\nexport const ModalitySchema = z\n .enum(['audio', 'electro_optical', 'radio_frequency', 'quantum', 'environmental', 'biometric'])\n .describe('Top-level sensing modality the sensor belongs to.');\n\nexport type Modality = z.infer<typeof ModalitySchema>;\n\nexport const TimeSourceSchema = z\n .enum(['atomic_clock', 'gps_disciplined', 'ntp', 'system', 'unknown'])\n .describe('Clock source that timestamps the sensor\\u2019s data.');\n\nexport type TimeSource = z.infer<typeof TimeSourceSchema>;\n\nexport const SensorTimingSchema = z\n .object({\n timeSource: TimeSourceSchema,\n timeUncertaintyNs: z\n .number()\n .nullable()\n .optional()\n .describe('Timestamp uncertainty in nanoseconds. Null = not yet characterized.'),\n })\n .meta({ id: 'SensorTiming' })\n .describe(\n 'Timing provenance. Timestamp error of even a few seconds confounds multi-station correlation, so the clock source must be declared, not assumed.',\n );\n\nexport type SensorTiming = z.infer<typeof SensorTimingSchema>;\n\nexport const RecordsMappingSchema = z\n .object({\n sensorType: z\n .string()\n .optional()\n .describe('The `@disclosureos/records` SensorType this sensor maps to.'),\n detectionMethod: z\n .string()\n .optional()\n .describe('The `@disclosureos/records` DetectionMethod this sensor maps to.'),\n proposedSensorType: z\n .boolean()\n .optional()\n .describe('True = sensorType is not in the records enum yet and is proposed by the publisher.'),\n proposedDetectionMethod: z\n .boolean()\n .optional()\n .describe('True = detectionMethod is not in the records enum yet and is proposed by the publisher.'),\n })\n .meta({ id: 'RecordsMapping' })\n .describe(\n 'How this sensor maps to the `SensorReading` vocabulary in `@disclosureos/records`. Values outside the records enums must carry the matching proposed* flag.',\n );\n\nexport type RecordsMapping = z.infer<typeof RecordsMappingSchema>;\n\nexport const RawDataSpecSchema = z\n .object({\n format: z\n .string()\n .optional()\n .describe('Raw-data file format, e.g. \"NDJSON.gz\", \"WAV\", \"MJPEG\", \"FITS\", \"CSV\".'),\n locatorPattern: z\n .string()\n .nullable()\n .optional()\n .describe('Storage key pattern or path convention for locating the raw files.'),\n sampleRateHz: z.number().nullable().optional().describe('Sample rate in Hz, where applicable.'),\n bitDepth: z.number().nullable().optional().describe('Sample bit depth, where applicable.'),\n })\n .meta({ id: 'RawDataSpec' })\n .describe(\n 'Raw-data format and locator. Supports a metadata-first architecture: circulate manifests widely, pull raw data on demand.',\n );\n\nexport type RawDataSpec = z.infer<typeof RawDataSpecSchema>;\n\nexport const UncertaintyTypeSchema = z\n .enum(['A', 'B'])\n .describe('GUM uncertainty evaluation type: A (statistical) or B (other means).');\n\nexport type UncertaintyType = z.infer<typeof UncertaintyTypeSchema>;\n\nexport const MeasurementUncertaintySchema = z\n .object({\n u_c: z.number().nullable().optional().describe('Combined standard uncertainty.'),\n U: z.number().nullable().optional().describe('Expanded uncertainty (= k \\u00d7 u_c).'),\n k: z.number().nullable().optional().describe('Coverage factor (2 \\u2248 95% confidence level).'),\n type: UncertaintyTypeSchema.nullable().optional(),\n })\n .meta({ id: 'MeasurementUncertainty' })\n .describe(\n 'GUM-style measurement uncertainty. Fields are nullable until an uncertainty budget exists — declaring \"unknown\" honestly is itself information.',\n );\n\nexport type MeasurementUncertainty = z.infer<typeof MeasurementUncertaintySchema>;\n\nexport const MeasurementSchema = z\n .object({\n name: z.string().min(1).describe('Measured quantity, e.g. \"differential_pressure\".'),\n unit: z.string().min(1).describe('UCUM-style unit string, e.g. \"Pa\", \"dB\", \"uT\", \"ppm\", \"/min\".'),\n uncertainty: MeasurementUncertaintySchema.optional(),\n })\n .meta({ id: 'Measurement' })\n .describe('One measured quantity with its unit and uncertainty.');\n\nexport type Measurement = z.infer<typeof MeasurementSchema>;\n\nexport const CalibrationStatusSchema = z\n .enum(['none', 'candidate_identified', 'in_practice', 'documented'])\n .describe(\n 'Calibration maturity gradient: none = no calibration; candidate_identified = a reference is named but not used; in_practice = a real method is performed but not fully budgeted; documented = method + uncertainty budget published.',\n );\n\nexport type CalibrationStatus = z.infer<typeof CalibrationStatusSchema>;\n\nexport const SensorCalibrationSchema = z\n .object({\n status: CalibrationStatusSchema,\n calibrated: z\n .boolean()\n .nullable()\n .optional()\n .describe('Coarse calibrated flag, mirroring `SensorReading.calibrated`. Null = undetermined.'),\n currentMethod: z\n .string()\n .nullable()\n .optional()\n .describe('What the operator actually does today. Null = no calibration currently performed.'),\n traceableReference: z\n .string()\n .nullable()\n .optional()\n .describe('Traceable reference, in use or identified as a candidate (e.g. \"GPS/UTC\", \"USGS/INTERMAGNET\").'),\n referenceInUse: z\n .boolean()\n .nullable()\n .optional()\n .describe('True = the traceable reference is part of current practice. False = identified candidate only. Null = undetermined.'),\n cadence: z.string().nullable().optional().describe('How often calibration is performed.'),\n uncertaintyBudget: z.string().nullable().optional().describe('Published uncertainty budget, if any.'),\n notes: z.string().nullable().optional().describe('Open questions or method caveats.'),\n })\n .meta({ id: 'SensorCalibration' })\n .describe(\n 'Calibration provenance. Deliberately separates what an operator actually does today from the reference it has identified; honest nulls are first-class, so calibration gaps stay visible and comparable across operators.',\n );\n\nexport type SensorCalibration = z.infer<typeof SensorCalibrationSchema>;\n\nexport const SensorEntrySchema = z\n .object({\n id: z\n .string()\n .regex(KEBAB_CASE_PATTERN)\n .describe(\n 'Stable kebab-case id, unique within the manifest; addressable from a record via `SensorReading.sensorRef` (\"<org-slug>:<sensor-id>\").',\n ),\n name: z.string().min(1).describe('Human-readable sensor name.'),\n modality: ModalitySchema,\n manufacturerModel: z\n .string()\n .optional()\n .describe(\n 'Hardware class descriptor. Publishers MAY withhold specific make/model identities and publish spec-level class descriptors instead (e.g. \"dual GM-tube counter\" rather than a product name).',\n ),\n inHouse: z.boolean().optional().describe('True if operator-built rather than off-the-shelf.'),\n compute: z\n .string()\n .optional()\n .describe('The compute unit this sensor is attached to, for platforms with several compute nodes.'),\n recordsMapping: RecordsMappingSchema.optional(),\n timing: SensorTimingSchema.optional(),\n rawData: RawDataSpecSchema.optional(),\n measurements: z.array(MeasurementSchema).optional(),\n calibration: SensorCalibrationSchema.optional(),\n specs: z\n .record(z.string(), z.unknown())\n .optional()\n .describe(\n 'Free-form hardware specifications from the operator\\u2019s spec sheet (resolution, range, sensitivity, interface, \\u2026). Keys vary by modality.',\n ),\n specSource: z.string().optional().describe('Provenance of the spec values.'),\n })\n .meta({ id: 'SensorEntry' })\n .describe('One sensor: its class, spec, timing, raw-data locator, measurements, and calibration provenance.');\n\nexport type SensorEntry = z.infer<typeof SensorEntrySchema>;\n\nexport const UpgradeStatusSchema = z\n .enum(['planned', 'evaluating', 'ordered', 'acquired'])\n .describe('Acquisition status of a declared future hardware upgrade.');\n\nexport type UpgradeStatus = z.infer<typeof UpgradeStatusSchema>;\n\nexport const FutureUpgradeSchema = z\n .object({\n name: z.string().min(1),\n modality: ModalitySchema,\n status: UpgradeStatusSchema.optional(),\n specs: z.record(z.string(), z.unknown()).optional(),\n link: z.string().nullable().optional().describe('Public product or reference page, where the publisher chooses to share one.'),\n notes: z.string().nullable().optional(),\n })\n .meta({ id: 'FutureUpgrade' })\n .describe(\n 'Planned hardware declared ahead of deployment so data consumers can anticipate new streams. Not part of the live sensor array.',\n );\n\nexport type FutureUpgrade = z.infer<typeof FutureUpgradeSchema>;\n\nexport const SensorManifestSchema = z\n .object({\n schemaVersion: z.string().min(1).describe('Version of the sensor-manifest schema this instance targets (SemVer).'),\n org: z.string().min(1).describe('Publishing organization, display form (e.g. \"ELD\\u00c6ON\").'),\n orgSlug: z\n .string()\n .regex(KEBAB_CASE_PATTERN)\n .describe('Stable lowercase slug for the publisher (e.g. \"eldaeon\"); the org half of a `sensorRef`.'),\n orgUrl: z.string().optional().describe('URL for the publishing organization.'),\n generatedAt: z.string().optional().describe('ISO date the manifest was generated.'),\n sensors: z.array(SensorEntrySchema).min(1),\n futureUpgrades: z.array(FutureUpgradeSchema).optional(),\n })\n .meta({ id: 'SensorManifest' })\n .describe(\n 'A published catalog of one organization\\u2019s detection hardware. Any operator — vendor, research group, or institution — publishes its own manifest against this schema so datasets from different sensor arrays can be compared directly.',\n );\n\nexport type SensorManifest = z.infer<typeof SensorManifestSchema>;\n","import {\n ModalitySchema,\n TimeSourceSchema,\n CalibrationStatusSchema,\n UpgradeStatusSchema,\n UncertaintyTypeSchema,\n} from '../manifest/types';\n\nexport const MODALITIES = ModalitySchema.options;\nexport const TIME_SOURCES = TimeSourceSchema.options;\nexport const CALIBRATION_STATUSES = CalibrationStatusSchema.options;\nexport const UPGRADE_STATUSES = UpgradeStatusSchema.options;\nexport const UNCERTAINTY_TYPES = UncertaintyTypeSchema.options;\n","import type { Modality, TimeSource, CalibrationStatus, UpgradeStatus } from '../manifest/types';\n\nexport const MODALITY_LABELS: Record<Modality, string> = {\n audio: 'Audio',\n electro_optical: 'Electro-Optical',\n radio_frequency: 'Radio Frequency',\n quantum: 'Quantum',\n environmental: 'Environmental',\n biometric: 'Biometric',\n};\n\nexport const TIME_SOURCE_LABELS: Record<TimeSource, string> = {\n atomic_clock: 'Atomic Clock',\n gps_disciplined: 'GPS-Disciplined',\n ntp: 'NTP',\n system: 'System Clock',\n unknown: 'Unknown',\n};\n\nexport const CALIBRATION_STATUS_LABELS: Record<CalibrationStatus, string> = {\n none: 'None',\n candidate_identified: 'Candidate Identified',\n in_practice: 'In Practice',\n documented: 'Documented',\n};\n\n/** What each rung of the calibration maturity gradient means for a data consumer. */\nexport const CALIBRATION_STATUS_DESCRIPTIONS: Record<CalibrationStatus, string> = {\n none: 'No calibration is performed. Declared honestly, this is itself useful information.',\n candidate_identified: 'A traceable reference has been named but is not yet part of practice.',\n in_practice: 'A real calibration method is performed today, but no full uncertainty budget exists.',\n documented: 'The calibration method and its uncertainty budget are published.',\n};\n\nexport const UPGRADE_STATUS_LABELS: Record<UpgradeStatus, string> = {\n planned: 'Planned',\n evaluating: 'Evaluating',\n ordered: 'Ordered',\n acquired: 'Acquired',\n};\n","import { createEnumGuard } from '@disclosureos/records/shared';\nimport {\n ModalitySchema,\n TimeSourceSchema,\n CalibrationStatusSchema,\n UpgradeStatusSchema,\n} from '../manifest/types';\n\n// Enum guards are built from each schema's `.options` (a plain string tuple)\n// rather than the Zod schema itself: passing a Zod type across the package\n// boundary collides with Zod's internal version brand, whereas the literal\n// tuple is brand-free and still schema-derived.\nexport const isModality = createEnumGuard(ModalitySchema.options);\nexport const isTimeSource = createEnumGuard(TimeSourceSchema.options);\nexport const isCalibrationStatus = createEnumGuard(CalibrationStatusSchema.options);\nexport const isUpgradeStatus = createEnumGuard(UpgradeStatusSchema.options);\n","import { z } from 'zod';\nimport { jsonSchemaEnvelope, schemaId } from '@disclosureos/records/shared';\nimport { SensorManifestSchema } from './manifest/types';\n\n/**\n * Version of the emitted JSON Schema artifact. Bump on any intentional change\n * to the manifest shape; the committed `schema/sensor-manifest.schema.json` and\n * the drift test (`src/__tests__/schema.test.ts`) keep this honest.\n */\nexport const INSTRUMENTS_SCHEMA_VERSION = '1.0.0';\n\nexport const INSTRUMENTS_SCHEMA_ID = schemaId(\n 'instruments',\n 'sensor-manifest',\n INSTRUMENTS_SCHEMA_VERSION,\n);\n\n/**\n * Emit the canonical JSON Schema (draft 2020-12) for {@link SensorManifestSchema}.\n * Unlike the satellite slot schemas, this is a standalone document schema — a\n * manifest is published on its own, not composed into `Observation`.\n */\nexport function instrumentsJsonSchema(): Record<string, unknown> {\n const schema = z.toJSONSchema(SensorManifestSchema, { target: 'draft-2020-12' }) as Record<\n string,\n unknown\n >;\n return jsonSchemaEnvelope(schema, {\n id: INSTRUMENTS_SCHEMA_ID,\n version: INSTRUMENTS_SCHEMA_VERSION,\n });\n}\n","import type { Modality, SensorEntry, SensorManifest } from '../manifest/types';\nimport { INSTRUMENTS_SCHEMA_VERSION } from '../schema';\n\n/**\n * Build a sensor entry from the three required fields, with everything else\n * supplied via `options`.\n */\nexport function createSensorEntry(\n id: string,\n name: string,\n modality: Modality,\n options?: Partial<Omit<SensorEntry, 'id' | 'name' | 'modality'>>,\n): SensorEntry {\n return { id, name, modality, ...options };\n}\n\n/**\n * Build a sensor manifest. `schemaVersion` defaults to the version of the\n * schema this package emits.\n */\nexport function createSensorManifest(\n org: string,\n orgSlug: string,\n sensors: SensorEntry[],\n options?: Partial<Omit<SensorManifest, 'org' | 'orgSlug' | 'sensors'>>,\n): SensorManifest {\n return {\n schemaVersion: INSTRUMENTS_SCHEMA_VERSION,\n org,\n orgSlug,\n sensors,\n ...options,\n };\n}\n","import type { CalibrationStatus, Modality, SensorEntry, SensorManifest } from '../manifest/types';\nimport { MODALITY_LABELS, CALIBRATION_STATUS_LABELS } from '../labels';\n\nexport function formatModality(modality: Modality): string {\n return MODALITY_LABELS[modality];\n}\n\nexport function formatCalibrationStatus(status: CalibrationStatus): string {\n return CALIBRATION_STATUS_LABELS[status];\n}\n\n/** One-line sensor summary, e.g. `\"Passive Bistatic Radar (Radio Frequency) — calibration: In Practice\"`. */\nexport function formatSensorEntry(sensor: SensorEntry): string {\n const calibration = sensor.calibration\n ? ` — calibration: ${formatCalibrationStatus(sensor.calibration.status)}`\n : '';\n return `${sensor.name} (${formatModality(sensor.modality)})${calibration}`;\n}\n\n/** One-line manifest summary, e.g. `\"ELDÆON — 28 sensors across 6 modalities, 3 future upgrades\"`. */\nexport function formatSensorManifest(manifest: SensorManifest): string {\n const modalityCount = new Set(manifest.sensors.map((sensor) => sensor.modality)).size;\n const sensorCount = manifest.sensors.length;\n const upgrades = manifest.futureUpgrades?.length ?? 0;\n const upgradeSuffix = upgrades > 0 ? `, ${upgrades} future upgrade${upgrades === 1 ? '' : 's'}` : '';\n return `${manifest.org} — ${sensorCount} sensor${sensorCount === 1 ? '' : 's'} across ${modalityCount} modalit${modalityCount === 1 ? 'y' : 'ies'}${upgradeSuffix}`;\n}\n","import { validateWith } from '@disclosureos/records/shared';\nimport type { ValidationIssue } from '@disclosureos/records/shared';\nimport { SENSOR_TYPES, DETECTION_METHODS } from '@disclosureos/records/constants';\nimport { SensorManifestSchema } from '../manifest/types';\nimport type { SensorManifest } from '../manifest/types';\n\nconst KNOWN_SENSOR_TYPES = new Set<string>(SENSOR_TYPES);\nconst KNOWN_DETECTION_METHODS = new Set<string>(DETECTION_METHODS);\n\n/**\n * Validate a sensor manifest. Schema validation plus the structural invariants\n * Zod cannot express portably:\n *\n * 1. sensor ids are unique within the manifest;\n * 2. every `recordsMapping` value either exists in the `@disclosureos/records`\n * enums or carries the matching `proposed*` flag — so a manifest can never\n * silently claim a mapping the records vocabulary does not have.\n *\n * Returns a flat issue list (empty when valid) — the ecosystem's single\n * validation contract.\n */\nexport function validateSensorManifest(value: unknown): ValidationIssue[] {\n const issues = validateWith(SensorManifestSchema, value);\n if (issues.length > 0) return issues;\n\n const manifest = value as SensorManifest;\n const seenIds = new Set<string>();\n\n manifest.sensors.forEach((sensor, index) => {\n const path = `sensors.${index}`;\n\n if (seenIds.has(sensor.id)) {\n issues.push({ path: `${path}.id`, message: `Duplicate sensor id \"${sensor.id}\".` });\n }\n seenIds.add(sensor.id);\n\n const mapping = sensor.recordsMapping;\n if (!mapping) return;\n\n if (\n mapping.sensorType !== undefined\n && !KNOWN_SENSOR_TYPES.has(mapping.sensorType)\n && mapping.proposedSensorType !== true\n ) {\n issues.push({\n path: `${path}.recordsMapping.sensorType`,\n message:\n `\"${mapping.sensorType}\" is not a records SensorType; flag it with proposedSensorType: true or use a value from the enum.`,\n });\n }\n\n if (\n mapping.detectionMethod !== undefined\n && !KNOWN_DETECTION_METHODS.has(mapping.detectionMethod)\n && mapping.proposedDetectionMethod !== true\n ) {\n issues.push({\n path: `${path}.recordsMapping.detectionMethod`,\n message:\n `\"${mapping.detectionMethod}\" is not a records DetectionMethod; flag it with proposedDetectionMethod: true or use a value from the enum.`,\n });\n }\n });\n\n return issues;\n}\n"]}
1
+ {"version":3,"sources":["../src/manifest/types.ts","../src/constants/index.ts","../src/labels/index.ts","../src/guards/index.ts","../src/schema.ts","../src/factories/index.ts","../src/formatters/index.ts","../src/validators/index.ts"],"names":["z"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod';\n\n/**\n * The sensor manifest is the instrument layer of the standard: DisclosureOS\n * records describe *what was observed*; a sensor manifest describes *the\n * hardware that produced the data* — per sensor, in enough structured detail\n * that a field mission or data drop from one organization is comparable,\n * replicable, and verifiable by everyone else.\n *\n * Design lineage: proposed by ELDÆON (disclosurefoundation/disclosureos#5) and\n * promoted into the framework as a foundation package. The manifest is the\n * standard's first standalone document type besides `Observation`: it is not a\n * per-observation extension slot — observations point at manifest entries via\n * `SensorReading.sensorRef` (`\"<org-slug>:<sensor-id>\"`).\n */\n\nconst KEBAB_CASE_PATTERN = /^[a-z0-9][a-z0-9-]*$/;\n\nexport const ModalitySchema = z\n .enum(['audio', 'electro_optical', 'radio_frequency', 'quantum', 'environmental', 'biometric'])\n .describe('Top-level sensing modality the sensor belongs to.');\n\nexport type Modality = z.infer<typeof ModalitySchema>;\n\nexport const TimeSourceSchema = z\n .enum(['atomic_clock', 'gps_disciplined', 'ntp', 'system', 'unknown'])\n .describe('Clock source that timestamps the sensor\\u2019s data.');\n\nexport type TimeSource = z.infer<typeof TimeSourceSchema>;\n\nexport const SensorTimingSchema = z\n .object({\n timeSource: TimeSourceSchema,\n timeUncertaintyNs: z\n .number()\n .nullable()\n .optional()\n .describe('Timestamp uncertainty in nanoseconds. Null = not yet characterized.'),\n })\n .meta({ id: 'SensorTiming' })\n .describe(\n 'Timing provenance. Timestamp error of even a few seconds confounds multi-station correlation, so the clock source must be declared, not assumed.',\n );\n\nexport type SensorTiming = z.infer<typeof SensorTimingSchema>;\n\nexport const RecordsMappingSchema = z\n .object({\n sensorType: z\n .string()\n .optional()\n .describe('The `@disclosureos/records` SensorType this sensor maps to.'),\n detectionMethod: z\n .string()\n .optional()\n .describe('The `@disclosureos/records` DetectionMethod this sensor maps to.'),\n proposedSensorType: z\n .boolean()\n .optional()\n .describe('True = sensorType is not in the records enum yet and is proposed by the publisher.'),\n proposedDetectionMethod: z\n .boolean()\n .optional()\n .describe('True = detectionMethod is not in the records enum yet and is proposed by the publisher.'),\n })\n .meta({ id: 'RecordsMapping' })\n .describe(\n 'How this sensor maps to the `SensorReading` vocabulary in `@disclosureos/records`. Values outside the records enums must carry the matching proposed* flag.',\n );\n\nexport type RecordsMapping = z.infer<typeof RecordsMappingSchema>;\n\nexport const RawDataSpecSchema = z\n .object({\n format: z\n .string()\n .optional()\n .describe('Raw-data file format, e.g. \"NDJSON.gz\", \"WAV\", \"MJPEG\", \"FITS\", \"CSV\".'),\n locatorPattern: z\n .string()\n .nullable()\n .optional()\n .describe('Storage key pattern or path convention for locating the raw files.'),\n sampleRateHz: z.number().nullable().optional().describe('Sample rate in Hz, where applicable.'),\n bitDepth: z.number().nullable().optional().describe('Sample bit depth, where applicable.'),\n })\n .meta({ id: 'RawDataSpec' })\n .describe(\n 'Raw-data format and locator. Supports a metadata-first architecture: circulate manifests widely, pull raw data on demand.',\n );\n\nexport type RawDataSpec = z.infer<typeof RawDataSpecSchema>;\n\nexport const UncertaintyTypeSchema = z\n .enum(['A', 'B'])\n .describe('GUM uncertainty evaluation type: A (statistical) or B (other means).');\n\nexport type UncertaintyType = z.infer<typeof UncertaintyTypeSchema>;\n\nexport const MeasurementUncertaintySchema = z\n .object({\n u_c: z.number().nullable().optional().describe('Combined standard uncertainty.'),\n U: z.number().nullable().optional().describe('Expanded uncertainty (= k \\u00d7 u_c).'),\n k: z.number().nullable().optional().describe('Coverage factor (2 \\u2248 95% confidence level).'),\n type: UncertaintyTypeSchema.nullable().optional(),\n })\n .meta({ id: 'MeasurementUncertainty' })\n .describe(\n 'GUM-style measurement uncertainty. Fields are nullable until an uncertainty budget exists — declaring \"unknown\" honestly is itself information.',\n );\n\nexport type MeasurementUncertainty = z.infer<typeof MeasurementUncertaintySchema>;\n\nexport const MeasurementSchema = z\n .object({\n name: z.string().min(1).describe('Measured quantity, e.g. \"differential_pressure\".'),\n unit: z.string().min(1).describe('UCUM-style unit string, e.g. \"Pa\", \"dB\", \"uT\", \"ppm\", \"/min\".'),\n uncertainty: MeasurementUncertaintySchema.optional(),\n })\n .meta({ id: 'Measurement' })\n .describe('One measured quantity with its unit and uncertainty.');\n\nexport type Measurement = z.infer<typeof MeasurementSchema>;\n\nexport const CalibrationStatusSchema = z\n .enum(['none', 'candidate_identified', 'in_practice', 'documented'])\n .describe(\n 'Calibration maturity gradient: none = no calibration; candidate_identified = a reference is named but not used; in_practice = a real method is performed but not fully budgeted; documented = method + uncertainty budget published.',\n );\n\nexport type CalibrationStatus = z.infer<typeof CalibrationStatusSchema>;\n\nexport const SensorCalibrationSchema = z\n .object({\n status: CalibrationStatusSchema,\n calibrated: z\n .boolean()\n .nullable()\n .optional()\n .describe('Coarse calibrated flag, mirroring `SensorReading.calibrated`. Null = undetermined.'),\n currentMethod: z\n .string()\n .nullable()\n .optional()\n .describe('What the operator actually does today. Null = no calibration currently performed.'),\n traceableReference: z\n .string()\n .nullable()\n .optional()\n .describe('Traceable reference, in use or identified as a candidate (e.g. \"GPS/UTC\", \"USGS/INTERMAGNET\").'),\n referenceInUse: z\n .boolean()\n .nullable()\n .optional()\n .describe('True = the traceable reference is part of current practice. False = identified candidate only. Null = undetermined.'),\n cadence: z.string().nullable().optional().describe('How often calibration is performed.'),\n uncertaintyBudget: z.string().nullable().optional().describe('Published uncertainty budget, if any.'),\n notes: z.string().nullable().optional().describe('Open questions or method caveats.'),\n })\n .meta({ id: 'SensorCalibration' })\n .describe(\n 'Calibration provenance. Deliberately separates what an operator actually does today from the reference it has identified; honest nulls are first-class, so calibration gaps stay visible and comparable across operators.',\n );\n\nexport type SensorCalibration = z.infer<typeof SensorCalibrationSchema>;\n\nexport const SensorEntrySchema = z\n .object({\n id: z\n .string()\n .regex(KEBAB_CASE_PATTERN)\n .describe(\n 'Stable kebab-case id, unique within the manifest; addressable from a record via `SensorReading.sensorRef` (\"<org-slug>:<sensor-id>\").',\n ),\n name: z.string().min(1).describe('Human-readable sensor name.'),\n modality: ModalitySchema,\n manufacturerModel: z\n .string()\n .optional()\n .describe(\n 'Hardware class descriptor. Publishers MAY withhold specific make/model identities and publish spec-level class descriptors instead (e.g. \"dual GM-tube counter\" rather than a product name).',\n ),\n inHouse: z.boolean().optional().describe('True if operator-built rather than off-the-shelf.'),\n compute: z\n .string()\n .optional()\n .describe('The compute unit this sensor is attached to, for platforms with several compute nodes.'),\n recordsMapping: RecordsMappingSchema.optional(),\n timing: SensorTimingSchema.optional(),\n rawData: RawDataSpecSchema.optional(),\n measurements: z.array(MeasurementSchema).optional(),\n calibration: SensorCalibrationSchema.optional(),\n specs: z\n .record(z.string(), z.unknown())\n .optional()\n .describe(\n 'Free-form hardware specifications from the operator\\u2019s spec sheet (resolution, range, sensitivity, interface, \\u2026). Keys vary by modality.',\n ),\n specSource: z.string().optional().describe('Provenance of the spec values.'),\n })\n .meta({ id: 'SensorEntry' })\n .describe('One sensor: its class, spec, timing, raw-data locator, measurements, and calibration provenance.');\n\nexport type SensorEntry = z.infer<typeof SensorEntrySchema>;\n\nexport const UpgradeStatusSchema = z\n .enum(['planned', 'evaluating', 'ordered', 'acquired'])\n .describe('Acquisition status of a declared future hardware upgrade.');\n\nexport type UpgradeStatus = z.infer<typeof UpgradeStatusSchema>;\n\nexport const FutureUpgradeSchema = z\n .object({\n name: z.string().min(1),\n modality: ModalitySchema,\n status: UpgradeStatusSchema.optional(),\n specs: z.record(z.string(), z.unknown()).optional(),\n link: z.string().nullable().optional().describe('Public product or reference page, where the publisher chooses to share one.'),\n notes: z.string().nullable().optional(),\n })\n .meta({ id: 'FutureUpgrade' })\n .describe(\n 'Planned hardware declared ahead of deployment so data consumers can anticipate new streams. Not part of the live sensor array.',\n );\n\nexport type FutureUpgrade = z.infer<typeof FutureUpgradeSchema>;\n\nexport const SensorManifestSchema = z\n .object({\n schemaVersion: z.string().min(1).describe('Version of the sensor-manifest schema this instance targets (SemVer).'),\n org: z.string().min(1).describe('Publishing organization, display form (e.g. \"ELD\\u00c6ON\").'),\n orgSlug: z\n .string()\n .regex(KEBAB_CASE_PATTERN)\n .describe('Stable lowercase slug for the publisher (e.g. \"eldaeon\"); the org half of a `sensorRef`.'),\n orgUrl: z.string().optional().describe('URL for the publishing organization.'),\n generatedAt: z.string().optional().describe('ISO date the manifest was generated.'),\n sensors: z.array(SensorEntrySchema).min(1),\n futureUpgrades: z.array(FutureUpgradeSchema).optional(),\n })\n .meta({ id: 'SensorManifest' })\n .describe(\n 'A published catalog of one organization\\u2019s detection hardware. Any operator — vendor, research group, or institution — publishes its own manifest against this schema so datasets from different sensor arrays can be compared directly.',\n );\n\nexport type SensorManifest = z.infer<typeof SensorManifestSchema>;\n","import {\n ModalitySchema,\n TimeSourceSchema,\n CalibrationStatusSchema,\n UpgradeStatusSchema,\n UncertaintyTypeSchema,\n} from '../manifest/types';\n\nexport const MODALITIES = ModalitySchema.options;\nexport const TIME_SOURCES = TimeSourceSchema.options;\nexport const CALIBRATION_STATUSES = CalibrationStatusSchema.options;\nexport const UPGRADE_STATUSES = UpgradeStatusSchema.options;\nexport const UNCERTAINTY_TYPES = UncertaintyTypeSchema.options;\n","import type { Modality, TimeSource, CalibrationStatus, UpgradeStatus } from '../manifest/types';\n\nexport const MODALITY_LABELS: Record<Modality, string> = {\n audio: 'Audio',\n electro_optical: 'Electro-Optical',\n radio_frequency: 'Radio Frequency',\n quantum: 'Quantum',\n environmental: 'Environmental',\n biometric: 'Biometric',\n};\n\nexport const TIME_SOURCE_LABELS: Record<TimeSource, string> = {\n atomic_clock: 'Atomic Clock',\n gps_disciplined: 'GPS-Disciplined',\n ntp: 'NTP',\n system: 'System Clock',\n unknown: 'Unknown',\n};\n\nexport const CALIBRATION_STATUS_LABELS: Record<CalibrationStatus, string> = {\n none: 'None',\n candidate_identified: 'Candidate Identified',\n in_practice: 'In Practice',\n documented: 'Documented',\n};\n\n/** What each rung of the calibration maturity gradient means for a data consumer. */\nexport const CALIBRATION_STATUS_DESCRIPTIONS: Record<CalibrationStatus, string> = {\n none: 'No calibration is performed. Declared honestly, this is itself useful information.',\n candidate_identified: 'A traceable reference has been named but is not yet part of practice.',\n in_practice: 'A real calibration method is performed today, but no full uncertainty budget exists.',\n documented: 'The calibration method and its uncertainty budget are published.',\n};\n\nexport const UPGRADE_STATUS_LABELS: Record<UpgradeStatus, string> = {\n planned: 'Planned',\n evaluating: 'Evaluating',\n ordered: 'Ordered',\n acquired: 'Acquired',\n};\n","import { createEnumGuard } from '@disclosureos/records/shared';\nimport {\n ModalitySchema,\n TimeSourceSchema,\n CalibrationStatusSchema,\n UpgradeStatusSchema,\n} from '../manifest/types';\n\n// Enum guards are built from each schema's `.options` (a plain string tuple)\n// rather than the Zod schema itself: passing a Zod type across the package\n// boundary collides with Zod's internal version brand, whereas the literal\n// tuple is brand-free and still schema-derived.\nexport const isModality = createEnumGuard(ModalitySchema.options);\nexport const isTimeSource = createEnumGuard(TimeSourceSchema.options);\nexport const isCalibrationStatus = createEnumGuard(CalibrationStatusSchema.options);\nexport const isUpgradeStatus = createEnumGuard(UpgradeStatusSchema.options);\n","import { preservePublishedSchema } from '@disclosureos/records/shared';\nimport { z } from 'zod';\nimport { jsonSchemaEnvelope, schemaId } from '@disclosureos/records/shared';\nimport { SensorManifestSchema } from './manifest/types';\n\n/**\n * Version of the emitted JSON Schema artifact. Bump on any intentional change\n * to the manifest shape; the committed `schema/sensor-manifest.schema.json` and\n * the drift test (`src/__tests__/schema.test.ts`) keep this honest.\n */\nexport const INSTRUMENTS_SCHEMA_VERSION = '1.0.0';\n\nexport const INSTRUMENTS_SCHEMA_ID = schemaId(\n 'instruments',\n 'sensor-manifest',\n INSTRUMENTS_SCHEMA_VERSION,\n);\n\n/**\n * Emit the canonical JSON Schema (draft 2020-12) for {@link SensorManifestSchema}.\n * Unlike the satellite slot schemas, this is a standalone document schema — a\n * manifest is published on its own, not composed into `Observation`.\n */\nexport function instrumentsJsonSchema(): Record<string, unknown> {\n const schema = preservePublishedSchema(z.toJSONSchema(SensorManifestSchema, { target: 'draft-2020-12' })) as Record<\n string,\n unknown\n >;\n return jsonSchemaEnvelope(schema, {\n id: INSTRUMENTS_SCHEMA_ID,\n version: INSTRUMENTS_SCHEMA_VERSION,\n });\n}\n","import type { Modality, SensorEntry, SensorManifest } from '../manifest/types';\nimport { INSTRUMENTS_SCHEMA_VERSION } from '../schema';\n\n/**\n * Build a sensor entry from the three required fields, with everything else\n * supplied via `options`.\n */\nexport function createSensorEntry(\n id: string,\n name: string,\n modality: Modality,\n options?: Partial<Omit<SensorEntry, 'id' | 'name' | 'modality'>>,\n): SensorEntry {\n return { id, name, modality, ...options };\n}\n\n/**\n * Build a sensor manifest. `schemaVersion` defaults to the version of the\n * schema this package emits.\n */\nexport function createSensorManifest(\n org: string,\n orgSlug: string,\n sensors: SensorEntry[],\n options?: Partial<Omit<SensorManifest, 'org' | 'orgSlug' | 'sensors'>>,\n): SensorManifest {\n return {\n schemaVersion: INSTRUMENTS_SCHEMA_VERSION,\n org,\n orgSlug,\n sensors,\n ...options,\n };\n}\n","import type { CalibrationStatus, Modality, SensorEntry, SensorManifest } from '../manifest/types';\nimport { MODALITY_LABELS, CALIBRATION_STATUS_LABELS } from '../labels';\n\nexport function formatModality(modality: Modality): string {\n return MODALITY_LABELS[modality];\n}\n\nexport function formatCalibrationStatus(status: CalibrationStatus): string {\n return CALIBRATION_STATUS_LABELS[status];\n}\n\n/** One-line sensor summary, e.g. `\"Passive Bistatic Radar (Radio Frequency) — calibration: In Practice\"`. */\nexport function formatSensorEntry(sensor: SensorEntry): string {\n const calibration = sensor.calibration\n ? ` — calibration: ${formatCalibrationStatus(sensor.calibration.status)}`\n : '';\n return `${sensor.name} (${formatModality(sensor.modality)})${calibration}`;\n}\n\n/** One-line manifest summary, e.g. `\"ELDÆON — 28 sensors across 6 modalities, 3 future upgrades\"`. */\nexport function formatSensorManifest(manifest: SensorManifest): string {\n const modalityCount = new Set(manifest.sensors.map((sensor) => sensor.modality)).size;\n const sensorCount = manifest.sensors.length;\n const upgrades = manifest.futureUpgrades?.length ?? 0;\n const upgradeSuffix = upgrades > 0 ? `, ${upgrades} future upgrade${upgrades === 1 ? '' : 's'}` : '';\n return `${manifest.org} — ${sensorCount} sensor${sensorCount === 1 ? '' : 's'} across ${modalityCount} modalit${modalityCount === 1 ? 'y' : 'ies'}${upgradeSuffix}`;\n}\n","import { validateWith } from '@disclosureos/records/shared';\nimport type { ValidationIssue } from '@disclosureos/records/shared';\nimport { SENSOR_TYPES, DETECTION_METHODS } from '@disclosureos/records/constants';\nimport { SensorManifestSchema } from '../manifest/types';\nimport type { SensorManifest } from '../manifest/types';\n\nconst KNOWN_SENSOR_TYPES = new Set<string>(SENSOR_TYPES);\nconst KNOWN_DETECTION_METHODS = new Set<string>(DETECTION_METHODS);\n\n/**\n * Validate a sensor manifest. Schema validation plus the structural invariants\n * Zod cannot express portably:\n *\n * 1. sensor ids are unique within the manifest;\n * 2. every `recordsMapping` value either exists in the `@disclosureos/records`\n * enums or carries the matching `proposed*` flag — so a manifest can never\n * silently claim a mapping the records vocabulary does not have.\n *\n * Returns a flat issue list (empty when valid) — the ecosystem's single\n * validation contract.\n */\nexport function validateSensorManifest(value: unknown): ValidationIssue[] {\n const issues = validateWith(SensorManifestSchema, value);\n if (issues.length > 0) return issues;\n\n const manifest = value as SensorManifest;\n const seenIds = new Set<string>();\n\n manifest.sensors.forEach((sensor, index) => {\n const path = `sensors.${index}`;\n\n if (seenIds.has(sensor.id)) {\n issues.push({ path: `${path}.id`, message: `Duplicate sensor id \"${sensor.id}\".` });\n }\n seenIds.add(sensor.id);\n\n const mapping = sensor.recordsMapping;\n if (!mapping) return;\n\n if (\n mapping.sensorType !== undefined\n && !KNOWN_SENSOR_TYPES.has(mapping.sensorType)\n && mapping.proposedSensorType !== true\n ) {\n issues.push({\n path: `${path}.recordsMapping.sensorType`,\n message:\n `\"${mapping.sensorType}\" is not a records SensorType; flag it with proposedSensorType: true or use a value from the enum.`,\n });\n }\n\n if (\n mapping.detectionMethod !== undefined\n && !KNOWN_DETECTION_METHODS.has(mapping.detectionMethod)\n && mapping.proposedDetectionMethod !== true\n ) {\n issues.push({\n path: `${path}.recordsMapping.detectionMethod`,\n message:\n `\"${mapping.detectionMethod}\" is not a records DetectionMethod; flag it with proposedDetectionMethod: true or use a value from the enum.`,\n });\n }\n });\n\n return issues;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@disclosureos/instruments",
3
- "version": "2.0.0-beta.5",
3
+ "version": "2.0.0-beta.6",
4
4
  "description": "UAP Sensor Manifest — per-sensor specification standard for detection hardware in the DisclosureOS ecosystem",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -79,8 +79,8 @@
79
79
  "LICENSE"
80
80
  ],
81
81
  "dependencies": {
82
- "zod": "4.4.3",
83
- "@disclosureos/records": "2.0.0-beta.5"
82
+ "zod": "4.6.6",
83
+ "@disclosureos/records": "2.0.0-beta.6"
84
84
  },
85
85
  "devDependencies": {
86
86
  "@types/node": "^20",