mem4sprint.schema_and_templates.md•11 kB
---
trigger: always_on
---
# --- mem4sprint Meta Schema and Starters (v1.0.0) ---
mem4sprint_meta:
version: "1.0.0"
notes:
- "This file defines entity shapes and allowed relations."
- "Use these for validation before writing to ConPort."
entities:
sprint_goal:
required: [content, sprint_id, status]
optional: [tags, provenance]
status_enum: [planned, active, blocked, done]
sprint_subtask:
required: [content, sprint_id, goal_id, status]
optional: [tags, provenance]
status_enum: [planned, active, blocked, done]
artifact:
required: [content, artifact_kind, status]
optional: [goal_id, sprint_id, tags, provenance]
artifact_kind_enum: [file, function, api, doc, dataset, run, env]
status_enum: [planned, active, blocked, done]
test:
required: [content, status]
optional: [sprint_id, goal_id, tags, provenance]
status_enum: [planned, active, blocked, done]
decision:
required: [summary]
optional: [rationale, tags, provenance]
relation:
required: [from_id, rel, to_id]
optional: [provenance, tags]
rel_enum: [BLOCKED_BY, IMPLEMENTS, VERIFIES, DEPENDS_ON, PRODUCES, CONSUMES, DERIVED_FROM, RELATED_TO, CLARIFIES, RESOLVES, TRACKS]
story:
required: [content, sprint_id, status]
optional: [acceptance_criteria, epic_id, tags, provenance]
status_enum: [planned, active, blocked, done]
epic:
required: [content, status]
optional: [tags, provenance]
status_enum: [planned, active, blocked, done]
acceptance_criteria:
required: [story_id, text]
optional: [status, tags, provenance]
status_enum: [pending, met, failed]
bug:
required: [content, status, severity]
optional: [sprint_id, tags, provenance]
status_enum: [open, in_progress, blocked, fixed, closed]
severity_enum: [low, medium, high, critical]
blocker:
required: [content, affects_id]
optional: [status, tags, provenance]
status_enum: [open, resolved]
risk:
required: [content, severity, likelihood]
optional: [mitigation, tags, provenance]
severity_enum: [low, medium, high]
likelihood_enum: [rare, possible, likely]
retrospective_item:
required: [content, kind]
optional: [action_owner, status, tags, provenance]
kind_enum: [keep_doing, stop_doing, start_doing, action]
status_enum: [open, done]
sprint_metric:
required: [sprint_id, name, value]
optional: [unit, notes, provenance]
rfc_doc:
required: [title, link_or_path]
optional: [status, tags, provenance]
literature_ref:
required: [title, link_or_path]
optional: [notes, tags, provenance]
validation:
id_uniqueness: true
relation_tuple_uniqueness: true
require_existing_nodes_for_edges: true
# --- FTS Query Rules ---
# Use ONLY the following prefixes with SQLite FTS5:
# custom_data_fts: category:, key:, value_text:
# decisions_fts: summary:, rationale:, implementation_details:, tags:
# If a term has special chars (., /, \\, ") or unknown prefixes, quote it as a literal and, for custom data,
# prefer value_text:"...". Examples:
# - value_text:"artifact_kind:doc"
# - summary:"S-2025.08"
# Canonical Categories: see mem4sprint.md. Use flat categories (artifacts, rfc_doc, literature_ref, retrospective, ProjectGlossary, critical_settings). Put subtype/kind in tags or value JSON.
# --- Starters (compact) ---
starters:
sprint_goal:
json: { type: sprint_goal, content: "<goal statement>", sprint_id: "S-YYYY.MM", status: planned, tags: [], provenance: { agent: planner, tool: mem4sprint, ts: "" } }
sprint_subtask:
json: { type: sprint_subtask, content: "<subtask description>", sprint_id: "S-YYYY.MM", goal_id: "<goal-id>", status: planned, tags: [], provenance: { agent: planner, tool: mem4sprint, ts: "" } }
artifact:
json: { type: artifact, content: "<artifact description>", artifact_kind: file, status: planned, goal_id: "<goal-id>", sprint_id: "S-YYYY.MM", tags: [], provenance: { agent: dev, tool: mem4sprint, ts: "" } }
test:
json: { type: test, content: "<test description or assertion>", status: planned, sprint_id: "S-YYYY.MM", goal_id: "<goal-id>", tags: [], provenance: { agent: qa, tool: mem4sprint, ts: "" } }
decision:
json: { type: decision, summary: "<concise decision summary>", rationale: "<why this decision>", tags: [mem4sprint], provenance: { agent: architect, tool: mem4sprint, ts: "" } }
relation:
json: { type: relation, content: "<relation summary>", from_id: "<source-id>", rel: BLOCKED_BY, to_id: "<target-id>", tags: [mem4sprint], provenance: { agent: system, tool: mem4sprint, ts: "" } }
story:
json: { type: story, content: "<story>", sprint_id: "S-YYYY.MM", status: planned, acceptance_criteria: [], tags: [], provenance: { agent: planner, tool: mem4sprint, ts: "" } }
epic:
json: { type: epic, content: "<epic>", status: planned, tags: [], provenance: { agent: architect, tool: mem4sprint, ts: "" } }
acceptance_criteria:
json: { type: acceptance_criteria, story_id: "<story-id>", text: "<criterion>", status: pending, tags: [], provenance: { agent: qa, tool: mem4sprint, ts: "" } }
bug:
json: { type: bug, content: "<bug description>", status: open, severity: medium, sprint_id: "S-YYYY.MM", tags: [], provenance: { agent: qa, tool: mem4sprint, ts: "" } }
blocker:
json: { type: blocker, content: "<blocker>", affects_id: "<entity-id>", status: open, tags: [], provenance: { agent: pm, tool: mem4sprint, ts: "" } }
risk:
json: { type: risk, content: "<risk>", severity: medium, likelihood: possible, mitigation: "<plan>", tags: [], provenance: { agent: architect, tool: mem4sprint, ts: "" } }
retrospective_item:
json: { type: retrospective_item, content: "<retro item>", kind: action, action_owner: "@dev", status: open, tags: [], provenance: { agent: facilitator, tool: mem4sprint, ts: "" } }
sprint_metric:
json:
type: sprint_metric
sprint_id: "S-YYYY.MM"
name: "velocity"
value: 0
unit: "points"
notes: ""
provenance: { agent: pm, tool: mem4sprint, ts: "" }
rfc_doc:
json:
type: rfc_doc
title: "<rfc title>"
link_or_path: "mdc:/tasks/rfc/<file>.md"
status: draft
tags: []
provenance: { agent: architect, tool: mem4sprint, ts: "" }
literature_ref:
json:
type: literature_ref
title: "<ref title>"
link_or_path: "<url|mdc:/docs/literature/file>"
notes: ""
tags: []
provenance: { agent: researcher, tool: mem4sprint, ts: "" }
# --- Minimal Routines (PLAN/ACT hooks) ---
routines:
PLAN:
- "Load recent contexts and goals; confirm sprint_id."
- "Derive plan; log decisions; set active_context.mode=PLAN."
- "Propose entities/relations using starters; await confirm before logging."
ACT:
- "Fetch active goal/subtasks; execute change."
- "Log progress, artifacts, tests; link via relations."
- "Update statuses; set active_context.mode=ACT."
# --- Relationships Diagram (Mermaid) ---
diagram:
mermaid: |
flowchart TD
G[sprint_goal]
ST[sprint_subtask]
S[story]
T[test]
A[artifact]
D[decision]
B[bug]
BL[blocker]
R[risk]
RFC[rfc_doc]
L[literature_ref]
RI[retrospective_item]
M[sprint_metric]
S -- IMPLEMENTS --> G
ST -- IMPLEMENTS --> S
T -- VERIFIES --> ST
ST -- PRODUCES --> A
A -- DERIVED_FROM --> L
RFC -- CLARIFIES --> D
B -- BLOCKED_BY --> BL
R -- RELATED_TO --> G
RI -- RESOLVES --> B
M -- TRACKS --> G
# --- Appendix: Operational Call Recipes ---
appendix_operational_call_recipes:
notes:
- "All calls require workspace_id set to the absolute workspace path."
- "IDs/keys shown as placeholders; replace with actual IDs."
canonical_mcp_call_recipes:
- name: "create_doc_artifact"
call: |
mcp0_log_custom_data({
workspace_id: "<ABS_PATH>",
category: "artifacts",
key: "<artifact-id>",
value: {
type: "artifact",
content: "<doc title>",
artifact_kind: "doc",
status: "planned|active|blocked|done",
sprint_id: "S-YYYY.MM",
tags: ["architecture"],
provenance: { agent: "dev", tool: "mem4sprint", ts: "" }
}
})
- name: "create_rfc"
call: |
mcp0_log_custom_data({ workspace_id: "<ABS_PATH>", category: "rfc_doc", key: "<rfc-id>", value: { title: "<title>", link_or_path: "mdc:/tasks/rfc/<file>.md", status: "draft", tags: ["rfc"], provenance: { agent: "architect", tool: "mem4sprint", ts: "" } } })
- name: "record_lesson_learned"
call: |
mcp0_log_custom_data({ workspace_id: "<ABS_PATH>", category: "retrospective", key: "<retro-id>", value: { type: "retrospective_item", content: "<lesson>", kind: "action|keep_doing|stop_doing|start_doing", status: "open|done", tags: ["lessons_learned"], provenance: { agent: "facilitator", tool: "mem4sprint", ts: "" } } })
- name: "update_active_context"
call: |
mcp0_update_active_context({ workspace_id: "<ABS_PATH>", patch_content: { mode: "PLAN|ACT", focus: "<focus>", sprint_id: "S-YYYY.MM" } })
- name: "link_doc_clarifies_decision"
call: |
mcp0_link_conport_items({ workspace_id: "<ABS_PATH>", relationship_type: "CLARIFIES", source_item_type: "custom_data", source_item_id: "<artifact-id>", target_item_type: "decision", target_item_id: "<decision-id>" })
- name: "fetch_requirements_architecture_plan"
calls: |
mcp0_search_custom_data_value_fts({ workspace_id: "<ABS_PATH>", query_term: "category:artifacts value_text:\"tag:requirements\"", limit: 5 })
mcp0_search_custom_data_value_fts({ workspace_id: "<ABS_PATH>", query_term: "category:artifacts value_text:\"tag:architecture\"", limit: 5 })
mcp0_search_custom_data_value_fts({ workspace_id: "<ABS_PATH>", query_term: "category:artifacts value_text:\"tag:sprint_plan\" value_text:\"sprint_id:S-YYYY.MM\"", limit: 5 })
- name: "query_docs_by_tag"
call: |
mcp0_search_custom_data_value_fts({
workspace_id: "<ABS_PATH>",
query_term: "category:artifacts value_text:\"tag:architecture\"",
limit: 10
})
- name: "fetch_top_recent_decisions_for_sprint"
calls: |
mcp0_search_decisions_fts({ workspace_id: "<ABS_PATH>", query_term: "tags:\"S-YYYY.MM\"", limit: 5 })
public_docs_policy_calls:
- name: "draft_quickstart_minimal"
call: |
mcp0_log_custom_data({ workspace_id: "<ABS_PATH>", category: "artifacts", key: "quickstart", value: { artifact_kind: "doc", title: "Quickstart", tags: ["public_doc","quickstart"], visibility: "public", publish_status: "DRAFT" } })