spine-rigc 1.0.1 → 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 CHANGED
@@ -478,8 +478,8 @@ the shot: both silhouette edges move apart, which a flat slide cannot do, becaus
478
478
  feature carries its own depth. The rig guarantees the seams — <code>idle</code> loops
479
479
  while <code>gaze</code> and <code>turn</code> return to rest, so the hand-offs meet at 0
480
480
  differing pixels — and the composing is the consumer's. Authorable on plain Spine 4.3, no
481
- plugin, no runtime patch; the split was authoring cost rather than runtime capability, and
482
- the cost is now one stated expression per key. Compiled and rendered entirely by the
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
483
483
  published package.</em></p>
484
484
 
485
485
  🎞️ **How the three films on this page were made** is kept with them, one directory per
@@ -553,20 +553,20 @@ holds no art — every rebuild then has to repeat `build --images parts/`.
553
553
 
554
554
  **`build(ingest(x))` is `x`.** Over the eleven rigs this repository builds — the seven
555
555
  gallery examples, the three generated probes and a coverage probe written for the
556
- purpose — the rebuilt `skeleton.json` is byte for byte the file the decompiler read,
557
- and `bun run selftest` holds it there on every run. The atlas is held to a weaker
556
+ purpose — the rebuilt `skeleton.json` is byte for byte the file the decompiler read.
557
+ The atlas is held to a weaker
558
558
  claim on purpose, and the weakening is measured rather than assumed: it comes back
559
559
  equal as a **multiset of region blocks**, because the order the pages are collected in
560
560
  is in no field of the skeleton.
561
561
 
562
- **And over twelve skeletons nobody here wrote.** The same run ingests every editor
563
- export in the fetched example corpus, rebuilds it through the pack beside it and
564
- `diff`s the result against the source: **12 of 12, no blockers, 1.000 on every measure
565
- the report carries** — and each rebuild is its export's own text in canonical form,
566
- apart from the header's `hash` and `spine`: the editor's project hash and the runtime
567
- version rigc stamps, the two keys the rig spec has no field for by design (`IG83`,
568
- 12 of 12). [INGEST.md §2.3](docs/INGEST.md) states that pass line and why those two
569
- are the exceptions.
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.
570
570
 
571
571
  **What it reads is skeleton JSON and nothing else** — no `.spine` project, no binary
572
572
  `.skel`, no atlas, no art. So it never invents, and the things it cannot get out of
@@ -579,16 +579,13 @@ specs are still written — a spec plus a list of what is missing from it beats
579
579
 
580
580
  - **The stage.** `skeleton.width`/`height`. A skeleton that declares none is carried as
581
581
  declaring none — the rig spec states `"width": null, "height": null` and the rebuild
582
- carries no box either, byte for byte
583
- ([#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
584
583
  caller *adds* one, recorded as a judgement. It is not derivable — posing the rig gives
585
584
  the *animated* extent, which is a different number from the setup box. ⛔ **And `--stage` beside a box the file already states is refused
586
585
  too**, for the opposite reason: two sources for one value, where the file is the record
587
- of what was measured. It used to be read after the box and therefore never
588
- ([#626](https://github.com/firejune/rigc/issues/626)). ⚠️ This said *"an editor export carries none"* until #594 measured
589
- it: **all twelve exports in the example corpus carry a stage** and none of them needs
590
- the flag. It is still the value that costs least to get wrong, because `diff` reports
591
- 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.
592
589
  - **An animation's duration.** The format has no such field. The largest key time is
593
590
  the only derivable answer and it is what a runtime plays to; it is wrong for an
594
591
  animation that holds its last pose past its last key, so it is recorded as a finding
@@ -620,17 +617,14 @@ render-and-check block per skin, with a per-skin roll-up under them, because a
620
617
  rig's contested art lives in its named skins and a single un-skinned check draws
621
618
  none of it; a skin only one side declares is a FAIL naming it as **lost** (or
622
619
  **added**) **by the export**, with `diff`'s `attachments.skins` beside it, and is
623
- rendered on neither side ([#801](https://github.com/firejune/rigc/issues/801)) — and a
620
+ rendered on neither side — and a
624
621
  field-by-field list of what the editor rewrote. Every step quotes what its child
625
622
  said when that child did not do what it was for, the renderers included; a skin
626
623
  **neither** side can draw — a hit-box rig, say — is a **SKIP** naming that, not a
627
624
  red, because `check` had nothing to compare and `diff` and `validate` have
628
625
  already measured the rig. One side drawing where the other does not is the
629
- divergence the trip exists to find and stays a failure. On its first
630
- run it found three emitter defects — [#368](https://github.com/firejune/rigc/issues/368),
631
- [#369](https://github.com/firejune/rigc/issues/369),
632
- [#370](https://github.com/firejune/rigc/issues/370) — and then showed that a
633
- 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.
634
628
 
635
629
  🔒 **It requires a licensed Spine editor on the machine, by construction**, and
636
630
  drives only the [documented command line](https://esotericsoftware.com/spine-command-line-interface)
@@ -643,14 +637,8 @@ and failing downstream. Both refusals point at `--exported <file>`, which
643
637
  measures an export the editor already made and is the half of this tool that
644
638
  needs no editor at all.
645
639
 
646
- ⛔ **The round trip is not, and must not become, a selftest control.** `bun run
647
- selftest` is self-contained and CI has no editor; a control that needed one would
648
- report SKIP for ever, which is how a gate comes to look kept while checking
649
- nothing. Run the round trip by hand, on a machine that has the editor. Its
650
- **refusals** are gated, because they are the half a machine with no editor can
651
- answer for: the suite points the tool at stubs in a temp directory and reads what
652
- comes back, including the case that must *not* be refused — an editor at an
653
- 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.
654
642
 
655
643
  ⚠️ Build with `--copy-images`. An ordinary build's atlas names its pages by a
656
644
  relative path back to the art directory, and the round trip copies that atlas to
@@ -667,9 +655,10 @@ letting `A17` blame the editor for the harness's own doing.
667
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 |
668
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 |
669
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 |
670
- | 🔬 **[docs/SPEC_COVERAGE.md](docs/SPEC_COVERAGE.md)** | Spine 4.3's full export surface against what rigc emits and what the official examples measurably use, with the ordered gap list |
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 |
671
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 |
672
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 |
673
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 |
674
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 |
675
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 |
@@ -680,7 +669,7 @@ rigc is measured against **Spine's own official example projects** — the
680
669
  `1-weight-and-mass` … `8-follow-through` series as a difficulty ladder, with spineboy
681
670
  as the graduation exam.
682
671
 
683
- 🎓 **The ladder is complete, 2026-08-28.** All eight numbered rungs and the
672
+ 🎓 **The ladder is complete.** All eight numbered rungs and the
684
673
  spineboy graduation exam are cleared and hold under the current gate, **v2.4**, every clause PASS or SKIP:
685
674
  worst attributable slot drift **5.5550 px** against a 6.0 px bar — a **1.0801×**
686
675
  margin, the thinnest of the ladder's **G2** figures, and **G5**'s 1.0376× is thinner
@@ -688,24 +677,15 @@ still — and **0 of 124** frame-change disagreements. Recompiling the same spec
688
677
  different session reproduced every field of the measurement record **to the digit**.
689
678
  The rungs stay in place as regression gates.
690
679
 
691
- 🗓️ **One rung's pass was withdrawn and restored on 2026-09-02, and both are dated
692
- facts.** `check`'s extent tolerance ([PR #254](https://github.com/firejune/rigc/pull/254))
693
- changed which box a set is measured in, and rung 7's stored candidate failed **G2**
694
- under it — one of its three slots draws in every set and is attributable in none,
695
- and no read-down ground survived the framing change. The gate then answered the two
696
- clause questions that exposed, as **v2.3**: a read-down names the framing of its
697
- evidence, and a slot whose attributability is **measured** to be capped below the bar
698
- reads down when everything observable about it is independently verified strict. That
699
- rung's third attempt clears on those grounds, on the candidate it already had.
700
- **Rungs 1–6 and 8 and the graduation exam were unaffected throughout**: each keeps its
701
- pass on the clause, and recompiling a stored candidate reproduces its record **to the
702
- digit within one gate**. Across an instrument change the digits do move, and the
703
- record says where — the graduation **G2** figure went 5.5491 → 5.5544 → **5.5550 px**
704
- over the #301 sampler repair and v2.4's adoption of the re-rendered reference basis,
705
- while **0 of 124** held throughout. Both verdicts, and the sweep of every candidate under the gate of the day, are in
706
- [docs/LADDER.md](https://github.com/firejune/rigc/blob/main/docs/LADDER.md)'s *PR #254 instrument re-inspection* and *gate-v2.3
707
- re-inspection*; the standing figures quoted above are from its *gate-v2.4
708
- 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.
709
689
 
710
690
  ⚠️ **What that certifies, stated exactly.** That **the tool, the guide and the
711
691
  protocol reach the bar across a bounded series of honest attempts, each residual
@@ -717,8 +697,7 @@ ladder has not demonstrated that, and each row records which of the two it is.
717
697
  🧪 **A separate series measures that harder question, and it has not been kind.**
718
698
  From-zero attempts at spineboy — no inherited specs — have landed at **18.2, 18.8,
719
699
  19.57, 7.86, 9.33 and 18.98 px** worst drift against the 6.0 px bar, a spread with no
720
- monotone trend, and the two most recent — both **2026-09-03**, after the ladder's
721
- 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 —
722
701
  a from-zero run is a tooling-progress measurement rather than a re-climb, which is
723
702
  why the certification above is scoped to tool + guide + protocol. One of those
724
703
  attempts states the residual in its own words: *"in motion it is not at editor