From d2d73fb7bf9e4f92350eeca3e51ec53cdf8d45a1 Mon Sep 17 00:00:00 2001 From: callumalpass Date: Tue, 29 Sep 2026 08:01:59 +1000 Subject: [PATCH] Add the obsidian.base pack for Bases stored as records --- contracts/obsidian.base/1.0.0.md | 36 +++++++++++++ .../contracts/obsidian.base/1.0.0.md | 36 +++++++++++++ dist/artifacts/types/obsidian-base/1.md | 51 +++++++++++++++++++ dist/catalog.json | 47 +++++++++++++++++ dist/packs/obsidian.base/1.0.0.json | 42 +++++++++++++++ packs/obsidian.base/1.0.0.pack.yaml | 29 +++++++++++ types/obsidian-base/1.md | 51 +++++++++++++++++++ 7 files changed, 292 insertions(+) create mode 100644 contracts/obsidian.base/1.0.0.md create mode 100644 dist/artifacts/contracts/obsidian.base/1.0.0.md create mode 100644 dist/artifacts/types/obsidian-base/1.md create mode 100644 dist/packs/obsidian.base/1.0.0.json create mode 100644 packs/obsidian.base/1.0.0.pack.yaml create mode 100644 types/obsidian-base/1.md diff --git a/contracts/obsidian.base/1.0.0.md b/contracts/obsidian.base/1.0.0.md new file mode 100644 index 0000000..29fd74e --- /dev/null +++ b/contracts/obsidian.base/1.0.0.md @@ -0,0 +1,36 @@ +--- +kind: mdbase.contract +contract_type: record +id: obsidian.base +version: 1.0.0 +name: Obsidian Base +description: An Obsidian Bases saved-view source stored as a YAML document record. +record_schema: + dialect: json-schema-2020-12 + value: + $schema: https://json-schema.org/draft/2020-12/schema + type: object + required: [views] + properties: + filters: {} + formulas: { type: object } + properties: { type: object } + views: + type: array + minItems: 1 + items: { type: object, required: [type], properties: { type: { type: string }, name: { type: string } } } +--- + +# Obsidian Base + +A record exposed through `obsidian.base` is an Obsidian Bases source: global +filters, formulas, property metadata, and one or more views. The schema is +deliberately permissive. Obsidian owns the format and adds keys over time; +unknown keys are preserved and ignored. + +Tools that advertise `obsidian_bases_views` discover and execute these records +through this contract and evaluate them with the Obsidian Bases expression +dialect described in the [Obsidian Bases adapter](https://mdbase.dev/spec/adapters/obsidian-bases). + +This artifact is passive. Implementing it grants no authority to read, execute, +or modify any record. diff --git a/dist/artifacts/contracts/obsidian.base/1.0.0.md b/dist/artifacts/contracts/obsidian.base/1.0.0.md new file mode 100644 index 0000000..29fd74e --- /dev/null +++ b/dist/artifacts/contracts/obsidian.base/1.0.0.md @@ -0,0 +1,36 @@ +--- +kind: mdbase.contract +contract_type: record +id: obsidian.base +version: 1.0.0 +name: Obsidian Base +description: An Obsidian Bases saved-view source stored as a YAML document record. +record_schema: + dialect: json-schema-2020-12 + value: + $schema: https://json-schema.org/draft/2020-12/schema + type: object + required: [views] + properties: + filters: {} + formulas: { type: object } + properties: { type: object } + views: + type: array + minItems: 1 + items: { type: object, required: [type], properties: { type: { type: string }, name: { type: string } } } +--- + +# Obsidian Base + +A record exposed through `obsidian.base` is an Obsidian Bases source: global +filters, formulas, property metadata, and one or more views. The schema is +deliberately permissive. Obsidian owns the format and adds keys over time; +unknown keys are preserved and ignored. + +Tools that advertise `obsidian_bases_views` discover and execute these records +through this contract and evaluate them with the Obsidian Bases expression +dialect described in the [Obsidian Bases adapter](https://mdbase.dev/spec/adapters/obsidian-bases). + +This artifact is passive. Implementing it grants no authority to read, execute, +or modify any record. diff --git a/dist/artifacts/types/obsidian-base/1.md b/dist/artifacts/types/obsidian-base/1.md new file mode 100644 index 0000000..5f11af6 --- /dev/null +++ b/dist/artifacts/types/obsidian-base/1.md @@ -0,0 +1,51 @@ +--- +kind: mdbase.type +name: obsidian_base +version: 1 +description: Obsidian Bases saved views stored as records +match: + path_glob: '**/*.base' +schema: + dialect: json-schema-2020-12 + value: + $schema: https://json-schema.org/draft/2020-12/schema + title: Obsidian Base + description: An Obsidian Bases file. Obsidian owns the format; unknown keys are kept. + type: object + required: + - views + properties: + filters: {} + formulas: + type: object + properties: + type: object + views: + type: array + minItems: 1 + items: + type: object + required: + - type + properties: + type: + type: string + name: + type: string +implements: + - contract: obsidian.base + version: 1.0.0 + fields: + filters: filters + formulas: formulas + properties: properties + views: views +--- + +# Obsidian Base + +Makes `.base` files discoverable as saved views through the `obsidian.base` +contract. It takes effect when the collection lists `base` in +`settings.record_extensions`; narrow the `path_glob` to the folders that hold +your Bases. Edit Bases with whole-document replacement so Obsidian's comments +and layout survive. diff --git a/dist/catalog.json b/dist/catalog.json index 3506bc7..8c6e714 100644 --- a/dist/catalog.json +++ b/dist/catalog.json @@ -209,6 +209,16 @@ "artifact": "./artifacts/contracts/mdbase.view/1.0.0.md", "standards": [] }, + { + "id": "obsidian.base", + "version": "1.0.0", + "name": "Obsidian Base", + "description": "An Obsidian Bases saved-view source stored as a YAML document record.", + "contract_type": "record", + "digest": "sha256:fca77a9c845223784d4af7f5e13e2f149295621ad1b794ea9bb4d99f604467e8", + "artifact": "./artifacts/contracts/obsidian.base/1.0.0.md", + "standards": [] + }, { "id": "tasknotes.task", "version": "0.3.0-rc.3", @@ -512,6 +522,43 @@ ] } }, + { + "id": "obsidian.base", + "version": "1.0.0", + "name": "Obsidian Bases", + "description": "The obsidian.base contract and an editable type that stores Obsidian Bases as records.", + "digest": "sha256:8251b351a4b00c4ea3f4d49988ae45ab52ceaf2420f57ce8105ca4cfe5eafd50", + "provision": "./packs/obsidian.base/1.0.0.json", + "provides": [ + { + "id": "obsidian.base", + "version": "1.0.0", + "digest": "sha256:37e8a0bfb32bb4795c1b3c5dec613c32429aaa765dc33e4adc0c627a48f5c1ff" + } + ], + "resource_count": 2, + "display": { + "name": "Obsidian Bases", + "summary": "Use Obsidian Bases files as saved views that any view-aware app can list and run.", + "category": "work", + "audience": "general", + "icon": "table", + "badges": [ + "Obsidian compatible" + ] + }, + "installation": { + "visibility": "default", + "recommendation": "optional", + "primary_type": "obsidian_base", + "types": [ + { + "name": "obsidian_base", + "label": "Obsidian base" + } + ] + } + }, { "id": "tasknotes.task", "version": "0.3.0-rc.12", diff --git a/dist/packs/obsidian.base/1.0.0.json b/dist/packs/obsidian.base/1.0.0.json new file mode 100644 index 0000000..d2648ab --- /dev/null +++ b/dist/packs/obsidian.base/1.0.0.json @@ -0,0 +1,42 @@ +{ + "manifest": { + "kind": "mdbase.type-pack", + "id": "obsidian.base", + "version": "1.0.0", + "name": "Obsidian Bases", + "description": "The obsidian.base contract and an editable type that stores Obsidian Bases as records.", + "resources": [ + { + "kind": "contract", + "mode": "managed", + "source": "contracts/obsidian.base/1.0.0.md", + "target": "_contracts/obsidian.base/1.0.0.md", + "digest": "sha256:fca77a9c845223784d4af7f5e13e2f149295621ad1b794ea9bb4d99f604467e8" + }, + { + "kind": "type", + "mode": "seed", + "source": "types/obsidian-base/1.md", + "target": "_types/obsidian_base.md", + "digest": "sha256:bfeb3880200bc1bef7fd50b777d3f927ce931d08b4fb3c30d4cddb55feaf3f92" + } + ] + }, + "resources": [ + { + "source": "contracts/obsidian.base/1.0.0.md", + "document": "---\nkind: mdbase.contract\ncontract_type: record\nid: obsidian.base\nversion: 1.0.0\nname: Obsidian Base\ndescription: An Obsidian Bases saved-view source stored as a YAML document record.\nrecord_schema:\n dialect: json-schema-2020-12\n value:\n $schema: https://json-schema.org/draft/2020-12/schema\n type: object\n required: [views]\n properties:\n filters: {}\n formulas: { type: object }\n properties: { type: object }\n views:\n type: array\n minItems: 1\n items: { type: object, required: [type], properties: { type: { type: string }, name: { type: string } } }\n---\n\n# Obsidian Base\n\nA record exposed through `obsidian.base` is an Obsidian Bases source: global\nfilters, formulas, property metadata, and one or more views. The schema is\ndeliberately permissive. Obsidian owns the format and adds keys over time;\nunknown keys are preserved and ignored.\n\nTools that advertise `obsidian_bases_views` discover and execute these records\nthrough this contract and evaluate them with the Obsidian Bases expression\ndialect described in the [Obsidian Bases adapter](https://mdbase.dev/spec/adapters/obsidian-bases).\n\nThis artifact is passive. Implementing it grants no authority to read, execute,\nor modify any record.\n" + }, + { + "source": "types/obsidian-base/1.md", + "document": "---\nkind: mdbase.type\nname: obsidian_base\nversion: 1\ndescription: Obsidian Bases saved views stored as records\nmatch:\n path_glob: '**/*.base'\nschema:\n dialect: json-schema-2020-12\n value:\n $schema: https://json-schema.org/draft/2020-12/schema\n title: Obsidian Base\n description: An Obsidian Bases file. Obsidian owns the format; unknown keys are kept.\n type: object\n required:\n - views\n properties:\n filters: {}\n formulas:\n type: object\n properties:\n type: object\n views:\n type: array\n minItems: 1\n items:\n type: object\n required:\n - type\n properties:\n type:\n type: string\n name:\n type: string\nimplements:\n - contract: obsidian.base\n version: 1.0.0\n fields:\n filters: filters\n formulas: formulas\n properties: properties\n views: views\n---\n\n# Obsidian Base\n\nMakes `.base` files discoverable as saved views through the `obsidian.base`\ncontract. It takes effect when the collection lists `base` in\n`settings.record_extensions`; narrow the `path_glob` to the folders that hold\nyour Bases. Edit Bases with whole-document replacement so Obsidian's comments\nand layout survive.\n" + } + ], + "provides": [ + { + "id": "obsidian.base", + "version": "1.0.0", + "digest": "sha256:37e8a0bfb32bb4795c1b3c5dec613c32429aaa765dc33e4adc0c627a48f5c1ff" + } + ] +} diff --git a/packs/obsidian.base/1.0.0.pack.yaml b/packs/obsidian.base/1.0.0.pack.yaml new file mode 100644 index 0000000..1cfdc26 --- /dev/null +++ b/packs/obsidian.base/1.0.0.pack.yaml @@ -0,0 +1,29 @@ +kind: mdbase.catalog-pack +id: obsidian.base +version: 1.0.0 +name: Obsidian Bases +description: The obsidian.base contract and an editable type that stores Obsidian Bases as records. +display: + name: Obsidian Bases + summary: Use Obsidian Bases files as saved views that any view-aware app can list and run. + category: work + audience: general + icon: table + badges: + - Obsidian compatible +installation: + visibility: default + recommendation: optional + primary_type: obsidian_base +provides: + - id: obsidian.base + version: 1.0.0 +resources: + - kind: contract + mode: managed + source: contracts/obsidian.base/1.0.0.md + target: _contracts/obsidian.base/1.0.0.md + - kind: type + mode: seed + source: types/obsidian-base/1.md + target: _types/obsidian_base.md diff --git a/types/obsidian-base/1.md b/types/obsidian-base/1.md new file mode 100644 index 0000000..5f11af6 --- /dev/null +++ b/types/obsidian-base/1.md @@ -0,0 +1,51 @@ +--- +kind: mdbase.type +name: obsidian_base +version: 1 +description: Obsidian Bases saved views stored as records +match: + path_glob: '**/*.base' +schema: + dialect: json-schema-2020-12 + value: + $schema: https://json-schema.org/draft/2020-12/schema + title: Obsidian Base + description: An Obsidian Bases file. Obsidian owns the format; unknown keys are kept. + type: object + required: + - views + properties: + filters: {} + formulas: + type: object + properties: + type: object + views: + type: array + minItems: 1 + items: + type: object + required: + - type + properties: + type: + type: string + name: + type: string +implements: + - contract: obsidian.base + version: 1.0.0 + fields: + filters: filters + formulas: formulas + properties: properties + views: views +--- + +# Obsidian Base + +Makes `.base` files discoverable as saved views through the `obsidian.base` +contract. It takes effect when the collection lists `base` in +`settings.record_extensions`; narrow the `path_glob` to the folders that hold +your Bases. Edit Bases with whole-document replacement so Obsidian's comments +and layout survive.