Skip to content

PerfStudio v0.6.0

Latest

Choose a tag to compare

@github-actions github-actions released this 14 Aug 17:04
· 1 commit to main since this release

Added

  • A pin on an edge-connector finger is a DRC error (edge-connector-conflict), the
    third member of the family with mounting-hole-conflict and cut-track-conflict and
    the most absolute of the three: a bore and a cut each destroy the pad and leave a hole,
    but a finger is solid copper that was never drilled (geometry.undrilled_holes), so a
    through-hole lead cannot be fitted there at all. Nothing checked it, so a part dropped on
    the finger strip was accepted in silence — and the finger strip runs along the board
    edge, which is exactly where a connector or a terminal block gets placed.

Changed

  • The placement ghost goes red over a hole with no pad. A mounting bore, an
    edge-connector finger and a cut track all leave a position on the grid with nothing to
    solder a lead into, and DRC has always called each of them an error — but the ghost
    stayed green right up to the click, so the part went down and the only thing that ever
    said so was a line in the DRC panel afterwards. The status line now names it too. The
    placement is still not refused: a mounting hole can be added over a part that was
    already there, so refusing would only make the same board harder to reach while leaving
    it reachable.

  • The blank-board guidance appears until you have placed your first part, then stops.
    It is for the first launch; repeating it on every launch afterwards is the application
    explaining its own front door to somebody who has been through it a hundred times — and
    there was nowhere to click it away, because the block is transparent to the mouse by
    design.

  • Two solder traces running side by side are one row in the findings panel, not
    sixteen.
    solder-trace-proximity fires once per pad per trace, so eight pads of
    perfectly ordinary parallel routing put sixteen copies of one sentence in the panel and
    pushed everything else off the bottom — which is how the most valuable rule in the tool
    became the one people scroll past. Gathered by the run now (C4–J4 · 8 pads), with
    every pad still there one level down.

    • The rule itself is unchanged, and deliberately: it is a warning, not an error —
      nothing is refused and the board is legal — and DRC's output is compared byte-for-byte
      against the reference implementation this port is proved against
      (test_matches_typescript_golden_drc). Grouping in the engine was written, measured
      at 8 findings → 4 on random-09, and reverted for that reason. The noise was never in
      the engine; it was in the panel.
  • Auto-place stops turning parts for nothing. The annealer accepts any move whose
    cost delta is <= 0, and a rotation's delta is exactly zero for every part the cost
    function cannot tell apart turned — one on no net, or one whose courtyard is square. So
    it turned parts for no reason at all: on the dense fixture it turned 11, and 5 of
    those cost 0.00 to turn back. That is not free to whoever is holding the iron — every
    rotation is an orientation to get right at the bench and a polarity line in the build
    guide, and a plan reading "11 turned" describes work the tool did rather than noise it
    made. When the placer has no preference, the user's own orientation is now the one
    kept: across eight fixtures and eight seeds, parts turned went from 46 to 30 with the
    routed cost identical to the last decimal
    .

    • Applied to the WINNER only, after _pick_best has chosen, and checked against the
      router. Tidying every candidate before the choice changes the boards the router is
      shown and therefore which one wins — measured on dense, where doing it that way
      left the mean routed cost 31.5 → 35.9 while the best was unchanged.
    • Letting a rotation nudge the anchor at the same time — the obvious fix for a part
      that can only be turned if it also moves a hole or two — was tried and measured
      worse
      : summed mean routed cost 254.1 → 261.0 at half the rotations nudging, 260.0 at
      a quarter, 262.6 at 0.15, with ne555 losing most of it. That result is written down at
      the proposal site so nobody re-derives it.

Windows - PerfStudio_..._Setup.exe. It is unsigned, so SmartScreen will
warn on first run: More info -> Run anyway. A signed build is planned.

Linux - perfstudio-...-x86_64.AppImage. chmod +x and run it; it needs
glibc 2.35 or newer. If it will not start, the machine has no FUSE 2: install
libfuse2, or run the file with --appimage-extract-and-run, which unpacks it
instead of mounting it.

macOS - perfstudio-...-arm64.dmg, Apple silicon. Drag it to Applications,
then run this before opening it:

xattr -dr com.apple.quarantine /Applications/PerfStudio.app

It is signed ad-hoc but not notarized, so Gatekeeper blocks the first launch.
On macOS 15 and later the dialog it raises defaults to Move to Trash, which
deletes the install. Clearing the flag first avoids the dialog entirely. On an
Intel Mac, install from source.

Anywhere with Python 3.12+: pip install -e . from a clone, then
perfstudio.

This is pre-alpha software. Nobody has yet built a real board by following a
generated guide - check every measurement against the part in your hand.