Skip to content

Commit b9c0a9b

Browse files
Copilotkbeaugrand
andcommitted
Make specification technology-agnostic and remove Independent Test from all templates
Co-authored-by: kbeaugrand <9513635+kbeaugrand@users.noreply.github.com>
1 parent 766fc46 commit b9c0a9b

4 files changed

Lines changed: 13 additions & 29 deletions

File tree

.github/templates/spec-template.md

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99

1010
<!--
1111
IMPORTANT: User stories should be PRIORITIZED as user journeys ordered by importance.
12-
Each user story/journey must be INDEPENDENTLY TESTABLE - meaning if you implement just ONE of them,
13-
you should still have a viable MVP (Minimum Viable Product) that delivers value.
1412
1513
Assign priorities (P1, P2, P3, etc.) to each story, where P1 is the most critical.
1614
Think of each story as a standalone slice of functionality that can be:
@@ -26,8 +24,6 @@
2624

2725
**Why this priority**: [Explain the value and why it has this priority level]
2826

29-
**Independent Test**: [Describe how this can be tested independently - e.g., "Can be fully tested by [specific action] and delivers [specific value]"]
30-
3127
**Acceptance Scenarios**:
3228

3329
1. **Given** [initial state], **When** [action], **Then** [expected outcome]
@@ -41,8 +37,6 @@
4137

4238
**Why this priority**: [Explain the value and why it has this priority level]
4339

44-
**Independent Test**: [Describe how this can be tested independently]
45-
4640
**Acceptance Scenarios**:
4741

4842
1. **Given** [initial state], **When** [action], **Then** [expected outcome]
@@ -55,8 +49,6 @@
5549

5650
**Why this priority**: [Explain the value and why it has this priority level]
5751

58-
**Independent Test**: [Describe how this can be tested independently]
59-
6052
**Acceptance Scenarios**:
6153

6254
1. **Given** [initial state], **When** [action], **Then** [expected outcome]

specs/001-device-status/checklists/requirements.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
## Validation Results
3333

3434
### Content Quality - PASS
35-
- ✅ Specification uses technology-agnostic language (e.g., "cloud provider" instead of specific APIs)
35+
- ✅ Specification uses technology-agnostic language (e.g., "cloud provider" and "last activity timestamp" instead of specific field names)
3636
- ✅ Focuses on user confusion problems and business value (reduced support requests)
3737
- ✅ Written for non-technical stakeholders (clear explanations of LoRaWAN use case)
3838
- ✅ All mandatory sections (User Scenarios, Requirements, Success Criteria) are complete
@@ -45,7 +45,7 @@
4545
- ✅ All 3 user stories have acceptance scenarios with Given/When/Then format
4646
- ✅ Edge cases address null values, new devices, and missing data scenarios
4747
- ✅ Scope is clearly bounded to device and gateway list views
48-
- ✅ Dependencies on cloud providers (Azure IoT Hub, AWS IoT Core) and lastActivityTime field are identified
48+
- ✅ Dependencies on cloud providers identified (provider-agnostic approach maintained)
4949

5050
### Feature Readiness - PASS
5151
- ✅ Each functional requirement has corresponding acceptance scenarios in user stories

specs/001-device-status/spec.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
### User Story 1 - View Device Status Without Confusion (Priority: P1)
1111

12-
Non-technical users need to view their device list without being confused by misleading status indicators. Currently, LoRaWAN devices that send data infrequently (every 30 minutes to 24 hours) appear as "disconnected" most of the time because the Connection State column only shows "connected" when there's an active connection to the configured cloud IoT service (for example, Azure IoT Hub or AWS IoT Core). This causes users to think devices are malfunctioning and generates unnecessary support requests.
12+
Non-technical users need to view their device list without being confused by misleading status indicators. Currently, LoRaWAN devices that send data infrequently (every 30 minutes to 24 hours) appear as "disconnected" most of the time because the Connection State column only shows "connected" when there's an active connection to the cloud IoT service. This causes users to think devices are malfunctioning and generates unnecessary support requests.
1313

1414
**Why this priority**: This is the core problem causing user confusion and unnecessary support overhead. Removing the misleading Connection State column immediately solves the primary pain point.
1515

@@ -23,15 +23,15 @@ Non-technical users need to view their device list without being confused by mis
2323

2424
### User Story 2 - View Accurate Device Activity Timestamp (Priority: P2)
2525

26-
Users need to see when a device last communicated with the system to understand device activity patterns. The current "Last Status Update" column only updates when the Device Twin is modified, which doesn't reflect actual device communication and creates confusion about device activity.
26+
Users need to see when a device last communicated with the system to understand device activity patterns. The current "Last Status Update" column only updates when the device metadata is modified, which doesn't reflect actual device communication and creates confusion about device activity.
2727

2828
**Why this priority**: This enhances the fix by replacing misleading information with accurate activity tracking. It's P2 because removing the confusing column (P1) already solves the critical problem, but this provides better information.
2929

3030
**Acceptance Scenarios**:
3131

3232
1. **Given** I am viewing the device list page, **When** I look at the column headers, **Then** I should NOT see a "Last Status Update" column
33-
2. **Given** a device has sent telemetry data, **When** I view the device information, **Then** I should see the timestamp of the last activity (lastActivityTime)
34-
3. **Given** the Device Twin was updated but no device activity occurred, **When** I view the device information, **Then** the activity timestamp should reflect the actual last device communication, not the Twin update
33+
2. **Given** a device has sent telemetry data, **When** I view the device information, **Then** I should see the timestamp of the last activity
34+
3. **Given** the device metadata was updated but no device activity occurred, **When** I view the device information, **Then** the activity timestamp should reflect the actual last device communication, not the metadata update
3535

3636
---
3737

@@ -51,11 +51,11 @@ Users managing gateways need the same clarity as device management. Gateways als
5151

5252
### Edge Cases
5353

54-
- What happens when a device has never sent any data (lastActivityTime is null)?
54+
- What happens when a device has never sent any data (last activity timestamp is null)?
5555
- Display should show "No activity recorded" or similar placeholder text rather than an error or blank field
5656
- How does the system handle devices that were recently registered but haven't communicated yet?
5757
- Should display registration timestamp or "Awaiting first contact" status
58-
- What if lastActivityTime data is not available from the cloud provider (Azure IoT Hub or AWS IoT Core)?
58+
- What if last activity timestamp data is not available from the cloud provider?
5959
- System should gracefully handle missing data with appropriate fallback display
6060

6161
## Requirements *(mandatory)*
@@ -66,15 +66,15 @@ Users managing gateways need the same clarity as device management. Gateways als
6666
- **FR-002**: System MUST remove the "Connection State" column from the gateway list view
6767
- **FR-003**: System MUST remove the "Last Status Update" column from the device list view
6868
- **FR-004**: System MUST remove the "Last Status Update" column from the gateway list view
69-
- **FR-005**: System MUST display device activity information using the lastActivityTime field from the cloud provider (Azure IoT Hub or AWS IoT Core)
70-
- **FR-006**: System MUST display gateway activity information using the lastActivityTime field from the cloud provider
71-
- **FR-007**: System MUST handle cases where lastActivityTime is not available (null or missing) by displaying appropriate placeholder text
69+
- **FR-005**: System MUST display device activity information using the last device activity timestamp from the cloud provider
70+
- **FR-006**: System MUST display gateway activity information using the last gateway activity timestamp from the cloud provider
71+
- **FR-007**: System MUST handle cases where the last activity timestamp is not available (null or missing) by displaying appropriate placeholder text
7272
- **FR-008**: System MUST maintain all other existing columns and functionality in device and gateway list views
7373

7474
### Key Entities
7575

76-
- **Device**: Represents an IoT device connected to the portal. Key attributes include device ID, name, model, and activity timestamp (lastActivityTime)
77-
- **Gateway**: Represents an IoT gateway managing multiple devices. Key attributes include gateway ID, name, model, and activity timestamp (lastActivityTime)
76+
- **Device**: Represents an IoT device connected to the portal. Key attributes include device ID, name, model, and last activity timestamp
77+
- **Gateway**: Represents an IoT gateway managing multiple devices. Key attributes include gateway ID, name, model, and last activity timestamp
7878

7979
## Success Criteria *(mandatory)*
8080

specs/README.md

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99

1010
<!--
1111
IMPORTANT: User stories should be PRIORITIZED as user journeys ordered by importance.
12-
Each user story/journey must be INDEPENDENTLY TESTABLE - meaning if you implement just ONE of them,
13-
you should still have a viable MVP (Minimum Viable Product) that delivers value.
1412
1513
Assign priorities (P1, P2, P3, etc.) to each story, where P1 is the most critical.
1614
Think of each story as a standalone slice of functionality that can be:
@@ -26,8 +24,6 @@
2624

2725
**Why this priority**: [Explain the value and why it has this priority level]
2826

29-
**Independent Test**: [Describe how this can be tested independently - e.g., "Can be fully tested by [specific action] and delivers [specific value]"]
30-
3127
**Acceptance Scenarios**:
3228

3329
1. **Given** [initial state], **When** [action], **Then** [expected outcome]
@@ -41,8 +37,6 @@
4137

4238
**Why this priority**: [Explain the value and why it has this priority level]
4339

44-
**Independent Test**: [Describe how this can be tested independently]
45-
4640
**Acceptance Scenarios**:
4741

4842
1. **Given** [initial state], **When** [action], **Then** [expected outcome]
@@ -55,8 +49,6 @@
5549

5650
**Why this priority**: [Explain the value and why it has this priority level]
5751

58-
**Independent Test**: [Describe how this can be tested independently]
59-
6052
**Acceptance Scenarios**:
6153

6254
1. **Given** [initial state], **When** [action], **Then** [expected outcome]

0 commit comments

Comments
 (0)