53 lines
2.3 KiB
Markdown
53 lines
2.3 KiB
Markdown
|
|
# Sprint 267 — GR-025/026: Platform SemAnno Annotation Family
|
|||
|
|
|
|||
|
|
## Goals
|
|||
|
|
|
|||
|
|
Add a `@platform.*` annotation family to the Whetstone SemAnno system so the
|
|||
|
|
projector can distinguish pure logic nodes from platform-specific I/O boundaries.
|
|||
|
|
This unblocks cross-platform projection (Python→Kotlin, Python→Swift, etc.).
|
|||
|
|
|
|||
|
|
Two sub-goals, sequenced:
|
|||
|
|
|
|||
|
|
**GR-025**: Add annotation classes, emitter, parser, visitor dispatch.
|
|||
|
|
**GR-026**: Add a platform profile registry that maps `@platform.*` tags to
|
|||
|
|
target-SDK API substitutions. Provide two built-in profiles:
|
|||
|
|
`python-stdlib` and `android-kotlin`.
|
|||
|
|
|
|||
|
|
## Constraints
|
|||
|
|
|
|||
|
|
- New annotation classes go in `editor/src/ast/Annotation.h` — no new files for
|
|||
|
|
annotation types.
|
|||
|
|
- Emitter cases added to `editor/src/semanno/SemannoEmitterBody.h`.
|
|||
|
|
- Parser cases added to `editor/src/semanno/SemannoParserSection.h`.
|
|||
|
|
- Visitor pure-virtuals added to `editor/src/ast/AnnotationVisitors.h`.
|
|||
|
|
- Default implementations added to `editor/src/SemannoAnnotationImpl.h` (CRTP mixin).
|
|||
|
|
- Dispatch cases added to `editor/src/ast/ProjectionGenerator.h`.
|
|||
|
|
- Platform profile registry: new file `editor/src/PlatformProfileRegistry.h`,
|
|||
|
|
≤ 300 lines, JSON-driven, ships two built-in profiles.
|
|||
|
|
- All headers must stay ≤ 600 lines. `Annotation.h` is currently ~550 lines;
|
|||
|
|
add new classes at the end in a new section.
|
|||
|
|
- No changes to CMakeLists needed (header-only additions).
|
|||
|
|
- TDD: write step tests (step1863–step1867) before implementing.
|
|||
|
|
|
|||
|
|
## Acceptance Criteria
|
|||
|
|
|
|||
|
|
AC-1: Five new annotation classes exist and construct correctly:
|
|||
|
|
`PureLogicAnnotation`, `PlatformStorageAnnotation`, `PlatformCryptoAnnotation`,
|
|||
|
|
`PlatformNetworkAnnotation`, `PlatformOsAnnotation`.
|
|||
|
|
|
|||
|
|
AC-2: SemannoEmitter emits each as `@semanno:pure.logic()`,
|
|||
|
|
`@semanno:platform.storage(adapter="sqlite3")`, etc.
|
|||
|
|
|
|||
|
|
AC-3: SemannoParser parses those strings back to the correct annotation class
|
|||
|
|
with the `adapter` field populated.
|
|||
|
|
|
|||
|
|
AC-4: All five visitor methods are dispatched through ProjectionGenerator and
|
|||
|
|
handled by SemannoAnnotationImpl (emitting the semanno comment via the
|
|||
|
|
language-specific comment prefix).
|
|||
|
|
|
|||
|
|
AC-5 (GR-026): `PlatformProfileRegistry` loads built-in profiles and resolves
|
|||
|
|
a `@platform.storage` annotation on `python-stdlib` to `"sqlite3"` and on
|
|||
|
|
`android-kotlin` to `"androidx.room.RoomDatabase"`.
|
|||
|
|
|
|||
|
|
AC-6: All existing step tests continue to pass (no regressions).
|