19 KiB
Discovery Gap Analysis Model
This document defines how missing or weak project context should be detected and converted into targeted follow-up discovery questions.
It is a planning artifact for TASK-026 implementation. No code has been implemented.
Overview
When rdb generate populates context files from discovery answers, some sections will remain empty or contain only placeholders because:
- No discovery question addressed them
- The answer had Low confidence (filtered out)
- The mapping did not route data to that section
- The section does not exist in the template
Gap analysis detects these cases and generates targeted follow-up questions instead of leaving them as TBD.
1. Gap Detection Rules
A gap exists when one or more of the following conditions hold:
| Rule ID | Condition | Example |
|---|---|---|
| GAP-01 | A context file section contains only a TBD or TDB placeholder |
## Mission\n\nTBD — What is the organisation's core mission? |
| GAP-02 | A context file section exists in the template but no discovery answer mapped to it | ## Monitoring & Alerting has no mapped source from any Q-id |
| GAP-03 | A section contains partial content with unresolved sub-items (e.g., blank list entries, empty brackets) | Section has text but a required sub-list item is missing |
| GAP-04 | An entire context file exists but has fewer than 50 characters of non-whitespace content beyond the heading | File is effectively empty |
Detection operates per section within each context file, not at the file level. A file with partial data may have gaps in some sections and none in others.
2. Gap Severity Levels
| Severity | Label | Criteria | Action Required |
|---|---|---|---|
| S1 | Critical | The gap is in a section required for the current BUILDING stage. Blocking on this gap would stop all downstream work. | Must be resolved before moving to REVIEW_READY |
| S2 | Important | The gap is in a section that will affect future implementation decisions but does not block immediate work. | Resolve within 1 BUILDING cycle (next discovery round) |
| S3 | Low | The gap adds useful detail but is not needed for any active or planned task. | Can be deferred to REVIEW_READY or later |
Severity assignment logic:
- A gap is S1 if its section appears in the current stage's expected files and any open TASK references that section
- A gap is S2 if its section is referenced by a mapped discovery question (Q-001 to Q-014) but no High/Medium confidence answer was produced
- A gap is S3 if the section exists in templates.py, has no mapped discovery question, and does not appear in any active task
3. Question Generation Rules
Follow-up questions are generated according to these rules:
| Rule | Guidance | Example |
|---|---|---|
| QG-01 | One gap maps to exactly one follow-up question — do not bundle multiple gaps into a single question | Separate ## Mission and ## Customers / Users even if both are in company-context.md |
| QG-02 | Questions must be answerable with the original discovery format (text answer + confidence) | Ask for specific facts, not open-ended essays |
| QG-03 | The question text should reference the target section so the responder understands context | "What is the team's core mission statement?" rather than "Tell us about your company" |
| QG-04 | If a gap maps to a table format section, specify the table columns needed | For risks.md: "What security risk affects data retention? Provide impact and mitigation." |
| QG-05 | Do not generate questions for sections already filled with non-TBD content | Skip ## Mission if it reads "We build developer tools" |
| QG-06 | Prefer questions that can be answered by the project owner or a technical lead, not external experts | "Which cloud provider hosts production?" rather than "Describe your AWS architecture" unless already established |
4. Question Prioritisation Rules
Follow-up questions are prioritised using this ordered scheme:
- Severity first — All S1 gaps before all S2 gaps; all S2 before all S3
- File completeness within severity — Files with more gaps are addressed earlier (reduce file-level churn)
- Dependency order — If answering gap A enables answers to gap B, place A first
- Question scope — Within equal priority, shorter/closer-to-answer questions come first
For example: ## Mission (S1, company-context.md) and ## Hosting (S1, infrastructure-context.md) are both S1; company-context.md goes first because it has 3 unresolved gaps versus infrastructure-context.md's 2.
5. Gap-to-Question Mapping
This mapping covers every template section that can contain TBD placeholders. For each section it defines: the gap trigger, the follow-up question to ask, and the target discovery question ID for the follow-up entry.
context/company-context.md
| Section | Trigger | Follow-up Question | Discovery Q-ID |
|---|---|---|---|
## Mission |
Contains only TBD/placeholder text | "What is the organisation's core mission or purpose?" | New (Q-015-style) |
## Products & Services |
Contains only TBD/placeholder text | "List the products or services the organisation offers. What does each one do?" | New |
## Customers / Users |
Contains only TBD/placeholder text | "Who are the primary customers or users of your products? Use bullet points for each distinct user type." | New |
## Brand & Positioning |
Contains only TBD/placeholder text | "How does the organisation position itself in the market?" | New |
## Key Stakeholders |
Contains only TBD/placeholder text | "Who are the key stakeholders (names, roles, contact) for this project?" | New |
context/product-brief.md
| Section | Trigger | Follow-up Question | Discovery Q-ID |
|---|---|---|---|
## Problem |
Contains only TBD/placeholder text | "What problem is this product solving? Describe the customer pain and desired outcome." | Mirrors Q-001 |
## Users |
Contains only TBD/placeholder text | "Who are the users of this product? List personas, roles, or segments." | Mirrors Q-002 |
## Success Criteria |
Contains only TBD/placeholder text | "How will you measure success for this product? Be specific and verifiable." | Mirrors Q-003 |
## Minimum Useful Version |
Contains only TBD/placeholder text | "What is the minimum set of features that delivers real value to users?" | Mirrors Q-004 |
context/project-brief.md
| Section | Trigger | Follow-up Question | Discovery Q-ID |
|---|---|---|---|
## Problem Statement |
Contains only TBD/placeholder text | "Restate the product problem in project-specific terms. Include scope boundaries." | Mirrors Q-001 |
## Target Audience |
Contains only TBD/placeholder text | "Who is the intended audience for this project? Who benefits from the final product?" | Mirrors Q-011 |
## Key Features (MVP) |
Contains only TBD/placeholder text | "List the minimum set of features for the first release. Each feature should be independently valuable." | Mirrors Q-004 |
## Success Metrics |
Contains only TBD/placeholder text | "How will you measure success for this project? Include specific thresholds or targets." | Mirrors Q-003 |
## Timeline & Milestones |
Contains only TBD/placeholder text | "What are the expected delivery dates and key milestones?" | New (Q-015-style) |
context/architecture.md
| Section | Trigger | Follow-up Question | Discovery Q-ID |
|---|---|---|---|
## Overview |
Contains only TBD/placeholder text | "Describe the high-level system architecture. What design principles or patterns apply?" | Mirrors Q-012 |
## Core Components |
Contains only TBD/placeholder text | "List the main modules, services, or packages and their responsibilities." | Mirrors Q-012 |
## Data Flow |
Contains only TBD/placeholder text | "How does data move through the system? Describe entities, storage, and movement between components." | Mirrors Q-005 |
## External Integrations |
Contains only TBD/placeholder text | "What external systems, APIs, or services must this connect to?" | Mirrors Q-006 |
## Deployment Architecture |
Contains only TBD/placeholder text | "Describe the deployment layout, scaling strategy, and process." | Mirrors Q-010 |
context/decisions.md
| Section | Trigger | Follow-up Question | Discovery Q-ID |
|---|---|---|---|
| Table body (no rows) | Has 0 data rows in the decision table | "What architecture or design decisions have been made? Record each with reason and date." | New |
context/risks.md
| Section | Trigger | Follow-up Question | Discovery Q-ID |
|---|---|---|---|
| Table body (no rows) | Has 0 data rows in the risks table | "What are the project risks? For each, describe impact and mitigation strategy." | Mirrors Q-007 |
context/assumptions.md
| Section | Trigger | Follow-up Question | Discovery Q-ID |
|---|---|---|---|
| Table body (no rows) | Has 0 data rows in the assumptions table | "What are you assuming about this project? For each, note confidence and whether validation is needed." | Mirrors Q-008 |
context/development-context.md
| Section | Trigger | Follow-up Question | Discovery Q-ID |
|---|---|---|---|
## Tech Stack |
Contains only TBD/placeholder text | "What is the technology stack? List languages, frameworks, libraries, and tooling." | Mirrors Q-012 |
## Coding Standards |
Contains only TBD/placeholder text | "Are there agreed coding standards? Describe style conventions, naming patterns, linters, and formatters." | New |
## Repository Structure |
Contains only TBD/placeholder text | "Describe the repository directory layout and module organisation." | Mirrors Q-012 |
## Build & Test |
Contains only TBD/placeholder text | "How do you build, test, and run this codebase locally? Include commands and setup steps." | Mirrors Q-009 |
## Dependencies |
Contains only TBD/placeholder text | "What external services, databases, or third-party APIs are required?" | Mirrors Q-006 |
context/infrastructure-context.md
| Section | Trigger | Follow-up Question | Discovery Q-ID |
|---|---|---|---|
## Hosting |
Contains only TBD/placeholder text | "Where is the application hosted? Specify cloud provider, on-prem details, or container orchestration." | Mirrors Q-013 |
## Environments |
Contains only TBD/placeholder text | "What environments exist (dev/staging/prod)? Describe each and data management approach." | Mirrors Q-013 |
## CI / CD Pipeline |
Contains only TBD/placeholder text | "Describe the build, test, and deployment pipeline configuration." | Mirrors Q-013 |
## Monitoring & Alerting |
Contains only TBD/placeholder text | "What tools are used for monitoring, logging, and alerting?" | Mirrors Q-013 |
## Security |
Contains only TBD/placeholder text | "What authentication models, data protection requirements, compliance needs, and access control policies apply?" | Mirrors Q-013 |
context/agent-guidelines.md
| Section | Trigger | Follow-up Question | Discovery Q-ID |
|---|---|---|---|
## Purpose |
Contains only TBD/placeholder text | "What should agents or developers know about working on this project? Note constraints and conventions." | Mirrors Q-014 |
## Preferred Tools |
Contains only TBD/placeholder text | "Which editors, debuggers, testing frameworks, and CLI tools are recommended?" | Mirrors Q-014 |
## Testing Preferences |
Contains only TBD/placeholder text | "How should tests be written, run, and verified for this project?" | Mirrors Q-009 |
## Common Tasks |
Contains only TBD/placeholder text | "What are the typical workflows for developers or AI agents on this project?" | New |
## Known Gotchas |
Contains only TBD/placeholder text | "Are there known pitfalls, quirks, or important caveats to be aware of?" | New |
context/repository-context.md
| Section | Trigger | Follow-up Question | Discovery Q-ID |
|---|---|---|---|
## Purpose |
Contains only TBD/placeholder text | "What is this repository's overall purpose and scope? What is it responsible for (and not responsible for)?" | Mirrors Q-014 |
## Key Components |
Contains only TBD/placeholder text | "List the key components or modules in this repository." | Mirrors Q-012 |
## Dependencies |
Contains only TBD/placeholder text | "What project dependencies exist? List external services, databases, and third-party APIs." | Mirrors Q-006 |
## Contributing |
Contains only TBD/placeholder text | "Describe the contribution process: branch strategy, code review requirements, testing expectations." | Mirrors Q-014 |
context/open-questions.md
| Section | Trigger | Follow-up Question | Discovery Q-ID |
|---|---|---|---|
| Table body (no rows) | Has 0 data rows | "Are there any open questions that need further investigation before implementation begins?" | New |
project-level files (PROJECT_STATE.md, AGENT_HANDOFF.md, TASKS.md, TEST_PLAN.md, RUN_LOG.md)
These files are managed by CLI commands, not by discovery answers. They are not subject to gap analysis. Gaps in these files are handled by command logic, not by question generation.
6. Example Gap-to-Question Flow
Here is an end-to-end example of how the model operates:
Step 1 — Gap Detection
rdb context-status or a dedicated gap analysis scan finds:
| File | Section | Gap Rule | Severity |
|---|---|---|---|
context/company-context.md |
## Mission |
GAP-01 (TBD placeholder) | S1 |
context/company-context.md |
## Key Stakeholders |
GAP-01 (TBD placeholder) | S2 |
context/infrastructure-context.md |
## Hosting |
GAP-01 (TBD placeholder) | S1 |
context/infrastructure-context.md |
## Monitoring & Alerting |
GAP-01 (TBD placeholder) | S2 |
context/development-context.md |
## Coding Standards |
GAP-01 (TBD placeholder) | S3 |
Step 2 — Prioritisation
Sorted by severity, then file completeness:
- S1 —
company-context.md/## Mission(company has 5 gaps vs infra's 4) - S1 —
infrastructure-context.md/## Hosting - S2 —
company-context.md/## Key Stakeholders - S2 —
infrastructure-context.md/## Monitoring & Alerting - S3 —
development-context.md/## Coding Standards
Step 3 — Question Generation
Follow-up questions appended to context/discovery-log.md:
| New ID | Follow-up Question | Source Gap | Confidence Expected |
|---|---|---|---|
| Q-015 | "What is the organisation's core mission or purpose?" | company-context.md ## Mission |
High |
| Q-016 | "Where is the application hosted? Specify cloud provider, on-prem details, or container orchestration." | infrastructure-context.md ## Hosting |
High |
| Q-017 | "Who are the key stakeholders (names, roles, contact) for this project?" | company-context.md ## Key Stakeholders |
Medium |
| Q-018 | "What tools are used for monitoring, logging, and alerting?" | infrastructure-context.md ## Monitoring & Alerting |
Medium |
| Q-019 | "Are there agreed coding standards? Describe style conventions, naming patterns, linters, and formatters." | development-context.md ## Coding Standards |
Low |
Step 4 — Regeneration
After answers to Q-015 through Q-019 are collected:
- Run
rdb generate(or re-run gap analysis) - Sections populated from new answers should resolve the S1 and S2 gaps
- Remaining gaps re-prioritise for the next cycle
7. Edge Cases
| Case | Handling |
|---|---|
| Section contains partial text + TBD sub-items | Only generate a question for the missing sub-item, not the entire section |
| Section text reads "TBD" but it is actually correct (intentional placeholder) | Provide a skip/confirm mechanism — let the user mark as "acceptable" to suppress the gap |
| Template adds new sections in future versions | Sections with no mapping entry default to S3 severity with a generic question: "What information belongs in this section?" |
| A section maps to multiple discovery questions | Generate separate follow-ups per unmapped question, each linked to its source Q-id |
| File has fewer than 50 characters (GAP-04) but the heading is meaningful | Count content beyond the heading line only |
8. Implementation Task: TASK-026
Scope for TASK-026 (Implementation)
TASK-026 will implement a CLI command rdb gap that:
- Reads all 18 template-based context files listed in
templates.py CONTEXT_FILES - For each file, scans every section for GAP-01 (TBD), GAP-03 (partial content), or GAP-04 (near-empty file)
- For each gap found, applies severity rules from Section 2
- Generates follow-up questions using the mapping in Section 5
- Prioritises questions per Section 4
- Outputs the prioritised question list to stdout
- Optionally appends answers to
context/discovery-log.mdwhen a user provides them interactively
What TASK-026 Does NOT Do
- Does not auto-populate context files — that remains
rdb generate's scope - Does not replace
rdb discover— follow-up questions are new entries in discovery-log.md - Does not change the existing gap analysis model document
Expected Module Structure (TASK-026)
src/rdb_discovery/gap_analysis.py # Core detection and question generation logic
tests/test_gap_analysis.py # Unit tests for each section mapping
Expected Test Requirements (TASK-026)
| Test Category | Count | Description |
|---|---|---|
| Gap detection per template section | ~25 | One per section in the mapping table |
| Severity classification | 3+ | S1, S2, S3 on representative inputs |
| Question generation format | 5+ | Follow-up questions match QG-01 through QG-06 rules |
| Prioritisation ordering | 3+ | Sorted output matches severity → completeness → dependency → scope |
| Edge cases (Section 6) | 5+ | Partial sections, acceptable TBDs, new template sections, multi-question sections |
CLI command rdb gap |
4+ | Help text, empty project handling, discovery-log append mode |
9. How This Model Relates to the Rest of RDB
discovery-log.md (source of truth for all answers)
│
▼
rdb discover / rdb gap (collects or generates questions)
│
▼
rdb generate (maps answers → context files via discovery-context-mapping.md)
│
▼
rdb context-status (reports health, can trigger gap analysis)
│
▼
rdb gap (detects remaining gaps → new questions)
│
└───────────────────► loop back to rdb discover for follow-up answers
This model connects to:
context/discovery-context-mapping.md— the existing Q-001 to Q-014 mapping (this model extends it with follow-up question generation)src/rdb_discovery/templates.py— the authoritative list of template sections used for detectionrdb context-status— health reporting can surface gap counts as an additional metric
This document is a planning artifact. No code has been implemented. TASK-026 will implement the CLI command based on this model.