Skip to content

Improve Jira Epic summaries - #18

Merged
readwrightexecute merged 4 commits into
masterfrom
fix/jira-epic-generated-title
Oct 14, 2026
Merged

readwrightexecute merged 4 commits into
masterfrom
fix/jira-epic-generated-title

Conversation

@readwrightexecute

@readwrightexecute readwrightexecute commented Oct 14, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • Derive Jira Epic summaries from explicit generated titles (Epic Summary: / headings / title labels) or cleaned idea text, avoiding generic Incipit/mega-prompt titles.
  • Add deterministic list formatting for FR, NFR, and AC sections in the Implementation Brief while preserving raw section parsing for Jira Story extraction.
  • Add a human-oriented Planning Summary to the Implementation Brief.
  • Change live Jira Epic descriptions to use a Jira-shaped planning projection instead of the full Implementation Brief; the full brief remains attached as mega-prompt.md.
  • Tighten the webapp section schema/prompts for SHALL-style FR/NFRs, AC-to-FR coverage, story-sized FRs, explicit Epic Summary, and [ASSUMPTION] marking for invented precision.
  • Add deterministic Jira consistency warnings for missing AC coverage, unknown FR references, generic titles, missing FR stories, and broad story summaries.

Tests

  • .venv/bin/python -m pytest --no-cov tests/test_flow_parse.py tests/test_jira_export.py tests/test_download.py
  • .venv/bin/python -m pytest
  • git diff --check

Focused test note: partial selections need --no-cov because the repo coverage gate is configured for the full suite.


Note

Medium Risk
Changes user-visible Jira Epic titles/descriptions and LLM section schema; export behavior is well-tested but alters what lands in Jira vs attachments.

Overview
Improves Jira exports and brief assembly so Epic titles and issue bodies come from structured brief content instead of raw idea truncation.

Jira Epic summaries are now derived deterministically via jira_epic_summary() (explicit Epic Summary: / headings / title labels, cleaned idea text, generic-title rejection, 255-char limit), replacing the old Incipit brief: {idea[:120]} path in main.py.

Implementation Brief gains a Planning Summary block and normalizes FR/NFR/AC sections into markdown bullet lists in assemble_final() while keeping labeled parsing for story extraction.

Live Jira export puts the Jira-shaped planning projection (assemble_jira_export) in the Epic ADF description; the full Implementation Brief still attaches as mega-prompt.md. The export adds Epic outcome/MVP scope/NFRs/Consistency Checks warnings (missing AC coverage, bad FR refs, generic titles, broad stories) and renames Stories → Child Stories.

Wizard prompts (sections.yaml, system.md.j2) push SHALL-style FR/NFRs, story-sized FRs, AC→FR citations, an explicit Epic Summary line, and [ASSUMPTION] for invented precision.

Reviewed by Cursor Bugbot for commit a9203ae. Bugbot is set up for automated code reviews on this repo. Configure here.

@readwrightexecute readwrightexecute left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Implementation review of the new jira_epic_summary flow. The helper, truncation logic, generic-title filtering, and test additions are all well done, and the full webapp suite passes locally (228 passed, coverage gate met). One behavioral concern below: the "prefer generated content" source order ends up preferring the Overview section's first line over the user's idea, which produces worse Epic titles than the previous behavior in the common case where the Overview has no explicit generated title.

🔁 Powered by Looper · runner=reviewer · agent=pi · An autonomous AI dev team for your GitHub repos.

Comment thread webapp/app/wizard/flow.py

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Stale Bugbot comment from a previous run.

Comment thread webapp/app/wizard/flow.py
Comment thread webapp/app/wizard/flow.py
Comment thread webapp/app/wizard/flow.py
Jira Epic summaries now treat a section line as a title source only when
it is an explicit generated heading or title label; the user's cleaned
idea is consulted before falling back to other sections' first lines.
Bare structural headings such as '# Goals' no longer masquerade as
project titles.

Generated-By: looper 0.13.1 (runner=fixer, agent=pi)
@readwrightexecute

Copy link
Copy Markdown
Owner Author

Looper fixer round complete — de3adb7

  • ✅ Review comment on webapp/app/wizard/flow.py:927 (@readwrightexecute) — thread
    • In webapp/app/wizard/flow.py, jira_epic_summary now collects only explicit generated titles (headings/title labels) from the Overview, then consults the cleaned idea, and only then falls back to other sections' bare first lines. _clean_jira_title also rejects bare structural headings like '# Goals' so they can never become the title. Added the two regression tests for the un-labeled sentence and '# Goals' cases, and updated test_export_creates_issue_attaches_and_confirms to assert the idea wins…
  • • Review comment on webapp/app/wizard/flow.py:865 (@cursor) — thread
    • Agent did not provide a decision for this thread
  • • Review comment on webapp/app/wizard/flow.py:870 (@cursor) — thread
    • Agent did not provide a decision for this thread

🔁 Powered by Looper · runner=fixer · agent=pi · An autonomous AI dev team for your GitHub repos.

@readwrightexecute readwrightexecute left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

@readwrightexecute Reviewed the follow-up head (77c570d) against the prior findings, and both are fully addressed.

Verification of the prior must_fix (idea vs. bare Overview line): jira_epic_summary now collects only explicit generated titles (headings/title labels) from the Goals/Overview, then consults the cleaned idea, and only then falls back to other sections' bare first lines; _clean_jira_title also rejects bare structural headings such as # Goals. The two regression tests for the un-labeled-sentence and bare-heading cases are present, and test_export_creates_issue_attaches_and_confirms now correctly asserts the idea (A todo app) wins over the Overview's Build it well. line.

Verification of the new planning-projection work (de3adb7..77c570d): I traced the new assemble_planning_summary, jira_consistency_warnings, and reshaped assemble_jira_export/main.py wiring, checked the regex edge cases (hyphenated ideas survive _JIRA_TITLE_LABEL_RE because the label requires a following colon or dash; AC-EDGE-style labels still parse; epic summary: labels are matched), and ran the full webapp suite locally: 233 passed, 1 xfailed (the pre-existing documented _resolve_section xfail). The full brief is still attached as mega-prompt.md while the Epic description now carries the Jira-shaped projection, and the download tests cover both files.

Nice work — the summary-derivation logic reads cleanly, the consistency warnings are deterministic and well tested, and the tests lock in exactly the behaviors the PR description promises. Approving.

🔁 Powered by Looper · runner=reviewer · agent=pi · An autonomous AI dev team for your GitHub repos.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

There are 3 total unresolved issues (including 2 from previous reviews).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 77c570d. Configure here.

Comment thread webapp/app/wizard/flow.py Outdated

@readwrightexecute readwrightexecute left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Implementation review of head 77c570d. The full webapp suite passes locally (233 passed, 1 xfailed, coverage 96.27%), the Planning Summary / Jira projection rework is well-structured, and the earlier must_fix (idea vs. bare Overview line) is genuinely fixed. Three title-derivation regexes, however, corrupt real project titles in the exact cases this PR exists to fix, so the Jira Epic Summary — the PR's stated goal — comes out wrong for legitimate inputs. The three inline comments each carry concrete reproduction evidence I verified by running the code against the head, plus suggested regex fixes and regression tests. The first two are blocking for the PR's stated goal; the third is a merge-safe hardening of the same heading filter.

🔁 Powered by Looper · runner=reviewer · agent=pi · An autonomous AI dev team for your GitHub repos.

Comment thread webapp/app/wizard/flow.py
Comment thread webapp/app/wizard/flow.py Outdated
Comment thread webapp/app/wizard/flow.py
- _JIRA_TITLE_LABEL_RE: a hyphen only counts as a label separator after
  whitespace; a bare hyphen no longer truncates hyphenated first words
  (e.g. 'Name-tag printer', 'summary-queue for order events').
- _JIRA_GENERIC_PREFIX_RE: 'brief' and 'mega-prompt' match as whole words
  only, so 'briefcase manager' and 'Briefing service' survive; connectors
  (for/about, ':', ' - ', ' < ') stay explicit.
- _JIRA_NONSPECIFIC_HEADING_RE: now matched on the normalized title after
  hashes, list markers, emphasis, and label prefixes are stripped, and
  accepts the 'and' form, so decorated echoes like '**Project**' and
  '## Goals and Background' can no longer become the Epic title.
- Regression tests in webapp/tests/test_flow_parse.py for all three.

Generated-By: looper 0.13.1 (runner=fixer, agent=pi)
@readwrightexecute

Copy link
Copy Markdown
Owner Author

Looper fixer round complete — a9203ae

  • ✅ Review comment on webapp/app/wizard/flow.py:871 (@readwrightexecute) — thread
    • Adopted the suggested fix in webapp/app/wizard/flow.py: _JIRA_TITLE_LABEL_RE now requires whitespace before a hyphen separator (':' may stay bare), and tests assert flow._clean_jira_title('summary-queue for order events') == 'Summary-queue for order events' and flow._clean_jira_title('Name-tag printer') == 'Name-tag printer' in webapp/tests/test_flow_parse.py.
  • ✅ Review comment on webapp/app/wizard/flow.py (@readwrightexecute) — thread
    • Updated _JIRA_GENERIC_PREFIX_RE in webapp/app/wizard/flow.py so 'brief' matches only as a whole word followed by an explicit connector (for/about, ':', or spaced ' - ' / ' < '), and added a regression test asserting flow._clean_jira_title('briefcase manager') == 'Briefcase manager'. One residual edge: 'Brief-2 platform' is still mangled because treating a bare hyphen directly after the word as a separator would re-truncate legitimate compound titles (e.g. 'Brief-2' as a product name); the core w…
  • ✅ Review comment on webapp/app/wizard/flow.py:1023 (@readwrightexecute) — thread
    • As suggested, _JIRA_NONSPECIFIC_HEADING_RE in webapp/app/wizard/flow.py now runs on the normalized title after stripping hashes, emphasis, and label prefixes, and its alternatives accept the 'and' form, so '### Goals & Background', '## Goals and Background', and 'Project' all fall through to the idea. Added regression tests for those exact inputs in webapp/tests/test_flow_parse.py.

🔁 Powered by Looper · runner=fixer · agent=pi · An autonomous AI dev team for your GitHub repos.

@readwrightexecute readwrightexecute left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

@readwrightexecute Reviewed the follow-up head (a9203ae) against the three open must_fix threads from the 77c570d pass, and all three are genuinely addressed with real regression coverage:

  1. Hyphenated first words — _JIRA_TITLE_LABEL_RE now requires a space before a hyphen separator (a bare : still works). Verified locally: summary-queue for order events, Name-tag printer, Title-case editor, and Epic-games launcher all survive intact, while Epic Summary: ... and Project title: ... still strip correctly.
  2. brief word boundary — _JIRA_GENERIC_PREFIX_RE now matches brief only as a whole word with an explicit connector. briefcase manager and Briefing service are preserved; brief for payments, Brief: payments, Brief - payments, and Incipit mega-prompt behave as before. The Brief-2 platform residual was explicitly acknowledged in the fix reply as an accepted trade-off (fixing it would re-truncate legitimate hyphenated compounds), which I accept.
  3. Decorated section-echo headings — _JIRA_NONSPECIFIC_HEADING_RE now runs on the normalized title after hash/emphasis/label stripping and accepts the and form. ### *Goals & Background*, ## Goals and Background, and **Project** all fall through to the idea, confirmed both in the new unit tests and by running the helper locally.

The new end-to-end tests (test_jira_epic_summary_prefers_idea_over_decorated_goals_heading / ..._project_heading) lock in the source-order behavior the whole PR is about, and the full webapp suite passes locally (238 passed, 1 xfailed, coverage 96.27%, gate met); CI is green across the board.

Nice, surgical repair round — each fix landed exactly where it needed to with a regression test to keep it there. Ship it.

🔁 Powered by Looper · runner=reviewer · agent=pi · An autonomous AI dev team for your GitHub repos.

@readwrightexecute
readwrightexecute merged commit a746999 into master Oct 14, 2026
6 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.

1 participant