Rename tsop to runar#2
Merged
Merged
Conversation
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
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.
3 tasks
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.