Skip to content

feature-ideation.yml: every run fails at 'Install Python jsonschema' — requirements file missing from the pinned tooling checkout #1733

Open

Description

@don-petry

Summary

feature-ideation.yml has failed on every run since at least 2026-08-14. The failure is silent in practice because the discussion: [created] bridge job succeeds — only the downstream ideate job fails, so a Discussion looks like it was handed to the BMAD Analyst when nothing ran.

Found on 2026-09-08 while running an ideation pass on Discussion #1711 (the ADR-0007 agent-ingress initiative). There was no ideation output to fold into that Discussion's scope as a result.

Failure

Job ideate / Gather Project Signals, step Install Python jsonschema:

ERROR: Could not open requirements file: [Errno 2] No such file or directory:
'.feature-ideation-tooling/scripts/feature-ideation-requirements.txt'

The job sparse-checks-out the tooling into .feature-ideation-tooling at a pinned tag (the log shows Note: switching to 'refs/tags/v1'), then runs:

pip install --quiet --require-hashes --only-binary :all: -r .feature-ideation-tooling/scripts/feature-ideation-requirements.txt

The requirements file does not resolve at that path under the pinned v1 tag. The subsequent ideate / BMAD Analyst — Feature Ideation step is skipped, so no ideation ever runs.

Candidate root causes (needs diagnosis, do not guess)

  1. The requirements file was moved or renamed upstream and v1 now points at a tree without it at that path.
  2. The sparse-checkout path list no longer includes scripts/, so the file is simply not materialised.
  3. The v1 tag was moved to a commit that lacks the file.

Cause 1 or 3 would mean the fix is in the tooling repo, not here — worth establishing first, since that changes who can fix it.

Evidence

Run Date Event
34182110246 2026-09-08 workflow_dispatch (bridged from discussion on #1711)
33870995657 2026-09-04 schedule
33203616035 2026-08-28 schedule
32460436434 2026-08-21 schedule
31783699269 2026-08-14 schedule

The last feature-ideation run to succeed predates 2026-08-14.

Acceptance criteria

  1. The root cause is identified as one of the three above (or a fourth), and named explicitly in the fix — including whether the fix belongs in this repo or the tooling repo.
  2. feature-ideation.yml completes the ideate / Gather Project Signals job with the requirements install succeeding, and the BMAD Analyst — Feature Ideation step actually runs rather than being skipped.
  3. Verified by a workflow_dispatch run of feature-ideation.yml that reaches the Analyst step; the run link is recorded on this issue.
  4. The silent-failure mode is closed: a failing ideate job must not leave a bridged Discussion looking successfully handed off. Either the bridge surfaces the downstream failure, or the failure raises an alert the fleet monitor can see. A green bridge over a dead ideate job is the defect that let this run for three-plus weeks.
  5. Any action SHA introduced or changed is looked up via the GitHub API, never guessed (AGENTS.md).

Notes

Prior fleet-monitor issues were filed against this workflow (#1354, #1431) and closed without the failure being resolved — worth a glance to confirm this is not a third recurrence of the same unfixed cause.

Activity

  1. github-actions commented on Sep 8, 2026

    @github-actions
    Contributor

    Thanks for the thorough write-up and the run evidence — this is exactly what makes a bug actionable. Before diving into a fix, the single most important diagnostic step is confirming whether scripts/feature-ideation-requirements.txt exists in the tooling repo's tree at the v1 tag (e.g. via git ls-tree refs/tags/v1 scripts/ in that repo), since that determines whether the fix belongs here or upstream. Could you confirm whether the team has access to that tooling repo to run that check, or share the repo name so it can be inspected?

  2. don-petry commented on Sep 13, 2026

    @don-petry
    CollaboratorAuthor

    Still failing — most recent run 2026-09-11. Releasing.

    Re-verified 2026-09-13. feature-ideation.yml run history in this repo:

    2026-09-11T12:09  completed/failure
    2026-09-08T03:02  completed/failure
    2026-09-04T12:05  completed/failure
    2026-08-28T19:23  completed/failure
    2026-08-21T07:50  completed/failure
    2026-08-14T08:23  completed/failure
    2026-08-07T08:19  completed/failure
    

    Seven consecutive scheduled failures, unbroken since at least 2026-08-07 — earlier than the 08-14 floor this issue records. Nothing has changed since filing.

    The silent-failure property is the part that makes this worth prioritising above its apparent severity: the discussion: [created] bridge job succeeds, so a Discussion looks like it was handed to the BMAD Analyst while the downstream ideate job dies at Install Python jsonschema. There is no failure signal at the surface a human is looking at. A month of ideation passes produced nothing and nobody was told.

    Acceptance criteria

    • Fix the missing requirements file in the pinned tooling checkout so Install Python jsonschema resolves. Name the pin you changed and why the file was absent from it — if the requirements file lives at a path the pinned ref predates, say so rather than pinning to a moving ref.
    • Make the bridge job's success conditional on the downstream job, or emit an explicit failure annotation on the Discussion when ideate fails. A green bridge over a dead pipeline is the actual defect; fixing only the dependency leaves the silence in place.
    • Add a smoke assertion that the workflow's tooling install step succeeds, so the next pin drift fails loudly on the first run instead of the ninetieth.
    • Confirm the fix by a real run, not by inspection — paste the run ID.

    Also clearing needs-human-review: applied by issue-triage at 2026-09-08T11:37 (#1778).

  3. don-petry commented on Sep 13, 2026

    @don-petry
    CollaboratorAuthor

    Dev-Lead Implementation Plan

    Issue: #1733 — feature-ideation.yml: every run fails at 'Install Python jsonschema' — requirements file missing from the pinned tooling checkout

    Root cause (diagnosed, not guessed)

    The tooling checkout in the reusable is not sparse — it checks out the whole
    petry-projects/.github repo at ref: inputs.tooling_ref, whose default is the
    frozen v1 tag
    . The reusable workflow file this repo pins
    (@feature-ideation/v1-next, commit 3f9d24a) runs:

    pip install ... -r .feature-ideation-tooling/scripts/feature-ideation-requirements.txt
    

    but scripts/feature-ideation-requirements.txt does not exist at tag v1
    (commit d3d768d, which predates the file). It does exist at
    feature-ideation/v1-next and main. Verified via the GitHub API:

    ref scripts/feature-ideation-requirements.txt
    v1 (tooling_ref default) 404 — missing
    feature-ideation/v1-next (reusable pin) present
    main present

    This is candidate cause #3 (the v1 tooling tag is stale relative to the
    reusable file's channel) — a skew between the reusable file's channel and its
    tooling_ref default
    . The reusable's design intent is that v1 advances in
    lockstep with the workflow file; it did not.

    Where the canonical fix belongs: the tooling repo (petry-projects/.github)
    must move the v1 tag forward (or realign the reusable's tooling_ref default).
    That is not editable from .github-private.

    In-repo fix (what this PR does): this repo is feature-ideation's next ring and
    already pins the reusable file to @feature-ideation/v1-next. Forward
    tooling_ref: feature-ideation/v1-next from the stub so the tooling checkout is in
    lockstep with the reusable file — resolving the requirements path from this repo
    without waiting on the tooling-repo tag move. Guardrail-safe: tooling_ref is
    declared
    as a workflow_call input at the pinned channel commit (verified), so
    this is not the #1052 channel-skew case.

    Silent-failure closure (AC #4)

    A bridge-watch (bridge waits for the dispatched run) would deadlock: the workflow
    uses concurrency: feature-ideation with cancel-in-progress: false, so the
    dispatched run queues behind the still-running bridge run. Instead, the redispatch
    bridge will surface the dispatched run on the Idea Discussion: after dispatch it
    resolves the dispatched run URL and posts a comment on the Discussion stating the
    handoff is only complete if that run succeeds — so a green bridge can no longer make a
    dead ideate job look successfully handed off. (Run-level failures remain visible to the
    Fleet Monitor, which already tracked this as #1354/#1431.)

    Scope

    Forward tooling_ref so the reusable installs the requirements file that exists at the
    pinned channel, and make the discussion bridge link the dispatched run so a failed
    ideate is no longer a silent green handoff.

    Implementation Checklist

    • .github/workflows/feature-ideation.yml — forward tooling_ref: feature-ideation/v1-next on the ideate reusable call (with rationale comment)
    • .github/workflows/feature-ideation.yml — redispatch job: add discussions: write, resolve the dispatched run URL, post it back to the Idea Discussion
    • AGENTS.md / inline stub comment — document the tooling_ref lockstep + bridge-surfacing deviation

    Tests to Write

    • tests/test_feature_ideation.bats — asserts tooling_ref: feature-ideation/v1-next is forwarded on the reusable call
    • tests/test_feature_ideation.bats — asserts the redispatch job has discussions: write and posts the dispatched run link to the Discussion
    • tests/test_feature_ideation.bats — guard that tooling_ref is not left at the stale v1 default

    Test Command

    bats tests/test_feature_ideation.bats (+ repo lint: bash .dev-lead/scripts/dev-lead-lint.sh)

  4. don-petry commented on Sep 13, 2026

    @don-petry
    CollaboratorAuthor

    Dev-Lead: Progress (in progress — not yet durable)

    Provisional. Nothing is pushed yet; the automation posts the authoritative
    completion record (with PR number + head SHA) after the push. Treat the notes
    below as intent, not delivered results.

    Root cause (diagnosed via the GitHub API — AC#1)

    Candidate cause #3: the tooling checkout tag is stale relative to the reusable file.

    • The reusable pinned here (@feature-ideation/v1-next, 3f9d24a) installs
      .feature-ideation-tooling/scripts/feature-ideation-requirements.txt.
    • It checks out petry-projects/.github at tooling_ref whose default is v1
      (d3d768d), a commit that predates that requirements file → 404 →
      Install Python jsonschema fails every run, the Analyst step is skipped.
    • File presence by ref: v1 → missing; feature-ideation/v1-next → present; main → present.

    Where the canonical fix belongs: the tooling repo petry-projects/.github
    (advance the v1 tag / realign the reusable's tooling_ref default). That is not
    editable from this repo — noted as an upstream follow-up.

    Plan Execution (intended, in this workspace)

    • Forward tooling_ref: feature-ideation/v1-next on the ideate reusable call so the
      tooling checkout is in lockstep with the reusable file this repo pins — the
      requirements path then resolves. Guardrail-checked: tooling_ref is declared at
      the pinned channel (validate-caller-inputs.sh with cross-repo resolution confirms
      forwarded inputs ⊆ declared), so this is not the fix(ci): prevent channel-skew workflow breakage — guard forwarded inputs vs pinned refs + codify the pinning rules (post-#1034) #1052 channel-skew case.
    • Close the silent-failure mode (AC#4): the discussion bridge fires a separate
      workflow_dispatch run and returned green regardless of that run's fate. A
      bridge-watch would deadlock (concurrency: feature-ideation,
      cancel-in-progress: false → the dispatched run queues behind the bridge). Instead
      the bridge now resolves the dispatched run URL and posts it onto the Idea Discussion
      (addDiscussionComment), so a failed ideate is a visible red link rather than a
      silent green handoff. Job granted discussions: write.

    Local check output (provisional — not the pushed run)

    bats tests/test_feature_ideation.bats           → 19/19 (4 new)
    bash .dev-lead/scripts/dev-lead-lint.sh         → all checks passed
    scripts/validate-caller-inputs.sh (cross-repo)  → feature-ideation.yml: forwarded ⊆ declared
    bats tests/caller_stub_freeze.bats              → pass (feature-ideation not frozen; unaffected)
    scripts/validate-workflow-schedules.sh          → OK (no cron change)
    

    Files touched (this workspace, not yet pushed)

    • .github/workflows/feature-ideation.yml: forward tooling_ref; bridge surfaces the dispatched run on the Idea + discussions: write.
    • tests/test_feature_ideation.bats: 4 regression tests (tooling_ref lockstep / not-stale-v1; bridge discussions: write; bridge posts the run link).

    Notes / follow-ups

    • AC#3 verification (a workflow_dispatch run reaching the Analyst step, link
      recorded here) can only be done post-merge — a dispatch now would execute the
      pre-fix workflow on main. Flagging for the post-push step.
    • Upstream follow-up: the durable cross-repo fix is to advance the v1 tooling tag
      (or the reusable's tooling_ref default) in petry-projects/.github; the in-repo
      tooling_ref forward is the correct dogfood-ring mitigation until then.
  5. don-petry commented on Sep 13, 2026

    @don-petry
    CollaboratorAuthor

    Dev-Lead: Implementation Complete — PR #1796

    The implementation for issue #1733 is durable: commits are pushed and a pull request is open. This record is backed by verifiable artifacts you can confirm in one click.

    Review happens on the PR. Acceptance criteria and test results are evidenced by the PR's diff and CI checks — not asserted here. If a later stage fails, this claim is retracted in place.

  6. added 2 commits that reference this issue on Sep 20, 2026
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

    bugBug reportsdev-leadFor dev-lead agent pickup

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions