From 681d92f94f58c8417be14d926da6c8cb6986ad20 Mon Sep 17 00:00:00 2001 From: Ariel Harlap <3870784+aharlap@users.noreply.github.com> Date: Mon, 19 Oct 2026 14:32:09 -0400 Subject: [PATCH 1/2] Pin the reviewed Check alpha and Trace experimental CLIs Co-Authored-By: GPT-6.1 Sol --- README.md | 22 +++++++++++++--------- pack.json | 22 ++++++++++++---------- test/manifest.test.mjs | 25 ++++++++++++++++++++++++- 3 files changed, 49 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index ba02173..6d2d653 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,12 @@ T3 course actions and skills for T3, Claude Code and Codex CLI. There is no SDK or MCP server. `pack.json` pins every archive by URL and SHA-256. Studio reads grammar 4 courses; convert grammar 3 courses first. -Pack 0.1.1 pins Studio CLI `0.3.0-main.92e21573` and Check -`0.6.0-main.993069cc`. All macOS tool archives download from the `v0.1.1` -Rubato release after publication. +The checked-in manifest pins Studio CLI `0.3.0-main.92e21573`, Check +`0.6.0-alpha.c61b1cb3c` and Trace `0.1.1-experimental.09fcaaf76`. +Check and Trace download from their own alpha and experimental prereleases. +The remaining tool archives come from Rubato `v0.1.1`. +These candidate pins support installation from a reviewed checkout; the published +Rubato `v0.1.1` manifest and stable update channel remain unchanged. The installer supports Apple Silicon and Intel macOS and chooses native arm64 runtimes when launched through Rosetta. Studio has an archive for each architecture. Check, Trace, Print and Import share portable archives across both. @@ -447,12 +450,13 @@ It contains regular files and directories only. The checksum list has one bootstrap, with no duplicate entries for either. Publish all assets together before marking the release latest; update refuses incomplete releases. -All five darwin-arm64 tool archives and Studio's darwin-x64 archive are staged -as assets of this repository's `v0.1.1` release, each with its SHA-256 in -`pack.json`. Download URLs become available when that release is published. -Check, Trace, Print and Import reuse the same archives for Intel macOS. The -Trace and Print asset names retain `darwin-arm64` for compatibility; their -payload inventories declare them portable. Other platform entries stay +The published `v0.1.1` release contains all five darwin-arm64 tool archives and +Studio's darwin-x64 archive. The checked-in `pack.json` replaces its Check and +Trace pins with commit-qualified portable CLI prereleases from their owning +repositories, recording each full source revision and archive SHA-256. +Check, Trace, Print and Import reuse the same archives for Intel macOS. +Print's asset name retains `darwin-arm64` for compatibility; its payload +inventory declares it portable. Other platform entries stay `unpublished`, with the reason recorded beside each. Published pack manifests retain their original archive URLs. GitHub redirects diff --git a/pack.json b/pack.json index 6f057d6..aafc8f0 100644 --- a/pack.json +++ b/pack.json @@ -127,7 +127,8 @@ }, { "id": "check", - "version": "0.6.0-main.993069cc", + "version": "0.6.0-alpha.c61b1cb3c", + "sourceRevision": "c61b1cb3ce3a4e7afb0a44f3dd70e82a52c1154d", "entry": "lib/cli.js", "runner": "node", "setup": [ @@ -143,15 +144,15 @@ "archives": { "darwin-arm64": { "status": "published", - "url": "https://github.com/Praxity/praxity-toolkit/releases/download/v0.1.1/praxity-check-0.6.0-main.993069cc-portable.tar.gz", - "sha256": "80e4631abdd5f3514bbb748c8ad6b00e4de080d10375df239a3bd16e0040383b", + "url": "https://github.com/Praxity/praxity-check/releases/download/v0.6.0-alpha.c61b1cb3c/praxity-check-0.6.0-alpha.c61b1cb3c-portable.tar.gz", + "sha256": "77fd9a2c8d9cdf1041341eef6b0bc564c0e560279b3bc520d95ec23fc42f79eb", "format": "tar.gz", "stripComponents": 1 }, "darwin-x64": { "status": "published", - "url": "https://github.com/Praxity/praxity-toolkit/releases/download/v0.1.1/praxity-check-0.6.0-main.993069cc-portable.tar.gz", - "sha256": "80e4631abdd5f3514bbb748c8ad6b00e4de080d10375df239a3bd16e0040383b", + "url": "https://github.com/Praxity/praxity-check/releases/download/v0.6.0-alpha.c61b1cb3c/praxity-check-0.6.0-alpha.c61b1cb3c-portable.tar.gz", + "sha256": "77fd9a2c8d9cdf1041341eef6b0bc564c0e560279b3bc520d95ec23fc42f79eb", "format": "tar.gz", "stripComponents": 1 }, @@ -167,7 +168,8 @@ }, { "id": "trace", - "version": "0.1.1", + "version": "0.1.1-experimental.09fcaaf76", + "sourceRevision": "09fcaaf76841175d150210ec29c66d7ebab05cc3", "entry": "src/cli.ts", "runner": "node", "license": "PolyForm Perimeter 1.0.1", @@ -176,15 +178,15 @@ "archives": { "darwin-arm64": { "status": "published", - "url": "https://github.com/Praxity/praxity-toolkit/releases/download/v0.1.1/praxity-trace-0.1.1-darwin-arm64.tar.gz", - "sha256": "52bc5aa82d29892e5570fdb88ec65bd29c728b29b890c9b7aba49bf3f48c5dbb", + "url": "https://github.com/Praxity/praxity-trace/releases/download/v0.1.1-experimental.09fcaaf76/praxity-trace-0.1.1-experimental.09fcaaf76-portable.tar.gz", + "sha256": "d5f8ef48f9277505996888322e11aa9f019d890e5f2a2052f590728925710265", "format": "tar.gz", "stripComponents": 1 }, "darwin-x64": { "status": "published", - "url": "https://github.com/Praxity/praxity-toolkit/releases/download/v0.1.1/praxity-trace-0.1.1-darwin-arm64.tar.gz", - "sha256": "52bc5aa82d29892e5570fdb88ec65bd29c728b29b890c9b7aba49bf3f48c5dbb", + "url": "https://github.com/Praxity/praxity-trace/releases/download/v0.1.1-experimental.09fcaaf76/praxity-trace-0.1.1-experimental.09fcaaf76-portable.tar.gz", + "sha256": "d5f8ef48f9277505996888322e11aa9f019d890e5f2a2052f590728925710265", "format": "tar.gz", "stripComponents": 1 }, diff --git a/test/manifest.test.mjs b/test/manifest.test.mjs index 8b92dcb..126c005 100644 --- a/test/manifest.test.mjs +++ b/test/manifest.test.mjs @@ -33,15 +33,38 @@ test('real pack validates and every published archive has a complete contract', } }); -test('real pack preserves every published tool archive URL from v0.1.1', () => { +test('real pack preserves the unchanged tool archive URLs from v0.1.1', () => { const pack = realPack(); const prefix = `https://github.com/Praxity/praxity-toolkit/releases/download/v${pack.version}/`; for (const tool of pack.tools) { + if (['check', 'trace'].includes(tool.id)) continue; for (const archive of Object.values(tool.archives)) { if (archive.status === 'published') assert.ok(archive.url.startsWith(prefix), tool.id); } } }); + +test('macOS installation plans select the reviewed Check and Trace prereleases', () => { + const pack = realPack(); + const candidates = [ + { id: 'check', version: '0.6.0-alpha.c61b1cb3c', revision: 'c61b1cb3ce3a4e7afb0a44f3dd70e82a52c1154d', + url: 'https://github.com/Praxity/praxity-check/releases/download/v0.6.0-alpha.c61b1cb3c/praxity-check-0.6.0-alpha.c61b1cb3c-portable.tar.gz' }, + { id: 'trace', version: '0.1.1-experimental.09fcaaf76', revision: '09fcaaf76841175d150210ec29c66d7ebab05cc3', + url: 'https://github.com/Praxity/praxity-trace/releases/download/v0.1.1-experimental.09fcaaf76/praxity-trace-0.1.1-experimental.09fcaaf76-portable.tar.gz' }, + ]; + for (const candidate of candidates) { + const tool = pack.tools.find(tool => tool.id === candidate.id); + assert.equal(tool.version, candidate.version); + assert.equal(tool.sourceRevision, candidate.revision); + for (const platform of ['darwin-arm64', 'darwin-x64']) { + const archive = installationPlan(pack, platform).find(entry => entry.id === candidate.id); + assert.equal(archive.url, candidate.url); + assert.equal(archive.format, 'tar.gz'); + assert.equal(archive.stripComponents, 1); + } + } +}); + test('unpublished fixture tools are omitted from the installation plan', () => { const pack = examplePack(); assert.deepEqual(validateManifest(pack), []); From aed15e1a09e978dd503b0377d130a3e422a0a5ae Mon Sep 17 00:00:00 2001 From: Ariel Harlap <3870784+aharlap@users.noreply.github.com> Date: Mon, 19 Oct 2026 15:17:16 -0400 Subject: [PATCH 2/2] Host the reviewed CLI pins on Rubato experimental assets Co-Authored-By: GPT-6.1 Sol --- README.md | 10 +++++++--- pack.json | 8 ++++---- test/manifest.test.mjs | 4 ++-- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 6d2d653..9a7834a 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,9 @@ or MCP server. `pack.json` pins every archive by URL and SHA-256. Studio reads grammar 4 courses; convert grammar 3 courses first. The checked-in manifest pins Studio CLI `0.3.0-main.92e21573`, Check `0.6.0-alpha.c61b1cb3c` and Trace `0.1.1-experimental.09fcaaf76`. -Check and Trace download from their own alpha and experimental prereleases. +Check and Trace download from Rubato's asset-only experimental prerelease +`v0.1.1-tools.experimental.20261019`. It hosts the verified CLI archives without +a pack manifest or installer bootstrap. The remaining tool archives come from Rubato `v0.1.1`. These candidate pins support installation from a reviewed checkout; the published Rubato `v0.1.1` manifest and stable update channel remain unchanged. @@ -452,8 +454,10 @@ before marking the release latest; update refuses incomplete releases. The published `v0.1.1` release contains all five darwin-arm64 tool archives and Studio's darwin-x64 archive. The checked-in `pack.json` replaces its Check and -Trace pins with commit-qualified portable CLI prereleases from their owning -repositories, recording each full source revision and archive SHA-256. +Trace pins with commit-qualified portable CLI archives hosted on Rubato's +asset-only experimental prerelease, recording each full source revision and +archive SHA-256. These are byte-for-byte copies of the owning tools' prereleases. +The asset-only release does not update the stable channel or publish a pack. Check, Trace, Print and Import reuse the same archives for Intel macOS. Print's asset name retains `darwin-arm64` for compatibility; its payload inventory declares it portable. Other platform entries stay diff --git a/pack.json b/pack.json index aafc8f0..ed94a9a 100644 --- a/pack.json +++ b/pack.json @@ -144,14 +144,14 @@ "archives": { "darwin-arm64": { "status": "published", - "url": "https://github.com/Praxity/praxity-check/releases/download/v0.6.0-alpha.c61b1cb3c/praxity-check-0.6.0-alpha.c61b1cb3c-portable.tar.gz", + "url": "https://github.com/Praxity/rubato/releases/download/v0.1.1-tools.experimental.20261019/praxity-check-0.6.0-alpha.c61b1cb3c-portable.tar.gz", "sha256": "77fd9a2c8d9cdf1041341eef6b0bc564c0e560279b3bc520d95ec23fc42f79eb", "format": "tar.gz", "stripComponents": 1 }, "darwin-x64": { "status": "published", - "url": "https://github.com/Praxity/praxity-check/releases/download/v0.6.0-alpha.c61b1cb3c/praxity-check-0.6.0-alpha.c61b1cb3c-portable.tar.gz", + "url": "https://github.com/Praxity/rubato/releases/download/v0.1.1-tools.experimental.20261019/praxity-check-0.6.0-alpha.c61b1cb3c-portable.tar.gz", "sha256": "77fd9a2c8d9cdf1041341eef6b0bc564c0e560279b3bc520d95ec23fc42f79eb", "format": "tar.gz", "stripComponents": 1 @@ -178,14 +178,14 @@ "archives": { "darwin-arm64": { "status": "published", - "url": "https://github.com/Praxity/praxity-trace/releases/download/v0.1.1-experimental.09fcaaf76/praxity-trace-0.1.1-experimental.09fcaaf76-portable.tar.gz", + "url": "https://github.com/Praxity/rubato/releases/download/v0.1.1-tools.experimental.20261019/praxity-trace-0.1.1-experimental.09fcaaf76-portable.tar.gz", "sha256": "d5f8ef48f9277505996888322e11aa9f019d890e5f2a2052f590728925710265", "format": "tar.gz", "stripComponents": 1 }, "darwin-x64": { "status": "published", - "url": "https://github.com/Praxity/praxity-trace/releases/download/v0.1.1-experimental.09fcaaf76/praxity-trace-0.1.1-experimental.09fcaaf76-portable.tar.gz", + "url": "https://github.com/Praxity/rubato/releases/download/v0.1.1-tools.experimental.20261019/praxity-trace-0.1.1-experimental.09fcaaf76-portable.tar.gz", "sha256": "d5f8ef48f9277505996888322e11aa9f019d890e5f2a2052f590728925710265", "format": "tar.gz", "stripComponents": 1 diff --git a/test/manifest.test.mjs b/test/manifest.test.mjs index 126c005..825fb79 100644 --- a/test/manifest.test.mjs +++ b/test/manifest.test.mjs @@ -48,9 +48,9 @@ test('macOS installation plans select the reviewed Check and Trace prereleases', const pack = realPack(); const candidates = [ { id: 'check', version: '0.6.0-alpha.c61b1cb3c', revision: 'c61b1cb3ce3a4e7afb0a44f3dd70e82a52c1154d', - url: 'https://github.com/Praxity/praxity-check/releases/download/v0.6.0-alpha.c61b1cb3c/praxity-check-0.6.0-alpha.c61b1cb3c-portable.tar.gz' }, + url: 'https://github.com/Praxity/rubato/releases/download/v0.1.1-tools.experimental.20261019/praxity-check-0.6.0-alpha.c61b1cb3c-portable.tar.gz' }, { id: 'trace', version: '0.1.1-experimental.09fcaaf76', revision: '09fcaaf76841175d150210ec29c66d7ebab05cc3', - url: 'https://github.com/Praxity/praxity-trace/releases/download/v0.1.1-experimental.09fcaaf76/praxity-trace-0.1.1-experimental.09fcaaf76-portable.tar.gz' }, + url: 'https://github.com/Praxity/rubato/releases/download/v0.1.1-tools.experimental.20261019/praxity-trace-0.1.1-experimental.09fcaaf76-portable.tar.gz' }, ]; for (const candidate of candidates) { const tool = pack.tools.find(tool => tool.id === candidate.id);