diff --git a/.claude/skills/t27f/SKILL.md b/.claude/skills/t27f/SKILL.md index eb5da0af3a..aca977fe99 100644 --- a/.claude/skills/t27f/SKILL.md +++ b/.claude/skills/t27f/SKILL.md @@ -200,7 +200,17 @@ Traps from this tick (ffmpeg on the lab): Trap: `tsort` prints loops on **stderr** and still prints an order on stdout, so "tsort gave an order" is not "acyclic". An earlier issue body said there was no cycle, and the spec's corpus run found igla race `backend.t27` <-> `rtl.t27`. Read stderr, or use the - spec's `cycle=` flag. + spec's `cycle=` flag. That cycle is broken in #10689. Since then, a loop on stderr is a new + regression. +6. Breaking a cycle the view finds. First count the names that cross the back edge. In #10689, + one invariant used one function, so the invariant moved to the side that already had the + import, and nothing was copied. Then compare `test-report` against **master**, not against + "passes". The igla race specs are BLOCKED at a zig error on master, so the right claim is + "the same verdict as before", not "the tests pass". +7. Before you open a PR that adds a spec, run `python3 tools/dupe_scan.py` on the lab. The + issue gate auto-merges non-draft PRs even when a check is red: #10681 merged with a copy of + `lit_len` that was red on `duplicate-bodies` until #10688. Reuse the existing body through + `use`, and do not `--bless` a copy you made by accident. ## Application: topic map (gHashTag/trinity#1677) diff --git a/.trinity/seals/Backend.json b/.trinity/seals/Backend.json index db516e20db..5b4cd25bdc 100644 --- a/.trinity/seals/Backend.json +++ b/.trinity/seals/Backend.json @@ -1,14 +1,14 @@ { - "gen_hash_c": "sha256:d44b86294e7fdcaa56dd16e77fc9c93b2308b213b1cc8e8d8f286fe93fe00957", - "gen_hash_rust": "sha256:952baf28a474b4e42df46629709567c37218e33d007fc2045b6cec1cb76ee1c1", - "gen_hash_verilog": "sha256:f365308297d87d4fa7268b80ec6d90ad91a2ca026d8ea6cf56716a75efcc3277", - "gen_hash_zig": "sha256:496461fe415cd94c7ed5310d251ab365d672e82df9d846e403007a54070b8bf4", + "gen_hash_c": "sha256:09758685b2bb5056bed4d6ddcf3650937da8197d5211b1af67cd74dc38d2ed93", + "gen_hash_rust": "sha256:03e4c010869cf315d4d1fdcd66a665275b07e902538781065c525eef17a97c6e", + "gen_hash_verilog": "sha256:8c40cd7b61efc90888c309bb04c9800aba62e9f85683d8661aa7e4d6a058969d", + "gen_hash_zig": "sha256:cc538cb2b28c20c7e489224f4e69f3a2a78c1a2c0d5b8622ae283fa0c15d2bd1", "module": "Backend", "ring": 32, - "sealed_at": "2026-10-06T13:02:21Z", - "spec_hash": "sha256:5751bad1c46c48b87b6dd75917a6b559282eb747ef2417d16a5cd574b3eb4914", + "sealed_at": "2026-10-18T22:17:32Z", + "spec_hash": "sha256:ce708cb5e7af22cab685c6ae4d638e52cc35ad5a92c4e8bbda052bb17a106612", "spec_path": "specs/igla/race/backend.t27", "tests": { - "blocked": "does not compile: /tmp/t27c-test-report-backend-3532593/spec.zig:107:47: error: use of undeclared identifier 'char'" + "blocked": "does not compile: spec.zig:107:47: error: use of undeclared identifier 'char'" } } \ No newline at end of file diff --git a/.trinity/seals/RTL.json b/.trinity/seals/RTL.json index 22a0ce40bc..717f418151 100644 --- a/.trinity/seals/RTL.json +++ b/.trinity/seals/RTL.json @@ -1,14 +1,14 @@ { - "gen_hash_c": "sha256:8a2aadca693825d47758c21f6d7f7a9be6e48cd1435561ac92e82af4ec2d006c", - "gen_hash_rust": "sha256:e3d471097e8b6cdab57094b32e1d990b63efbdfa8b4ce28681e34573edff5d88", - "gen_hash_verilog": "sha256:d211220b876e0ff3a84b44de3a618dc7a8eeb8e5b6e7a54294fadf371e12af6d", - "gen_hash_zig": "sha256:44f7ec4c0e8c6ff6478343e4108f2ed1574a494d6e5ffb42c759a81c8e4ca6b7", + "gen_hash_c": "sha256:c565444cad1ee91d30602bad455e4c0ea7cf5af1bf6b04c3cb6b7e94b9f6a5ae", + "gen_hash_rust": "sha256:5ec5945bf1dbfa1eed9a5fffd9d209df88bdbcfd06d8cfae198cb44155379036", + "gen_hash_verilog": "sha256:3ab3ddc5f1d2b1c9677fa9db578fbbd2c07138110e66f8630aa9effe5104a785", + "gen_hash_zig": "sha256:efa8924165a1f1ca0c63936810ba4ae18b0627606abddf7232e4a7d9c4e04e40", "module": "RTL", "ring": 32, - "sealed_at": "2026-10-11T10:43:15Z", - "spec_hash": "sha256:d062a67d5cea57f6533fdc506780b589c98ff079f673b59676d7062dc3ae2b56", + "sealed_at": "2026-10-18T22:17:35Z", + "spec_hash": "sha256:78d32ad792d742086ec6ec1a4c33bc2abb864f7fe2c6044868ebb2c6aaf81ee3", "spec_path": "specs/igla/race/rtl.t27", "tests": { - "blocked": "does not compile: spec.zig:188:21: error: use of undeclared identifier 'opcode_name'" + "blocked": "does not compile: spec.zig:187:21: error: use of undeclared identifier 'opcode_name'" } } \ No newline at end of file diff --git a/.trinity/seals/race_igla-race-backend.json b/.trinity/seals/race_igla-race-backend.json index e771680b80..5ff76c7c5a 100644 --- a/.trinity/seals/race_igla-race-backend.json +++ b/.trinity/seals/race_igla-race-backend.json @@ -1,15 +1,32 @@ { - "gen_hash_c": "sha256:d44b86294e7fdcaa56dd16e77fc9c93b2308b213b1cc8e8d8f286fe93fe00957", - "gen_hash_rust": "sha256:952baf28a474b4e42df46629709567c37218e33d007fc2045b6cec1cb76ee1c1", - "gen_hash_verilog": "sha256:f365308297d87d4fa7268b80ec6d90ad91a2ca026d8ea6cf56716a75efcc3277", - "gen_hash_zig": "sha256:496461fe415cd94c7ed5310d251ab365d672e82df9d846e403007a54070b8bf4", + "built_by": "t27c-bootstrap@0.5.2+9448ab4be", + "closure": [ + { + "spec": "specs/base/types.t27", + "spec_hash": "sha256:3c2fb2a2edf20e90bc76798fb5d12690b2f60fc0f5bbf2f6052936e22d6e62e2" + }, + { + "spec": "specs/igla/race/rtl.t27", + "spec_hash": "sha256:78d32ad792d742086ec6ec1a4c33bc2abb864f7fe2c6044868ebb2c6aaf81ee3" + } + ], + "config": "gen=c,rust,verilog,zig;tests=zig", + "gen_hash_c": "sha256:09758685b2bb5056bed4d6ddcf3650937da8197d5211b1af67cd74dc38d2ed93", + "gen_hash_rust": "sha256:03e4c010869cf315d4d1fdcd66a665275b07e902538781065c525eef17a97c6e", + "gen_hash_verilog": "sha256:8c40cd7b61efc90888c309bb04c9800aba62e9f85683d8661aa7e4d6a058969d", + "gen_hash_zig": "sha256:cc538cb2b28c20c7e489224f4e69f3a2a78c1a2c0d5b8622ae283fa0c15d2bd1", "module": "igla-race-backend", "ring": 12, - "sealed_at": "2026-10-06T13:02:21Z", - "sealed_by": "t27c-bootstrap@0.4.0", - "spec_hash": "sha256:5751bad1c46c48b87b6dd75917a6b559282eb747ef2417d16a5cd574b3eb4914", + "seal_schema": 2, + "sealed_at": "2026-10-18T22:17:32Z", + "sealed_by": "t27c-bootstrap@0.5.2", + "spec_hash": "sha256:ce708cb5e7af22cab685c6ae4d638e52cc35ad5a92c4e8bbda052bb17a106612", "spec_path": "specs/igla/race/backend.t27", "tests": { - "blocked": "does not compile: /tmp/t27c-test-report-backend-3532593/spec.zig:107:47: error: use of undeclared identifier 'char'" + "blocked": "does not compile: spec.zig:107:47: error: use of undeclared identifier 'char'" + }, + "toolchain": { + "test_runner": "sha256:8512b80da533b79289110fca4a65f3336abd7a059ca4b72ea595d5e33ff8ad10", + "zig": "0.16.0" } } \ No newline at end of file diff --git a/.trinity/seals/race_igla-race-eda.json b/.trinity/seals/race_igla-race-eda.json index 66bf943138..fed32b7b0d 100644 --- a/.trinity/seals/race_igla-race-eda.json +++ b/.trinity/seals/race_igla-race-eda.json @@ -1,15 +1,32 @@ { + "built_by": "t27c-bootstrap@0.5.2+9448ab4be", + "closure": [ + { + "spec": "specs/base/types.t27", + "spec_hash": "sha256:3c2fb2a2edf20e90bc76798fb5d12690b2f60fc0f5bbf2f6052936e22d6e62e2" + }, + { + "spec": "specs/igla/race/rtl.t27", + "spec_hash": "sha256:78d32ad792d742086ec6ec1a4c33bc2abb864f7fe2c6044868ebb2c6aaf81ee3" + } + ], + "config": "gen=c,rust,verilog,zig;tests=zig", "gen_hash_c": "sha256:354b227a1b2afa6eafd1796476f021b94ed931ff509686b45b7b0fbaa0518ab2", "gen_hash_rust": "sha256:842b705e528cbd884afda84dac14a8dea9bd48ec8db503ba5532ac9507f559b3", "gen_hash_verilog": "sha256:067413bf2da4752214c260dd88f7bb1421280afc2a936b6e5fd8c0c870294c6b", "gen_hash_zig": "sha256:2ac1f6921da1b2313551f168791c707568aa8a1ba3038057280b53838bad2590", "module": "igla-race-eda", "ring": 12, - "sealed_at": "2026-10-06T13:02:22Z", - "sealed_by": "t27c-bootstrap@0.4.0", + "seal_schema": 2, + "sealed_at": "2026-10-18T22:17:37Z", + "sealed_by": "t27c-bootstrap@0.5.2", "spec_hash": "sha256:d690f4e6293ffb745638b1a134bfddb550b6a4dd96f358abebb240e8c5190f27", "spec_path": "specs/igla/race/eda.t27", "tests": { - "blocked": "does not compile: /tmp/t27c-test-report-eda-3532650/spec.zig:381:5: error: use of undeclared identifier 'latency_ms'" + "blocked": "does not compile: spec.zig:381:5: error: use of undeclared identifier 'latency_ms'" + }, + "toolchain": { + "test_runner": "sha256:8512b80da533b79289110fca4a65f3336abd7a059ca4b72ea595d5e33ff8ad10", + "zig": "0.16.0" } } \ No newline at end of file diff --git a/.trinity/seals/race_igla-race-rtl.json b/.trinity/seals/race_igla-race-rtl.json index e00a77a200..402bc1b4c9 100644 --- a/.trinity/seals/race_igla-race-rtl.json +++ b/.trinity/seals/race_igla-race-rtl.json @@ -1,36 +1,32 @@ { - "built_by": "t27c-bootstrap@0.5.2+cc19d1fcd", + "built_by": "t27c-bootstrap@0.5.2+9448ab4be", "closure": [ { "spec": "specs/base/types.t27", "spec_hash": "sha256:3c2fb2a2edf20e90bc76798fb5d12690b2f60fc0f5bbf2f6052936e22d6e62e2" }, - { - "spec": "specs/igla/race/backend.t27", - "spec_hash": "sha256:5751bad1c46c48b87b6dd75917a6b559282eb747ef2417d16a5cd574b3eb4914" - }, { "spec": "specs/math/constants.t27", "spec_hash": "sha256:57187e7afda1d88167b2af0382ad7f0623aa6b269ba020a78e3ffeebba1161bb" } ], "config": "gen=c,rust,verilog,zig;tests=zig", - "gen_hash_c": "sha256:8a2aadca693825d47758c21f6d7f7a9be6e48cd1435561ac92e82af4ec2d006c", - "gen_hash_rust": "sha256:e3d471097e8b6cdab57094b32e1d990b63efbdfa8b4ce28681e34573edff5d88", - "gen_hash_verilog": "sha256:d211220b876e0ff3a84b44de3a618dc7a8eeb8e5b6e7a54294fadf371e12af6d", - "gen_hash_zig": "sha256:44f7ec4c0e8c6ff6478343e4108f2ed1574a494d6e5ffb42c759a81c8e4ca6b7", + "gen_hash_c": "sha256:c565444cad1ee91d30602bad455e4c0ea7cf5af1bf6b04c3cb6b7e94b9f6a5ae", + "gen_hash_rust": "sha256:5ec5945bf1dbfa1eed9a5fffd9d209df88bdbcfd06d8cfae198cb44155379036", + "gen_hash_verilog": "sha256:3ab3ddc5f1d2b1c9677fa9db578fbbd2c07138110e66f8630aa9effe5104a785", + "gen_hash_zig": "sha256:efa8924165a1f1ca0c63936810ba4ae18b0627606abddf7232e4a7d9c4e04e40", "module": "igla-race-rtl", "ring": 12, "seal_schema": 2, - "sealed_at": "2026-10-11T10:43:15Z", + "sealed_at": "2026-10-18T22:17:35Z", "sealed_by": "t27c-bootstrap@0.5.2", - "spec_hash": "sha256:d062a67d5cea57f6533fdc506780b589c98ff079f673b59676d7062dc3ae2b56", + "spec_hash": "sha256:78d32ad792d742086ec6ec1a4c33bc2abb864f7fe2c6044868ebb2c6aaf81ee3", "spec_path": "specs/igla/race/rtl.t27", "tests": { - "blocked": "does not compile: spec.zig:188:21: error: use of undeclared identifier 'opcode_name'" + "blocked": "does not compile: spec.zig:187:21: error: use of undeclared identifier 'opcode_name'" }, "toolchain": { - "test_runner": "sha256:1982ae948e24d00c5d221ccec12dfce1eb01204b53e37b0f857f93b16d64629d", + "test_runner": "sha256:8512b80da533b79289110fca4a65f3336abd7a059ca4b72ea595d5e33ff8ad10", "zig": "0.16.0" } } \ No newline at end of file diff --git a/.trinity/seals/race_igla-race-yosys.json b/.trinity/seals/race_igla-race-yosys.json index 6f91d06cd5..7aa0b98802 100644 --- a/.trinity/seals/race_igla-race-yosys.json +++ b/.trinity/seals/race_igla-race-yosys.json @@ -1,5 +1,5 @@ { - "built_by": "t27c-bootstrap@0.5.2+cc19d1fcd", + "built_by": "t27c-bootstrap@0.5.2+9448ab4be", "closure": [ { "spec": "specs/base/types.t27", @@ -11,7 +11,7 @@ }, { "spec": "specs/igla/race/rtl.t27", - "spec_hash": "sha256:d062a67d5cea57f6533fdc506780b589c98ff079f673b59676d7062dc3ae2b56" + "spec_hash": "sha256:78d32ad792d742086ec6ec1a4c33bc2abb864f7fe2c6044868ebb2c6aaf81ee3" } ], "config": "gen=c,rust,verilog,zig;tests=zig", @@ -22,7 +22,7 @@ "module": "igla-race-yosys", "ring": 12, "seal_schema": 2, - "sealed_at": "2026-10-11T10:43:16Z", + "sealed_at": "2026-10-18T22:17:36Z", "sealed_by": "t27c-bootstrap@0.5.2", "spec_hash": "sha256:1c2c4ed75fb636b5111a9da51fa55a1fa03fc689daab0159c3d2dfce66984c99", "spec_path": "specs/igla/race/yosys.t27", @@ -30,7 +30,7 @@ "blocked": "does not compile: spec.zig:241:11: error: use of undeclared identifier 'eval'" }, "toolchain": { - "test_runner": "sha256:1982ae948e24d00c5d221ccec12dfce1eb01204b53e37b0f857f93b16d64629d", + "test_runner": "sha256:8512b80da533b79289110fca4a65f3336abd7a059ca4b72ea595d5e33ff8ad10", "zig": "0.16.0" } } \ No newline at end of file diff --git a/specs/igla/race/backend.t27 b/specs/igla/race/backend.t27 index 4f86c0bb9a..a2eb4e051d 100644 --- a/specs/igla/race/backend.t27 +++ b/specs/igla/race/backend.t27 @@ -2550,3 +2550,10 @@ test igla_race_backend_w392_batch_depth_invariant_2 { } invariant igla_race_backend_w392_depth: true + +// Moved here from rtl.t27, which imported this spec only for contains_multiply in this invariant. +// rtl.t27 no longer imports backend, so the backend <-> rtl import cycle is gone (#10682). +invariant rtl_count_mul_ops_comment_ignored_inv: + forall s : string + contains_multiply(s) == false ==> + count_mul_ops(s) == 0 diff --git a/specs/igla/race/rtl.t27 b/specs/igla/race/rtl.t27 index 8c571732db..909d80e0b3 100644 --- a/specs/igla/race/rtl.t27 +++ b/specs/igla/race/rtl.t27 @@ -8,7 +8,6 @@ module igla-race-rtl; use base::types; use math::constants; -use igla::race::backend; // ============================================================================ // 1. RTL Generation Constants @@ -1008,11 +1007,6 @@ test rtl_count_mul_ops_comment_ignored when n = count_mul_ops(expr) then n == 0 -invariant rtl_count_mul_ops_comment_ignored_inv: - forall s : string - contains_multiply(s) == false ==> - count_mul_ops(s) == 0 - test rtl_emit_vhdl_empty_module_has_entity given m = RtlModule { name: "test", inputs: []Signal{}, outputs: []Signal{}, wires: []Signal{}, assigns: []Assignment{}, instances: []Instance{}, sacred_chain: []u8{} } when v = emit_vhdl(m)