Skip to content

Fail closed on short password entropy draws - #9526

Merged
briansrls merged 2 commits into
mainfrom
session/valiant-lynx-743
Aug 28, 2026
Merged

briansrls merged 2 commits into
mainfrom
session/valiant-lynx-743

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Summary

  • require every ReadPassword character-class draw to produce exactly one character
  • require the filler draw to produce the requested count before emitting a password
  • return the operation's modeled nonzero refusal instead of silently emitting a weakened, shorter secret

Validation

  • direct shell control: healthy source emits exactly 24 characters
  • direct shell control: exhausted source exits nonzero and emits nothing
  • ctrl-build --remote -- cargo test -p v1-compiler self_parse_all_modules -- --nocapture (1 passed)

@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review August 27, 2026 22:55
gunbai-bot Bot pushed a commit that referenced this pull request Aug 28, 2026
Main's required-ci regen phase fails: v1_compiler_emit_core_support.rs,
v1_compiler_emit_go.rs, v1_compiler_emit_python.rs and
v1_compiler_emit_rust.rs are stale against their .dag authorities. The
build lane stops, the aggregating witnesses context cannot go green, and
nothing merges.

Established from main's own tree rather than inferred: a regen on a clean
worktree at be89e23 reports exactly that four-file drift. It was first
seen as an identical signature on two unrelated PRs (#9522, #9526), which
already ruled out an author having caused it.

Content is the emitter's own output, installed and then verified by a
REBUILT binary: first_generation_equal=true. A single pass would have
self-verified against a binary predating its own emission.

No causing commit is identified and none is needed -- the remedy is
regeneration whichever .dag change moved a type the emitters match on. A
hand repair would be worse than useless here: three of these four files
appear in no conflict report and no diff a reviewer reads, because adding
or changing a type the emitters match on rewrites match arms in every
emitter matching on it. A repair scoped to what a detector reported is
bounded by that detector's coverage.

MIRRORS REGENERATED AT MAIN be89e23. If this PR's build lane reds with
this same four-file signature, check whether the base moved first:
  git log --oneline be89e23..<merge-base> -- 'dag/**' 'src/v1/**/*.dag'
Non-empty means the base advanced and the remedy is an ordinary re-regen at
the new head. Empty means regen is not a fixed point of itself, which is a
different and far more serious defect.
@gunbai-bot
gunbai-bot Bot force-pushed the session/valiant-lynx-743 branch from 34649ea to 1e948b7 Compare August 28, 2026 01:03
@briansrls
briansrls merged commit 31f680d into main Aug 28, 2026
0 of 3 checks passed
@briansrls
briansrls deleted the session/valiant-lynx-743 branch August 28, 2026 17:57
@briansrls
briansrls restored the session/valiant-lynx-743 branch August 28, 2026 18:03
gunbai-bot Bot pushed a commit that referenced this pull request Aug 28, 2026
#9526 repaired ReadPassword on main while this branch repairs ReadBytes. The two
are complementary -- one checks a command substitution's length, the other captures
a producing stage's exit status through a pipe -- and collided only because both
added a dissolution row to the same region and the same import at a different
position. Resolution keeps both rows, dedupes the import, and corrects this
branch's now-stale paragraph deferring the ReadPassword defect.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.

1 participant