-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Problem
Completed tier 1 roadmap specs are piling up in delivery-process/specs/ (23 of 38 specs are completed). These served their planning purpose but now require ongoing maintenance without providing proportional value. Meanwhile, package-level executable specs already contain the living behavior proof.
Current state:
- 23 completed tier 1 specs sit alongside 15 active/roadmap specs
- Executable specs in
{package}/tests/features/behavior/already carry@libar-docs-implementsbacklinks - Bidirectional traceability exists (
@libar-docs-executable-specs↔@libar-docs-implements) but tier 1 specs are never "graduated" - Decision specs (PDRs) are correctly permanent — they document why, not what was planned
The stub analogy: Design stubs follow a clear lifecycle: delivery-process/stubs/ → implementation in src/ → stubs removed. Tier 1 specs should follow the same pattern: delivery-process/specs/ → behavior absorbed into executable specs → tier 1 spec graduated.
Proposal: Spec Graduation Lifecycle
Core Principle
Tier 1 specs are planning artifacts. Like stubs, they get absorbed into the real thing. Once a pattern's executable specs fully cover its behavior, the tier 1 spec has served its purpose.
Tier 1 Spec Lifecycle:
roadmap → active → completed → graduated
│
Behavior lives in executable specs
Planning metadata rolls up to epics
Tier 1 spec archived or removed
What Migrates Where
| Tier 1 Content | Destination | Notes |
|---|---|---|
| Behavior scenarios | Package executable specs | Already done via two-tier architecture |
| Invariant/Rationale prose | Executable spec Feature/Rule descriptions | Enrich package specs with domain documentation |
| Phase/dependency metadata | Epic specs | One epic per phase cluster (see below) |
| Deliverable tracking | Git history | Purpose served — no migration needed |
What Stays Permanently
| Artifact | Why |
|---|---|
| Decision specs (PDRs) | Architectural events — permanent record of why |
| Epic specs | Roadmap coordination — group-level planning |
| Active/roadmap tier 1 specs | Still guiding implementation work |
Epic Specs as Graduation Target
Introduce epic-level specs as the surviving roadmap artifacts. One precedent exists: epic-process-enhancements.feature uses @libar-docs-level:epic.
Proposed epic groupings (matching natural phase clusters):
| Epic | Phase Range | Graduated Specs | Package Home |
|---|---|---|---|
| Foundation | 02-03 | EventStoreFoundation, CommandBusFoundation | platform-core, platform-bus |
| Decider & Type Safety | 14-16 | DeciderPattern, ProjectionCategories, DynamicConsistencyBoundaries | platform-decider, platform-fsm, platform-core |
| Durability & Production | 18a-18c | DurableFunctionAdapters, WorkpoolPartitioning, EventStoreDurability, EventReplay | platform-core |
| Service Independence | 19-20 | BddTestingInfra, EcstFatEvents, ReservationPattern | platform-core |
| Integration | 17, 21 | ReactiveProjections, IntegrationPatterns | platform-core |
| Agent Platform | 22-22c | AgentAsBC, AgentComponentIsolation, AgentLLM, AgentCommand | platform-core |
| Example App | 23 | ExampleAppModernization | order-management |
Epic specs would carry:
@libar-docs-level:epic- Phase range and dependency graph (absorbed from child specs)
- List of graduated patterns with links to their executable spec locations
- High-level narrative (Problem/Solution from graduated specs, condensed)
Graduation Process (Per Completed Pattern)
Mirrors the stub resolution workflow:
- Verify executable spec coverage — all tier 1 scenarios have package-level equivalents
- Migrate domain documentation — move Invariant/Rationale prose from tier 1 Rules into executable spec Feature/Rule descriptions (enriching the living tests with context)
- Update epic spec — add pattern to epic's graduated patterns list
- Archive or remove tier 1 spec — either move to
specs/archive/or delete (git history preserves it) - Update generators — codecs should prefer executable specs for content when tier 1 spec is graduated/absent
Generator Changes
The MasterDataset currently merges all sources without lifecycle awareness. Changes needed:
- Content precedence rule: When a pattern has
@libar-docs-implementsbacklinks AND the tier 1 spec iscompleted/graduated, codecs prefer executable spec content for behavior documentation - Epic-aware roadmap generation:
ROADMAP.mdand timeline generators use epic specs for graduated patterns instead of individual tier 1 specs - Traceability update: Traceability codec should show graduation status and link to executable spec location
Process Guard Updates
- New validation rule:
graduation-ready(info/warning) — completed spec with all scenarios covered by executable specs is a candidate for graduation - Optional:
graduatedFSM status as terminal state aftercompleted(or use archive/removal as the signal)
Scope & Phasing
Phase 1: Documentation & Decision
- Create PDR for spec graduation (PDR-014 or similar)
- Define graduation criteria formally
- Decide:
graduatedFSM status vs. archive/removal vs. generator-level preference
Phase 2: Epic Spec Structure
- Define epic spec format (extend
@libar-docs-level:epicpattern) - Create epic specs for the 7 natural phase clusters
- Add epic-level tags:
@libar-docs-graduated-patterns,@libar-docs-phase-range
Phase 3: Generator Adaptation
- Implement content precedence in codecs (prefer executable specs for graduated patterns)
- Update roadmap/timeline generators to use epic specs
- Update traceability codec for graduation awareness
Phase 4: Graduation Execution
- Graduate foundation specs (phases 02-03) as pilot
- Migrate domain documentation to executable spec descriptions
- Validate generated docs quality after graduation
- Graduate remaining completed specs in phase-cluster batches
Phase 5: Process API & Tooling
- Add
pnpm process:query -- list --graduation-readyquery - Add graduation-ready detection to Process Guard (info level)
- Update planning plugin skills for graduation awareness
Prior Art in This Codebase
- Stub lifecycle (PDR-009):
delivery-process/stubs/→src/→ cleanup - Epic spec pattern:
epic-process-enhancements.featurewith@libar-docs-level:epic - Two-tier spec architecture (PDR-007): already separates planning from implementation proof
@libar-docs-executable-specs: bidirectional traceability already in place
Questions to Resolve
- Archive vs. delete? Git preserves history either way. Archive directory adds noise; deletion is cleaner but less discoverable.
graduatedFSM status vs. implicit? An explicit status is queryable but adds FSM complexity. Removal/archive is simpler but less trackable.- Enriching executable specs with documentation — should executable spec Feature descriptions carry the full Invariant/Rationale prose, or just link back to the PDR decisions?
- Epic spec granularity — one per phase cluster (7 epics) or one per product area (3 epics: Platform, DeliveryProcess, ExampleApp)?