diff --git a/CHANGELOG.md b/CHANGELOG.md index 712e7df..eac9436 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,16 +1,21 @@ # Changelog -## Unreleased +## 0.2.3 - 2026-10-08 + +- Patch the MCP SDK to 1.31.0, proxy-addr to 2.0.8, and source-map-js to 1.2.2 for newly reported advisories. +- Regenerate tooling identity and conformance evidence for 0.2.3; the normative protocol remains 0.2.0. +- Keep the dependency audit limited to the exact current local workspace importer collision. + +## 0.2.2 - 2026-10-08 - Patch the tooling Hono dependency to 4.13.7 and use a dependency audit that excludes only the exact local workspace importer collision. All material protocol and reference-tooling changes are recorded here. MASA uses semantic versioning; a tooling patch may advance without changing the normative protocol version when its record contracts remain compatible. -## 0.2.2 - unreleased - Update the reviewed fast-uri 3.x dependency to 3.1.8 and regenerate the 0.2.2 tooling identity. MASA protocol 0.2.0 remains unchanged. - Refresh Vitest 4.1.11 and reviewed js-yaml, Hono and ip-address patches in the lock graph. -- Packed tooling remains a local candidate; no public release is claimed. +- Package registry publication remains separate from the Git source release. ## 0.2.1 - unreleased diff --git a/README.md b/README.md index 0736202..a847122 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ See [`docs/project-agnostic-integration.md`](docs/project-agnostic-integration.m ## Local conformance evidence -The reference implementation records separate evidence for the `reader`, `writer`, `transformer`, `agent-host`, and `publisher` classes in [`conformance/0.2.0/evidence`](conformance/0.2.0/evidence). The 0.2.2 reference-tooling candidate (protocol 0.2.0) local run reports all five classes conformant on Node.js 22.22.3 for macOS arm64 against fixture-manifest digest `e7d53ca104b4d36cdd8d6604e0884116f71b2900916161657ee913ab8bf5a279`. The digest is refreshed from the examples, specification, capability catalog, schemas, ontology registries, JSON-LD context, and executable conformance runner whenever evidence is intentionally recorded. +The reference implementation records separate evidence for the `reader`, `writer`, `transformer`, `agent-host`, and `publisher` classes in [`conformance/0.2.0/evidence`](conformance/0.2.0/evidence). The 0.2.3 reference tooling (protocol 0.2.0) local run reports all five classes conformant on Node.js 22.22.3 for macOS arm64 against fixture-manifest digest `db863d81206e4891f2bf61272421c7887b6dd3631747167987c1756a51c75a04`. The digest is refreshed from the examples, specification, capability catalog, schemas, ontology registries, JSON-LD context, and executable conformance runner whenever evidence is intentionally recorded. Run `pnpm check` to regenerate derived code and verify conformance on the current machine. Run `pnpm conformance:evidence` only when intentionally recording a new local evidence snapshot. Conformance is always specific to an implementation version, MASA version, profile, class, platform, and exact fixture set; it is not a universal certification. diff --git a/capabilities/0.2.0/reference.json b/capabilities/0.2.0/reference.json index 1fc1dd0..2a59fa6 100644 --- a/capabilities/0.2.0/reference.json +++ b/capabilities/0.2.0/reference.json @@ -4,11 +4,11 @@ "masaVersion": "0.2.0", "id": "https://masa.sonicfield.org/capabilities/0.2.0/reference", "implementation": { - "id": "https://masa.sonicfield.org/implementations/typescript-reference/0.2.2", + "id": "https://masa.sonicfield.org/implementations/typescript-reference/0.2.3", "name": "MASA local TypeScript reference", - "version": "0.2.2" + "version": "0.2.3" }, - "generatedAt": "2026-10-01T02:00:16.890Z", + "generatedAt": "2026-10-08T23:47:44.000Z", "capabilities": [ { "id": "https://masa.sonicfield.org/capabilities/0.2.0/matter.validate", diff --git a/cli/package.json b/cli/package.json index fe7efcb..8c614a2 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "@sonicfield/masa-cli", - "version": "0.2.2", + "version": "0.2.3", "private": true, "license": "MIT", "description": "Local command-line reference implementation for MASA", diff --git a/conformance/0.2.0/evidence/agent-host.json b/conformance/0.2.0/evidence/agent-host.json index c2dbcb4..5458c17 100644 --- a/conformance/0.2.0/evidence/agent-host.json +++ b/conformance/0.2.0/evidence/agent-host.json @@ -5,29 +5,29 @@ "fixtureManifestDigest": { "algorithm": "sha-256", "byteLength": 716691, - "digest": "e7d53ca104b4d36cdd8d6604e0884116f71b2900916161657ee913ab8bf5a279", + "digest": "db863d81206e4891f2bf61272421c7887b6dd3631747167987c1756a51c75a04", "status": "verified", - "verifiedAt": "2026-10-01T02:00:19.738Z" + "verifiedAt": "2026-10-08T23:51:42.984Z" }, "id": "urn:uuid:10000000-0000-4000-8000-000000000004", "implementation": { "name": "MASA local TypeScript reference", - "version": "0.2.2" + "version": "0.2.3" }, "masaVersion": "0.2.0", "migrationStatus": "not_tested", "platform": { "architecture": "arm64", "os": "darwin", - "runtime": "node v26.8.2" + "runtime": "node v22.22.3" }, "profile": "agent", - "runAt": "2026-10-01T02:00:19.738Z", + "runAt": "2026-10-08T23:51:42.984Z", "status": "conformant", "subject": "@sonicfield/masa workspace", "suite": { "name": "masa-typescript-reference-conformance", - "version": "0.2.2" + "version": "0.2.3" }, "tests": [ { diff --git a/conformance/0.2.0/evidence/publisher.json b/conformance/0.2.0/evidence/publisher.json index 2b24cea..3a9eeab 100644 --- a/conformance/0.2.0/evidence/publisher.json +++ b/conformance/0.2.0/evidence/publisher.json @@ -5,29 +5,29 @@ "fixtureManifestDigest": { "algorithm": "sha-256", "byteLength": 716691, - "digest": "e7d53ca104b4d36cdd8d6604e0884116f71b2900916161657ee913ab8bf5a279", + "digest": "db863d81206e4891f2bf61272421c7887b6dd3631747167987c1756a51c75a04", "status": "verified", - "verifiedAt": "2026-10-01T02:00:19.738Z" + "verifiedAt": "2026-10-08T23:51:42.984Z" }, "id": "urn:uuid:10000000-0000-4000-8000-000000000005", "implementation": { "name": "MASA local TypeScript reference", - "version": "0.2.2" + "version": "0.2.3" }, "masaVersion": "0.2.0", "migrationStatus": "not_tested", "platform": { "architecture": "arm64", "os": "darwin", - "runtime": "node v26.8.2" + "runtime": "node v22.22.3" }, "profile": "publication", - "runAt": "2026-10-01T02:00:19.738Z", + "runAt": "2026-10-08T23:51:42.984Z", "status": "conformant", "subject": "@sonicfield/masa workspace", "suite": { "name": "masa-typescript-reference-conformance", - "version": "0.2.2" + "version": "0.2.3" }, "tests": [ { diff --git a/conformance/0.2.0/evidence/reader.json b/conformance/0.2.0/evidence/reader.json index 277c2e8..2cff767 100644 --- a/conformance/0.2.0/evidence/reader.json +++ b/conformance/0.2.0/evidence/reader.json @@ -5,29 +5,29 @@ "fixtureManifestDigest": { "algorithm": "sha-256", "byteLength": 716691, - "digest": "e7d53ca104b4d36cdd8d6604e0884116f71b2900916161657ee913ab8bf5a279", + "digest": "db863d81206e4891f2bf61272421c7887b6dd3631747167987c1756a51c75a04", "status": "verified", - "verifiedAt": "2026-10-01T02:00:19.738Z" + "verifiedAt": "2026-10-08T23:51:42.984Z" }, "id": "urn:uuid:10000000-0000-4000-8000-000000000001", "implementation": { "name": "MASA local TypeScript reference", - "version": "0.2.2" + "version": "0.2.3" }, "masaVersion": "0.2.0", "migrationStatus": "not_tested", "platform": { "architecture": "arm64", "os": "darwin", - "runtime": "node v26.8.2" + "runtime": "node v22.22.3" }, "profile": "core", - "runAt": "2026-10-01T02:00:19.738Z", + "runAt": "2026-10-08T23:51:42.984Z", "status": "conformant", "subject": "@sonicfield/masa workspace", "suite": { "name": "masa-typescript-reference-conformance", - "version": "0.2.2" + "version": "0.2.3" }, "tests": [ { diff --git a/conformance/0.2.0/evidence/transformer.json b/conformance/0.2.0/evidence/transformer.json index adb3c43..aa94921 100644 --- a/conformance/0.2.0/evidence/transformer.json +++ b/conformance/0.2.0/evidence/transformer.json @@ -5,29 +5,29 @@ "fixtureManifestDigest": { "algorithm": "sha-256", "byteLength": 716691, - "digest": "e7d53ca104b4d36cdd8d6604e0884116f71b2900916161657ee913ab8bf5a279", + "digest": "db863d81206e4891f2bf61272421c7887b6dd3631747167987c1756a51c75a04", "status": "verified", - "verifiedAt": "2026-10-01T02:00:19.738Z" + "verifiedAt": "2026-10-08T23:51:42.984Z" }, "id": "urn:uuid:10000000-0000-4000-8000-000000000003", "implementation": { "name": "MASA local TypeScript reference", - "version": "0.2.2" + "version": "0.2.3" }, "masaVersion": "0.2.0", "migrationStatus": "not_tested", "platform": { "architecture": "arm64", "os": "darwin", - "runtime": "node v26.8.2" + "runtime": "node v22.22.3" }, "profile": "transformation", - "runAt": "2026-10-01T02:00:19.738Z", + "runAt": "2026-10-08T23:51:42.984Z", "status": "conformant", "subject": "@sonicfield/masa workspace", "suite": { "name": "masa-typescript-reference-conformance", - "version": "0.2.2" + "version": "0.2.3" }, "tests": [ { diff --git a/conformance/0.2.0/evidence/writer.json b/conformance/0.2.0/evidence/writer.json index 54e1aed..6ebd561 100644 --- a/conformance/0.2.0/evidence/writer.json +++ b/conformance/0.2.0/evidence/writer.json @@ -5,29 +5,29 @@ "fixtureManifestDigest": { "algorithm": "sha-256", "byteLength": 716691, - "digest": "e7d53ca104b4d36cdd8d6604e0884116f71b2900916161657ee913ab8bf5a279", + "digest": "db863d81206e4891f2bf61272421c7887b6dd3631747167987c1756a51c75a04", "status": "verified", - "verifiedAt": "2026-10-01T02:00:19.738Z" + "verifiedAt": "2026-10-08T23:51:42.984Z" }, "id": "urn:uuid:10000000-0000-4000-8000-000000000002", "implementation": { "name": "MASA local TypeScript reference", - "version": "0.2.2" + "version": "0.2.3" }, "masaVersion": "0.2.0", "migrationStatus": "not_tested", "platform": { "architecture": "arm64", "os": "darwin", - "runtime": "node v26.8.2" + "runtime": "node v22.22.3" }, "profile": "core", - "runAt": "2026-10-01T02:00:19.738Z", + "runAt": "2026-10-08T23:51:42.984Z", "status": "conformant", "subject": "@sonicfield/masa workspace", "suite": { "name": "masa-typescript-reference-conformance", - "version": "0.2.2" + "version": "0.2.3" }, "tests": [ { diff --git a/mcp/package.json b/mcp/package.json index 731a9c0..27fe823 100644 --- a/mcp/package.json +++ b/mcp/package.json @@ -1,6 +1,6 @@ { "name": "@sonicfield/masa-mcp", - "version": "0.2.2", + "version": "0.2.3", "private": true, "license": "MIT", "description": "Read-oriented local MCP server for MASA", @@ -27,7 +27,7 @@ "test": "vitest run" }, "dependencies": { - "@modelcontextprotocol/sdk": "1.30.0", + "@modelcontextprotocol/sdk": "1.31.0", "@sonicfield/masa": "workspace:*", "@sonicfield/masa-bundle": "workspace:*", "@sonicfield/masa-validator": "workspace:*", diff --git a/package.json b/package.json index 29ecd7f..4f8a55c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@sonicfield/masa-workspace", - "version": "0.2.2", + "version": "0.2.3", "private": true, "license": "MIT", "description": "Local-first reference repository for the MASA Sound Matter Aware protocol", @@ -27,7 +27,7 @@ "audit:dependencies": "node scripts/audit-dependencies.mjs" }, "devDependencies": { - "@modelcontextprotocol/sdk": "1.30.0", + "@modelcontextprotocol/sdk": "1.31.0", "@sonicfield/masa": "workspace:*", "@sonicfield/masa-bundle": "workspace:*", "@sonicfield/masa-validator": "workspace:*", @@ -47,7 +47,9 @@ "qs@6": "6.16.0", "js-yaml@4": "4.3.2", "hono@4": "4.13.7", - "ip-address@10": "10.7.1" + "ip-address@10": "10.7.1", + "proxy-addr@2": "2.0.8", + "source-map-js@1": "1.2.2" } } } diff --git a/packages/bundle/package.json b/packages/bundle/package.json index a1d20c4..19ae0f2 100644 --- a/packages/bundle/package.json +++ b/packages/bundle/package.json @@ -1,6 +1,6 @@ { "name": "@sonicfield/masa-bundle", - "version": "0.2.2", + "version": "0.2.3", "description": "Deterministic, bounded MASA directory and ZIP bundle tooling", "type": "module", "private": true, diff --git a/packages/core/package.json b/packages/core/package.json index 686a1f7..a5fe365 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@sonicfield/masa", - "version": "0.2.2", + "version": "0.2.3", "private": true, "license": "MIT", "description": "Browser-safe types and pure utilities for MASA 0.2.0", diff --git a/packages/core/src/generated/protocol-resources.ts b/packages/core/src/generated/protocol-resources.ts index c671948..8d5fe76 100644 --- a/packages/core/src/generated/protocol-resources.ts +++ b/packages/core/src/generated/protocol-resources.ts @@ -25,11 +25,11 @@ export const referenceCapabilitySet = { "masaVersion": "0.2.0", "id": "https://masa.sonicfield.org/capabilities/0.2.0/reference", "implementation": { - "id": "https://masa.sonicfield.org/implementations/typescript-reference/0.2.2", + "id": "https://masa.sonicfield.org/implementations/typescript-reference/0.2.3", "name": "MASA local TypeScript reference", - "version": "0.2.2" + "version": "0.2.3" }, - "generatedAt": "2026-10-01T02:00:16.890Z", + "generatedAt": "2026-10-08T23:47:44.000Z", "capabilities": [ { "id": "https://masa.sonicfield.org/capabilities/0.2.0/matter.validate", diff --git a/packages/core/src/generated/version.ts b/packages/core/src/generated/version.ts index 5688f01..5744d4a 100644 --- a/packages/core/src/generated/version.ts +++ b/packages/core/src/generated/version.ts @@ -1,3 +1,3 @@ /** Generated from synchronized MASA workspace package metadata. */ export const MASA_PROTOCOL_VERSION = "0.2.0"; -export const MASA_REFERENCE_IMPLEMENTATION_VERSION = "0.2.2"; +export const MASA_REFERENCE_IMPLEMENTATION_VERSION = "0.2.3"; diff --git a/packages/validator/package.json b/packages/validator/package.json index 3f80713..3aa3171 100644 --- a/packages/validator/package.json +++ b/packages/validator/package.json @@ -1,6 +1,6 @@ { "name": "@sonicfield/masa-validator", - "version": "0.2.2", + "version": "0.2.3", "private": true, "license": "MIT", "description": "Offline structural, semantic, profile, and public-safety validation for MASA 0.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index acd2934..f4cb602 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,14 +10,16 @@ overrides: js-yaml@4: 4.3.2 hono@4: 4.13.7 ip-address@10: 10.7.1 + proxy-addr@2: 2.0.8 + source-map-js@1: 1.2.2 importers: .: devDependencies: '@modelcontextprotocol/sdk': - specifier: 1.30.0 - version: 1.30.0(zod@4.4.3) + specifier: 1.31.0 + version: 1.31.0(zod@4.4.3) '@sonicfield/masa': specifier: workspace:* version: link:packages/core @@ -80,8 +82,8 @@ importers: mcp: dependencies: '@modelcontextprotocol/sdk': - specifier: 1.30.0 - version: 1.30.0(zod@4.4.3) + specifier: 1.31.0 + version: 1.31.0(zod@4.4.3) '@sonicfield/masa': specifier: workspace:* version: link:../packages/core @@ -352,8 +354,8 @@ packages: '@jsdevtools/ono@7.1.3': resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} - '@modelcontextprotocol/sdk@1.30.0': - resolution: {integrity: sha512-xKd8OIzlqNzcqcNumGAa6g+PW2kjD5vrpcKOnfldAUPP3j7lnqMPwlTXQm8gF+UwH72z0lqaRbjr9hqGz0eITA==} + '@modelcontextprotocol/sdk@1.31.0': + resolution: {integrity: sha512-UvTMgnNlnIBO/22ob2RcVGDlcvOslQs8T59+FTGdA0L27a39fdGF/EDETNtDVK4DZGpwomlsYpRdA8UXcVL/pw==} engines: {node: '>=18'} peerDependencies: '@cfworker/json-schema': ^4.1.1 @@ -1143,8 +1145,8 @@ packages: engines: {node: '>=14'} hasBin: true - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + proxy-addr@2.0.8: + resolution: {integrity: sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==} engines: {node: '>= 0.10'} publint@0.3.23: @@ -1227,8 +1229,8 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + source-map-js@1.2.2: + resolution: {integrity: sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==} engines: {node: '>=0.10.0'} stackback@0.0.2: @@ -1536,7 +1538,7 @@ snapshots: '@jsdevtools/ono@7.1.3': {} - '@modelcontextprotocol/sdk@1.30.0(zod@4.4.3)': + '@modelcontextprotocol/sdk@1.31.0(zod@4.4.3)': dependencies: '@hono/node-server': 2.1.0(hono@4.13.7) ajv: 8.20.0 @@ -1950,7 +1952,7 @@ snapshots: on-finished: 2.4.1 once: 1.4.0 parseurl: 1.3.3 - proxy-addr: 2.0.7 + proxy-addr: 2.0.8 qs: 6.16.0 range-parser: 1.3.0 router: 2.2.0 @@ -2146,7 +2148,7 @@ snapshots: dependencies: '@babel/parser': 7.29.8 '@babel/types': 7.29.8 - source-map-js: 1.2.1 + source-map-js: 1.2.2 make-dir@4.0.0: dependencies: @@ -2212,11 +2214,11 @@ snapshots: dependencies: nanoid: 3.3.18 picocolors: 1.1.1 - source-map-js: 1.2.1 + source-map-js: 1.2.2 prettier@3.9.6: {} - proxy-addr@2.0.7: + proxy-addr@2.0.8: dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 @@ -2346,7 +2348,7 @@ snapshots: siginfo@2.0.0: {} - source-map-js@1.2.1: {} + source-map-js@1.2.2: {} stackback@0.0.2: {} diff --git a/scripts/audit-dependencies.mjs b/scripts/audit-dependencies.mjs index a793119..cba9032 100644 --- a/scripts/audit-dependencies.mjs +++ b/scripts/audit-dependencies.mjs @@ -16,9 +16,9 @@ export function reviewAudit(raw, cliPackage, lock) { const collision = advisory.github_advisory_id === 'GHSA-6cpc-mj5c-m9rq' && advisory.module_name === 'cli' && Array.isArray(findings) && findings.length === 1 - && findings[0].version === '0.2.2' + && findings[0].version === '0.2.3' && JSON.stringify(findings[0].paths) === JSON.stringify(['cli']) - && cliPackage.name === '@sonicfield/masa-cli' && cliPackage.version === '0.2.2' + && cliPackage.name === '@sonicfield/masa-cli' && cliPackage.version === '0.2.3' && !/(?:^|[\s'"/])cli@/m.test(lock); if (collision) excluded.push(advisory.github_advisory_id); else remaining.push(advisory); diff --git a/scripts/audit-dependencies.test.mjs b/scripts/audit-dependencies.test.mjs index b5543d2..591ecb0 100644 --- a/scripts/audit-dependencies.test.mjs +++ b/scripts/audit-dependencies.test.mjs @@ -2,9 +2,9 @@ import { test } from 'node:test'; import assert from 'node:assert/strict'; import { reviewAudit } from './audit-dependencies.mjs'; -const owner = { name: '@sonicfield/masa-cli', version: '0.2.2' }; +const owner = { name: '@sonicfield/masa-cli', version: '0.2.3' }; const advisory = { github_advisory_id: 'GHSA-6cpc-mj5c-m9rq', module_name: 'cli', - findings: [{ version: '0.2.2', paths: ['cli'] }] }; + findings: [{ version: '0.2.3', paths: ['cli'] }] }; const raw = (entry) => ({ advisories: { one: entry } }); test('excludes the exact local importer collision', () => { @@ -13,10 +13,10 @@ test('excludes the exact local importer collision', () => { test('retains real registry packages and changed finding identities', () => { for (const [entry, pkg, lock] of [ - [advisory, owner, 'packages:\n cli@0.2.2:\n'], + [advisory, owner, 'packages:\n cli@0.2.3:\n'], [advisory, { ...owner, name: 'cli' }, ''], - [{ ...advisory, findings: [{ version: '0.2.2', paths: ['cli', 'dependency>cli'] }] }, owner, ''], - [{ ...advisory, findings: [{ version: '0.2.3', paths: ['cli'] }] }, owner, ''], + [{ ...advisory, findings: [{ version: '0.2.3', paths: ['cli', 'dependency>cli'] }] }, owner, ''], + [{ ...advisory, findings: [{ version: '0.2.4', paths: ['cli'] }] }, owner, ''], [{ ...advisory, github_advisory_id: 'GHSA-example' }, owner, ''], ]) assert.equal(reviewAudit(raw(entry), pkg, lock).registry_advisories.length, 1); }); diff --git a/scripts/release-version.ts b/scripts/release-version.ts index 5db26b4..281a735 100644 --- a/scripts/release-version.ts +++ b/scripts/release-version.ts @@ -16,7 +16,7 @@ const PACKAGE_DIRECTORIES = [ * Deterministic timestamp for the current reference-tooling release. Keep it * explicit so generation never depends on the wall clock or developer locale. */ -export const REFERENCE_IMPLEMENTATION_GENERATED_AT = "2026-10-01T02:00:16.890Z"; +export const REFERENCE_IMPLEMENTATION_GENERATED_AT = "2026-10-08T23:47:44.000Z"; /** * Read the reference-tooling release from package metadata and fail generation