Skip to content

Squad bootstrap fails on fresh repositories due to stale validator pin and genesis validation #2067

Closed

Description

@bradygaster

Summary

The Squad bootstrap workflow installed into a fresh consumer repository completed without creating its expected Cast pull request and research-proposals issue. Investigation found two issues in the shipped bootstrap/validator bundle:

  1. workflows/squad-bootstrap.md pinned a SHA-256 that did not match the shipped workflows/shared/squad-cast-validator.mjs resource.
  2. After correcting that pin, first-run validation treated the intentional absence of a committed .squad/casting/registry.json and history.json as an error. The agent spent its execution window investigating an unavoidable genesis-state diagnostic and eventually timed out.

Reproduction

Install and run the Squad bootstrap workflow in a fresh repository with no existing .squad/casting/registry.json or .squad/casting/history.json committed at HEAD.

The initial run may emit noop instead of the materialization safe output because the generated validator runner expects:

31e568ae4a0cc372f5b79d4b024ba8b7af1f38feac54034221fb203da9918ab4

while the installed shared/squad-cast-validator.mjs resource hashes to:

62fbf47b51639fd1878c143e5176ee3099e390065997411511e9d483d467bbce

After correcting the pin, a subsequent first-run bootstrap can still time out while repeatedly investigating this diagnostic:

registry base: committed registry/history pair is unavailable or malformed

No safe-output item is emitted, so the materialization job is skipped.

Verified fixes

A consumer-side patch successfully resolved the failure by:

  • aligning the bootstrap validator integrity pin with the exact distributed validator bytes;
  • changing committedRegistry() so:
    • neither committed file exists: valid genesis state, return null without an error;
    • only one committed file exists: reject as an incomplete committed pair;
    • both exist: parse and validate as before;
  • raising the bootstrap timeout from 20 to 30 minutes as additional protection;
  • regenerating integrity pins in both squad.md and squad-bootstrap.md;
  • recompiling the affected workflow lock files with the matching gh-aw compiler version.

After these changes, bootstrap completed successfully and created both expected artifacts.

Proposed upstream resolution

  1. Apply the genesis-aware committedRegistry() behavior to the canonical validator.
  2. Regenerate every integrity pin that authenticates squad-cast-validator.mjs.
  3. Recompile the affected workflow lock files with the repository-pinned gh-aw compiler.
  4. Add regression coverage for:
    • a fresh repository with neither committed registry/history file;
    • a repository with only one of the two committed files;
    • an existing valid committed pair;
    • integrity pins matching the exact distributed validator bytes.
  5. Consider retaining the 30-minute bootstrap timeout, although deterministic genesis handling should substantially reduce runtime.

Activity

  1. added a commit that references this issue on Sep 28, 2026
    a662811
  2. added a commit that references this issue on Oct 20, 2026
    c24da2a
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions