@tera-system/pro 0.2.12 → 0.2.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/MANIFEST.json +7 -7
- package/README.md +2 -2
- package/RELEASES.md +29 -0
- package/package.json +6 -2
- package/scripts/lib/license-gate.mjs +2 -2
- package/scripts/tera-sync.mjs +12 -0
package/MANIFEST.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tera-system/pro",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.14",
|
|
4
4
|
"description": "Build manifest for the Tera System Pro commercial plugin component (THIN mode — content served from teranoo.com signed bundle).",
|
|
5
5
|
"compatibleEnvironments": [
|
|
6
6
|
"opencode"
|
|
@@ -15,13 +15,13 @@
|
|
|
15
15
|
"projectControlTemplates": 1,
|
|
16
16
|
"assets": 49
|
|
17
17
|
},
|
|
18
|
-
"bundleRef": "core-bundle-v0.2.
|
|
19
|
-
"builtAt": "2026-08-
|
|
18
|
+
"bundleRef": "core-bundle-v0.2.14.signed.json (SHA256 CF02CA7939BE55DC73B71212B53F73D6CF4CB434C4F580613BFFF3448CBA23E9)",
|
|
19
|
+
"builtAt": "2026-08-30",
|
|
20
20
|
"sha256": {
|
|
21
|
-
"agents": "
|
|
22
|
-
"commands": "
|
|
23
|
-
"core/tera-system": "
|
|
24
|
-
"tools": "
|
|
21
|
+
"agents": "259904c525641511d80751a66926ca92d45eddea66adbaea2147c78807223adf",
|
|
22
|
+
"commands": "c541b6664c067fac5fb85d280448159b9854cf203ecb4112153a621edb94aa90",
|
|
23
|
+
"core/tera-system": "68a2b5536a4b76a367ecfe0cad2fbd07b17d54d9c3deee0b2ea339a9749c54e3",
|
|
24
|
+
"tools": "86ec41d886f42ae0faf0ee341abf73ab6abd29380c59246dedc47bcdbb1e7358",
|
|
25
25
|
"core/project-control": "cb979181d50e54c9b9b9173ffc890ca021bfaefe9678b1cad4a2f67ceac3dfdd"
|
|
26
26
|
}
|
|
27
27
|
}
|
package/README.md
CHANGED
|
@@ -38,8 +38,8 @@ node scripts/install.js --target /path/to/workspace
|
|
|
38
38
|
ط¨ط¹ط¯ ط§ظ„طھط«ط¨ظٹطھطŒ ظپط¹ظ‘ظ„ ط§ظ„ظ…ظپطھط§ط:
|
|
39
39
|
|
|
40
40
|
```bash
|
|
41
|
-
TERA_LICENSE_KEY=your-key
|
|
42
|
-
|
|
41
|
+
TERA_LICENSE_KEY=your-key npx tera-license # ط£ظˆ
|
|
42
|
+
npx tera-sync
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
ط§ظ„طھطظ‚ظ‚ ظٹط¹ظ…ظ„ ط¹ط¨ط±: API ط§ظ„ط³ظٹط±ظپط± → fallback ط£ظˆظپظ„ط§ظٹظ† (Ed25519) → ظ†ط¨ط¶ ظ‚ظ„ط¨ ظƒظ„ 3 ط£ظٹط§ظ….
|
package/RELEASES.md
CHANGED
|
@@ -4,8 +4,37 @@
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## 0.2.14 (2026-08-30)
|
|
7
8
|
|
|
9
|
+
### Buyable tool access: bin entries + npx commands + sync integrity fix (SCP-2026-08-30-004)
|
|
8
10
|
|
|
11
|
+
**What changed:**
|
|
12
|
+
- **package.json `bin` entries added** — `tera-license`, `tera-sync`, `tera-heartbeat`, `tera-preflight` are now real commands. Buyers run `npx tera-sync`, `npx tera-preflight`, `npx tera-license activate <key>` from their workspace root. Previously `npx` failed (E404 — not a bin) and `npm run` failed ("Missing script" — scripts live in the package, not the project root).
|
|
13
|
+
- **tera-sync.mjs: integrity refresh after apply** — after applying the bundle, the integrity manifest is recreated. Previously a sync that changed bundle content left the install-time snapshot stale → preflight reported "modified files" → license gate BLOCKED. This would have broken existing buyers after a bundle update.
|
|
14
|
+
- **license-gate.mjs runtime message** — activation instruction now `npx tera-license activate <key>` (was `npm run tera-license -- activate <key>`, which fails from the buyer's project root).
|
|
15
|
+
- **TERA_LICENSE_GUARD.md** — same `npx` instruction in the Unlicensed block + preflight verification via `npx tera-preflight`.
|
|
16
|
+
- **README.md** — activation commands use `npx`.
|
|
17
|
+
|
|
18
|
+
**Why:**
|
|
19
|
+
- First real buyer trial proved neither `npx` (E404) nor `npm run` (Missing script) reached the package tools — the entry door to the system was broken for every buyer.
|
|
20
|
+
- Bundle content changed (guard text) — this release ships the updated signed bundle `core-bundle-v0.2.14.signed.json` (200 files, contentSha256 cf165c6cb0bc1af0b55c968ae0c493a415ca52a92712b731dc61a5f2a324dfa2) to the server.
|
|
21
|
+
|
|
22
|
+
**Deployment order (corrected):** publish npm `0.2.14` FIRST, then update the server bundle. npm-first ensures existing buyers already have the integrity-refresh fix in tera-sync before the bundle content changes; server-first would cause a temporary "modified files" scare for existing buyers running sync with old scripts.
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
## 0.2.13 (2026-08-30)
|
|
29
|
+
|
|
30
|
+
### Revocation speed: periodic recheck 30d -> 3d (SCP-2026-08-30-002)
|
|
31
|
+
|
|
32
|
+
**What changed (scripts only):**
|
|
33
|
+
- license-gate.mjs: RECHECK_INTERVAL_DAYS 30 -> 3 - an active client now contacts the license server at least every 3 days, so a server-side revocation is detected within <=3 days of usage (instead of up to 30).
|
|
34
|
+
|
|
35
|
+
**Why:**
|
|
36
|
+
- Revocation of Saeed was live on the server, but the 30-day recheck interval meant an active client would not notice for up to 30 days. 3 days balances detection speed with server load.
|
|
37
|
+
- Offline at recheck -> allowed (grace), no false blocking.
|
|
9
38
|
|
|
10
39
|
## 0.2.12 (2026-08-30)
|
|
11
40
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tera-system/pro",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.14",
|
|
4
4
|
"description": "Tera System Pro — commercial edition (thin): system files are fetched from teranoo.com as a signed bundle; enforced license gate + heartbeat",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
6
|
"type": "module",
|
|
@@ -19,7 +19,11 @@
|
|
|
19
19
|
],
|
|
20
20
|
"bin": {
|
|
21
21
|
"tera-restore": "scripts/install.js",
|
|
22
|
-
"tera-pro-restore": "scripts/install.js"
|
|
22
|
+
"tera-pro-restore": "scripts/install.js",
|
|
23
|
+
"tera-license": "scripts/tera-license.mjs",
|
|
24
|
+
"tera-sync": "scripts/tera-sync.mjs",
|
|
25
|
+
"tera-heartbeat": "scripts/tera-heartbeat.mjs",
|
|
26
|
+
"tera-preflight": "scripts/preflight.mjs"
|
|
23
27
|
},
|
|
24
28
|
"scripts": {
|
|
25
29
|
"postinstall": "node scripts/install.js",
|
|
@@ -15,7 +15,7 @@ export const GATE_RESULTS = {
|
|
|
15
15
|
DENY_NEEDS_RECHECK: "deny-needs-recheck",
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
-
const RECHECK_INTERVAL_DAYS = 30
|
|
18
|
+
const RECHECK_INTERVAL_DAYS = 3; // SCP-2026-08-30-002: revocation detection within <=3 days (was 30)
|
|
19
19
|
const RECHECK_INTERVAL_MS = RECHECK_INTERVAL_DAYS * 86400000;
|
|
20
20
|
|
|
21
21
|
/**
|
|
@@ -125,7 +125,7 @@ export async function enforceLicenseGate(target, options = {}) {
|
|
|
125
125
|
"❌ Tera System License Required.\n" +
|
|
126
126
|
"Current state: Unlicensed (trial mode).\n\n" +
|
|
127
127
|
"Visit https://teranoo.com/pricing to obtain a license key.\n" +
|
|
128
|
-
"Then run:
|
|
128
|
+
"Then run: npx tera-license activate <key>",
|
|
129
129
|
};
|
|
130
130
|
}
|
|
131
131
|
|
package/scripts/tera-sync.mjs
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
import fs from "node:fs";
|
|
17
17
|
import path from "node:path";
|
|
18
18
|
import { verifyBundle, applyBundle } from "./lib/bundle.mjs";
|
|
19
|
+
import { createIntegrityManifest, saveIntegrityManifest } from "./lib/integrity.mjs";
|
|
19
20
|
|
|
20
21
|
const DEFAULT_URL = "https://teranoo.com/api/tera-system/bundle";
|
|
21
22
|
|
|
@@ -108,6 +109,17 @@ const syncStateFile = path.join(target, ".tera", "sync.state.json");
|
|
|
108
109
|
syncedAt: new Date().toISOString(),
|
|
109
110
|
}, null, 2));
|
|
110
111
|
|
|
112
|
+
// Refresh the integrity manifest AFTER applying files (SCP-2026-08-30-004).
|
|
113
|
+
// Without this, a sync that changes bundle content would leave the install-time
|
|
114
|
+
// snapshot stale and preflight would report "modified" → license gate BLOCKS.
|
|
115
|
+
try {
|
|
116
|
+
const integrityManifest = createIntegrityManifest(target);
|
|
117
|
+
saveIntegrityManifest(target, integrityManifest);
|
|
118
|
+
console.log(`✔ Integrity updated : ${integrityManifest.fileCount} files tracked`);
|
|
119
|
+
} catch (err) {
|
|
120
|
+
console.log(`⚠ Integrity update failed: ${err.message} — run install again if preflight blocks`);
|
|
121
|
+
}
|
|
122
|
+
|
|
111
123
|
console.log(`✔ Sync state : .tera/sync.state.json`);
|
|
112
124
|
console.log("\n✔ sync complete");
|
|
113
125
|
})().catch((err) => {
|