Pet epics
| Document version | Date | Summary |
|---|---|---|
| v7 | 2026-07-24 | Archive the completed v0.2.0 epics and open the next release map |
| v8 | 2026-07-25 | Define the v0.3.0 embedded firmware foundation and project UX epics |
| v9 | 2026-07-25 | Add v0.3.0 release verification and hardening as the final epic |
| v10 | 2026-07-27 | Complete E17 after accepting the v0.3.0 architecture and release scope |
| v11 | 2026-07-27 | Record completion of E18, E19, and E20 |
| v12 | 2026-07-27 | Clarify the T-Display family and selected S3 variant contract |
| v13 | 2026-07-28 | Record completion of E21 |
| v14 | 2026-07-28 | Record completion of E22 |
Status: Draft
Current release: v0.3.0
Related documents: Product specification, milestones, general architecture, architecture for v0.3.0, and the release archives for v0.1.0 and v0.2.0.
1. Purpose
This document defines the product and engineering outcomes required by each epic.
An epic belongs to one release and contains multiple PBIs. An epic describes a verifiable outcome rather than a source directory, implementation phase, or team activity.
Epic identifiers are permanent and are not reused. Future releases continue the sequence instead of restarting at E01.
2. Epic completion rules
An epic is completed only when:
- all child PBIs are completed
- all epic completion criteria are satisfied
- required tests pass
- accepted architecture decisions are reflected in code and documentation
- new limitations are recorded in
known-limitations.md - deferred defects are recorded in
bugs.md - architecture deviations are documented
- verified support claims are not broader than the available evidence
An epic must not be marked completed because its main implementation exists while tests or required documentation remain unfinished.
3. Archived releases
Completed v0.1.0 epics are archived in release v0.1.0. That archive
holds E01 through E07 with their full outcomes, scope, and completion criteria.
Completed v0.2.0 epics are archived in release v0.2.0. That archive
holds E08 through E16 with their full outcomes, scope, and completion criteria.
Epic identifiers continue from E17. They are permanent and are not reused, so a future release
never restarts the sequence.
4. Release v0.3.0 epic map
| Epic | Title | Status | Primary outcome |
|---|---|---|---|
E17 | v0.3.0 architecture and release scope | Completed | The embedded firmware foundation, project UX, board, TFT, asset, dependency, and support-claim boundaries for v0.3.0 are documented and accepted |
E18 | Simple project command entrypoint | Completed | Common build, test, run, verify, and clean workflows can be driven through one small project-owned command without replacing CMake or the gate |
E19 | Dependency and local override policy | Completed | Fetched dependencies have a documented local override policy, closing or narrowing LIM-005 without weakening pinned default builds |
E20 | ESP-IDF firmware foundation | Completed | A reusable apps/firmware foundation builds and links through ESP-IDF for the selected ESP32-S3 T-Display S3 target, narrowing LIM-012 to hardware runtime evidence |
E21 | Embedded-safe component and verification boundaries | Completed | Selected frontend-neutral components and Core verification checks are made suitable for embedded build evidence, including explicit coverage of LIM-003 |
E22 | TFT presentation behaviour cleanup | Completed | The presentation priority issue that hides the attentive activity is fixed or deliberately replaced by a documented product rule, closing or narrowing LIM-010 |
E23 | Release verification and hardening | Planned | The release meets its workflow, embedded build, boundary, limitation, and support-claim evidence requirements |
The release goal and expected capabilities are recorded in
milestones. The concrete architecture is recorded in
architecture for v0.3.0. PBIs for this release start at PBI-064.
4.1 Dependency view
flowchart TD E17[E17 Architecture and scope] E18[E18 Project command entrypoint] E19[E19 Dependency overrides] E20[E20 ESP-IDF firmware foundation] E21[E21 Embedded component boundaries] E22[E22 TFT presentation cleanup] E23[E23 Release verification] E17 --> E18 E17 --> E19 E17 --> E20 E17 --> E21 E17 --> E22 E17 --> E23 E19 --> E20 E20 --> E21 E18 --> E23 E19 --> E23 E20 --> E23 E21 --> E23 E22 --> E23
E18 can proceed after E17 because it wraps existing workflows before embedded implementation is complete. E19 should land before E20 where dependency configuration affects ESP-IDF, SDL, or cmocka builds. E21 depends on the firmware foundation because embedded suitability needs a real build target. E22 can proceed after E17 because it is a product and presentation behaviour correction, not a release hardening bucket. E23 is the release-level convergence point.
Testing is not deferred to E23. Every implementation epic includes its own tests and evidence. E23 adds release-level integration, final gates, support-claim review, limitation status review, and documentation hardening.
5. E17: v0.3.0 architecture and release scope [+]
Release: v0.3.0
Status: Completed
Dependencies: None
5.1 Outcome
The release architecture defines the embedded firmware foundation, ESP-IDF platform boundary,
T-Display family and variant configuration, TFT frontend direction, generated embedded asset direction, project
command surface, dependency policy, and support-claim limits for v0.3.0.
The result is an accepted implementation plan that can guide PBIs without allowing ESP-IDF, board pins, display controllers, generated assets, or workflow convenience to define Core behaviour.
5.2 In scope
arch-v0.3.0.md- firmware app foundation boundary
- ESP-IDF platform glue boundary
- T-Display family selection and variant configuration boundary
- TFT frontend direction with ST7789 as the first controller family
- generated embedded asset direction
- project command entrypoint scope
- dependency override policy scope
- embedded support claim levels
- explicit release handling for
LIM-012,LIM-005,LIM-003, andLIM-010
5.3 Out of scope
- implementing the firmware foundation
- implementing a complete TFT renderer
- implementing board button input
- implementing generated asset conversion
- implementing persistence, identity, adapters, networking, or power management
- creating generic host or frontend support libraries
5.4 Completion criteria
-
arch-v0.3.0.mdexists and follows the version architecture policy - the firmware app, platform glue, board configuration, and TFT frontend direction are separated
- the generated embedded asset direction is recorded without creating a premature format promise
- the support matrix distinguishes build, cross-compile, and runtime evidence
- carried limitations in release scope are linked to the epic that owns their resolution
- open decisions are named for PBI or later-release resolution
5.5 Traceability
SPEC-PR-007: one Core and multiple frontendsSPEC-FR-026: varied frontend capabilitiesSPEC-FR-029: frontend independenceSPEC-NFR-001: portabilitySPEC-NFR-006: maintainabilitySPEC-NFR-007: compatibility awarenessLIM-012,LIM-005,LIM-003,LIM-010arch-v0.3.0: sections 1, 2, 4, 5, 8, 9, 10, and 11
6. E18: Simple project command entrypoint [+]
Release: v0.3.0
Status: Completed
Dependencies: E17
6.1 Outcome
Common project workflows can be run through one small command entrypoint while CMake, CTest,
gate.py, and direct run commands remain the underlying source of truth.
The result makes everyday development easier without duplicating composition rules or hiding the actual verification commands.
6.2 In scope
- project-owned command entrypoint
- build, test, run desktop, verify, and clean workflows
- dry-run or command planning output where useful for tests
- clear errors for missing tools or unsupported command combinations
- documentation of the daily workflow
- tests for command parsing and command planning
6.3 Out of scope
- replacing
gate.py - replacing CMake presets
- creating a second composition registry
- CI provider integration
- package manager or installer commands
- embedded flash or monitor commands unless a PBI explicitly includes them
6.4 Completion criteria
- common commands are implemented and documented
- the entrypoint delegates to existing project workflows
- unsupported command combinations fail clearly
- tests cover parsing and command planning
- direct CMake and gate commands remain documented for maintainer use
6.5 Traceability
SPEC-NFR-006: maintainabilityarch-v0.3.0: sections 5.8, 7.3, and 8.7- development workflow
7. E19: Dependency and local override policy [+]
Release: v0.3.0
Status: Completed
Dependencies: E17
7.1 Outcome
Fetched dependencies keep pinned default behaviour while developers can use project-owned local override configuration without editing source files.
The result closes or narrows LIM-005 for the dependencies the release supports.
7.2 In scope
- local override policy for fetched dependencies
- cmocka override handling where practical
- SDL override handling where practical
- ESP-IDF integration guidance that avoids creating a new ad hoc dependency path
- documentation for pinned defaults and local overrides
- verification that override configuration does not affect Core dependency boundaries
7.3 Out of scope
- vendoring third-party dependency source into the repository
- supporting every package manager
- making offline first configure guaranteed for every developer environment
- replacing ESP-IDF installation or setup
- changing third-party diagnostic ownership rules
7.4 Completion criteria
- supported override variables or configuration paths are documented
- pinned default dependency behaviour remains reproducible
- supported local override paths work where practical
- third-party diagnostics remain outside project diagnostics
-
LIM-005is closed or narrowed with recorded evidence
7.5 Traceability
SPEC-NFR-006: maintainabilitySPEC-NFR-007: compatibility awarenessLIM-005arch-v0.3.0: sections 8.5, 10.2, and 11
8. E20: ESP-IDF firmware foundation [+]
Release: v0.3.0
Status: Completed
Dependencies: E17, E19
8.1 Outcome
A reusable embedded firmware app foundation builds and links through ESP-IDF for the selected LILYGO T-Display S3 target.
The result proves embedded build suitability without claiming display output, button input, persistence, sensors, networking, or hardware runtime behaviour.
8.2 In scope
apps/firmwaresource ownershipplatforms/esp_idfbuild integrationboards/t_displayfamily configuration and selecteds3variant record- selected ESP-IDF target and toolchain evidence
- firmware lifecycle skeleton using public Core APIs
- build and link evidence through ESP-IDF
- support matrix update for embedded build evidence
- closure or narrowing of
LIM-012
8.3 Out of scope
- complete hardware runtime
- TFT rendering
- board button input dispatch
- Wi-Fi, Bluetooth, networking, sensors, persistence, or power management
- classic ESP32 T-Display support
- Arduino or PlatformIO support
- Core dependency on ESP-IDF
8.4 Completion criteria
- the firmware foundation is structured as reusable app code rather than a disposable probe
- ESP-IDF configures, builds, and links the firmware foundation
- the firmware foundation uses public Core APIs only
- T-Display family selection and S3 facts are recorded outside the Core and generic TFT frontend direction
- no runtime hardware capability is claimed without execution evidence
-
LIM-012is narrowed with recorded evidence
8.5 Traceability
SPEC-NFR-001: portabilitySPEC-NFR-002: resource awarenessSPEC-NFR-007: compatibility awarenessLIM-012arch-v0.3.0: sections 5.3, 5.4, 5.5, 6.1, 6.2, 7.2, and 8.8
9. E21: Embedded-safe component and verification boundaries [+]
Release: v0.3.0
Status: Completed
Dependencies: E17, E20
9.1 Outcome
Selected frontend-neutral components are either build verified under the embedded boundary or explicitly excluded with a recorded reason, and Core verification cannot silently omit public operations from the allocation probe.
The result improves embedded evidence and closes or narrows LIM-003.
9.2 In scope
- embedded build evaluation for
components/presentation - embedded build evaluation for
components/layout - embedded build evaluation for
components/manifest components/assetsreader and stdio boundary evaluation- exclusion of desktop-only reader implementations from embedded builds where needed
- Core boundary checks against SDK, board, display, filesystem, and network dependencies
- allocation probe public API coverage enforcement
- closure or narrowing of
LIM-003
9.3 Out of scope
- complete asset converter implementation
- runtime text manifest parsing requirement on firmware
- runtime PNG decoding requirement on firmware
- persistence format work
- broad performance benchmarking on hardware
- generic host or frontend support libraries
9.4 Completion criteria
- selected frontend-neutral components have embedded build evidence or explicit exclusion records
- desktop stdio/file assumptions are isolated from embedded builds where required
- Core boundary checks cover forbidden embedded dependencies
- allocation probe coverage cannot silently omit a public Core operation
-
LIM-003is closed or narrowed with recorded evidence - any remaining embedded component limitation is linked to a future PBI
9.5 Traceability
SPEC-NFR-001: portabilitySPEC-NFR-002: resource awarenessSPEC-NFR-003: testabilitySPEC-NFR-006: maintainabilityLIM-003arch-v0.3.0: sections 5.7, 8.3, 8.4, 8.7, and 10.2
10. E22: TFT presentation behaviour cleanup [+]
Release: v0.3.0
Status: Completed
Dependencies: E17
10.1 Outcome
The presentation behaviour that makes the attentive activity unreachable in product runs is fixed or deliberately replaced by a documented product rule.
The result closes or narrows LIM-010 before the TFT direction starts depending on the same
presentation roles.
10.2 In scope
- review of activity and expression dwell rules around greet, attentive, and happy states
- review of presentation role priority for attentive and happy output
- Core or presentation-component change if product behaviour requires it
- tests proving attentive can be presented, or documentation proving why it should remain hidden
- asset and role contract update only if required by the selected fix
- closure or narrowing of
LIM-010
10.3 Out of scope
- new activity families
- new trait, mood, identity, or maturity systems
- broad art direction changes
- TFT rendering implementation
- desktop input expansion
- generic animation system redesign
10.4 Completion criteria
- the intended product rule for greet, happy expression, and attentive activity is documented
- tests cover the selected behaviour
- presentation roles still insulate renderers from direct Core enum handling
- desktop SDL presentation continues to fall back calmly for unknown states
-
LIM-010is closed or narrowed with recorded evidence
10.5 Traceability
SPEC-FR-011: calm feedbackSPEC-FR-014: autonomous activitiesSPEC-FR-025: presentation stateSPEC-FR-029: frontend independenceLIM-010arch-v0.3.0: sections 5.6, 8.7, and 10.2arch-v0.2.0: section 8.2
11. E23: Release verification and hardening
Release: v0.3.0
Status: Planned
Dependencies: E17, E18, E19, E20, E21, E22
11.1 Outcome
The release meets its documented workflow, embedded build, dependency, boundary, presentation behaviour, limitation, and support-claim requirements.
The result is a completed v0.3.0 release whose evidence is strong enough to distinguish what was
build tested, what was runtime tested, and what remains architecture-preserved or deferred.
11.2 In scope
- final release gate over supported hosted compositions
- ESP-IDF build evidence for the selected firmware foundation target
- project command entrypoint verification
- dependency override evidence
- Core and component boundary evidence
- allocation-probe coverage evidence
- presentation behaviour evidence for
LIM-010 - support matrix update
- known limitation closure, narrowing, or follow-up links for release-scoped limitations
- release evidence record
- final consistency review across milestones, architecture, epics, PBIs, progress, bugs, and known limitations
11.3 Out of scope
- implementing missing feature work from earlier epics
- adding new release scope during hardening
- broad Windows verification without a real Windows environment or runner
- hardware runtime claims without executed hardware evidence
- production packaging, installers, firmware flashing workflow, or distribution automation
11.4 Completion criteria
- all required
v0.3.0PBIs are complete - the required release gate passes or every exception is explicitly accepted and recorded
- ESP-IDF build evidence names the exact target, toolchain, command, and result
- support claims match executed evidence
-
LIM-012,LIM-005,LIM-003, andLIM-010are closed, narrowed, or linked to explicit follow-up PBIs - no excluded runtime capability is claimed
- release evidence and rollover documentation are complete
11.5 Traceability
SPEC-NFR-001: portabilitySPEC-NFR-002: resource awarenessSPEC-NFR-006: maintainabilitySPEC-NFR-007: compatibility awarenessLIM-012,LIM-005,LIM-003,LIM-010arch-v0.3.0: sections 7.2, 8.7, 8.8, 10.3, 10.4, and 10.501-milestones.md: release v0.3.0 exit criteria
12. Crosscutting rules
The following rules apply to every epic:
- code and developer documentation use British English
- Core code uses ISO C99
- public domain identifiers use the
petprefix - no hidden global mutable world is introduced
- time and randomness remain explicit
- tests are implemented with the behaviour they verify
- invalid public input must not partially mutate authoritative state
- no frontend, adapter, storage, or networking dependency enters the Core
- implementation remains within the assigned epic and PBI scope
- deferred work is recorded instead of being hidden in comments
13. PBI preparation rules
The next planning document is 03-pbis.md.
PBIs derived from these epics must:
- belong to exactly one epic
- produce one reviewable outcome
- include explicit in scope and out of scope boundaries
- include testable acceptance criteria
- identify dependencies
- link to relevant architecture sections
- identify required verification commands or evidence
- avoid combining implementation, unrelated refactoring, and future feature work
A PBI set should cover its epic completely before later epic implementation PBIs are marked ready.