spine-rigc 1.0.0 β 1.0.2
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/README.md +35 -71
- package/docs/AUTHORING.md +727 -1160
- package/docs/FACE.md +205 -371
- package/docs/INGEST.md +155 -305
- package/docs/MOTION.md +11 -27
- package/docs/PROMPTING.md +1 -1
- package/docs/RIGGING.md +10 -26
- package/docs/SPEC_COVERAGE.md +27 -871
- package/package.json +1 -1
- package/src/atlas.ts +9 -8
- package/src/compile.ts +1 -1
- package/src/generation.ts +2 -1
- package/src/ladder.ts +1 -1
- package/src/rig.ts +4 -4
- package/src/validate.ts +20 -14
package/README.md
CHANGED
|
@@ -56,22 +56,6 @@ it cuts both ways:
|
|
|
56
56
|
trusted at all. So the [Spine Runtimes License Agreement](https://esotericsoftware.com/spine-runtimes-license)
|
|
57
57
|
applies to rigc exactly as it applies to any other runtime integration.
|
|
58
58
|
|
|
59
|
-
ποΈ **One sentence left this section on 2026-09-05, and its removal is a decision
|
|
60
|
-
rather than a tidy-up.** It read *"rigc is complementary to the editor. It is not
|
|
61
|
-
a replacement for it, and it is not a way around one."* That was a claim about
|
|
62
|
-
what rigc would never become, and
|
|
63
|
-
[#380](https://github.com/firejune/rigc/issues/380) β a format-agnostic core with
|
|
64
|
-
its own format and web player, Spine kept as one backend among others β is a
|
|
65
|
-
course the claim cannot survive. A promise the roadmap contradicts is worth less
|
|
66
|
-
than no promise, so it is retired rather than reworded
|
|
67
|
-
([#398](https://github.com/firejune/rigc/issues/398)). What a reader can check is
|
|
68
|
-
unchanged: rigc emits Spine skeleton data, links `spine-core`, validates through
|
|
69
|
-
it with no flag that turns that off, and carries the licence obligation the next
|
|
70
|
-
section states in full. A backend emitting something other than Spine data would
|
|
71
|
-
have no spine-core to check it against, and #380 treats an oracle of its own as
|
|
72
|
-
the prerequisite for shipping one β nothing here makes an unchecked emit path
|
|
73
|
-
acceptable.
|
|
74
|
-
|
|
75
59
|
### Licensing, stated plainly
|
|
76
60
|
|
|
77
61
|
rigc's own code is MIT (see [LICENSE](LICENSE)). That says nothing about Spine, and
|
|
@@ -494,8 +478,8 @@ the shot: both silhouette edges move apart, which a flat slide cannot do, becaus
|
|
|
494
478
|
feature carries its own depth. The rig guarantees the seams β <code>idle</code> loops
|
|
495
479
|
while <code>gaze</code> and <code>turn</code> return to rest, so the hand-offs meet at 0
|
|
496
480
|
differing pixels β and the composing is the consumer's. Authorable on plain Spine 4.3, no
|
|
497
|
-
plugin, no runtime patch; the
|
|
498
|
-
|
|
481
|
+
plugin, no runtime patch; what the turn costs is authoring rather than runtime capability,
|
|
482
|
+
and that cost is one stated expression per key. Compiled and rendered entirely by the
|
|
499
483
|
published package.</em></p>
|
|
500
484
|
|
|
501
485
|
ποΈ **How the three films on this page were made** is kept with them, one directory per
|
|
@@ -569,20 +553,20 @@ holds no art β every rebuild then has to repeat `build --images parts/`.
|
|
|
569
553
|
|
|
570
554
|
**`build(ingest(x))` is `x`.** Over the eleven rigs this repository builds β the seven
|
|
571
555
|
gallery examples, the three generated probes and a coverage probe written for the
|
|
572
|
-
purpose β the rebuilt `skeleton.json` is byte for byte the file the decompiler read
|
|
573
|
-
|
|
556
|
+
purpose β the rebuilt `skeleton.json` is byte for byte the file the decompiler read.
|
|
557
|
+
The atlas is held to a weaker
|
|
574
558
|
claim on purpose, and the weakening is measured rather than assumed: it comes back
|
|
575
559
|
equal as a **multiset of region blocks**, because the order the pages are collected in
|
|
576
560
|
is in no field of the skeleton.
|
|
577
561
|
|
|
578
|
-
**And over twelve skeletons nobody here wrote.**
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
562
|
+
**And over twelve skeletons nobody here wrote.** Every editor export in the fetched
|
|
563
|
+
example corpus, ingested, rebuilt through the pack beside it and `diff`ed against the
|
|
564
|
+
source, comes back **12 of 12, no blockers, 1.000 on every measure the report
|
|
565
|
+
carries** β and each rebuild is its export's own text in canonical form, apart from
|
|
566
|
+
the header's `hash` and `spine`: the editor's project hash and the runtime version
|
|
567
|
+
rigc stamps, the two keys the rig spec has no field for by design (12 of 12).
|
|
568
|
+
[INGEST.md Β§2.3](docs/INGEST.md) states that pass line and why those two are the
|
|
569
|
+
exceptions.
|
|
586
570
|
|
|
587
571
|
**What it reads is skeleton JSON and nothing else** β no `.spine` project, no binary
|
|
588
572
|
`.skel`, no atlas, no art. So it never invents, and the things it cannot get out of
|
|
@@ -595,16 +579,13 @@ specs are still written β a spec plus a list of what is missing from it beats
|
|
|
595
579
|
|
|
596
580
|
- **The stage.** `skeleton.width`/`height`. A skeleton that declares none is carried as
|
|
597
581
|
declaring none β the rig spec states `"width": null, "height": null` and the rebuild
|
|
598
|
-
carries no box either, byte for byte
|
|
599
|
-
([#714](https://github.com/firejune/rigc/issues/714)) β and `--stage x,y,w,h` is how a
|
|
582
|
+
carries no box either, byte for byte β and `--stage x,y,w,h` is how a
|
|
600
583
|
caller *adds* one, recorded as a judgement. It is not derivable β posing the rig gives
|
|
601
584
|
the *animated* extent, which is a different number from the setup box. β **And `--stage` beside a box the file already states is refused
|
|
602
585
|
too**, for the opposite reason: two sources for one value, where the file is the record
|
|
603
|
-
of what was measured.
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
the flag. It is still the value that costs least to get wrong, because `diff` reports
|
|
607
|
-
the box and gates nothing on it.
|
|
586
|
+
of what was measured. **All twelve exports in the example corpus carry a stage** and
|
|
587
|
+
none of them needs the flag. It is the value that costs least to get wrong, because
|
|
588
|
+
`diff` reports the box and gates nothing on it.
|
|
608
589
|
- **An animation's duration.** The format has no such field. The largest key time is
|
|
609
590
|
the only derivable answer and it is what a runtime plays to; it is wrong for an
|
|
610
591
|
animation that holds its last pose past its last key, so it is recorded as a finding
|
|
@@ -636,17 +617,14 @@ render-and-check block per skin, with a per-skin roll-up under them, because a
|
|
|
636
617
|
rig's contested art lives in its named skins and a single un-skinned check draws
|
|
637
618
|
none of it; a skin only one side declares is a FAIL naming it as **lost** (or
|
|
638
619
|
**added**) **by the export**, with `diff`'s `attachments.skins` beside it, and is
|
|
639
|
-
rendered on neither side
|
|
620
|
+
rendered on neither side β and a
|
|
640
621
|
field-by-field list of what the editor rewrote. Every step quotes what its child
|
|
641
622
|
said when that child did not do what it was for, the renderers included; a skin
|
|
642
623
|
**neither** side can draw β a hit-box rig, say β is a **SKIP** naming that, not a
|
|
643
624
|
red, because `check` had nothing to compare and `diff` and `validate` have
|
|
644
625
|
already measured the rig. One side drawing where the other does not is the
|
|
645
|
-
divergence the trip exists to find and stays a failure.
|
|
646
|
-
|
|
647
|
-
[#369](https://github.com/firejune/rigc/issues/369),
|
|
648
|
-
[#370](https://github.com/firejune/rigc/issues/370) β and then showed that a
|
|
649
|
-
human edit made in the editor survives the trip back.
|
|
626
|
+
divergence the trip exists to find and stays a failure. A human edit made in the
|
|
627
|
+
editor survives the trip back.
|
|
650
628
|
|
|
651
629
|
π **It requires a licensed Spine editor on the machine, by construction**, and
|
|
652
630
|
drives only the [documented command line](https://esotericsoftware.com/spine-command-line-interface)
|
|
@@ -659,14 +637,8 @@ and failing downstream. Both refusals point at `--exported <file>`, which
|
|
|
659
637
|
measures an export the editor already made and is the half of this tool that
|
|
660
638
|
needs no editor at all.
|
|
661
639
|
|
|
662
|
-
β **
|
|
663
|
-
|
|
664
|
-
report SKIP for ever, which is how a gate comes to look kept while checking
|
|
665
|
-
nothing. Run the round trip by hand, on a machine that has the editor. Its
|
|
666
|
-
**refusals** are gated, because they are the half a machine with no editor can
|
|
667
|
-
answer for: the suite points the tool at stubs in a temp directory and reads what
|
|
668
|
-
comes back, including the case that must *not* be refused β an editor at an
|
|
669
|
-
unfamiliar path, which is who `--editor` exists for.
|
|
640
|
+
β **Run the round trip by hand, on a machine that has the editor.** CI has no
|
|
641
|
+
editor, so no automated check runs it.
|
|
670
642
|
|
|
671
643
|
β οΈ Build with `--copy-images`. An ordinary build's atlas names its pages by a
|
|
672
644
|
relative path back to the art directory, and the round trip copies that atlas to
|
|
@@ -683,9 +655,11 @@ letting `A17` blame the editor for the harness's own doing.
|
|
|
683
655
|
| π **[docs/FACE.md](docs/FACE.md)** | **authoring a face.** A blink, a gaze and a 2.5D head turn on plain Spine data: the one line of yaw arithmetic every number in a turn comes from, depth as the parameter you are actually authoring, where to put a grid's columns and the angle at which any grid folds, what foreshortens and what does not, channel allocation before the first key, and the three cliffs with their angles. Also the deform audit gap, demonstrated β a folded mesh gates green β and the differential check that works today |
|
|
684
656
|
| π₯ **[docs/INGEST.md](docs/INGEST.md)** | **working with a skeleton you did not author.** What every command can and cannot do with a foreign `skeleton.json`, reading it with the toolchain, transcription as the route that makes it yours, what each validator complaint means on an export, and the re-pivot/rename/extend recipes. Ships in the package too |
|
|
685
657
|
| π€ **[docs/PROMPTING.md](docs/PROMPTING.md)** | **handing the authoring to an AI agent** β the prompt clauses a measured pilot run paid for, and what you can leave unsaid. Ships in the package too |
|
|
686
|
-
| π¬ **[docs/SPEC_COVERAGE.md](docs/SPEC_COVERAGE.md)** | Spine 4.3
|
|
658
|
+
| π¬ **[docs/SPEC_COVERAGE.md](docs/SPEC_COVERAGE.md)** | **the Spine 4.3 format, field by field.** Every key the 4.3 JSON parser and atlas reader take, what each defaults to, and the parser line it comes from β the rows rigc's refusals cite by part number. Ships in the package too |
|
|
687
659
|
| π **[the benchmark dossier](https://github.com/firejune/rigc/blob/main/docs/BENCHMARK.md)** | **why you can trust the output.** The yardstick, `diff` and `check` and what neither can see, the eight-rung ladder and the spineboy graduation exam, the run viewer, the 49 named assertions with their profiles, and the selftest that has watched every one of them fire. Repository material β it is not in the npm package |
|
|
688
660
|
| π [LADDER.md](https://github.com/firejune/rigc/blob/main/docs/LADDER.md) Β· [GATE.md](https://github.com/firejune/rigc/blob/main/docs/GATE.md) Β· [PILOT.md](https://github.com/firejune/rigc/blob/main/docs/PILOT.md) | the live rung ledger, the clause statements a candidate is graded against, and how to run an agent through the ladder and score what comes back |
|
|
661
|
+
| π¬ [SURVEY_2026-08-22.md](https://github.com/firejune/rigc/blob/main/docs/SURVEY_2026-08-22.md) | the survey the ladder was climbed by: rigc and the official examples as measured on 2026-08-22, and the gap list ordered by rung. A dated record, not kept current. Repository material |
|
|
662
|
+
| 𧬠[GENERATIONS.md](https://github.com/firejune/rigc/blob/main/docs/GENERATIONS.md) | **Spine data from another generation.** Why a 3.8β4.2 file read as 4.3 fails in silence, the policy that follows (detect from `skeleton.spine`, never guess, play on the matching runtime), what `A16` and `ingest` do with such a file, and the editor as the migration path. Repository material |
|
|
689
663
|
| πΊοΈ [ROADMAP.md](https://github.com/firejune/rigc/blob/main/ROADMAP.md) | where this is going, and where it has been. What 1.0 had to mean before the number was claimed, and what it was claimed on β conditions rather than a feature list, because direction here comes from what users hit |
|
|
690
664
|
| π [CLAUDE.md](https://github.com/firejune/rigc/blob/main/CLAUDE.md) | **the doctrine** β why the validator's messages are the product, why nothing reaches disk before green, why no number is ever invented, and what a change has to keep. [CONTRIBUTING.md](https://github.com/firejune/rigc/blob/main/CONTRIBUTING.md) calls it worth ten minutes before a first patch. Repository material |
|
|
691
665
|
|
|
@@ -695,7 +669,7 @@ rigc is measured against **Spine's own official example projects** β the
|
|
|
695
669
|
`1-weight-and-mass` β¦ `8-follow-through` series as a difficulty ladder, with spineboy
|
|
696
670
|
as the graduation exam.
|
|
697
671
|
|
|
698
|
-
π **The ladder is complete
|
|
672
|
+
π **The ladder is complete.** All eight numbered rungs and the
|
|
699
673
|
spineboy graduation exam are cleared and hold under the current gate, **v2.4**, every clause PASS or SKIP:
|
|
700
674
|
worst attributable slot drift **5.5550 px** against a 6.0 px bar β a **1.0801Γ**
|
|
701
675
|
margin, the thinnest of the ladder's **G2** figures, and **G5**'s 1.0376Γ is thinner
|
|
@@ -703,24 +677,15 @@ still β and **0 of 124** frame-change disagreements. Recompiling the same spec
|
|
|
703
677
|
different session reproduced every field of the measurement record **to the digit**.
|
|
704
678
|
The rungs stay in place as regression gates.
|
|
705
679
|
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
**Rungs 1β6 and 8 and the graduation exam were unaffected throughout**: each keeps its
|
|
716
|
-
pass on the clause, and recompiling a stored candidate reproduces its record **to the
|
|
717
|
-
digit within one gate**. Across an instrument change the digits do move, and the
|
|
718
|
-
record says where β the graduation **G2** figure went 5.5491 β 5.5544 β **5.5550 px**
|
|
719
|
-
over the #301 sampler repair and v2.4's adoption of the re-rendered reference basis,
|
|
720
|
-
while **0 of 124** held throughout. Both verdicts, and the sweep of every candidate under the gate of the day, are in
|
|
721
|
-
[docs/LADDER.md](https://github.com/firejune/rigc/blob/main/docs/LADDER.md)'s *PR #254 instrument re-inspection* and *gate-v2.3
|
|
722
|
-
re-inspection*; the standing figures quoted above are from its *gate-v2.4
|
|
723
|
-
re-inspection*, which is the current sweep.
|
|
680
|
+
**Rung 7 clears on a read-down.** One of its three slots draws in every set and is
|
|
681
|
+
attributable in none; a read-down names the framing of its evidence, and a slot whose
|
|
682
|
+
attributability is **measured** to be capped below the bar reads down when everything
|
|
683
|
+
observable about it is independently verified strict. Every other rung and the
|
|
684
|
+
graduation exam pass on the clause itself. Recompiling a stored candidate reproduces its
|
|
685
|
+
record **to the digit within one gate**; across an instrument change the digits move,
|
|
686
|
+
and [docs/LADDER.md](https://github.com/firejune/rigc/blob/main/docs/LADDER.md) records
|
|
687
|
+
where. The standing figures quoted above are from its *gate-v2.4 re-inspection*, which
|
|
688
|
+
is the current sweep.
|
|
724
689
|
|
|
725
690
|
β οΈ **What that certifies, stated exactly.** That **the tool, the guide and the
|
|
726
691
|
protocol reach the bar across a bounded series of honest attempts, each residual
|
|
@@ -732,8 +697,7 @@ ladder has not demonstrated that, and each row records which of the two it is.
|
|
|
732
697
|
π§ͺ **A separate series measures that harder question, and it has not been kind.**
|
|
733
698
|
From-zero attempts at spineboy β no inherited specs β have landed at **18.2, 18.8,
|
|
734
699
|
19.57, 7.86, 9.33 and 18.98 px** worst drift against the 6.0 px bar, a spread with no
|
|
735
|
-
monotone trend
|
|
736
|
-
2026-08-28 completion β are recorded π΄ **FAIL**. They move no rung and reopen nothing β
|
|
700
|
+
monotone trend and every figure above the bar. They move no rung and reopen nothing β
|
|
737
701
|
a from-zero run is a tooling-progress measurement rather than a re-climb, which is
|
|
738
702
|
why the certification above is scoped to tool + guide + protocol. One of those
|
|
739
703
|
attempts states the residual in its own words: *"in motion it is not at editor
|