Feature/maturity attribution - #115
Conversation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Added maturity: String field to the IdeaPost GraphQL type definition, positioned alphabetically between introduction and nextSteps. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
✅ Deploy Preview for project-idea-board ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
There was a problem hiding this comment.
Pull request overview
Adds a maturity attribution field to idea posts so authors can signal how “baked” an idea is, and displays that maturity in both list and detail views. This fits the Idea Board’s content model by extending idea frontmatter and Gatsby’s GraphQL layer, while keeping Decap CMS authoring straightforward.
Changes:
- Add
maturityto the CMS schema + Gatsby GraphQL schema/resolvers (defaulting to"speculative"when absent). - Introduce
MaturityBadge+ CSS module styling and wire it into the idea list and idea detail template. - Backfill
maturityfrontmatter on a few existing idea markdown files and add unit tests for resolver + maturity config.
Reviewed changes
Copilot reviewed 18 out of 18 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| static/admin/config.yml | Adds required maturity select field for ideas (and expands type options). |
| src/templates/idea-post.tsx | Queries and renders maturity in the post metadata strip via MaturityBadge. |
| src/style/maturity-badge.module.css | New CSS module for maturity badge color ramp + inline variant styling. |
| src/style/idea-roll.module.css | Layout tweaks for title row + spacing to accommodate maturity badge. |
| src/style/idea-post.module.css | Minor cursor styling adjustment for tag UI. |
| src/pages/ideas/dev-example.md | Adds maturity frontmatter to an example idea. |
| src/pages/ideas/2026-02-06-simulations-of-actin-compression-at-monomer-and-fiber-scale.md | Adds maturity frontmatter. |
| src/pages/ideas/2026-02-06-compare-actin-filament-compression-between-different-fiber-scale-simulators.md | Adds maturity frontmatter. |
| src/pages/ideas/2025-10-29-relate-cell-cell-junction-remodeling-to-migration-onset.md | Adds maturity frontmatter and reorders frontmatter keys. |
| src/constants/maturityLevels.ts | Adds central maturity label/hint config and a getter with fallback behavior. |
| src/constants/maturityLevels.test.ts | Adds unit tests covering maturity config labels/hints and fallback. |
| src/components/MaturityBadge.tsx | New badge component that displays maturity with an Ant Design Popover hint. |
| src/components/IdeaRoll.tsx | Queries maturity and renders the badge alongside the idea title in list view. |
| gatsby/schema/base.gql | Extends IdeaPost GraphQL type with maturity: String. |
| gatsby/resolvers/test/resolvers.test.js | Adds resolver tests for defaulting and pass-through behavior. |
| gatsby/resolvers/resolvers.js | Adds maturity resolver defaulting to "speculative" when missing. |
| docs/design/specs/2026-06-04-maturity-label-design.md | Adds design spec for maturity levels, UI behavior, and data model. |
| docs/design/plans/2026-06-04-maturity-label.md | Adds detailed implementation plan for the maturity label feature. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| .tagEyebrowWrapper { | ||
| display: flex; | ||
| justify-content: space-between; | ||
| } |
| <Popover title={config.hint} className={popoverStyles.popoverContent}> | ||
| <span | ||
| className={[baseClass, levelClass, className] | ||
| .filter(Boolean) | ||
| .join(" ")} | ||
| > | ||
| {config.label} | ||
| </span> | ||
| </Popover> |
There was a problem hiding this comment.
We have little to no attention paid to keyboard nav, I'd argue we should basically ignore it until we get to a more complete place and then do a concentrated accessibility pass rather than add it in piece meal right now.
interim17
left a comment
There was a problem hiding this comment.
Feature seems good, but I'd like to discuss committing specs and plans and align on that for future agentic work.
The comment about keyboard nav is also an interesting one to me. I would like this site to be accessible, AntD is not the greatest choice for that, but I think it could be a nice thing to prioritize once we feel a bit more fleshed out.
| # Maturity Label Implementation Plan | ||
|
|
||
| > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. | ||
|
|
||
| **Goal:** Add a `maturity` field to ideas that renders as a light-to-dark teal pill badge (with tooltip) in both the idea list eyebrow row and the idea detail metadata strip. | ||
|
|
||
| **Architecture:** New `maturity` frontmatter field on idea `.md` files, exposed in GraphQL via a resolver that defaults to `"speculative"` for existing ideas. A shared `MaturityBadge` component reads from a `maturityLevels` constants file and renders an Ant Design `Tooltip`-wrapped pill. Both `IdeaRoll` and `idea-post` template wire in the badge. | ||
|
|
||
| **Tech Stack:** Gatsby 5, React 18, TypeScript, Ant Design v5, Vitest, Decap CMS, CSS Modules |
There was a problem hiding this comment.
So this PR is both a feature but also a way of documenting this agentic process.
With human work, this kind of documentation doesn't live in the repo it lives in project boards, and I'm not sure it feels useful to commit this process document to the repo permanently.
What are the pros and cons of committing plans and specs as we go? Would be interested to discuss this.
| <Popover title={config.hint} className={popoverStyles.popoverContent}> | ||
| <span | ||
| className={[baseClass, levelClass, className] | ||
| .filter(Boolean) | ||
| .join(" ")} | ||
| > | ||
| {config.label} | ||
| </span> | ||
| </Popover> |
There was a problem hiding this comment.
We have little to no attention paid to keyboard nav, I'd argue we should basically ignore it until we get to a more complete place and then do a concentrated accessibility pass rather than add it in piece meal right now.
| resources: | ||
| - released-emt-dataset | ||
| program: | ||
| - EMT | ||
| date: 2025-10-28T19:10:00.000Z |
There was a problem hiding this comment.
they were just reordered
Problem
We've gotten feedback that people feel uncomfortable posting ideas that aren't fully fleshed out, or that if they do, people will take them more seriously than they should.
Solution
Add a maturity label (with @jessicasyu )
Type of change
Please delete options that are not relevant.
Steps to Verify:
Screenshots (optional):