Skip to content

Commit f03c9ed

Browse files
sven1103-agentsven1103KochTobi
authored
docs: replace placeholder personas with defined stakeholder personas in PRD (#1396)
* docs: replace placeholder personas with defined stakeholder personas in PRD Replace the three illustrative placeholder personas (Sarah Meyer, Marcus Klein, Jing Liu) with four agreed stakeholder personas — Anna Becker (Project Manager), Dr. Jonas Weber (Researcher), Laura Hoffmann (Data Steward), and Dr. Minh Tran (Data Scientist) — using a consistent Role / Primary need / Pain point structure. * docs: implement Feature layer governance with complete fixes Add Feature ID schema (DOMAIN-FEAT-NN) as an intermediate traceability level between Requirements and Stories. This establishes clear governance hierarchy: PRD → Requirements → Features → Stories → Tasks → Implementation Key changes: * Add Feature ID Schema section to AGENTS.md §0 with rules and examples * Define Feature structure: ID, Title, Requirement IDs, Description, Rationale, Acceptance Criteria, Status, Dependencies, Child Stories * Add .github/ISSUE_TEMPLATE/feature.yml GitHub issue template - Required fields: feature_id, requirement_ids, description, scope - Optional fields: notes, dependencies, child_stories * Update story.yml with required parent_feature field (first required field) * Update AGENTS.md traceability rules to mandate Feature parent for Stories * Add Feature, Story, Task sequencing rules to prevent orphaned issues * Update Section 11 (Agent Patterns) with Feature creation guidance * Update Section 12 (Human Review Gates) with Feature slug change guardrails * Add docs/requirements-guide.md with comprehensive authoring conventions - Requirement ID scheme and examples - Requirement format template and field definitions - When to create/edit/retire requirements - Common pitfalls and best practices * Add 12 x "### Features" placeholder subsections to all domains in docs/requirements.md * Fix terminology: "Scheme" → "Schema" for consistency (Requirement ID and Feature ID schemas) * Fix domain list: add USER and COMM (now 12/12 domains complete) * Fix zero-padding rule: "at least two digits" → "exactly two digits" with explicit invalid examples (1, 010) * Fix story.yml Notes placeholder to clarify cross-story dependencies vs parent Feature link * Add AGENTS.md §13 Key Files entry for requirements-guide.md * Add missing --- section separator before AGENTS.md §1 This establishes unambiguous traceability from PRD through implementation, enables release planning at the Feature level, and prevents Stories from becoming orphaned requirements. Backward compatible: existing requirements, stories, and tasks remain valid. --------- Co-authored-by: Sven F. <9976560+sven1103@users.noreply.github.com> Co-authored-by: Sven Fillinger <sven.fillinger@qbic.uni-tuebingen.de> Co-authored-by: KochTobi <kochtobi@users.noreply.github.com>
1 parent a271e36 commit f03c9ed

6 files changed

Lines changed: 455 additions & 28 deletions

File tree

.github/ISSUE_TEMPLATE/feature.yml

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
name: Feature
2+
description: A named, user-visible capability that groups related Stories
3+
title: "[Feature] "
4+
labels: ["type:feature"]
5+
body:
6+
- type: input
7+
id: feature_id
8+
attributes:
9+
label: Feature ID
10+
description: "A unique FEAT-<SLUG> identifier for this feature (e.g., FEAT-SAMPLE-REGISTRATION). The slug must be uppercase, hyphen-separated, and stable — do not change it once Stories reference this Feature."
11+
placeholder: "FEAT-SAMPLE-REGISTRATION"
12+
validations:
13+
required: true
14+
15+
- type: input
16+
id: requirement_ids
17+
attributes:
18+
label: Requirement IDs
19+
description: "Reference one or more functional (R) or non-functional (NFR) requirement IDs from docs/requirements.md. At least one R-<NN> or NFR-<NN> ID is required. Constraint IDs (C-<NN>) must NOT be the sole references — they may appear in notes only."
20+
placeholder: "SAMPLE-R-01, SAMPLE-NFR-01"
21+
validations:
22+
required: true
23+
24+
- type: textarea
25+
id: description
26+
attributes:
27+
label: Description
28+
description: "High-level summary of the user-visible capability this Feature delivers. What can a user do once this Feature is complete?"
29+
placeholder: |
30+
Researchers can register biological samples into the system individually or in batches,
31+
providing required metadata (sample type, organism, collection date) and linking samples
32+
to an existing experiment. Registered samples are immediately available for measurement
33+
assignment and downstream analysis workflows.
34+
validations:
35+
required: true
36+
37+
- type: textarea
38+
id: scope
39+
attributes:
40+
label: Scope / Boundaries
41+
description: "Explicitly state what is in scope and what is out of scope for this Feature. This prevents scope creep and clarifies what Stories belong here."
42+
placeholder: |
43+
In scope:
44+
- Individual sample registration via UI form
45+
- Batch sample registration via XLSX/TSV upload
46+
- Linking samples to an existing experiment
47+
- Validation of required metadata fields
48+
49+
Out of scope:
50+
- Sample deletion (covered by FEAT-SAMPLE-MANAGEMENT)
51+
- Measurement assignment (covered by FEAT-MEASUREMENT-UPLOAD)
52+
- OpenBIS synchronisation (covered by FEAT-LAB-INTEGRATION)
53+
validations:
54+
required: true
55+
56+
- type: textarea
57+
id: notes
58+
attributes:
59+
label: Notes & Context (optional)
60+
description: "Dependencies on other Features, related ADRs, constraints that influence design, or links to PRD sections."
61+
placeholder: |
62+
- Depends on: FEAT-USER-AUTH (users must be authenticated before registering samples)
63+
- Related PRD section: §4.2 Sample Registration
64+
- Architectural constraint: SAMPLE-C-01 (all samples must be assigned a QBiC barcode)
65+
- ADR reference: ADR-012 (Batch upload file format selection)
66+
validations:
67+
required: false

.github/ISSUE_TEMPLATE/story.yml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,15 @@ description: User-facing functionality derived from PRD/Requirements
33
title: "[Story] "
44
labels: ["type:story"]
55
body:
6+
- type: input
7+
id: parent_feature
8+
attributes:
9+
label: Parent Feature
10+
description: "Link to the Feature issue this story belongs to (e.g., #101)"
11+
placeholder: "#101"
12+
validations:
13+
required: true
14+
615
- type: input
716
id: requirement_ids
817
attributes:
@@ -42,7 +51,7 @@ body:
4251
label: Notes & Context (optional)
4352
description: "Dependencies, design notes, links to PRD section, related constraints (e.g., references to AUTH-C-01)"
4453
placeholder: |
45-
- Depends on: #123 (parent story for user registration)
54+
- Related issue: Story #123 (user registration must complete first)
4655
- Design reference: See ADR-005 for authentication framework
4756
- Related requirement: AUTH-C-01 (MFA is optional in Phase 1)
4857
validations:

AGENTS.md

Lines changed: 111 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,27 @@
88

99
## 0. Requirements and Issue Governance
1010

11-
### Requirement ID Scheme
11+
### Governance Hierarchy
12+
13+
The governance model for this project follows a strict top-down traceability chain:
14+
15+
```
16+
PRD (docs/prd.md)
17+
└── Features (.github/ISSUE_TEMPLATE/feature.yml)
18+
└── Stories (.github/ISSUE_TEMPLATE/story.yml)
19+
└── Tasks (.github/ISSUE_TEMPLATE/task.yml)
20+
└── Implementation (code, PRs)
21+
```
22+
23+
- **PRD** defines product vision, user personas, and business objectives.
24+
- **Features** group related Stories under a named, user-visible capability. A Feature references one or more requirement IDs and describes the high-level scope.
25+
- **Stories** describe user-facing workflows derived from a Feature. Each Story references a parent Feature and one or more requirement IDs.
26+
- **Tasks** are concrete technical work items derived from a Story.
27+
- **Implementation** traces back through Tasks → Stories → Features → Requirements → PRD.
28+
29+
---
30+
31+
### Requirement ID Schema
1232

1333
All requirements must follow the domain-based ID structure:
1434

@@ -17,7 +37,7 @@ All requirements must follow the domain-based ID structure:
1737
Where:
1838

1939
- **DOMAIN** --- functional area (e.g. `API`, `PROJECT`, `SAMPLE`,
20-
`MEASUREMENT`, `DATA`, `FAIR`, `CARE`, `QUALITY`, `LAB`, `AUTH`)
40+
`MEASUREMENT`, `DATA`, `FAIR`, `CARE`, `QUALITY`, `LAB`, `AUTH`, `USER`, `COMM`)
2141
- **TYPE** --- requirement type:
2242
- `R` = Functional requirement (system capability)
2343
- `NFR` = Non-functional requirement (quality attribute)
@@ -41,7 +61,34 @@ Where:
4161
- One requirement may be referenced by multiple stories.
4262
- A story may reference multiple requirement IDs when a single user workflow spans multiple requirements. If a story spans more than two domains, consider splitting it.
4363
- Constraints (`C`) influence architecture and must not be referenced in Stories. Reference `C-<NN>` IDs only in Task Technical Notes.
44-
- The sequential number `<NN>` must be zero-padded to at least two digits (e.g., `01`, `02`, `10`). IDs without zero-padding are invalid.
64+
- The sequential number `<NN>` must be zero-padded to exactly two digits (e.g., `01`, `02`, `10`). IDs without zero-padding are invalid (e.g., `1`, `010`).
65+
66+
---
67+
68+
### Feature ID Schema
69+
70+
Features are identified using a short, human-readable slug:
71+
72+
FEAT-<SLUG>
73+
74+
Where:
75+
76+
- **SLUG** --- a concise, uppercase, hyphen-separated identifier describing the user-visible capability (e.g., `FEAT-SAMPLE-REGISTRATION`, `FEAT-FAIR-EXPORT`, `FEAT-USER-AUTH`).
77+
78+
#### Examples
79+
80+
FEAT-SAMPLE-REGISTRATION
81+
FEAT-FAIR-EXPORT
82+
FEAT-USER-AUTH
83+
FEAT-MEASUREMENT-UPLOAD
84+
85+
#### Rules
86+
87+
- Feature slugs must be unique across the project.
88+
- Feature slugs must be stable; do not rename a Feature once Stories reference it.
89+
- A Feature must reference at least one requirement ID (`R-<NN>` or `NFR-<NN>`).
90+
- Constraints (`C-<NN>`) must not be used as the sole reference in a Feature — they may appear in Feature notes but Features must cite at least one `R` or `NFR` ID.
91+
- One Feature may group multiple Stories across different domains, provided the Stories share a coherent user-visible purpose.
4592

4693
---
4794

@@ -80,13 +127,39 @@ When creating issues, use the correct template for the scenario.
80127

81128
---
82129

130+
#### Feature (`.github/ISSUE_TEMPLATE/feature.yml`)
131+
132+
Use when creating issues for a **named, user-visible capability** that groups multiple related Stories.
133+
134+
Required fields:
135+
136+
- **Feature ID**
137+
- A unique `FEAT-<SLUG>` identifier (e.g., `FEAT-SAMPLE-REGISTRATION`)
138+
- **Requirement IDs**
139+
- At least one `R-<NN>` or `NFR-<NN>` reference
140+
- **Description**
141+
- High-level summary of the user-visible capability
142+
- **Scope / Boundaries**
143+
- What is in scope and what is explicitly out of scope for this Feature
144+
145+
Rules:
146+
147+
- A Feature must be created before any Story references it.
148+
- A Feature slug must be unique and stable — do not rename it once Stories reference it.
149+
- Features must not reference Constraint IDs (`C-<NN>`) as their sole requirement references.
150+
- One Feature may span multiple domains if the user-visible capability is coherent.
151+
152+
---
153+
83154
#### Story (`.github/ISSUE_TEMPLATE/story.yml`)
84155

85156
Use when creating issues for **user-facing functionality** derived from
86157
the PRD or requirements.
87158

88159
Required fields:
89160

161+
- **Parent Feature**
162+
- Link to the parent Feature issue (e.g. `#101`)
90163
- **Requirement IDs**
91164
- At least one `R-<NN>` reference
92165
- May include related `NFR-<NN>`
@@ -98,6 +171,7 @@ Required fields:
98171
Rules:
99172

100173
- Stories describe value and workflow context.
174+
- Stories must reference a parent Feature. Create the Feature first if one does not exist.
101175
- Stories must not introduce new system capabilities not covered by an
102176
existing requirement.
103177
- If new capability is needed, update `docs/requirements.md` first. A change introduces **new capability** if it enables a user or system to perform an action that was not previously possible, or if it changes the externally observable behavior of an existing capability in a way not described by any existing requirement.
@@ -129,18 +203,21 @@ Rules:
129203

130204
---
131205

132-
#### Story and Task Sequencing
206+
#### Feature, Story, and Task Sequencing
133207

208+
- A Feature must be created before any Story references it. Create the Feature first.
209+
- A Story must always reference a parent Feature. Never create a Story without a parent Feature issue.
134210
- A Task must always be preceded by a Story. Create the Story first, then create the Task referencing it.
135211
- Never create a Task without a parent Story issue.
136-
- If no parent Story exists for a piece of work (e.g., when acting on a direct implementation request), create the Story first before proceeding with implementation.
212+
- If no parent Feature exists for a piece of work (e.g., when acting on a direct implementation request), create the Feature first, then the Story, then the Task.
137213
- A single Story may have multiple Tasks; a Task must not span multiple Stories.
138214

139215
---
140216

141217
### Traceability Rules
142218

143219
- Every Story must reference at least one functional requirement ID (`R-<NN>`).
220+
- Every Story must reference a parent Feature issue.
144221
- Every Task must reference:
145222
- A parent Story
146223
- At least one requirement ID
@@ -165,6 +242,22 @@ When editing requirements:
165242

166243
**Agent rule — requirement changes require human approval:** Before modifying `docs/requirements.md`, an agent must: (1) pause and confirm the change with a human reviewer (see Section 12); (2) create a dedicated PR for the requirement change alone — do not bundle requirement changes with implementation changes; (3) include the mandatory changelog entry in the PR description per the rules above.
167244

245+
---
246+
247+
### Feature Edits
248+
249+
When editing or retiring a Feature:
250+
251+
- Use a Pull Request.
252+
- Include a changelog entry in the PR description summarizing:
253+
- Added / Modified / Retired Feature IDs
254+
- Reason for change
255+
- Impact on dependent Stories (list affected Story issues)
256+
257+
**Agent rule — Feature slug changes require human approval:** A Feature slug must never be renamed once Stories reference it. Before retiring or splitting a Feature, an agent must: (1) pause and confirm with a human reviewer; (2) list all Story issues that reference the Feature in the PR description; (3) update Story issues to reference the replacement Feature if applicable.
258+
259+
260+
---
168261

169262
## 1. Project Overview
170263

@@ -513,13 +606,21 @@ When working on this codebase, an AI agent should:
513606

514607
### Before making changes
515608

516-
0. **Check `docs/requirements.md`** to confirm the change is covered by an existing requirement. If the change introduces new system capability not covered by any existing requirement, update `docs/requirements.md` first (see "Requirements and Issue Governance"). If `docs/requirements.md` does not exist, do not create it — pause and notify a human reviewer.
609+
0. **Check `docs/requirements.md`** to confirm the change is covered by an existing requirement. If the change introduces new system capability not covered by any existing requirement, update `docs/requirements.md` first (see "Requirements and Issue Governance"). If `docs/requirements.md` does not exist, do not create it — pause and notify a human reviewer. Then confirm a parent Feature issue exists before creating any Story or Task.
517610
1. **Identify the bounded context** the change belongs to (`identity`, `project-management`,
518611
`finances`, or cross-cutting).
519612
2. **Identify the layer** (`domain`, `application`, `infrastructure`, `views`/UI).
520613
3. Check `ExceptionHandling.md` and `service_api.md` for patterns relevant to the change.
521614
4. Read existing tests in the same module before writing new code.
522615

616+
### Creating Features
617+
618+
- Before creating a Story, confirm a parent Feature issue exists. If none exists, create the Feature first using `.github/ISSUE_TEMPLATE/feature.yml`.
619+
- A Feature must reference at least one `R-<NN>` or `NFR-<NN>` requirement ID.
620+
- Do not create a Feature whose sole requirement reference is a Constraint (`C-<NN>`).
621+
- A Feature slug (`FEAT-<SLUG>`) must be unique and must not be changed once Stories reference it.
622+
- If you are unsure whether a new Feature is needed or an existing Feature should be extended, pause and ask a human reviewer.
623+
523624
### Making domain changes
524625

525626
- New domain concepts go in `domain/model/` of the relevant bounded context.
@@ -567,6 +668,8 @@ An agent should pause and request human review/approval before:
567668
- Changing the Artemis messaging topic names or JMS consumer configuration.
568669
- Adding, modifying, or removing any entry in `docs/requirements.md`.
569670
- Implementing a change that introduces new system capability not covered by an existing requirement.
671+
- Retiring or renaming a Feature slug once Stories reference it.
672+
- Splitting a Feature into multiple Features when Stories already reference the original Feature.
570673

571674
---
572675

@@ -575,6 +678,7 @@ An agent should pause and request human review/approval before:
575678
| File / Path | Purpose |
576679
|---|---|
577680
| `docs/requirements.md` | Authoritative requirement registry — all R/NFR/C requirements documented here; must be updated before new capabilities are implemented |
681+
| `docs/requirements-guide.md` | Authoring conventions for creating, editing, and retiring requirements |
578682
| `README.md` | Setup, configuration reference, how to run |
579683
| `ExceptionHandling.md` | Exception handling conventions (read before touching error handling) |
580684
| `service_api.md` | Service API design patterns (Mono/Flux, request/response shapes) |
@@ -586,6 +690,7 @@ An agent should pause and request human review/approval before:
586690
| `datamanager-app/src/main/resources/application.properties` | Full application configuration with env var mappings |
587691
| `datamanager-bom/pom.xml` | All dependency version pins |
588692
| `.github/labeler.yml` | PR/branch labeling rules |
693+
| `.github/ISSUE_TEMPLATE/feature.yml` | Issue template for named, user-visible capabilities (features) |
589694
| `.github/ISSUE_TEMPLATE/story.yml` | Issue template for user-facing functionality (user stories) |
590695
| `.github/ISSUE_TEMPLATE/task.yml` | Issue template for concrete technical implementation tasks |
591696
| `.github/release.yml` | Release changelog categories |

docs/prd.md

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,25 @@ By combining structured metadata capture, quality assessment, and interoperabili
99

1010
## 2. Users & primary use cases
1111

12-
<!-- PLACEHOLDER: The personas and use cases below are illustrative only. Replace with actual stakeholder research and user feedback before finalising the PRD. -->
13-
14-
**Persona A: Dr. Sarah Meyer – Principal Investigator (Biology Group)**
15-
- Role: Leads a translational cancer biology research group at University of Tübingen
16-
- Primary need: Design and track multi-year, multi-omics studies with 200+ samples from patient cohorts
17-
- Pain point: Tracks experimental metadata in spreadsheets; struggles to ensure consistent sample naming and measurement parameters across internal lab work and outsourced sequencing
18-
19-
**Persona B: Marcus Klein – Lab Manager (QBiC Service Provider)**
20-
- Role: Manages high-throughput analysis services (NGS, proteomics) at QBiC for internal and external researchers
21-
- Primary need: Register samples from multiple projects, batch them for efficiency, upload measurement metadata from partner instruments, and track data transfer workflows
22-
- Pain point: Currently uses OpenBIS and manual scripts; needs a unified UI to manage project-level metadata and track which samples have been measured
23-
24-
**Persona C: Jing Liu – Bioinformatician (Data Analyst)**
25-
- Role: Analyzes omics data for research collaborators; publishes datasets
26-
- Primary need: Download raw measurement data, review sample metadata, and export projects as FAIR-compliant research objects (RO-Crate) for archival and publication
27-
- Pain point: Data discovery across projects is fragmented; wants reproducibility and proper attribution (ORCID integration)
12+
**Persona 1: Anna Becker – Project Manager**
13+
- **Role:** Employed at the QBiC BioPM team; acts as the primary contact between end-users, customers, and member labs performing sample measurements. Manages service offers, tracks research project progress, and reports back to end-users.
14+
- **Primary need:** Quick overviews of important project updates and easy access to consolidated information for reporting — without switching between multiple systems.
15+
- **Pain point:** Manually checking many interfaces for information or updates, and acting as a communication proxy between end-users and internal teams.
16+
17+
**Persona 2: Dr. Jonas Weber – Researcher**
18+
- **Role:** Scientist conducting a scientific study; responsible for defining the experimental setup, providing sample information, and setting quality demands on analysis outputs.
19+
- **Primary need:** A single place where all project information comes together, so hypotheses can be tested quickly and findings published to maximise scientific impact.
20+
- **Pain point:** Numerous FAIR data management and best-practice requirements with limited resources and no direct incentive to comply; gets frustrated when excessive manual tasks slow down actual scientific progress.
21+
22+
**Persona 3: Laura Hoffmann – Data Steward**
23+
- **Role:** Operates at an institutional level (university research office or data governance team); oversees data management standards and FAIR/CARE compliance across multiple research groups and projects.
24+
- **Primary need:** Visibility into project metadata quality, data export readiness, and audit trails to support governance reporting and funder compliance documentation.
25+
- **Pain point:** Manually checking compliance status across dispersed projects and coordinating with researchers to resolve metadata gaps; gets frustrated when compliance workflows require extensive back-and-forth communication.
26+
27+
**Persona 4: Dr. Minh Tran – Data Scientist**
28+
- **Role:** Based in a research group or core bioinformatics facility; downloads raw measurement data from the platform, integrates it with external datasets, and performs comparative analysis for publications and grant proposals.
29+
- **Primary need:** Structured, machine-readable metadata that minimises cleaning and reformatting work before analysis, with reliable sample tracking for reproducibility and traceability.
30+
- **Pain point:** Incomplete or inconsistent sample metadata that requires detective work to reconcile samples across projects; lack of standardised ontologies makes cross-project analysis cumbersome and delays publication timelines.
2831

2932
**Top 3 jobs-to-be-done:**
3033
1. **Design and document an experiment** – Create a project, define experimental groups, specify variables and confounding factors, and invite collaborators without manual email coordination

0 commit comments

Comments
 (0)