Repository navigation
feature-ideation enhancement backfill + dry-run + marker continuity (restore idea-enhancer parity before deprecation) #934
Description
Restore the two idea-enhancer capabilities the #872 consolidation dropped — the existing-backlog sweep and the enhancement dry-run — and guarantee idempotency-marker continuity across the cutover, so .github-private's open, never-ideated human Ideas can be enhanced safely and repeatably before idea-enhancer is deprecated (#876). Planned from idea discussion #933 (companion to consolidation epic #872).
Scope split (critical — mirrors #872)
The enhancement capability lives in the central reusable petry-projects/.github/.github/workflows/feature-ideation-reusable.yml; .github-private's feature-ideation.yml is a thin caller stub pinned to the @feature-ideation/next (dogfood) ring. dev-lead works on this repo's checkout, so the E1/E2/E3 logic changes are out of this repo's direct reach and are listed as untracked prerequisites (central repo). The stories below are the .github-private-local slice: sync the stub to expose the backfill input, document the new modes + operator runbook in the pipeline doc, and validate the backfill (dry-run then live) on the real .github-private backlog.
Success metrics (how we'll know it worked)
- Backfill completeness: after one live backfill run, every open, human-authored, not-yet-enhanced
.github-privateIdeas Discussion carries exactly one structured enhancement comment — the un-enhanced backlog count drops to 0. - Idempotency / no re-enhancement: a second backfill run is a no-op (0 new comments); zero ideas are double-enhanced, including ideas already carrying the legacy
<!-- idea-enhancer:enhanced -->marker. - Dry-run fidelity: the dry-run JSONL artifact lists one entry per candidate Discussion and posts nothing — artifact entry count equals an independent count of candidates.
- Marker continuity: no idea enhanced by the old
idea-enhanceris re-enhanced after cutover (the check honors BOTH markers).
Cost bound
Net cost-neutral-to-reducing: introduces no new cron and reuses feature-ideation's existing model budget and 20-minute timeout. Validation is bounded to one dry-run + one live backfill run over the .github-private backlog (the dry-run is free of model spend beyond candidate gathering). The backfill is operator-triggered (workflow_dispatch), not scheduled, so it adds no recurring spend.
Sequencing into the consolidation
- [Phase 2] Validate the folded feature-ideation enhancement mode on real .github-private Discussions (next ring) #875 (single-idea folded-enhancement validation) precedes the backfill validation here — both exercise the live
@feature-ideation/nextreusable. - [Phase 3] Deprecate idea-enhancer in .github-private: remove workflow + scripts + test, update the pipeline doc #876 (deprecate idea-enhancer) must not start until E1–E3 land and the backfill is validated — see open questions for the re-sequencing action (this plan cannot add a
blocked_byedge onto the pre-existing [Phase 3] Deprecate idea-enhancer in .github-private: remove workflow + scripts + test, update the pipeline doc #876).
References: discussion #933; consolidation epic #872; validation #875; deprecation #876. Inert until a maintainer adds initiative:auto.
Untracked prerequisites
- [petry-projects/.github] feature-ideation-reusable.yml E1 (marker continuity): the enhancement idempotency check recognizes BOTH
<!-- idea-enhancer:enhanced -->and<!-- feature-ideation:enhanced -->as already-enhanced, and new enhancement comments emit a single canonical marker — so no idea is re-enhanced across the idea-enhancer -> feature-ideation cutover. - [petry-projects/.github] feature-ideation-reusable.yml E2 (backfill sweep mode): an
enhance_backlogworkflow_call input makes the reusable sweep the target repo's open, human-authored, not-yet-enhanced Ideas and post exactly ONE structured enhancement comment each (idempotent via the marker; bot-authored + already-enhanced skipped) — porting the scripts/idea-enhancer/{gather-candidates,post-enhancement}.sh logic into the central repo. - [petry-projects/.github] feature-ideation-reusable.yml E3 (backfill dry-run):
dry_run=true+enhance_backloglogs the intended per-Discussion enhancement comments to the JSONL artifact and posts nothing (one entry per candidate Discussion). - [petry-projects/.github] standards/workflows/feature-ideation.yml: the canonical stub template gains the
enhance_backlogworkflow_dispatch input (and itswith:forward) so.github-private's stub can sync to it verbatim without drift (AGENTS.md: workflow changes 'must use templates from standards/workflows/ verbatim'). - [petry-projects/.github] ci-standards (the feature-ideation standard section) documents the backfill + dry-run modes — the central half of the docs requirement; the
.github-privatepipeline doc (Story 2) is the local half.
Planned from idea discussion #933 by the BMAD Scrum Master initiative-planner. Inert until a maintainer adds initiative:auto.
Activity
enhance_backlog#935don-petry commentedon Jun 25, 2026
Dev-Lead Implementation Plan
Issue: #934 — feature-ideation enhancement backfill + dry-run + marker continuity (restore idea-enhancer parity before deprecation)
Scope
This is the
.github-private-local slice of #934 (mirrors the #872 scope split): expose the operator-triggered backfill input on the thinfeature-ideation.ymlcaller stub and document the new backfill + dry-run modes and operator runbook in the pipeline doc. The enhancement logic itself (E1 marker continuity, E2 backfill sweep, E3 backfill dry-run) lives in the centralpetry-projects/.githubreusable and is an untracked prerequisite out of this repo's reach.Implementation Checklist
.github/workflows/feature-ideation.yml— add theenhance_backlog(boolean, default false)workflow_dispatchinput and forward it in thewith:block (enhance_backlog: ${{ inputs.enhance_backlog || false }}), matching the canonical stub-template shape so the verbatim sync lands without drift. Operator-triggered only (no new cron), pairs with the existingdry_runinput.docs/initiatives/idea-to-initiative-pipeline.md— document the folded backfill sweep + dry-run modes and an operator runbook (dry-run-then-live) for the.github-privatebacklog.Tests to Write
tests/test_feature_ideation.bats— assert the stub declares theenhance_backlogworkflow_dispatch input and forwards it to the reusable inwith:.Test Command
scripts/run-bats.sh tests/test_feature_ideation.bats(full suite via thebatsjob inlint.yml); repo lint viabash .dev-lead/scripts/dev-lead-lint.sh.Out of reach (noted for sequencing)
petry-projects/.github(central reusable) — untracked prerequisites.workflow_dispatch; it cannot be exercised from this repo's checkout. Flagged as a follow-up gated on E1–E3 landing, and a prerequisite for [Phase 3] Deprecate idea-enhancer in .github-private: remove workflow + scripts + test, update the pipeline doc #876 (deprecate idea-enhancer).don-petry commentedon Jun 25, 2026
Dev-Lead: Implementation Complete
Implemented the
.github-private-local slice of #934 (the scope split mirrors #872): expose the operator-triggered backfill input on the thinfeature-ideation.ymlcaller stub, and document the backfill + dry-run modes and an operator runbook in the pipeline doc. The enhancement logic (E1 marker continuity, E2 sweep, E3 dry-run) lives in the centralpetry-projects/.githubreusable and remains an untracked prerequisite out of this repo's reach.Plan Execution
enhance_backlog(boolean, defaultfalse)workflow_dispatchinput to the stub and forwarded it (enhance_backlog: ${{ inputs.enhance_backlog || false }}), matching the canonical stub-template shape (same pattern as the existingdry_run) so the eventual verbatim sync lands drift-free. Operator-triggered only — no new cron.docs/initiatives/idea-to-initiative-pipeline.md.enhance_backlog.Test Results
Files Changed
.github/workflows/feature-ideation.yml: added theenhance_backlogworkflow_dispatch input + itswith:forward to the reusable.docs/initiatives/idea-to-initiative-pipeline.md: new "Enhancement is folding into feature-ideation (Initiative: Consolidate Discussion-triggered ideation into feature-ideation, deprecate idea-enhancer, and ring-release fleet-wide #872) — backfill + dry-run" subsection + operator runbook.tests/test_feature_ideation.bats: two regression tests for the input declaration and the forward (already in the CIbatslist).Notes — out of reach / sequencing (no code possible from this checkout)
petry-projects/.github(feature-ideation-reusable.yml) — untracked prerequisites. The stub forward assumes the@feature-ideation/nextreusable already acceptsenhance_backlogas aworkflow_callinput; per the issue's sequencing those land in the central repo before this stub sync, so the dispatch won't error on an unknown input..github-privatebacklog, then a no-op re-run) is operator-triggeredworkflow_dispatchand depends on E2/E3 being live; it cannot be exercised from this repo's checkout. Flagged as the follow-up that must complete before [Phase 3] Deprecate idea-enhancer in .github-private: remove workflow + scripts + test, update the pipeline doc #876 (deprecate idea-enhancer) starts.scripts/idea-enhancer/*.shwas intentionally not modified — the bidirectional both-markers check is E1, scoped to the central reusable per the issue's scope split. The local enhancer's own marker is unchanged.feat: implement issue #934 — feature-ideation enhancement backfill + …
feat(feature-ideation): backlog enhancement sweep + dry-run + marker …
feat: implement issue #934 — feature-ideation enhancement backfill + …
feat: implement issue #934 — feature-ideation enhancement backfill + …
feat: implement issue #934 — feature-ideation enhancement backfill + …
feat: implement issue #934 — feature-ideation enhancement backfill + …
feat: implement issue #934 — feature-ideation enhancement backfill + …
feat: implement issue #934 — feature-ideation enhancement backfill + …
feat: implement issue #934 — feature-ideation enhancement backfill + …
feat: implement issue #934 — feature-ideation enhancement backfill + …
feat: implement issue #934 — feature-ideation enhancement backfill + …
feat: implement issue #934 — feature-ideation enhancement backfill + …