fpga/ps7: run the ternary MAC in a board's PL, and stop claiming GF-T silicon we cannot show - #382
Open
gHashTag wants to merge 7 commits into
Open
fpga/ps7: run the ternary MAC in a board's PL, and stop claiming GF-T silicon we cannot show#382gHashTag wants to merge 7 commits into
gHashTag wants to merge 7 commits into
Conversation
The Metrics table opens with "Все числа - с on-device логов, без hearsay". On
2026-08-17 three of those numbers disagreed with the repository they describe:
110 test blocks against 118, 4 463 source lines against 7 152, and one ported
T27 spec against 86. Nothing was measured wrongly. The numbers were written
once and never recomputed, which no document can catch by itself.
tri facts recompute the repository metrics, diff against
tri-facts.json, exit 1 on disagreement
tri facts --update accept the measured values as the new baseline
tri status every claim marked hw must still have its evidence file
tri boards probe the nodes: answered / silent / not probed
tri smoke run the M1 crypto smoke test
Two rules are built in. A number a machine can re-derive is never trusted from
prose. And a probe that did not run is reported UNKNOWN, never as zero -- a node
nobody contacted is not a node that is down.
Proven able to fail: putting the README's stale 1 back into tri-facts.json for
t27_specs makes the check report DISAGREES and exit 1. On its first run tri
status found that radio/README.md, cited as the evidence for the AD9361 hw
claim and for six numbers in the Metrics table, is in neither the working tree
nor the published repository.
Also drops the drone wording from the crate manifest. The published README had
already been changed to say mesh and to carry a civilian-connectivity notice;
description and keywords still said drone-mesh, so crates.io metadata
contradicted the repository's own framing.
Translated from the published README, which is already about half Russian; the English half is now Russian too. Structure verified block for block: same heading levels and counts, same table row and column counts, same code fences, blockquotes and rules, and every URL, path, arXiv ID, ORCID and hash unchanged. Four numeric corrections, each checked rather than carried over: 84 -> 83 numeric formats, twice. The live arXiv v2 of 2606.09686 says 83; 84 is the superseded v1 count. (The catalog repo's own README still says 84 and needs the same fix.) 110 -> 118 test blocks, 4 463 -> 7 152 source lines, 1 -> 86 T27 specs. Those three rows now name `tri facts` as their source instead of a shell one-liner, so the value has a producer that fails when it drifts. The line count moved from 6 697 to 7 152 during this very change, because src/bin/tri.rs added 455 lines -- which is the argument for the whole approach, made by accident. The published wording is preserved deliberately: this is a mesh network for civilian use, and the civilian-connectivity notice stays. No drone or military vocabulary appears anywhere in the translation. Note for whoever pushes: the working tree's README.md is OLDER than the published one -- it still says drone-mesh and lacks the civilian notice. Reconcile with origin/main before applying the same three corrections there.
…bout why Three metrics in a table headed "все числа - с on-device логов, без hearsay" disagreed with the tree by 3.9x, 2.4x and 107x: 110 test blocks against 432, 4 463 source lines against 10 805, one T27 spec against 107. The command that catches each is printed in the next column and nothing ran it. The table also UNDERSTATED the project, which is the rarer failure. M2, M3 and M4 were marked -sim / "Not run" while smoke/ holds 53 evidence files from 18-19 July showing two radio hops between four P201 Minis with the coverage seal 0x9DBE2510 identical at all three points, four-node multi-witness capture, and signed Ed25519 receipts. A status table wrong in both directions is not a status table: a reader cannot tell a cautious row from a false one and has to check every row. Corrected here, each row now naming a file that exists: radio/README.md does not exist. It was deleted with the rest of radio/ in b0ef52c "repo cleanup", after f608dad had already removed the reproduction scripts under a zero-.sh/.py rule. The measurement was real and survives at git show b0ef52c^:radio/README.md, so the row now says archive, not hw. Both competitor links were broken. They now point at the files that exist in docs/archive/, including the eight-metric benchmark against MPU5, Rajant, Silvus, Doodle Labs, TrellisWare and goTenna. "никакого излучения в эфир" is contradicted by 30 files in smoke/ describing 2.4 GHz ISM transmission, while REGULATORY_STATUS.md covers 5.8 GHz seven times and 2.4 GHz not once. The band actually used has no regulatory record. README.ru.md carried a THIRD set of wrong numbers - 118 / 7 152 / 86 - because it was measured against a stale local main. The line count is no longer stored in prose at all. The article in docs/blog/ is the honest version of the comparison: tri-net wins one axis of eight, spec openness, and has no measurement at all on throughput, multi-hop falloff, self-healing time or power.
… silicon we cannot show Two things, and they belong together because one settles the other. First, a run. ps7_probe.swab.bin was configured into the PL of a Puzhi P201Mini today and answered: anchor 0x47C0, so it is our bitstream and not the vendor's; heartbeat 6 -> 12, so FCLK reaches the fabric; and the ternary sign-select MAC returned +42, -42, 0, 0, +127 and -127 for weight codes 01, 10, 00, 11 -- all three symbols including both zero encodings, and the edge of the sample range. Log in results/ps7_probe_silicon_2026-08-19.log. The first attempt rebooted the board. FIRST_LOAD.md already explains why -- writing the bitstream while a PL master is mid-transaction hangs the CPU inside the write to the fpga_manager, and only the watchdog ends it -- and says the teardown belongs in the loader. quiesce_and_load.sh is that teardown: kill the sample streams, unbind the AD9361 cores, unbind both DMA engines, drop PL Ethernet, then load. With it the load is clean. `reboot` restored the vendor bitstream and the radio, confirmed. Second, a correction. docs/VERIFIABLE_COMPUTE.md said GF-T runs on real silicon and that the last gap was closed; fpga/gft/SYNTH_RESULTS.md said in the same tree that place-and-route, timing closure and a loadable bitstream are not proven. Both cannot be true. Searching for the artefact -- a place-and-route log naming a gft_*_ax7203 top, a .fasm, a .bit, an openocd transcript, a UART capture -- returns nothing in any branch, and docs/GF_T_PROVEN.md cited .v source files as the evidence for on-chip rows, which is a source file, not a run. The quoted vectors cannot settle it either: they are the same golden vectors the committed Icarus benches carry, so they do not distinguish a board from a testbench. So those claims now read as simulation, with the four artefacts that would close them named in order. The gap is marked OPEN again rather than CLOSED. Nothing about the RTL changed; only what we say we have shown. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The -sim baseline job runs cargo fmt --all --check and this file failed it, which blocked the branch on a formatting diff rather than on anything it claims. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The -sim baseline job treats every clippy warning as an error. One empty format string in the operator CLI held the branch, which is a formatting complaint rather than anything about what the branch claims. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The drift gate went red on every file it checks -- 96 of 96 Rust, 107 of 107 Zig, 75 of 75 C -- which is not a stale file but a stale tree. It was green on main as recently as 9 August; since then t27 master moved and nothing in tri-net re-ran the generator, so the first branch to run the gate inherited the whole accumulated difference. The remedy is the one the gate itself prints on every failing line. Regenerated with t27c built exactly as CI builds it -- gHashTag/t27 at master, `cargo build --release --manifest-path bootstrap/Cargo.toml` -- because a generator built from the repository root produces different output and would have made this worse rather than better: it drops the C test runner. Rust is piped through rustfmt, as the gate requires, since some gen/rust files are `#[path]`-included into src/ and the build gate runs `cargo fmt --all --check` over them. C and Zig are committed as emitted. Verified before pushing rather than after: drift 0 of 289 across all three backends, `cargo fmt --all --check` clean, `cargo clippy --all-targets -D warnings` clean, 415 tests passing. The visible content change is that generated C tests now carry real bodies where the committed files still had `/* TODO: implement test */`. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
27 tasks
Owner
Author
|
Blocked by the drift gate, which is red for reasons this branch does not cause — see #383 A1/A2. This branch touches zero files under |
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.
Two things that belong together: a run, and a correction.
The run.
ps7_probe.swab.binwas configured into the PL of a Puzhi P201Mini on 2026-08-19. Anchor 0x47C0 (our bitstream, not the vendor's), heartbeat 6 → 12 (FCLK reaches the fabric), and the ternary sign-select MAC returned +42, −42, 0, 0, +127, −127 for weight codes 01, 10, 00, 11 — all three symbols including both zero encodings, and the edge of the sample range. Log:fpga/ternary/ps7/results/ps7_probe_silicon_2026-08-19.log.The first attempt rebooted the board.
FIRST_LOAD.mdalready explains why and says the teardown belongs in the loader;quiesce_and_load.shis that teardown.rebootrestored the vendor bitstream and the radio, confirmed.The correction.
docs/VERIFIABLE_COMPUTE.mdsaid GF-T runs on real silicon and the last gap was closed;fpga/gft/SYNTH_RESULTS.mdsaid in the same tree that place-and-route, timing closure and a loadable bitstream are not proven. No artefact for the on-chip claim exists in any branch, anddocs/GF_T_PROVEN.mdcited.vsource files as evidence for on-chip rows. Those claims now read as simulation and name the four artefacts that would close them. No RTL changed.🤖 Generated with Claude Code