refactor: unify builtin template note storage between local and cloud
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 45/100
Research direction
Start by reading sdpm.api.list_templates_with_metadata, mcp-server/tools/template.py, storage.get_builtin_template_notes(), and the PATCH /api/templates/builtin/[name] route, then trace how state.json stores template_metadata. Done means local notes use a dedicated template_notes section with a one-time migration, consumers or the engine merge notes explicitly, and the legacy fallback remains for one minor version.
Written by the indexing model from the issue text.
Description
Background
Per-user notes on builtin templates were added in #204 (cloud) and extended to local mode + L1 CLI in #209. The two paths ended up with structurally different data models for the same concept:
| Cloud (L3/L4) | Local (L1/L2/local Web UI) | |
|---|---|---|
| Storage | DDB item BUILTIN_NOTE#<name> per user — first-class entity |
state.json → template_metadata["builtin:<name>"].description — field inside the analysis-cache entry |
| Merge point | Tool layer (mcp-server/tools/template.py + storage.get_builtin_template_notes()) |
Engine (sdpm.api.list_templates_with_metadata knows the builtin: key convention) |
Why this is debt
- User data and regenerable cache share one entry in local state.json. Clearing the analysis cache risks wiping user notes; every writer must carefully preserve
description(see thePATCH /api/templates/builtin/[name]route). - Inverted dependency: the
builtin:key convention originated in the local Web UI listing route; the engine now follows a consumer's convention (vs. "Engine is source of truth"). - Asymmetry trap: the cloud path does not use
list_templates_with_metadataat all. Anyone consolidating L3 onto the engine could silently break note resolution. (Documented in the engine docstring since #209, but documentation is a mitigation, not a fix.)
Proposed direction
- Move local notes to a dedicated
template_notessection instate.json(mirroring the cloud separation), with a one-time migration fromtemplate_metadata["builtin:<name>"].description. - Have consumers merge notes at their layer (like cloud does), or pass notes to the engine as an explicit parameter — removing the
builtin:/plain dual-key lookup fromlist_templates_with_metadata. - Keep the legacy fallback for one minor version, then drop it (pre-1.0).
Non-goals
- No cloud-side changes — the DDB
BUILTIN_NOTE#model is the reference design. - No behavior change for end users.
Refs: #166, #204, #209
- Dominant language
- Python
- Stars
- 130
- Forks
- 10
- Avg merge
- 4h 31m
- Merged PRs (30d)
- 58
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from aws-samples/sample-spec-driven-presentation-maker
-
enhancement
Difficulty 4/5 3-5 days Newbie friendliness 48/100
aws-samples/sample-spec-driven-presentation-maker#301 ·
Maintainers usually reply within 1 day
-
Difficulty 3/5 1-2 days Newbie friendliness 72/100
aws-samples/sample-spec-driven-presentation-maker#174 ·
Maintainers usually reply within 1 day
-
enhancement
Difficulty 5/5 Over a week Newbie friendliness 25/100
aws-samples/sample-spec-driven-presentation-maker#161 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 3/5 1-2 days Newbie friendliness 38/100
aws-samples/sample-spec-driven-presentation-maker#143 ·
Maintainers usually reply within 1 day
-
bug enhancement
Difficulty 3/5 1-2 days Newbie friendliness 68/100
aws-samples/sample-spec-driven-presentation-maker#135 ·
Maintainers usually reply within 1 day
All issues in aws-samples/sample-spec-driven-presentation-maker
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
cellrishi-code/claude-skills-atlas#165 ·
Maintainers usually reply within 1 day
-
bug confirmed issue
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
open-webui/open-webui#32635 · 1 comment ·
Maintainers usually reply within 1 day
-
Filters: ?field:ne=null matches NULL rows instead of non-NULL onesPossibly taken @rshdhere claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Netflix/metaflow-service#504 ·
-
needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
gke-labs/kube-agents#3394 ·
Maintainers usually reply within 1 day
-
A2A audit timestamps end in +00:00Z (invalid ISO 8601)Possibly taken @O1sumitkumar claimed this today. Openbug good first issue help wanted python
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day