Skip to content

human encoding: fix a couple round-tripping bugs - #395

Merged
apoelstra merged 3 commits into
BlockstreamResearch:masterfrom
apoelstra:2026-10/human-encoding
Oct 20, 2026
Merged

apoelstra merged 3 commits into
BlockstreamResearch:masterfrom
apoelstra:2026-10/human-encoding

Conversation

@apoelstra

Copy link
Copy Markdown
Collaborator

Written by GLM-5.3-Flash in Hermes Agent. I tidied up some tests, rearranged commits, and rewrote commit messages, but otherwise this was one-shotted.

Fixes #394

`FailEntropy`'s `Display` impl renders bare hex, but the human-readable
lexer only accepts hex literals with a `0x` prefix. So any program
containing a `fail` node was serialized by `Forest::string_serialize`
into a string that `Forest::parse` rejected ("unexpected character `0`"),
breaking the parse/serialize round-trip in the same way as issue BlockstreamResearch#394.

Emit `fail 0x...` so the output re-parses.

Written by GLM-5.3-Flash in Hermes Agent.
The type `Display` implementations (`types::Final` and `types::Incomplete`)
render the sum `1 + A` as `A?`. But the parser didn't accept this notation.
Update the parser and document the new syntax in the human encoding README.

Fixes BlockstreamResearch#394.

Written by GLM-5.3-Flash in Hermes Agent.
Add tests covering the two serialization bugs fixed in the previous
commits:

* `parse::ast`: assert that the `A?` display shorthand parses to `1 + A`,
  binds tighter than `+`/`*`, supports nesting (`2??`), and is accepted
  in expression type ascriptions.
* `human_encoding`: assert that `Forest::string_serialize` output
  re-parses to an equal forest for the issue BlockstreamResearch#394 reproducer
  (`- := ?` / `a: v+2 -> v`), for the shorthand in nested and compound
  type positions, and for a program containing a `fail` node (including
  the `0x` prefix on the entropy).

Written by GLM-5.3-Flash in Hermes Agent.
@apoelstra

Copy link
Copy Markdown
Collaborator Author

On 07ebcbb successfully ran local tests

@stringhandler stringhandler left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

utACK 07ebcbb

@apoelstra
apoelstra merged commit a66320a into BlockstreamResearch:master Oct 20, 2026
26 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fuzz failure in parse_human

2 participants