spine-rigc 0.5.0 → 0.7.0
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/NOTICE.md +21 -0
- package/README.md +409 -229
- package/bin/rigc.cjs +40 -0
- package/cli.ts +916 -56
- package/docs/AUTHORING.md +345 -27
- package/docs/PROMPTING.md +106 -0
- package/docs/SPEC_COVERAGE.md +16 -14
- package/package.json +4 -2
- package/src/ballot.ts +869 -0
- package/src/compile.ts +796 -137
- package/src/emit.ts +88 -0
- package/src/json-position.ts +253 -0
- package/src/png.ts +72 -7
- package/src/preview.ts +243 -0
- package/src/render.ts +58 -0
- package/src/types.ts +171 -0
- package/src/validate.ts +287 -14
- package/tools/plate.ts +164 -21
package/docs/SPEC_COVERAGE.md
CHANGED
|
@@ -5,18 +5,20 @@ what rigc emits today, and what the official example projects actually use — s
|
|
|
5
5
|
ordered by what the benchmark ladder needs rather than by the spec's alphabet.
|
|
6
6
|
|
|
7
7
|
Reproduce the measurements with `bun run fetch-examples && bun run bench:usage`
|
|
8
|
-
([`bench/count_features.ts`](
|
|
9
|
-
[`feature_matrix.json`](feature_matrix.json)).
|
|
8
|
+
([`bench/count_features.ts`](https://github.com/firejune/rigc/blob/main/bench/count_features.ts) → [`feature_matrix.csv`](https://github.com/firejune/rigc/blob/main/docs/feature_matrix.csv),
|
|
9
|
+
[`feature_matrix.json`](https://github.com/firejune/rigc/blob/main/docs/feature_matrix.json)).
|
|
10
10
|
|
|
11
11
|
> 🔼 **This note is dated and does not move; the measurements below are the corpus as it
|
|
12
12
|
> stood on 2026-08-22 and stay as written. Its statements about what rigc *does* have gone
|
|
13
|
-
> stale in five places, and the live ledger is [LADDER.md](LADDER.md):**
|
|
13
|
+
> stale in five places, and the live ledger is [LADDER.md](https://github.com/firejune/rigc/blob/main/docs/LADDER.md):**
|
|
14
14
|
>
|
|
15
15
|
> - **B2 is fixed** — A16 accepts `4.3`, `4.3.N` and `4.3.N-<suffix>`, so all twelve example
|
|
16
16
|
> exports pass it.
|
|
17
|
-
> - **The profile split exists** — `--profile spine | spine-html`, default `spine
|
|
18
|
-
>
|
|
19
|
-
>
|
|
17
|
+
> - **The profile split exists** — `--profile spine | spine-html`, **default `spine` since
|
|
18
|
+
> 2026-08-29** (issue #221; it was `spine-html` when this survey was written), so the nine
|
|
19
|
+
> renderer-policy assertions of §2.2 no longer apply to foreign data, and no longer apply
|
|
20
|
+
> unasked. That closes the validator half of B3; the emitter half (no packer, no atlas
|
|
21
|
+
> importer) is untouched.
|
|
20
22
|
> - **`walkTimelines` reaches all eleven groups** — §2.3 item 1 and §4.3 item 4 are done, so
|
|
21
23
|
> A05 is no longer blind to `ik` / `transform` / `path` / `slider` / `drawOrder` /
|
|
22
24
|
> `drawOrderFolder` / `events`.
|
|
@@ -25,7 +27,7 @@ Reproduce the measurements with `bun run fetch-examples && bun run bench:usage`
|
|
|
25
27
|
> attachments, the 4.3 typed constraint array and the invariants, all as data. So §2.4's
|
|
26
28
|
> "the bone tree is code, not data", §4.0's B1 row and executive-summary item 7 describe a
|
|
27
29
|
> state that no longer exists. Rung 3 transcribed into that format scores 1.000 on every
|
|
28
|
-
> measure of every section — figures in [LADDER.md](LADDER.md).
|
|
30
|
+
> measure of every section — figures in [LADDER.md](https://github.com/firejune/rigc/blob/main/docs/LADDER.md).
|
|
29
31
|
> - Since that change rigc also emits **ik and transform constraints**, the **single-axis bone
|
|
30
32
|
> timelines** (`translatex`/`translatey`/`scalex`/`scaley`/`shear`/`shearx`/`sheary`), bone
|
|
31
33
|
> `length`/`scale`/`shear`/`inherit`/`skin`/`color` setup fields, slot `dark`/`blend`, region
|
|
@@ -659,7 +661,7 @@ This is the split Part 4(c) needs. **Spine-validity** = the file is wrong for an
|
|
|
659
661
|
| `A12_NO_DARK_COLOR` | **renderer-profile** | slot `dark`, `rgba2`/`rgb2` timelines — "parsed, then ignored" |
|
|
660
662
|
| `A13_MESH_BUDGET` | **renderer-profile** | >4 mesh slots, >80 triangles per mesh |
|
|
661
663
|
| `A14_NO_FULL_FRAME_MESH` | **renderer-profile** | a mesh spanning the whole stage |
|
|
662
|
-
| `A19_OVERLAY_PNGS_HAVE_ALPHA` | **renderer-profile** | an overlay page
|
|
664
|
+
| `A19_OVERLAY_PNGS_HAVE_ALPHA` | **renderer-profile** | an overlay page that can never be transparent — no alpha channel and no `tRNS` chunk |
|
|
663
665
|
| `A20_MESH_WEIGHTS_COHERENT` | **renderer-profile / archetype** | **unweighted meshes**, weights not summing to 1, out-of-range bone indices |
|
|
664
666
|
| `A21_MESH_RIM_PINNED` | archetype | ring/ribbon rim not pinned |
|
|
665
667
|
| `A22_MESH_UVS_IN_UNIT_RANGE` | validity-ish | UVs outside 0..1 |
|
|
@@ -716,7 +718,7 @@ one.
|
|
|
716
718
|
|
|
717
719
|
> 🔼 Both halves of that paragraph are now stale. The walker reaches all eleven groups and the
|
|
718
720
|
> mutants that prove it exist; the suite runs on fixtures it **generates**, so it needs no
|
|
719
|
-
> project's art. Current shape: [CLAUDE.md](
|
|
721
|
+
> project's art. Current shape: [CLAUDE.md](https://github.com/firejune/rigc/blob/main/CLAUDE.md), *The selftest and its fixtures*.
|
|
720
722
|
|
|
721
723
|
### 2.4 The input model — where the rig actually comes from
|
|
722
724
|
|
|
@@ -751,10 +753,10 @@ The manifest supplies *positions* for those bones (`anchors`), never their *name
|
|
|
751
753
|
## Part 3 — what the example ladder actually uses
|
|
752
754
|
|
|
753
755
|
Corpus: the nine official example projects on branch `4.3`, fetched by
|
|
754
|
-
[`scripts/fetch-examples.sh`](
|
|
756
|
+
[`scripts/fetch-examples.sh`](https://github.com/firejune/rigc/blob/main/scripts/fetch-examples.sh) into the gitignored `examples/<name>/`
|
|
755
757
|
(**12 skeleton JSON files** — some examples ship more than one — **10 `.atlas` files**, 8 `license.txt`).
|
|
756
|
-
Counted by [`bench/count_features.ts`](
|
|
757
|
-
[`feature_matrix.json`](feature_matrix.json) and [`feature_matrix.csv`](feature_matrix.csv)
|
|
758
|
+
Counted by [`bench/count_features.ts`](https://github.com/firejune/rigc/blob/main/bench/count_features.ts); full output in
|
|
759
|
+
[`feature_matrix.json`](https://github.com/firejune/rigc/blob/main/docs/feature_matrix.json) and [`feature_matrix.csv`](https://github.com/firejune/rigc/blob/main/docs/feature_matrix.csv)
|
|
758
760
|
(12 rows × 135 columns), both regenerated by `bun run bench:usage`.
|
|
759
761
|
|
|
760
762
|
> ⚠️ **Verification note.** The timeline columns below were re-derived independently from the raw JSON
|
|
@@ -913,7 +915,7 @@ Crossing Part 2 with Part 3. Categories, as requested:
|
|
|
913
915
|
**(d) JSON-inexpressible** — things the format genuinely cannot hold.
|
|
914
916
|
|
|
915
917
|
**Nothing below was implemented when this was written. This is a survey.** Three of its items
|
|
916
|
-
have been built since — see the banner at the top of this document and [LADDER.md](LADDER.md) for
|
|
918
|
+
have been built since — see the banner at the top of this document and [LADDER.md](https://github.com/firejune/rigc/blob/main/docs/LADDER.md) for
|
|
917
919
|
which; the requirement text itself is left exactly as surveyed.
|
|
918
920
|
|
|
919
921
|
### 4.0 Three blockers that precede rung 1
|
|
@@ -977,7 +979,7 @@ Nothing structurally new (attachment timeline, blend, inherit all arrived by run
|
|
|
977
979
|
#### Rung 6 — `6-arcs`
|
|
978
980
|
|
|
979
981
|
> ✅ **Measured, 2026-08-23.** The rows below were written as predictions; the
|
|
980
|
-
> transcription in [`bench/transcriptions/6-arcs/`](
|
|
982
|
+
> transcription in [`bench/transcriptions/6-arcs/`](https://github.com/firejune/rigc/tree/main/bench/transcriptions/6-arcs/)
|
|
981
983
|
> settled them. It compiles green under `--profile spine` and `bench 6` reports
|
|
982
984
|
> **1.000 on all 44 measures in all six sections**, so the rig spec expresses this
|
|
983
985
|
> skeleton — weighted meshes, `edges` and the 4.3 transform constraints alike. A
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "spine-rigc",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Rig compiler for Spine — declarative rig specs in, Spine 4.3 skeleton data out, verified by a spine-core round-trip. Built so AI agents can author rigs and check their own work; the output imports into the Spine editor.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
|
-
"rigc": "./
|
|
7
|
+
"rigc": "./bin/rigc.cjs"
|
|
8
8
|
},
|
|
9
9
|
"engines": {
|
|
10
10
|
"bun": ">=1.2.0"
|
|
@@ -31,12 +31,14 @@
|
|
|
31
31
|
"cli"
|
|
32
32
|
],
|
|
33
33
|
"files": [
|
|
34
|
+
"bin/rigc.cjs",
|
|
34
35
|
"cli.ts",
|
|
35
36
|
"src",
|
|
36
37
|
"tools/plate.ts",
|
|
37
38
|
"tools/font5x7.ts",
|
|
38
39
|
"docs/AUTHORING.md",
|
|
39
40
|
"docs/SPEC_COVERAGE.md",
|
|
41
|
+
"docs/PROMPTING.md",
|
|
40
42
|
"NOTICE.md"
|
|
41
43
|
],
|
|
42
44
|
"publishConfig": {
|