Skip to content

The formal workflow has never run, and my count of the converter keys was wrong in both directions #2725

Description

@gHashTag

Three things, and the first is that the gate I added yesterday has still never run

1. formal-yosys.yml has never executed. Not once.

Yesterday I found the harness self-check sitting in a job that never installs
Zig, and fixed that. The fix was to a workflow that does not run at all:

default branch:                 master
formal-yosys.yml on origin/master:   ABSENT
triggers:                       pull_request/push, branches: [master]
gh api .../actions/workflows:   not known to Actions

A workflow absent from the default branch, whose only triggers name a branch it
is not on, cannot fire. GitHub has no record of it ever running. The missing Zig
was the second reason it could not work.

Auditing all 26 workflows in the tree, 2 are absent from master:
formal-yosys.yml and formal-mutation.yml — both the formal ones, both
unknown to Actions, neither ever run. The other 24 are on master.

The branch holding them is 1213 commits ahead of master, so opening a PR to
land them is not a call I should make unilaterally. Flagging rather than doing.

2. My own count of the converter keys was wrong, in both directions

Published yesterday: "union: and cases: carry nested maps per case, which
the flat field grammar cannot express."
Measured structurally across all 366
ancestors — classifying each bullet as bare / tag: Type / nested map:

key blocks bare payload nested map
enum: 31 162 0 0
variants: 43 204 12 0
union: 2 0 15 0
cases: 2 10 0 0

There is not one nested map anywhere. cases: is the same bare-name list as
enum: under a third spelling. union: is a tagged union, which the emitter
has supported since the union(enum) work.

And a shape-count of union: reports 6 blocks / 27 pairs, which is what I
would have published had I not dumped the blocks verbatim first. Four of those
blocks are a function named union in tri_bitset.tri and
tri_disjoint_set.triunion: at indent 2 with params:/returns: — and
12 of the 27 "payloads" are its parameters (- a:, - b:, - allocator:).
The original "2 blocks" was right; my correction to 6 was the error.

This is the fourth time in this loop that a count has been the reach of a
query rather than a count of a thing. The new twist is that the collision was
a homonym: same key, different section.

3. The fix has no routed input, so it is proved by test or not at all

get_route is a hardcoded table. 206 of 366 ancestors have no entry, and
every skip is the same message. Of the 38 files carrying a variant key at type
level, 13 are routed; the 25 unrouted ones include both union: blocks
(dashboard_agent.tri) and the only file whose variants: carry payload types
(tracer.tri).

So on the real corpus the payload branch emits zero union(enum)
declarations — a green conversion says nothing about it. Five unit tests now
exercise the shapes directly, and one of them immediately caught a hole: a
quoted right-hand side was stripped of its quotes, so - status: "OK" read as
the type OK and would have emitted status : OK as a union payload.

Regression check

Built HEAD's converter and mine, converted the whole ancestor tree with each,
diffed:

files:  HEAD 215   mine 215   new 0   lost 0
routed files whose output CHANGED: 1

The one change is an improvement to something already broken —
exit_codes.t27 emitted - success : 0, with the YAML dash glued to the field
name. Now success : 0. Still not valid Zig, but wrong in one way instead of
two.

Also: the self-check leaks a cache directory per run

harness_selfcheck.py sets ZIG_*_CACHE_DIR to /tmp/t27_selfcheck_<key> and
never removes it. Nine directories, ~45 MB each. Disk went under the working
floor twice this session and this was part of it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions