2026-07-02 13:34:05 +00:00
# EPIC-001: First Verified Decision
**Goal: ** Prove the Intelligence Lab works end-to-end with real data
| | |
|---|---|
| **Epic ** | 001 |
| **Status ** | READY FOR DEVELOPMENT |
| **Goal ** | A pilot can film a real object, upload, get a Decision Case, review AI, correct annotations, see the evidence chain, approve the case, with full version control and traceability |
| **Success ** | Complete vertical slice from reality to verified decision |
---
## STOP Rule
**No new pipeline may be implemented until at least 20 real Decision Cases have been produced through the existing pipeline. **
Observe first, improve later.
---
## Field Readiness Gate
Before building any new feature, answer:
| Question | Must Answer |
|----------|-------------|
| Can we use this during a real pilot day? | Yes |
| Will it give us better observation data? | Yes |
| Will it reduce manual work? | Yes |
| Will it improve Decision Cases? | Yes |
| Will it help us validate the model? | Yes |
If **no ** on most questions — the feature waits.
---
2026-07-02 13:38:09 +00:00
## Vertical User Journey (Demo)
The complete journey that can be demonstrated in minutes:
```
quiXzoom
↓
Take photo or video
↓
Mission Import
↓
Raw Dataset saved
↓
Dataset Explorer shows mission
↓
AI creates Observation
↓
User corrects if needed
↓
Decision Case created
↓
Decision Viewer shows:
Observation
↓
Evidence
↓
Finding
↓
Decision
↓
Business Impact
```
If this journey works, the core is proven.
2026-07-02 13:34:05 +00:00
## Sprint Goal
**Every sprint must result in more verified Decision Cases from real pilot missions. **
Keep development close to user reality. Intelligence Lab grows from actual needs, not assumptions.
---
## Stories
2026-07-02 13:38:09 +00:00
### Story 1: Mission Import
2026-07-02 13:34:05 +00:00
**As a ** field engineer
**I want to ** upload mission data
**So that ** raw data is stored immutably
```
Video + Images + GPS + EXIF
↓
Raw Dataset (immutable, versioned)
```
**Acceptance: **
- [ ] Upload video and images
- [ ] Extract and display GPS, timestamp, device metadata
- [ ] Store raw data with checksum
- [ ] Show upload progress and confirmation
2026-07-02 13:38:09 +00:00
**Why first: ** Proves we can receive real data.
2026-07-02 13:34:05 +00:00
---
2026-07-02 13:38:09 +00:00
### Story 2: Dataset Explorer
2026-07-02 13:34:05 +00:00
**As a ** field engineer
**I want to ** browse and search missions
**So that ** I can find specific observations
**Features: **
- List view
- Map view
- Filter by date, location, type
- Search by metadata
- Open mission to see details
**Acceptance: **
- [ ] Browse all missions
- [ ] Filter by date range
- [ ] Filter by location
- [ ] Search by metadata
- [ ] Open mission detail view
2026-07-02 13:38:09 +00:00
**Why second: ** Makes data visible and searchable.
2026-07-02 13:34:05 +00:00
---
2026-07-02 13:38:09 +00:00
### Story 3: Annotation Workspace
2026-07-02 13:34:05 +00:00
**As a ** field engineer
**I want to ** review and correct AI suggestions
**So that ** observations are accurate
```
Image
↓
AI Detection (bounding box + label + confidence)
↓
Human Review (correct / modify / reject)
↓
Version History
```
**Acceptance: **
- [ ] Show image with AI bounding boxes
- [ ] Display AI label and confidence
- [ ] Allow correction of label
- [ ] Allow adjustment of bounding box
- [ ] Allow rejection of detection
- [ ] Save version history
- [ ] Show before/after comparison
2026-07-02 13:38:09 +00:00
**Why third: ** First human-in-the-loop.
2026-07-02 13:34:05 +00:00
---
2026-07-02 13:38:09 +00:00
### Story 4: Decision Case
2026-07-02 13:34:05 +00:00
**As a ** field engineer
**I want to ** see the full decision chain
**So that ** I understand why a decision was recommended
```
Observation
↓
Evidence
↓
Finding
↓
Decision
↓
Business Impact
```
**Acceptance: **
- [ ] Display observation with image/video
- [ ] Show evidence (linked observations)
- [ ] Show finding (pattern/conclusion)
- [ ] Show decision (recommended action)
- [ ] Show business impact (risk, cost, time)
- [ ] Allow approval or rejection
- [ ] Show explainability chain (clickable)
2026-07-02 13:38:09 +00:00
**Why fourth: ** First verified decision.
2026-07-02 13:34:05 +00:00
---
2026-07-02 13:38:09 +00:00
### Story 5: Replay
2026-07-02 13:34:05 +00:00
**As a ** field engineer
**I want to ** replay a mission
**So that ** I can review the entire chain
**V1: ** Simple playback — step through the chain
**Not in V1: ** AI comparison, model versioning
```
Mission-001
↓
Step 1: Observation
Step 2: Evidence
Step 3: Finding
Step 4: Decision
Step 5: Business Impact
```
**Acceptance: **
- [ ] Select mission to replay
- [ ] Step through each stage
- [ ] Show data at each stage
- [ ] Navigate forward and backward
2026-07-02 13:38:09 +00:00
**Why fifth: ** Proves the chain is reproducible.
2026-07-02 13:34:05 +00:00
---
2026-07-02 13:38:09 +00:00
### Story 6: Session Management
**As a ** field engineer
**I want to ** create and manage field sessions
**So that ** missions are organized by location and date
```
Field Session
├── Location: Huddinge
├── Date: 2026-08-14
└── Missions: [Mission-001, Mission-002, ...]
```
**Acceptance: **
- [ ] Create session with location and date
- [ ] List all sessions
- [ ] Open session to see missions
**Why last: ** Organizational layer on top of working core.
---
## Golden Mission
**A real mission that never changes, used as regression test. **
```
Golden Mission 001
├── Location: Huddinge
├── Images: 52
├── Videos: 4
├── Observations: 31
└── Verified Decision Cases: 8
```
Every new model runs against the same mission. See immediately if something got better or worse.
## Review (First-Class Object)
Not just Annotation. Full quality flow:
```
Observation
↓
AI
↓
Human Review
↓
Approved / Rejected / Needs More Evidence
```
Makes the entire quality flow traceable.
## Dashboard v1
Extremely simple:
```
FIELD STATUS
Sessions: 3
Missions: 27
Decision Cases: 11
Pending Reviews: 6
Verified Decisions: 8
[Continue Reviewing]
```
Should feel like a work tool, not a BI system.
2026-07-02 13:34:05 +00:00
## Not in First Release
Intentionally postponed:
| Feature | Why Postponed |
|---------|---------------|
| GPU Queue | Not needed for 20 Decision Cases |
| Hyperparameter Search | Not needed for validation |
| Distributed Training | Not needed for MVP |
| Benchmark (15 models) | Not needed for first cases |
| Canary Deployment | Not needed for internal tool |
| Auto Retraining | Not needed until model validated |
| Bias Dashboard | Not needed until diverse data |
| Drift Detection | Not needed until production |
These are important but don't help reach the first verified workflow.
---
2026-07-02 13:38:09 +00:00
## Definition of "First Verified Decision"
**A First Verified Decision is a Decision Case that: **
- Is built on real observation data
- Has been reviewed by a human
- Has a complete evidence chain
- Is fully reproducible from raw data to recommendation
2026-07-02 13:34:05 +00:00
## Definition of Done (Epic)
- [ ] A pilot can film a real object in quiXzoom
- [ ] Upload material to Intelligence Lab
- [ ] Get a Decision Case created automatically
- [ ] Review AI results
- [ ] Correct annotations
- [ ] See full evidence chain
- [ ] Approve Decision Case
- [ ] Everything saved versioned and traceable
- [ ] At least 1 real Decision Case produced
2026-07-02 13:38:09 +00:00
- [ ] Meets "First Verified Decision" definition
2026-07-02 13:34:05 +00:00
---
## Definition of Ready (Next Epic)
**Epic-002 can start when: **
- 20 real Decision Cases exist
- Field Readiness Gate passed
- STOP rule satisfied
---
## Technical Stack (Recommended)
| Layer | Technology | Rationale |
|-------|-----------|-----------|
| Frontend | React + TypeScript (strict) | Type safety, component ecosystem |
| Backend | Node.js + Express + TypeScript | Same language, fast development |
| Database | PostgreSQL | ACID, JSON support, proven |
| Storage | S3/R2 | Immutable object storage |
| Queue | Bull (Redis) | Proven, observable job queue |
| AI | Python microservice | Model inference separate from API |
| Git | All code versioned | Traceability |
---
## Quality Gates
| Gate | Requirement |
|------|-------------|
| **Code ** | TypeScript strict, ≥80% test coverage |
| **Security ** | No secrets in code, OAuth 2.0 |
| **Audit ** | All actions logged, immutable |
| **Deploy ** | GitOps, reproducible builds |
---
## ändringshistoria
| Version | Datum | Beskrivning |
|---------|-------|-------------|
| 1.0 | 2026-07-02 | Initial Epic-001 specification |
2026-07-02 13:38:09 +00:00
| 1.1 | 2026-07-02 | Reordered stories (Mission Import first, Session Management last), added Golden Mission, Review object, Dashboard v1, vertical user journey, First Verified Decision definition |
2026-07-02 13:34:05 +00:00
---
2026-07-02 13:41:16 +00:00
## Vision
**LandveX Intelligence Lab is the internal factory where raw reality is refined into verified Control Intelligence. **
**Architecture Goal: ** Every artifact must be traceable backward to its source and forward to its decision.
2026-07-02 13:45:41 +00:00
**Architecture Principle: **
**LandveX Intelligence Lab does not produce AI results. It produces verified Decision Cases through a reproducible and traceable pipeline. **
## Core Objects
Three fundamental objects:
| Object | Purpose |
|--------|---------|
| **Session ** | Organizes field work |
| **Artifact ** | Organizes everything produced (video, dataset, models, reports, Decision Cases) |
| **Event ** | Organizes history and makes the entire chain reproducible |
2026-07-02 13:41:16 +00:00
## Development Rule
**No Story may start with UI. Every Story starts with: **
1. Domain model
2. API
3. Storage
4. Tests
5. UI
This keeps architecture clean and allows testing each part without frontend.
2026-07-02 13:45:41 +00:00
## Hierarchy
```
Field Session
↓
Mission
↓
Mission Asset
↓
Observation
↓
Evidence
↓
Finding
↓
Decision
↓
Action
↓
Outcome
```
**Session is the root. ** A pilot day produces many missions.
## Event Sourcing
**Never overwrite status. Status is a projection of history. **
```
MissionCreated
↓
AssetUploaded
↓
AssetValidated
↓
ObservationCreated
↓
EvidenceLinked
↓
DecisionApproved
```
Always replayable.
## Artifact Registry
First-class object. Not just buckets.
```
Artifact
├── id
├── type // video | dataset | model | decision_case | evaluation_report | replay
├── version
├── hash
├── created
├── created_by
├── storage_uri
├── parent
└── lineage
```
Everything becomes traceable.
## Decision Case Immutability
Never modify a Decision Case.
```
Decision Case
↓
Review
↓
Revision
↓
Approved Version
```
Like Git.
## Review Task
```
Review Task
↓
Assigned
↓
Reviewed
↓
Approved
↓
Closed
```
Makes future quality assurance much easier.
## Processing Graph
Not a list of pipelines. Each step is a node.
```
Mission
↓
Dataset
↓
Annotation
↓
Evaluation
↓
Decision
↓
Learning
```
Swap models without changing the rest:
```
YOLO → Grounding DINO → Custom model
```
## Data Quality Domain
```
Quality Issue
├── Blur
├── Duplicate
├── Bad GPS
├── Low Resolution
├── Missing Metadata
├── Wrong Timestamp
└── Occlusion
```
Then: Quality Report.
## Decision Case Comparison
```
Decision A
↓
Decision B
```
Show exactly:
- What changed?
- Which evidence?
- Which confidence?
- Which model?
- Which human?
## Golden Missions & Golden Datasets
| Level | Description |
|-------|-------------|
| **Golden Mission ** | Real mission that never changes |
| **Golden Dataset ** | Selected observations from Golden Mission |
## Domain Event Viewer
Timeline, not logs:
```
09:42 Mission Created
09:43 Video Uploaded
09:44 GPS Extracted
09:45 AI Analysis
09:47 Human Review
09:50 Decision Approved
```
Incredibly useful.
## KPI: Verified Decision Throughput
Not number of models. Not number of missions.
```
Verified Decision Throughput = Verified decisions per day
```
This is your factory capacity.
2026-07-02 13:41:16 +00:00
## Story 1: Mission Import — Implementation Plan
### PR-001: Domain Model
``` typescript
2026-07-02 13:45:41 +00:00
// FieldSession
interface FieldSession {
id : string ; // session_20260814_000001
location : Location ;
date : Date ;
status : SessionStatus ;
missions : string [ ] ; // mission IDs
createdAt : Date ;
}
2026-07-02 13:41:16 +00:00
// Mission
interface Mission {
id : string ; // mission_20260814_000123
2026-07-02 13:45:41 +00:00
sessionId : string ;
2026-07-02 13:41:16 +00:00
status : MissionStatus ;
location : Location ;
device : Device ;
createdAt : Date ;
updatedAt : Date ;
}
// MissionAsset
interface MissionAsset {
id : string ; // asset_000456
missionId : string ;
type : AssetType ; // image | video
storagePath : string ;
checksum : string ;
sizeBytes : number ;
mimeType : string ;
metadata : AssetMetadata ;
createdAt : Date ;
}
// AssetMetadata
interface AssetMetadata {
exif : ExifData ;
gps : GpsCoordinates ;
device : DeviceInfo ;
}
// Upload
interface Upload {
id : string ;
missionId : string ;
status : UploadStatus ;
progress : number ;
startedAt : Date ;
completedAt? : Date ;
}
2026-07-02 13:45:41 +00:00
// Artifact
interface Artifact {
id : string ;
type : ArtifactType ;
version : number ;
hash : string ;
createdBy : string ;
storageUri : string ;
parentId? : string ;
lineage : string [ ] ;
}
2026-07-02 13:41:16 +00:00
// Enums
2026-07-02 13:45:41 +00:00
type SessionStatus = 'planned' | 'active' | 'completed' ;
2026-07-02 13:41:16 +00:00
type MissionStatus = 'created' | 'uploading' | 'processing' | 'completed' | 'failed' ;
type AssetType = 'image' | 'video' ;
2026-07-02 13:45:41 +00:00
type ArtifactType = 'video' | 'dataset' | 'model' | 'decision_case' | 'evaluation_report' | 'replay' ;
2026-07-02 13:41:16 +00:00
type UploadStatus = 'pending' | 'in_progress' | 'completed' | 'failed' ;
```
### PR-002: Storage
- Upload to bucket (S3/R2)
- Metadata in PostgreSQL
- Checksums (SHA-256)
- File size
- MIME type
- EXIF extraction
- GPS parsing
- **No AI yet**
### PR-003: API
```
2026-07-02 13:45:41 +00:00
POST /sessions
POST /sessions/{id}/missions
2026-07-02 13:41:16 +00:00
POST /missions/{id}/assets
2026-07-02 13:45:41 +00:00
GET /sessions/{id}
GET /sessions
2026-07-02 13:41:16 +00:00
GET /missions/{id}
GET /missions
```
### PR-004: Events
```
2026-07-02 13:45:41 +00:00
SessionCreated
↓
2026-07-02 13:41:16 +00:00
MissionCreated
2026-07-02 13:45:41 +00:00
↓
2026-07-02 13:41:16 +00:00
AssetUploaded
2026-07-02 13:45:41 +00:00
↓
AssetValidated
↓
2026-07-02 13:41:16 +00:00
RawDatasetReady
```
**No pipeline yet. Just events. **
### PR-005: UI
Extremely simple:
```
Mission Import
[Drag files] or [Choose files]
[Upload]
Progress: ████████░░ 80%
Done! Mission mission_20260814_000123 created.
```
### Definition of Done (Story 1)
```
Phone → Video → Upload → Bucket → Metadata → Mission visible in Dataset Explorer
```
This is the first proof.
## ID Convention
**Never UUID in UI. UUID internally. **
| Entity | ID Format | Example |
|--------|-----------|---------|
2026-07-02 13:45:41 +00:00
| Session | `session_YYYYMMDD_NNNNNN` | `session_20260814_000001` |
2026-07-02 13:41:16 +00:00
| Mission | `mission_YYYYMMDD_NNNNNN` | `mission_20260814_000123` |
| Asset | `asset_NNNNNN` | `asset_000456` |
| Observation | `obs_NNNNNN` | `obs_000981` |
| Decision | `decision_NNNNNN` | `decision_000044` |
## Artifact Viewer
When clicking a file, show:
```
Raw Asset
├── Filename: IMG_20260814_143052.jpg
├── Size: 4.2 MB
├── MIME: image/jpeg
├── Hash: sha256:a3f7...
├── GPS: 59.2371, 18.1456
├── EXIF: Device=iPhone14,2, ISO=100, Exposure=1/120s
├── Created: 2026-08-14 14:30:52 UTC
├── Storage: s3://landvex-raw/2026/08/14/mission_20260814_000123/
└── Version: 1
```
Saves enormous time during debugging.
## Status
2026-07-02 13:34:05 +00:00
2026-07-02 13:41:16 +00:00
**READY FOR DEVELOPMENT — PR-001: Domain Model **