Skip to content

feat(standup): enforce one-paragraph-per-item engineering format#8

Merged
mcampbellr merged 2 commits into
mainfrom
feat/standup-engineering-format
Jul 7, 2026
Merged

feat(standup): enforce one-paragraph-per-item engineering format#8
mcampbellr merged 2 commits into
mainfrom
feat/standup-engineering-format

Conversation

@mcampbellr

Copy link
Copy Markdown
Owner

Follow-up to #7. Addresses the core complaint that the digest still grouped work items in the global paragraph ("all seven specs closed this period"), which reads as a changelog, not a standup.

Changes

  • No grouping. The global field is now an optional non-grouping summary (default empty). The per-spec paragraphs are the standup — one work item per identifier-led paragraph.
  • Fixed grammar per item: <IDENTIFIER> is <STATUS>. <functional summary>. <review>. <blocker>.
  • Status lexicon aligned (review → "is in review").
  • Shape-gate rejects grouping/counting shapes (all N specs, several, this period, N specs closed…) in every field, and allows an empty global.
  • Report prints the per-ticket paragraphs (Slack-ready), optional global only as a trailing line.

Reused metadata (no schema/web change)

needsUat, assignee, needs-attention reason (the structured blocker carrier — detect-external-blocker-in-apply writes "what is pending + who unblocks + open PR ref" there).

Documented gaps (not implemented — would need minimal additions)

  • PR/merge status ("pending merge / PR opened"): Vector has no structured PR field → not deterministic → not emitted (never invented). Would need a small pr {url,state} field on SpecState.
  • Structured "blocked by CT-125 assigned to X": no depends_on/blocked-by edge (relatedTo is cause→bug). Emitted only when the reason text carries it. Would need a blocked-by relation.

Tests

Full Go suite green (10 packages), incl. golden --json gate and kit↔assets drift.

🤖 Generated with Claude Code

mcampbellr and others added 2 commits July 7, 2026 09:49
Kill the grouping global paragraph — the reader must see each work item
on its own line, never "all N specs closed this period" style summaries.

- Agent: `global` becomes an optional NON-grouping summary (default empty);
  the per-spec paragraphs are the standup. Forbid grouping/counting phrases
  in any field. Align the status lexicon ("is in review"). One work item,
  one identifier-led paragraph, following the fixed grammar:
  `<ID> is <STATUS>. <functional summary>. <review>. <blocker>.`
- Command: shape-gate now allows an empty `global`, and rejects grouping
  shapes (all N specs / several / this period / N specs closed…) in every
  field. Report prints the per-ticket paragraphs (Slack-ready) with the
  optional global only as a trailing line.

Metadata reused as-is (needsUat, assignee, needs-attention reason); no
schema, no web change. PR/merge and structured "blocked-by <ticket>"
remain out of reach without a minimal `pr` field / `blocked-by` relation
(documented, not added).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Make the Standup view read like an engineering standup: each work item
is a self-standing block, never grouped.

- Left accent bar per row keyed to status (data-status → status palette),
  so state is scannable at a glance; needs-attention gets a stronger bar
  plus a tinted surface.
- Identifier leads the block: ticket key as a real link (monospace,
  accent, hover/focus states) when linked, else the slug as the primary
  monospace identifier; the title drops to a muted subtitle.
- The summary becomes the highest-contrast element (it is the standup
  content); header meta (period + counts) collapses to one inline line.
- Focus-visible rings on the ticket link and retry; reuses existing
  tokens only (no new deps); verified in light and dark.

Rebuilt web/dist and re-embedded into cli/internal/webui/dist.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@mcampbellr mcampbellr merged commit db05533 into main Jul 7, 2026
2 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