swarm repositories / source
aboutsummaryrefslogtreecommitdiff
path: root/docs/spec.md
diff options
context:
space:
mode:
authormain <main@swarm.moe>2026-03-20 20:14:50 -0400
committermain <main@swarm.moe>2026-03-20 20:14:50 -0400
commitbb92a05eb5446e07c6288e266bd06d7b5899eee5 (patch)
tree56846c754fdf7c89c4e090d18d8269a2ce9f53f7 /docs/spec.md
parent84e898d9ba699451d5d13fe384e7bbe220564bc1 (diff)
downloadlibmcp-bb92a05eb5446e07c6288e266bd06d7b5899eee5.zip
Add projection traits and doctrine testkit
Diffstat (limited to 'docs/spec.md')
-rw-r--r--docs/spec.md12
1 files changed, 12 insertions, 0 deletions
diff --git a/docs/spec.md b/docs/spec.md
index 80e464b..6d1f3c6 100644
--- a/docs/spec.md
+++ b/docs/spec.md
@@ -180,6 +180,8 @@ The library should therefore provide reusable primitives for:
- render mode selection
- detail selection
+- explicit projection traits separating domain records from model-facing output
+- derive-macro happy paths for concise/full projection structs
- bounded/truncated text shaping
- stable note emission
- path rendering
@@ -187,6 +189,16 @@ The library should therefore provide reusable primitives for:
- generic JSON-to-porcelain projection for consumers that have not yet earned
bespoke renderers
+The intended happy path is not “serialize whatever domain object you already
+have.” The intended happy path is:
+
+1. define a model-facing projection
+2. declare its surface policy
+3. render porcelain from that projection
+
+Consumers may still use generic JSON fallbacks, but they should feel like an
+explicit escape hatch rather than the primary design path.
+
`libmcp` standardizes only the minimal shared detail axis
`concise|full`. Consumers may add richer local taxonomies when their tool
surface actually needs them.