|
2 | 2 |
|
3 | 3 | All notable changes to this repository are documented in this file. |
4 | 4 |
|
5 | | -## [Unreleased] |
| 5 | +## [3.6.1] — 2026-04-09 |
6 | 6 |
|
7 | 7 | ### Added |
8 | 8 |
|
9 | | -- **C# File I/O helpers** — load/save `.synx` files in one call. |
| 9 | +- **Package registry — soft delete + yank system** |
| 10 | + - **Soft delete** (`DELETE /api/packages/:scope/:name`) — marks package as deleted (`deleted_at`, `deleted_by`, `deletion_reason` columns) instead of removing from DB/S3. All versions auto-yanked. Tarballs preserved for 30-day grace period. |
| 11 | + - **Restore endpoint** (`POST /api/packages/:scope/:name/restore`) — un-deletes a soft-deleted package within the 30-day grace period. All versions auto-unyanked. |
| 12 | + - **Permanent delete** (`DELETE /api/packages/:scope/:name/permanent`) — hard delete for already soft-deleted packages. Removes tarballs from S3 and rows from DB. |
| 13 | + - **Unyank endpoint** (`POST /api/packages/:scope/:name/:version/unyank`) — restore a single yanked version. |
| 14 | + - Detail endpoint returns **410 Gone** for soft-deleted packages with `deletedAt` and restoration info. |
| 15 | + - List endpoint filters out soft-deleted packages (`deleted_at IS NULL`). |
| 16 | + - DB migration: `deleted_at TIMESTAMPTZ`, `deleted_by TEXT`, `deletion_reason TEXT` on `packages` table. |
| 17 | + |
| 18 | +- **`synx restore` CLI command** — restore a soft-deleted package within the 30-day grace period. |
| 19 | + |
| 20 | +- **`synx create` CLI command** — interactive package scaffolder. |
| 21 | + - Prompts for scope, name, description, author, license, and package type. |
| 22 | + - **WASM Marker Package** template — generates `Cargo.toml`, `src/lib.rs` (ABI v1 boilerplate), `synx-pkg.synx`, `build.bat`, `build.sh`, `README.md`. |
| 23 | + - **SYNX Config Package** template — generates `synx-pkg.synx`, `src/main.synx` (with `:env` and `:default` markers), `README.md`. |
| 24 | + - Lists generated files on completion with next-steps guidance. |
| 25 | + |
| 26 | +- **Packages page UI improvements** |
| 27 | + - Author avatar shows real profile image (from `users.avatar_url`) with fallback to initial letter. |
| 28 | + - Files tab populated from tarball extraction (file list + file contents viewer overlay). |
| 29 | + - Dependencies and Dependents tabs auto-hidden when empty (`tab-hidden` CSS class). |
| 30 | + - Cache-bust bumped to `?v=20260408f`. |
| 31 | + |
| 32 | +- **Package registry pipeline — S3 storage + extraction** |
| 33 | + - Tarball extraction at publish time: README, file list, and file contents stored in `packages` table. |
| 34 | + - S3 Hetzner Object Storage for tarball persistence. |
| 35 | + - CLI `DEFAULT_REGISTRY` changed to `https://synx.aperturesyndicate.com/api`. |
| 36 | + - Forum-API accepts CLI Bearer tokens (via `cli_tokens` table fallback in `getUser()`). |
| 37 | + |
| 38 | +### Changed |
| 39 | + |
| 40 | +- **`synx delete`** — now performs soft delete with 30-day grace period (was permanent hard delete). Confirmation prompt updated to reflect soft delete behavior. |
| 41 | +- **Yank route** — changed from `DELETE /api/packages/:scope/:name/:version` to `POST /api/packages/:scope/:name/:version/yank` to match CLI expectations. |
| 42 | +- **Renamed `@assynx/synx-markers` → `@assynx/text-tools`** — better reflects the package's 8 text utility markers (`:upper`, `:lower`, `:reverse`, `:base64`, `:hash`, `:truncate`, `:pad`, `:count`). |
| 43 | +- **Consolidated `examples/` and `synx_packages/`** — removed duplicate WASM examples that duplicated content already in `synx_packages/`. |
| 44 | +- **Package template moved to `synx_packages/template/`** — starter WASM marker template lives next to official packages. |
| 45 | + |
| 46 | +### Removed |
| 47 | + |
| 48 | +- **Deleted `@assynx/synx-defaults`** — removed from `synx_packages/` and the embedded registry. |
| 49 | +- **Deleted `@aperture/synx-defaults`** — removed the entire `@aperture` scope. |
| 50 | +- **Deleted `examples/wasm-marker-upper/`** and **`examples/wasm-marker-template/`** — consolidated into `synx_packages/`. |
| 51 | + |
| 52 | +### Added |
| 53 | + |
| 54 | +- **SYNX Package System — complete pipeline** (Steps 1–12) |
| 55 | + - **Package manifests** (`synx-pkg.synx`) — normalized format with name, version, description, author, license, main, synx-version, keywords, files, dependencies, capabilities. |
| 56 | + - **Package engine** (`crates/synx-cli/src/pkg.rs`) — `Manifest` parser, `LockFile` (synx.lock), `pack()` → `.tar.gz` with SHA-256 integrity, `publish()`, `install()` (registry + local), `uninstall()`, `login()` (token-based auth). |
| 57 | + - **Credential storage** — `~/.synx/credentials.synx`, token read/write, registry-scoped. |
| 58 | + - **CLI commands** — `as init`, `as publish`, `as install`, `as uninstall`, `as login`, `as pack`, `as yank`, `as unyank` (wired in `main.rs`). |
| 59 | + - **`!use` directive support** in LSP (`synx-lsp`) — import packages from `synx_packages/`. |
| 60 | + - **Semver dependency resolution** — `parse_semver()`, `version_satisfies()` (^, ~, \*, >=, <=, >, <, exact), `check_conflicts()` integrated into `install()`. |
| 61 | + - **Package yank/unyank** — `yank()` / `unyank()` API calls + CLI commands. |
| 62 | + - **14 new CLI tests** + **12 semver tests** — all passing. |
| 63 | + |
| 64 | +- **WASM custom markers — sandboxed WebAssembly runtime** |
| 65 | + - **`WasmMarkerRuntime`** (`crates/synx-core/src/wasm.rs`) — wasmi-based WASM interpreter with ABI v1 (`synx_alloc`, `synx_markers`, `synx_apply`). |
| 66 | + - **Capability permissions** — `WasmCapabilities { string, fs, net, env }` enforced at module load time. |
| 67 | + - **Ed25519 package signing** (`crates/synx-core/src/signing.rs`) — `SigningKey`, `VerifyKey`, `PackageSignature`, keygen/sign/verify. |
| 68 | + - **Engine integration** — WASM dispatch in `engine.rs` after built-in markers, before constraints. |
| 69 | + - **`@assynx/synx-markers`** — official marker pack with 8 markers: `:upper`, `:lower`, `:reverse`, `:base64`, `:hash`, `:truncate`, `:pad`, `:count`. Built as `.wasm`, installed in `synx_packages/`. |
| 70 | + - **WASM marker author guide** (`docs/guides/WASM_MARKERS.md`) — ABI spec, project setup, build, sign, publish, capabilities, security model. |
| 71 | + |
| 72 | +- **JS/TS binary format + tool parsing** (`packages/synx-js/src/index.ts`) |
| 73 | + - `Synx.compile(text, resolved?)` → `Uint8Array` — pure-JS `.synxb` compiler (string table, varint, zigzag, type tags 0x00–0x08). |
| 74 | + - `Synx.decompile(data)` → string — decompile `.synxb` back to `.synx` text. |
| 75 | + - `Synx.isSynxb(data)` → boolean — check for SYNXB magic header. |
| 76 | + - `Synx.parseTool(text, options?)` → `{ tool, params }` — parse `!tool` mode with reshaping. |
| 77 | + - JS/TS binding now at **full parity** with Python/C#/Go/Kotlin/Swift. |
10 | 78 | - `LoadFileAsync<T>(path)` / `LoadFile<T>(path)` — read + deserialize a `.synx` file. |
11 | 79 | - `LoadFileActiveAsync<T>(path, synxOptions?)` — same with `!active` engine resolution. |
12 | 80 | - `SaveFileAsync<T>(path, obj)` / `SaveFile<T>(path, obj)` — serialize + write a `.synx` file. |
@@ -90,6 +158,7 @@ Quick reference of what was modified in recent versions: |
90 | 158 |
|
91 | 159 | | Version | Components Modified | |
92 | 160 | |---------|---| |
| 161 | +| **3.6.1** | forum-api (soft delete, unyank, restore, permanent delete, DB migration), synx-cli (restore command, soft delete messaging), packages page (avatars, files tab, hidden empty tabs), S3 pipeline (tarball extraction, README/files storage) | |
93 | 162 | | **3.6.0** | synx-core (`.synxb`, `!tool`, **`!llm`**, `diff`, JSON Schema helpers, hostile-input caps), synx-cli (**`synx schema`**, **`json-validate`**), synx-lsp, VS Code (`!llm`), bindings (**C++**, **Go cgo**, **SwiftPM+`synx-c`**, **Kotlin/JNA+`synx-c`**, **Mojo↔CPython**), Python extra JSON/hex helpers for thin interop, conformance (**11** cases), tree-sitter, fuzz + **`Synx.FuzzReplay`**, **`SYNX_AT_A_GLANCE`**, SYNX-Adapter, docs: **normative spec + CORE-FREEZE (engine frozen 2026-04-01)** | |
94 | 163 | | **3.5.2** | synx-core (`:prompt` marker, `:vision`/`:audio` metadata, calc modulo-by-zero fix), synx-js (same + `Synx.diff()` + prototype pollution fix + ReDoS guard + `deepGet`/parser hardening), synx-vscode (diagnostics/completion for 3 new markers + `:template` sibling-scope fix), all 6 guides | |
95 | 164 | | **3.5.1** | synx-core (stack overflow guard, circular alias detection), synx-js (same + SynxError class + browser bundle export), synx-vscode (circular alias diagnostic), security tests | |
|
0 commit comments