Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 17 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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
Expand Down
22 changes: 12 additions & 10 deletions pack.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": [
Expand All @@ -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
},
Expand All @@ -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",
Expand All @@ -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
},
Expand Down
25 changes: 24 additions & 1 deletion test/manifest.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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), []);
Expand Down
Loading