From dc19de44b1fe8dfe8442d11014ed11d05eb8e40f Mon Sep 17 00:00:00 2001 From: callumalpass Date: Sun, 2 Aug 2026 19:29:45 +1000 Subject: [PATCH] fix: generate string manual-order ranks --- package-lock.json | 4 ++-- package.json | 2 +- src/generated/tasknotes-data-contract.ts | 6 +++--- src/mdbase.ts | 2 +- src/types.ts | 2 +- test/mdbase.test.mjs | 11 +++++++---- 6 files changed, 15 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4770cce..091bde7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@tasknotes/model", - "version": "0.3.0-rc.8", + "version": "0.3.0-rc.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@tasknotes/model", - "version": "0.3.0-rc.8", + "version": "0.3.0-rc.9", "license": "MIT", "dependencies": { "rrule": "^2.8.1", diff --git a/package.json b/package.json index 033e159..195188c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@tasknotes/model", - "version": "0.3.0-rc.8", + "version": "0.3.0-rc.9", "description": "TaskNotes model, mapping, validation, recurrence, and operation-planning reference implementation.", "license": "MIT", "type": "module", diff --git a/src/generated/tasknotes-data-contract.ts b/src/generated/tasknotes-data-contract.ts index f57be13..5bbd47e 100644 --- a/src/generated/tasknotes-data-contract.ts +++ b/src/generated/tasknotes-data-contract.ts @@ -5,7 +5,7 @@ export const TASKNOTES_TASK_SCHEMA = { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://tasknotes.dev/schemas/tasknotes-task.schema.json", "title": "TaskNotes portable task view", - "description": "The storage-neutral record view exposed by the tasknotes.task 0.3.0-rc.2 record contract.", + "description": "The storage-neutral record view exposed by the tasknotes.task 0.3.0-rc.3 record contract.", "type": "object", "required": [ "status", @@ -189,7 +189,7 @@ export const TASKNOTES_TASK_SCHEMA = { } }, "sortOrder": { - "type": "number" + "type": "string" } } } as const; @@ -198,7 +198,7 @@ export const TASKNOTES_TASK_BINDING_SCHEMA = { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://tasknotes.dev/schemas/tasknotes-task-binding.schema.json", "title": "TaskNotes task data-contract binding", - "description": "Semantic configuration supplied by an mdbase type that implements tasknotes.task 0.3.0-rc.2.", + "description": "Semantic configuration supplied by an mdbase type that implements tasknotes.task 0.3.0-rc.3.", "type": "object", "required": [ "profiles", diff --git a/src/mdbase.ts b/src/mdbase.ts index 023b894..0d48628 100644 --- a/src/mdbase.ts +++ b/src/mdbase.ts @@ -578,7 +578,7 @@ export function buildTaskNotesMdbaseResources( mapping.googleCalendarMovedOriginalDates, arraySchema(dateSchema(legacyCompatibility), legacyCompatibility) ); - addField("sortOrder", mapping.sortOrder, numberSchema({}, legacyCompatibility)); + addField("sortOrder", mapping.sortOrder, stringSchema({}, legacyCompatibility)); for (const userField of modelConfig.userFields) { properties[userField.key] = userFieldSchema(userField, legacyCompatibility); diff --git a/src/types.ts b/src/types.ts index f7f6979..01e5d18 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -export const TASKNOTES_SPEC_VERSION = "0.3.0-rc.2"; +export const TASKNOTES_SPEC_VERSION = "0.3.0-rc.3"; export type JsonPrimitive = string | number | boolean | null; export type JsonValue = JsonPrimitive | JsonObject | JsonValue[]; diff --git a/test/mdbase.test.mjs b/test/mdbase.test.mjs index c89d91a..f641bb9 100644 --- a/test/mdbase.test.mjs +++ b/test/mdbase.test.mjs @@ -11,7 +11,7 @@ import { function implementation(type) { return type.implements.find( (entry) => - entry.contract === "tasknotes.task" && entry.version === "0.3.0-rc.2" + entry.contract === "tasknotes.task" && entry.version === "0.3.0-rc.3" ); } @@ -30,10 +30,10 @@ test("builds one canonical TaskNotes and mdbase collection contract", () => { assert.equal(resources.config.settings.contracts_folder, "_contracts"); assert.equal(resources.contract.id, "tasknotes.task"); assert.equal(resources.contract.contract_type, "record"); - assert.equal(resources.contract.version, "0.3.0-rc.2"); + assert.equal(resources.contract.version, "0.3.0-rc.3"); assert.ok(resources.contract.record_schema); assert.equal(taskImplementation.contract, "tasknotes.task"); - assert.equal(taskImplementation.version, "0.3.0-rc.2"); + assert.equal(taskImplementation.version, "0.3.0-rc.3"); assert.deepEqual(extension.profiles, [ "core-lite", "recurrence", @@ -59,6 +59,9 @@ test("builds one canonical TaskNotes and mdbase collection contract", () => { items: { type: "string", minLength: 1 }, uniqueItems: true, }); + assert.deepEqual(schema.properties[taskImplementation.fields.sortOrder], { + type: "string", + }); assert.deepEqual(type.collection.links["attachments[]"], { validate_exists: false, }); @@ -97,7 +100,7 @@ test("packages the contract, implementation, and schemas as one digest-pinned ty const pack = await buildTaskNotesMdbaseTypePack(resources); assert.deepEqual(pack.provides, [ - { id: "tasknotes.task", version: "0.3.0-rc.2" }, + { id: "tasknotes.task", version: "0.3.0-rc.3" }, ]); assert.equal(pack.manifest.kind, "mdbase.type-pack"); assert.equal(pack.manifest.id, "tasknotes.task");