Skip to content

Rename tsop to runar#2

Merged
icellan merged 2 commits into
mainfrom
rename-tsop-to-runar
Mar 2, 2026
Merged

Rename tsop to runar#2
icellan merged 2 commits into
mainfrom
rename-tsop-to-runar

Conversation

@icellan

@icellan icellan commented Mar 2, 2026

Copy link
Copy Markdown
Owner

No description provided.

icellan added 2 commits March 2, 2026 02:43
Rename all packages, modules, file extensions, imports, and documentation
from TSOP/tsop to Rúnar/runar.

- Rename 9 package directories (tsop-* → runar-*)
- Rename ~100 contract files (.tsop.ts/sol/move/go/rs → .runar.*)
- Update Go module path to github.com/icellan/runar/compilers/go
- Update Rust crate names (runar, runar-macros, runar-compiler-rust)
- Update all TypeScript/Go/Rust imports and references
- Update parser dispatch in all 3 compilers for new file extensions
- Update all documentation, README with name etymology
- Fix pre-existing type errors in slh-dsa.ts and script-execution.test.ts
@icellan icellan merged commit c137be1 into main Mar 2, 2026
2 of 3 checks passed
icellan pushed a commit that referenced this pull request Mar 22, 2026
…C operations

Implements sub-task #2 of HLR #1 — the runar-rb gem providing the Ruby
runtime so .runar.rb contracts are valid, runnable Ruby code.

Includes:
- SmartContract and StatefulSmartContract base classes
- Custom DSL: prop, runar_public, params class methods
- All 13 Runar type constants (Bigint, PubKey, Sig, Addr, etc.)
- Mock crypto (check_sig, check_preimage always true)
- Real hash functions (SHA-256, RIPEMD-160, Hash160, Hash256)
- Full math builtins, byte operations, num2bin/bin2num
- Pure-Ruby secp256k1 EC operations
- RSpec test suite (85 examples, 0 failures)

Closes #2

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
icellan added a commit that referenced this pull request Apr 24, 2026
…tegration, rspec discovery for examples

- New #call after deploy describe block chains deploy (broadcast #1) -> retrieved UTXO -> contract.call('increment') (broadcast #2); asserts state transition 5 -> 6
- integration/ruby/spec/wallet_client_spec.rb runs when RUNAR_WALLET_ENDPOINT is set, exercising a real BRC-100 wallet via HTTP; pending otherwise
- examples/ruby/.rspec gains --default-path . plus --pattern **/*_spec.rb so bundle exec rspec now discovers 141 examples (was 0)
icellan added a commit that referenced this pull request May 4, 2026
Round-3 review findings (#1, #2, #3):

Parser-only universal coverage (#1):
- Each compiler grew a `--parse-only` CLI flag (Java additionally accepts
  `parseOnly: true` in its JSON-RPC daemon). Runs Pass 1 (parse) +
  Pass 2 (validate) and exits zero with `parser ok` on success or
  non-zero with diagnostics on failure.
- conformance/runner/index.ts: new `--parser-only` mode.
- conformance/runner/runner.ts: Universal parser-only coverage section
  iterates every available compiler × every fixture × every declared
  format, ignoring the per-fixture `compilers` allowlist. Allowlist
  scopes Stack-IR / hex parity ONLY.
- .github/workflows/ci.yml: new "Run all-tier parser-only coverage" step
  in the Conformance Tests job.
- Verified: 441 (fixture × format) checks × 7 tiers = 3087 parses
  succeed; runner reports per-tier pass/fail/skip table.
- spec/README.md + CLAUDE.md + conformance/README.md harmonised: parser
  parity is now actually enforced (was previously TS-frontend-only).

Fold-on Java daemon allowlist (#2):
- conformance/fold-on-allowlist.json: removed the
  `if-without-else-multi-temp` × `.runar.rb` entry. Full fold-on suite
  (`RUNAR_DISABLE_CONSTANT_FOLDING=0`) now passes 441/441 across all
  49 fixtures and all 9 formats. The previous Java-daemon
  request-sequence divergence does not reproduce on the current state.
- conformance/runner/java-daemon.ts: added `parseOnly` request
  forwarding to the Java JSON-RPC daemon (used by the parser-only
  matrix above).

Allowlist scope tightening (#3):
- stateful-bytestring: was `["ts", "go", "rust", "python", "zig", "ruby"]`
  with a stale "Java needs Merkle codegen" rationale that was incorrect
  — the contract uses only checkSig + auto-injected stateful
  continuation. Removed the `compilers` field entirely; Java is now a
  full peer for this fixture.
- state-covenant: re-scoped from `["ts", "go", "rust", "python", "zig",
  "ruby"]` to `["go"]`. The fixture's intrinsics (`bbFieldMul`,
  `merkleRootSha256`) are EVM/STARK proof-system primitives, which are
  Go-only by project policy. Non-Go tiers may carry partial ports for
  historical reasons but are NOT conformance targets for this family.
- CLAUDE.md: added the canonical "EVM/STARK proof-system primitives are
  Go-only by project policy" statement governing BabyBear, KoalaBear,
  Poseidon2*, BN254 + Groth16, Merkle / merkleRootSha256, SP1 FRI,
  FiatShamir-KB. Every other codegen family (SLH-DSA, SHA-256, BLAKE3,
  EC/secp256k1, P-256/P-384, WOTS+) MUST ship in all 7 tiers.
- conformance/runner/__tests__/allowlist-audit.test.ts: pinned set
  consolidated under the EVM/STARK Go-only umbrella.

Verification: allowlist-audit 4/4; multi-format full conformance suite
441/441; fold-off + fold-on both green; parser-only matrix 7×441 = 3087
parses clean.
icellan added a commit that referenced this pull request Jun 25, 2026
…s (49→64)

The conformance corpus grew (49→64 fixtures) across recent PRs (incl. the RC
audit-fix work: BUG-001/BUG-010, GAP-302/GAP-407) without updating the Lean
verifier, leaving main's Lean conformance gates silently desynced since ~May 29.
Surfaced by the eval/v1-readiness PR's CI (differential + cross-compiler FAIL).

Five fixes:

1. ANF/Json loader (#1): parse bigint literals encoded as decimal strings with
   the JS BigInt 'n' suffix ("123n") — BUG-001's golden-IR change for 256-bit
   literals. schnorr-zkp's IR now parses; all 64 goldens load + satisfy WF.

2. oracle-price (#2): BUG-010 added a 5-opcode OP_WITHIN padding range-check
   (0<=padding<65536) to the 7 real compilers' Rabin codegen + regenerated the
   golden; the Lean model's Rabin lowering doesn't yet emit it. Documented as a
   lowerDivergencePending divergence with the exact fix recipe (porting needs
   re-proving Stack/Rabin.runOps_rabinBodyOps_eq with a padding-range
   hypothesis). No deployed contract affected — only the model-vs-real byte
   match. (Confirmed the port is byte-exact before choosing to defer the proof.)

3/4. Categorize the 15 new fixtures (measured byte-exact status, not guessed):
   5 SLH-DSA -> cryptoAxiomPending; byte-exact ones (intent-*,
   all-readonly-cleanstack, asm-raw-script, stateful-wots-gate) -> baselineMatches;
   non-byte-exact ones (branched-readonly-len, multisig, oracle-price,
   cond-write-multi-field, terminal-varlen-read) -> lowerDivergencePending.
   Inventory sum invariant 49->64.

5. Count guards: convert exact-equality (== 49) to floors (>= 49) in
   PipelineGolden, Differential, and external-ref.py, so corpus growth no longer
   breaks CI; full-mode gate generalized to all-but-documented-divergences.

Gates: lake build green; goldenLoad 64/64; pipelineGolden exit 0 (50/64
byte-exact); drift unchanged at 70; PROVE-001 axiom audit intact; 0 sorry/admit.
icellan added a commit that referenced this pull request Jul 7, 2026
…em remediation #2)

Adds INDEPENDENT official known-answer-test vectors + native-runtime assertions,
attacking the BUG-101 root cause (crypto validated only by self-produced goldens
that were themselves wrong). Every vector is copied verbatim from an authoritative
source (recorded in each file's _source) — none is re-derived from a Runar tier.

Vendored (conformance/runtime-vectors/):
- blake3-official-kat.json — 11 vectors (input lengths 0..64) from BLAKE3-team's
  test_vectors/test_vectors.json (empty = af1349b9…). >64B deliberately omitted:
  Runar's blake3Hash is single-block (loop-free Script). Go/Rust/Python native
  blake3Hash reproduce all 11 exactly.
- ecdsa-rfc6979.json — RFC 6979 A.2.5 (P-256) + A.2.6 (P-384) deterministic-ECDSA
  vectors, With-SHA-256 variant (native verify hashes with SHA-256 for both).
  Native verify accepts each published (r,s), rejects a 1-bit flip + wrong message.
- slh-dsa-acvp-kat.json — NIST ACVP SLH-DSA-SHA2-128s (internal) sigVer, tcId 422.

Tests: packages/runar-{go,rs,py} crypto_kat.* (Go all pass; Rust 2/2; Python 15/15).

REAL BUG FOUND (this is what remediation #2 is for): native SLH-DSA is NOT
FIPS-205-conformant — it self-consistently round-trips its own signatures but
REJECTS the authoritative NIST ACVP vector (BUG-101 class: self-consistent but
non-standard). Root cause identified at slh_dsa.go slhHmsg (H_msg MGF1 seed omits
the R‖PK.seed prefix FIPS-205 §11.2 mandates), with further verify-path
deviations remaining. Wired as a documented xfail (t.Skipf with a loud message +
docs/test-skips.md Gap row) so the suite stays green while the bug exists and
enforces automatically the moment the impl becomes conformant. A full FIPS-205
fix (native Go/Rust/Python + on-chain codegen audit) is out of scope here — the
vendored NIST vector is the regression gate for it.

WOTS+ intentionally NOT vendored: the native wots.go uses a custom simplified
tweakable hash, not RFC 8391 WOTS+, so no published KAT reproduces it. Documented
rather than fabricated.

The 3 vector files are pre-justified in golden-provenance-allowlist.json
(verified-against: official-KAT) — they ARE the independent oracle.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant