diff --git a/README.md b/README.md index ba02173..9a7834a 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,14 @@ 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 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. 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 +452,15 @@ 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 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 `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..ed94a9a 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/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-toolkit/releases/download/v0.1.1/praxity-check-0.6.0-main.993069cc-portable.tar.gz", - "sha256": "80e4631abdd5f3514bbb748c8ad6b00e4de080d10375df239a3bd16e0040383b", + "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 }, @@ -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/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-toolkit/releases/download/v0.1.1/praxity-trace-0.1.1-darwin-arm64.tar.gz", - "sha256": "52bc5aa82d29892e5570fdb88ec65bd29c728b29b890c9b7aba49bf3f48c5dbb", + "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 8b92dcb..825fb79 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/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/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); + 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), []);